ETH Price: $3,323.32 (+2.95%)

Contract

0xd3914a73367F8015070f073D5C69602F3a48B80D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConnectAaveMigrator

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-07
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

interface MemoryInterface {
    function getUint(uint _id) external returns (uint _num);
    function setUint(uint _id, uint _val) external;
}

interface TokenInterface {
    function approve(address, uint256) external;
    function transfer(address, uint) external;
    function transferFrom(address, address, uint) external;
    function deposit() external payable;
    function withdraw(uint) external;
    function balanceOf(address) external view returns (uint);
    function decimals() external view returns (uint);
}

interface AaveV1Interface {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external payable;
    function redeemUnderlying(
        address _reserve,
        address payable _user,
        uint256 _amount,
        uint256 _aTokenBalanceAfterRedeem
    ) external;
    
    function setUserUseReserveAsCollateral(address _reserve, bool _useAsCollateral) external;
    function getUserReserveData(address _reserve, address _user) external view returns (
        uint256 currentATokenBalance,
        uint256 currentBorrowBalance,
        uint256 principalBorrowBalance,
        uint256 borrowRateMode,
        uint256 borrowRate,
        uint256 liquidityRate,
        uint256 originationFee,
        uint256 variableBorrowIndex,
        uint256 lastUpdateTimestamp,
        bool usageAsCollateralEnabled
    );
    function borrow(address _reserve, uint256 _amount, uint256 _interestRateMode, uint16 _referralCode) external;
    function repay(address _reserve, uint256 _amount, address payable _onBehalfOf) external payable;
}

interface AaveProviderInterface {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
}

interface AaveV1CoreInterface {
    function getReserveATokenAddress(address _reserve) external view returns (address);
}

interface ATokenInterface {
    function redeem(uint256 _amount) external;
    function balanceOf(address _user) external view returns(uint256);
    function principalBalanceOf(address _user) external view returns(uint256);

    function allowance(address, address) external view returns (uint);
    function approve(address, uint) external;
    function transfer(address, uint) external returns (bool);
    function transferFrom(address, address, uint) external returns (bool);
}

interface AaveV2Interface {
    function deposit(address _asset, uint256 _amount, address _onBehalfOf, uint16 _referralCode) external;
    function withdraw(address _asset, uint256 _amount, address _to) external;
    function borrow(
        address _asset,
        uint256 _amount,
        uint256 _interestRateMode,
        uint16 _referralCode,
        address _onBehalfOf
    ) external;
    function repay(address _asset, uint256 _amount, uint256 _rateMode, address _onBehalfOf) external;
    function setUserUseReserveAsCollateral(address _asset, bool _useAsCollateral) external;
    function getUserAccountData(address user) external view returns (
        uint256 totalCollateralETH,
        uint256 totalDebtETH,
        uint256 availableBorrowsETH,
        uint256 currentLiquidationThreshold,
        uint256 ltv,
        uint256 healthFactor
    );
}

interface AaveV2LendingPoolProviderInterface {
    function getLendingPool() external view returns (address);
}

// Aave Protocol Data Provider
interface AaveV2DataProviderInterface {
    function getReserveTokensAddresses(address _asset) external view returns (
        address aTokenAddress,
        address stableDebtTokenAddress,
        address variableDebtTokenAddress
    );
    function getUserReserveData(address _asset, address _user) external view returns (
        uint256 currentATokenBalance,
        uint256 currentStableDebt,
        uint256 currentVariableDebt,
        uint256 principalStableDebt,
        uint256 scaledVariableDebt,
        uint256 stableBorrowRate,
        uint256 liquidityRate,
        uint40 stableRateLastUpdated,
        bool usageAsCollateralEnabled
    );
    function getReserveConfigurationData(address asset) external view returns (
        uint256 decimals,
        uint256 ltv,
        uint256 liquidationThreshold,
        uint256 liquidationBonus,
        uint256 reserveFactor,
        bool usageAsCollateralEnabled,
        bool borrowingEnabled,
        bool stableBorrowRateEnabled,
        bool isActive,
        bool isFrozen
    );
}

interface AaveV2AddressProviderRegistryInterface {
    function getAddressesProvidersList() external view returns (address[] memory);
}

interface ATokenV2Interface {
    function scaledBalanceOf(address _user) external view returns (uint256);
    function isTransferAllowed(address _user, uint256 _amount) external view returns (bool);
    function balanceOf(address _user) external view returns(uint256);
    function transferFrom(address, address, uint) external returns (bool);
}

interface DSAInterface {
    function isAuth(address) external view returns(bool);
}

contract DSMath {

    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, "math-not-safe");
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "math-not-safe");
    }

    uint constant WAD = 10 ** 18;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }

    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }

}

contract Helpers is DSMath {
    /**
     * @dev Return ethereum address
     */
    function getEthAddr() internal pure returns (address) {
        return 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // ETH Address
    }

    /**
     * @dev Return Weth address
    */
    function getWethAddr() internal pure returns (address) {
        return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // Mainnet WETH Address
        // return 0xd0A1E359811322d97991E03f863a0C30C2cF029C; // Kovan WETH Address
    }

    /**
     * @dev Return Memory Variable Address
     */
    function getMemoryAddr() internal pure returns (address) {
        return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address
    }

    /**
     * @dev Get Uint value from InstaMemory Contract.
    */
    function getUint(uint getId, uint val) internal returns (uint returnVal) {
        returnVal = getId == 0 ? val : MemoryInterface(getMemoryAddr()).getUint(getId);
    }

    /**
     * @dev Set Uint value in InstaMemory Contract.
    */
    function setUint(uint setId, uint val) internal {
        if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);
    }

    /**
     * @dev Connector Details.
     */
    function connectorID() public pure returns(uint model, uint id) {
        (model, id) = (1, 64);
    }
}

contract AaveImportHelpers is Helpers {

    /**
     * @dev get Aave Provider
    */
    function getAaveProvider() internal pure returns (AaveProviderInterface) {
        return AaveProviderInterface(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8); //mainnet
        // return AaveProviderInterface(0x506B0B2CF20FAA8f38a4E2B524EE43e1f4458Cc5); //kovan
    }

    /**
     * @dev get Aave Lending Pool Provider
    */
    function getAaveV2Provider() internal pure returns (AaveV2LendingPoolProviderInterface) {
        return AaveV2LendingPoolProviderInterface(0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5); //mainnet
        // return AaveV2LendingPoolProviderInterface(0x652B2937Efd0B5beA1c8d54293FC1289672AFC6b); //kovan
    }

    /**
     * @dev get Aave Protocol Data Provider
    */
    function getAaveV2DataProvider() internal pure returns (AaveV2DataProviderInterface) {
        return AaveV2DataProviderInterface(0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d); //mainnet
        // return AaveV2DataProviderInterface(0x744C1aaA95232EeF8A9994C4E0b3a89659D9AB79); //kovan
    }

    /**
     * @dev get Referral Code
    */
    function getReferralCode() internal pure returns (uint16) {
        return 3228;
    }

    /**
     * @dev get Referral Code V2
    */
    function getReferralCodeV2() internal pure returns (uint16) {
        return 3228;
    }

    function getBorrowRateMode(AaveV1Interface aave, address token) internal view returns (uint rateMode) {
        (, , , rateMode, , , , , , ) = aave.getUserReserveData(token, address(this));
    }

    function getWithdrawBalance(address token) internal view returns (uint bal) {
        AaveV1Interface aave = AaveV1Interface(getAaveProvider().getLendingPool());
        (bal, , , , , , , , , ) = aave.getUserReserveData(token, address(this));
    }

    function getPaybackBalance(AaveV1Interface aave, address account, address token) internal view returns (uint bal, uint fee) {
        (, bal, , , , , fee, , , ) = aave.getUserReserveData(token, account);
    }

    function getTotalBorrowBalance(AaveV1Interface aave, address account, address token) internal view returns (uint amt) {
        (, uint bal, , , , , uint fee, , , ) = aave.getUserReserveData(token, account);
        amt = add(bal, fee);
    }

    function getIsCollV2(AaveV2DataProviderInterface aaveData, address token, address user) internal view returns (bool isCol) {
        (, , , , , , , , isCol) = aaveData.getUserReserveData(token, user);
    }

    function convertEthToWeth(bool isEth, TokenInterface token, uint amount) internal {
        if(isEth) token.deposit.value(amount)();
    }

    function convertWethToEth(bool isEth, TokenInterface token, uint amount) internal {
       if(isEth) {
            token.approve(address(token), amount);
            token.withdraw(amount);
        }
    }
}

contract AaveV1Resolver is AaveImportHelpers {

    function _v1PaybackBehalf(
        uint _length,
        AaveV1Interface aaveV1,
        address[] memory tokens,
        uint[] memory amts,
        address userAccount
    ) internal {
        address ethAddr = getEthAddr();
        
        for (uint i = 0; i < _length; i++) {

            address token = tokens[i];
            uint256 amt = amts[i];

            if (amts[i] > 0) {
                uint ethAmt;
                if (token == ethAddr) {
                    ethAmt = amt;
                } else {
                    TokenInterface(token).approve(getAaveProvider().getLendingPoolCore(), amt);
                }

                aaveV1.repay.value(ethAmt)(token, amt, payable(userAccount));
            }
        }
    }

    
    function _v1Withdraw(
        uint _length,
        ATokenInterface[] memory atokenContracts,
        uint256[] memory amts
    ) internal {

        for (uint i = 0; i < _length; i++) {
            if (amts[i] > 0) {
                atokenContracts[i].redeem(amts[i]);
            }
        }
    }

    function _v1TransferATokens(
        uint _length,
        ATokenInterface[] memory atokenContracts,
        uint256[] memory amts,
        address userAccount
    ) internal {
        for (uint i = 0; i < _length; i++) {
            if (amts[i] > 0) {
                atokenContracts[i].transferFrom(userAccount, address(this), amts[i]);
            }
        }
    }
}

