BERA Price: $3.66 (-0.60%)

Contract

0x8B25b0e0040130769817326Ec5Be22ed74bD492D

Overview

BERA Balance

Berachain LogoBerachain LogoBerachain Logo0 BERA

BERA Value

$0.00

Multichain Info

No addresses found
Amount:Between 1-1k
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OffchainOracle

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at berascan.com on 2025-04-22
*/

// SPDX-License-Identifier: No

pragma solidity 0.8.24;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

library Sqrt {
    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 IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// ver 1 ==> For Uniswap v1
interface IUniswapV1 {
    function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 );
}
// ver 2 ==> For Uniswap v2, Quickswap v2, Sushiswap v2, pancakeswap v2    
interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 22 ==> For Meshswap
interface IMeshswapPool {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function reserve0() external view returns (uint112);
    function reserve1() external view returns (uint112);
}
// ver 23 ==> For Kyber swap
interface IKyberDmmPool {
    function getTradeInfo() external view returns (uint112 reserve0, uint112 reserve1, uint112 _vReserve0, uint112 _vReserve1, uint256 feeInPrecision);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 3 ==> For Uniswap v3, Sushiswap v3, Pancakeswap v3, Solidly v3
interface IUniswapV3Pool {
    function slot0() external view returns (uint160 sqrtPriceX96);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 4 ==> For Quickswap v3
interface IAlgebraPool {
    function globalState() external view returns (uint160 price);
    function token0() external view returns (address);
    function token1() external view returns (address);
}

// ver: 621 ==> For Balancer v2: weighted pool
interface IWeightedPoolV2 {
    function getVault() external view returns (address);
    function getPoolId() external view returns (bytes32);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// ver: 622 ==> For Balancer v2: stable pool 
interface IStablePoolV2 {
    function getVault() external view returns (address);
    function getTokenRate(address) external view returns (uint256);
}
// ver: 623 For Balancer v2: Gyro E-CLP pool
interface IGyroECLPPoolV2 {
    function getVault() external view returns (address);
    function getPoolId() external view returns (bytes32);
    function getPrice() external view returns (uint256);
}
// ver: 621,622,623 ==> For Balancer v2: vault
interface IVaultV2 {
    function getPoolTokens(bytes32 poolId) external view returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock);
}
// ver: 631 ==> For Balancer v3: weighted pool
interface IWeightedPoolV3 {
    function getVault() external view returns (address);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// ver: 632 ==> For Balancer v3: stable pool 
interface IStablePoolV3 {
    function getVault() external view returns (address);
}
// ver: 633 For Balancer v3: Gyro E-CLP pool
interface IGyroECLPPoolV3 {
    function getVault() external view returns (address);
}
// ver: 631,632,633 ==> For Balancer v3: vault
interface IVaultV3 {
    function getPoolTokens(address pool) external view returns (address[] memory tokens);
    function getCurrentLiveBalances(address) external view returns (uint256[] memory balances);
    function getPoolTokenRates(address) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);
}
// ver 7,71,72,73,74,75 ==> For Traderjoe V2.2
interface ITraderjoeV2_2Pool {
    function getSwapOut(uint128 amountIn, bool swapForY) external view returns (uint128 amountInLeft, uint128 amountOut, uint128 fee);
    function getTokenX() external view returns (address);
    function getTokenY() external view returns (address);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveProvider {
    function get_address (uint256 _id) external view returns (address);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveMetaregistry {
    //function find_pools_for_coins(address srcToken, address dstToken) external view returns (address[] memory);
    function get_coin_indices(address _pool, address _from, address _to) external view returns (int128, int128, bool);
    //function get_underlying_balances(address _pool) external view returns (uint256[8] memory);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurvePool {
    function allowed_extra_profit() external view returns (uint256);
    function get_rate_mul() external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveStableSwapMeta {
    function get_dy_underlying(int128,int128,uint256) external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveStableSwap {
    function get_dy(int128,int128,uint256) external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveCryptoSwap {
    function get_dy(uint256,uint256,uint256) external view returns (uint256);
}
// ver 9,91,92,93,94,95 ==> For Dodoex V2 DVM & DSP
interface IDodoDVM {
    function _BASE_TOKEN_() external view returns (address);
    function _QUOTE_TOKEN_() external view returns (address);
    function querySellBase(address trader, uint256 payBaseAmount) external view returns (uint256 receiveQuoteAmount, uint256 mtFee);
    function querySellQuote(address trader, uint256 payQuoteAmount) external view returns (uint256 receiveBaseAmount, uint256 mtFee);
}

contract OffchainOracle {
    using SafeMath for uint256;
    using SafeMath for uint112;
    using SafeMath for uint128;
    using Sqrt for uint256;
    address private constant _ETH                              = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address private constant _curveAddressProvider             = 0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98;
    address private constant _curveAddressProviderForZksync    = 0x54A5a69e17Aa6eB89d77aa3828E38C9Eb4fF263D;
    function _getCurvePoolType(address pool) private view returns (uint8) {
        // 0 for stableswap, 1 for cryptoswap, 2 for LLAMMA.

        // check if cryptoswap
        (bool success, bytes memory data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.allowed_extra_profit.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 1;
        }

        // check if llamma
        (success, data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.get_rate_mul.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 2;
        }

        return 0;
    }
    function _getAmountIn(uint32 _ver, uint8 _decimalsFrom) private pure returns (uint256) {
        uint8 num = 4;
        if(_ver == 7 || _ver == 8 || _ver == 9) {
            num = 4;
        }
        if(_ver == 71 || _ver == 81 || _ver == 91) {
            num = 0;
        }
        if(_ver == 72 || _ver == 82 || _ver == 92) {
            num = 2;
        }
        if(_ver == 73 || _ver == 83 || _ver == 93) {
            num = 6;
        }
        if(_ver == 74 || _ver == 84 || _ver == 94) {
            num = 8;
        }
        if(_ver == 75 || _ver == 85 || _ver == 95) {
            num = 10;
        }
        uint256 amountIn = 10**(_decimalsFrom + num - 4);
        return amountIn;
    }

    function getRate(address tokenFrom, address tokenTo, address poolAddress, uint32 ver) external view returns (uint256 rate, uint8 decimalsFrom, uint8 decimalsTo) {
        if(ver == 2 || ver == 22 || ver == 23) {
            address token0;
            address token1;
            uint256 reserve0;
            uint256 reserve1;
            // version = 2 : Uniswap V2 like
            if(ver == 2) {
                token0 = IUniswapV2Pair(poolAddress).token0();
                token1 = IUniswapV2Pair(poolAddress).token1();
                (reserve0, reserve1,) = IUniswapV2Pair(poolAddress).getReserves(); 
            }
            // version = 22 : Meshswap
            else if(ver == 22) {
                token0 = IMeshswapPool(poolAddress).token0();
                token1 = IMeshswapPool(poolAddress).token1();
                reserve0 = IMeshswapPool(poolAddress).reserve0();
                reserve1 = IMeshswapPool(poolAddress).reserve1();
            }
            // version = 23 : Kyber swap
            else if(ver == 23) {
                token0 = IKyberDmmPool(poolAddress).token0();
                token1 = IKyberDmmPool(poolAddress).token1();
                (,, reserve0, reserve1,) = IKyberDmmPool(poolAddress).getTradeInfo();
            }
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = reserve1.mul(1e18).div(reserve0);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = reserve0.mul(1e18).div(reserve1);
            }
        }
        // version = 1 : Uniswap V1
        else if(ver == 1) {
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = 18;
            rate = IUniswapV1(poolAddress).getTokenToEthInputPrice(10**decimalsFrom);
        }
        // version = 3 : Uniswap V3
        else if(ver == 3) {
            address token0 = IUniswapV3Pool(poolAddress).token0();
            address token1 = IUniswapV3Pool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IUniswapV3Pool(poolAddress).slot0();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        } 
        // version = 4 : QuickSwap V3
        else if(ver == 4) {
            address token0 = IAlgebraPool(poolAddress).token0();
            address token1 = IAlgebraPool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IAlgebraPool(poolAddress).globalState();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        }
        // version = 621 : balancer v2 weighted pool
        else if(ver == 621) {
            address vaultAddress = IWeightedPoolV2(poolAddress).getVault();
            bytes32 poolId = IWeightedPoolV2(poolAddress).getPoolId();
            (uint256[] memory weights) = IWeightedPoolV2(poolAddress).getNormalizedWeights();
            (address[] memory tokens, uint256[] memory balances,) = IVaultV2(vaultAddress).getPoolTokens(poolId);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = IERC20Metadata(tokenTo).decimals();
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
        }
        // version = 622 : balancer v2 stable pool
        else if(ver == 622) {
            uint256 rateFrom = IStablePoolV2(poolAddress).getTokenRate(tokenFrom);
            uint256 rateTo = IStablePoolV2(poolAddress).getTokenRate(tokenTo);
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 623 : balancer v2 Gyro E-CLP pool
        else if(ver == 623) {
            rate = IGyroECLPPoolV2(poolAddress).getPrice();
            address vaultAddress = IGyroECLPPoolV2(poolAddress).getVault();
            bytes32 poolId = IGyroECLPPoolV2(poolAddress).getPoolId();
            (address[] memory tokens, ,) = IVaultV2(vaultAddress).getPoolTokens(poolId);
            if(tokens[0] == tokenTo) {
                rate = (1e36) / rate;
            }
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 631 : balancer v3 weighted pool
        else if(ver == 631) {
            address vaultAddress = IWeightedPoolV3(poolAddress).getVault();
            (uint256[] memory weights) = IWeightedPoolV3(poolAddress).getNormalizedWeights();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (uint256[] memory balances) = IVaultV3(vaultAddress).getCurrentLiveBalances(poolAddress);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 632 : balancer v3 stable pool
        else if(ver == 632) {
            address vaultAddress = IStablePoolV3(poolAddress).getVault();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (, uint256[] memory tokenRates) = IVaultV3(vaultAddress).getPoolTokenRates(poolAddress); 
            uint256 rateFrom = 1;
            uint256 rateTo = 1;
            for(uint8 i = 0; i < tokens.length; i++ ) {
                if(tokenFrom == tokens[i]) {
                    rateFrom = tokenRates[i];
                }
                if(tokenTo == tokens[i]) {
                    rateTo = tokenRates[i];
                }
            }
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 633 : balancer v2 Gyro E-CLP pool
        else if(ver == 633) {
             address vaultAddress = IGyroECLPPoolV3(poolAddress).getVault();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (, uint256[] memory tokenRates) = IVaultV3(vaultAddress).getPoolTokenRates(poolAddress); 
            uint256 rateFrom = 1;
            uint256 rateTo = 1;
            for(uint8 i = 0; i < tokens.length; i++ ) {
                if(tokenFrom == tokens[i]) {
                    rateFrom = tokenRates[i];
                }
                if(tokenTo == tokens[i]) {
                    rateTo = tokenRates[i];
                }
            }
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 7 : Traderjoe V2.2 with sell = 1 
        // (ver=71 : sell=10^(-4)) 
        // (ver=72 : sell=10^(-2)) 
        // (ver=73 : sell=10^(2)) 
        // (ver=74 : sell=10^(4)) 
        // (ver=75 : sell=10^(6)) 
        else if(ver == 7 || ver == 71 || ver == 72 || ver == 73 || ver == 74 || ver == 75) {
            address token0 = ITraderjoeV2_2Pool(poolAddress).getTokenX();
            address token1 = ITraderjoeV2_2Pool(poolAddress).getTokenY();

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                uint128 amountIn = uint128(_getAmountIn(ver, decimalsFrom));
                (, uint128 amountOut, ) = ITraderjoeV2_2Pool(poolAddress).getSwapOut(amountIn, true);
                rate = amountOut.mul(1e18).div(amountIn);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                uint128 amountIn = uint128(_getAmountIn(ver, decimalsFrom));
                (, uint128 amountOut, ) = ITraderjoeV2_2Pool(poolAddress).getSwapOut(amountIn, false);
                rate = amountOut.mul(1e18).div(amountIn);
            }
        }
        // version = 8 : Curve CryptoSwap, StableSwap, StableSwapMeta sell = 1 
        // (ver=81 : sell=10^(-4)) 
        // (ver=82 : sell=10^(-2)) 
        // (ver=83 : sell=10^(2)) 
        // (ver=84 : sell=10^(4)) 
        // (ver=85 : sell=10^(6)) 
        else if(ver == 8 || ver == 81 || ver == 82 || ver == 83 || ver == 84 || ver == 85) {
            ICurveProvider curveProvider;
            if(block.chainid == 324) {
                curveProvider = ICurveProvider(_curveAddressProviderForZksync);
            } else {
                curveProvider = ICurveProvider(_curveAddressProvider);
            }
            ICurveMetaregistry curveMetaregistry = ICurveMetaregistry(curveProvider.get_address(7));
            int128 i;
            int128 j;
            bool isUnderlying = false;
            (i, j, isUnderlying) = curveMetaregistry.get_coin_indices(poolAddress, tokenFrom, tokenTo);
            uint8 poolType = _getCurvePoolType(poolAddress);
            bytes4 selector;
            if (poolType == 0 && isUnderlying) {
                selector = ICurveStableSwapMeta.get_dy_underlying.selector;
            } else if (poolType == 0 && !isUnderlying) {
                selector = ICurveStableSwap.get_dy.selector;
            } else {
                selector = ICurveCryptoSwap.get_dy.selector;
            }
            
            if(tokenFrom == _ETH) {
                decimalsFrom = 18;
            } else {
                decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            }
            if(tokenTo == _ETH) {
                decimalsTo = 18;
            } else {
                decimalsTo = IERC20Metadata(tokenTo).decimals();
            }
            uint256 amountIn = _getAmountIn(ver, decimalsFrom);
            
            (bool success, bytes memory data) = poolAddress.staticcall(abi.encodeWithSelector(selector, uint128(i), uint128(j), amountIn));
            if (success && data.length >= 32) { // vyper could return redundant bytes
                uint256 amountOut = abi.decode(data, (uint256));
                if (amountOut > 0) {
                    //rate = amountOut * 1e18 / amountIn;
                    rate = amountOut.mul(1e18).div(amountIn);
                }
            }
        }
        // version = 9 : Dodoex v2 DVM & DSP with sell = 1 
        // (ver=91 : sell=10^(-4)) 
        // (ver=92 : sell=10^(-2)) 
        // (ver=93 : sell=10^(2)) 
        // (ver=94 : sell=10^(4)) 
        // (ver=95 : sell=10^(6)) 
        else if(ver == 9 || ver == 91 || ver == 92 || ver == 93 || ver == 94 || ver == 95) {
            address token0 = IDodoDVM(poolAddress)._BASE_TOKEN_();
            address token1 = IDodoDVM(poolAddress)._QUOTE_TOKEN_();

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveQuoteAmount, ) = IDodoDVM(poolAddress).querySellBase(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveQuoteAmount.mul(1e18).div(amountIn);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveBaseAmount, ) = IDodoDVM(poolAddress).querySellQuote(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveBaseAmount.mul(1e18).div(amountIn);
            }
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint32","name":"ver","type":"uint32"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint8","name":"decimalsFrom","type":"uint8"},{"internalType":"uint8","name":"decimalsTo","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b5061452f8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906135fb565b61005f565b60405161005693929190613692565b60405180910390f35b5f805f60028463ffffffff16148061007d575060168463ffffffff16145b8061008e575060178463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011291906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018191906136db565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f0919061375d565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60168863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f91906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e91906136db565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d91906137ad565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc91906137ad565b6dffffffffffffffffffffffffffff1690506105a6565b60178863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e91906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd91906136db565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c9190613802565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064791906138a3565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b691906138a3565b94506106e5826106d7670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075991906138a3565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c891906138a3565b94506107f7816107e9670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b96505b50505050613112565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e91906138a3565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad9190613a2a565b6040518263ffffffff1660e01b81526004016108c99190613a74565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190613a8d565b9250613111565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb91906136db565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190613ae2565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2391906138a3565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9291906138a3565b9350606081606083670de0b6b3a7640000610bad9190613b0d565b901c610bb99190613b0d565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f91906138a3565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e91906138a3565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190613b7b565b610cd79190613b7b565b95505b505050613110565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136db565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613ae2565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef691906138a3565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6591906138a3565b9350606081606083670de0b6b3a7640000610f809190613b0d565b901c610f8c9190613b0d565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100291906138a3565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107191906138a3565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190613b7b565b6110aa9190613b7b565b95505b50505061310f565b61026d8463ffffffff160361154a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113291906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a29190613bde565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ed573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112159190613d59565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004016112529190613daf565b5f60405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112949190613e88565b50915091505f805f5b84518160ff161015611430578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112d6576112d5613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361136357611360868260ff168151811061131257611311613f10565b5b6020026020010151611352670de0b6b3a7640000878560ff168151811061133c5761133b613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106113905761138f613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361141d5761141a868260ff16815181106113cc576113cb613f10565b5b602002602001015161140c670de0b6b3a7640000878560ff16815181106113f6576113f5613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b91505b808061142890613f3d565b91505061129d565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e91906138a3565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906138a3565b975061153c8261152e670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b99505050505050505061310e565b61026e8463ffffffff160361168d575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b81526004016115939190613f74565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d29190613a8d565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b815260040161160e9190613f74565b602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613a8d565b905061167c8161166e670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b94506012935060129250505061310d565b61026f8463ffffffff16036118e6578473ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117099190613a8d565b92505f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177991906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190613bde565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016118259190613daf565b5f60405180830381865afa15801561183f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118679190613e88565b505090508873ffffffffffffffffffffffffffffffffffffffff16815f8151811061189557611894613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036118d657856ec097ce7bc90715b34b9f10000000006118d39190613b7b565b95505b601294506012935050505061310c565b6102778463ffffffff1603611cae575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196391906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119ae573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906119d69190613d59565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663ca4f2803896040518263ffffffff1660e01b8152600401611a129190613f74565b5f60405180830381865afa158015611a2c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a549190613f8d565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663535cfd8a8a6040518263ffffffff1660e01b8152600401611a909190613f74565b5f60405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad29190613d59565b90505f805f5b84518160ff161015611c6b578d73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611b1157611b10613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611b9e57611b9b868260ff1681518110611b4d57611b4c613f10565b5b6020026020010151611b8d670de0b6b3a7640000878560ff1681518110611b7757611b76613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b92505b8c73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611bcb57611bca613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611c5857611c55868260ff1681518110611c0757611c06613f10565b5b6020026020010151611c47670de0b6b3a7640000878560ff1681518110611c3157611c30613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b91505b8080611c6390613f3d565b915050611ad8565b50611c9982611c8b670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b9850601297506012965050505050505061310b565b6102788463ffffffff1603611f79575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2b91906136db565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401611d679190613f74565b5f60405180830381865afa158015611d81573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611da99190613f8d565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401611de59190613f74565b5f60405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611e279190613fd4565b9150505f600190505f600190505f5b84518160ff161015611f3757848160ff1681518110611e5857611e57613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603611eb357838160ff1681518110611ea857611ea7613f10565b5b602002602001015192505b848160ff1681518110611ec957611ec8613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603611f2457838160ff1681518110611f1957611f18613f10565b5b602002602001015191505b8080611f2f90613f3d565b915050611e36565b50611f6581611f57670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b97506012965060129550505050505061310a565b6102798463ffffffff1603612244575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff691906136db565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b81526004016120329190613f74565b5f60405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120749190613f8d565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b81526004016120b09190613f74565b5f60405180830381865afa1580156120ca573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120f29190613fd4565b9150505f600190505f600190505f5b84518160ff16101561220257848160ff168151811061212357612122613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361217e57838160ff168151811061217357612172613f10565b5b602002602001015192505b848160ff168151811061219457612193613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16036121ef57838160ff16815181106121e4576121e3613f10565b5b602002602001015191505b80806121fa90613f3d565b915050612101565b5061223081612222670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b975060129650601295505050505050613109565b60078463ffffffff16148061225f575060478463ffffffff16145b80612270575060488463ffffffff16145b80612281575060498463ffffffff16145b806122925750604a8463ffffffff16145b806122a35750604b8463ffffffff16145b15612747575f8573ffffffffffffffffffffffffffffffffffffffff166305e8746d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231691906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663da10610c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612362573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238691906136db565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612580578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612404573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061242891906138a3565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612473573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249791906138a3565b92505f6124a487866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f88360016040518363ffffffff1660e01b81526004016124e392919061408e565b606060405180830381865afa1580156124fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252291906140df565b50915050612577826fffffffffffffffffffffffffffffffff16612569670de0b6b3a7640000846fffffffffffffffffffffffffffffffff1661311c90919063ffffffff16565b61319390919063ffffffff16565b96505050612740565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed91906138a3565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265c91906138a3565b92505f61266987866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f8835f6040518363ffffffff1660e01b81526004016126a792919061408e565b606060405180830381865afa1580156126c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e691906140df565b5091505061273b826fffffffffffffffffffffffffffffffff1661272d670de0b6b3a7640000846fffffffffffffffffffffffffffffffff1661311c90919063ffffffff16565b61319390919063ffffffff16565b965050505b5050613108565b60088463ffffffff161480612762575060518463ffffffff16145b80612773575060528463ffffffff16145b80612784575060538463ffffffff16145b80612795575060548463ffffffff16145b806127a6575060558463ffffffff16145b15612c2c575f61014446036127d1577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506127e9565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016128249190614171565b602060405180830381865afa15801561283f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286391906136db565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b81526004016128a59392919061418a565b606060405180830381865afa1580156128c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e4919061421f565b8093508194508295505050505f6128fa8b613365565b90505f808260ff1614801561290c5750825b15612920576307211ef760e01b9050612950565b5f8260ff16148015612930575082155b1561294457635e0d443f60e01b905061294f565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff16036129a05760129850612a10565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0d91906138a3565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603612a605760129750612ad0565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612acd91906138a3565b97505b5f612adb8c8b6131ea565b90505f808e73ffffffffffffffffffffffffffffffffffffffff1684898986604051602401612b0c9392919061426f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612b769190614310565b5f60405180830381855afa9150503d805f8114612bae576040519150601f19603f3d011682016040523d82523d5f602084013e612bb3565b606091505b5091509150818015612bc757506020815110155b15612c1d575f81806020019051810190612be19190613a8d565b90505f811115612c1b57612c1884612c0a670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b9d505b505b50505050505050505050613107565b60098463ffffffff161480612c475750605b8463ffffffff16145b80612c585750605c8463ffffffff16145b80612c695750605d8463ffffffff16145b80612c7a5750605e8463ffffffff16145b80612c8b5750605f8463ffffffff16145b15613106575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cfe91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6e91906136db565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612f55578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e1091906138a3565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e7f91906138a3565b92505f612e8c87866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401612ede929190614326565b6040805180830381865afa158015612ef8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1c919061434d565b509050612f4c82612f3e670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b96505050613103565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fc291906138a3565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061303191906138a3565b92505f61303e87866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401613090929190614326565b6040805180830381865afa1580156130aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ce919061434d565b5090506130fe826130f0670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b965050505b50505b5b5b5b5b5b5b5b5b5b5b5b5b9450945094915050565b5f80830361312c575f905061318d565b5f82846131399190613b0d565b90508284826131489190613b7b565b14613188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317f9061440b565b60405180910390fd5b809150505b92915050565b5f8082116131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd90614473565b60405180910390fd5b81836131e29190613b7b565b905092915050565b5f806004905060078463ffffffff16148061320b575060088463ffffffff16145b8061321c575060098463ffffffff16145b1561322657600490505b60478463ffffffff161480613241575060518463ffffffff16145b806132525750605b8463ffffffff16145b1561325b575f90505b60488463ffffffff161480613276575060528463ffffffff16145b806132875750605c8463ffffffff16145b1561329157600290505b60498463ffffffff1614806132ac575060538463ffffffff16145b806132bd5750605d8463ffffffff16145b156132c757600690505b604a8463ffffffff1614806132e2575060548463ffffffff16145b806132f35750605e8463ffffffff16145b156132fd57600890505b604b8463ffffffff161480613318575060558463ffffffff16145b806133295750605f8463ffffffff16145b1561333357600a90505b5f600482856133429190614491565b61334c91906144c5565b600a6133589190613a2a565b9050809250505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516133f79190614310565b5f60405180830381855afa9150503d805f811461342f576040519150601f19603f3d011682016040523d82523d5f602084013e613434565b606091505b509150915081801561344857506020815110155b1561345857600192505050613552565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516134e79190614310565b5f60405180830381855afa9150503d805f811461351f576040519150601f19603f3d011682016040523d82523d5f602084013e613524565b606091505b50809250819350505081801561353c57506020815110155b1561354c57600292505050613552565b5f925050505b919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61359182613568565b9050919050565b6135a181613587565b81146135ab575f80fd5b50565b5f813590506135bc81613598565b92915050565b5f63ffffffff82169050919050565b6135da816135c2565b81146135e4575f80fd5b50565b5f813590506135f5816135d1565b92915050565b5f805f806080858703121561361357613612613560565b5b5f613620878288016135ae565b9450506020613631878288016135ae565b9350506040613642878288016135ae565b9250506060613653878288016135e7565b91505092959194509250565b5f819050919050565b6136718161365f565b82525050565b5f60ff82169050919050565b61368c81613677565b82525050565b5f6060820190506136a55f830186613668565b6136b26020830185613683565b6136bf6040830184613683565b949350505050565b5f815190506136d581613598565b92915050565b5f602082840312156136f0576136ef613560565b5b5f6136fd848285016136c7565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b61372881613706565b8114613732575f80fd5b50565b5f815190506137438161371f565b92915050565b5f81519050613757816135d1565b92915050565b5f805f6060848603121561377457613773613560565b5b5f61378186828701613735565b935050602061379286828701613735565b92505060406137a386828701613749565b9150509250925092565b5f602082840312156137c2576137c1613560565b5b5f6137cf84828501613735565b91505092915050565b6137e18161365f565b81146137eb575f80fd5b50565b5f815190506137fc816137d8565b92915050565b5f805f805f60a0868803121561381b5761381a613560565b5b5f61382888828901613735565b955050602061383988828901613735565b945050604061384a88828901613735565b935050606061385b88828901613735565b925050608061386c888289016137ee565b9150509295509295909350565b61388281613677565b811461388c575f80fd5b50565b5f8151905061389d81613879565b92915050565b5f602082840312156138b8576138b7613560565b5b5f6138c58482850161388f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156139505780860481111561392c5761392b6138ce565b5b600185161561393b5780820291505b8081029050613949856138fb565b9450613910565b94509492505050565b5f826139685760019050613a23565b81613975575f9050613a23565b816001811461398b5760028114613995576139c4565b6001915050613a23565b60ff8411156139a7576139a66138ce565b5b8360020a9150848211156139be576139bd6138ce565b5b50613a23565b5060208310610133831016604e8410600b84101617156139f95782820a9050838111156139f4576139f36138ce565b5b613a23565b613a068484846001613907565b92509050818404811115613a1d57613a1c6138ce565b5b81810290505b9392505050565b5f613a348261365f565b9150613a3f83613677565b9250613a6c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613959565b905092915050565b5f602082019050613a875f830184613668565b92915050565b5f60208284031215613aa257613aa1613560565b5b5f613aaf848285016137ee565b91505092915050565b613ac181613568565b8114613acb575f80fd5b50565b5f81519050613adc81613ab8565b92915050565b5f60208284031215613af757613af6613560565b5b5f613b0484828501613ace565b91505092915050565b5f613b178261365f565b9150613b228361365f565b9250828202613b308161365f565b91508282048414831517613b4757613b466138ce565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b858261365f565b9150613b908361365f565b925082613ba057613b9f613b4e565b5b828204905092915050565b5f819050919050565b613bbd81613bab565b8114613bc7575f80fd5b50565b5f81519050613bd881613bb4565b92915050565b5f60208284031215613bf357613bf2613560565b5b5f613c0084828501613bca565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613c5382613c0d565b810181811067ffffffffffffffff82111715613c7257613c71613c1d565b5b80604052505050565b5f613c84613557565b9050613c908282613c4a565b919050565b5f67ffffffffffffffff821115613caf57613cae613c1d565b5b602082029050602081019050919050565b5f80fd5b5f613cd6613cd184613c95565b613c7b565b90508083825260208201905060208402830185811115613cf957613cf8613cc0565b5b835b81811015613d225780613d0e88826137ee565b845260208401935050602081019050613cfb565b5050509392505050565b5f82601f830112613d4057613d3f613c09565b5b8151613d50848260208601613cc4565b91505092915050565b5f60208284031215613d6e57613d6d613560565b5b5f82015167ffffffffffffffff811115613d8b57613d8a613564565b5b613d9784828501613d2c565b91505092915050565b613da981613bab565b82525050565b5f602082019050613dc25f830184613da0565b92915050565b5f67ffffffffffffffff821115613de257613de1613c1d565b5b602082029050602081019050919050565b5f613e05613e0084613dc8565b613c7b565b90508083825260208201905060208402830185811115613e2857613e27613cc0565b5b835b81811015613e515780613e3d88826136c7565b845260208401935050602081019050613e2a565b5050509392505050565b5f82601f830112613e6f57613e6e613c09565b5b8151613e7f848260208601613df3565b91505092915050565b5f805f60608486031215613e9f57613e9e613560565b5b5f84015167ffffffffffffffff811115613ebc57613ebb613564565b5b613ec886828701613e5b565b935050602084015167ffffffffffffffff811115613ee957613ee8613564565b5b613ef586828701613d2c565b9250506040613f06868287016137ee565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613f4782613677565b915060ff8203613f5a57613f596138ce565b5b600182019050919050565b613f6e81613587565b82525050565b5f602082019050613f875f830184613f65565b92915050565b5f60208284031215613fa257613fa1613560565b5b5f82015167ffffffffffffffff811115613fbf57613fbe613564565b5b613fcb84828501613e5b565b91505092915050565b5f8060408385031215613fea57613fe9613560565b5b5f83015167ffffffffffffffff81111561400757614006613564565b5b61401385828601613d2c565b925050602083015167ffffffffffffffff81111561403457614033613564565b5b61404085828601613d2c565b9150509250929050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61406e8161404a565b82525050565b5f8115159050919050565b61408881614074565b82525050565b5f6040820190506140a15f830185614065565b6140ae602083018461407f565b9392505050565b6140be8161404a565b81146140c8575f80fd5b50565b5f815190506140d9816140b5565b92915050565b5f805f606084860312156140f6576140f5613560565b5b5f614103868287016140cb565b9350506020614114868287016140cb565b9250506040614125868287016140cb565b9150509250925092565b5f819050919050565b5f819050919050565b5f61415b6141566141518461412f565b614138565b61365f565b9050919050565b61416b81614141565b82525050565b5f6020820190506141845f830184614162565b92915050565b5f60608201905061419d5f830186613f65565b6141aa6020830185613f65565b6141b76040830184613f65565b949350505050565b5f81600f0b9050919050565b6141d4816141bf565b81146141de575f80fd5b50565b5f815190506141ef816141cb565b92915050565b6141fe81614074565b8114614208575f80fd5b50565b5f81519050614219816141f5565b92915050565b5f805f6060848603121561423657614235613560565b5b5f614243868287016141e1565b9350506020614254868287016141e1565b92505060406142658682870161420b565b9150509250925092565b5f6060820190506142825f830186614065565b61428f6020830185614065565b61429c6040830184613668565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b838110156142d55780820151818401526020810190506142ba565b5f8484015250505050565b5f6142ea826142a4565b6142f481856142ae565b93506143048185602086016142b8565b80840191505092915050565b5f61431b82846142e0565b915081905092915050565b5f6040820190506143395f830185613f65565b6143466020830184613668565b9392505050565b5f806040838503121561436357614362613560565b5b5f614370858286016137ee565b9250506020614381858286016137ee565b9150509250929050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143f560218361438b565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f61445d601a8361438b565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b5f61449b82613677565b91506144a683613677565b9250828201905060ff8111156144bf576144be6138ce565b5b92915050565b5f6144cf82613677565b91506144da83613677565b9250828203905060ff8111156144f3576144f26138ce565b5b9291505056fea2646970667358221220dd3ad04970e6212d98542f00c80af10857fab2daf343dbfcff6aeb363beade0d64736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906135fb565b61005f565b60405161005693929190613692565b60405180910390f35b5f805f60028463ffffffff16148061007d575060168463ffffffff16145b8061008e575060178463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011291906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018191906136db565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f0919061375d565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60168863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f91906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e91906136db565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d91906137ad565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc91906137ad565b6dffffffffffffffffffffffffffff1690506105a6565b60178863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e91906136db565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd91906136db565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c9190613802565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064791906138a3565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b691906138a3565b94506106e5826106d7670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075991906138a3565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c891906138a3565b94506107f7816107e9670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b96505b50505050613112565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e91906138a3565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad9190613a2a565b6040518263ffffffff1660e01b81526004016108c99190613a74565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190613a8d565b9250613111565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb91906136db565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190613ae2565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2391906138a3565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9291906138a3565b9350606081606083670de0b6b3a7640000610bad9190613b0d565b901c610bb99190613b0d565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f91906138a3565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e91906138a3565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190613b7b565b610cd79190613b7b565b95505b505050613110565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906136db565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613ae2565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef691906138a3565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6591906138a3565b9350606081606083670de0b6b3a7640000610f809190613b0d565b901c610f8c9190613b0d565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100291906138a3565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107191906138a3565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190613b7b565b6110aa9190613b7b565b95505b50505061310f565b61026d8463ffffffff160361154a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113291906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a29190613bde565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ed573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112159190613d59565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004016112529190613daf565b5f60405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112949190613e88565b50915091505f805f5b84518160ff161015611430578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112d6576112d5613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361136357611360868260ff168151811061131257611311613f10565b5b6020026020010151611352670de0b6b3a7640000878560ff168151811061133c5761133b613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106113905761138f613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361141d5761141a868260ff16815181106113cc576113cb613f10565b5b602002602001015161140c670de0b6b3a7640000878560ff16815181106113f6576113f5613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b91505b808061142890613f3d565b91505061129d565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e91906138a3565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d91906138a3565b975061153c8261152e670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b99505050505050505061310e565b61026e8463ffffffff160361168d575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b81526004016115939190613f74565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d29190613a8d565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b815260040161160e9190613f74565b602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613a8d565b905061167c8161166e670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b94506012935060129250505061310d565b61026f8463ffffffff16036118e6578473ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117099190613a8d565b92505f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177991906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190613bde565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016118259190613daf565b5f60405180830381865afa15801561183f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118679190613e88565b505090508873ffffffffffffffffffffffffffffffffffffffff16815f8151811061189557611894613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036118d657856ec097ce7bc90715b34b9f10000000006118d39190613b7b565b95505b601294506012935050505061310c565b6102778463ffffffff1603611cae575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196391906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119ae573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906119d69190613d59565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663ca4f2803896040518263ffffffff1660e01b8152600401611a129190613f74565b5f60405180830381865afa158015611a2c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a549190613f8d565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663535cfd8a8a6040518263ffffffff1660e01b8152600401611a909190613f74565b5f60405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad29190613d59565b90505f805f5b84518160ff161015611c6b578d73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611b1157611b10613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611b9e57611b9b868260ff1681518110611b4d57611b4c613f10565b5b6020026020010151611b8d670de0b6b3a7640000878560ff1681518110611b7757611b76613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b92505b8c73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611bcb57611bca613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611c5857611c55868260ff1681518110611c0757611c06613f10565b5b6020026020010151611c47670de0b6b3a7640000878560ff1681518110611c3157611c30613f10565b5b602002602001015161311c90919063ffffffff16565b61319390919063ffffffff16565b91505b8080611c6390613f3d565b915050611ad8565b50611c9982611c8b670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b9850601297506012965050505050505061310b565b6102788463ffffffff1603611f79575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2b91906136db565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401611d679190613f74565b5f60405180830381865afa158015611d81573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611da99190613f8d565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401611de59190613f74565b5f60405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611e279190613fd4565b9150505f600190505f600190505f5b84518160ff161015611f3757848160ff1681518110611e5857611e57613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603611eb357838160ff1681518110611ea857611ea7613f10565b5b602002602001015192505b848160ff1681518110611ec957611ec8613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603611f2457838160ff1681518110611f1957611f18613f10565b5b602002602001015191505b8080611f2f90613f3d565b915050611e36565b50611f6581611f57670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b97506012965060129550505050505061310a565b6102798463ffffffff1603612244575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff691906136db565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b81526004016120329190613f74565b5f60405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120749190613f8d565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b81526004016120b09190613f74565b5f60405180830381865afa1580156120ca573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906120f29190613fd4565b9150505f600190505f600190505f5b84518160ff16101561220257848160ff168151811061212357612122613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361217e57838160ff168151811061217357612172613f10565b5b602002602001015192505b848160ff168151811061219457612193613f10565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16036121ef57838160ff16815181106121e4576121e3613f10565b5b602002602001015191505b80806121fa90613f3d565b915050612101565b5061223081612222670de0b6b3a76400008561311c90919063ffffffff16565b61319390919063ffffffff16565b975060129650601295505050505050613109565b60078463ffffffff16148061225f575060478463ffffffff16145b80612270575060488463ffffffff16145b80612281575060498463ffffffff16145b806122925750604a8463ffffffff16145b806122a35750604b8463ffffffff16145b15612747575f8573ffffffffffffffffffffffffffffffffffffffff166305e8746d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231691906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663da10610c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612362573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238691906136db565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612580578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612404573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061242891906138a3565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612473573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249791906138a3565b92505f6124a487866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f88360016040518363ffffffff1660e01b81526004016124e392919061408e565b606060405180830381865afa1580156124fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252291906140df565b50915050612577826fffffffffffffffffffffffffffffffff16612569670de0b6b3a7640000846fffffffffffffffffffffffffffffffff1661311c90919063ffffffff16565b61319390919063ffffffff16565b96505050612740565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed91906138a3565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265c91906138a3565b92505f61266987866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f8835f6040518363ffffffff1660e01b81526004016126a792919061408e565b606060405180830381865afa1580156126c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e691906140df565b5091505061273b826fffffffffffffffffffffffffffffffff1661272d670de0b6b3a7640000846fffffffffffffffffffffffffffffffff1661311c90919063ffffffff16565b61319390919063ffffffff16565b965050505b5050613108565b60088463ffffffff161480612762575060518463ffffffff16145b80612773575060528463ffffffff16145b80612784575060538463ffffffff16145b80612795575060548463ffffffff16145b806127a6575060558463ffffffff16145b15612c2c575f61014446036127d1577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506127e9565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016128249190614171565b602060405180830381865afa15801561283f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286391906136db565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b81526004016128a59392919061418a565b606060405180830381865afa1580156128c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e4919061421f565b8093508194508295505050505f6128fa8b613365565b90505f808260ff1614801561290c5750825b15612920576307211ef760e01b9050612950565b5f8260ff16148015612930575082155b1561294457635e0d443f60e01b905061294f565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff16036129a05760129850612a10565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0d91906138a3565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603612a605760129750612ad0565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612acd91906138a3565b97505b5f612adb8c8b6131ea565b90505f808e73ffffffffffffffffffffffffffffffffffffffff1684898986604051602401612b0c9392919061426f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612b769190614310565b5f60405180830381855afa9150503d805f8114612bae576040519150601f19603f3d011682016040523d82523d5f602084013e612bb3565b606091505b5091509150818015612bc757506020815110155b15612c1d575f81806020019051810190612be19190613a8d565b90505f811115612c1b57612c1884612c0a670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b9d505b505b50505050505050505050613107565b60098463ffffffff161480612c475750605b8463ffffffff16145b80612c585750605c8463ffffffff16145b80612c695750605d8463ffffffff16145b80612c7a5750605e8463ffffffff16145b80612c8b5750605f8463ffffffff16145b15613106575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cfe91906136db565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6e91906136db565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612f55578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e1091906138a3565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e7f91906138a3565b92505f612e8c87866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401612ede929190614326565b6040805180830381865afa158015612ef8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1c919061434d565b509050612f4c82612f3e670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b96505050613103565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fc291906138a3565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061303191906138a3565b92505f61303e87866131ea565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401613090929190614326565b6040805180830381865afa1580156130aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ce919061434d565b5090506130fe826130f0670de0b6b3a76400008461311c90919063ffffffff16565b61319390919063ffffffff16565b965050505b50505b5b5b5b5b5b5b5b5b5b5b5b5b9450945094915050565b5f80830361312c575f905061318d565b5f82846131399190613b0d565b90508284826131489190613b7b565b14613188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317f9061440b565b60405180910390fd5b809150505b92915050565b5f8082116131d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cd90614473565b60405180910390fd5b81836131e29190613b7b565b905092915050565b5f806004905060078463ffffffff16148061320b575060088463ffffffff16145b8061321c575060098463ffffffff16145b1561322657600490505b60478463ffffffff161480613241575060518463ffffffff16145b806132525750605b8463ffffffff16145b1561325b575f90505b60488463ffffffff161480613276575060528463ffffffff16145b806132875750605c8463ffffffff16145b1561329157600290505b60498463ffffffff1614806132ac575060538463ffffffff16145b806132bd5750605d8463ffffffff16145b156132c757600690505b604a8463ffffffff1614806132e2575060548463ffffffff16145b806132f35750605e8463ffffffff16145b156132fd57600890505b604b8463ffffffff161480613318575060558463ffffffff16145b806133295750605f8463ffffffff16145b1561333357600a90505b5f600482856133429190614491565b61334c91906144c5565b600a6133589190613a2a565b9050809250505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516133f79190614310565b5f60405180830381855afa9150503d805f811461342f576040519150601f19603f3d011682016040523d82523d5f602084013e613434565b606091505b509150915081801561344857506020815110155b1561345857600192505050613552565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516134e79190614310565b5f60405180830381855afa9150503d805f811461351f576040519150601f19603f3d011682016040523d82523d5f602084013e613524565b606091505b50809250819350505081801561353c57506020815110155b1561354c57600292505050613552565b5f925050505b919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61359182613568565b9050919050565b6135a181613587565b81146135ab575f80fd5b50565b5f813590506135bc81613598565b92915050565b5f63ffffffff82169050919050565b6135da816135c2565b81146135e4575f80fd5b50565b5f813590506135f5816135d1565b92915050565b5f805f806080858703121561361357613612613560565b5b5f613620878288016135ae565b9450506020613631878288016135ae565b9350506040613642878288016135ae565b9250506060613653878288016135e7565b91505092959194509250565b5f819050919050565b6136718161365f565b82525050565b5f60ff82169050919050565b61368c81613677565b82525050565b5f6060820190506136a55f830186613668565b6136b26020830185613683565b6136bf6040830184613683565b949350505050565b5f815190506136d581613598565b92915050565b5f602082840312156136f0576136ef613560565b5b5f6136fd848285016136c7565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b61372881613706565b8114613732575f80fd5b50565b5f815190506137438161371f565b92915050565b5f81519050613757816135d1565b92915050565b5f805f6060848603121561377457613773613560565b5b5f61378186828701613735565b935050602061379286828701613735565b92505060406137a386828701613749565b9150509250925092565b5f602082840312156137c2576137c1613560565b5b5f6137cf84828501613735565b91505092915050565b6137e18161365f565b81146137eb575f80fd5b50565b5f815190506137fc816137d8565b92915050565b5f805f805f60a0868803121561381b5761381a613560565b5b5f61382888828901613735565b955050602061383988828901613735565b945050604061384a88828901613735565b935050606061385b88828901613735565b925050608061386c888289016137ee565b9150509295509295909350565b61388281613677565b811461388c575f80fd5b50565b5f8151905061389d81613879565b92915050565b5f602082840312156138b8576138b7613560565b5b5f6138c58482850161388f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156139505780860481111561392c5761392b6138ce565b5b600185161561393b5780820291505b8081029050613949856138fb565b9450613910565b94509492505050565b5f826139685760019050613a23565b81613975575f9050613a23565b816001811461398b5760028114613995576139c4565b6001915050613a23565b60ff8411156139a7576139a66138ce565b5b8360020a9150848211156139be576139bd6138ce565b5b50613a23565b5060208310610133831016604e8410600b84101617156139f95782820a9050838111156139f4576139f36138ce565b5b613a23565b613a068484846001613907565b92509050818404811115613a1d57613a1c6138ce565b5b81810290505b9392505050565b5f613a348261365f565b9150613a3f83613677565b9250613a6c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613959565b905092915050565b5f602082019050613a875f830184613668565b92915050565b5f60208284031215613aa257613aa1613560565b5b5f613aaf848285016137ee565b91505092915050565b613ac181613568565b8114613acb575f80fd5b50565b5f81519050613adc81613ab8565b92915050565b5f60208284031215613af757613af6613560565b5b5f613b0484828501613ace565b91505092915050565b5f613b178261365f565b9150613b228361365f565b9250828202613b308161365f565b91508282048414831517613b4757613b466138ce565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b858261365f565b9150613b908361365f565b925082613ba057613b9f613b4e565b5b828204905092915050565b5f819050919050565b613bbd81613bab565b8114613bc7575f80fd5b50565b5f81519050613bd881613bb4565b92915050565b5f60208284031215613bf357613bf2613560565b5b5f613c0084828501613bca565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613c5382613c0d565b810181811067ffffffffffffffff82111715613c7257613c71613c1d565b5b80604052505050565b5f613c84613557565b9050613c908282613c4a565b919050565b5f67ffffffffffffffff821115613caf57613cae613c1d565b5b602082029050602081019050919050565b5f80fd5b5f613cd6613cd184613c95565b613c7b565b90508083825260208201905060208402830185811115613cf957613cf8613cc0565b5b835b81811015613d225780613d0e88826137ee565b845260208401935050602081019050613cfb565b5050509392505050565b5f82601f830112613d4057613d3f613c09565b5b8151613d50848260208601613cc4565b91505092915050565b5f60208284031215613d6e57613d6d613560565b5b5f82015167ffffffffffffffff811115613d8b57613d8a613564565b5b613d9784828501613d2c565b91505092915050565b613da981613bab565b82525050565b5f602082019050613dc25f830184613da0565b92915050565b5f67ffffffffffffffff821115613de257613de1613c1d565b5b602082029050602081019050919050565b5f613e05613e0084613dc8565b613c7b565b90508083825260208201905060208402830185811115613e2857613e27613cc0565b5b835b81811015613e515780613e3d88826136c7565b845260208401935050602081019050613e2a565b5050509392505050565b5f82601f830112613e6f57613e6e613c09565b5b8151613e7f848260208601613df3565b91505092915050565b5f805f60608486031215613e9f57613e9e613560565b5b5f84015167ffffffffffffffff811115613ebc57613ebb613564565b5b613ec886828701613e5b565b935050602084015167ffffffffffffffff811115613ee957613ee8613564565b5b613ef586828701613d2c565b9250506040613f06868287016137ee565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613f4782613677565b915060ff8203613f5a57613f596138ce565b5b600182019050919050565b613f6e81613587565b82525050565b5f602082019050613f875f830184613f65565b92915050565b5f60208284031215613fa257613fa1613560565b5b5f82015167ffffffffffffffff811115613fbf57613fbe613564565b5b613fcb84828501613e5b565b91505092915050565b5f8060408385031215613fea57613fe9613560565b5b5f83015167ffffffffffffffff81111561400757614006613564565b5b61401385828601613d2c565b925050602083015167ffffffffffffffff81111561403457614033613564565b5b61404085828601613d2c565b9150509250929050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61406e8161404a565b82525050565b5f8115159050919050565b61408881614074565b82525050565b5f6040820190506140a15f830185614065565b6140ae602083018461407f565b9392505050565b6140be8161404a565b81146140c8575f80fd5b50565b5f815190506140d9816140b5565b92915050565b5f805f606084860312156140f6576140f5613560565b5b5f614103868287016140cb565b9350506020614114868287016140cb565b9250506040614125868287016140cb565b9150509250925092565b5f819050919050565b5f819050919050565b5f61415b6141566141518461412f565b614138565b61365f565b9050919050565b61416b81614141565b82525050565b5f6020820190506141845f830184614162565b92915050565b5f60608201905061419d5f830186613f65565b6141aa6020830185613f65565b6141b76040830184613f65565b949350505050565b5f81600f0b9050919050565b6141d4816141bf565b81146141de575f80fd5b50565b5f815190506141ef816141cb565b92915050565b6141fe81614074565b8114614208575f80fd5b50565b5f81519050614219816141f5565b92915050565b5f805f6060848603121561423657614235613560565b5b5f614243868287016141e1565b9350506020614254868287016141e1565b92505060406142658682870161420b565b9150509250925092565b5f6060820190506142825f830186614065565b61428f6020830185614065565b61429c6040830184613668565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b838110156142d55780820151818401526020810190506142ba565b5f8484015250505050565b5f6142ea826142a4565b6142f481856142ae565b93506143048185602086016142b8565b80840191505092915050565b5f61431b82846142e0565b915081905092915050565b5f6040820190506143395f830185613f65565b6143466020830184613668565b9392505050565b5f806040838503121561436357614362613560565b5b5f614370858286016137ee565b9250506020614381858286016137ee565b9150509250929050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143f560218361438b565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f61445d601a8361438b565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b5f61449b82613677565b91506144a683613677565b9250828201905060ff8111156144bf576144be6138ce565b5b92915050565b5f6144cf82613677565b91506144da83613677565b9250828203905060ff8111156144f3576144f26138ce565b5b9291505056fea2646970667358221220dd3ad04970e6212d98542f00c80af10857fab2daf343dbfcff6aeb363beade0d64736f6c63430008180033

Deployed Bytecode Sourcemap

9089:15251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:13332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;11114:12;11128:18;11148:16;11187:1;11180:3;:8;;;:21;;;;11199:2;11192:3;:9;;;11180:21;:34;;;;11212:2;11205:3;:9;;;11180:34;11177:13153;;;11231:14;11260;11289:16;11320;11407:1;11400:3;:8;;;11397:895;;11453:11;11438:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11429:45;;11517:11;11502:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11493:45;;11596:11;11581:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11557:65;;;;;;;;;;;;;;;;;;;11397:895;;;11708:2;11701:3;:9;;;11698:594;;11754:11;11740:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11731:44;;11817:11;11803:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11794:44;;11882:11;11868:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11857:48;;;;11949:11;11935:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11924:48;;;;11698:594;;;12059:2;12052:3;:9;;;12049:243;;12105:11;12091:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12082:44;;12168:11;12154:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12145:44;;12249:11;12235:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12208:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;12049:243;11698:594;11397:895;12319:9;12309:19;;:6;:19;;;12306:442;;12379:6;12364:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12349:48;;12444:6;12429:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12416:46;;12488:32;12511:8;12488:18;12501:4;12488:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;12481:39;;12306:442;;;12591:6;12576:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12561:48;;12656:6;12641:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12628:46;;12700:32;12723:8;12700:18;12713:4;12700:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;12693:39;;12306:442;11216:1543;;;;11177:13153;;;12821:1;12814:3;:8;;;12811:11519;;12869:9;12854:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12839:51;;12918:2;12905:15;;12953:11;12942:47;;;12994:12;12990:2;:16;;;;:::i;:::-;12942:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12935:72;;12811:11519;;;13081:1;13074:3;:8;;;13071:11259;;13099:14;13131:11;13116:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13099:53;;13167:14;13199:11;13184:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13167:53;;13236:20;13275:11;13260:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13235:60;;;;13323:9;13313:19;;:6;:19;;;13310:473;;13383:6;13368:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13353:48;;13448:6;13433:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13420:46;;13542:2;13525:12;13519:2;13502:12;13495:4;:19;;;;:::i;:::-;13494:27;;13493:44;;;;:::i;:::-;13492:52;;13485:59;;13310:473;;;13615:6;13600:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13585:48;;13680:6;13665:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13652:46;;13755:12;13740;13725:11;13724:28;;;;:::i;:::-;:43;;;;:::i;:::-;13717:50;;13310:473;13084:710;;;13071:11259;;;13859:1;13852:3;:8;;;13849:10481;;13877:14;13907:11;13894:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13877:51;;13943:14;13973:11;13960:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13943:51;;14010:20;14047:11;14034:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14009:64;;;;14101:9;14091:19;;:6;:19;;;14088:473;;14161:6;14146:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14131:48;;14226:6;14211:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14198:46;;14320:2;14303:12;14297:2;14280:12;14273:4;:19;;;;:::i;:::-;14272:27;;14271:44;;;;:::i;:::-;14270:52;;14263:59;;14088:473;;;14393:6;14378:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14363:48;;14458:6;14443:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14430:46;;14533:12;14518;14503:11;14502:28;;;;:::i;:::-;:43;;;;:::i;:::-;14495:50;;14088:473;13862:710;;;13849:10481;;;14651:3;14644;:10;;;14641:9689;;14671:20;14710:11;14694:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14671:62;;14748:14;14781:11;14765:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14748:57;;14821:24;14865:11;14849:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14820:80;;14916:23;14941:25;14980:12;14971:36;;;15008:6;14971:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14915:100;;;;;15030:26;15075:24;15122:7;15118:345;15139:6;:13;15135:1;:17;;;15118:345;;;15194:9;15181:22;;:6;15188:1;15181:9;;;;;;;;;;:::i;:::-;;;;;;;;:22;;;15178:128;;15249:37;15275:7;15283:1;15275:10;;;;;;;;;;:::i;:::-;;;;;;;;15249:21;15265:4;15249:8;15258:1;15249:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;15228:58;;15178:128;15340:7;15327:20;;:6;15334:1;15327:9;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;15324:124;;15391:37;15417:7;15425:1;15417:10;;;;;;;;;;:::i;:::-;;;;;;;;15391:21;15407:4;15391:8;15400:1;15391:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;15372:56;;15324:124;15154:3;;;;;:::i;:::-;;;;15118:345;;;;15507:9;15492:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15477:51;;15571:7;15556:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15543:47;;15612:50;15643:18;15612:26;15633:4;15612:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;15605:57;;14656:1018;;;;;;;14641:9689;;;15751:3;15744;:10;;;15741:8589;;15771:16;15804:11;15790:39;;;15830:9;15790:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15771:69;;15855:14;15886:11;15872:39;;;15912:7;15872:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15855:65;;15942:30;15965:6;15942:18;15955:4;15942:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;15935:37;;16002:2;15987:17;;16032:2;16019:15;;15756:290;;15741:8589;;;16127:3;16120;:10;;;16117:8213;;16170:11;16154:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16147:46;;16208:20;16247:11;16231:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16208:62;;16285:14;16318:11;16302:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16285:57;;16358:23;16397:12;16388:36;;;16425:6;16388:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16357:75;;;;16463:7;16450:20;;:6;16457:1;16450:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;16447:80;;16507:4;16499;16498:13;;;;:::i;:::-;16491:20;;16447:80;16556:2;16541:17;;16586:2;16573:15;;16132:468;;;16117:8213;;;16679:3;16672;:10;;;16669:7661;;16699:20;16738:11;16722:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16699:62;;16777:24;16821:11;16805:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16776:80;;16872:23;16908:12;16899:36;;;16936:11;16899:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16871:77;;16964:25;17002:12;16993:45;;;17039:11;16993:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16963:88;;17066:26;17111:24;17158:7;17154:345;17175:6;:13;17171:1;:17;;;17154:345;;;17230:9;17217:22;;:6;17224:1;17217:9;;;;;;;;;;:::i;:::-;;;;;;;;:22;;;17214:128;;17285:37;17311:7;17319:1;17311:10;;;;;;;;;;:::i;:::-;;;;;;;;17285:21;17301:4;17285:8;17294:1;17285:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;17264:58;;17214:128;17376:7;17363:20;;:6;17370:1;17363:9;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;17360:124;;17427:37;17453:7;17461:1;17453:10;;;;;;;;;;:::i;:::-;;;;;;;;17427:21;17443:4;17427:8;17436:1;17427:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;17408:56;;17360:124;17190:3;;;;;:::i;:::-;;;;17154:345;;;;17520:50;17551:18;17520:26;17541:4;17520:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;17513:57;;17600:2;17585:17;;17630:2;17617:15;;16684:960;;;;;;16669:7661;;;17721:3;17714;:10;;;17711:6619;;17741:20;17778:11;17764:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17741:60;;17817:23;17853:12;17844:36;;;17881:11;17844:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17816:77;;17911:27;17951:12;17942:40;;;17983:11;17942:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17908:87;;;18011:16;18030:1;18011:20;;18046:14;18063:1;18046:18;;18083:7;18079:278;18100:6;:13;18096:1;:17;;;18079:278;;;18156:6;18163:1;18156:9;;;;;;;;;;:::i;:::-;;;;;;;;18143:22;;:9;:22;;;18140:94;;18201:10;18212:1;18201:13;;;;;;;;;;:::i;:::-;;;;;;;;18190:24;;18140:94;18266:6;18273:1;18266:9;;;;;;;;;;:::i;:::-;;;;;;;;18255:20;;:7;:20;;;18252:90;;18309:10;18320:1;18309:13;;;;;;;;;;:::i;:::-;;;;;;;;18300:22;;18252:90;18115:3;;;;;:::i;:::-;;;;18079:278;;;;18378:30;18401:6;18378:18;18391:4;18378:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;18371:37;;18438:2;18423:17;;18468:2;18455:15;;17726:756;;;;;17711:6619;;;18563:3;18556;:10;;;18553:5777;;18584:20;18623:11;18607:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18584:62;;18662:23;18698:12;18689:36;;;18726:11;18689:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18661:77;;18756:27;18796:12;18787:40;;;18828:11;18787:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18753:87;;;18856:16;18875:1;18856:20;;18891:14;18908:1;18891:18;;18928:7;18924:278;18945:6;:13;18941:1;:17;;;18924:278;;;19001:6;19008:1;19001:9;;;;;;;;;;:::i;:::-;;;;;;;;18988:22;;:9;:22;;;18985:94;;19046:10;19057:1;19046:13;;;;;;;;;;:::i;:::-;;;;;;;;19035:24;;18985:94;19111:6;19118:1;19111:9;;;;;;;;;;:::i;:::-;;;;;;;;19100:20;;:7;:20;;;19097:90;;19154:10;19165:1;19154:13;;;;;;;;;;:::i;:::-;;;;;;;;19145:22;;19097:90;18960:3;;;;;:::i;:::-;;;;18924:278;;;;19223:30;19246:6;19223:18;19236:4;19223:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;19216:37;;19283:2;19268:17;;19313:2;19300:15;;18568:759;;;;;18553:5777;;;19590:1;19583:3;:8;;;:21;;;;19602:2;19595:3;:9;;;19583:21;:34;;;;19615:2;19608:3;:9;;;19583:34;:47;;;;19628:2;19621:3;:9;;;19583:47;:60;;;;19641:2;19634:3;:9;;;19583:60;:73;;;;19654:2;19647:3;:9;;;19583:73;19580:4750;;;19673:14;19709:11;19690:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19673:60;;19748:14;19784:11;19765:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19748:60;;19841:6;19828:19;;:9;:19;;;19825:807;;19898:6;19883:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19868:48;;19963:6;19948:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19935:46;;20000:16;20027:31;20040:3;20045:12;20027;:31::i;:::-;20000:59;;20081:17;20123:11;20104:42;;;20147:8;20157:4;20104:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20078:84;;;;20188:33;20212:8;20188:33;;:19;20202:4;20188:9;:13;;;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;20181:40;;19849:388;;19825:807;;;20292:6;20277:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20262:48;;20357:6;20342:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:46;;20394:16;20421:31;20434:3;20439:12;20421;:31::i;:::-;20394:59;;20475:17;20517:11;20498:42;;;20541:8;20551:5;20498:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20472:85;;;;20583:33;20607:8;20583:33;;:19;20597:4;20583:9;:13;;;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;20576:40;;20243:389;;19825:807;19658:985;;19580:4750;;;20931:1;20924:3;:8;;;:21;;;;20943:2;20936:3;:9;;;20924:21;:34;;;;20956:2;20949:3;:9;;;20924:34;:47;;;;20969:2;20962:3;:9;;;20924:47;:60;;;;20982:2;20975:3;:9;;;20924:60;:73;;;;20995:2;20988:3;:9;;;20924:73;20921:3409;;;21014:28;21077:3;21060:13;:20;21057:216;;9529:42;21101:62;;21057:216;;;9419:42;21204:53;;21057:216;21287:36;21345:13;:25;;;21371:1;21345:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21287:87;;21389:8;21412;21435:17;21498;:34;;;21533:11;21546:9;21557:7;21498:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21475:90;;;;;;;;;;;;21580:14;21597:30;21615:11;21597:17;:30::i;:::-;21580:47;;21642:15;21688:1;21676:8;:13;;;:29;;;;;21693:12;21676:29;21672:332;;;21737:47;;;21726:58;;21672:332;;;21822:1;21810:8;:13;;;:30;;;;;21828:12;21827:13;21810:30;21806:198;;;21872:32;;;21861:43;;21806:198;;;21956:32;;;21945:43;;21806:198;21672:332;9309:42;22035:17;;:9;:17;;;22032:166;;22088:2;22073:17;;22032:166;;;22161:9;22146:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22131:51;;22032:166;9309:42;22215:15;;:7;:15;;;22212:158;;22264:2;22251:15;;22212:158;;;22335:7;22320:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22307:47;;22212:158;22384:16;22403:31;22416:3;22421:12;22403;:31::i;:::-;22384:50;;22464:12;22478:17;22499:11;:22;;22545:8;22563:1;22575;22579:8;22522:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22499:90;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22463:126;;;;22608:7;:28;;;;;22634:2;22619:4;:11;:17;;22608:28;22604:333;;;22695:17;22726:4;22715:27;;;;;;;;;;;;:::i;:::-;22695:47;;22777:1;22765:9;:13;22761:161;;;22869:33;22893:8;22869:19;22883:4;22869:9;:13;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;22862:40;;22761:161;22638:299;22604:333;20999:1949;;;;;;;;;;20921:3409;;;23216:1;23209:3;:8;;;:21;;;;23228:2;23221:3;:9;;;23209:21;:34;;;;23241:2;23234:3;:9;;;23209:34;:47;;;;23254:2;23247:3;:9;;;23209:47;:60;;;;23267:2;23260:3;:9;;;23209:60;:73;;;;23280:2;23273:3;:9;;;23209:73;23206:1124;;;23299:14;23325:11;23316:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23299:53;;23367:14;23393:11;23384:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23367:54;;23454:6;23441:19;;:9;:19;;;23438:881;;23511:6;23496:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23481:48;;23576:6;23561:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23548:46;;23613:16;23632:31;23645:3;23650:12;23632;:31::i;:::-;23613:50;;23683:26;23724:11;23715:35;;;23751:42;23795:8;23715:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23682:122;;;23830:42;23863:8;23830:28;23853:4;23830:18;:22;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;23823:49;;23462:426;;23438:881;;;23943:6;23928:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23913:48;;24008:6;23993:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23980:46;;24045:16;24064:31;24077:3;24082:12;24064;:31::i;:::-;24045:50;;24115:25;24155:11;24146:36;;;24183:42;24227:8;24146:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24114:122;;;24262:41;24294:8;24262:27;24284:4;24262:17;:21;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;24255:48;;23894:425;;23438:881;23284:1046;;23206:1124;20921:3409;19580:4750;18553:5777;17711:6619;16669:7661;16117:8213;15741:8589;14641:9689;13849:10481;13071:11259;12811:11519;11177:13153;11005:13332;;;;;;;;:::o;1328:220::-;1386:7;1415:1;1410;:6;1406:20;;1425:1;1418:8;;;;1406:20;1437:9;1453:1;1449;:5;;;;:::i;:::-;1437:17;;1482:1;1477;1473;:5;;;;:::i;:::-;:10;1465:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1539:1;1532:8;;;1328:220;;;;;:::o;1554:153::-;1612:7;1644:1;1640;:5;1632:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1698:1;1694;:5;;;;:::i;:::-;1687:12;;1554:153;;;;:::o;10273:724::-;10351:7;10371:9;10383:1;10371:13;;10406:1;10398:4;:9;;;:22;;;;10419:1;10411:4;:9;;;10398:22;:35;;;;10432:1;10424:4;:9;;;10398:35;10395:74;;;10456:1;10450:7;;10395:74;10490:2;10482:4;:10;;;:24;;;;10504:2;10496:4;:10;;;10482:24;:38;;;;10518:2;10510:4;:10;;;10482:38;10479:77;;;10543:1;10537:7;;10479:77;10577:2;10569:4;:10;;;:24;;;;10591:2;10583:4;:10;;;10569:24;:38;;;;10605:2;10597:4;:10;;;10569:38;10566:77;;;10630:1;10624:7;;10566:77;10664:2;10656:4;:10;;;:24;;;;10678:2;10670:4;:10;;;10656:24;:38;;;;10692:2;10684:4;:10;;;10656:38;10653:77;;;10717:1;10711:7;;10653:77;10751:2;10743:4;:10;;;:24;;;;10765:2;10757:4;:10;;;10743:24;:38;;;;10779:2;10771:4;:10;;;10743:38;10740:77;;;10804:1;10798:7;;10740:77;10838:2;10830:4;:10;;;:24;;;;10852:2;10844:4;:10;;;10830:24;:38;;;;10866:2;10858:4;:10;;;10830:38;10827:78;;;10891:2;10885:8;;10827:78;10915:16;10961:1;10955:3;10939:13;:19;;;;:::i;:::-;:23;;;;:::i;:::-;10934:2;:29;;;;:::i;:::-;10915:48;;10981:8;10974:15;;;;10273:724;;;;:::o;9578:689::-;9641:5;9756:12;9770:17;9791:4;:15;;9830:40;;;9807:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9791:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9755:117;;;;9887:7;:28;;;;;9913:2;9898:4;:11;:17;;9887:28;9883:107;;;9977:1;9970:8;;;;;;9883:107;10048:4;:15;;10087:32;;;10064:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10030:91;;;;;;;;10136:7;:28;;;;;10162:2;10147:4;:11;:17;;10136:28;10132:107;;;10226:1;10219:8;;;;;;10132:107;10258:1;10251:8;;;;9578:689;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:93::-;877:7;917:10;910:5;906:22;895:33;;841:93;;;:::o;940:120::-;1012:23;1029:5;1012:23;:::i;:::-;1005:5;1002:34;992:62;;1050:1;1047;1040:12;992:62;940:120;:::o;1066:137::-;1111:5;1149:6;1136:20;1127:29;;1165:32;1191:5;1165:32;:::i;:::-;1066:137;;;;:::o;1209:763::-;1294:6;1302;1310;1318;1367:3;1355:9;1346:7;1342:23;1338:33;1335:120;;;1374:79;;:::i;:::-;1335:120;1494:1;1519:53;1564:7;1555:6;1544:9;1540:22;1519:53;:::i;:::-;1509:63;;1465:117;1621:2;1647:53;1692:7;1683:6;1672:9;1668:22;1647:53;:::i;:::-;1637:63;;1592:118;1749:2;1775:53;1820:7;1811:6;1800:9;1796:22;1775:53;:::i;:::-;1765:63;;1720:118;1877:2;1903:52;1947:7;1938:6;1927:9;1923:22;1903:52;:::i;:::-;1893:62;;1848:117;1209:763;;;;;;;:::o;1978:77::-;2015:7;2044:5;2033:16;;1978:77;;;:::o;2061:118::-;2148:24;2166:5;2148:24;:::i;:::-;2143:3;2136:37;2061:118;;:::o;2185:86::-;2220:7;2260:4;2253:5;2249:16;2238:27;;2185:86;;;:::o;2277:112::-;2360:22;2376:5;2360:22;:::i;:::-;2355:3;2348:35;2277:112;;:::o;2395:426::-;2536:4;2574:2;2563:9;2559:18;2551:26;;2587:71;2655:1;2644:9;2640:17;2631:6;2587:71;:::i;:::-;2668:68;2732:2;2721:9;2717:18;2708:6;2668:68;:::i;:::-;2746;2810:2;2799:9;2795:18;2786:6;2746:68;:::i;:::-;2395:426;;;;;;:::o;2827:143::-;2884:5;2915:6;2909:13;2900:22;;2931:33;2958:5;2931:33;:::i;:::-;2827:143;;;;:::o;2976:351::-;3046:6;3095:2;3083:9;3074:7;3070:23;3066:32;3063:119;;;3101:79;;:::i;:::-;3063:119;3221:1;3246:64;3302:7;3293:6;3282:9;3278:22;3246:64;:::i;:::-;3236:74;;3192:128;2976:351;;;;:::o;3333:114::-;3370:7;3410:30;3403:5;3399:42;3388:53;;3333:114;;;:::o;3453:122::-;3526:24;3544:5;3526:24;:::i;:::-;3519:5;3516:35;3506:63;;3565:1;3562;3555:12;3506:63;3453:122;:::o;3581:143::-;3638:5;3669:6;3663:13;3654:22;;3685:33;3712:5;3685:33;:::i;:::-;3581:143;;;;:::o;3730:141::-;3786:5;3817:6;3811:13;3802:22;;3833:32;3859:5;3833:32;:::i;:::-;3730:141;;;;:::o;3877:661::-;3964:6;3972;3980;4029:2;4017:9;4008:7;4004:23;4000:32;3997:119;;;4035:79;;:::i;:::-;3997:119;4155:1;4180:64;4236:7;4227:6;4216:9;4212:22;4180:64;:::i;:::-;4170:74;;4126:128;4293:2;4319:64;4375:7;4366:6;4355:9;4351:22;4319:64;:::i;:::-;4309:74;;4264:129;4432:2;4458:63;4513:7;4504:6;4493:9;4489:22;4458:63;:::i;:::-;4448:73;;4403:128;3877:661;;;;;:::o;4544:351::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:64;4870:7;4861:6;4850:9;4846:22;4814:64;:::i;:::-;4804:74;;4760:128;4544:351;;;;:::o;4901:122::-;4974:24;4992:5;4974:24;:::i;:::-;4967:5;4964:35;4954:63;;5013:1;5010;5003:12;4954:63;4901:122;:::o;5029:143::-;5086:5;5117:6;5111:13;5102:22;;5133:33;5160:5;5133:33;:::i;:::-;5029:143;;;;:::o;5178:977::-;5284:6;5292;5300;5308;5316;5365:3;5353:9;5344:7;5340:23;5336:33;5333:120;;;5372:79;;:::i;:::-;5333:120;5492:1;5517:64;5573:7;5564:6;5553:9;5549:22;5517:64;:::i;:::-;5507:74;;5463:128;5630:2;5656:64;5712:7;5703:6;5692:9;5688:22;5656:64;:::i;:::-;5646:74;;5601:129;5769:2;5795:64;5851:7;5842:6;5831:9;5827:22;5795:64;:::i;:::-;5785:74;;5740:129;5908:2;5934:64;5990:7;5981:6;5970:9;5966:22;5934:64;:::i;:::-;5924:74;;5879:129;6047:3;6074:64;6130:7;6121:6;6110:9;6106:22;6074:64;:::i;:::-;6064:74;;6018:130;5178:977;;;;;;;;:::o;6161:118::-;6232:22;6248:5;6232:22;:::i;:::-;6225:5;6222:33;6212:61;;6269:1;6266;6259:12;6212:61;6161:118;:::o;6285:139::-;6340:5;6371:6;6365:13;6356:22;;6387:31;6412:5;6387:31;:::i;:::-;6285:139;;;;:::o;6430:347::-;6498:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:62;6752:7;6743:6;6732:9;6728:22;6698:62;:::i;:::-;6688:72;;6644:126;6430:347;;;;:::o;6783:180::-;6831:77;6828:1;6821:88;6928:4;6925:1;6918:15;6952:4;6949:1;6942:15;6969:102;7011:8;7058:5;7055:1;7051:13;7030:34;;6969:102;;;:::o;7077:848::-;7138:5;7145:4;7169:6;7160:15;;7193:5;7184:14;;7207:712;7228:1;7218:8;7215:15;7207:712;;;7323:4;7318:3;7314:14;7308:4;7305:24;7302:50;;;7332:18;;:::i;:::-;7302:50;7382:1;7372:8;7368:16;7365:451;;;7797:4;7790:5;7786:16;7777:25;;7365:451;7847:4;7841;7837:15;7829:23;;7877:32;7900:8;7877:32;:::i;:::-;7865:44;;7207:712;;;7077:848;;;;;;;:::o;7931:1073::-;7985:5;8176:8;8166:40;;8197:1;8188:10;;8199:5;;8166:40;8225:4;8215:36;;8242:1;8233:10;;8244:5;;8215:36;8311:4;8359:1;8354:27;;;;8395:1;8390:191;;;;8304:277;;8354:27;8372:1;8363:10;;8374:5;;;8390:191;8435:3;8425:8;8422:17;8419:43;;;8442:18;;:::i;:::-;8419:43;8491:8;8488:1;8484:16;8475:25;;8526:3;8519:5;8516:14;8513:40;;;8533:18;;:::i;:::-;8513:40;8566:5;;;8304:277;;8690:2;8680:8;8677:16;8671:3;8665:4;8662:13;8658:36;8640:2;8630:8;8627:16;8622:2;8616:4;8613:12;8609:35;8593:111;8590:246;;;8746:8;8740:4;8736:19;8727:28;;8781:3;8774:5;8771:14;8768:40;;;8788:18;;:::i;:::-;8768:40;8821:5;;8590:246;8861:42;8899:3;8889:8;8883:4;8880:1;8861:42;:::i;:::-;8846:57;;;;8935:4;8930:3;8926:14;8919:5;8916:25;8913:51;;;8944:18;;:::i;:::-;8913:51;8993:4;8986:5;8982:16;8973:25;;7931:1073;;;;;;:::o;9010:281::-;9068:5;9092:23;9110:4;9092:23;:::i;:::-;9084:31;;9136:25;9152:8;9136:25;:::i;:::-;9124:37;;9180:104;9217:66;9207:8;9201:4;9180:104;:::i;:::-;9171:113;;9010:281;;;;:::o;9297:222::-;9390:4;9428:2;9417:9;9413:18;9405:26;;9441:71;9509:1;9498:9;9494:17;9485:6;9441:71;:::i;:::-;9297:222;;;;:::o;9525:351::-;9595:6;9644:2;9632:9;9623:7;9619:23;9615:32;9612:119;;;9650:79;;:::i;:::-;9612:119;9770:1;9795:64;9851:7;9842:6;9831:9;9827:22;9795:64;:::i;:::-;9785:74;;9741:128;9525:351;;;;:::o;9882:122::-;9955:24;9973:5;9955:24;:::i;:::-;9948:5;9945:35;9935:63;;9994:1;9991;9984:12;9935:63;9882:122;:::o;10010:143::-;10067:5;10098:6;10092:13;10083:22;;10114:33;10141:5;10114:33;:::i;:::-;10010:143;;;;:::o;10159:351::-;10229:6;10278:2;10266:9;10257:7;10253:23;10249:32;10246:119;;;10284:79;;:::i;:::-;10246:119;10404:1;10429:64;10485:7;10476:6;10465:9;10461:22;10429:64;:::i;:::-;10419:74;;10375:128;10159:351;;;;:::o;10516:410::-;10556:7;10579:20;10597:1;10579:20;:::i;:::-;10574:25;;10613:20;10631:1;10613:20;:::i;:::-;10608:25;;10668:1;10665;10661:9;10690:30;10708:11;10690:30;:::i;:::-;10679:41;;10869:1;10860:7;10856:15;10853:1;10850:22;10830:1;10823:9;10803:83;10780:139;;10899:18;;:::i;:::-;10780:139;10564:362;10516:410;;;;:::o;10932:180::-;10980:77;10977:1;10970:88;11077:4;11074:1;11067:15;11101:4;11098:1;11091:15;11118:185;11158:1;11175:20;11193:1;11175:20;:::i;:::-;11170:25;;11209:20;11227:1;11209:20;:::i;:::-;11204:25;;11248:1;11238:35;;11253:18;;:::i;:::-;11238:35;11295:1;11292;11288:9;11283:14;;11118:185;;;;:::o;11309:77::-;11346:7;11375:5;11364:16;;11309:77;;;:::o;11392:122::-;11465:24;11483:5;11465:24;:::i;:::-;11458:5;11455:35;11445:63;;11504:1;11501;11494:12;11445:63;11392:122;:::o;11520:143::-;11577:5;11608:6;11602:13;11593:22;;11624:33;11651:5;11624:33;:::i;:::-;11520:143;;;;:::o;11669:351::-;11739:6;11788:2;11776:9;11767:7;11763:23;11759:32;11756:119;;;11794:79;;:::i;:::-;11756:119;11914:1;11939:64;11995:7;11986:6;11975:9;11971:22;11939:64;:::i;:::-;11929:74;;11885:128;11669:351;;;;:::o;12026:117::-;12135:1;12132;12125:12;12149:102;12190:6;12241:2;12237:7;12232:2;12225:5;12221:14;12217:28;12207:38;;12149:102;;;:::o;12257:180::-;12305:77;12302:1;12295:88;12402:4;12399:1;12392:15;12426:4;12423:1;12416:15;12443:281;12526:27;12548:4;12526:27;:::i;:::-;12518:6;12514:40;12656:6;12644:10;12641:22;12620:18;12608:10;12605:34;12602:62;12599:88;;;12667:18;;:::i;:::-;12599:88;12707:10;12703:2;12696:22;12486:238;12443:281;;:::o;12730:129::-;12764:6;12791:20;;:::i;:::-;12781:30;;12820:33;12848:4;12840:6;12820:33;:::i;:::-;12730:129;;;:::o;12865:311::-;12942:4;13032:18;13024:6;13021:30;13018:56;;;13054:18;;:::i;:::-;13018:56;13104:4;13096:6;13092:17;13084:25;;13164:4;13158;13154:15;13146:23;;12865:311;;;:::o;13182:117::-;13291:1;13288;13281:12;13322:732;13429:5;13454:81;13470:64;13527:6;13470:64;:::i;:::-;13454:81;:::i;:::-;13445:90;;13555:5;13584:6;13577:5;13570:21;13618:4;13611:5;13607:16;13600:23;;13671:4;13663:6;13659:17;13651:6;13647:30;13700:3;13692:6;13689:15;13686:122;;;13719:79;;:::i;:::-;13686:122;13834:6;13817:231;13851:6;13846:3;13843:15;13817:231;;;13926:3;13955:48;13999:3;13987:10;13955:48;:::i;:::-;13950:3;13943:61;14033:4;14028:3;14024:14;14017:21;;13893:155;13877:4;13872:3;13868:14;13861:21;;13817:231;;;13821:21;13435:619;;13322:732;;;;;:::o;14077:385::-;14159:5;14208:3;14201:4;14193:6;14189:17;14185:27;14175:122;;14216:79;;:::i;:::-;14175:122;14326:6;14320:13;14351:105;14452:3;14444:6;14437:4;14429:6;14425:17;14351:105;:::i;:::-;14342:114;;14165:297;14077:385;;;;:::o;14468:554::-;14563:6;14612:2;14600:9;14591:7;14587:23;14583:32;14580:119;;;14618:79;;:::i;:::-;14580:119;14759:1;14748:9;14744:17;14738:24;14789:18;14781:6;14778:30;14775:117;;;14811:79;;:::i;:::-;14775:117;14916:89;14997:7;14988:6;14977:9;14973:22;14916:89;:::i;:::-;14906:99;;14709:306;14468:554;;;;:::o;15028:118::-;15115:24;15133:5;15115:24;:::i;:::-;15110:3;15103:37;15028:118;;:::o;15152:222::-;15245:4;15283:2;15272:9;15268:18;15260:26;;15296:71;15364:1;15353:9;15349:17;15340:6;15296:71;:::i;:::-;15152:222;;;;:::o;15380:311::-;15457:4;15547:18;15539:6;15536:30;15533:56;;;15569:18;;:::i;:::-;15533:56;15619:4;15611:6;15607:17;15599:25;;15679:4;15673;15669:15;15661:23;;15380:311;;;:::o;15714:732::-;15821:5;15846:81;15862:64;15919:6;15862:64;:::i;:::-;15846:81;:::i;:::-;15837:90;;15947:5;15976:6;15969:5;15962:21;16010:4;16003:5;15999:16;15992:23;;16063:4;16055:6;16051:17;16043:6;16039:30;16092:3;16084:6;16081:15;16078:122;;;16111:79;;:::i;:::-;16078:122;16226:6;16209:231;16243:6;16238:3;16235:15;16209:231;;;16318:3;16347:48;16391:3;16379:10;16347:48;:::i;:::-;16342:3;16335:61;16425:4;16420:3;16416:14;16409:21;;16285:155;16269:4;16264:3;16260:14;16253:21;;16209:231;;;16213:21;15827:619;;15714:732;;;;;:::o;16469:385::-;16551:5;16600:3;16593:4;16585:6;16581:17;16577:27;16567:122;;16608:79;;:::i;:::-;16567:122;16718:6;16712:13;16743:105;16844:3;16836:6;16829:4;16821:6;16817:17;16743:105;:::i;:::-;16734:114;;16557:297;16469:385;;;;:::o;16860:1069::-;16998:6;17006;17014;17063:2;17051:9;17042:7;17038:23;17034:32;17031:119;;;17069:79;;:::i;:::-;17031:119;17210:1;17199:9;17195:17;17189:24;17240:18;17232:6;17229:30;17226:117;;;17262:79;;:::i;:::-;17226:117;17367:89;17448:7;17439:6;17428:9;17424:22;17367:89;:::i;:::-;17357:99;;17160:306;17526:2;17515:9;17511:18;17505:25;17557:18;17549:6;17546:30;17543:117;;;17579:79;;:::i;:::-;17543:117;17684:89;17765:7;17756:6;17745:9;17741:22;17684:89;:::i;:::-;17674:99;;17476:307;17822:2;17848:64;17904:7;17895:6;17884:9;17880:22;17848:64;:::i;:::-;17838:74;;17793:129;16860:1069;;;;;:::o;17935:180::-;17983:77;17980:1;17973:88;18080:4;18077:1;18070:15;18104:4;18101:1;18094:15;18121:167;18158:3;18181:22;18197:5;18181:22;:::i;:::-;18172:31;;18225:4;18218:5;18215:15;18212:41;;18233:18;;:::i;:::-;18212:41;18280:1;18273:5;18269:13;18262:20;;18121:167;;;:::o;18294:118::-;18381:24;18399:5;18381:24;:::i;:::-;18376:3;18369:37;18294:118;;:::o;18418:222::-;18511:4;18549:2;18538:9;18534:18;18526:26;;18562:71;18630:1;18619:9;18615:17;18606:6;18562:71;:::i;:::-;18418:222;;;;:::o;18646:554::-;18741:6;18790:2;18778:9;18769:7;18765:23;18761:32;18758:119;;;18796:79;;:::i;:::-;18758:119;18937:1;18926:9;18922:17;18916:24;18967:18;18959:6;18956:30;18953:117;;;18989:79;;:::i;:::-;18953:117;19094:89;19175:7;19166:6;19155:9;19151:22;19094:89;:::i;:::-;19084:99;;18887:306;18646:554;;;;:::o;19206:913::-;19335:6;19343;19392:2;19380:9;19371:7;19367:23;19363:32;19360:119;;;19398:79;;:::i;:::-;19360:119;19539:1;19528:9;19524:17;19518:24;19569:18;19561:6;19558:30;19555:117;;;19591:79;;:::i;:::-;19555:117;19696:89;19777:7;19768:6;19757:9;19753:22;19696:89;:::i;:::-;19686:99;;19489:306;19855:2;19844:9;19840:18;19834:25;19886:18;19878:6;19875:30;19872:117;;;19908:79;;:::i;:::-;19872:117;20013:89;20094:7;20085:6;20074:9;20070:22;20013:89;:::i;:::-;20003:99;;19805:307;19206:913;;;;;:::o;20125:118::-;20162:7;20202:34;20195:5;20191:46;20180:57;;20125:118;;;:::o;20249:::-;20336:24;20354:5;20336:24;:::i;:::-;20331:3;20324:37;20249:118;;:::o;20373:90::-;20407:7;20450:5;20443:13;20436:21;20425:32;;20373:90;;;:::o;20469:109::-;20550:21;20565:5;20550:21;:::i;:::-;20545:3;20538:34;20469:109;;:::o;20584:320::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20750:71;20818:1;20807:9;20803:17;20794:6;20750:71;:::i;:::-;20831:66;20893:2;20882:9;20878:18;20869:6;20831:66;:::i;:::-;20584:320;;;;;:::o;20910:122::-;20983:24;21001:5;20983:24;:::i;:::-;20976:5;20973:35;20963:63;;21022:1;21019;21012:12;20963:63;20910:122;:::o;21038:143::-;21095:5;21126:6;21120:13;21111:22;;21142:33;21169:5;21142:33;:::i;:::-;21038:143;;;;:::o;21187:663::-;21275:6;21283;21291;21340:2;21328:9;21319:7;21315:23;21311:32;21308:119;;;21346:79;;:::i;:::-;21308:119;21466:1;21491:64;21547:7;21538:6;21527:9;21523:22;21491:64;:::i;:::-;21481:74;;21437:128;21604:2;21630:64;21686:7;21677:6;21666:9;21662:22;21630:64;:::i;:::-;21620:74;;21575:129;21743:2;21769:64;21825:7;21816:6;21805:9;21801:22;21769:64;:::i;:::-;21759:74;;21714:129;21187:663;;;;;:::o;21856:85::-;21901:7;21930:5;21919:16;;21856:85;;;:::o;21947:60::-;21975:3;21996:5;21989:12;;21947:60;;;:::o;22013:158::-;22071:9;22104:61;22122:42;22131:32;22157:5;22131:32;:::i;:::-;22122:42;:::i;:::-;22104:61;:::i;:::-;22091:74;;22013:158;;;:::o;22177:147::-;22272:45;22311:5;22272:45;:::i;:::-;22267:3;22260:58;22177:147;;:::o;22330:238::-;22431:4;22469:2;22458:9;22454:18;22446:26;;22482:79;22558:1;22547:9;22543:17;22534:6;22482:79;:::i;:::-;22330:238;;;;:::o;22574:442::-;22723:4;22761:2;22750:9;22746:18;22738:26;;22774:71;22842:1;22831:9;22827:17;22818:6;22774:71;:::i;:::-;22855:72;22923:2;22912:9;22908:18;22899:6;22855:72;:::i;:::-;22937;23005:2;22994:9;22990:18;22981:6;22937:72;:::i;:::-;22574:442;;;;;;:::o;23022:92::-;23058:7;23102:5;23098:2;23087:21;23076:32;;23022:92;;;:::o;23120:120::-;23192:23;23209:5;23192:23;:::i;:::-;23185:5;23182:34;23172:62;;23230:1;23227;23220:12;23172:62;23120:120;:::o;23246:141::-;23302:5;23333:6;23327:13;23318:22;;23349:32;23375:5;23349:32;:::i;:::-;23246:141;;;;:::o;23393:116::-;23463:21;23478:5;23463:21;:::i;:::-;23456:5;23453:32;23443:60;;23499:1;23496;23489:12;23443:60;23393:116;:::o;23515:137::-;23569:5;23600:6;23594:13;23585:22;;23616:30;23640:5;23616:30;:::i;:::-;23515:137;;;;:::o;23658:653::-;23741:6;23749;23757;23806:2;23794:9;23785:7;23781:23;23777:32;23774:119;;;23812:79;;:::i;:::-;23774:119;23932:1;23957:63;24012:7;24003:6;23992:9;23988:22;23957:63;:::i;:::-;23947:73;;23903:127;24069:2;24095:63;24150:7;24141:6;24130:9;24126:22;24095:63;:::i;:::-;24085:73;;24040:128;24207:2;24233:61;24286:7;24277:6;24266:9;24262:22;24233:61;:::i;:::-;24223:71;;24178:126;23658:653;;;;;:::o;24317:442::-;24466:4;24504:2;24493:9;24489:18;24481:26;;24517:71;24585:1;24574:9;24570:17;24561:6;24517:71;:::i;:::-;24598:72;24666:2;24655:9;24651:18;24642:6;24598:72;:::i;:::-;24680;24748:2;24737:9;24733:18;24724:6;24680:72;:::i;:::-;24317:442;;;;;;:::o;24765:98::-;24816:6;24850:5;24844:12;24834:22;;24765:98;;;:::o;24869:147::-;24970:11;25007:3;24992:18;;24869:147;;;;:::o;25022:246::-;25103:1;25113:113;25127:6;25124:1;25121:13;25113:113;;;25212:1;25207:3;25203:11;25197:18;25193:1;25188:3;25184:11;25177:39;25149:2;25146:1;25142:10;25137:15;;25113:113;;;25260:1;25251:6;25246:3;25242:16;25235:27;25084:184;25022:246;;;:::o;25274:386::-;25378:3;25406:38;25438:5;25406:38;:::i;:::-;25460:88;25541:6;25536:3;25460:88;:::i;:::-;25453:95;;25557:65;25615:6;25610:3;25603:4;25596:5;25592:16;25557:65;:::i;:::-;25647:6;25642:3;25638:16;25631:23;;25382:278;25274:386;;;;:::o;25666:271::-;25796:3;25818:93;25907:3;25898:6;25818:93;:::i;:::-;25811:100;;25928:3;25921:10;;25666:271;;;;:::o;25943:332::-;26064:4;26102:2;26091:9;26087:18;26079:26;;26115:71;26183:1;26172:9;26168:17;26159:6;26115:71;:::i;:::-;26196:72;26264:2;26253:9;26249:18;26240:6;26196:72;:::i;:::-;25943:332;;;;;:::o;26281:507::-;26360:6;26368;26417:2;26405:9;26396:7;26392:23;26388:32;26385:119;;;26423:79;;:::i;:::-;26385:119;26543:1;26568:64;26624:7;26615:6;26604:9;26600:22;26568:64;:::i;:::-;26558:74;;26514:128;26681:2;26707:64;26763:7;26754:6;26743:9;26739:22;26707:64;:::i;:::-;26697:74;;26652:129;26281:507;;;;;:::o;26794:169::-;26878:11;26912:6;26907:3;26900:19;26952:4;26947:3;26943:14;26928:29;;26794:169;;;;:::o;26969:220::-;27109:34;27105:1;27097:6;27093:14;27086:58;27178:3;27173:2;27165:6;27161:15;27154:28;26969:220;:::o;27195:366::-;27337:3;27358:67;27422:2;27417:3;27358:67;:::i;:::-;27351:74;;27434:93;27523:3;27434:93;:::i;:::-;27552:2;27547:3;27543:12;27536:19;;27195:366;;;:::o;27567:419::-;27733:4;27771:2;27760:9;27756:18;27748:26;;27820:9;27814:4;27810:20;27806:1;27795:9;27791:17;27784:47;27848:131;27974:4;27848:131;:::i;:::-;27840:139;;27567:419;;;:::o;27992:176::-;28132:28;28128:1;28120:6;28116:14;28109:52;27992:176;:::o;28174:366::-;28316:3;28337:67;28401:2;28396:3;28337:67;:::i;:::-;28330:74;;28413:93;28502:3;28413:93;:::i;:::-;28531:2;28526:3;28522:12;28515:19;;28174:366;;;:::o;28546:419::-;28712:4;28750:2;28739:9;28735:18;28727:26;;28799:9;28793:4;28789:20;28785:1;28774:9;28770:17;28763:47;28827:131;28953:4;28827:131;:::i;:::-;28819:139;;28546:419;;;:::o;28971:188::-;29009:3;29028:18;29044:1;29028:18;:::i;:::-;29023:23;;29060:18;29076:1;29060:18;:::i;:::-;29055:23;;29101:1;29098;29094:9;29087:16;;29124:4;29119:3;29116:13;29113:39;;;29132:18;;:::i;:::-;29113:39;28971:188;;;;:::o;29165:191::-;29203:4;29223:18;29239:1;29223:18;:::i;:::-;29218:23;;29255:18;29271:1;29255:18;:::i;:::-;29250:23;;29297:1;29294;29290:9;29282:17;;29321:4;29315;29312:14;29309:40;;;29329:18;;:::i;:::-;29309:40;29165:191;;;;:::o

Swarm Source

ipfs://dd3ad04970e6212d98542f00c80af10857fab2daf343dbfcff6aeb363beade0d

Block Transaction 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

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.