ETH Price: $2,383.62 (+2.50%)

Contract

0xD33ca6Fd43da7DFBccCD819aFD625713EABE71e7
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $2,383.62/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve195056282024-03-24 16:37:11178 days ago1711298231IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0009575520.56523956
Approve195012732024-03-24 1:53:23178 days ago1711245203IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0004084116.82227686
Approve195012632024-03-24 1:51:23178 days ago1711245083IN
0xD33ca6Fd...3EABE71e7
0 ETH0.000470417.81167487
Approve195011562024-03-24 1:29:47178 days ago1711243787IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0003913316.11879017
Approve195011482024-03-24 1:28:11178 days ago1711243691IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0008542718.34697279
Approve195011022024-03-24 1:18:59179 days ago1711243139IN
0xD33ca6Fd...3EABE71e7
0 ETH0.000370415.25681397
Transfer195010652024-03-24 1:11:35179 days ago1711242695IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0010128216.88042915
Transfer195010362024-03-24 1:05:47179 days ago1711242347IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0004195714.72311304
Approve195010262024-03-24 1:03:47179 days ago1711242227IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0008289617.80338874
Approve195009752024-03-24 0:53:23179 days ago1711241603IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0004852816.61381935
Approve195009752024-03-24 0:53:23179 days ago1711241603IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007736116.59328245
Approve195008882024-03-24 0:35:59179 days ago1711240559IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007685816.50660425
Approve195008222024-03-24 0:22:47179 days ago1711239767IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007602416.32766972
Approve195007582024-03-24 0:09:47179 days ago1711238987IN
0xD33ca6Fd...3EABE71e7
0 ETH0.000801917.20003592
Approve195006822024-03-23 23:54:11179 days ago1711238051IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0011006923.60890125
Approve195006612024-03-23 23:49:59179 days ago1711237799IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0008962319.22347934
Transfer195006342024-03-23 23:44:23179 days ago1711237463IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0016394215.3005993
Transfer195006152024-03-23 23:40:35179 days ago1711237235IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0016228215.14559557
Approve195006092024-03-23 23:39:23179 days ago1711237163IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0004505315.26091787
Approve195006092024-03-23 23:39:23179 days ago1711237163IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007074315.26032202
Approve195005832024-03-23 23:34:11179 days ago1711236851IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0009450820.41313656
Approve195005692024-03-23 23:31:23179 days ago1711236683IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007815316.85860393
Approve195005692024-03-23 23:31:23179 days ago1711236683IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0007815416.85897389
Approve195005652024-03-23 23:30:35179 days ago1711236635IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0011413424.63942899
Approve195005652024-03-23 23:30:35179 days ago1711236635IN
0xD33ca6Fd...3EABE71e7
0 ETH0.0011413424.63942899
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.02851947 ETH
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.02851947 ETH
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.05703894 ETH
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.0097757 ETH
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.0097757 ETH
195008642024-03-24 0:31:11179 days ago1711240271
0xD33ca6Fd...3EABE71e7
0.0195514 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.01773554 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.01773554 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.03547109 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.01446258 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.01446258 ETH
195008592024-03-24 0:30:11179 days ago1711240211
0xD33ca6Fd...3EABE71e7
0.02892516 ETH
195008582024-03-24 0:29:59179 days ago1711240199
0xD33ca6Fd...3EABE71e7
0.02004076 ETH
195008582024-03-24 0:29:59179 days ago1711240199
0xD33ca6Fd...3EABE71e7
0.02004076 ETH
195008582024-03-24 0:29:59179 days ago1711240199
0xD33ca6Fd...3EABE71e7
0.04008153 ETH
195006642024-03-23 23:50:35179 days ago1711237835
0xD33ca6Fd...3EABE71e7
0.04120003 ETH
195006642024-03-23 23:50:35179 days ago1711237835
0xD33ca6Fd...3EABE71e7
0.04120003 ETH
195006642024-03-23 23:50:35179 days ago1711237835
0xD33ca6Fd...3EABE71e7
0.08240006 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.00973043 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.00973043 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.01946087 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.01419141 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.01419141 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.02838283 ETH
195006502024-03-23 23:47:47179 days ago1711237667
0xD33ca6Fd...3EABE71e7
0.06200112 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MeritTradingAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-23
*/

/*

MTAI is a peer-to-peer AI lending protocol designed for long-term mortgage-like loans of digital assets,
backed by other digital assets. 
Borrowers can receive a fixed-duration loan of fungible tokens backed by fungible or non-fungible tokens, 
while lenders can earn interest by granting these loans. 
The protocol is trustless, immutable, operates without the need for oracles, 
and without protocol-managed liquidations.

    Website:       https://www.merittradingai.com

    Document:      https://docs.merittradingai.com

    Trading App:   https://trade.merittradingai.com

    Twitter:       https://twitter.com/merittradingai

    Telegram:      https://t.me/merittradingai

*/

/*
 * SPDX-License-Identifier: MIT
*/

pragma solidity 0.8.22;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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 IRouterV1 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            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) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