contract AaveV2Resolver is AaveV1Resolver {

    function _v2Deposit(
        uint _length,
        AaveV2Interface aaveV2,
        AaveV2DataProviderInterface aaveDataV2,
        address[] memory tokens,
        uint256[] memory amts
    ) internal {
        address ethAddr = getEthAddr();
        for (uint i = 0; i < _length; i++) {
            address token = tokens[i];
            uint256 amt = amts[i];

            if (amt > 0) {

                bool isEth = token ==ethAddr;
                address _token = isEth ? getWethAddr() : token;
                TokenInterface tokenContract = TokenInterface(_token);

                if (isEth) {
                    convertEthToWeth(isEth, tokenContract, amt);
                }

                tokenContract.approve(address(aaveV2), amt);
                aaveV2.deposit(_token, amt, address(this), getReferralCodeV2());

                if (!getIsCollV2(aaveDataV2, _token, address(this))) {
                    aaveV2.setUserUseReserveAsCollateral(_token, true);
                }
            }
        }
    }


    function _v2Borrow(
        uint _length,
        AaveV2Interface aaveV2,
        address[] memory tokens,
        uint256[] memory amts,
        uint256[] memory rateModes
    ) internal {
        address ethAddr = getEthAddr();
        for (uint i = 0; i < _length; i++) {
            address token = tokens[i];
            uint256 amt = amts[i];
            uint256 rateMode = rateModes[i];

            if (amt > 0) {
                bool isEth = token == ethAddr;
                address _token = isEth ? getWethAddr() : token;

                aaveV2.borrow(_token, amt, rateMode, getReferralCode(), address(this));
                convertWethToEth(isEth, TokenInterface(_token), amt);
            }
        }
    }
}

contract AaveMigrateResolver is AaveV2Resolver {
    event LogMigrate(
        address[] aTokens,
        uint[] aTknBals,
        uint[] borrowBals,
        uint[] borrowBalsFee
    );

    event LogMigrateUser(
        address user,
        address[] aTokens,
        uint[] aTknBals,
        uint[] borrowBals,
        uint[] borrowBalsFee
    );

    struct AaveData {
        address[] tokens;
        address[] atokens;
        uint[] borrowAmts;
        uint[] borrowFeeAmts;
        uint[] atokensBal;
        uint[] rateModes;
        ATokenInterface[] atokenContracts;
    }


    function migrate(address[] calldata tokens) external payable {
        AaveV1Interface aaveV1 = AaveV1Interface(getAaveProvider().getLendingPool());
        AaveV1CoreInterface aaveCoreV1 = AaveV1CoreInterface(getAaveProvider().getLendingPoolCore());

        AaveV2Interface aaveV2 = AaveV2Interface(getAaveV2Provider().getLendingPool());
        AaveV2DataProviderInterface aaveV2Data = getAaveV2DataProvider();

        address userAccount = address(this);

        uint _length = tokens.length;
        require(_length > 0, "length-should-be-positive");

        AaveData memory _aaveData = AaveData({
            tokens: tokens,
            atokens: new address[](_length),
            borrowAmts: new uint[](_length),
            borrowFeeAmts: new uint[](_length),
            atokensBal: new uint[](_length),
            rateModes: new uint[](_length),
            atokenContracts: new ATokenInterface[](_length)
        });

        for (uint i = 0; i < _length; i++) {
            _aaveData.atokens[i] = aaveCoreV1.getReserveATokenAddress(tokens[i]);
            require(_aaveData.atokens[i] != address(0), "token-not-found");
            _aaveData.atokenContracts[i] = ATokenInterface(_aaveData.atokens[i]);
            _aaveData.atokensBal[i] = _aaveData.atokenContracts[i].balanceOf(userAccount);
            (uint amt, uint fee) = getPaybackBalance(aaveV1, userAccount, tokens[i]);
            _aaveData.borrowAmts[i] = add(amt, fee);
            _aaveData.borrowFeeAmts[i] = fee;

            // _aaveData.rateModes[i] = getBorrowRateMode(aaveV1, tokens[i]);
            _aaveData.rateModes[i] = 2;
        }

        _v2Borrow(_length, aaveV2, _aaveData.tokens, _aaveData.borrowAmts, _aaveData.rateModes);
        _v1PaybackBehalf(_length, aaveV1, _aaveData.tokens, _aaveData.borrowAmts, userAccount);
        _v1Withdraw(_length, _aaveData.atokenContracts, _aaveData.atokensBal);
        _v2Deposit(_length, aaveV2, aaveV2Data, _aaveData.tokens, _aaveData.atokensBal);

        emit LogMigrate(_aaveData.atokens, _aaveData.atokensBal, _aaveData.borrowAmts, _aaveData.borrowFeeAmts);
    }

    function migrateUser(address userAccount, address[] calldata tokens) external payable {
        require(DSAInterface(address(this)).isAuth(userAccount), "user-account-not-auth");

        uint _length = tokens.length;
        require(_length > 0, "0-tokens-not-allowed");

        AaveV1Interface aaveV1 = AaveV1Interface(getAaveProvider().getLendingPool());
        AaveV1CoreInterface aaveCoreV1 = AaveV1CoreInterface(getAaveProvider().getLendingPoolCore());

        AaveV2Interface aaveV2 = AaveV2Interface(getAaveV2Provider().getLendingPool());
        AaveV2DataProviderInterface aaveV2Data = getAaveV2DataProvider();

        AaveData memory _aaveData = AaveData({
            tokens: tokens,
            atokens: new address[](_length),
            borrowAmts: new uint[](_length),
            borrowFeeAmts: new uint[](_length),
            atokensBal: new uint[](_length),
            rateModes: new uint[](_length),
            atokenContracts: new ATokenInterface[](_length)
        });

        for (uint i = 0; i < _length; i++) {
            _aaveData.atokens[i] = aaveCoreV1.getReserveATokenAddress(tokens[i]);
            require(_aaveData.atokens[i] != address(0), "token-not-found");
            _aaveData.atokenContracts[i] = ATokenInterface(_aaveData.atokens[i]);
            _aaveData.atokensBal[i] = _aaveData.atokenContracts[i].balanceOf(userAccount);
            (uint amt, uint fee) = getPaybackBalance(aaveV1, userAccount, tokens[i]);
            _aaveData.borrowAmts[i] = add(amt, fee);
            _aaveData.borrowFeeAmts[i] = fee;

            // _aaveData.rateModes[i] = getBorrowRateMode(aaveV1, tokens[i]);
            _aaveData.rateModes[i] = 2;
        }

        _v2Borrow(_length, aaveV2, _aaveData.tokens, _aaveData.borrowAmts, _aaveData.rateModes);
        _v1PaybackBehalf(_length, aaveV1, _aaveData.tokens, _aaveData.borrowAmts, userAccount);
        _v1TransferATokens(_length, _aaveData.atokenContracts, _aaveData.atokensBal, userAccount);
        _v1Withdraw(_length, _aaveData.atokenContracts, _aaveData.atokensBal);
        _v2Deposit(_length, aaveV2, aaveV2Data, _aaveData.tokens, _aaveData.atokensBal);

        emit LogMigrateUser(userAccount, _aaveData.atokens, _aaveData.atokensBal, _aaveData.borrowAmts, _aaveData.borrowFeeAmts);
    }
}