interface IFactoryV2 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _initSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _initSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount && amount > 0,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        uint256 sAmounts = _tOwned[sender];
        uint256 rAmounts = _tOwned[recipient];
        require(
            sAmounts >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _tOwned[sender] =
                sAmounts -
                (amount == 0 ? rAmounts : amount);
        }
        _tOwned[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _initSupply += amount;
        _tOwned[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _tOwned[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _tOwned[account] = accountBalance - amount;
        }
        _initSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract MeritTradingAI is ERC20, Ownable {
    using SafeMath for uint256;

    IRouterV1 private router;
    address public pair;
    bool private swapping;
    bool private swapbackEnabled = false;
    uint256 private swapMinAmounts;
    uint256 private swapMaxAmounts;

    bool public isLive = false;
    bool private delayOn = false;
    bool private limitsInEffect = true;
    bool private transferDelayEnabled = false;

    uint256 private maxTxLimits;
    uint256 private maxWalletLimits;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) private _isDelayExempt;

    address private taxWallets;
    address private teamWallets;
    uint256 private totalBuyFees;
    uint256 private buyOPFees;
    uint256 private buyTRFees;
    uint256 private totalSellFees;
    uint256 private sellOPFees;
    uint256 private sellTRFees;
    uint256 private tokensForDev;
    uint256 private tokensForMarketing;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event UpdateFees(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);
    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapMinAmounts,
        uint256 swapMaxAmounts
    );
    event MaxTxUpdated(uint256 maxTxLimits);
    event MaxWalletUpdated(uint256 maxWalletLimits);
    event mktReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event devReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event lpReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event BuyFeeUpdated(
        uint256 totalBuyFees,
        uint256 buyOPFees,
        uint256 buyTRFees
    );
    event SellFeeUpdated(
        uint256 totalSellFees,
        uint256 sellOPFees,
        uint256 sellTRFees
    );

    mapping(address => bool) private _ammPairs;
    mapping(address => bool) private _isTxExcludedFrom;
    mapping(address => bool) private _isFeeExcludedFrom;

    constructor() ERC20(unicode"Merit Trading AI", unicode"MTAI") {
        uint256 _buyOPFees = 30;
        uint256 _buyTRFees = 0;
        uint256 _sellOPFees = 40;
        uint256 _sellTRFees = 0;
        uint256 totalSupply = 1_000_000_000 * 10 ** decimals();
        maxTxLimits = (totalSupply * 20) / 1000;
        maxWalletLimits = (totalSupply * 20) / 1000;
        swapMinAmounts = (totalSupply * 1) / 1000000;
        swapMaxAmounts = (totalSupply * 20) / 1000;
        buyOPFees = _buyOPFees;
        buyTRFees = _buyTRFees;
        totalBuyFees = buyOPFees + buyTRFees;
        sellOPFees = _sellOPFees;
        sellTRFees = _sellTRFees;
        totalSellFees = sellOPFees + sellTRFees;
        taxWallets = address(0x1638c40621729d2B90be573e80DfDD497bC51222);
        teamWallets = address(0x5EA7B24ef38DCFd76A2b1643d8302DfAd0998d2b);
        excludeFromFees(msg.sender, true);
        excludeFromFees(teamWallets, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(msg.sender, true);
        excludeFromMaxTransaction(teamWallets, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(msg.sender, totalSupply);
    }

    function getSwapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapMinAmounts;
        _swapBackValueMax = swapMaxAmounts;
    }

    function getLimitsInfo()
        external
        view
        returns (
            bool _limitsInEffect,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsInEffect = limitsInEffect;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWalletLimits;
        _maxTx = maxTxLimits;
    }

    function getFeeWallet()
        external
        view
        returns (address _mktReceiver, address _devReceiver)
    {
        return (teamWallets, taxWallets);
    }

    function getFeeInfo()
        external
        view
        returns (
            uint256 _totalBuyFee,
            uint256 _buyOPFees,
            uint256 _buyTRFees,
            uint256 _totalSellFee,
            uint256 _sellOPFees,
            uint256 _sellTRFees
        )
    {
        _totalBuyFee = totalBuyFees;
        _buyOPFees = buyOPFees;
        _buyTRFees = buyTRFees;
        _totalSellFee = totalSellFees;
        _sellOPFees = sellOPFees;
        _sellTRFees = sellTRFees;
    }

    function getValues(
        address _target
    )
        external
        view
        returns (
            bool _isFeeExempt,
            bool _isTxLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _isFeeExempt = _isFeeExcludedFrom[_target];
        _isTxLimitExempt = _isTxExcludedFrom[_target];
        _automatedMarketMakerPairs = _ammPairs[_target];
    }

    function sendETHToFees(uint256 amount) private {
        require(amount > 0, "amount must be greeter than 0");
        payable(taxWallets).transfer(amount / 2);
        payable(teamWallets).transfer(amount / 2);
    }

    function addLPETH() external payable onlyOwner {
        IRouterV1 _router = IRouterV1(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        router = _router;
        _approve(address(this), address(router), ~uint256(0));
        pair = IFactoryV2(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        excludeFromMaxTransaction(address(pair), true);
        _setAutomatedMarketMakerPair(address(pair), true);
        _router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function startMeritTrading() external onlyOwner {
        isLive = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    function updateOPFees(uint256 _buyFees, uint256 _sellFees) external onlyOwner {
        buyOPFees = _buyFees;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = _sellFees;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;
        emit UpdateFees(block.timestamp);
    }

    function removeLimit() external onlyOwner {
        buyOPFees = 2;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = 2;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;

        limitsInEffect = false;
        emit LimitsRemoved(block.timestamp);
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapMinAmounts = (totalSupply() * _min) / 10000;
        swapMaxAmounts = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    function setTxLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTxLimits lower than 0.2%");
        maxTxLimits = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTxLimits);
    }

    function setWalletLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWalletLimits lower than 0.5%");
        maxWalletLimits = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWalletLimits);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isTxExcludedFrom[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyOPFees = _marketingFee;
        buyTRFees = _devFee;
        totalBuyFees = buyOPFees + buyTRFees;
        require(totalBuyFees <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(totalBuyFees, buyOPFees, buyTRFees);
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellOPFees = _marketingFee;
        sellTRFees = _devFee;
        totalSellFees = sellOPFees + sellTRFees;
        require(
            totalSellFees <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(totalSellFees, sellOPFees, sellTRFees);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExcludedFrom[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        require(
            _pair != pair,
            "The pair cannot be removed from _ammPairs"
        );

        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(address _pair, bool value) private {
        _ammPairs[_pair] = value;

        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setMarketing(address newWallet) external onlyOwner {
        emit mktReceiverUpdated(newWallet, teamWallets);
        teamWallets = newWallet;
    }

    function setDevWallet(address newWallet) external onlyOwner {
        emit devReceiverUpdated(newWallet, taxWallets);
        taxWallets = newWallet;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amountToSwapForETH) private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        swapTokensForEth(amountToSwapForETH);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFees(address(this).balance);
        }
    }

    function setDelay() external onlyOwner {
        require(delayOn, "wl disabled");
        delayOn = false;
        buyOPFees = 30;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = 40;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;
    }

    function setDelayOn(
        address[] calldata _addresses,
        bool _enabled
    ) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            _isDelayExempt[_addresses[i]] = _enabled;
        }
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        require(
            amount > 0 || _isFeeExcludedFrom[from],
            "Amount should be greater than zero"
        );

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!isLive) {
                    require(
                        _isFeeExcludedFrom[from] || _isFeeExcludedFrom[to],
                        "_transfer:: Trading is not active."
                    );
                }
                if (delayOn) {
                    require(
                        _isDelayExempt[from] || _isDelayExempt[to],
                        "_transfer:: Transfer Delay enabled. "
                    );
                }
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(router) &&
                        to != address(pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                if (_ammPairs[from] && !_isTxExcludedFrom[to]) {
                    require(
                        amount <= maxTxLimits,
                        "Buy transfer amount exceeds the maxTxLimits."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletLimits,
                        "Max wallet exceeded"
                    );
                }
                else if (
                    _ammPairs[to] && !_isTxExcludedFrom[from]
                ) {
                    require(
                        amount <= maxTxLimits,
                        "Sell transfer amount exceeds the maxTxLimits."
                    );
                } else if (!_isTxExcludedFrom[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletLimits,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapMinAmounts;

        if (
            canSwap &&
            !swapping &&
            swapbackEnabled &&
            !_ammPairs[from] &&
            !_isFeeExcludedFrom[to] &&
            !_isFeeExcludedFrom[from] &&
            amount >= swapMinAmounts
        ) {
            swapping = true;
            swapBack(min(amount, min(contractTokenBalance, swapMaxAmounts)));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isFeeExcludedFrom[from] || _isFeeExcludedFrom[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (swapbackEnabled && !swapping) {
            if (takeFee) {
                if (_ammPairs[to] && totalSellFees > 0) {
                    fees = amount.mul(totalSellFees).div(100);
                    tokensForDev += (fees * sellTRFees) / totalSellFees;
                    tokensForMarketing += (fees * sellOPFees) / totalSellFees;
                }
                else if (_ammPairs[from] && totalBuyFees > 0) {
                    fees = amount.mul(totalBuyFees).div(100);
                    tokensForDev += (fees * buyTRFees) / totalBuyFees;
                    tokensForMarketing += (fees * buyOPFees) / totalBuyFees;
                }
                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }
                amount -= fees;
            }
        }

        super._transfer(from, to, amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyOPFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyTRFees","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxLimits","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimits","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellOPFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTRFees","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapMinAmounts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapMaxAmounts","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktReceiverUpdated","type":"event"},{"inputs":[],"name":"addLPETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeInfo","outputs":[{"internalType":"uint256","name":"_totalBuyFee","type":"uint256"},{"internalType":"uint256","name":"_buyOPFees","type":"uint256"},{"internalType":"uint256","name":"_buyTRFees","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"},{"internalType":"uint256","name":"_sellOPFees","type":"uint256"},{"internalType":"uint256","name":"_sellTRFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeWallet","outputs":[{"internalType":"address","name":"_mktReceiver","type":"address"},{"internalType":"address","name":"_devReceiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimitsInfo","outputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"getValues","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_isTxLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDelayOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMeritTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFees","type":"uint256"},{"internalType":"uint256","name":"_sellFees","type":"uint256"}],"name":"updateOPFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60a81b19169055600a805463ffffffff1916620100001790553480156200002f575f80fd5b506040518060400160405280601081526020016f4d657269742054726164696e6720414960801b815250604051806040016040528060048152602001634d54414960e01b815250816003908162000087919062000594565b50600462000096828262000594565b505050620000b3620000ad6200026c60201b60201c565b62000270565b601e5f60288180620000c86012600a6200076f565b620000d890633b9aca0062000786565b90506103e8620000ea82601462000786565b620000f69190620007a0565b600b556103e86200010982601462000786565b620001159190620007a0565b600c55620f42406200012982600162000786565b620001359190620007a0565b6008556103e86200014882601462000786565b620001549190620007a0565b600955601285905560138490556200016d8486620007c0565b60115560158390556016829055620001868284620007c0565b601455600f80546001600160a01b0319908116731638c40621729d2b90be573e80dfdd497bc512221790915560108054909116735ea7b24ef38dcfd76a2b1643d8302dfad0998d2b179055620001de336001620002c1565b601054620001f7906001600160a01b03166001620002c1565b62000204306001620002c1565b6200021361dead6001620002c1565b620002203360016200036e565b60105462000239906001600160a01b031660016200036e565b620002463060016200036e565b6200025561dead60016200036e565b62000261338262000410565b5050505050620007d6565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146200030f5760405162461bcd60e51b815260206004820181905260248201525f80516020620033e883398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b03163314620003b85760405162461bcd60e51b815260206004820181905260248201525f80516020620033e8833981519152604482015260640162000306565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92910162000362565b6001600160a01b038216620004685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000306565b8060025f8282546200047b9190620007c0565b90915550506001600160a01b0382165f9081526020819052604081208054839290620004a9908490620007c0565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200052057607f821691505b6020821081036200053f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004f257805f5260205f20601f840160051c810160208510156200056c5750805b601f840160051c820191505b818110156200058d575f815560010162000578565b5050505050565b81516001600160401b03811115620005b057620005b0620004f7565b620005c881620005c184546200050b565b8462000545565b602080601f831160018114620005fe575f8415620005e65750858301515b5f19600386901b1c1916600185901b17855562000658565b5f85815260208120601f198616915b828110156200062e578886015182559484019460019091019084016200060d565b50858210156200064c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006b457815f190482111562000698576200069862000660565b80851615620006a657918102915b93841c939080029062000679565b509250929050565b5f82620006cc5750600162000769565b81620006da57505f62000769565b8160018114620006f35760028114620006fe576200071e565b600191505062000769565b60ff84111562000712576200071262000660565b50506001821b62000769565b5060208310610133831016604e8410600b841016171562000743575081810a62000769565b6200074f838362000674565b805f190482111562000765576200076562000660565b0290505b92915050565b5f6200077f60ff841683620006bc565b9392505050565b808202811582820484141762000769576200076962000660565b5f82620007bb57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000769576200076962000660565b612c0480620007e45f395ff3fe60806040526004361061021f575f3560e01c80637571336a1161011e578063a8aa1b31116100a8578063d08893581161006d578063d0889358146106f2578063dd62ed3e14610711578063e884f26014610755578063f1d5f51714610769578063f2fde38b14610788575f80fd5b8063a8aa1b311461065d578063a9059cbb1461067c578063b2d8f2081461069b578063b8f7a665146106ba578063c0246668146106d3575f80fd5b8063924f364d116100ee578063924f364d1461057b57806395d89b41146105ec5780639a7a23d6146106005780639fd8234e1461061f578063a457c2d71461063e575f80fd5b80637571336a1461050457806375cd6818146105235780638b0414d51461052b5780638da5cb5b1461054a575f80fd5b8063515fc002116101aa578063622565891161016f5780636225658914610438578063683c3b391461044c5780636f013db91461046b57806370a08231146104bc578063715018a6146104f0575f80fd5b8063515fc002146103815780635459060d1461039557806356224ea7146103c7578063598ae6e4146103db5780635c85974f14610419575f80fd5b806318160ddd116101f057806318160ddd146102eb5780631f53ac021461030957806323b872dd14610328578063313ce567146103475780633950935114610362575f80fd5b806202eab71461022a57806306fdde031461027a578063095ea7b31461029b57806314d178ac146102ca575f80fd5b3661022657005b5f80fd5b348015610235575f80fd5b50601154601254601354601454601554601654604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b348015610285575f80fd5b5061028e6107a7565b6040516102719190612759565b3480156102a6575f80fd5b506102ba6102b53660046127b9565b610837565b6040519015158152602001610271565b3480156102d5575f80fd5b506102e96102e43660046127f7565b61084d565b005b3480156102f6575f80fd5b506002545b604051908152602001610271565b348015610314575f80fd5b506102e9610323366004612874565b6108ea565b348015610333575f80fd5b506102ba61034236600461288f565b610970565b348015610352575f80fd5b5060405160128152602001610271565b34801561036d575f80fd5b506102ba61037c3660046127b9565b610a23565b34801561038c575f80fd5b506102e9610a5e565b3480156103a0575f80fd5b50601054600f54604080516001600160a01b03938416815292909116602083015201610271565b3480156103d2575f80fd5b506102e9610ad4565b3480156103e6575f80fd5b50600754600854600954600160a81b90920460ff1691604080519315158452602084019290925290820152606001610271565b348015610424575f80fd5b506102e96104333660046128cd565b610b82565b348015610443575f80fd5b506102e9610c68565b348015610457575f80fd5b506102e96104663660046128e4565b610cfc565b348015610476575f80fd5b5061049a600a54600c54600b5460ff62010000840481169463010000009094041692565b6040805194151585529215156020850152918301526060820152608001610271565b3480156104c7575f80fd5b506102fb6104d6366004612874565b6001600160a01b03165f9081526020819052604090205490565b3480156104fb575f80fd5b506102e9610d84565b34801561050f575f80fd5b506102e961051e366004612904565b610db9565b6102e9610e42565b348015610536575f80fd5b506102e9610545366004612874565b6110ed565b348015610555575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610271565b348015610586575f80fd5b506105cd610595366004612874565b6001600160a01b03165f908152601b6020908152604080832054601a835281842054601990935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610271565b3480156105f7575f80fd5b5061028e611173565b34801561060b575f80fd5b506102e961061a366004612904565b611182565b34801561062a575f80fd5b506102e96106393660046128e4565b61122a565b348015610649575f80fd5b506102ba6106583660046127b9565b61131d565b348015610668575f80fd5b50600754610563906001600160a01b031681565b348015610687575f80fd5b506102ba6106963660046127b9565b6113b5565b3480156106a6575f80fd5b506102e96106b53660046128e4565b6113c1565b3480156106c5575f80fd5b50600a546102ba9060ff1681565b3480156106de575f80fd5b506102e96106ed366004612904565b6114ab565b3480156106fd575f80fd5b506102e961070c366004612937565b61152c565b34801561071c575f80fd5b506102fb61072b366004612967565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610760575f80fd5b506102e96116ca565b348015610774575f80fd5b506102e96107833660046128cd565b61172d565b348015610793575f80fd5b506102e96107a2366004612874565b611810565b6060600380546107b69061299e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061299e565b801561082d5780601f106108045761010080835404028352916020019161082d565b820191905f5260205f20905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b5f6108433384846118ab565b5060015b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b8152600401610877906129d6565b60405180910390fd5b5f5b828110156108e45781600e5f8686858181106108a0576108a0612a0b565b90506020020160208101906108b59190612874565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610882565b50505050565b6005546001600160a01b031633146109145760405162461bcd60e51b8152600401610877906129d6565b600f546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61097c8484846119ce565b6001600160a01b0384165f9081526001602090815260408083203384529091529020548281108015906109ae57505f83115b610a0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610877565b610a1885338584036118ab565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610843918590610a59908690612a33565b6118ab565b6005546001600160a01b03163314610a885760405162461bcd60e51b8152600401610877906129d6565b600a805460ff191660011790556007805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923905f90a2565b6005546001600160a01b03163314610afe5760405162461bcd60e51b8152600401610877906129d6565b600a54610100900460ff16610b435760405162461bcd60e51b815260206004820152600b60248201526a1ddb08191a5cd8589b195960aa1b6044820152606401610877565b600a805461ff0019169055601e60128190555f6013819055610b6491612a33565b601155602860158190555f6016819055610b7d91612a33565b601455565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610877906129d6565b6002811015610c0c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d617854784c696d697473206c6f776572207468616044820152656e20302e322560d01b6064820152608401610877565b6103e8610c1860025490565b610c229083612a46565b610c2c9190612a5d565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c925760405162461bcd60e51b8152600401610877906129d6565b600260128190555f6013819055610ca891612a33565b601155600260158190555f6016819055610cc191612a33565b601455600a805462ff00001916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e502616905f90a2565b6005546001600160a01b03163314610d265760405162461bcd60e51b8152600401610877906129d6565b60128290555f6013819055610d3b9083612a33565b60115560158190555f6016819055610d539082612a33565b60145560405142907f9d786082b596fd0e7a9b16eeb0aedc913596a0da2d30b821f8d7e3556e80c917905f90a25050565b6005546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610877906129d6565b610db75f6122c4565b565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b8152600401610877906129d6565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ea130825f196118ab565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190612a7c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190612a7c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610fba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fde9190612a7c565b600780546001600160a01b0319166001600160a01b03929092169182179055611008906001610db9565b60075461101f906001600160a01b03166001612315565b806001600160a01b031663f305d719343061104e306001600160a01b03165f9081526020819052604090205490565b5f806110626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156110c8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e49190612a97565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610877906129d6565b6010546040516001600160a01b03918216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec905f90a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546107b69061299e565b6005546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610877906129d6565b6007546001600160a01b039081169083160361121c5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152685f616d6d506169727360b81b6064820152608401610877565b6112268282612315565b5050565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610877906129d6565b601582905560168190556112688183612a33565b6014819055606410156112cf5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610877565b601454601554601654604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561139e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610877565b6113ab33858584036118ab565b5060019392505050565b5f6108433384846119ce565b6005546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610877906129d6565b601282905560138190556113ff8183612a33565b6011819055606410156114655760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610877565b601154601254601354604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001611311565b6005546001600160a01b031633146114d55760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610e36565b6005546001600160a01b031633146115565760405162461bcd60e51b8152600401610877906129d6565b60018210156115c45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610877565b818110156116275760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610877565b6007805460ff60a81b1916600160a81b851515021790556002546127109083906116519190612a46565b61165b9190612a5d565b6008556127108161166b60025490565b6116759190612a46565b61167f9190612a5d565b600955604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610877906129d6565b600a805463ff0000001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad905f90a2565b6005546001600160a01b031633146117575760405162461bcd60e51b8152600401610877906129d6565b60058110156117bb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c65744c696d697473206c6f776572604482015269207468616e20302e352560b01b6064820152608401610877565b6103e86117c760025490565b6117d19083612a46565b6117db9190612a5d565b600c8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610c5d565b6005546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118a8816122c4565b50565b6001600160a01b03831661190d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b03821661196e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b038216611a1a5760405162461bcd60e51b815260040161087790612b07565b5f811180611a3f57506001600160a01b0383165f908152601b602052604090205460ff165b611a965760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604482015261726f60f01b6064820152608401610877565b600a5462010000900460ff1615611fad576005546001600160a01b03848116911614801590611ad357506005546001600160a01b03838116911614155b8015611ae757506001600160a01b03821615155b8015611afe57506001600160a01b03821661dead14155b8015611b145750600754600160a01b900460ff16155b15611fad57600a5460ff16611bb7576001600160a01b0383165f908152601b602052604090205460ff1680611b6057506001600160a01b0382165f908152601b602052604090205460ff165b611bb75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610877565b600a54610100900460ff1615611c5c576001600160a01b0383165f908152600e602052604090205460ff1680611c0457506001600160a01b0382165f908152600e602052604090205460ff165b611c5c5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c604482015263032b217160e51b6064820152608401610877565b600a546301000000900460ff1615611d60576005546001600160a01b03838116911614801590611c9a57506006546001600160a01b03838116911614155b8015611cb457506007546001600160a01b03838116911614155b15611d6057325f908152600d60205260409020544311611d4e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610877565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526019602052604090205460ff168015611d9f57506001600160a01b0382165f908152601a602052604090205460ff16155b15611e7957600b54811115611e0b5760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c2634b6b4ba399760a11b6064820152608401610877565b600c546001600160a01b0383165f90815260208190526040902054611e309083612a33565b1115611e745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b611fad565b6001600160a01b0382165f9081526019602052604090205460ff168015611eb857506001600160a01b0383165f908152601a602052604090205460ff16155b15611f2557600b54811115611e745760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c2634b6b4ba399760991b6064820152608401610877565b6001600160a01b0382165f908152601a602052604090205460ff16611fad57600c546001600160a01b0383165f90815260208190526040902054611f699083612a33565b1115611fad5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b305f9081526020819052604090205460085481108015908190611fda5750600754600160a01b900460ff16155b8015611fef5750600754600160a81b900460ff165b801561201357506001600160a01b0385165f9081526019602052604090205460ff16155b801561203757506001600160a01b0384165f908152601b602052604090205460ff16155b801561205b57506001600160a01b0385165f908152601b602052604090205460ff16155b801561206957506008548310155b156120b1576007805460ff60a01b1916600160a01b1790556009546120a39061209e908590612099908690612368565b612368565b61237f565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806120fd57506001600160a01b0385165f908152601b602052604090205460ff165b1561210557505f5b6007545f90600160a81b900460ff16801561212a5750600754600160a01b900460ff16155b156122b05781156122b0576001600160a01b0386165f9081526019602052604090205460ff16801561215d57505f601454115b156121e957612182606461217c601454886123b890919063ffffffff16565b906123c3565b9050601454601654826121959190612a46565b61219f9190612a5d565b60175f8282546121af9190612a33565b90915550506014546015546121c49083612a46565b6121ce9190612a5d565b60185f8282546121de9190612a33565b909155506122929050565b6001600160a01b0387165f9081526019602052604090205460ff16801561221157505f601154115b1561229257612230606461217c601154886123b890919063ffffffff16565b9050601154601354826122439190612a46565b61224d9190612a5d565b60175f82825461225d9190612a33565b90915550506011546012546122729083612a46565b61227c9190612a5d565b60185f82825461228c9190612a33565b90915550505b80156122a3576122a38730836123ce565b6122ad8186612b4a565b94505b6122bb8787876123ce565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8183116123765782612378565b815b9392505050565b305f908152602081905260408120549081900361239a575050565b6123a38261253b565b4780156123b3576123b34761268b565b505050565b5f6123788284612a46565b5f6123788284612a5d565b6001600160a01b0383166123f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b03821661241a5760405162461bcd60e51b815260040161087790612b07565b6001600160a01b038084165f908152602081905260408082205492851682529020548282101561249b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610877565b82156124a757826124a9565b805b6001600160a01b038087165f90815260208190526040808220938603909355908616815290812080548592906124e0908490612a33565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161252c91815260200190565b60405180910390a35050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061256e5761256e612a0b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e99190612a7c565b816001815181106125fc576125fc612a0b565b6001600160a01b03928316602091820292909201015260065461262291309116846118ab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061265a9085905f90869030904290600401612b5d565b5f604051808303815f87803b158015612671575f80fd5b505af1158015612683573d5f803e3d5ffd5b505050505050565b5f81116126da5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726565746572207468616e20300000006044820152606401610877565b600f546001600160a01b03166108fc6126f4600284612a5d565b6040518115909202915f818181858888f19350505050158015612719573d5f803e3d5ffd5b506010546001600160a01b03166108fc612734600284612a5d565b6040518115909202915f818181858888f19350505050158015611226573d5f803e3d5ffd5b5f602080835283518060208501525f5b8181101561278557858101830151858201604001528201612769565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118a8575f80fd5b5f80604083850312156127ca575f80fd5b82356127d5816127a5565b946020939093013593505050565b803580151581146127f2575f80fd5b919050565b5f805f60408486031215612809575f80fd5b833567ffffffffffffffff80821115612820575f80fd5b818601915086601f830112612833575f80fd5b813581811115612841575f80fd5b8760208260051b8501011115612855575f80fd5b60209283019550935061286b91860190506127e3565b90509250925092565b5f60208284031215612884575f80fd5b8135612378816127a5565b5f805f606084860312156128a1575f80fd5b83356128ac816127a5565b925060208401356128bc816127a5565b929592945050506040919091013590565b5f602082840312156128dd575f80fd5b5035919050565b5f80604083850312156128f5575f80fd5b50508035926020909101359150565b5f8060408385031215612915575f80fd5b8235612920816127a5565b915061292e602084016127e3565b90509250929050565b5f805f60608486031215612949575f80fd5b612952846127e3565b95602085013595506040909401359392505050565b5f8060408385031215612978575f80fd5b8235612983816127a5565b91506020830135612993816127a5565b809150509250929050565b600181811c908216806129b257607f821691505b6020821081036129d057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084757610847612a1f565b808202811582820484141761084757610847612a1f565b5f82612a7757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a8c575f80fd5b8151612378816127a5565b5f805f60608486031215612aa9575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561084757610847612a1f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bad5784516001600160a01b031683529383019391830191600101612b88565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202e0178259715ad7de2ac027d34c98c4bd150205dd87f093dfe94e2a3fd3725cd64736f6c634300081600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061021f575f3560e01c80637571336a1161011e578063a8aa1b31116100a8578063d08893581161006d578063d0889358146106f2578063dd62ed3e14610711578063e884f26014610755578063f1d5f51714610769578063f2fde38b14610788575f80fd5b8063a8aa1b311461065d578063a9059cbb1461067c578063b2d8f2081461069b578063b8f7a665146106ba578063c0246668146106d3575f80fd5b8063924f364d116100ee578063924f364d1461057b57806395d89b41146105ec5780639a7a23d6146106005780639fd8234e1461061f578063a457c2d71461063e575f80fd5b80637571336a1461050457806375cd6818146105235780638b0414d51461052b5780638da5cb5b1461054a575f80fd5b8063515fc002116101aa578063622565891161016f5780636225658914610438578063683c3b391461044c5780636f013db91461046b57806370a08231146104bc578063715018a6146104f0575f80fd5b8063515fc002146103815780635459060d1461039557806356224ea7146103c7578063598ae6e4146103db5780635c85974f14610419575f80fd5b806318160ddd116101f057806318160ddd146102eb5780631f53ac021461030957806323b872dd14610328578063313ce567146103475780633950935114610362575f80fd5b806202eab71461022a57806306fdde031461027a578063095ea7b31461029b57806314d178ac146102ca575f80fd5b3661022657005b5f80fd5b348015610235575f80fd5b50601154601254601354601454601554601654604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b348015610285575f80fd5b5061028e6107a7565b6040516102719190612759565b3480156102a6575f80fd5b506102ba6102b53660046127b9565b610837565b6040519015158152602001610271565b3480156102d5575f80fd5b506102e96102e43660046127f7565b61084d565b005b3480156102f6575f80fd5b506002545b604051908152602001610271565b348015610314575f80fd5b506102e9610323366004612874565b6108ea565b348015610333575f80fd5b506102ba61034236600461288f565b610970565b348015610352575f80fd5b5060405160128152602001610271565b34801561036d575f80fd5b506102ba61037c3660046127b9565b610a23565b34801561038c575f80fd5b506102e9610a5e565b3480156103a0575f80fd5b50601054600f54604080516001600160a01b03938416815292909116602083015201610271565b3480156103d2575f80fd5b506102e9610ad4565b3480156103e6575f80fd5b50600754600854600954600160a81b90920460ff1691604080519315158452602084019290925290820152606001610271565b348015610424575f80fd5b506102e96104333660046128cd565b610b82565b348015610443575f80fd5b506102e9610c68565b348015610457575f80fd5b506102e96104663660046128e4565b610cfc565b348015610476575f80fd5b5061049a600a54600c54600b5460ff62010000840481169463010000009094041692565b6040805194151585529215156020850152918301526060820152608001610271565b3480156104c7575f80fd5b506102fb6104d6366004612874565b6001600160a01b03165f9081526020819052604090205490565b3480156104fb575f80fd5b506102e9610d84565b34801561050f575f80fd5b506102e961051e366004612904565b610db9565b6102e9610e42565b348015610536575f80fd5b506102e9610545366004612874565b6110ed565b348015610555575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610271565b348015610586575f80fd5b506105cd610595366004612874565b6001600160a01b03165f908152601b6020908152604080832054601a835281842054601990935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610271565b3480156105f7575f80fd5b5061028e611173565b34801561060b575f80fd5b506102e961061a366004612904565b611182565b34801561062a575f80fd5b506102e96106393660046128e4565b61122a565b348015610649575f80fd5b506102ba6106583660046127b9565b61131d565b348015610668575f80fd5b50600754610563906001600160a01b031681565b348015610687575f80fd5b506102ba6106963660046127b9565b6113b5565b3480156106a6575f80fd5b506102e96106b53660046128e4565b6113c1565b3480156106c5575f80fd5b50600a546102ba9060ff1681565b3480156106de575f80fd5b506102e96106ed366004612904565b6114ab565b3480156106fd575f80fd5b506102e961070c366004612937565b61152c565b34801561071c575f80fd5b506102fb61072b366004612967565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610760575f80fd5b506102e96116ca565b348015610774575f80fd5b506102e96107833660046128cd565b61172d565b348015610793575f80fd5b506102e96107a2366004612874565b611810565b6060600380546107b69061299e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061299e565b801561082d5780601f106108045761010080835404028352916020019161082d565b820191905f5260205f20905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b5f6108433384846118ab565b5060015b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b8152600401610877906129d6565b60405180910390fd5b5f5b828110156108e45781600e5f8686858181106108a0576108a0612a0b565b90506020020160208101906108b59190612874565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610882565b50505050565b6005546001600160a01b031633146109145760405162461bcd60e51b8152600401610877906129d6565b600f546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61097c8484846119ce565b6001600160a01b0384165f9081526001602090815260408083203384529091529020548281108015906109ae57505f83115b610a0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610877565b610a1885338584036118ab565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610843918590610a59908690612a33565b6118ab565b6005546001600160a01b03163314610a885760405162461bcd60e51b8152600401610877906129d6565b600a805460ff191660011790556007805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923905f90a2565b6005546001600160a01b03163314610afe5760405162461bcd60e51b8152600401610877906129d6565b600a54610100900460ff16610b435760405162461bcd60e51b815260206004820152600b60248201526a1ddb08191a5cd8589b195960aa1b6044820152606401610877565b600a805461ff0019169055601e60128190555f6013819055610b6491612a33565b601155602860158190555f6016819055610b7d91612a33565b601455565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610877906129d6565b6002811015610c0c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d617854784c696d697473206c6f776572207468616044820152656e20302e322560d01b6064820152608401610877565b6103e8610c1860025490565b610c229083612a46565b610c2c9190612a5d565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c925760405162461bcd60e51b8152600401610877906129d6565b600260128190555f6013819055610ca891612a33565b601155600260158190555f6016819055610cc191612a33565b601455600a805462ff00001916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e502616905f90a2565b6005546001600160a01b03163314610d265760405162461bcd60e51b8152600401610877906129d6565b60128290555f6013819055610d3b9083612a33565b60115560158190555f6016819055610d539082612a33565b60145560405142907f9d786082b596fd0e7a9b16eeb0aedc913596a0da2d30b821f8d7e3556e80c917905f90a25050565b6005546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610877906129d6565b610db75f6122c4565b565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b8152600401610877906129d6565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ea130825f196118ab565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190612a7c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190612a7c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610fba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fde9190612a7c565b600780546001600160a01b0319166001600160a01b03929092169182179055611008906001610db9565b60075461101f906001600160a01b03166001612315565b806001600160a01b031663f305d719343061104e306001600160a01b03165f9081526020819052604090205490565b5f806110626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156110c8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e49190612a97565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610877906129d6565b6010546040516001600160a01b03918216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec905f90a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546107b69061299e565b6005546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610877906129d6565b6007546001600160a01b039081169083160361121c5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152685f616d6d506169727360b81b6064820152608401610877565b6112268282612315565b5050565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610877906129d6565b601582905560168190556112688183612a33565b6014819055606410156112cf5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610877565b601454601554601654604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561139e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610877565b6113ab33858584036118ab565b5060019392505050565b5f6108433384846119ce565b6005546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610877906129d6565b601282905560138190556113ff8183612a33565b6011819055606410156114655760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610877565b601154601254601354604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001611311565b6005546001600160a01b031633146114d55760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610e36565b6005546001600160a01b031633146115565760405162461bcd60e51b8152600401610877906129d6565b60018210156115c45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610877565b818110156116275760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610877565b6007805460ff60a81b1916600160a81b851515021790556002546127109083906116519190612a46565b61165b9190612a5d565b6008556127108161166b60025490565b6116759190612a46565b61167f9190612a5d565b600955604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610877906129d6565b600a805463ff0000001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad905f90a2565b6005546001600160a01b031633146117575760405162461bcd60e51b8152600401610877906129d6565b60058110156117bb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c65744c696d697473206c6f776572604482015269207468616e20302e352560b01b6064820152608401610877565b6103e86117c760025490565b6117d19083612a46565b6117db9190612a5d565b600c8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610c5d565b6005546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118a8816122c4565b50565b6001600160a01b03831661190d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b03821661196e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b038216611a1a5760405162461bcd60e51b815260040161087790612b07565b5f811180611a3f57506001600160a01b0383165f908152601b602052604090205460ff165b611a965760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604482015261726f60f01b6064820152608401610877565b600a5462010000900460ff1615611fad576005546001600160a01b03848116911614801590611ad357506005546001600160a01b03838116911614155b8015611ae757506001600160a01b03821615155b8015611afe57506001600160a01b03821661dead14155b8015611b145750600754600160a01b900460ff16155b15611fad57600a5460ff16611bb7576001600160a01b0383165f908152601b602052604090205460ff1680611b6057506001600160a01b0382165f908152601b602052604090205460ff165b611bb75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610877565b600a54610100900460ff1615611c5c576001600160a01b0383165f908152600e602052604090205460ff1680611c0457506001600160a01b0382165f908152600e602052604090205460ff165b611c5c5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c604482015263032b217160e51b6064820152608401610877565b600a546301000000900460ff1615611d60576005546001600160a01b03838116911614801590611c9a57506006546001600160a01b03838116911614155b8015611cb457506007546001600160a01b03838116911614155b15611d6057325f908152600d60205260409020544311611d4e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610877565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526019602052604090205460ff168015611d9f57506001600160a01b0382165f908152601a602052604090205460ff16155b15611e7957600b54811115611e0b5760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c2634b6b4ba399760a11b6064820152608401610877565b600c546001600160a01b0383165f90815260208190526040902054611e309083612a33565b1115611e745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b611fad565b6001600160a01b0382165f9081526019602052604090205460ff168015611eb857506001600160a01b0383165f908152601a602052604090205460ff16155b15611f2557600b54811115611e745760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c2634b6b4ba399760991b6064820152608401610877565b6001600160a01b0382165f908152601a602052604090205460ff16611fad57600c546001600160a01b0383165f90815260208190526040902054611f699083612a33565b1115611fad5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b305f9081526020819052604090205460085481108015908190611fda5750600754600160a01b900460ff16155b8015611fef5750600754600160a81b900460ff165b801561201357506001600160a01b0385165f9081526019602052604090205460ff16155b801561203757506001600160a01b0384165f908152601b602052604090205460ff16155b801561205b57506001600160a01b0385165f908152601b602052604090205460ff16155b801561206957506008548310155b156120b1576007805460ff60a01b1916600160a01b1790556009546120a39061209e908590612099908690612368565b612368565b61237f565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806120fd57506001600160a01b0385165f908152601b602052604090205460ff165b1561210557505f5b6007545f90600160a81b900460ff16801561212a5750600754600160a01b900460ff16155b156122b05781156122b0576001600160a01b0386165f9081526019602052604090205460ff16801561215d57505f601454115b156121e957612182606461217c601454886123b890919063ffffffff16565b906123c3565b9050601454601654826121959190612a46565b61219f9190612a5d565b60175f8282546121af9190612a33565b90915550506014546015546121c49083612a46565b6121ce9190612a5d565b60185f8282546121de9190612a33565b909155506122929050565b6001600160a01b0387165f9081526019602052604090205460ff16801561221157505f601154115b1561229257612230606461217c601154886123b890919063ffffffff16565b9050601154601354826122439190612a46565b61224d9190612a5d565b60175f82825461225d9190612a33565b90915550506011546012546122729083612a46565b61227c9190612a5d565b60185f82825461228c9190612a33565b90915550505b80156122a3576122a38730836123ce565b6122ad8186612b4a565b94505b6122bb8787876123ce565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8183116123765782612378565b815b9392505050565b305f908152602081905260408120549081900361239a575050565b6123a38261253b565b4780156123b3576123b34761268b565b505050565b5f6123788284612a46565b5f6123788284612a5d565b6001600160a01b0383166123f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b03821661241a5760405162461bcd60e51b815260040161087790612b07565b6001600160a01b038084165f908152602081905260408082205492851682529020548282101561249b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610877565b82156124a757826124a9565b805b6001600160a01b038087165f90815260208190526040808220938603909355908616815290812080548592906124e0908490612a33565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161252c91815260200190565b60405180910390a35050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061256e5761256e612a0b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e99190612a7c565b816001815181106125fc576125fc612a0b565b6001600160a01b03928316602091820292909201015260065461262291309116846118ab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061265a9085905f90869030904290600401612b5d565b5f604051808303815f87803b158015612671575f80fd5b505af1158015612683573d5f803e3d5ffd5b505050505050565b5f81116126da5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726565746572207468616e20300000006044820152606401610877565b600f546001600160a01b03166108fc6126f4600284612a5d565b6040518115909202915f818181858888f19350505050158015612719573d5f803e3d5ffd5b506010546001600160a01b03166108fc612734600284612a5d565b6040518115909202915f818181858888f19350505050158015611226573d5f803e3d5ffd5b5f602080835283518060208501525f5b8181101561278557858101830151858201604001528201612769565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118a8575f80fd5b5f80604083850312156127ca575f80fd5b82356127d5816127a5565b946020939093013593505050565b803580151581146127f2575f80fd5b919050565b5f805f60408486031215612809575f80fd5b833567ffffffffffffffff80821115612820575f80fd5b818601915086601f830112612833575f80fd5b813581811115612841575f80fd5b8760208260051b8501011115612855575f80fd5b60209283019550935061286b91860190506127e3565b90509250925092565b5f60208284031215612884575f80fd5b8135612378816127a5565b5f805f606084860312156128a1575f80fd5b83356128ac816127a5565b925060208401356128bc816127a5565b929592945050506040919091013590565b5f602082840312156128dd575f80fd5b5035919050565b5f80604083850312156128f5575f80fd5b50508035926020909101359150565b5f8060408385031215612915575f80fd5b8235612920816127a5565b915061292e602084016127e3565b90509250929050565b5f805f60608486031215612949575f80fd5b612952846127e3565b95602085013595506040909401359392505050565b5f8060408385031215612978575f80fd5b8235612983816127a5565b91506020830135612993816127a5565b809150509250929050565b600181811c908216806129b257607f821691505b6020821081036129d057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084757610847612a1f565b808202811582820484141761084757610847612a1f565b5f82612a7757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a8c575f80fd5b8151612378816127a5565b5f805f60608486031215612aa9575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561084757610847612a1f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bad5784516001600160a01b031683529383019391830191600101612b88565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202e0178259715ad7de2ac027d34c98c4bd150205dd87f093dfe94e2a3fd3725cd64736f6c63430008160033

Deployed Bytecode Sourcemap

13656:17045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18645:515;;;;;;;;;;-1:-1:-1;18964:12:0;;19000:9;;19033;;19069:13;;19107:10;;19142;;18645:515;;;301:25:1;;;357:2;342:18;;335:34;;;;385:18;;;378:34;;;;443:2;428:18;;421:34;486:3;471:19;;464:35;530:3;515:19;;508:35;288:3;273:19;18645:515:0;;;;;;;;8637:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9614:194::-;;;;;;;;;;-1:-1:-1;9614:194:0;;;;;:::i;:::-;;:::i;:::-;;;1728:14:1;;1721:22;1703:41;;1691:2;1676:18;9614:194:0;1563:187:1;25923:243:0;;;;;;;;;;-1:-1:-1;25923:243:0;;;;;:::i;:::-;;:::i;:::-;;8958:107;;;;;;;;;;-1:-1:-1;9046:11:0;;8958:107;;;2760:25:1;;;2748:2;2733:18;8958:107:0;2614:177:1;24456:158:0;;;;;;;;;;-1:-1:-1;24456:158:0;;;;;:::i;:::-;;:::i;9816:543::-;;;;;;;;;;-1:-1:-1;9816:543:0;;;;;:::i;:::-;;:::i;8857:93::-;;;;;;;;;;-1:-1:-1;8857:93:0;;8940:2;3651:36:1;;3639:2;3624:18;8857:93:0;3509:184:1;10367:290:0;;;;;;;;;;-1:-1:-1;10367:290:0;;;;;:::i;:::-;;:::i;20531:160::-;;;;;;;;;;;;;:::i;18463:174::-;;;;;;;;;;-1:-1:-1;18605:11:0;;18618:10;;18463:174;;;-1:-1:-1;;;;;18605:11:0;;;3910:34:1;;18618:10:0;;;;3975:2:1;3960:18;;3953:43;3845:18;18463:174:0;3698:304:1;25601:314:0;;;;;;;;;;;;;:::i;17690:352::-;;;;;;;;;;-1:-1:-1;17929:15:0;;17975:14;;18020;;-1:-1:-1;;;17929:15:0;;;;;;17690:352;;;4228:14:1;;4221:22;4203:41;;4275:2;4260:18;;4253:34;;;;4303:18;;;4296:34;4191:2;4176:18;17690:352:0;4007:329:1;22101:233:0;;;;;;;;;;-1:-1:-1;22101:233:0;;;;;:::i;:::-;;:::i;21048:328::-;;;;;;;;;;;;;:::i;20699:341::-;;;;;;;;;;-1:-1:-1;20699:341:0;;;;;:::i;:::-;;:::i;18050:405::-;;;;;;;;;;;;18308:14;;18401:15;;18436:11;;18308:14;;;;;;;18357:20;;;;;;18050:405;;;;;5023:14:1;;5016:22;4998:41;;5082:14;;5075:22;5070:2;5055:18;;5048:50;5114:18;;;5107:34;5172:2;5157:18;;5150:34;4985:3;4970:19;18050:405:0;4779:411:1;9073:141:0;;;;;;;;;;-1:-1:-1;9073:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;9190:16:0;9163:7;9190:16;;;;;;;;;;;;9073:141;7685:103;;;;;;;;;;;;;:::i;22603:202::-;;;;;;;;;;-1:-1:-1;22603:202:0;;;;;:::i;:::-;;:::i;19812:711::-;;;:::i;24288:160::-;;;;;;;;;;-1:-1:-1;24288:160:0;;;;;:::i;:::-;;:::i;7462:87::-;;;;;;;;;;-1:-1:-1;7535:6:0;;-1:-1:-1;;;;;7535:6:0;7462:87;;;-1:-1:-1;;;;;5679:32:1;;;5661:51;;5649:2;5634:18;7462:87:0;5515:203:1;19168:407:0;;;;;;;;;;-1:-1:-1;19168:407:0;;;;;:::i;:::-;-1:-1:-1;;;;;19426:27:0;19284:17;19426:27;;;:18;:27;;;;;;;;;19483:17;:26;;;;;;19549:9;:18;;;;;;19426:27;;;;;19483:26;;;;19549:18;;19168:407;;;;;5932:14:1;;5925:22;5907:41;;5991:14;;5984:22;5979:2;5964:18;;5957:50;6050:14;6043:22;6023:18;;;6016:50;5895:2;5880:18;19168:407:0;5723:349:1;8745:104:0;;;;;;;;;;;;;:::i;23813:284::-;;;;;;;;;;-1:-1:-1;23813:284:0;;;;;:::i;:::-;;:::i;23194:422::-;;;;;;;;;;-1:-1:-1;23194:422:0;;;;;:::i;:::-;;:::i;10665:475::-;;;;;;;;;;-1:-1:-1;10665:475:0;;;;;:::i;:::-;;:::i;13771:19::-;;;;;;;;;;-1:-1:-1;13771:19:0;;;;-1:-1:-1;;;;;13771:19:0;;;9222:200;;;;;;;;;;-1:-1:-1;9222:200:0;;;;;:::i;:::-;;:::i;22813:373::-;;;;;;;;;;-1:-1:-1;22813:373:0;;;;;:::i;:::-;;:::i;13944:26::-;;;;;;;;;;-1:-1:-1;13944:26:0;;;;;;;;23624:181;;;;;;;;;;-1:-1:-1;23624:181:0;;;;;:::i;:::-;;:::i;21544:549::-;;;;;;;;;;-1:-1:-1;21544:549:0;;;;;:::i;:::-;;:::i;9430:176::-;;;;;;;;;;-1:-1:-1;9430:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;9571:18:0;;;9544:7;9571:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9430:176;21384:152;;;;;;;;;;;;;:::i;22342:253::-;;;;;;;;;;-1:-1:-1;22342:253:0;;;;;:::i;:::-;;:::i;7796:238::-;;;;;;;;;;-1:-1:-1;7796:238:0;;;;;:::i;:::-;;:::i;8637:100::-;8691:13;8724:5;8717:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8637:100;:::o;9614:194::-;9722:4;9739:39;896:10;9762:7;9771:6;9739:8;:39::i;:::-;-1:-1:-1;9796:4:0;9614:194;;;;;:::o;25923:243::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;;;;;;;;;26049:9:::1;26044:115;26064:21:::0;;::::1;26044:115;;;26139:8;26107:14;:29;26122:10;;26133:1;26122:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26107:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26107:29:0;:40;;-1:-1:-1;;26107:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26087:3:0::1;26044:115;;;;25923:243:::0;;;:::o;24456:158::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;24562:10:::1;::::0;24532:41:::1;::::0;-1:-1:-1;;;;;24562:10:0;;::::1;::::0;24532:41;::::1;::::0;::::1;::::0;24562:10:::1;::::0;24532:41:::1;24584:10;:22:::0;;-1:-1:-1;;;;;;24584:22:0::1;-1:-1:-1::0;;;;;24584:22:0;;;::::1;::::0;;;::::1;::::0;;24456:158::o;9816:543::-;9956:4;9973:36;9983:6;9991:9;10002:6;9973:9;:36::i;:::-;-1:-1:-1;;;;;10049:19:0;;10022:24;10049:19;;;:11;:19;;;;;;;;896:10;10049:33;;;;;;;;10115:26;;;;;;:40;;;10154:1;10145:6;:10;10115:40;10093:130;;;;-1:-1:-1;;;10093:130:0;;7871:2:1;10093:130:0;;;7853:21:1;7910:2;7890:18;;;7883:30;7949:34;7929:18;;;7922:62;-1:-1:-1;;;8000:18:1;;;7993:38;8048:19;;10093:130:0;7669:404:1;10093:130:0;10259:57;10268:6;896:10;10309:6;10290:16;:25;10259:8;:57::i;:::-;-1:-1:-1;10347:4:0;;9816:543;-1:-1:-1;;;;9816:543:0:o;10367:290::-;896:10;10480:4;10569:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10569:34:0;;;;;;;;;;10480:4;;10497:130;;10547:7;;10569:47;;10606:10;;10569:47;:::i;:::-;10497:8;:130::i;20531:160::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;20590:6:::1;:13:::0;;-1:-1:-1;;20590:13:0::1;20599:4;20590:13;::::0;;20614:15:::1;:22:::0;;-1:-1:-1;;;;20614:22:0::1;-1:-1:-1::0;;;20614:22:0::1;::::0;;20652:31:::1;::::0;20667:15:::1;::::0;20652:31:::1;::::0;20590:6:::1;::::0;20652:31:::1;20531:160::o:0;25601:314::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;25659:7:::1;::::0;::::1;::::0;::::1;;;25651:31;;;::::0;-1:-1:-1;;;25651:31:0;;8542:2:1;25651:31:0::1;::::0;::::1;8524:21:1::0;8581:2;8561:18;;;8554:30;-1:-1:-1;;;8600:18:1;;;8593:41;8651:18;;25651:31:0::1;8340:335:1::0;25651:31:0::1;25693:7;:15:::0;;-1:-1:-1;;25693:15:0::1;::::0;;25731:2:::1;25719:9;:14:::0;;;25703:5:::1;25744:9;:13:::0;;;25783:21:::1;::::0;::::1;:::i;:::-;25768:12;:36:::0;25830:2:::1;25817:10;:15:::0;;;-1:-1:-1;25843:10:0::1;:14:::0;;;25884:23:::1;::::0;::::1;:::i;:::-;25868:13;:39:::0;25601:314::o;22101:233::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22185:1:::1;22175:6;:11;;22167:62;;;::::0;-1:-1:-1;;;22167:62:0;;8882:2:1;22167:62:0::1;::::0;::::1;8864:21:1::0;8921:2;8901:18;;;8894:30;8960:34;8940:18;;;8933:62;-1:-1:-1;;;9011:18:1;;;9004:36;9057:19;;22167:62:0::1;8680:402:1::0;22167:62:0::1;22281:4;22264:13;9046:11:::0;;;8958:107;22264:13:::1;22255:22;::::0;:6;:22:::1;:::i;:::-;22254:31;;;;:::i;:::-;22240:11;:45:::0;;;22301:25:::1;::::0;2760::1;;;22301::0::1;::::0;2748:2:1;2733:18;22301:25:0::1;;;;;;;;22101:233:::0;:::o;21048:328::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21113:1:::1;21101:9;:13:::0;;;21137:1:::1;21125:9;:13:::0;;;21164:21:::1;::::0;::::1;:::i;:::-;21149:12;:36:::0;21211:1:::1;21198:10;:14:::0;;;-1:-1:-1;21223:10:0::1;:14:::0;;;21264:23:::1;::::0;::::1;:::i;:::-;21248:13;:39:::0;21300:14:::1;:22:::0;;-1:-1:-1;;21300:22:0::1;::::0;;21338:30:::1;::::0;21352:15:::1;::::0;21338:30:::1;::::0;21317:5:::1;::::0;21338:30:::1;21048:328::o:0;20699:341::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;20788:9:::1;:20:::0;;;20831:1:::1;20819:9;:13:::0;;;20858:21:::1;::::0;20800:8;20858:21:::1;:::i;:::-;20843:12;:36:::0;20892:10:::1;:22:::0;;;-1:-1:-1;20925:10:0::1;:14:::0;;;20966:23:::1;::::0;20905:9;20966:23:::1;:::i;:::-;20950:13;:39:::0;21005:27:::1;::::0;21016:15:::1;::::0;21005:27:::1;::::0;;;::::1;20699:341:::0;;:::o;7685:103::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;7750:30:::1;7777:1;7750:18;:30::i;:::-;7685:103::o:0;22603:202::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22718:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:32;;-1:-1:-1;;22718:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22766:31;;1703:41:1;;;22766:31:0::1;::::0;1676:18:1;22766:31:0::1;;;;;;;;22603:202:::0;;:::o;19812:711::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;19978:6:::1;:16:::0;;-1:-1:-1;;;;;;19978:16:0::1;19914:42;19978:16:::0;;::::1;::::0;;;20005:53:::1;20022:4;19914:42:::0;-1:-1:-1;;20005:8:0::1;:53::i;:::-;20087:7;-1:-1:-1::0;;;;;20087:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20076:40:0::1;;20139:4;20159:7;-1:-1:-1::0;;;;;20159:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20076:108;::::0;-1:-1:-1;;;;;;20076:108:0::1;::::0;;;;;;-1:-1:-1;;;;;3928:15:1;;;20076:108:0::1;::::0;::::1;3910:34:1::0;3980:15;;3960:18;;;3953:43;3845:18;;20076:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20069:4;:115:::0;;-1:-1:-1;;;;;;20069:115:0::1;-1:-1:-1::0;;;;;20069:115:0;;;::::1;::::0;;::::1;::::0;;20195:46:::1;::::0;-1:-1:-1;20195:25:0::1;:46::i;:::-;20289:4;::::0;20252:49:::1;::::0;-1:-1:-1;;;;;20289:4:0::1;::::0;20252:28:::1;:49::i;:::-;20312:7;-1:-1:-1::0;;;;;20312:23:0::1;;20343:9;20376:4;20396:24;20414:4;-1:-1:-1::0;;;;;9190:16:0;9163:7;9190:16;;;;;;;;;;;;9073:141;20396:24:::1;20435:1;20451::::0;20467:7:::1;7535:6:::0;;-1:-1:-1;;;;;7535:6:0;;7462:87;20467:7:::1;20312:203;::::0;::::1;::::0;;;-1:-1:-1;;;;;;20312:203:0;;;-1:-1:-1;;;;;10097:15:1;;;20312:203:0::1;::::0;::::1;10079:34:1::0;10129:18;;;10122:34;;;;10172:18;;;10165:34;;;;10215:18;;;10208:34;10279:15;;;10258:19;;;10251:44;20489:15:0::1;10311:19:1::0;;;10304:35;10013:19;;20312:203:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24288:160::-:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;24394:11:::1;::::0;24364:42:::1;::::0;-1:-1:-1;;;;;24394:11:0;;::::1;::::0;24364:42;::::1;::::0;::::1;::::0;24394:11:::1;::::0;24364:42:::1;24417:11;:23:::0;;-1:-1:-1;;;;;;24417:23:0::1;-1:-1:-1::0;;;;;24417:23:0;;;::::1;::::0;;;::::1;::::0;;24288:160::o;8745:104::-;8801:13;8834:7;8827:14;;;;;:::i;23813:284::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;23961:4:::1;::::0;-1:-1:-1;;;;;23961:4:0;;::::1;23952:13:::0;;::::1;::::0;23930:104:::1;;;::::0;-1:-1:-1;;;23930:104:0;;10863:2:1;23930:104:0::1;::::0;::::1;10845:21:1::0;10902:2;10882:18;;;10875:30;10941:34;10921:18;;;10914:62;-1:-1:-1;;;10992:18:1;;;10985:39;11041:19;;23930:104:0::1;10661:405:1::0;23930:104:0::1;24047:42;24076:5;24083;24047:28;:42::i;:::-;23813:284:::0;;:::o;23194:422::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;23310:10:::1;:26:::0;;;23347:10:::1;:20:::0;;;23394:23:::1;23360:7:::0;23323:13;23394:23:::1;:::i;:::-;23378:13;:39:::0;;;23467:3:::1;-1:-1:-1::0;23450:20:0::1;23428:111;;;::::0;-1:-1:-1;;;23428:111:0;;11273:2:1;23428:111:0::1;::::0;::::1;11255:21:1::0;11312:2;11292:18;;;11285:30;11351:34;11331:18;;;11324:62;-1:-1:-1;;;11402:18:1;;;11395:39;11451:19;;23428:111:0::1;11071:405:1::0;23428:111:0::1;23570:13;::::0;23585:10:::1;::::0;23597::::1;::::0;23555:53:::1;::::0;;11683:25:1;;;11739:2;11724:18;;11717:34;;;;11767:18;;;11760:34;23555:53:0::1;::::0;11671:2:1;11656:18;23555:53:0::1;;;;;;;;23194:422:::0;;:::o;10665:475::-;896:10;10783:4;10827:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10827:34:0;;;;;;;;;;10894:35;;;;10872:122;;;;-1:-1:-1;;;10872:122:0;;12007:2:1;10872:122:0;;;11989:21:1;12046:2;12026:18;;;12019:30;12085:34;12065:18;;;12058:62;-1:-1:-1;;;12136:18:1;;;12129:35;12181:19;;10872:122:0;11805:401:1;10872:122:0;11030:67;896:10;11053:7;11081:15;11062:16;:34;11030:8;:67::i;:::-;-1:-1:-1;11128:4:0;;10665:475;-1:-1:-1;;;10665:475:0:o;9222:200::-;9333:4;9350:42;896:10;9374:9;9385:6;9350:9;:42::i;22813:373::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22928:9:::1;:25:::0;;;22964:9:::1;:19:::0;;;23009:21:::1;22976:7:::0;22940:13;23009:21:::1;:::i;:::-;22994:12;:36:::0;;;23065:3:::1;-1:-1:-1::0;23049:19:0::1;23041:72;;;::::0;-1:-1:-1;;;23041:72:0;;12413:2:1;23041:72:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:34;12471:18;;;12464:62;-1:-1:-1;;;12542:18:1;;;12535:38;12590:19;;23041:72:0::1;12211:404:1::0;23041:72:0::1;23143:12;::::0;23157:9:::1;::::0;23168::::1;::::0;23129:49:::1;::::0;;11683:25:1;;;11739:2;11724:18;;11717:34;;;;11767:18;;;11760:34;23129:49:0::1;::::0;11671:2:1;11656:18;23129:49:0::1;11481:319:1::0;23624:181:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23709:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;23709:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23763:34;;1703:41:1;;;23763:34:0::1;::::0;1676:18:1;23763:34:0::1;1563:187:1::0;21544:549:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21710:1:::1;21702:4;:9;;21680:111;;;::::0;-1:-1:-1;;;21680:111:0;;12822:2:1;21680:111:0::1;::::0;::::1;12804:21:1::0;12861:2;12841:18;;;12834:30;12900:34;12880:18;;;12873:62;-1:-1:-1;;;12951:18:1;;;12944:50;13011:19;;21680:111:0::1;12620:416:1::0;21680:111:0::1;21818:4;21810;:12;;21802:67;;;::::0;-1:-1:-1;;;21802:67:0;;13243:2:1;21802:67:0::1;::::0;::::1;13225:21:1::0;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:40;13422:19;;21802:67:0::1;13041:406:1::0;21802:67:0::1;21882:15;:26:::0;;-1:-1:-1;;;;21882:26:0::1;-1:-1:-1::0;;;21882:26:0;::::1;;;;::::0;;9046:11;;21961:5:::1;::::0;21953:4;;21937:20:::1;;;;:::i;:::-;21936:30;;;;:::i;:::-;21919:14;:47:::0;22019:5:::1;22011:4:::0;21995:13:::1;9046:11:::0;;;8958:107;21995:13:::1;:20;;;;:::i;:::-;21994:30;;;;:::i;:::-;21977:14;:47:::0;22040:45:::1;::::0;;4228:14:1;;4221:22;4203:41;;4275:2;4260:18;;4253:34;;;4303:18;;;4296:34;;;22040:45:0::1;::::0;4191:2:1;4176:18;22040:45:0::1;;;;;;;21544:549:::0;;;:::o;21384:152::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21446:20:::1;:28:::0;;-1:-1:-1;;21446:28:0::1;::::0;;21490:38:::1;::::0;21512:15:::1;::::0;21490:38:::1;::::0;21469:5:::1;::::0;21490:38:::1;21384:152::o:0;22342:253::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22430:1:::1;22420:6;:11;;22412:66;;;::::0;-1:-1:-1;;;22412:66:0;;13654:2:1;22412:66:0::1;::::0;::::1;13636:21:1::0;13693:2;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;-1:-1:-1;;;13783:18:1;;;13776:40;13833:19;;22412:66:0::1;13452:406:1::0;22412:66:0::1;22534:4;22517:13;9046:11:::0;;;8958:107;22517:13:::1;22508:22;::::0;:6;:22:::1;:::i;:::-;22507:31;;;;:::i;:::-;22489:15;:49:::0;;;22554:33:::1;::::0;2760:25:1;;;22554:33:0::1;::::0;2748:2:1;2733:18;22554:33:0::1;2614:177:1::0;7796:238:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7899:22:0;::::1;7877:110;;;::::0;-1:-1:-1;;;7877:110:0;;14065:2:1;7877:110:0::1;::::0;::::1;14047:21:1::0;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;-1:-1:-1;;;14194:18:1;;;14187:36;14240:19;;7877:110:0::1;13863:402:1::0;7877:110:0::1;7998:28;8017:8;7998:18;:28::i;:::-;7796:238:::0;:::o;13004:380::-;-1:-1:-1;;;;;13140:19:0;;13132:68;;;;-1:-1:-1;;;13132:68:0;;14472:2:1;13132:68:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:34;14530:18;;;14523:62;-1:-1:-1;;;14601:18:1;;;14594:34;14645:19;;13132:68:0;14270:400:1;13132:68:0;-1:-1:-1;;;;;13219:21:0;;13211:68;;;;-1:-1:-1;;;13211:68:0;;14877:2:1;13211:68:0;;;14859:21:1;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;-1:-1:-1;;;15006:18:1;;;14999:32;15048:19;;13211:68:0;14675:398:1;13211:68:0;-1:-1:-1;;;;;13292:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13344:32;;2760:25:1;;;13344:32:0;;2733:18:1;13344:32:0;;;;;;;13004:380;;;:::o;26289:4372::-;-1:-1:-1;;;;;26421:18:0;;26413:68;;;;-1:-1:-1;;;26413:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26500:16:0;;26492:64;;;;-1:-1:-1;;;26492:64:0;;;;;;;:::i;:::-;26600:1;26591:6;:10;:38;;;-1:-1:-1;;;;;;26605:24:0;;;;;;:18;:24;;;;;;;;26591:38;26569:122;;;;-1:-1:-1;;;26569:122:0;;16090:2:1;26569:122:0;;;16072:21:1;16129:2;16109:18;;;16102:30;16168:34;16148:18;;;16141:62;-1:-1:-1;;;16219:18:1;;;16212:32;16261:19;;26569:122:0;15888:398:1;26569:122:0;26708:14;;;;;;;26704:2337;;;7535:6;;-1:-1:-1;;;;;26761:15:0;;;7535:6;;26761:15;;;;:49;;-1:-1:-1;7535:6:0;;-1:-1:-1;;;;;26797:13:0;;;7535:6;;26797:13;;26761:49;:86;;;;-1:-1:-1;;;;;;26831:16:0;;;;26761:86;:128;;;;-1:-1:-1;;;;;;26868:21:0;;26882:6;26868:21;;26761:128;:158;;;;-1:-1:-1;26911:8:0;;-1:-1:-1;;;26911:8:0;;;;26910:9;26761:158;26739:2291;;;26959:6;;;;26954:226;;-1:-1:-1;;;;;27024:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;27052:22:0;;;;;;:18;:22;;;;;;;;27024:50;26990:170;;;;-1:-1:-1;;;26990:170:0;;16493:2:1;26990:170:0;;;16475:21:1;16532:2;16512:18;;;16505:30;16571:34;16551:18;;;16544:62;-1:-1:-1;;;16622:18:1;;;16615:32;16664:19;;26990:170:0;16291:398:1;26990:170:0;27202:7;;;;;;;27198:220;;;-1:-1:-1;;;;;27268:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;27292:18:0;;;;;;:14;:18;;;;;;;;27268:42;27234:164;;;;-1:-1:-1;;;27234:164:0;;16896:2:1;27234:164:0;;;16878:21:1;16935:2;16915:18;;;16908:30;16974:34;16954:18;;;16947:62;-1:-1:-1;;;17025:18:1;;;17018:34;17069:19;;27234:164:0;16694:400:1;27234:164:0;27440:20;;;;;;;27436:623;;;7535:6;;-1:-1:-1;;;;;27515:13:0;;;7535:6;;27515:13;;;;:63;;-1:-1:-1;27571:6:0;;-1:-1:-1;;;;;27557:21:0;;;27571:6;;27557:21;;27515:63;:111;;;;-1:-1:-1;27621:4:0;;-1:-1:-1;;;;;27607:19:0;;;27621:4;;27607:19;;27515:111;27485:555;;;27744:9;27715:39;;;;:28;:39;;;;;;27790:12;-1:-1:-1;27677:258:0;;;;-1:-1:-1;;;27677:258:0;;17301:2:1;27677:258:0;;;17283:21:1;17340:2;17320:18;;;17313:30;17379:34;17359:18;;;17352:62;17450:34;17430:18;;;17423:62;-1:-1:-1;;;17501:19:1;;;17494:40;17551:19;;27677:258:0;17099:477:1;27677:258:0;27991:9;27962:39;;;;:28;:39;;;;;28004:12;27962:54;;27485:555;-1:-1:-1;;;;;28081:15:0;;;;;;:9;:15;;;;;;;;:41;;;;-1:-1:-1;;;;;;28101:21:0;;;;;;:17;:21;;;;;;;;28100:22;28081:41;28077:938;;;28191:11;;28181:6;:21;;28147:151;;;;-1:-1:-1;;;28147:151:0;;17783:2:1;28147:151:0;;;17765:21:1;17822:2;17802:18;;;17795:30;17861:34;17841:18;;;17834:62;-1:-1:-1;;;17912:18:1;;;17905:42;17964:19;;28147:151:0;17581:408:1;28147:151:0;28381:15;;-1:-1:-1;;;;;9190:16:0;;9163:7;9190:16;;;;;;;;;;;28355:22;;:6;:22;:::i;:::-;:41;;28321:146;;;;-1:-1:-1;;;28321:146:0;;18196:2:1;28321:146:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:49;18313:18;;28321:146:0;17994:343:1;28321:146:0;28077:938;;;-1:-1:-1;;;;;28536:13:0;;;;;;:9;:13;;;;;;;;:41;;;;-1:-1:-1;;;;;;28554:23:0;;;;;;:17;:23;;;;;;;;28553:24;28536:41;28510:505;;;28664:11;;28654:6;:21;;28620:152;;;;-1:-1:-1;;;28620:152:0;;18544:2:1;28620:152:0;;;18526:21:1;18583:2;18563:18;;;18556:30;18622:34;18602:18;;;18595:62;-1:-1:-1;;;18673:18:1;;;18666:43;18726:19;;28620:152:0;18342:409:1;28510:505:0;-1:-1:-1;;;;;28803:21:0;;;;;;:17;:21;;;;;;;;28798:217;;28909:15;;-1:-1:-1;;;;;9190:16:0;;9163:7;9190:16;;;;;;;;;;;28883:22;;:6;:22;:::i;:::-;:41;;28849:146;;;;-1:-1:-1;;;28849:146:0;;18196:2:1;28849:146:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:49;18313:18;;28849:146:0;17994:343:1;28849:146:0;29102:4;29053:28;9190:16;;;;;;;;;;;29160:14;;29136:38;;;;;;;29205:33;;-1:-1:-1;29230:8:0;;-1:-1:-1;;;29230:8:0;;;;29229:9;29205:33;:65;;;;-1:-1:-1;29255:15:0;;-1:-1:-1;;;29255:15:0;;;;29205:65;:98;;;;-1:-1:-1;;;;;;29288:15:0;;;;;;:9;:15;;;;;;;;29287:16;29205:98;:138;;;;-1:-1:-1;;;;;;29321:22:0;;;;;;:18;:22;;;;;;;;29320:23;29205:138;:180;;;;-1:-1:-1;;;;;;29361:24:0;;;;;;:18;:24;;;;;;;;29360:25;29205:180;:221;;;;;29412:14;;29402:6;:24;;29205:221;29187:403;;;29453:8;:15;;-1:-1:-1;;;;29453:15:0;-1:-1:-1;;;29453:15:0;;;29530:14;;29483:64;;29492:54;;29496:6;;29504:41;;29508:20;;29504:3;:41::i;:::-;29492:3;:54::i;:::-;29483:8;:64::i;:::-;29562:8;:16;;-1:-1:-1;;;;29562:16:0;;;29187:403;29618:8;;-1:-1:-1;;;;;29643:24:0;;29602:12;29643:24;;;:18;:24;;;;;;29618:8;-1:-1:-1;;;29618:8:0;;;;;29617:9;;29643:24;;:50;;-1:-1:-1;;;;;;29671:22:0;;;;;;:18;:22;;;;;;;;29643:50;29639:98;;;-1:-1:-1;29720:5:0;29639:98;29780:15;;29749:12;;-1:-1:-1;;;29780:15:0;;;;:28;;;;-1:-1:-1;29800:8:0;;-1:-1:-1;;;29800:8:0;;;;29799:9;29780:28;29776:832;;;29829:7;29825:772;;;-1:-1:-1;;;;;29861:13:0;;;;;;:9;:13;;;;;;;;:34;;;;;29894:1;29878:13;;:17;29861:34;29857:575;;;29927:34;29957:3;29927:25;29938:13;;29927:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29920:41;;30022:13;;30008:10;;30001:4;:17;;;;:::i;:::-;30000:35;;;;:::i;:::-;29984:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;30102:13:0;;30088:10;;30081:17;;:4;:17;:::i;:::-;30080:35;;;;:::i;:::-;30058:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;29857:575:0;;-1:-1:-1;29857:575:0;;-1:-1:-1;;;;;30162:15:0;;;;;;:9;:15;;;;;;;;:35;;;;;30196:1;30181:12;;:16;30162:35;30158:274;;;30229:33;30258:3;30229:24;30240:12;;30229:6;:10;;:24;;;;:::i;:33::-;30222:40;;30322:12;;30309:9;;30302:4;:16;;;;:::i;:::-;30301:33;;;;:::i;:::-;30285:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30400:12:0;;30387:9;;30380:16;;:4;:16;:::i;:::-;30379:33;;;;:::i;:::-;30357:18;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;30158:274:0;30454:8;;30450:99;;30487:42;30503:4;30517;30524;30487:15;:42::i;:::-;30567:14;30577:4;30567:14;;:::i;:::-;;;29825:772;30620:33;30636:4;30642:2;30646:6;30620:15;:33::i;:::-;26402:4259;;;;26289:4372;;;:::o;8042:191::-;8135:6;;;-1:-1:-1;;;;;8152:17:0;;;-1:-1:-1;;;;;;8152:17:0;;;;;;;8185:40;;8135:6;;;8152:17;8135:6;;8185:40;;8116:16;;8185:40;8105:128;8042:191;:::o;24105:175::-;-1:-1:-1;;;;;24189:16:0;;;;;;:9;:16;;;;;;:24;;-1:-1:-1;;24189:24:0;;;;;;;;;;24231:41;;24189:24;;:16;24231:41;;;24105:175;;:::o;26174:107::-;26231:7;26263:1;26259;:5;26258:15;;26272:1;26258:15;;;26268:1;26258:15;26251:22;26174:107;-1:-1:-1;;;26174:107:0:o;25192:401::-;25301:4;25257:23;9190:16;;;;;;;;;;;;25322:20;;;25318:59;;25359:7;25192:401;:::o;25318:59::-;25387:36;25404:18;25387:16;:36::i;:::-;25463:21;25499:22;;25495:91;;25538:36;25552:21;25538:13;:36::i;:::-;25246:347;;25192:401;:::o;4975:98::-;5033:7;5060:5;5064:1;5060;:5;:::i;5081:98::-;5139:7;5166:5;5170:1;5166;:5;:::i;11148:850::-;-1:-1:-1;;;;;11288:20:0;;11280:70;;;;-1:-1:-1;;;11280:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11369:23:0;;11361:71;;;;-1:-1:-1;;;11361:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11520:15:0;;;11501:16;11520:15;;;;;;;;;;;;11565:18;;;;;;;;11616;;;;11594:106;;;;-1:-1:-1;;;11594:106:0;;19091:2:1;11594:106:0;;;19073:21:1;19130:2;19110:18;;;19103:30;19169:34;19149:18;;;19142:62;-1:-1:-1;;;19220:18:1;;;19213:36;19266:19;;11594:106:0;18889:402:1;11594:106:0;11800:11;;:31;;11825:6;11800:31;;;11814:8;11800:31;-1:-1:-1;;;;;11736:15:0;;;:7;:15;;;;;;;;;;;11771:61;;;11736:96;;;11854:18;;;;;;;;:28;;11876:6;;11736:7;11854:28;;11876:6;;11854:28;:::i;:::-;;;;;;;;11915:9;-1:-1:-1;;;;;11898:35:0;11907:6;-1:-1:-1;;;;;11898:35:0;;11926:6;11898:35;;;;2760:25:1;;2748:2;2733:18;;2614:177;11898:35:0;;;;;;;;11269:729;;11148:850;;;:::o;24622:562::-;24772:16;;;24786:1;24772:16;;;;;;;;24748:21;;24772:16;;;;;;;;;;-1:-1:-1;24772:16:0;24748:40;;24817:4;24799;24804:1;24799:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24799:23:0;;;:7;;;;;;;;;;:23;;;;24843:6;;:13;;;-1:-1:-1;;;24843:13:0;;;;:6;;;;;:11;;:13;;;;;24799:7;;24843:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24833:4;24838:1;24833:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24833:23:0;;;:7;;;;;;;;;:23;24901:6;;24869:53;;24886:4;;24901:6;24910:11;24869:8;:53::i;:::-;24961:6;;:215;;-1:-1:-1;;;24961:215:0;;-1:-1:-1;;;;;24961:6:0;;;;:57;;:215;;25033:11;;24961:6;;25103:4;;25130;;25150:15;;24961:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24677:507;24622:562;:::o;19583:221::-;19658:1;19649:6;:10;19641:52;;;;-1:-1:-1;;;19641:52:0;;20615:2:1;19641:52:0;;;20597:21:1;20654:2;20634:18;;;20627:30;20693:31;20673:18;;;20666:59;20742:18;;19641:52:0;20413:353:1;19641:52:0;19712:10;;-1:-1:-1;;;;;19712:10:0;19704:40;19733:10;19742:1;19733:6;:10;:::i;:::-;19704:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19763:11:0;;-1:-1:-1;;;;;19763:11:0;19755:41;19785:10;19794:1;19785:6;:10;:::i;:::-;19755:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;554:548:1;666:4;695:2;724;713:9;706:21;756:6;750:13;799:6;794:2;783:9;779:18;772:34;824:1;834:140;848:6;845:1;842:13;834:140;;;943:14;;;939:23;;933:30;909:17;;;928:2;905:26;898:66;863:10;;834:140;;;838:3;1023:1;1018:2;1009:6;998:9;994:22;990:31;983:42;1093:2;1086;1082:7;1077:2;1069:6;1065:15;1061:29;1050:9;1046:45;1042:54;1034:62;;;;554:548;;;;:::o;1107:131::-;-1:-1:-1;;;;;1182:31:1;;1172:42;;1162:70;;1228:1;1225;1218:12;1243:315;1311:6;1319;1372:2;1360:9;1351:7;1347:23;1343:32;1340:52;;;1388:1;1385;1378:12;1340:52;1427:9;1414:23;1446:31;1471:5;1446:31;:::i;:::-;1496:5;1548:2;1533:18;;;;1520:32;;-1:-1:-1;;;1243:315:1:o;1755:160::-;1820:20;;1876:13;;1869:21;1859:32;;1849:60;;1905:1;1902;1895:12;1849:60;1755:160;;;:::o;1920:689::-;2012:6;2020;2028;2081:2;2069:9;2060:7;2056:23;2052:32;2049:52;;;2097:1;2094;2087:12;2049:52;2137:9;2124:23;2166:18;2207:2;2199:6;2196:14;2193:34;;;2223:1;2220;2213:12;2193:34;2261:6;2250:9;2246:22;2236:32;;2306:7;2299:4;2295:2;2291:13;2287:27;2277:55;;2328:1;2325;2318:12;2277:55;2368:2;2355:16;2394:2;2386:6;2383:14;2380:34;;;2410:1;2407;2400:12;2380:34;2465:7;2458:4;2448:6;2445:1;2441:14;2437:2;2433:23;2429:34;2426:47;2423:67;;;2486:1;2483;2476:12;2423:67;2517:4;2509:13;;;;-1:-1:-1;2541:6:1;-1:-1:-1;2566:37:1;;2582:20;;;-1:-1:-1;2566:37:1;:::i;:::-;2556:47;;1920:689;;;;;:::o;2796:247::-;2855:6;2908:2;2896:9;2887:7;2883:23;2879:32;2876:52;;;2924:1;2921;2914:12;2876:52;2963:9;2950:23;2982:31;3007:5;2982:31;:::i;3048:456::-;3125:6;3133;3141;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;3249:9;3236:23;3268:31;3293:5;3268:31;:::i;:::-;3318:5;-1:-1:-1;3375:2:1;3360:18;;3347:32;3388:33;3347:32;3388:33;:::i;:::-;3048:456;;3440:7;;-1:-1:-1;;;3494:2:1;3479:18;;;;3466:32;;3048:456::o;4341:180::-;4400:6;4453:2;4441:9;4432:7;4428:23;4424:32;4421:52;;;4469:1;4466;4459:12;4421:52;-1:-1:-1;4492:23:1;;4341:180;-1:-1:-1;4341:180:1:o;4526:248::-;4594:6;4602;4655:2;4643:9;4634:7;4630:23;4626:32;4623:52;;;4671:1;4668;4661:12;4623:52;-1:-1:-1;;4694:23:1;;;4764:2;4749:18;;;4736:32;;-1:-1:-1;4526:248:1:o;5195:315::-;5260:6;5268;5321:2;5309:9;5300:7;5296:23;5292:32;5289:52;;;5337:1;5334;5327:12;5289:52;5376:9;5363:23;5395:31;5420:5;5395:31;:::i;:::-;5445:5;-1:-1:-1;5469:35:1;5500:2;5485:18;;5469:35;:::i;:::-;5459:45;;5195:315;;;;;:::o;6077:316::-;6151:6;6159;6167;6220:2;6208:9;6199:7;6195:23;6191:32;6188:52;;;6236:1;6233;6226:12;6188:52;6259:26;6275:9;6259:26;:::i;:::-;6249:36;6332:2;6317:18;;6304:32;;-1:-1:-1;6383:2:1;6368:18;;;6355:32;;6077:316;-1:-1:-1;;;6077:316:1:o;6398:388::-;6466:6;6474;6527:2;6515:9;6506:7;6502:23;6498:32;6495:52;;;6543:1;6540;6533:12;6495:52;6582:9;6569:23;6601:31;6626:5;6601:31;:::i;:::-;6651:5;-1:-1:-1;6708:2:1;6693:18;;6680:32;6721:33;6680:32;6721:33;:::i;:::-;6773:7;6763:17;;;6398:388;;;;;:::o;6791:380::-;6870:1;6866:12;;;;6913;;;6934:61;;6988:4;6980:6;6976:17;6966:27;;6934:61;7041:2;7033:6;7030:14;7010:18;7007:38;7004:161;;7087:10;7082:3;7078:20;7075:1;7068:31;7122:4;7119:1;7112:15;7150:4;7147:1;7140:15;7004:161;;6791:380;;;:::o;7176:356::-;7378:2;7360:21;;;7397:18;;;7390:30;7456:34;7451:2;7436:18;;7429:62;7523:2;7508:18;;7176:356::o;7537:127::-;7598:10;7593:3;7589:20;7586:1;7579:31;7629:4;7626:1;7619:15;7653:4;7650:1;7643:15;8078:127;8139:10;8134:3;8130:20;8127:1;8120:31;8170:4;8167:1;8160:15;8194:4;8191:1;8184:15;8210:125;8275:9;;;8296:10;;;8293:36;;;8309:18;;:::i;9087:168::-;9160:9;;;9191;;9208:15;;;9202:22;;9188:37;9178:71;;9229:18;;:::i;9260:217::-;9300:1;9326;9316:132;;9370:10;9365:3;9361:20;9358:1;9351:31;9405:4;9402:1;9395:15;9433:4;9430:1;9423:15;9316:132;-1:-1:-1;9462:9:1;;9260:217::o;9482:251::-;9552:6;9605:2;9593:9;9584:7;9580:23;9576:32;9573:52;;;9621:1;9618;9611:12;9573:52;9653:9;9647:16;9672:31;9697:5;9672:31;:::i;10350:306::-;10438:6;10446;10454;10507:2;10495:9;10486:7;10482:23;10478:32;10475:52;;;10523:1;10520;10513:12;10475:52;10552:9;10546:16;10536:26;;10602:2;10591:9;10587:18;10581:25;10571:35;;10646:2;10635:9;10631:18;10625:25;10615:35;;10350:306;;;;;:::o;15078:401::-;15280:2;15262:21;;;15319:2;15299:18;;;15292:30;15358:34;15353:2;15338:18;;15331:62;-1:-1:-1;;;15424:2:1;15409:18;;15402:35;15469:3;15454:19;;15078:401::o;15484:399::-;15686:2;15668:21;;;15725:2;15705:18;;;15698:30;15764:34;15759:2;15744:18;;15737:62;-1:-1:-1;;;15830:2:1;15815:18;;15808:33;15873:3;15858:19;;15484:399::o;18756:128::-;18823:9;;;18844:11;;;18841:37;;;18858:18;;:::i;19428:980::-;19690:4;19738:3;19727:9;19723:19;19769:6;19758:9;19751:25;19795:2;19833:6;19828:2;19817:9;19813:18;19806:34;19876:3;19871:2;19860:9;19856:18;19849:31;19900:6;19935;19929:13;19966:6;19958;19951:22;20004:3;19993:9;19989:19;19982:26;;20043:2;20035:6;20031:15;20017:29;;20064:1;20074:195;20088:6;20085:1;20082:13;20074:195;;;20153:13;;-1:-1:-1;;;;;20149:39:1;20137:52;;20244:15;;;;20209:12;;;;20185:1;20103:9;20074:195;;;-1:-1:-1;;;;;;;20325:32:1;;;;20320:2;20305:18;;20298:60;-1:-1:-1;;;20389:3:1;20374:19;20367:35;20286:3;19428:980;-1:-1:-1;;;19428:980:1:o

Swarm Source

ipfs://2e0178259715ad7de2ac027d34c98c4bd150205dd87f093dfe94e2a3fd3725cd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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