contract ConnectAaveMigrator is AaveMigrateResolver {
    string public name = "Aave-Migrator-v1.0";
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"aTokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"aTknBals","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"borrowBals","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"borrowBalsFee","type":"uint256[]"}],"name":"LogMigrate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address[]","name":"aTokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"aTknBals","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"borrowBals","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"borrowBalsFee","type":"uint256[]"}],"name":"LogMigrateUser","type":"event"},{"inputs":[],"name":"connectorID","outputs":[{"internalType":"uint256","name":"model","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"migrate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"userAccount","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"migrateUser","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280601281526020017f416176652d4d69677261746f722d76312e300000000000000000000000000000815250600090805190602001906200005192919062000066565b503480156200005f57600080fd5b5062000115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000a957805160ff1916838001178555620000da565b82800160010185558215620000da579182015b82811115620000d9578251825591602001919060010190620000bc565b5b509050620000e99190620000ed565b5090565b6200011291905b808211156200010e576000816000905550600101620000f4565b5090565b90565b61289c80620001256000396000f3fe60806040526004361061003f5760003560e01c806306fdde03146100445780632e558d691461006f5780633589a8361461008b578063eb15f781146100a7575b600080fd5b34801561005057600080fd5b506100596100d3565b60405161006691906125b9565b60405180910390f35b61008960048036036100849190810190611e47565b610171565b005b6100a560048036036100a09190810190611def565b6108f7565b005b3480156100b357600080fd5b506100bc611156565b6040516100ca929190612696565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101695780601f1061013e57610100808354040283529160200191610169565b820191906000526020600020905b81548152906001019060200180831161014c57829003601f168201915b505050505081565b600061017b61116f565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101c057600080fd5b505afa1580156101d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101f89190810190611dc6565b9050600061020461116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561024957600080fd5b505afa15801561025d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102819190810190611dc6565b9050600061028d61118b565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061030a9190810190611dc6565b905060006103166111a7565b90506000309050600087879050905060008111610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f9061263b565b60405180910390fd5b610370611cad565b6040518060e001604052808a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001836040519080825280602002602001820160405280156103f15781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104265781602001602082028038833980820191505090505b5081526020018360405190808252806020026020018201604052801561045b5781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104905781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104c55781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104fa5781602001602082028038833980820191505090505b50815250905060008090505b82811015610848578673ffffffffffffffffffffffffffffffffffffffff166334b3beee8b8b8481811061053657fe5b905060200201602061054b9190810190611d9d565b6040518263ffffffff1660e01b8152600401610567919061234d565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105b79190810190611dc6565b826020015182815181106105c757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168260200151828151811061062957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f906125db565b60405180910390fd5b8160200151818151811061069857fe5b60200260200101518260c0015182815181106106b057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160c0015181815181106106fa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161073a919061234d565b60206040518083038186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061078a9190810190611eb5565b8260800151828151811061079a57fe5b6020026020010181815250506000806107d48a878e8e878181106107ba57fe5b90506020020160206107cf9190810190611d9d565b6111c3565b915091506107e2828261128c565b846040015184815181106107f257fe5b602002602001018181525050808460600151848151811061080f57fe5b60200260200101818152505060028460a00151848151811061082d57fe5b60200260200101818152505050508080600101915050610506565b506108628286836000015184604001518560a001516112dc565b61087782888360000151846040015187611433565b61088a828260c001518360800151611653565b61089f82868684600001518560800151611722565b7fa1233cb80447976c4e850f9356b6cc5218533c09121059c9b2291c0b6b56575181602001518260800151836040015184606001516040516108e49493929190612558565b60405180910390a1505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16632520e7ff846040518263ffffffff1660e01b8152600401610930919061234d565b60206040518083038186803b15801561094857600080fd5b505afa15801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109809190810190611e8c565b6109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b69061261b565b60405180910390fd5b600082829050905060008111610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061265b565b60405180910390fd5b6000610a1461116f565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a919190810190611dc6565b90506000610a9d61116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae257600080fd5b505afa158015610af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b1a9190810190611dc6565b90506000610b2661118b565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6b57600080fd5b505afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ba39190810190611dc6565b90506000610baf6111a7565b9050610bb9611cad565b6040518060e00160405280898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200187604051908082528060200260200182016040528015610c3a5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610c6f5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610ca45781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610cd95781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610d0e5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610d435781602001602082028038833980820191505090505b50815250905060008090505b86811015611091578473ffffffffffffffffffffffffffffffffffffffff166334b3beee8a8a84818110610d7f57fe5b9050602002016020610d949190810190611d9d565b6040518263ffffffff1660e01b8152600401610db0919061234d565b60206040518083038186803b158015610dc857600080fd5b505afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e009190810190611dc6565b82602001518281518110610e1057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1682602001518281518110610e7257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec8906125db565b60405180910390fd5b81602001518181518110610ee157fe5b60200260200101518260c001518281518110610ef957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160c001518181518110610f4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff1660e01b8152600401610f83919061234d565b60206040518083038186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd39190810190611eb5565b82608001518281518110610fe357fe5b60200260200101818152505060008061101d888d8d8d8781811061100357fe5b90506020020160206110189190810190611d9d565b6111c3565b9150915061102b828261128c565b8460400151848151811061103b57fe5b602002602001018181525050808460600151848151811061105857fe5b60200260200101818152505060028460a00151848151811061107657fe5b60200260200101818152505050508080600101915050610d4f565b506110ab8684836000015184604001518560a001516112dc565b6110c08686836000015184604001518d611433565b6110d4868260c0015183608001518c611956565b6110e7868260c001518360800151611653565b6110fc86848484600001518560800151611722565b7ff40a309071e604eb2023cf8efeb9b25624c5c052207104c3066a1df0defb91278982602001518360800151846040015185606001516040516111439594939291906123c8565b60405180910390a1505050505050505050565b6000806001604081915080905080925081935050509091565b60007324a42fd28c976a61df5d00d0599c34c4f90748c8905090565b600073b53c1a33016b2dc2ff3653530bff1848a515c8c5905090565b600073057835ad21a177dbdd3090bb1cae03eacf78fc6d905090565b6000808473ffffffffffffffffffffffffffffffffffffffff166328dd2d0184866040518363ffffffff1660e01b8152600401611201929190612368565b6101406040518083038186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112529190810190611ede565b9091929394959697985090919293949596509091929394955090919293945090919293509091509050508092508193505050935093915050565b60008282840191508110156112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd906125fb565b60405180910390fd5b92915050565b60006112e6611a4b565b905060008090505b8681101561142a57600085828151811061130457fe5b60200260200101519050600085838151811061131c57fe5b60200260200101519050600085848151811061133457fe5b60200260200101519050600082111561141a5760008573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000816113875784611390565b61138f611a67565b5b90508a73ffffffffffffffffffffffffffffffffffffffff1663a415bcad8286866113b9611a83565b306040518663ffffffff1660e01b81526004016113da959493929190612505565b600060405180830381600087803b1580156113f457600080fd5b505af1158015611408573d6000803e3d6000fd5b50505050611417828286611a8d565b50505b50505080806001019150506112ee565b50505050505050565b600061143d611a4b565b905060008090505b8681101561164a57600085828151811061145b57fe5b60200260200101519050600085838151811061147357fe5b60200260200101519050600086848151811061148b57fe5b6020026020010151111561163b5760008473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d7578190506115c9565b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b36114fb61116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115789190810190611dc6565b846040518363ffffffff1660e01b8152600401611596929190612460565b600060405180830381600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050505b8873ffffffffffffffffffffffffffffffffffffffff16635ceae9c48285858a6040518563ffffffff1660e01b815260040161160793929190612489565b6000604051808303818588803b15801561162057600080fd5b505af1158015611634573d6000803e3d6000fd5b5050505050505b50508080600101915050611445565b50505050505050565b60008090505b8381101561171c57600082828151811061166f57fe5b6020026020010151111561170f5782818151811061168957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663db006a758383815181106116b857fe5b60200260200101516040518263ffffffff1660e01b81526004016116dc919061267b565b600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b505050505b8080600101915050611659565b50505050565b600061172c611a4b565b905060008090505b8681101561194d57600084828151811061174a57fe5b60200260200101519050600084838151811061176257fe5b60200260200101519050600081111561193e5760008473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490506000816117b557836117be565b6117bd611a67565b5b9050600081905082156117d7576117d6838286611b71565b5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38c866040518363ffffffff1660e01b8152600401611812929190612460565b600060405180830381600087803b15801561182c57600080fd5b505af1158015611840573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663e8eda9df83863061186b611bde565b6040518563ffffffff1660e01b815260040161188a94939291906124c0565b600060405180830381600087803b1580156118a457600080fd5b505af11580156118b8573d6000803e3d6000fd5b505050506118c78a8330611be8565b61193a578a73ffffffffffffffffffffffffffffffffffffffff16635a3b74b98360016040518363ffffffff1660e01b8152600401611907929190612437565b600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b505050505b5050505b50508080600101915050611734565b50505050505050565b60008090505b84811015611a4457600083828151811061197257fe5b60200260200101511115611a375783818151811061198c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166323b872dd83308685815181106119bd57fe5b60200260200101516040518463ffffffff1660e01b81526004016119e393929190612391565b602060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a359190810190611e8c565b505b808060010191505061195c565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b6000610c9c905090565b8215611b6c578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401611ace929190612460565b600060405180830381600087803b158015611ae857600080fd5b505af1158015611afc573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401611b39919061267b565b600060405180830381600087803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050505b505050565b8215611bd9578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bbf57600080fd5b505af1158015611bd3573d6000803e3d6000fd5b50505050505b505050565b6000610c9c905090565b60008373ffffffffffffffffffffffffffffffffffffffff166328dd2d0184846040518363ffffffff1660e01b8152600401611c25929190612368565b6101206040518083038186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c769190810190611fb9565b9091929394959697509091929394959650909192939495509091929394509091929350909192509091509050809150509392505050565b6040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b600081359050611cf98161280a565b92915050565b600081519050611d0e8161280a565b92915050565b60008083601f840112611d2657600080fd5b8235905067ffffffffffffffff811115611d3f57600080fd5b602083019150836020820283011115611d5757600080fd5b9250929050565b600081519050611d6d81612821565b92915050565b600081519050611d8281612838565b92915050565b600081519050611d978161284f565b92915050565b600060208284031215611daf57600080fd5b6000611dbd84828501611cea565b91505092915050565b600060208284031215611dd857600080fd5b6000611de684828501611cff565b91505092915050565b600080600060408486031215611e0457600080fd5b6000611e1286828701611cea565b935050602084013567ffffffffffffffff811115611e2f57600080fd5b611e3b86828701611d14565b92509250509250925092565b60008060208385031215611e5a57600080fd5b600083013567ffffffffffffffff811115611e7457600080fd5b611e8085828601611d14565b92509250509250929050565b600060208284031215611e9e57600080fd5b6000611eac84828501611d5e565b91505092915050565b600060208284031215611ec757600080fd5b6000611ed584828501611d73565b91505092915050565b6000806000806000806000806000806101408b8d031215611efe57600080fd5b6000611f0c8d828e01611d73565b9a50506020611f1d8d828e01611d73565b9950506040611f2e8d828e01611d73565b9850506060611f3f8d828e01611d73565b9750506080611f508d828e01611d73565b96505060a0611f618d828e01611d73565b95505060c0611f728d828e01611d73565b94505060e0611f838d828e01611d73565b935050610100611f958d828e01611d73565b925050610120611fa78d828e01611d5e565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c031215611fd857600080fd5b6000611fe68c828d01611d73565b9950506020611ff78c828d01611d73565b98505060406120088c828d01611d73565b97505060606120198c828d01611d73565b965050608061202a8c828d01611d73565b95505060a061203b8c828d01611d73565b94505060c061204c8c828d01611d73565b93505060e061205d8c828d01611d88565b92505061010061206f8c828d01611d5e565b9150509295985092959850929598565b600061208b83836120be565b60208301905092915050565b60006120a3838361232f565b60208301905092915050565b6120b88161275f565b82525050565b6120c78161274d565b82525050565b6120d68161274d565b82525050565b60006120e7826126df565b6120f1818561271a565b93506120fc836126bf565b8060005b8381101561212d578151612114888261207f565b975061211f83612700565b925050600181019050612100565b5085935050505092915050565b6000612145826126ea565b61214f818561272b565b935061215a836126cf565b8060005b8381101561218b5781516121728882612097565b975061217d8361270d565b92505060018101905061215e565b5085935050505092915050565b6121a181612771565b82525050565b60006121b2826126f5565b6121bc818561273c565b93506121cc8185602086016127c6565b6121d5816127f9565b840191505092915050565b60006121ed600f8361273c565b91507f746f6b656e2d6e6f742d666f756e6400000000000000000000000000000000006000830152602082019050919050565b600061222d600d8361273c565b91507f6d6174682d6e6f742d73616665000000000000000000000000000000000000006000830152602082019050919050565b600061226d60158361273c565b91507f757365722d6163636f756e742d6e6f742d6175746800000000000000000000006000830152602082019050919050565b60006122ad60198361273c565b91507f6c656e6774682d73686f756c642d62652d706f736974697665000000000000006000830152602082019050919050565b60006122ed60148361273c565b91507f302d746f6b656e732d6e6f742d616c6c6f7765640000000000000000000000006000830152602082019050919050565b6123298161277d565b82525050565b612338816127ab565b82525050565b612347816127ab565b82525050565b600060208201905061236260008301846120cd565b92915050565b600060408201905061237d60008301856120cd565b61238a60208301846120cd565b9392505050565b60006060820190506123a660008301866120cd565b6123b360208301856120cd565b6123c0604083018461233e565b949350505050565b600060a0820190506123dd60008301886120cd565b81810360208301526123ef81876120dc565b90508181036040830152612403818661213a565b90508181036060830152612417818561213a565b9050818103608083015261242b818461213a565b90509695505050505050565b600060408201905061244c60008301856120cd565b6124596020830184612198565b9392505050565b600060408201905061247560008301856120cd565b612482602083018461233e565b9392505050565b600060608201905061249e60008301866120cd565b6124ab602083018561233e565b6124b860408301846120af565b949350505050565b60006080820190506124d560008301876120cd565b6124e2602083018661233e565b6124ef60408301856120cd565b6124fc6060830184612320565b95945050505050565b600060a08201905061251a60008301886120cd565b612527602083018761233e565b612534604083018661233e565b6125416060830185612320565b61254e60808301846120cd565b9695505050505050565b6000608082019050818103600083015261257281876120dc565b90508181036020830152612586818661213a565b9050818103604083015261259a818561213a565b905081810360608301526125ae818461213a565b905095945050505050565b600060208201905081810360008301526125d381846121a7565b905092915050565b600060208201905081810360008301526125f4816121e0565b9050919050565b6000602082019050818103600083015261261481612220565b9050919050565b6000602082019050818103600083015261263481612260565b9050919050565b60006020820190508181036000830152612654816122a0565b9050919050565b60006020820190508181036000830152612674816122e0565b9050919050565b6000602082019050612690600083018461233e565b92915050565b60006040820190506126ab600083018561233e565b6126b8602083018461233e565b9392505050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006127588261278b565b9050919050565b600061276a8261278b565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b60005b838110156127e45780820151818401526020810190506127c9565b838111156127f3576000848401525b50505050565b6000601f19601f8301169050919050565b6128138161274d565b811461281e57600080fd5b50565b61282a81612771565b811461283557600080fd5b50565b612841816127ab565b811461284c57600080fd5b50565b612858816127b5565b811461286357600080fd5b5056fea2646970667358221220a044d39c723d8d2fb28017def5a45104dc23222b30f142204870c1e1fabf970864736f6c63430006000033

Deployed Bytecode

0x60806040526004361061003f5760003560e01c806306fdde03146100445780632e558d691461006f5780633589a8361461008b578063eb15f781146100a7575b600080fd5b34801561005057600080fd5b506100596100d3565b60405161006691906125b9565b60405180910390f35b61008960048036036100849190810190611e47565b610171565b005b6100a560048036036100a09190810190611def565b6108f7565b005b3480156100b357600080fd5b506100bc611156565b6040516100ca929190612696565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101695780601f1061013e57610100808354040283529160200191610169565b820191906000526020600020905b81548152906001019060200180831161014c57829003601f168201915b505050505081565b600061017b61116f565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101c057600080fd5b505afa1580156101d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101f89190810190611dc6565b9050600061020461116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561024957600080fd5b505afa15801561025d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102819190810190611dc6565b9050600061028d61118b565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102d257600080fd5b505afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061030a9190810190611dc6565b905060006103166111a7565b90506000309050600087879050905060008111610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035f9061263b565b60405180910390fd5b610370611cad565b6040518060e001604052808a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001836040519080825280602002602001820160405280156103f15781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104265781602001602082028038833980820191505090505b5081526020018360405190808252806020026020018201604052801561045b5781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104905781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104c55781602001602082028038833980820191505090505b508152602001836040519080825280602002602001820160405280156104fa5781602001602082028038833980820191505090505b50815250905060008090505b82811015610848578673ffffffffffffffffffffffffffffffffffffffff166334b3beee8b8b8481811061053657fe5b905060200201602061054b9190810190611d9d565b6040518263ffffffff1660e01b8152600401610567919061234d565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105b79190810190611dc6565b826020015182815181106105c757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168260200151828151811061062957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067f906125db565b60405180910390fd5b8160200151818151811061069857fe5b60200260200101518260c0015182815181106106b057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160c0015181815181106106fa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161073a919061234d565b60206040518083038186803b15801561075257600080fd5b505afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061078a9190810190611eb5565b8260800151828151811061079a57fe5b6020026020010181815250506000806107d48a878e8e878181106107ba57fe5b90506020020160206107cf9190810190611d9d565b6111c3565b915091506107e2828261128c565b846040015184815181106107f257fe5b602002602001018181525050808460600151848151811061080f57fe5b60200260200101818152505060028460a00151848151811061082d57fe5b60200260200101818152505050508080600101915050610506565b506108628286836000015184604001518560a001516112dc565b61087782888360000151846040015187611433565b61088a828260c001518360800151611653565b61089f82868684600001518560800151611722565b7fa1233cb80447976c4e850f9356b6cc5218533c09121059c9b2291c0b6b56575181602001518260800151836040015184606001516040516108e49493929190612558565b60405180910390a1505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16632520e7ff846040518263ffffffff1660e01b8152600401610930919061234d565b60206040518083038186803b15801561094857600080fd5b505afa15801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109809190810190611e8c565b6109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b69061261b565b60405180910390fd5b600082829050905060008111610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061265b565b60405180910390fd5b6000610a1461116f565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a919190810190611dc6565b90506000610a9d61116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae257600080fd5b505afa158015610af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b1a9190810190611dc6565b90506000610b2661118b565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6b57600080fd5b505afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ba39190810190611dc6565b90506000610baf6111a7565b9050610bb9611cad565b6040518060e00160405280898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200187604051908082528060200260200182016040528015610c3a5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610c6f5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610ca45781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610cd95781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610d0e5781602001602082028038833980820191505090505b50815260200187604051908082528060200260200182016040528015610d435781602001602082028038833980820191505090505b50815250905060008090505b86811015611091578473ffffffffffffffffffffffffffffffffffffffff166334b3beee8a8a84818110610d7f57fe5b9050602002016020610d949190810190611d9d565b6040518263ffffffff1660e01b8152600401610db0919061234d565b60206040518083038186803b158015610dc857600080fd5b505afa158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e009190810190611dc6565b82602001518281518110610e1057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff1682602001518281518110610e7257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec8906125db565b60405180910390fd5b81602001518181518110610ee157fe5b60200260200101518260c001518281518110610ef957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508160c001518181518110610f4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff1660e01b8152600401610f83919061234d565b60206040518083038186803b158015610f9b57600080fd5b505afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fd39190810190611eb5565b82608001518281518110610fe357fe5b60200260200101818152505060008061101d888d8d8d8781811061100357fe5b90506020020160206110189190810190611d9d565b6111c3565b9150915061102b828261128c565b8460400151848151811061103b57fe5b602002602001018181525050808460600151848151811061105857fe5b60200260200101818152505060028460a00151848151811061107657fe5b60200260200101818152505050508080600101915050610d4f565b506110ab8684836000015184604001518560a001516112dc565b6110c08686836000015184604001518d611433565b6110d4868260c0015183608001518c611956565b6110e7868260c001518360800151611653565b6110fc86848484600001518560800151611722565b7ff40a309071e604eb2023cf8efeb9b25624c5c052207104c3066a1df0defb91278982602001518360800151846040015185606001516040516111439594939291906123c8565b60405180910390a1505050505050505050565b6000806001604081915080905080925081935050509091565b60007324a42fd28c976a61df5d00d0599c34c4f90748c8905090565b600073b53c1a33016b2dc2ff3653530bff1848a515c8c5905090565b600073057835ad21a177dbdd3090bb1cae03eacf78fc6d905090565b6000808473ffffffffffffffffffffffffffffffffffffffff166328dd2d0184866040518363ffffffff1660e01b8152600401611201929190612368565b6101406040518083038186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112529190810190611ede565b9091929394959697985090919293949596509091929394955090919293945090919293509091509050508092508193505050935093915050565b60008282840191508110156112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd906125fb565b60405180910390fd5b92915050565b60006112e6611a4b565b905060008090505b8681101561142a57600085828151811061130457fe5b60200260200101519050600085838151811061131c57fe5b60200260200101519050600085848151811061133457fe5b60200260200101519050600082111561141a5760008573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000816113875784611390565b61138f611a67565b5b90508a73ffffffffffffffffffffffffffffffffffffffff1663a415bcad8286866113b9611a83565b306040518663ffffffff1660e01b81526004016113da959493929190612505565b600060405180830381600087803b1580156113f457600080fd5b505af1158015611408573d6000803e3d6000fd5b50505050611417828286611a8d565b50505b50505080806001019150506112ee565b50505050505050565b600061143d611a4b565b905060008090505b8681101561164a57600085828151811061145b57fe5b60200260200101519050600085838151811061147357fe5b60200260200101519050600086848151811061148b57fe5b6020026020010151111561163b5760008473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d7578190506115c9565b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b36114fb61116f565b73ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561154057600080fd5b505afa158015611554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115789190810190611dc6565b846040518363ffffffff1660e01b8152600401611596929190612460565b600060405180830381600087803b1580156115b057600080fd5b505af11580156115c4573d6000803e3d6000fd5b505050505b8873ffffffffffffffffffffffffffffffffffffffff16635ceae9c48285858a6040518563ffffffff1660e01b815260040161160793929190612489565b6000604051808303818588803b15801561162057600080fd5b505af1158015611634573d6000803e3d6000fd5b5050505050505b50508080600101915050611445565b50505050505050565b60008090505b8381101561171c57600082828151811061166f57fe5b6020026020010151111561170f5782818151811061168957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663db006a758383815181106116b857fe5b60200260200101516040518263ffffffff1660e01b81526004016116dc919061267b565b600060405180830381600087803b1580156116f657600080fd5b505af115801561170a573d6000803e3d6000fd5b505050505b8080600101915050611659565b50505050565b600061172c611a4b565b905060008090505b8681101561194d57600084828151811061174a57fe5b60200260200101519050600084838151811061176257fe5b60200260200101519050600081111561193e5760008473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490506000816117b557836117be565b6117bd611a67565b5b9050600081905082156117d7576117d6838286611b71565b5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38c866040518363ffffffff1660e01b8152600401611812929190612460565b600060405180830381600087803b15801561182c57600080fd5b505af1158015611840573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff1663e8eda9df83863061186b611bde565b6040518563ffffffff1660e01b815260040161188a94939291906124c0565b600060405180830381600087803b1580156118a457600080fd5b505af11580156118b8573d6000803e3d6000fd5b505050506118c78a8330611be8565b61193a578a73ffffffffffffffffffffffffffffffffffffffff16635a3b74b98360016040518363ffffffff1660e01b8152600401611907929190612437565b600060405180830381600087803b15801561192157600080fd5b505af1158015611935573d6000803e3d6000fd5b505050505b5050505b50508080600101915050611734565b50505050505050565b60008090505b84811015611a4457600083828151811061197257fe5b60200260200101511115611a375783818151811061198c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166323b872dd83308685815181106119bd57fe5b60200260200101516040518463ffffffff1660e01b81526004016119e393929190612391565b602060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a359190810190611e8c565b505b808060010191505061195c565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b6000610c9c905090565b8215611b6c578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401611ace929190612460565b600060405180830381600087803b158015611ae857600080fd5b505af1158015611afc573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401611b39919061267b565b600060405180830381600087803b158015611b5357600080fd5b505af1158015611b67573d6000803e3d6000fd5b505050505b505050565b8215611bd9578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bbf57600080fd5b505af1158015611bd3573d6000803e3d6000fd5b50505050505b505050565b6000610c9c905090565b60008373ffffffffffffffffffffffffffffffffffffffff166328dd2d0184846040518363ffffffff1660e01b8152600401611c25929190612368565b6101206040518083038186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c769190810190611fb9565b9091929394959697509091929394959650909192939495509091929394509091929350909192509091509050809150509392505050565b6040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b600081359050611cf98161280a565b92915050565b600081519050611d0e8161280a565b92915050565b60008083601f840112611d2657600080fd5b8235905067ffffffffffffffff811115611d3f57600080fd5b602083019150836020820283011115611d5757600080fd5b9250929050565b600081519050611d6d81612821565b92915050565b600081519050611d8281612838565b92915050565b600081519050611d978161284f565b92915050565b600060208284031215611daf57600080fd5b6000611dbd84828501611cea565b91505092915050565b600060208284031215611dd857600080fd5b6000611de684828501611cff565b91505092915050565b600080600060408486031215611e0457600080fd5b6000611e1286828701611cea565b935050602084013567ffffffffffffffff811115611e2f57600080fd5b611e3b86828701611d14565b92509250509250925092565b60008060208385031215611e5a57600080fd5b600083013567ffffffffffffffff811115611e7457600080fd5b611e8085828601611d14565b92509250509250929050565b600060208284031215611e9e57600080fd5b6000611eac84828501611d5e565b91505092915050565b600060208284031215611ec757600080fd5b6000611ed584828501611d73565b91505092915050565b6000806000806000806000806000806101408b8d031215611efe57600080fd5b6000611f0c8d828e01611d73565b9a50506020611f1d8d828e01611d73565b9950506040611f2e8d828e01611d73565b9850506060611f3f8d828e01611d73565b9750506080611f508d828e01611d73565b96505060a0611f618d828e01611d73565b95505060c0611f728d828e01611d73565b94505060e0611f838d828e01611d73565b935050610100611f958d828e01611d73565b925050610120611fa78d828e01611d5e565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c031215611fd857600080fd5b6000611fe68c828d01611d73565b9950506020611ff78c828d01611d73565b98505060406120088c828d01611d73565b97505060606120198c828d01611d73565b965050608061202a8c828d01611d73565b95505060a061203b8c828d01611d73565b94505060c061204c8c828d01611d73565b93505060e061205d8c828d01611d88565b92505061010061206f8c828d01611d5e565b9150509295985092959850929598565b600061208b83836120be565b60208301905092915050565b60006120a3838361232f565b60208301905092915050565b6120b88161275f565b82525050565b6120c78161274d565b82525050565b6120d68161274d565b82525050565b60006120e7826126df565b6120f1818561271a565b93506120fc836126bf565b8060005b8381101561212d578151612114888261207f565b975061211f83612700565b925050600181019050612100565b5085935050505092915050565b6000612145826126ea565b61214f818561272b565b935061215a836126cf565b8060005b8381101561218b5781516121728882612097565b975061217d8361270d565b92505060018101905061215e565b5085935050505092915050565b6121a181612771565b82525050565b60006121b2826126f5565b6121bc818561273c565b93506121cc8185602086016127c6565b6121d5816127f9565b840191505092915050565b60006121ed600f8361273c565b91507f746f6b656e2d6e6f742d666f756e6400000000000000000000000000000000006000830152602082019050919050565b600061222d600d8361273c565b91507f6d6174682d6e6f742d73616665000000000000000000000000000000000000006000830152602082019050919050565b600061226d60158361273c565b91507f757365722d6163636f756e742d6e6f742d6175746800000000000000000000006000830152602082019050919050565b60006122ad60198361273c565b91507f6c656e6774682d73686f756c642d62652d706f736974697665000000000000006000830152602082019050919050565b60006122ed60148361273c565b91507f302d746f6b656e732d6e6f742d616c6c6f7765640000000000000000000000006000830152602082019050919050565b6123298161277d565b82525050565b612338816127ab565b82525050565b612347816127ab565b82525050565b600060208201905061236260008301846120cd565b92915050565b600060408201905061237d60008301856120cd565b61238a60208301846120cd565b9392505050565b60006060820190506123a660008301866120cd565b6123b360208301856120cd565b6123c0604083018461233e565b949350505050565b600060a0820190506123dd60008301886120cd565b81810360208301526123ef81876120dc565b90508181036040830152612403818661213a565b90508181036060830152612417818561213a565b9050818103608083015261242b818461213a565b90509695505050505050565b600060408201905061244c60008301856120cd565b6124596020830184612198565b9392505050565b600060408201905061247560008301856120cd565b612482602083018461233e565b9392505050565b600060608201905061249e60008301866120cd565b6124ab602083018561233e565b6124b860408301846120af565b949350505050565b60006080820190506124d560008301876120cd565b6124e2602083018661233e565b6124ef60408301856120cd565b6124fc6060830184612320565b95945050505050565b600060a08201905061251a60008301886120cd565b612527602083018761233e565b612534604083018661233e565b6125416060830185612320565b61254e60808301846120cd565b9695505050505050565b6000608082019050818103600083015261257281876120dc565b90508181036020830152612586818661213a565b9050818103604083015261259a818561213a565b905081810360608301526125ae818461213a565b905095945050505050565b600060208201905081810360008301526125d381846121a7565b905092915050565b600060208201905081810360008301526125f4816121e0565b9050919050565b6000602082019050818103600083015261261481612220565b9050919050565b6000602082019050818103600083015261263481612260565b9050919050565b60006020820190508181036000830152612654816122a0565b9050919050565b60006020820190508181036000830152612674816122e0565b9050919050565b6000602082019050612690600083018461233e565b92915050565b60006040820190506126ab600083018561233e565b6126b8602083018461233e565b9392505050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006127588261278b565b9050919050565b600061276a8261278b565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b60005b838110156127e45780820151818401526020810190506127c9565b838111156127f3576000848401525b50505050565b6000601f19601f8301169050919050565b6128138161274d565b811461281e57600080fd5b50565b61282a81612771565b811461283557600080fd5b50565b612841816127ab565b811461284c57600080fd5b50565b612858816127b5565b811461286357600080fd5b5056fea2646970667358221220a044d39c723d8d2fb28017def5a45104dc23222b30f142204870c1e1fabf970864736f6c63430006000033

Deployed Bytecode Sourcemap

18544:104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18603:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18603:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;14054:2146;;;;;;;;;;;;;;;;:::i;:::-;;16208:2329;;;;;;;;;;;;;;;;:::i;:::-;;7010:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7010:104:0;;;:::i;:::-;;;;;;;;;;;;;;;;;18603:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14054:2146::-;14126:22;14167:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14167:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14167:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14167:34:0;;;;;;;;;14126:76;;14213:30;14266:17;:15;:17::i;:::-;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14266:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14266:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14266:38:0;;;;;;;;;14213:92;;14318:22;14359:19;:17;:19::i;:::-;:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14359:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14359:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14359:36:0;;;;;;;;;14318:78;;14407:38;14448:23;:21;:23::i;:::-;14407:64;;14484:19;14514:4;14484:35;;14532:12;14547:6;;:13;;14532:28;;14589:1;14579:7;:11;14571:49;;;;;;;;;;;;;;;;;;;;;;14633:25;;:::i;:::-;14661:344;;;;;;;;14693:6;;14661:344;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14661:344:0;;;;;;;;;;14737:7;14723:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14723:22:0;;;;14661:344;;;;14783:7;14772:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14772:19:0;;;;14661:344;;;;14832:7;14821:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14821:19:0;;;;14661:344;;;;14878:7;14867:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14867:19:0;;;;14661:344;;;;14923:7;14912:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14912:19:0;;;;14661:344;;;;14985:7;14963:30;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;14963:30:0;;;;14661:344;;;14633:372;;15023:6;15032:1;15023:10;;15018:692;15039:7;15035:1;:11;15018:692;;;15091:10;:34;;;15126:6;;15133:1;15126:9;;;;;;;;;;;;;;;;;;;;;;15091:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15091:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15091:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15091:45:0;;;;;;;;;15068:9;:17;;;15086:1;15068:20;;;;;;;;;;;;;:68;;;;;;;;;;;15191:1;15159:34;;:9;:17;;;15177:1;15159:20;;;;;;;;;;;;;;:34;;;;15151:62;;;;;;;;;;;;;;;;;;;;;;15275:9;:17;;;15293:1;15275:20;;;;;;;;;;;;;;15228:9;:25;;;15254:1;15228:28;;;;;;;;;;;;;:68;;;;;;;;;;;15337:9;:25;;;15363:1;15337:28;;;;;;;;;;;;;;:38;;;15376:11;15337:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15337:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15337:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15337:51:0;;;;;;;;;15311:9;:20;;;15332:1;15311:23;;;;;;;;;;;;;:77;;;;;15404:8;15414;15426:49;15444:6;15452:11;15465:6;;15472:1;15465:9;;;;;;;;;;;;;;;;;;;;;;15426:17;:49::i;:::-;15403:72;;;;15516:13;15520:3;15525;15516;:13::i;:::-;15490:9;:20;;;15511:1;15490:23;;;;;;;;;;;;;:39;;;;;15573:3;15544:9;:23;;;15568:1;15544:26;;;;;;;;;;;;;:32;;;;;15697:1;15672:9;:19;;;15692:1;15672:22;;;;;;;;;;;;;:26;;;;;15018:692;;15048:3;;;;;;;15018:692;;;;15722:87;15732:7;15741:6;15749:9;:16;;;15767:9;:20;;;15789:9;:19;;;15722:9;:87::i;:::-;15820:86;15837:7;15846:6;15854:9;:16;;;15872:9;:20;;;15894:11;15820:16;:86::i;:::-;15917:69;15929:7;15938:9;:25;;;15965:9;:20;;;15917:11;:69::i;:::-;15997:79;16008:7;16017:6;16025:10;16037:9;:16;;;16055:9;:20;;;15997:10;:79::i;:::-;16094:98;16105:9;:17;;;16124:9;:20;;;16146:9;:20;;;16168:9;:23;;;16094:98;;;;;;;;;;;;;;;;;;14054:2146;;;;;;;;;:::o;16208:2329::-;16334:4;16313:34;;;16348:11;16313:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16313:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16313:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16313:47:0;;;;;;;;;16305:81;;;;;;;;;;;;;;;;;;;;;;16399:12;16414:6;;:13;;16399:28;;16456:1;16446:7;:11;16438:44;;;;;;;;;;;;;;;;;;;;;;16495:22;16536:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16536:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16536:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16536:34:0;;;;;;;;;16495:76;;16582:30;16635:17;:15;:17::i;:::-;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16635:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16635:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16635:38:0;;;;;;;;;16582:92;;16687:22;16728:19;:17;:19::i;:::-;:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16728:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16728:36:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16728:36:0;;;;;;;;;16687:78;;16776:38;16817:23;:21;:23::i;:::-;16776:64;;16853:25;;:::i;:::-;16881:344;;;;;;;;16913:6;;16881:344;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16881:344:0;;;;;;;;;;16957:7;16943:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;16943:22:0;;;;16881:344;;;;17003:7;16992:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;16992:19:0;;;;16881:344;;;;17052:7;17041:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;17041:19:0;;;;16881:344;;;;17098:7;17087:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;17087:19:0;;;;16881:344;;;;17143:7;17132:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;17132:19:0;;;;16881:344;;;;17205:7;17183:30;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;17183:30:0;;;;16881:344;;;16853:372;;17243:6;17252:1;17243:10;;17238:692;17259:7;17255:1;:11;17238:692;;;17311:10;:34;;;17346:6;;17353:1;17346:9;;;;;;;;;;;;;;;;;;;;;;17311:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17311:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17311:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17311:45:0;;;;;;;;;17288:9;:17;;;17306:1;17288:20;;;;;;;;;;;;;:68;;;;;;;;;;;17411:1;17379:34;;:9;:17;;;17397:1;17379:20;;;;;;;;;;;;;;:34;;;;17371:62;;;;;;;;;;;;;;;;;;;;;;17495:9;:17;;;17513:1;17495:20;;;;;;;;;;;;;;17448:9;:25;;;17474:1;17448:28;;;;;;;;;;;;;:68;;;;;;;;;;;17557:9;:25;;;17583:1;17557:28;;;;;;;;;;;;;;:38;;;17596:11;17557:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17557:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17557:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17557:51:0;;;;;;;;;17531:9;:20;;;17552:1;17531:23;;;;;;;;;;;;;:77;;;;;17624:8;17634;17646:49;17664:6;17672:11;17685:6;;17692:1;17685:9;;;;;;;;;;;;;;;;;;;;;;17646:17;:49::i;:::-;17623:72;;;;17736:13;17740:3;17745;17736;:13::i;:::-;17710:9;:20;;;17731:1;17710:23;;;;;;;;;;;;;:39;;;;;17793:3;17764:9;:23;;;17788:1;17764:26;;;;;;;;;;;;;:32;;;;;17917:1;17892:9;:19;;;17912:1;17892:22;;;;;;;;;;;;;:26;;;;;17238:692;;17268:3;;;;;;;17238:692;;;;17942:87;17952:7;17961:6;17969:9;:16;;;17987:9;:20;;;18009:9;:19;;;17942:9;:87::i;:::-;18040:86;18057:7;18066:6;18074:9;:16;;;18092:9;:20;;;18114:11;18040:16;:86::i;:::-;18137:89;18156:7;18165:9;:25;;;18192:9;:20;;;18214:11;18137:18;:89::i;:::-;18237:69;18249:7;18258:9;:25;;;18285:9;:20;;;18237:11;:69::i;:::-;18317:79;18328:7;18337:6;18345:10;18357:9;:16;;;18375:9;:20;;;18317:10;:79::i;:::-;18414:115;18429:11;18442:9;:17;;;18461:9;:20;;;18483:9;:20;;;18505:9;:23;;;18414:115;;;;;;;;;;;;;;;;;;;16208:2329;;;;;;;;;:::o;7010:104::-;7053:10;7065:7;7100:1;7103:2;7085:21;;;;;;;;;;;;;;7010:104;;:::o;7216:268::-;7266:21;7329:42;7300:72;;7216:268;:::o;7553:309::-;7605:34;7694:42;7652:85;;7553:309;:::o;7932:292::-;7988:27;8063:42;8028:78;;7932:292;:::o;8989:211::-;9093:8;9103;9153:4;:23;;;9177:5;9184:7;9153:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9153:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9153:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9153:39:0;;;;;;;;;9124:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8989:211;;;;;;:::o;5205:121::-;5257:6;5299:1;5293;5289;:5;5285:9;;;5284:16;;5276:42;;;;;;;;;;;;;;;;;;;;;;5205:121;;;;:::o;12687:742::-;12892:15;12910:12;:10;:12::i;:::-;12892:30;;12938:6;12947:1;12938:10;;12933:489;12954:7;12950:1;:11;12933:489;;;12983:13;12999:6;13006:1;12999:9;;;;;;;;;;;;;;12983:25;;13023:11;13037:4;13042:1;13037:7;;;;;;;;;;;;;;13023:21;;13059:16;13078:9;13088:1;13078:12;;;;;;;;;;;;;;13059:31;;13117:1;13111:3;:7;13107:304;;;13139:10;13161:7;13152:16;;:5;:16;;;13139:29;;13187:14;13204:5;:29;;13228:5;13204:29;;;13212:13;:11;:13::i;:::-;13204:29;13187:46;;13254:6;:13;;;13268:6;13276:3;13281:8;13291:17;:15;:17::i;:::-;13318:4;13254:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13254:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13254:70:0;;;;13343:52;13360:5;13382:6;13391:3;13343:16;:52::i;:::-;13107:304;;;12933:489;;;12963:3;;;;;;;12933:489;;;;12687:742;;;;;;:::o;10096:763::-;10298:15;10316:12;:10;:12::i;:::-;10298:30;;10354:6;10363:1;10354:10;;10349:503;10370:7;10366:1;:11;10349:503;;;10401:13;10417:6;10424:1;10417:9;;;;;;;;;;;;;;10401:25;;10441:11;10455:4;10460:1;10455:7;;;;;;;;;;;;;;10441:21;;10493:1;10483:4;10488:1;10483:7;;;;;;;;;;;;;;:11;10479:362;;;10515:11;10558:7;10549:16;;:5;:16;;;10545:200;;;10599:3;10590:12;;10545:200;;;10666:5;10651:29;;;10681:17;:15;:17::i;:::-;:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10681:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10681:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10681:38:0;;;;;;;;;10721:3;10651:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10651:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10651:74:0;;;;10545:200;10765:6;:12;;;10784:6;10792:5;10799:3;10812:11;10765:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10765:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10765:60:0;;;;;10479:362;;10349:503;;10379:3;;;;;;;10349:503;;;;10096:763;;;;;;:::o;10873:310::-;11034:6;11043:1;11034:10;;11029:147;11050:7;11046:1;:11;11029:147;;;11093:1;11083:4;11088:1;11083:7;;;;;;;;;;;;;;:11;11079:86;;;11115:15;11131:1;11115:18;;;;;;;;;;;;;;:25;;;11141:4;11146:1;11141:7;;;;;;;;;;;;;;11115:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11115:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11115:34:0;;;;11079:86;11059:3;;;;;;;11029:147;;;;10873:310;;;:::o;11628:1049::-;11846:15;11864:12;:10;:12::i;:::-;11846:30;;11892:6;11901:1;11892:10;;11887:783;11908:7;11904:1;:11;11887:783;;;11937:13;11953:6;11960:1;11953:9;;;;;;;;;;;;;;11937:25;;11977:11;11991:4;11996:1;11991:7;;;;;;;;;;;;;;11977:21;;12025:1;12019:3;:7;12015:644;;;12049:10;12070:7;12062:15;;:5;:15;;;12049:28;;12096:14;12113:5;:29;;12137:5;12113:29;;;12121:13;:11;:13::i;:::-;12113:29;12096:46;;12161:28;12207:6;12161:53;;12239:5;12235:97;;;12269:43;12286:5;12293:13;12308:3;12269:16;:43::i;:::-;12235:97;12352:13;:21;;;12382:6;12391:3;12352:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12352:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12352:43:0;;;;12414:6;:14;;;12429:6;12437:3;12450:4;12457:19;:17;:19::i;:::-;12414:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12414:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12414:63:0;;;;12503:46;12515:10;12527:6;12543:4;12503:11;:46::i;:::-;12498:146;;12574:6;:36;;;12611:6;12619:4;12574:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12574:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12574:50:0;;;;12498:146;12015:644;;;;11887:783;;11917:3;;;;;;;11887:783;;;;11628:1049;;;;;;:::o;11191:379::-;11387:6;11396:1;11387:10;;11382:181;11403:7;11399:1;:11;11382:181;;;11446:1;11436:4;11441:1;11436:7;;;;;;;;;;;;;;:11;11432:120;;;11468:15;11484:1;11468:18;;;;;;;;;;;;;;:31;;;11500:11;11521:4;11528;11533:1;11528:7;;;;;;;;;;;;;;11468:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11468:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11468:68:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11468:68:0;;;;;;;;;;11432:120;11412:3;;;;;;;11382:181;;;;11191:379;;;;:::o;5844:137::-;5889:7;5916:42;5909:49;;5844:137;:::o;6039:232::-;6085:7;6112:42;6105:49;;6039:232;:::o;8280:88::-;8330:6;8356:4;8349:11;;8280:88;:::o;9825:210::-;9920:5;9917:111;;;9942:5;:13;;;9964:5;9972:6;9942:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9942:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9942:37:0;;;;9994:5;:14;;;10009:6;9994:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9994:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9994:22:0;;;;9917:111;9825:210;;;:::o;9677:140::-;9773:5;9770:39;;;9780:5;:13;;;9800:6;9780:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9780:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9780:29:0;;;;;9770:39;9677:140;;;:::o;8427:90::-;8479:6;8505:4;8498:11;;8427:90;:::o;9461:208::-;9572:10;9621:8;:27;;;9649:5;9656:4;9621:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9621:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9621:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9621:40:0;;;;;;;;;9595:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9461:208;;;;;:::o;18544:104::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;661:128;;742:6;736:13;727:22;;754:30;778:5;754:30;;;721:68;;;;;796:134;;880:6;874:13;865:22;;892:33;919:5;892:33;;;859:71;;;;;937:132;;1020:6;1014:13;1005:22;;1032:32;1058:5;1032:32;;;999:70;;;;;1076:241;;1180:2;1168:9;1159:7;1155:23;1151:32;1148:2;;;1196:1;1193;1186:12;1148:2;1231:1;1248:53;1293:7;1284:6;1273:9;1269:22;1248:53;;;1238:63;;1210:97;1142:175;;;;;1324:263;;1439:2;1427:9;1418:7;1414:23;1410:32;1407:2;;;1455:1;1452;1445:12;1407:2;1490:1;1507:64;1563:7;1554:6;1543:9;1539:22;1507:64;;;1497:74;;1469:108;1401:186;;;;;1594:522;;;;1750:2;1738:9;1729:7;1725:23;1721:32;1718:2;;;1766:1;1763;1756:12;1718:2;1801:1;1818:53;1863:7;1854:6;1843:9;1839:22;1818:53;;;1808:63;;1780:97;1936:2;1925:9;1921:18;1908:32;1960:18;1952:6;1949:30;1946:2;;;1992:1;1989;1982:12;1946:2;2020:80;2092:7;2083:6;2072:9;2068:22;2020:80;;;2010:90;;;;1887:219;1712:404;;;;;;2123:397;;;2262:2;2250:9;2241:7;2237:23;2233:32;2230:2;;;2278:1;2275;2268:12;2230:2;2341:1;2330:9;2326:17;2313:31;2364:18;2356:6;2353:30;2350:2;;;2396:1;2393;2386:12;2350:2;2424:80;2496:7;2487:6;2476:9;2472:22;2424:80;;;2414:90;;;;2292:218;2224:296;;;;;;2527:257;;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2655:1;2652;2645:12;2607:2;2690:1;2707:61;2760:7;2751:6;2740:9;2736:22;2707:61;;;2697:71;;2669:105;2601:183;;;;;2791:263;;2906:2;2894:9;2885:7;2881:23;2877:32;2874:2;;;2922:1;2919;2912:12;2874:2;2957:1;2974:64;3030:7;3021:6;3010:9;3006:22;2974:64;;;2964:74;;2936:108;2868:186;;;;;3061:1488;;;;;;;;;;;3326:3;3314:9;3305:7;3301:23;3297:33;3294:2;;;3343:1;3340;3333:12;3294:2;3378:1;3395:64;3451:7;3442:6;3431:9;3427:22;3395:64;;;3385:74;;3357:108;3496:2;3514:64;3570:7;3561:6;3550:9;3546:22;3514:64;;;3504:74;;3475:109;3615:2;3633:64;3689:7;3680:6;3669:9;3665:22;3633:64;;;3623:74;;3594:109;3734:2;3752:64;3808:7;3799:6;3788:9;3784:22;3752:64;;;3742:74;;3713:109;3853:3;3872:64;3928:7;3919:6;3908:9;3904:22;3872:64;;;3862:74;;3832:110;3973:3;3992:64;4048:7;4039:6;4028:9;4024:22;3992:64;;;3982:74;;3952:110;4093:3;4112:64;4168:7;4159:6;4148:9;4144:22;4112:64;;;4102:74;;4072:110;4213:3;4232:64;4288:7;4279:6;4268:9;4264:22;4232:64;;;4222:74;;4192:110;4333:3;4352:64;4408:7;4399:6;4388:9;4384:22;4352:64;;;4342:74;;4312:110;4453:3;4472:61;4525:7;4516:6;4505:9;4501:22;4472:61;;;4462:71;;4432:107;3288:1261;;;;;;;;;;;;;;4556:1349;;;;;;;;;;4803:3;4791:9;4782:7;4778:23;4774:33;4771:2;;;4820:1;4817;4810:12;4771:2;4855:1;4872:64;4928:7;4919:6;4908:9;4904:22;4872:64;;;4862:74;;4834:108;4973:2;4991:64;5047:7;5038:6;5027:9;5023:22;4991:64;;;4981:74;;4952:109;5092:2;5110:64;5166:7;5157:6;5146:9;5142:22;5110:64;;;5100:74;;5071:109;5211:2;5229:64;5285:7;5276:6;5265:9;5261:22;5229:64;;;5219:74;;5190:109;5330:3;5349:64;5405:7;5396:6;5385:9;5381:22;5349:64;;;5339:74;;5309:110;5450:3;5469:64;5525:7;5516:6;5505:9;5501:22;5469:64;;;5459:74;;5429:110;5570:3;5589:64;5645:7;5636:6;5625:9;5621:22;5589:64;;;5579:74;;5549:110;5690:3;5709:63;5764:7;5755:6;5744:9;5740:22;5709:63;;;5699:73;;5669:109;5809:3;5828:61;5881:7;5872:6;5861:9;5857:22;5828:61;;;5818:71;;5788:107;4765:1140;;;;;;;;;;;;5913:173;;6000:46;6042:3;6034:6;6000:46;;;6075:4;6070:3;6066:14;6052:28;;5993:93;;;;;6095:173;;6182:46;6224:3;6216:6;6182:46;;;6257:4;6252:3;6248:14;6234:28;;6175:93;;;;;6276:137;6375:32;6401:5;6375:32;;;6370:3;6363:45;6357:56;;;6420:103;6493:24;6511:5;6493:24;;;6488:3;6481:37;6475:48;;;6530:113;6613:24;6631:5;6613:24;;;6608:3;6601:37;6595:48;;;6681:674;;6822:50;6866:5;6822:50;;;6885:86;6964:6;6959:3;6885:86;;;6878:93;;6992:52;7038:5;6992:52;;;7064:7;7092:1;7077:256;7102:6;7099:1;7096:13;7077:256;;;7169:6;7163:13;7190:63;7249:3;7234:13;7190:63;;;7183:70;;7270:56;7319:6;7270:56;;;7260:66;;7134:199;7124:1;7121;7117:9;7112:14;;7077:256;;;7081:14;7346:3;7339:10;;6801:554;;;;;;;;7394:674;;7535:50;7579:5;7535:50;;;7598:86;7677:6;7672:3;7598:86;;;7591:93;;7705:52;7751:5;7705:52;;;7777:7;7805:1;7790:256;7815:6;7812:1;7809:13;7790:256;;;7882:6;7876:13;7903:63;7962:3;7947:13;7903:63;;;7896:70;;7983:56;8032:6;7983:56;;;7973:66;;7847:199;7837:1;7834;7830:9;7825:14;;7790:256;;;7794:14;8059:3;8052:10;;7514:554;;;;;;;;8076:104;8153:21;8168:5;8153:21;;;8148:3;8141:34;8135:45;;;8187:339;;8295:35;8324:5;8295:35;;;8342:71;8406:6;8401:3;8342:71;;;8335:78;;8418:52;8463:6;8458:3;8451:4;8444:5;8440:16;8418:52;;;8491:29;8513:6;8491:29;;;8486:3;8482:39;8475:46;;8275:251;;;;;;8534:315;;8694:67;8758:2;8753:3;8694:67;;;8687:74;;8794:17;8790:1;8785:3;8781:11;8774:38;8840:2;8835:3;8831:12;8824:19;;8680:169;;;;8858:313;;9018:67;9082:2;9077:3;9018:67;;;9011:74;;9118:15;9114:1;9109:3;9105:11;9098:36;9162:2;9157:3;9153:12;9146:19;;9004:167;;;;9180:321;;9340:67;9404:2;9399:3;9340:67;;;9333:74;;9440:23;9436:1;9431:3;9427:11;9420:44;9492:2;9487:3;9483:12;9476:19;;9326:175;;;;9510:325;;9670:67;9734:2;9729:3;9670:67;;;9663:74;;9770:27;9766:1;9761:3;9757:11;9750:48;9826:2;9821:3;9817:12;9810:19;;9656:179;;;;9844:320;;10004:67;10068:2;10063:3;10004:67;;;9997:74;;10104:22;10100:1;10095:3;10091:11;10084:43;10155:2;10150:3;10146:12;10139:19;;9990:174;;;;10172:110;10253:23;10270:5;10253:23;;;10248:3;10241:36;10235:47;;;10289:103;10362:24;10380:5;10362:24;;;10357:3;10350:37;10344:48;;;10399:113;10482:24;10500:5;10482:24;;;10477:3;10470:37;10464:48;;;10519:213;;10637:2;10626:9;10622:18;10614:26;;10651:71;10719:1;10708:9;10704:17;10695:6;10651:71;;;10608:124;;;;;10739:324;;10885:2;10874:9;10870:18;10862:26;;10899:71;10967:1;10956:9;10952:17;10943:6;10899:71;;;10981:72;11049:2;11038:9;11034:18;11025:6;10981:72;;;10856:207;;;;;;11070:435;;11244:2;11233:9;11229:18;11221:26;;11258:71;11326:1;11315:9;11311:17;11302:6;11258:71;;;11340:72;11408:2;11397:9;11393:18;11384:6;11340:72;;;11423;11491:2;11480:9;11476:18;11467:6;11423:72;;;11215:290;;;;;;;11512:1219;;11926:3;11915:9;11911:19;11903:27;;11941:71;12009:1;11998:9;11994:17;11985:6;11941:71;;;12060:9;12054:4;12050:20;12045:2;12034:9;12030:18;12023:48;12085:104;12184:4;12175:6;12085:104;;;12077:112;;12237:9;12231:4;12227:20;12222:2;12211:9;12207:18;12200:48;12262:104;12361:4;12352:6;12262:104;;;12254:112;;12414:9;12408:4;12404:20;12399:2;12388:9;12384:18;12377:48;12439:104;12538:4;12529:6;12439:104;;;12431:112;;12592:9;12586:4;12582:20;12576:3;12565:9;12561:19;12554:49;12617:104;12716:4;12707:6;12617:104;;;12609:112;;11897:834;;;;;;;;;12738:312;;12878:2;12867:9;12863:18;12855:26;;12892:71;12960:1;12949:9;12945:17;12936:6;12892:71;;;12974:66;13036:2;13025:9;13021:18;13012:6;12974:66;;;12849:201;;;;;;13057:324;;13203:2;13192:9;13188:18;13180:26;;13217:71;13285:1;13274:9;13270:17;13261:6;13217:71;;;13299:72;13367:2;13356:9;13352:18;13343:6;13299:72;;;13174:207;;;;;;13388:467;;13578:2;13567:9;13563:18;13555:26;;13592:71;13660:1;13649:9;13645:17;13636:6;13592:71;;;13674:72;13742:2;13731:9;13727:18;13718:6;13674:72;;;13757:88;13841:2;13830:9;13826:18;13817:6;13757:88;;;13549:306;;;;;;;13862:543;;14062:3;14051:9;14047:19;14039:27;;14077:71;14145:1;14134:9;14130:17;14121:6;14077:71;;;14159:72;14227:2;14216:9;14212:18;14203:6;14159:72;;;14242;14310:2;14299:9;14295:18;14286:6;14242:72;;;14325:70;14391:2;14380:9;14376:18;14367:6;14325:70;;;14033:372;;;;;;;;14412:655;;14640:3;14629:9;14625:19;14617:27;;14655:71;14723:1;14712:9;14708:17;14699:6;14655:71;;;14737:72;14805:2;14794:9;14790:18;14781:6;14737:72;;;14820;14888:2;14877:9;14873:18;14864:6;14820:72;;;14903:70;14969:2;14958:9;14954:18;14945:6;14903:70;;;14984:73;15052:3;15041:9;15037:19;15028:6;14984:73;;;14611:456;;;;;;;;;15074:1107;;15460:3;15449:9;15445:19;15437:27;;15511:9;15505:4;15501:20;15497:1;15486:9;15482:17;15475:47;15536:104;15635:4;15626:6;15536:104;;;15528:112;;15688:9;15682:4;15678:20;15673:2;15662:9;15658:18;15651:48;15713:104;15812:4;15803:6;15713:104;;;15705:112;;15865:9;15859:4;15855:20;15850:2;15839:9;15835:18;15828:48;15890:104;15989:4;15980:6;15890:104;;;15882:112;;16042:9;16036:4;16032:20;16027:2;16016:9;16012:18;16005:48;16067:104;16166:4;16157:6;16067:104;;;16059:112;;15431:750;;;;;;;;16188:293;;16322:2;16311:9;16307:18;16299:26;;16372:9;16366:4;16362:20;16358:1;16347:9;16343:17;16336:47;16397:74;16466:4;16457:6;16397:74;;;16389:82;;16293:188;;;;;16488:407;;16679:2;16668:9;16664:18;16656:26;;16729:9;16723:4;16719:20;16715:1;16704:9;16700:17;16693:47;16754:131;16880:4;16754:131;;;16746:139;;16650:245;;;;16902:407;;17093:2;17082:9;17078:18;17070:26;;17143:9;17137:4;17133:20;17129:1;17118:9;17114:17;17107:47;17168:131;17294:4;17168:131;;;17160:139;;17064:245;;;;17316:407;;17507:2;17496:9;17492:18;17484:26;;17557:9;17551:4;17547:20;17543:1;17532:9;17528:17;17521:47;17582:131;17708:4;17582:131;;;17574:139;;17478:245;;;;17730:407;;17921:2;17910:9;17906:18;17898:26;;17971:9;17965:4;17961:20;17957:1;17946:9;17942:17;17935:47;17996:131;18122:4;17996:131;;;17988:139;;17892:245;;;;18144:407;;18335:2;18324:9;18320:18;18312:26;;18385:9;18379:4;18375:20;18371:1;18360:9;18356:17;18349:47;18410:131;18536:4;18410:131;;;18402:139;;18306:245;;;;18558:213;;18676:2;18665:9;18661:18;18653:26;;18690:71;18758:1;18747:9;18743:17;18734:6;18690:71;;;18647:124;;;;;18778:324;;18924:2;18913:9;18909:18;18901:26;;18938:71;19006:1;18995:9;18991:17;18982:6;18938:71;;;19020:72;19088:2;19077:9;19073:18;19064:6;19020:72;;;18895:207;;;;;;19109:147;;19191:3;19183:11;;19229:4;19224:3;19220:14;19212:22;;19177:79;;;;19263:147;;19345:3;19337:11;;19383:4;19378:3;19374:14;19366:22;;19331:79;;;;19417:133;;19522:5;19516:12;19506:22;;19487:63;;;;19557:133;;19662:5;19656:12;19646:22;;19627:63;;;;19697:118;;19787:5;19781:12;19771:22;;19752:63;;;;19822:104;;19916:4;19911:3;19907:14;19899:22;;19893:33;;;;19933:104;;20027:4;20022:3;20018:14;20010:22;;20004:33;;;;20045:178;;20175:6;20170:3;20163:19;20212:4;20207:3;20203:14;20188:29;;20156:67;;;;;20232:178;;20362:6;20357:3;20350:19;20399:4;20394:3;20390:14;20375:29;;20343:67;;;;;20419:163;;20534:6;20529:3;20522:19;20571:4;20566:3;20562:14;20547:29;;20515:67;;;;;20590:91;;20652:24;20670:5;20652:24;;;20641:35;;20635:46;;;;20688:99;;20758:24;20776:5;20758:24;;;20747:35;;20741:46;;;;20794:85;;20867:5;20860:13;20853:21;20842:32;;20836:43;;;;20886:84;;20958:6;20951:5;20947:18;20936:29;;20930:40;;;;20977:121;;21050:42;21043:5;21039:54;21028:65;;21022:76;;;;21105:72;;21167:5;21156:16;;21150:27;;;;21184:90;;21256:12;21249:5;21245:24;21234:35;;21228:46;;;;21282:268;21347:1;21354:101;21368:6;21365:1;21362:13;21354:101;;;21444:1;21439:3;21435:11;21429:18;21425:1;21420:3;21416:11;21409:39;21390:2;21387:1;21383:10;21378:15;;21354:101;;;21470:6;21467:1;21464:13;21461:2;;;21535:1;21526:6;21521:3;21517:16;21510:27;21461:2;21331:219;;;;;21558:97;;21646:2;21642:7;21637:2;21630:5;21626:14;21622:28;21612:38;;21606:49;;;;21663:117;21732:24;21750:5;21732:24;;;21725:5;21722:35;21712:2;;21771:1;21768;21761:12;21712:2;21706:74;;21787:111;21853:21;21868:5;21853:21;;;21846:5;21843:32;21833:2;;21889:1;21886;21879:12;21833:2;21827:71;;21905:117;21974:24;21992:5;21974:24;;;21967:5;21964:35;21954:2;;22013:1;22010;22003:12;21954:2;21948:74;;22029:115;22097:23;22114:5;22097:23;;;22090:5;22087:34;22077:2;;22135:1;22132;22125:12;22077:2;22071:73;

Swarm Source

ipfs://a044d39c723d8d2fb28017def5a45104dc23222b30f142204870c1e1fabf9708

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.