ETH Price: $2,523.53 (+0.04%)

Contract

0xd65a1ede083fAbDC6Cb708A7473b01CF677aA868
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Approve196837392024-04-18 17:09:59133 days ago1713460199IN
0xd65a1ede...F677aA868
0 ETH0.0006483513.92986898
Approve183051982023-10-08 10:34:23326 days ago1696761263IN
0xd65a1ede...F677aA868
0 ETH0.000131195.40793611
Approve179350902023-08-17 14:19:23378 days ago1692281963IN
0xd65a1ede...F677aA868
0 ETH0.0018007838.68996398
Approve179115272023-08-14 7:15:11381 days ago1691997311IN
0xd65a1ede...F677aA868
0 ETH0.0005299111.38522667
Approve178341632023-08-03 11:26:35392 days ago1691061995IN
0xd65a1ede...F677aA868
0 ETH0.0008122917.42963071
Approve178099322023-07-31 2:12:59395 days ago1690769579IN
0xd65a1ede...F677aA868
0 ETH0.0004436516.65129202
Approve178099292023-07-31 2:12:11395 days ago1690769531IN
0xd65a1ede...F677aA868
0 ETH0.0003850814.45280278
Approve178099262023-07-31 2:11:35395 days ago1690769495IN
0xd65a1ede...F677aA868
0 ETH0.0006365913.6773518
Approve178067642023-07-30 15:33:11396 days ago1690731191IN
0xd65a1ede...F677aA868
0 ETH0.0008125417.4351819
Approve178067612023-07-30 15:32:35396 days ago1690731155IN
0xd65a1ede...F677aA868
0 ETH0.0008827218.9408881
Approve178067592023-07-30 15:32:11396 days ago1690731131IN
0xd65a1ede...F677aA868
0 ETH0.0008739518.75273617
Transfer178067142023-07-30 15:23:11396 days ago1690730591IN
0xd65a1ede...F677aA868
0 ETH0.001233318.17807312
Transfer178043742023-07-30 7:30:35396 days ago1690702235IN
0xd65a1ede...F677aA868
0 ETH0.0012675718.68317041
Approve178023432023-07-30 0:42:47397 days ago1690677767IN
0xd65a1ede...F677aA868
0 ETH0.0007242915.63416721
Approve177970752023-07-29 7:01:23397 days ago1690614083IN
0xd65a1ede...F677aA868
0 ETH0.0008090717.38309517
Approve177969482023-07-29 6:35:59397 days ago1690612559IN
0xd65a1ede...F677aA868
0 ETH0.0007103415.24221277
Approve177906502023-07-28 9:25:59398 days ago1690536359IN
0xd65a1ede...F677aA868
0 ETH0.0010207321.93062335
Approve177902592023-07-28 8:07:35398 days ago1690531655IN
0xd65a1ede...F677aA868
0 ETH0.001055322.64406111
Approve177902362023-07-28 8:02:59398 days ago1690531379IN
0xd65a1ede...F677aA868
0 ETH0.001192625.59027345
Approve177902282023-07-28 8:01:23398 days ago1690531283IN
0xd65a1ede...F677aA868
0 ETH0.0011889225.54410666
Approve177888732023-07-28 3:28:47398 days ago1690514927IN
0xd65a1ede...F677aA868
0 ETH0.0009880421.22825196
Approve177887932023-07-28 3:12:35398 days ago1690513955IN
0xd65a1ede...F677aA868
0 ETH0.001172925.2
Approve177879932023-07-28 0:31:23399 days ago1690504283IN
0xd65a1ede...F677aA868
0 ETH0.0009285519.95
Approve177878112023-07-27 23:54:47399 days ago1690502087IN
0xd65a1ede...F677aA868
0 ETH0.0011744225.2
Approve177877952023-07-27 23:51:35399 days ago1690501895IN
0xd65a1ede...F677aA868
0 ETH0.001302627.95044292
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
196837412024-04-18 17:10:23133 days ago1713460223
0xd65a1ede...F677aA868
0.00161635 ETH
196837412024-04-18 17:10:23133 days ago1713460223
0xd65a1ede...F677aA868
0.00161635 ETH
179390232023-08-18 3:32:47377 days ago1692329567
0xd65a1ede...F677aA868
0.00174787 ETH
179390232023-08-18 3:32:47377 days ago1692329567
0xd65a1ede...F677aA868
0.00174787 ETH
179115292023-08-14 7:15:35381 days ago1691997335
0xd65a1ede...F677aA868
0.00181988 ETH
179115292023-08-14 7:15:35381 days ago1691997335
0xd65a1ede...F677aA868
0.00181988 ETH
178341642023-08-03 11:26:47392 days ago1691062007
0xd65a1ede...F677aA868
0.00185178 ETH
178341642023-08-03 11:26:47392 days ago1691062007
0xd65a1ede...F677aA868
0.00185178 ETH
178099702023-07-31 2:20:35395 days ago1690770035
0xd65a1ede...F677aA868
0.00217117 ETH
178099702023-07-31 2:20:35395 days ago1690770035
0xd65a1ede...F677aA868
0.00217117 ETH
178067622023-07-30 15:32:47396 days ago1690731167
0xd65a1ede...F677aA868
0.00233685 ETH
178067622023-07-30 15:32:47396 days ago1690731167
0xd65a1ede...F677aA868
0.00233685 ETH
178023452023-07-30 0:43:11397 days ago1690677791
0xd65a1ede...F677aA868
0.0023711 ETH
178023452023-07-30 0:43:11397 days ago1690677791
0xd65a1ede...F677aA868
0.0023711 ETH
177970792023-07-29 7:02:11397 days ago1690614131
0xd65a1ede...F677aA868
0.0024488 ETH
177970792023-07-29 7:02:11397 days ago1690614131
0xd65a1ede...F677aA868
0.0024488 ETH
177920372023-07-28 14:05:59398 days ago1690553159
0xd65a1ede...F677aA868
0.0025304 ETH
177920372023-07-28 14:05:59398 days ago1690553159
0xd65a1ede...F677aA868
0.0025304 ETH
177906652023-07-28 9:28:59398 days ago1690536539
0xd65a1ede...F677aA868
0.00260029 ETH
177906652023-07-28 9:28:59398 days ago1690536539
0xd65a1ede...F677aA868
0.00260029 ETH
177889002023-07-28 3:34:11398 days ago1690515251
0xd65a1ede...F677aA868
0.00264521 ETH
177889002023-07-28 3:34:11398 days ago1690515251
0xd65a1ede...F677aA868
0.00264521 ETH
177888812023-07-28 3:30:23398 days ago1690515023
0xd65a1ede...F677aA868
0.00278002 ETH
177888812023-07-28 3:30:23398 days ago1690515023
0xd65a1ede...F677aA868
0.00278002 ETH
177887962023-07-28 3:13:11398 days ago1690513991
0xd65a1ede...F677aA868
0.00302173 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AmazingHorse

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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 IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Initializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}

contract AmazingHorse is IERC20 {
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "Amazing Horse";
    string constant private _symbol = "HORSE";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    Fees public _taxRates = Fees({
        buyFee: 0,
        sellFee: 1000,
        transferFee: 0
    });

    uint256 constant public maxBuyTaxes = 1000;
    uint256 constant public maxSellTaxes = 1000;
    uint256 constant public maxTransferTaxes = 1000;
    uint256 constant masterTaxDivisor = 10000;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public marketingWallet = payable(0xa65BEF5207df36A3CaF92408B0C459f38B479c24);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        originalDeployer = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    address public originalDeployer;
    address public operator;

    // Function to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    
    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            initializer.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.");
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            initializer.setLpPair(pair, true);
        }
    }

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setWallets(address payable marketing) external onlyOwner {
        require(marketing != address(0), "Cannot be zero address.");
        marketingWallet = payable(marketing);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
        }
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this)
            && from != address(initializer)
            && to != address(initializer);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled
                   && !presaleAddresses[to]
                   && !presaleAddresses[from]
                ) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

        bool success;
        (success,) = marketingWallet.call{value: address(this).balance, gas: 55000}("");
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)){
                initializer = Initializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)){
            initializer = Initializer(address(this));
        }
        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, amount, buy, sell) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(initializer) == address(this)
            && block.chainid != 97) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","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":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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","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":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060028190556009805460ff1916600117905560e060405260808190526103e860a05260c052600a805465ffffffffffff19166303e80000178155600d8054600161ff0160a01b03191673a65bef5207df36a3caf92408b0c459f38b479c2417905560118190556012805461ffff19168155601480546001600160a01b031990811633908117909255601580549091169091179055620000a091620002bc565b620000b090633b9aca00620002d4565b601480546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001046012600a620002bc565b6200011490633b9aca00620002d4565b60405190815260200160405180910390a3601480546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905595549094168352600490915290208054909216179055620002ee565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620001fe578160001904821115620001e257620001e2620001a7565b80851615620001f057918102915b93841c9390800290620001c2565b509250929050565b6000826200021757506001620002b6565b816200022657506000620002b6565b81600181146200023f57600281146200024a576200026a565b6001915050620002b6565b60ff8411156200025e576200025e620001a7565b50506001821b620002b6565b5060208310610133831016604e8410600b84101617156200028f575081810a620002b6565b6200029b8383620001bd565b8060001904821115620002b257620002b2620001a7565b0290505b92915050565b6000620002cd60ff84168362000206565b9392505050565b8082028115828204841417620002b657620002b6620001a7565b613b7780620002fe6000396000f3fe6080604052600436106103595760003560e01c8063590ffdce116101bb578063a9059cbb116100f7578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d146109d6578063fb78680d146109eb578063fdb78c0e14610a0b578063feadde9c14610a2c57600080fd5b8063dd62ed3e14610950578063eafb5a3c14610996578063eb50e70e146109b657600080fd5b8063b3ab15fb116100d1578063b3ab15fb146108f6578063b3d514fb1461059b578063b7df8b3614610916578063bfc2fc351461093057600080fd5b8063a9059cbb146108b6578063ab558e4d146108d6578063b1b08f711461059b57600080fd5b806378648edf11610164578063893d20e81161013e578063893d20e8146108405780638a63bd9b1461085e5780638a8c523c1461087357806395d89b411461088857600080fd5b806378648edf146107eb57806380c581d11461080057806381cf58a91461082057600080fd5b806370a082311161019557806370a0823114610780578063715018a6146107b657806375f0a874146107cb57600080fd5b8063590ffdce1461072a5780635a6f09181461074a5780635c24b0741461076057600080fd5b80632b112e49116102955780634ada218b116102335780634fb2e45d1161020d5780634fb2e45d146106925780634fbee193146106b257806350a8e016146106eb578063570ca7351461070a57600080fd5b80634ada218b146106385780634bbb93eb146106525780634e718e481461067257600080fd5b8063313ce5671161026f578063313ce567146105c757806332cde664146105e357806339a0590214610603578063452ed4f11461061857600080fd5b80632b112e49146105865780632b28fc7a1461059b5780632e8fa821146105b157600080fd5b8063095ea7b31161030257806318160ddd116102dc57806318160ddd1461051b57806323b872dd146105305780632610eaca14610550578063285777511461057057600080fd5b8063095ea7b3146104a05780630dcbcf1c146104c057806313b4a7f4146104f957600080fd5b806306fdde031161033357806306fdde03146104125780630758d9241461045157806307dd79e01461047657600080fd5b806303fd2a45146103655780630445b66714610398578063069d955f146103bc57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103ae600e5481565b60405190815260200161038f565b3480156103c857600080fd5b50600a546103ed9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b34801561041e57600080fd5b5060408051808201909152600d81526c416d617a696e6720486f72736560981b60208201525b60405161038f91906134ae565b34801561045d57600080fd5b50600b5461037b9061010090046001600160a01b031681565b34801561048257600080fd5b50600b546104909060ff1681565b604051901515815260200161038f565b3480156104ac57600080fd5b506104906104bb366004613511565b610a4c565b3480156104cc57600080fd5b506104906104db36600461353d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050557600080fd5b5061051961051436600461355a565b610a63565b005b34801561052757600080fd5b506103ae610c26565b34801561053c57600080fd5b5061049061054b366004613593565b610c47565b34801561055c57600080fd5b5061051961056b3660046136aa565b610cbf565b34801561057c57600080fd5b506103ae60115481565b34801561059257600080fd5b506103ae610e74565b3480156105a757600080fd5b506103ae6103e881565b3480156105bd57600080fd5b506103ae600f5481565b3480156105d357600080fd5b506040516012815260200161038f565b3480156105ef57600080fd5b506105196105fe366004613783565b610ef2565b34801561060f57600080fd5b50610519611046565b34801561062457600080fd5b50600c5461037b906001600160a01b031681565b34801561064457600080fd5b506012546104909060ff1681565b34801561065e57600080fd5b506103ae61066d3660046137c6565b6110cd565b34801561067e57600080fd5b5061051961068d3660046137c6565b611101565b34801561069e57600080fd5b506105196106ad36600461353d565b61119f565b3480156106be57600080fd5b506104906106cd36600461353d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106f757600080fd5b5060125461049090610100900460ff1681565b34801561071657600080fd5b5060165461037b906001600160a01b031681565b34801561073657600080fd5b506105196107453660046137ed565b6113a1565b34801561075657600080fd5b506103ae60135481565b34801561076c57600080fd5b5061051961077b36600461353d565b611414565b34801561078c57600080fd5b506103ae61079b36600461353d565b6001600160a01b031660009081526020819052604090205490565b3480156107c257600080fd5b506105196115f2565b3480156107d757600080fd5b50600d5461037b906001600160a01b031681565b3480156107f757600080fd5b50610519611717565b34801561080c57600080fd5b5061051961081b3660046137ed565b61176e565b34801561082c57600080fd5b5060155461037b906001600160a01b031681565b34801561084c57600080fd5b506014546001600160a01b031661037b565b34801561086a57600080fd5b50610490611989565b34801561087f57600080fd5b506105196119f9565b34801561089457600080fd5b50604080518082019091526005815264484f52534560d81b6020820152610444565b3480156108c257600080fd5b506104906108d1366004613511565b611c51565b3480156108e257600080fd5b506105196108f136600461353d565b611c68565b34801561090257600080fd5b5061051961091136600461353d565b611e02565b34801561092257600080fd5b506010546104909060ff1681565b34801561093c57600080fd5b5061051961094b36600461381b565b611eef565b34801561095c57600080fd5b506103ae61096b36600461355a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109a257600080fd5b506105196109b136600461353d565b611f9a565b3480156109c257600080fd5b506105196109d136600461353d565b61239b565b3480156109e257600080fd5b5061051961245b565b3480156109f757600080fd5b50610519610a06366004613839565b612534565b348015610a1757600080fd5b50600d5461049090600160a81b900460ff1681565b348015610a3857600080fd5b50610519610a473660046137ed565b6127f6565b6000610a59338484612869565b5060015b92915050565b6014546001600160a01b03163314610ab05760405162461bcd60e51b81526020600482015260116024820152600080516020613b2283398151915260448201526064015b60405180910390fd5b60095460ff16610abf57600080fd5b6001600160a01b0382163014801590610ae157506001600160a01b0381163014155b8015610afb5750600c546001600160a01b03838116911614155b8015610b155750600c546001600160a01b03828116911614155b610b4f5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610aa7565b806001600160a01b0316826001600160a01b031603610bb1576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610bad9082906113a1565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155610c1b9083906113a1565b610bad8160016113a1565b6000610c346012600a613965565b610c4290633b9aca00613974565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610cac576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610ca690849061398b565b90915550505b610cb7848484612962565b949350505050565b6014546001600160a01b03163314610d075760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b8051825114610d585760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa7565b60005b82518161ffff161015610e6f57610d746012600a613965565b828261ffff1681518110610d8a57610d8a61399e565b6020026020010151610d9c9190613974565b336000908152602081905260409020541015610dfa5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610aa7565b610e5c33848361ffff1681518110610e1457610e1461399e565b60200260200101516012600a610e2a9190613965565b858561ffff1681518110610e4057610e4061399e565b6020026020010151610e529190613974565b6000806001612cf6565b5080610e67816139b4565b915050610d5b565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354610ece91906139d5565b610eda6012600a613965565b610ee890633b9aca00613974565b610c42919061398b565b6014546001600160a01b03163314610f3a5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b5460ff1615610f8d5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610aa7565b6103e88361ffff1611158015610fa957506103e88261ffff1611155b8015610fbb57506103e88161ffff1611155b6110075760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610aa7565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6015546001600160a01b031633146110b15760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610aa7565b6110bb6000611e02565b601580546001600160a01b0319169055565b600c546001600160a01b0316600090815260208190526040812054612710906110f7908490613974565b610a5d91906139e8565b6014546001600160a01b031633146111495760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b609681111561119a5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610aa7565b601155565b6014546001600160a01b031633146111e75760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b0381166112635760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa7565b61deac196001600160a01b038216016112e45760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa7565b6014546112fb906001600160a01b031660006113a1565b6113068160016113a1565b6014546001600160a01b03166000908152602081905260409020541561134f576014546001600160a01b031660008181526020819052604090205461134d91908390610e52565b505b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014546001600160a01b031633146113e95760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6014546001600160a01b0316331461145c5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff161561146c57600080fd5b306001600160a01b038216036114c45760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610aa7565b6012805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af192505050801561154a575060408051601f3d908101601f1916820190925261154791810190613a0a565b60015b61155357600080fd5b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560145492546115d09383169291900416600019612869565b600b54610e6f90309061010090046001600160a01b0316600019612869565b50565b6014546001600160a01b0316331461163a5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff166116b25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610aa7565b6014546116c9906001600160a01b031660006113a1565b601480546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6014546001600160a01b0316331461175f5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b805460ff19166001179055565b6014546001600160a01b031633146117b65760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b80611845576001600160a01b03828116600081815260016020526040808220805460ff1916905560125490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050505050565b600254156118ac576203f4806002544261185f919061398b565b116118ac5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610aa7565b6001600160a01b03821660009081526001602052604090205460ff16156119155760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610aa7565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560125491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b15801561182957600080fd5b6014546000906001600160a01b031633146119d45760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b546119f390309061010090046001600160a01b0316600019612869565b50600190565b6014546001600160a01b03163314611a415760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff1615611a945760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610aa7565b601254610100900460ff16611aeb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610aa7565b6012546201000090046001600160a01b0316611b1b576012805462010000600160b01b0319163062010000021790555b60128054600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526064810193909352620100009091041690636c115c3490608401600060405180830381600087803b158015611b8f57600080fd5b505af1925050508015611ba0575060015b50601254600c546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611c23575060408051601f3d908101601f19168201909252611c2091810190613a39565b60015b15611c3257600e91909155600f555b6012805460ff1990811660011790915560098054909116905542601355565b6000611c5e338484612962565b5060019392505050565b6014546001600160a01b03163314611cb05760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff1615611d1857306001600160a01b03821603611d185760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610aa7565b6014546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d939190613a5d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f9190613a76565b6015546001600160a01b03163314611e6d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610aa7565b6016546001600160a01b03168015611eaa576001600160a01b0381166000908152600460205260408120805460ff19169055611eaa9082906113a1565b601680546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff19166001908117909155610bad9083906113a1565b6014546001600160a01b03163314611f375760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600d805460ff60a81b1916600160a81b841515908102919091179091556010805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6014546001600160a01b03163314611fe25760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff161561203a5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610aa7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613a93565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190613a93565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121839190613a93565b600c546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661231957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122129190613a93565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561225f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122839190613a93565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190613a93565b600c80546001600160a01b0319166001600160a01b0392909216919091179055612335565b600c80546001600160a01b0319166001600160a01b0383161790555b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c5482166000908152600160208190526040909120805460ff191690911790559154610e6f923092910416600019612869565b6014546001600160a01b031633146123e35760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b0381166124395760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610aa7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146124a35760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff16156124fb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610aa7565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156115ef573d6000803e3d6000fd5b6014546001600160a01b0316331461257c5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b828461258a6012600a613965565b61259890633b9aca00613974565b6125a29190613974565b6125ac91906139e8565b600e5580826125bd6012600a613965565b6125cb90633b9aca00613974565b6125d59190613974565b6125df91906139e8565b600f819055600e54111561263f5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610aa7565b600c546001600160a01b031660009081526020819052604090205461271090612669906096613974565b61267391906139e8565b600f5411156126d05760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610aa7565b620f42406126e06012600a613965565b6126ee90633b9aca00613974565b6126f891906139e8565b600f5410156127605760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610aa7565b620f42406127706012600a613965565b61277e90633b9aca00613974565b61278891906139e8565b600e5410156127f05760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610aa7565b50505050565b6014546001600160a01b0316331461283e5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166128b55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610aa7565b6001600160a01b0382166129015760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610aa7565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166129c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa7565b6001600160a01b038316612a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aa7565b60008211612a8c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa7565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612aba5760019250612ae8565b6001600160a01b03861660009081526001602052604090205460ff1615612ae45760019150612ae8565b5060015b612af28787612f03565b15612bf35760125460ff16612bf35780612b4e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610aa7565b6001600160a01b03871660009081526005602052604090205460ff16158015612b9057506001600160a01b03861660009081526005602052604090205460ff16155b15612bf35760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610aa7565b8115612cdd57600d54600160a01b900460ff16612cdd57600d54600160a81b900460ff168015612c3c57506001600160a01b03861660009081526008602052604090205460ff16155b8015612c6157506001600160a01b03871660009081526008602052604090205460ff16155b15612cdd5730600090815260208190526040902054600e548110612cdb57600f5460105460ff1615612cc557601154600c546001600160a01b031660009081526020819052604090205461271091612cb891613974565b612cc291906139e8565b90505b808210612cd0578091505b612cd98261301a565b505b505b612ceb878787868686612cf6565b979650505050505050565b6001600160a01b03861660009081526006602052604081205460019060ff1680612d3857506001600160a01b03871660009081526006602052604090205460ff165b15612d41575060005b6001600160a01b03881660009081526020819052604081208054889290612d6990849061398b565b909155506000905081612d7c5786612d88565b612d888988888861325e565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612dbe91906139d5565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e0a91815260200190565b60405180910390a3601254610100900460ff16612ef457612e2b898961336a565b601254610100900460ff16158015612e485750612e488989612f03565b8015612e6d57506001600160a01b03891660009081526005602052604090205460ff16155b8015612e9257506001600160a01b03881660009081526005602052604090205460ff16155b8015612e9c575083155b15612ef45760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610aa7565b50600198975050505050505050565b6014546000906001600160a01b03848116911614801590612f3257506014546001600160a01b03838116911614155b8015612f4957506014546001600160a01b03163214155b8015612f6e57506001600160a01b03821660009081526004602052604090205460ff16155b8015612f9357506001600160a01b03831660009081526004602052604090205460ff16155b8015612faa57506001600160a01b03821661dead14155b8015612fbe57506001600160a01b03821615155b8015612fd357506001600160a01b0383163014155b8015612ff357506012546001600160a01b03848116620100009092041614155b801561301357506012546001600160a01b03838116620100009092041614155b9392505050565b600d805460ff60a01b1916600160a01b179055306000908152600360209081526040808320600b5461010090046001600160a01b031684529091529020546000191461309057306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130c5576130c561399e565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315c9190613a93565b8160018151811061316f5761316f61399e565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81526101009091049091169063791ac947906131bc908590600090869030904290600401613ab0565b600060405180830381600087803b1580156131d657600080fd5b505af19250505080156131e7575060015b6131f1575061324e565b600d546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b50505050505b50600d805460ff60a01b19169055565b60008083156132745750600a5461ffff1661329e565b821561328d5750600a5462010000900461ffff1661329e565b50600a54640100000000900461ffff165b806000036132af5784915050610cb7565b6012546201000090046001600160a01b0316301480156132d0575046606114155b156132da57506111945b60006127106132e98388613974565b6132f391906139e8565b9050801561336057306000908152602081905260408120805483929061331a9084906139d5565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612ceb818761398b565b601254610100900460ff16156133ce5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610aa7565b6133d88282612f03565b1580156133f25750600c546001600160a01b038281169116145b15610bad576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556012805461ff00191661010017908190556201000090041661346a576012805462010000600160b01b0319163062010000021790555b600d805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611f8e565b600060208083528351808285015260005b818110156134db578581018301518582016040015282016134bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ef57600080fd5b6000806040838503121561352457600080fd5b823561352f816134fc565b946020939093013593505050565b60006020828403121561354f57600080fd5b8135613013816134fc565b6000806040838503121561356d57600080fd5b8235613578816134fc565b91506020830135613588816134fc565b809150509250929050565b6000806000606084860312156135a857600080fd5b83356135b3816134fc565b925060208401356135c3816134fc565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613613576136136135d4565b604052919050565b600067ffffffffffffffff821115613635576136356135d4565b5060051b60200190565b600082601f83011261365057600080fd5b813560206136656136608361361b565b6135ea565b82815260059290921b8401810191818101908684111561368457600080fd5b8286015b8481101561369f5780358352918301918301613688565b509695505050505050565b600080604083850312156136bd57600080fd5b823567ffffffffffffffff808211156136d557600080fd5b818501915085601f8301126136e957600080fd5b813560206136f96136608361361b565b82815260059290921b8401810191818101908984111561371857600080fd5b948201945b8386101561373f578535613730816134fc565b8252948201949082019061371d565b9650508601359250508082111561375557600080fd5b506137628582860161363f565b9150509250929050565b803561ffff8116811461377e57600080fd5b919050565b60008060006060848603121561379857600080fd5b6137a18461376c565b92506137af6020850161376c565b91506137bd6040850161376c565b90509250925092565b6000602082840312156137d857600080fd5b5035919050565b80151581146115ef57600080fd5b6000806040838503121561380057600080fd5b823561380b816134fc565b91506020830135613588816137df565b6000806040838503121561382e57600080fd5b823561380b816137df565b6000806000806080858703121561384f57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156138bc5781600019048211156138a2576138a261386b565b808516156138af57918102915b93841c9390800290613886565b509250929050565b6000826138d357506001610a5d565b816138e057506000610a5d565b81600181146138f657600281146139005761391c565b6001915050610a5d565b60ff8411156139115761391161386b565b50506001821b610a5d565b5060208310610133831016604e8410600b841016171561393f575081810a610a5d565b6139498383613881565b806000190482111561395d5761395d61386b565b029392505050565b600061301360ff8416836138c4565b8082028115828204841417610a5d57610a5d61386b565b81810381811115610a5d57610a5d61386b565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036139cb576139cb61386b565b6001019392505050565b80820180821115610a5d57610a5d61386b565b600082613a0557634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613a1d57600080fd5b8251613a28816134fc565b6020840151909250613588816134fc565b60008060408385031215613a4c57600080fd5b505080516020909101519092909150565b600060208284031215613a6f57600080fd5b5051919050565b600060208284031215613a8857600080fd5b8151613013816137df565b600060208284031215613aa557600080fd5b8151613013816134fc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b005784516001600160a01b031683529383019391830191600101613adb565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220d8331e4dc453e00f8ead6edafa979aa6ebe864f4fb6b90df88fbf92c60c7bba864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103595760003560e01c8063590ffdce116101bb578063a9059cbb116100f7578063dd62ed3e11610095578063ee5d9c2d1161006f578063ee5d9c2d146109d6578063fb78680d146109eb578063fdb78c0e14610a0b578063feadde9c14610a2c57600080fd5b8063dd62ed3e14610950578063eafb5a3c14610996578063eb50e70e146109b657600080fd5b8063b3ab15fb116100d1578063b3ab15fb146108f6578063b3d514fb1461059b578063b7df8b3614610916578063bfc2fc351461093057600080fd5b8063a9059cbb146108b6578063ab558e4d146108d6578063b1b08f711461059b57600080fd5b806378648edf11610164578063893d20e81161013e578063893d20e8146108405780638a63bd9b1461085e5780638a8c523c1461087357806395d89b411461088857600080fd5b806378648edf146107eb57806380c581d11461080057806381cf58a91461082057600080fd5b806370a082311161019557806370a0823114610780578063715018a6146107b657806375f0a874146107cb57600080fd5b8063590ffdce1461072a5780635a6f09181461074a5780635c24b0741461076057600080fd5b80632b112e49116102955780634ada218b116102335780634fb2e45d1161020d5780634fb2e45d146106925780634fbee193146106b257806350a8e016146106eb578063570ca7351461070a57600080fd5b80634ada218b146106385780634bbb93eb146106525780634e718e481461067257600080fd5b8063313ce5671161026f578063313ce567146105c757806332cde664146105e357806339a0590214610603578063452ed4f11461061857600080fd5b80632b112e49146105865780632b28fc7a1461059b5780632e8fa821146105b157600080fd5b8063095ea7b31161030257806318160ddd116102dc57806318160ddd1461051b57806323b872dd146105305780632610eaca14610550578063285777511461057057600080fd5b8063095ea7b3146104a05780630dcbcf1c146104c057806313b4a7f4146104f957600080fd5b806306fdde031161033357806306fdde03146104125780630758d9241461045157806307dd79e01461047657600080fd5b806303fd2a45146103655780630445b66714610398578063069d955f146103bc57600080fd5b3661036057005b600080fd5b34801561037157600080fd5b5061037b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103a457600080fd5b506103ae600e5481565b60405190815260200161038f565b3480156103c857600080fd5b50600a546103ed9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038f565b34801561041e57600080fd5b5060408051808201909152600d81526c416d617a696e6720486f72736560981b60208201525b60405161038f91906134ae565b34801561045d57600080fd5b50600b5461037b9061010090046001600160a01b031681565b34801561048257600080fd5b50600b546104909060ff1681565b604051901515815260200161038f565b3480156104ac57600080fd5b506104906104bb366004613511565b610a4c565b3480156104cc57600080fd5b506104906104db36600461353d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050557600080fd5b5061051961051436600461355a565b610a63565b005b34801561052757600080fd5b506103ae610c26565b34801561053c57600080fd5b5061049061054b366004613593565b610c47565b34801561055c57600080fd5b5061051961056b3660046136aa565b610cbf565b34801561057c57600080fd5b506103ae60115481565b34801561059257600080fd5b506103ae610e74565b3480156105a757600080fd5b506103ae6103e881565b3480156105bd57600080fd5b506103ae600f5481565b3480156105d357600080fd5b506040516012815260200161038f565b3480156105ef57600080fd5b506105196105fe366004613783565b610ef2565b34801561060f57600080fd5b50610519611046565b34801561062457600080fd5b50600c5461037b906001600160a01b031681565b34801561064457600080fd5b506012546104909060ff1681565b34801561065e57600080fd5b506103ae61066d3660046137c6565b6110cd565b34801561067e57600080fd5b5061051961068d3660046137c6565b611101565b34801561069e57600080fd5b506105196106ad36600461353d565b61119f565b3480156106be57600080fd5b506104906106cd36600461353d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106f757600080fd5b5060125461049090610100900460ff1681565b34801561071657600080fd5b5060165461037b906001600160a01b031681565b34801561073657600080fd5b506105196107453660046137ed565b6113a1565b34801561075657600080fd5b506103ae60135481565b34801561076c57600080fd5b5061051961077b36600461353d565b611414565b34801561078c57600080fd5b506103ae61079b36600461353d565b6001600160a01b031660009081526020819052604090205490565b3480156107c257600080fd5b506105196115f2565b3480156107d757600080fd5b50600d5461037b906001600160a01b031681565b3480156107f757600080fd5b50610519611717565b34801561080c57600080fd5b5061051961081b3660046137ed565b61176e565b34801561082c57600080fd5b5060155461037b906001600160a01b031681565b34801561084c57600080fd5b506014546001600160a01b031661037b565b34801561086a57600080fd5b50610490611989565b34801561087f57600080fd5b506105196119f9565b34801561089457600080fd5b50604080518082019091526005815264484f52534560d81b6020820152610444565b3480156108c257600080fd5b506104906108d1366004613511565b611c51565b3480156108e257600080fd5b506105196108f136600461353d565b611c68565b34801561090257600080fd5b5061051961091136600461353d565b611e02565b34801561092257600080fd5b506010546104909060ff1681565b34801561093c57600080fd5b5061051961094b36600461381b565b611eef565b34801561095c57600080fd5b506103ae61096b36600461355a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109a257600080fd5b506105196109b136600461353d565b611f9a565b3480156109c257600080fd5b506105196109d136600461353d565b61239b565b3480156109e257600080fd5b5061051961245b565b3480156109f757600080fd5b50610519610a06366004613839565b612534565b348015610a1757600080fd5b50600d5461049090600160a81b900460ff1681565b348015610a3857600080fd5b50610519610a473660046137ed565b6127f6565b6000610a59338484612869565b5060015b92915050565b6014546001600160a01b03163314610ab05760405162461bcd60e51b81526020600482015260116024820152600080516020613b2283398151915260448201526064015b60405180910390fd5b60095460ff16610abf57600080fd5b6001600160a01b0382163014801590610ae157506001600160a01b0381163014155b8015610afb5750600c546001600160a01b03838116911614155b8015610b155750600c546001600160a01b03828116911614155b610b4f5760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610aa7565b806001600160a01b0316826001600160a01b031603610bb1576001600160a01b03811660009081526004602090815260408083208054600160ff19918216811790925560089093529220805490911682179055610bad9082906113a1565b5050565b6001600160a01b0382811660008181526004602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526008909252808320805486168317905592825291902080549092168117909155610c1b9083906113a1565b610bad8160016113a1565b6000610c346012600a613965565b610c4290633b9aca00613974565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610cac576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610ca690849061398b565b90915550505b610cb7848484612962565b949350505050565b6014546001600160a01b03163314610d075760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b8051825114610d585760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610aa7565b60005b82518161ffff161015610e6f57610d746012600a613965565b828261ffff1681518110610d8a57610d8a61399e565b6020026020010151610d9c9190613974565b336000908152602081905260409020541015610dfa5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610aa7565b610e5c33848361ffff1681518110610e1457610e1461399e565b60200260200101516012600a610e2a9190613965565b858561ffff1681518110610e4057610e4061399e565b6020026020010151610e529190613974565b6000806001612cf6565b5080610e67816139b4565b915050610d5b565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf8354610ece91906139d5565b610eda6012600a613965565b610ee890633b9aca00613974565b610c42919061398b565b6014546001600160a01b03163314610f3a5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b5460ff1615610f8d5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610aa7565b6103e88361ffff1611158015610fa957506103e88261ffff1611155b8015610fbb57506103e88161ffff1611155b6110075760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610aa7565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6015546001600160a01b031633146110b15760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610aa7565b6110bb6000611e02565b601580546001600160a01b0319169055565b600c546001600160a01b0316600090815260208190526040812054612710906110f7908490613974565b610a5d91906139e8565b6014546001600160a01b031633146111495760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b609681111561119a5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610aa7565b601155565b6014546001600160a01b031633146111e75760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b0381166112635760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa7565b61deac196001600160a01b038216016112e45760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610aa7565b6014546112fb906001600160a01b031660006113a1565b6113068160016113a1565b6014546001600160a01b03166000908152602081905260409020541561134f576014546001600160a01b031660008181526020819052604090205461134d91908390610e52565b505b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6014546001600160a01b031633146113e95760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6014546001600160a01b0316331461145c5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff161561146c57600080fd5b306001600160a01b038216036114c45760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610aa7565b6012805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af192505050801561154a575060408051601f3d908101601f1916820190925261154791810190613a0a565b60015b61155357600080fd5b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560145492546115d09383169291900416600019612869565b600b54610e6f90309061010090046001600160a01b0316600019612869565b50565b6014546001600160a01b0316331461163a5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff166116b25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610aa7565b6014546116c9906001600160a01b031660006113a1565b601480546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6014546001600160a01b0316331461175f5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b805460ff19166001179055565b6014546001600160a01b031633146117b65760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b80611845576001600160a01b03828116600081815260016020526040808220805460ff1916905560125490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050505050565b600254156118ac576203f4806002544261185f919061398b565b116118ac5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610aa7565b6001600160a01b03821660009081526001602052604090205460ff16156119155760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610aa7565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560125491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401600060405180830381600087803b15801561182957600080fd5b6014546000906001600160a01b031633146119d45760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600b546119f390309061010090046001600160a01b0316600019612869565b50600190565b6014546001600160a01b03163314611a415760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b60125460ff1615611a945760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610aa7565b601254610100900460ff16611aeb5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610aa7565b6012546201000090046001600160a01b0316611b1b576012805462010000600160b01b0319163062010000021790555b60128054600c54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526064810193909352620100009091041690636c115c3490608401600060405180830381600087803b158015611b8f57600080fd5b505af1925050508015611ba0575060015b50601254600c546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611c23575060408051601f3d908101601f19168201909252611c2091810190613a39565b60015b15611c3257600e91909155600f555b6012805460ff1990811660011790915560098054909116905542601355565b6000611c5e338484612962565b5060019392505050565b6014546001600160a01b03163314611cb05760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff1615611d1857306001600160a01b03821603611d185760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610aa7565b6014546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d939190613a5d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f9190613a76565b6015546001600160a01b03163314611e6d5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610aa7565b6016546001600160a01b03168015611eaa576001600160a01b0381166000908152600460205260408120805460ff19169055611eaa9082906113a1565b601680546001600160a01b0319166001600160a01b0384169081179091556000908152600460205260409020805460ff19166001908117909155610bad9083906113a1565b6014546001600160a01b03163314611f375760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b600d805460ff60a81b1916600160a81b841515908102919091179091556010805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6014546001600160a01b03163314611fe25760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff161561203a5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610aa7565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613a93565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190613a93565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121839190613a93565b600c546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661231957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122129190613a93565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561225f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122839190613a93565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156122d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f49190613a93565b600c80546001600160a01b0319166001600160a01b0392909216919091179055612335565b600c80546001600160a01b0319166001600160a01b0383161790555b600b805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600c5482166000908152600160208190526040909120805460ff191690911790559154610e6f923092910416600019612869565b6014546001600160a01b031633146123e35760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b0381166124395760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610aa7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b031633146124a35760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b601254610100900460ff16156124fb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610aa7565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156115ef573d6000803e3d6000fd5b6014546001600160a01b0316331461257c5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b828461258a6012600a613965565b61259890633b9aca00613974565b6125a29190613974565b6125ac91906139e8565b600e5580826125bd6012600a613965565b6125cb90633b9aca00613974565b6125d59190613974565b6125df91906139e8565b600f819055600e54111561263f5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610aa7565b600c546001600160a01b031660009081526020819052604090205461271090612669906096613974565b61267391906139e8565b600f5411156126d05760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610aa7565b620f42406126e06012600a613965565b6126ee90633b9aca00613974565b6126f891906139e8565b600f5410156127605760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610aa7565b620f42406127706012600a613965565b61277e90633b9aca00613974565b61278891906139e8565b600e5410156127f05760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610aa7565b50505050565b6014546001600160a01b0316331461283e5760405162461bcd60e51b81526020600482015260116024820152600080516020613b228339815191526044820152606401610aa7565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166128b55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610aa7565b6001600160a01b0382166129015760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610aa7565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166129c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa7565b6001600160a01b038316612a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aa7565b60008211612a8c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa7565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612aba5760019250612ae8565b6001600160a01b03861660009081526001602052604090205460ff1615612ae45760019150612ae8565b5060015b612af28787612f03565b15612bf35760125460ff16612bf35780612b4e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610aa7565b6001600160a01b03871660009081526005602052604090205460ff16158015612b9057506001600160a01b03861660009081526005602052604090205460ff16155b15612bf35760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610aa7565b8115612cdd57600d54600160a01b900460ff16612cdd57600d54600160a81b900460ff168015612c3c57506001600160a01b03861660009081526008602052604090205460ff16155b8015612c6157506001600160a01b03871660009081526008602052604090205460ff16155b15612cdd5730600090815260208190526040902054600e548110612cdb57600f5460105460ff1615612cc557601154600c546001600160a01b031660009081526020819052604090205461271091612cb891613974565b612cc291906139e8565b90505b808210612cd0578091505b612cd98261301a565b505b505b612ceb878787868686612cf6565b979650505050505050565b6001600160a01b03861660009081526006602052604081205460019060ff1680612d3857506001600160a01b03871660009081526006602052604090205460ff165b15612d41575060005b6001600160a01b03881660009081526020819052604081208054889290612d6990849061398b565b909155506000905081612d7c5786612d88565b612d888988888861325e565b9050806000808a6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612dbe91906139d5565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e0a91815260200190565b60405180910390a3601254610100900460ff16612ef457612e2b898961336a565b601254610100900460ff16158015612e485750612e488989612f03565b8015612e6d57506001600160a01b03891660009081526005602052604090205460ff16155b8015612e9257506001600160a01b03881660009081526005602052604090205460ff16155b8015612e9c575083155b15612ef45760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610aa7565b50600198975050505050505050565b6014546000906001600160a01b03848116911614801590612f3257506014546001600160a01b03838116911614155b8015612f4957506014546001600160a01b03163214155b8015612f6e57506001600160a01b03821660009081526004602052604090205460ff16155b8015612f9357506001600160a01b03831660009081526004602052604090205460ff16155b8015612faa57506001600160a01b03821661dead14155b8015612fbe57506001600160a01b03821615155b8015612fd357506001600160a01b0383163014155b8015612ff357506012546001600160a01b03848116620100009092041614155b801561301357506012546001600160a01b03838116620100009092041614155b9392505050565b600d805460ff60a01b1916600160a01b179055306000908152600360209081526040808320600b5461010090046001600160a01b031684529091529020546000191461309057306000908152600360209081526040808320600b5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130c5576130c561399e565b60200260200101906001600160a01b031690816001600160a01b031681525050600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315c9190613a93565b8160018151811061316f5761316f61399e565b6001600160a01b039283166020918202929092010152600b5460405163791ac94760e01b81526101009091049091169063791ac947906131bc908590600090869030904290600401613ab0565b600060405180830381600087803b1580156131d657600080fd5b505af19250505080156131e7575060015b6131f1575061324e565b600d546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b50505050505b50600d805460ff60a01b19169055565b60008083156132745750600a5461ffff1661329e565b821561328d5750600a5462010000900461ffff1661329e565b50600a54640100000000900461ffff165b806000036132af5784915050610cb7565b6012546201000090046001600160a01b0316301480156132d0575046606114155b156132da57506111945b60006127106132e98388613974565b6132f391906139e8565b9050801561336057306000908152602081905260408120805483929061331a9084906139d5565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612ceb818761398b565b601254610100900460ff16156133ce5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610aa7565b6133d88282612f03565b1580156133f25750600c546001600160a01b038281169116145b15610bad576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556012805461ff00191661010017908190556201000090041661346a576012805462010000600160b01b0319163062010000021790555b600d805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001611f8e565b600060208083528351808285015260005b818110156134db578581018301518582016040015282016134bf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ef57600080fd5b6000806040838503121561352457600080fd5b823561352f816134fc565b946020939093013593505050565b60006020828403121561354f57600080fd5b8135613013816134fc565b6000806040838503121561356d57600080fd5b8235613578816134fc565b91506020830135613588816134fc565b809150509250929050565b6000806000606084860312156135a857600080fd5b83356135b3816134fc565b925060208401356135c3816134fc565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613613576136136135d4565b604052919050565b600067ffffffffffffffff821115613635576136356135d4565b5060051b60200190565b600082601f83011261365057600080fd5b813560206136656136608361361b565b6135ea565b82815260059290921b8401810191818101908684111561368457600080fd5b8286015b8481101561369f5780358352918301918301613688565b509695505050505050565b600080604083850312156136bd57600080fd5b823567ffffffffffffffff808211156136d557600080fd5b818501915085601f8301126136e957600080fd5b813560206136f96136608361361b565b82815260059290921b8401810191818101908984111561371857600080fd5b948201945b8386101561373f578535613730816134fc565b8252948201949082019061371d565b9650508601359250508082111561375557600080fd5b506137628582860161363f565b9150509250929050565b803561ffff8116811461377e57600080fd5b919050565b60008060006060848603121561379857600080fd5b6137a18461376c565b92506137af6020850161376c565b91506137bd6040850161376c565b90509250925092565b6000602082840312156137d857600080fd5b5035919050565b80151581146115ef57600080fd5b6000806040838503121561380057600080fd5b823561380b816134fc565b91506020830135613588816137df565b6000806040838503121561382e57600080fd5b823561380b816137df565b6000806000806080858703121561384f57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156138bc5781600019048211156138a2576138a261386b565b808516156138af57918102915b93841c9390800290613886565b509250929050565b6000826138d357506001610a5d565b816138e057506000610a5d565b81600181146138f657600281146139005761391c565b6001915050610a5d565b60ff8411156139115761391161386b565b50506001821b610a5d565b5060208310610133831016604e8410600b841016171561393f575081810a610a5d565b6139498383613881565b806000190482111561395d5761395d61386b565b029392505050565b600061301360ff8416836138c4565b8082028115828204841417610a5d57610a5d61386b565b81810381811115610a5d57610a5d61386b565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036139cb576139cb61386b565b6001019392505050565b80820180821115610a5d57610a5d61386b565b600082613a0557634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215613a1d57600080fd5b8251613a28816134fc565b6020840151909250613588816134fc565b60008060408385031215613a4c57600080fd5b505080516020909101519092909150565b600060208284031215613a6f57600080fd5b5051919050565b600060208284031215613a8857600080fd5b8151613013816137df565b600060208284031215613aa557600080fd5b8151613013816134fc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b005784516001600160a01b031683529383019391830191600101613adb565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220d8331e4dc453e00f8ead6edafa979aa6ebe864f4fb6b90df88fbf92c60c7bba864736f6c63430008130033

Deployed Bytecode Sourcemap

3889:20005:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5297:73;;;;;;;;;;;;5328:42;5297:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5297:73:0;;;;;;;;5546:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;5546:28:0;245:177:1;4885:106:0;;;;;;;;;;-1:-1:-1;4885:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;633:6:1;666:15;;;648:34;;718:15;;;713:2;698:18;;691:43;770:15;;750:18;;;743:43;;;;611:2;596:18;4885:106:0;427:365:1;9806:80:0;;;;;;;;;;-1:-1:-1;9878:5:0;;;;;;;;;;;;-1:-1:-1;;;9878:5:0;;;;9806:80;;;;;;;:::i;5236:26::-;;;;;;;;;;-1:-1:-1;5236:26:0;;;;;;;-1:-1:-1;;;;;5236:26:0;;;5203;;;;;;;;;;-1:-1:-1;5203:26:0;;;;;;;;;;;1763:14:1;;1756:22;1738:41;;1726:2;1711:18;5203:26:0;1598:187:1;10414:161:0;;;;;;;;;;-1:-1:-1;10414:161:0;;;;;:::i;:::-;;:::i;13500:140::-;;;;;;;;;;-1:-1:-1;13500:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;13598:34:0;13574:4;13598:34;;;:25;:34;;;;;;;;;13500:140;16203:809;;;;;;;;;;-1:-1:-1;16203:809:0;;;;;:::i;:::-;;:::i;:::-;;9541:83;;;;;;;;;;;;;:::i;11084:306::-;;;;;;;;;;-1:-1:-1;11084:306:0;;;;;:::i;:::-;;:::i;21844:447::-;;;;;;;;;;-1:-1:-1;21844:447:0;;;;;:::i;:::-;;:::i;5654:33::-;;;;;;;;;;;;;;;;13804:141;;;;;;;;;;;;;:::i;5000:42::-;;;;;;;;;;;;5038:4;5000:42;;5581:25;;;;;;;;;;;;;;;;9630:80;;;;;;;;;;-1:-1:-1;9630:80:0;;4696:2;6004:36:1;;5992:2;5977:18;9630:80:0;5862:184:1;14143:453:0;;;;;;;;;;-1:-1:-1;14143:453:0;;;;;:::i;:::-;;:::i;8924:221::-;;;;;;;;;;;;;:::i;5269:21::-;;;;;;;;;;-1:-1:-1;5269:21:0;;;;-1:-1:-1;;;;;5269:21:0;;;5694:34;;;;;;;;;;-1:-1:-1;5694:34:0;;;;;;;;14803:189;;;;;;;;;;-1:-1:-1;14803:189:0;;;;;:::i;:::-;;:::i;15707:217::-;;;;;;;;;;-1:-1:-1;15707:217:0;;;;;:::i;:::-;;:::i;7231:654::-;;;;;;;;;;-1:-1:-1;7231:654:0;;;;;:::i;:::-;;:::i;13223:127::-;;;;;;;;;;-1:-1:-1;13223:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;13314:28:0;13290:4;13314:28;;;:19;:28;;;;;;;;;13223:127;5735:36;;;;;;;;;;-1:-1:-1;5735:36:0;;;;;;;;;;;8249:23;;;;;;;;;;-1:-1:-1;8249:23:0;;;;-1:-1:-1;;;;;8249:23:0;;;13358:134;;;;;;;;;;-1:-1:-1;13358:134:0;;;;;:::i;:::-;;:::i;5808:26::-;;;;;;;;;;;;;;;;12658:557;;;;;;;;;;-1:-1:-1;12658:557:0;;;;;:::i;:::-;;:::i;10116:117::-;;;;;;;;;;-1:-1:-1;10116:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10209:16:0;10182:7;10209:16;;;;;;;;;;;;10116:117;7893:310;;;;;;;;;;;;;:::i;5377:92::-;;;;;;;;;;-1:-1:-1;5377:92:0;;;;-1:-1:-1;;;;;5377:92:0;;;13953:182;;;;;;;;;;;;;:::i;12086:564::-;;;;;;;;;;-1:-1:-1;12086:564:0;;;;;:::i;:::-;;:::i;8211:31::-;;;;;;;;;;-1:-1:-1;8211:31:0;;;;-1:-1:-1;;;;;8211:31:0;;;9892:79;;;;;;;;;;-1:-1:-1;9962:6:0;;-1:-1:-1;;;;;9962:6:0;9892:79;;10901:175;;;;;;;;;;;;;:::i;20605:737::-;;;;;;;;;;;;;:::i;9716:84::-;;;;;;;;;;-1:-1:-1;9790:7:0;;;;;;;;;;;;-1:-1:-1;;;9790:7:0;;;;9716:84;;10241:165;;;;;;;;;;-1:-1:-1;10241:165:0;;;;;:::i;:::-;;:::i;21540:296::-;;;;;;;;;;-1:-1:-1;21540:296:0;;;;;:::i;:::-;;:::i;8434:482::-;;;;;;;;;;-1:-1:-1;8434:482:0;;;;;:::i;:::-;;:::i;5613:34::-;;;;;;;;;;-1:-1:-1;5613:34:0;;;;;;;;15932:263;;;;;;;;;;-1:-1:-1;15932:263:0;;;;;:::i;:::-;;:::i;9977:133::-;;;;;;;;;;-1:-1:-1;9977:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10079:19:0;;;10061:7;10079:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;9977:133;11398:680;;;;;;;;;;-1:-1:-1;11398:680:0;;;;;:::i;:::-;;:::i;14604:191::-;;;;;;;;;;-1:-1:-1;14604:191:0;;;;;:::i;:::-;;:::i;21350:182::-;;;;;;;;;;;;;:::i;15000:699::-;;;;;;;;;;-1:-1:-1;15000:699:0;;;;;:::i;:::-;;:::i;5500:39::-;;;;;;;;;;-1:-1:-1;5500:39:0;;;;-1:-1:-1;;;5500:39:0;;;;;;13648:148;;;;;;;;;;-1:-1:-1;13648:148:0;;;;;:::i;:::-;;:::i;10414:161::-;10491:4;10508:37;10517:10;10529:7;10538:6;10508:8;:37::i;:::-;-1:-1:-1;10563:4:0;10414:161;;;;;:::o;16203:809::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;;;;;;;;;16307:23:::1;::::0;::::1;;16299:32;;;::::0;::::1;;-1:-1:-1::0;;;;;16350:23:0;::::1;16368:4;16350:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;16395:24:0;::::1;16414:4;16395:24;;16350:69;:107;;;;-1:-1:-1::0;16441:6:0::1;::::0;-1:-1:-1;;;;;16441:16:0;;::::1;:6:::0;::::1;:16;;16350:107;:146;;;;-1:-1:-1::0;16479:6:0::1;::::0;-1:-1:-1;;;;;16479:17:0;;::::1;:6:::0;::::1;:17;;16350:146;16342:170;;;::::0;-1:-1:-1;;;16342:170:0;;9069:2:1;16342:170:0::1;::::0;::::1;9051:21:1::0;9108:2;9088:18;;;9081:30;-1:-1:-1;;;9127:18:1;;;9120:41;9178:18;;16342:170:0::1;8867:335:1::0;16342:170:0::1;16537:7;-1:-1:-1::0;;;;;16527:17:0::1;:6;-1:-1:-1::0;;;;;16527:17:0::1;::::0;16523:482:::1;;-1:-1:-1::0;;;;;16561:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;16590:4:::1;-1:-1:-1::0;;16561:33:0;;::::1;::::0;::::1;::::0;;;16609:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;16656:34:::1;::::0;16561:26;;16656:19:::1;:34::i;:::-;16203:809:::0;;:::o;16523:482::-:1;-1:-1:-1::0;;;;;16723:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;16751:4:::1;-1:-1:-1::0;;16723:32:0;;::::1;::::0;::::1;::::0;;;16770:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;16818:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;16864:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;16911:33:::1;::::0;16723:25;;16911:19:::1;:33::i;:::-;16959:34;16979:7;16988:4;16959:19;:34::i;9541:83::-:0;9596:7;4757:13;4696:2;4757;:13;:::i;:::-;4740:30;;4539:13;4740:30;:::i;:::-;9607:14;;9541:83;:::o;11084:306::-;-1:-1:-1;;;;;11205:19:0;;11184:4;11205:19;;;:11;:19;;;;;;;;11225:10;11205:31;;;;;;;;-1:-1:-1;;11205:52:0;11201:126;;-1:-1:-1;;;;;11274:19:0;;;;;;:11;:19;;;;;;;;11294:10;11274:31;;;;;;;:41;;11309:6;;11274:19;:41;;11309:6;;11274:41;:::i;:::-;;;;-1:-1:-1;;11201:126:0;11346:36;11356:6;11364:9;11375:6;11346:9;:36::i;:::-;11339:43;11084:306;-1:-1:-1;;;;11084:306:0:o;21844:447::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;21979:7:::1;:14;21960:8;:15;:33;21952:67;;;::::0;-1:-1:-1;;;21952:67:0;;11230:2:1;21952:67:0::1;::::0;::::1;11212:21:1::0;11269:2;11249:18;;;11242:30;11308:23;11288:18;;;11281:51;11349:18;;21952:67:0::1;11028:345:1::0;21952:67:0::1;22035:8;22030:254;22053:8;:15;22049:1;:19;;;22030:254;;;22134:13;4696:2;22134;:13;:::i;:::-;22123:7;22131:1;22123:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22108:10;10182:7:::0;10209:16;;;;;;;;;;;22098:49:::1;;22090:80;;;::::0;-1:-1:-1;;;22090:80:0;;11712:2:1;22090:80:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790:20;11770:18;;;11763:48;11828:18;;22090:80:0::1;11510:342:1::0;22090:80:0::1;22185:87;22202:10;22214:8;22223:1;22214:11;;;;;;;;;;:::i;:::-;;;;;;;4696:2;22238;:13;;;;:::i;:::-;22227:7;22235:1;22227:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22253:5;22260::::0;22267:4:::1;22185:16;:87::i;:::-;-1:-1:-1::0;22070:3:0;::::1;::::0;::::1;:::i;:::-;;;;22030:254;;;;21844:447:::0;;:::o;13804:141::-;13857:7;10209:16;;;;;;5328:42;10209:16;;;;13896:39;;10209:16;13896:39;:::i;:::-;4757:13;4696:2;4757;:13;:::i;:::-;4740:30;;4539:13;4740:30;:::i;:::-;13885:51;;;;:::i;14143:453::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;14251:14:::1;::::0;::::1;;14250:15;14242:45;;;::::0;-1:-1:-1;;;14242:45:0;;12391:2:1;14242:45:0::1;::::0;::::1;12373:21:1::0;12430:2;12410:18;;;12403:30;12469:19;12449:18;;;12442:47;12506:18;;14242:45:0::1;12189:341:1::0;14242:45:0::1;5038:4;14306:6;:21;;;;:65;;;;;5088:4;14348:7;:23;;;;14306:65;:117;;;;;5142:4;14392:11;:31;;;;14306:117;14298:170;;;::::0;-1:-1:-1;;;14298:170:0;;12737:2:1;14298:170:0::1;::::0;::::1;12719:21:1::0;12776:2;12756:18;;;12749:30;12815:25;12795:18;;;12788:53;12858:18;;14298:170:0::1;12535:347:1::0;14298:170:0::1;14479:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;14515:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;14553:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;14143:453::o;8924:221::-;9002:16;;-1:-1:-1;;;;;9002:16:0;8988:10;:30;8980:83;;;;-1:-1:-1;;;8980:83:0;;13089:2:1;8980:83:0;;;13071:21:1;13128:2;13108:18;;;13101:30;13167:34;13147:18;;;13140:62;-1:-1:-1;;;13218:18:1;;;13211:38;13266:19;;8980:83:0;12887:404:1;8980:83:0;9074:23;9094:1;9074:11;:23::i;:::-;9108:16;:29;;-1:-1:-1;;;;;;9108:29:0;;;8924:221::o;14803:189::-;14932:6;;-1:-1:-1;;;;;14932:6:0;14894:7;10209:16;;;;;;;;;;;5189:5;;14922:41;;14942:21;;14922:41;:::i;:::-;14921:62;;;;:::i;15707:217::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;15837:3:::1;15811:22;:29;;15803:64;;;::::0;-1:-1:-1;;;15803:64:0;;13720:2:1;15803:64:0::1;::::0;::::1;13702:21:1::0;13759:2;13739:18;;;13732:30;13798:24;13778:18;;;13771:52;13840:18;;15803:64:0::1;13518:346:1::0;15803:64:0::1;15878:13;:38:::0;15707:217::o;7231:654::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;-1:-1:-1;;;;;7310:22:0;::::1;7302:96;;;::::0;-1:-1:-1;;;7302:96:0;;14071:2:1;7302:96:0::1;::::0;::::1;14053:21:1::0;14110:2;14090:18;;;14083:30;14149:34;14129:18;;;14122:62;14220:31;14200:18;;;14193:59;14269:19;;7302:96:0::1;13869:425:1::0;7302:96:0::1;-1:-1:-1::0;;;;;;;7417:16:0;::::1;::::0;7409:90:::1;;;::::0;-1:-1:-1;;;7409:90:0;;14071:2:1;7409:90:0::1;::::0;::::1;14053:21:1::0;14110:2;14090:18;;;14083:30;14149:34;14129:18;;;14122:62;14220:31;14200:18;;;14193:59;14269:19;;7409:90:0::1;13869:425:1::0;7409:90:0::1;7530:6;::::0;7510:34:::1;::::0;-1:-1:-1;;;;;7530:6:0::1;;7510:19;:34::i;:::-;7555:35;7575:8;7585:4;7555:19;:35::i;:::-;7625:6;::::0;-1:-1:-1;;;;;7625:6:0::1;7635:1;10209:16:::0;;;;;;;;;;;7615:21;7611:127:::1;;7670:6;::::0;-1:-1:-1;;;;;7670:6:0::1;10182:7:::0;10209:16;;;;;;;;;;;7653:73:::1;::::0;7670:6;7678:8;;7688:17:::1;10116:117:::0;7653:73:::1;;7611:127;7777:6;::::0;;-1:-1:-1;;;;;7794:17:0;;::::1;-1:-1:-1::0;;;;;;7794:17:0;::::1;::::0;::::1;::::0;;;7827:40:::1;::::0;7777:6;::::1;::::0;7794:17;7777:6;;7827:40:::1;::::0;7758:16:::1;::::0;7827:40:::1;7291:594;7231:654:::0;:::o;13358:134::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;-1:-1:-1;;;;;13446:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;13446:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13358:134::o;12658:557::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;12733:14:::1;::::0;::::1;;12732:15;12724:24;;;::::0;::::1;;12783:4;-1:-1:-1::0;;;;;12767:21:0;::::1;::::0;12759:48:::1;;;::::0;-1:-1:-1;;;12759:48:0;;14501:2:1;12759:48:0::1;::::0;::::1;14483:21:1::0;14540:2;14520:18;;;14513:30;14579:16;14559:18;;;14552:44;14613:18;;12759:48:0::1;14299:338:1::0;12759:48:0::1;12818:11;:31:::0;;-1:-1:-1;;;;;;12818:31:0::1;::::0;-1:-1:-1;;;;;12818:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;12864:23:::1;::::0;;-1:-1:-1;;;12864:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;12864:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;12864:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;12864:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;12860:348;;13197:8;::::0;::::1;12860:348;12951:9;:29:::0;;-1:-1:-1;;12951:29:0::1;;-1:-1:-1::0;;;;;12951:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12982:6:::1;:22:::0;;-1:-1:-1;;;;;;12982:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13006:15:0;;;-1:-1:-1;13006:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13006:22:0::1;::::0;;::::1;::::0;;13053:6:::1;::::0;13069:9;;13044:55:::1;::::0;13053:6;::::1;::::0;13069:9;;::::1;;-1:-1:-1::0;;13044:8:0::1;:55::i;:::-;13146:9;::::0;13114:62:::1;::::0;13131:4:::1;::::0;13146:9:::1;::::0;::::1;-1:-1:-1::0;;;;;13146:9:0::1;-1:-1:-1::0;;13114:8:0::1;:62::i;12860:348::-;12658:557:::0;:::o;7893:310::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;7960:14:::1;::::0;::::1;;7952:74;;;::::0;-1:-1:-1;;;7952:74:0;;15234:2:1;7952:74:0::1;::::0;::::1;15216:21:1::0;15273:2;15253:18;;;15246:30;15312:34;15292:18;;;15285:62;15383:17;15363:18;;;15356:45;15418:19;;7952:74:0::1;15032:411:1::0;7952:74:0::1;8057:6;::::0;8037:34:::1;::::0;-1:-1:-1;;;;;8057:6:0::1;;8037:19;:34::i;:::-;8101:6;::::0;;-1:-1:-1;;;;;;8118:19:0;::::1;::::0;;;8153:42:::1;::::0;-1:-1:-1;;;;;8101:6:0;;::::1;::::0;8082:16:::1;::::0;8101:6;;8153:42:::1;::::0;8082:16;;8153:42:::1;7941:262;7893:310::o:0;13953:182::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;14106:14:::1;:21:::0;;-1:-1:-1;;14106:21:0::1;14123:4;14106:21;::::0;;13953:182::o;12086:564::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;12168:7:::1;12163:480;;-1:-1:-1::0;;;;;12192:13:0;;::::1;12208:5;12192:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12192:21:0::1;::::0;;12228:11:::1;::::0;:34;;-1:-1:-1;;;12228:34:0;;::::1;::::0;::::1;15616:74:1::0;;;;15706:18;;;15699:50;;;;12228:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;15589:18:1;;12228:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16203:809:::0;;:::o;12163:480::-:1;12299:17;::::0;:22;12295:135:::1;;12388:6;12368:17;;12350:15;:35;;;;:::i;:::-;:44;12342:72;;;::::0;-1:-1:-1;;;12342:72:0;;15962:2:1;12342:72:0::1;::::0;::::1;15944:21:1::0;16001:2;15981:18;;;15974:30;16040:17;16020:18;;;16013:45;16075:18;;12342:72:0::1;15760:339:1::0;12342:72:0::1;-1:-1:-1::0;;;;;12453:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;12452:14;12444:54;;;::::0;-1:-1:-1;;;12444:54:0;;16306:2:1;12444:54:0::1;::::0;::::1;16288:21:1::0;16345:2;16325:18;;;16318:30;16384:29;16364:18;;;16357:57;16431:18;;12444:54:0::1;16104:351:1::0;12444:54:0::1;-1:-1:-1::0;;;;;12513:13:0;;::::1;;::::0;;;12529:4:::1;12513:13;::::0;;;;;;;;:20;;-1:-1:-1;;12513:20:0::1;::::0;::::1;::::0;;12568:15:::1;12548:17;:35:::0;12598:11:::1;::::0;:33;;-1:-1:-1;;;12598:33:0;;::::1;::::0;::::1;15616:74:1::0;;;;15706:18;;;15699:50;12598:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;15589:18:1;;12598:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;10901:175:::0;7085:6;;10967:4;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;11016:9:::1;::::0;10984:62:::1;::::0;11001:4:::1;::::0;11016:9:::1;::::0;::::1;-1:-1:-1::0;;;;;11016:9:0::1;-1:-1:-1::0;;10984:8:0::1;:62::i;:::-;-1:-1:-1::0;11064:4:0::1;10901:175:::0;:::o;20605:737::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;20667:14:::1;::::0;::::1;;20666:15;20658:52;;;::::0;-1:-1:-1;;;20658:52:0;;16662:2:1;20658:52:0::1;::::0;::::1;16644:21:1::0;16701:2;16681:18;;;16674:30;16740:26;16720:18;;;16713:54;16784:18;;20658:52:0::1;16460:348:1::0;20658:52:0::1;20729:16;::::0;::::1;::::0;::::1;;;20721:53;;;::::0;-1:-1:-1;;;20721:53:0;;17015:2:1;20721:53:0::1;::::0;::::1;16997:21:1::0;17054:2;17034:18;;;17027:30;17093:26;17073:18;;;17066:54;17137:18;;20721:53:0::1;16813:348:1::0;20721:53:0::1;20797:11;::::0;;;::::1;-1:-1:-1::0;;;;;20797:11:0::1;20785:106;;20839:11;:40:::0;;-1:-1:-1;;;;;;20839:40:0::1;20873:4;20839:40:::0;::::1;;::::0;;20785:106:::1;20905:11;::::0;;20927:6:::1;::::0;20905:87:::1;::::0;-1:-1:-1;;;20905:87:0;;-1:-1:-1;;;;;20927:6:0;;::::1;20905:87;::::0;::::1;17389:74:1::0;17511:10;20942:12:0::1;17499:23:1::0;17479:18;;;17472:51;17571:18;20964:15:0::1;17559:31:1::0;17539:18;;;17532:59;17607:18;;;17600:45;;;;20905:11:0;;;::::1;;::::0;:21:::1;::::0;17361:19:1;;20905:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;21018:11:0::1;::::0;21049:6:::1;::::0;-1:-1:-1;;;;;21049:6:0;;::::1;10182:7:::0;10209:16;;;;;;;;;;;;;21018:39;;-1:-1:-1;;;21018:39:0;;::::1;::::0;::::1;391:25:1::0;;;;21018:11:0;;;::::1;;::::0;:20:::1;::::0;364:18:1;;21018:39:0::1;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;21018:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21018:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21014:207:::0;::::1;;21129:13;:29:::0;;;;21173:10:::1;:27:::0;21014:207:::1;21231:14;:21:::0;;-1:-1:-1;;21231:21:0;;::::1;21248:4;21231:21;::::0;;;21263:23:::1;:31:::0;;;;::::1;::::0;;21319:15:::1;21305:11;:29:::0;20605:737::o;10241:165::-;10319:4;10336:40;10346:10;10358:9;10369:6;10336:9;:40::i;:::-;-1:-1:-1;10394:4:0;;10241:165;-1:-1:-1;;;10241:165:0:o;21540:296::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;21618:16:::1;::::0;::::1;::::0;::::1;;;21614:111;;;21676:4;-1:-1:-1::0;;;;;21659:22:0;::::1;::::0;21651:62:::1;;;::::0;-1:-1:-1;;;21651:62:0;;18108:2:1;21651:62:0::1;::::0;::::1;18090:21:1::0;18147:2;18127:18;;;18120:30;18186:29;18166:18;;;18159:57;18233:18;;21651:62:0::1;17906:351:1::0;21651:62:0::1;21789:6;::::0;21797:30:::1;::::0;-1:-1:-1;;;21797:30:0;;21821:4:::1;21797:30;::::0;::::1;160:74:1::0;21757:5:0;;-1:-1:-1;;;;;21774:14:0;;::::1;::::0;::::1;::::0;21789:6;;;::::1;::::0;21774:14;;21797:15:::1;::::0;133:18:1;;21797:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21774:54;::::0;-1:-1:-1;;;;;;21774:54:0::1;::::0;;;;;;-1:-1:-1;;;;;18643:55:1;;;21774:54:0::1;::::0;::::1;18625:74:1::0;18715:18;;;18708:34;18598:18;;21774:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8434:482::-:0;8516:16;;-1:-1:-1;;;;;8516:16:0;8502:10;:30;8494:83;;;;-1:-1:-1;;;8494:83:0;;13089:2:1;8494:83:0;;;13071:21:1;13128:2;13108:18;;;13101:30;13167:34;13147:18;;;13140:62;-1:-1:-1;;;13218:18:1;;;13211:38;13266:19;;8494:83:0;12887:404:1;8494:83:0;8610:8;;-1:-1:-1;;;;;8610:8:0;8633:25;;8629:150;;-1:-1:-1;;;;;8675:30:0;;8708:5;8675:30;;;:17;:30;;;;;:38;;-1:-1:-1;;8675:38:0;;;8728:39;;8693:11;;8728:19;:39::i;:::-;8789:8;:22;;-1:-1:-1;;;;;;8789:22:0;-1:-1:-1;;;;;8789:22:0;;;;;;;;-1:-1:-1;8822:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;8822:37:0;-1:-1:-1;8822:37:0;;;;;;8870:38;;8789:22;;8870:19;:38::i;15932:263::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;16041:19:::1;:33:::0;;-1:-1:-1;;;;16041:33:0::1;-1:-1:-1::0;;;16041:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;16085:22:::1;:47:::0;;-1:-1:-1;;16085:47:0::1;::::0;::::1;;;::::0;;16148:39:::1;::::0;1738:41:1;;;16148:39:0::1;::::0;1726:2:1;1711:18;16148:39:0::1;;;;;;;;15932:263:::0;;:::o;11398:680::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;11478:16:::1;::::0;::::1;::::0;::::1;;;11477:17;11469:60;;;::::0;-1:-1:-1;;;11469:60:0;;19205:2:1;11469:60:0::1;::::0;::::1;19187:21:1::0;19244:2;19224:18;;;19217:30;19283:32;19263:18;;;19256:60;19333:18;;11469:60:0::1;19003:354:1::0;11469:60:0::1;11540:20;11573:9;11540:43;;11594:16;11624:10;-1:-1:-1::0;;;;;11624:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11613:40:0::1;;11662:4;11669:10;-1:-1:-1::0;;;;;11669:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11613:74;::::0;-1:-1:-1;;;;;;11613:74:0::1;::::0;;;;;;-1:-1:-1;;;;;19871:15:1;;;11613:74:0::1;::::0;::::1;19853:34:1::0;19923:15;;19903:18;;;19896:43;19765:18;;11613:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11706:6;::::0;-1:-1:-1;;;;;11706:6:0;;::::1;11716:5;11698:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;11698:23:0::1;::::0;;11594:93;;-1:-1:-1;11736:22:0;::::1;11732:200;;11795:10;-1:-1:-1::0;;;;;11795:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11784:43:0::1;;11836:4;11843:10;-1:-1:-1::0;;;;;11843:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11784:77;::::0;-1:-1:-1;;;;;;11784:77:0::1;::::0;;;;;;-1:-1:-1;;;;;19871:15:1;;;11784:77:0::1;::::0;::::1;19853:34:1::0;19923:15;;19903:18;;;19896:43;19765:18;;11784:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11775:6;:86:::0;;-1:-1:-1;;;;;;11775:86:0::1;-1:-1:-1::0;;;;;11775:86:0;;;::::1;::::0;;;::::1;::::0;;11732:200:::1;;;11903:6;:17:::0;;-1:-1:-1;;;;;;11903:17:0::1;-1:-1:-1::0;;;;;11903:17:0;::::1;;::::0;;11732:200:::1;11942:9;:22:::0;;-1:-1:-1;;11942:22:0::1;;-1:-1:-1::0;;;;;11942:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;11983:6:::1;::::0;;::::1;-1:-1:-1::0;11975:15:0;;;-1:-1:-1;11975:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;11975:22:0::1;::::0;;::::1;::::0;;12040:9;;12008:62:::1;::::0;12025:4:::1;::::0;12040:9;::::1;;-1:-1:-1::0;;12008:8:0::1;:62::i;14604:191::-:0;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;-1:-1:-1;;;;;14689:23:0;::::1;14681:59;;;::::0;-1:-1:-1;;;14681:59:0;;20152:2:1;14681:59:0::1;::::0;::::1;20134:21:1::0;20191:2;20171:18;;;20164:30;20230:25;20210:18;;;20203:53;20273:18;;14681:59:0::1;19950:347:1::0;14681:59:0::1;14751:15;:36:::0;;-1:-1:-1;;;;;;14751:36:0::1;-1:-1:-1::0;;;;;14751:36:0;;;::::1;::::0;;;::::1;::::0;;14604:191::o;21350:182::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;21417:16:::1;::::0;::::1;::::0;::::1;;;21416:17;21408:58;;;::::0;-1:-1:-1;;;21408:58:0;;20504:2:1;21408:58:0::1;::::0;::::1;20486:21:1::0;20543:2;20523:18;;;20516:30;20582;20562:18;;;20555:58;20630:18;;21408:58:0::1;20302:352:1::0;21408:58:0::1;21485:6;::::0;21477:47:::1;::::0;-1:-1:-1;;;;;21485:6:0;;::::1;::::0;21502:21:::1;21477:47:::0;::::1;;;::::0;21485:6:::1;21477:47:::0;21485:6;21477:47;21502:21;21485:6;21477:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;15000:699:::0;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;15200:16;15180;4757:13:::1;4696:2;4757;:13;:::i;:::-;4740:30;::::0;4539:13:::1;4740:30;:::i;:::-;15170:26;;;;:::i;:::-;15169:47;;;;:::i;:::-;15153:13;:63:::0;15268:13;15251;4757::::1;4696:2;4757;:13;:::i;:::-;4740:30;::::0;4539:13:::1;4740:30;:::i;:::-;15241:23;;;;:::i;:::-;15240:41;;;;:::i;:::-;15227:10;:54:::0;;;15300:13:::1;::::0;:27:::1;;15292:73;;;::::0;-1:-1:-1;;;15292:73:0;;20861:2:1;15292:73:0::1;::::0;::::1;20843:21:1::0;20900:2;20880:18;;;20873:30;20939:34;20919:18;;;20912:62;-1:-1:-1;;;20990:18:1;;;20983:31;21031:19;;15292:73:0::1;20659:397:1::0;15292:73:0::1;15409:6;::::0;-1:-1:-1;;;;;15409:6:0::1;10182:7:::0;10209:16;;;;;;;;;;;5189:5:::1;::::0;15399:23:::1;::::0;15419:3:::1;15399:23;:::i;:::-;15398:44;;;;:::i;:::-;15384:10;;:58;;15376:106;;;::::0;-1:-1:-1;;;15376:106:0;;21263:2:1;15376:106:0::1;::::0;::::1;21245:21:1::0;21302:2;21282:18;;;21275:30;21341:34;21321:18;;;21314:62;-1:-1:-1;;;21392:18:1;;;21385:33;21435:19;;15376:106:0::1;21061:399:1::0;15376:106:0::1;15525:9;4757:13;4696:2;4757;:13;:::i;:::-;4740:30;::::0;4539:13:::1;4740:30;:::i;:::-;15515:19;;;;:::i;:::-;15501:10;;:33;;15493:92;;;::::0;-1:-1:-1;;;15493:92:0;;21667:2:1;15493:92:0::1;::::0;::::1;21649:21:1::0;21706:2;21686:18;;;21679:30;21745:34;21725:18;;;21718:62;-1:-1:-1;;;21796:18:1;;;21789:44;21850:19;;15493:92:0::1;21465:410:1::0;15493:92:0::1;15631:9;4757:13;4696:2;4757;:13;:::i;:::-;4740:30;::::0;4539:13:::1;4740:30;:::i;:::-;15621:19;;;;:::i;:::-;15604:13;;:36;;15596:95;;;::::0;-1:-1:-1;;;15596:95:0;;21667:2:1;15596:95:0::1;::::0;::::1;21649:21:1::0;21706:2;21686:18;;;21679:30;21745:34;21725:18;;;21718:62;-1:-1:-1;;;21796:18:1;;;21789:44;21850:19;;15596:95:0::1;21465:410:1::0;15596:95:0::1;15000:699:::0;;;;:::o;13648:148::-;7085:6;;-1:-1:-1;;;;;7085:6:0;7095:10;7085:20;7077:50;;;;-1:-1:-1;;;7077:50:0;;8723:2:1;7077:50:0;;;8705:21:1;8762:2;8742:18;;;8735:30;-1:-1:-1;;;;;;;;;;;8781:18:1;;;8774:47;8838:18;;7077:50:0;8521:341:1;7077:50:0;-1:-1:-1;;;;;13744:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;13744:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13648:148::o;10583:310::-;-1:-1:-1;;;;;10678:20:0;;10670:52;;;;-1:-1:-1;;;10670:52:0;;22082:2:1;10670:52:0;;;22064:21:1;22121:2;22101:18;;;22094:30;-1:-1:-1;;;22140:18:1;;;22133:49;22199:18;;10670:52:0;21880:343:1;10670:52:0;-1:-1:-1;;;;;10741:21:0;;10733:53;;;;-1:-1:-1;;;10733:53:0;;22082:2:1;10733:53:0;;;22064:21:1;22121:2;22101:18;;;22094:30;-1:-1:-1;;;22140:18:1;;;22133:49;22199:18;;10733:53:0;21880:343:1;10733:53:0;-1:-1:-1;;;;;10799:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;10852:33;;391:25:1;;;10852:33:0;;364:18:1;10852:33:0;;;;;;;10583:310;;;:::o;17474:1783::-;17553:4;-1:-1:-1;;;;;17578:18:0;;17570:68;;;;-1:-1:-1;;;17570:68:0;;22430:2:1;17570:68:0;;;22412:21:1;22469:2;22449:18;;;22442:30;22508:34;22488:18;;;22481:62;-1:-1:-1;;;22559:18:1;;;22552:35;22604:19;;17570:68:0;22228:401:1;17570:68:0;-1:-1:-1;;;;;17657:16:0;;17649:64;;;;-1:-1:-1;;;17649:64:0;;22836:2:1;17649:64:0;;;22818:21:1;22875:2;22855:18;;;22848:30;22914:34;22894:18;;;22887:62;-1:-1:-1;;;22965:18:1;;;22958:33;23008:19;;17649:64:0;22634:399:1;17649:64:0;17741:1;17732:6;:10;17724:64;;;;-1:-1:-1;;;17724:64:0;;23240:2:1;17724:64:0;;;23222:21:1;23279:2;23259:18;;;23252:30;23318:34;23298:18;;;23291:62;-1:-1:-1;;;23369:18:1;;;23362:39;23418:19;;17724:64:0;23038:405:1;17724:64:0;-1:-1:-1;;;;;17887:13:0;;17799:8;17887:13;;;:7;:13;;;;;;17799:8;;;;17887:13;;17883:162;;;17923:4;17917:10;;17883:162;;;-1:-1:-1;;;;;17949:11:0;;;;;;:7;:11;;;;;;;;17945:100;;;17984:4;17977:11;;17945:100;;;-1:-1:-1;18029:4:0;17945:100;18059:20;18070:4;18076:2;18059:10;:20::i;:::-;18055:371;;;18100:14;;;;18096:319;;18140:5;18135:265;;18170:34;;-1:-1:-1;;;18170:34:0;;23650:2:1;18170:34:0;;;23632:21:1;23689:2;23669:18;;;23662:30;23728:26;23708:18;;;23701:54;23772:18;;18170:34:0;23448:348:1;18135:265:0;-1:-1:-1;;;;;18235:31:0;;;;;;:25;:31;;;;;;;;18234:32;:66;;;;-1:-1:-1;;;;;;18271:29:0;;;;;;:25;:29;;;;;;;;18270:30;18234:66;18230:170;;;18325:55;;-1:-1:-1;;;18325:55:0;;24003:2:1;18325:55:0;;;23985:21:1;24042:2;24022:18;;;24015:30;24081:34;24061:18;;;24054:62;-1:-1:-1;;;24132:18:1;;;24125:43;24185:19;;18325:55:0;23801:409:1;18230:170:0;18442:4;18438:742;;;18468:6;;-1:-1:-1;;;18468:6:0;;;;18463:706;;18499:19;;-1:-1:-1;;;18499:19:0;;;;:64;;;;-1:-1:-1;;;;;;18543:20:0;;;;;;:16;:20;;;;;;;;18542:21;18499:64;:111;;;;-1:-1:-1;;;;;;18588:22:0;;;;;;:16;:22;;;;;;;;18587:23;18499:111;18495:659;;;18702:4;18653:28;10209:16;;;;;;;;;;;18759:13;;18735:37;;18731:404;;18819:10;;18860:22;;;;18856:97;;;18917:13;;18907:6;;-1:-1:-1;;;;;18907:6:0;10182:7;10209:16;;;;;;;;;;;5189:5;;18897:33;;;:::i;:::-;18896:54;;;;:::i;:::-;18886:64;;18856:97;19007:7;18983:20;:31;18979:72;;19041:7;19018:30;;18979:72;19077:34;19090:20;19077:12;:34::i;:::-;18774:361;18731:404;18630:524;18495:659;19197:52;19214:4;19220:2;19224:6;19232:3;19237:4;19243:5;19197:16;:52::i;:::-;19190:59;17474:1783;-1:-1:-1;;;;;;;17474:1783:0:o;22299:817::-;-1:-1:-1;;;;;22469:25:0;;22418:4;22469:25;;;:19;:25;;;;;;22450:4;;22469:25;;;:52;;-1:-1:-1;;;;;;22498:23:0;;;;;;:19;:23;;;;;;;;22469:52;22465:99;;;-1:-1:-1;22547:5:0;22465:99;-1:-1:-1;;;;;22574:13:0;;:7;:13;;;;;;;;;;:23;;22591:6;;22574:7;:23;;22591:6;;22574:23;:::i;:::-;;;;-1:-1:-1;22608:22:0;;-1:-1:-1;22634:7:0;22633:55;;22682:6;22633:55;;;22645:34;22655:4;22661:6;22669:3;22674:4;22645:9;:34::i;:::-;22608:80;;22714:14;22699:7;:11;22707:2;-1:-1:-1;;;;;22699:11:0;-1:-1:-1;;;;;22699:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;22759:2;-1:-1:-1;;;;;22744:34:0;22753:4;-1:-1:-1;;;;;22744:34:0;;22763:14;22744:34;;;;391:25:1;;379:2;364:18;;245:177;22744:34:0;;;;;;;;22794:16;;;;;;;22789:298;;22827:28;22846:4;22852:2;22827:18;:28::i;:::-;22875:16;;;;;;;22874:17;:41;;;;;22895:20;22906:4;22912:2;22895:10;:20::i;:::-;22874:77;;;;-1:-1:-1;;;;;;22920:31:0;;;;;;:25;:31;;;;;;;;22919:32;22874:77;:111;;;;-1:-1:-1;;;;;;22956:29:0;;;;;;:25;:29;;;;;;;;22955:30;22874:111;:121;;;;;22990:5;22989:6;22874:121;22870:206;;;23016:44;;-1:-1:-1;;;23016:44:0;;24417:2:1;23016:44:0;;;24399:21:1;24456:2;24436:18;;;24429:30;24495:34;24475:18;;;24468:62;-1:-1:-1;;;24546:18:1;;;24539:32;24588:19;;23016:44:0;24215:398:1;22870:206:0;-1:-1:-1;23104:4:0;;22299:817;-1:-1:-1;;;;;;;;22299:817:0:o;17020:446::-;17121:6;;17089:4;;-1:-1:-1;;;;;17113:14:0;;;17121:6;;17113:14;;;;:43;;-1:-1:-1;17150:6:0;;-1:-1:-1;;;;;17144:12:0;;;17150:6;;17144:12;;17113:43;:79;;;;-1:-1:-1;17186:6:0;;-1:-1:-1;;;;;17186:6:0;17173:9;:19;;17113:79;:118;;;;-1:-1:-1;;;;;;17210:21:0;;;;;;:17;:21;;;;;;;;17209:22;17113:118;:159;;;;-1:-1:-1;;;;;;17249:23:0;;;;;;:17;:23;;;;;;;;17248:24;17113:159;:186;;;;-1:-1:-1;;;;;;17289:10:0;;5328:42;17289:10;;17113:186;:219;;;;-1:-1:-1;;;;;;17316:16:0;;;;17113:219;:257;;;;-1:-1:-1;;;;;;17349:21:0;;17365:4;17349:21;;17113:257;:302;;;;-1:-1:-1;17403:11:0;;-1:-1:-1;;;;;17387:28:0;;;17403:11;;;;;17387:28;;17113:302;:345;;;;-1:-1:-1;17446:11:0;;-1:-1:-1;;;;;17432:26:0;;;17446:11;;;;;17432:26;;17113:345;17106:352;17020:446;-1:-1:-1;;;17020:446:0:o;19265:761::-;5999:6;:13;;-1:-1:-1;;;;5999:13:0;-1:-1:-1;;;5999:13:0;;;19372:4:::1;5999:13:::0;19352:26;;;:11:::1;:26;::::0;;;;;;;19387:9:::1;::::0;5999:13;19387:9;::::1;-1:-1:-1::0;;;;;19387:9:0::1;19352:46:::0;;;;;;;;-1:-1:-1;;19352:67:0::1;19348:166;;19456:4;19436:26;::::0;;;:11:::1;:26;::::0;;;;;;;19471:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;19471:9:0::1;19436:46:::0;;;;;;;-1:-1:-1;;19436:66:0;;19348:166:::1;19558:16;::::0;;19572:1:::1;19558:16:::0;;;;;::::1;::::0;;19534:21:::1;::::0;19558:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19558:16:0::1;19534:40;;19603:4;19585;19590:1;19585:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;19585:23:0::1;;;-1:-1:-1::0;;;;;19585:23:0::1;;;::::0;::::1;19629:9;;;;;;;;;-1:-1:-1::0;;;;;19629:9:0::1;-1:-1:-1::0;;;;;19629:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19619:4;19624:1;19619:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19619:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;19662:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;19662:199:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;19737:20;;19772:1:::1;::::0;19788:4;;19815::::1;::::0;19835:15:::1;::::0;19662:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;19658:246;;19886:7;;;19658:246;19952:15;::::0;:66:::1;::::0;19916:12:::1;::::0;-1:-1:-1;;;;;19952:15:0::1;::::0;20008:5:::1;::::0;19980:21:::1;::::0;19916:12;19952:66;19916:12;19952:66;19980:21;19952:15;20008:5;19952:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6023:1:0::1;-1:-1:-1::0;6035:6:0;:14;;-1:-1:-1;;;;6035:14:0;;;19265:761::o;23124:767::-;23212:7;23232:18;23265:3;23261:205;;;-1:-1:-1;23298:9:0;:16;;;23261:205;;;23336:4;23332:134;;;-1:-1:-1;23370:9:0;:17;;;;;;23332:134;;;-1:-1:-1;23433:9:0;:21;;;;;;23332:134;23480:10;23494:1;23480:15;23476:39;;23506:6;23499:13;;;;;23476:39;23537:11;;;;;-1:-1:-1;;;;;23537:11:0;23561:4;23529:37;:73;;;;;23583:13;23600:2;23583:19;;23529:73;23525:101;;;-1:-1:-1;23619:4:0;23525:101;23636:17;5189:5;23656:19;23665:10;23656:6;:19;:::i;:::-;:38;;;;:::i;:::-;23636:58;-1:-1:-1;23709:13:0;;23705:141;;23755:4;23739:7;:22;;;;;;;;;;:35;;23765:9;;23739:7;:35;;23765:9;;23739:35;:::i;:::-;;;;-1:-1:-1;;23794:40:0;;391:25:1;;;23817:4:0;;-1:-1:-1;;;;;23794:40:0;;;;;379:2:1;364:18;23794:40:0;;;;;;;23705:141;23865:18;23874:9;23865:6;:18;:::i;20034:563::-;20117:16;;;;;;;20116:17;20108:65;;;;-1:-1:-1;;;20108:65:0;;26061:2:1;20108:65:0;;;26043:21:1;26100:2;26080:18;;;26073:30;26139:34;26119:18;;;26112:62;-1:-1:-1;;;26190:18:1;;;26183:33;26233:19;;20108:65:0;25859:399:1;20108:65:0;20189:20;20200:4;20206:2;20189:10;:20::i;:::-;20188:21;:37;;;;-1:-1:-1;20219:6:0;;-1:-1:-1;;;;;20213:12:0;;;20219:6;;20213:12;20188:37;20184:406;;;-1:-1:-1;;;;;20242:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;20242:30:0;;;20268:4;20242:30;;;;;;20287:19;:25;;;;;:32;;;;;;;;;;20334:16;:23;;-1:-1:-1;;20334:23:0;20242:30;20334:23;;;;;20384:11;;;;20372:114;;20430:11;:40;;-1:-1:-1;;;;;;20430:40:0;20464:4;20430:40;;;;;20372:114;20500:19;:26;;-1:-1:-1;;;;20500:26:0;-1:-1:-1;;;20500:26:0;;;20546:32;;-1:-1:-1;1738:41:1;;20546:32:0;;1726:2:1;1711:18;20546:32:0;1598:187:1;797:548;909:4;938:2;967;956:9;949:21;999:6;993:13;1042:6;1037:2;1026:9;1022:18;1015:34;1067:1;1077:140;1091:6;1088:1;1085:13;1077:140;;;1186:14;;;1182:23;;1176:30;1152:17;;;1171:2;1148:26;1141:66;1106:10;;1077:140;;;1081:3;1266:1;1261:2;1252:6;1241:9;1237:22;1233:31;1226:42;1336:2;1329;1325:7;1320:2;1312:6;1308:15;1304:29;1293:9;1289:45;1285:54;1277:62;;;;797:548;;;;:::o;1790:154::-;-1:-1:-1;;;;;1869:5:1;1865:54;1858:5;1855:65;1845:93;;1934:1;1931;1924:12;1949:315;2017:6;2025;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;2133:9;2120:23;2152:31;2177:5;2152:31;:::i;:::-;2202:5;2254:2;2239:18;;;;2226:32;;-1:-1:-1;;;1949:315:1:o;2269:247::-;2328:6;2381:2;2369:9;2360:7;2356:23;2352:32;2349:52;;;2397:1;2394;2387:12;2349:52;2436:9;2423:23;2455:31;2480:5;2455:31;:::i;2521:388::-;2589:6;2597;2650:2;2638:9;2629:7;2625:23;2621:32;2618:52;;;2666:1;2663;2656:12;2618:52;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;-1:-1:-1;2831:2:1;2816:18;;2803:32;2844:33;2803:32;2844:33;:::i;:::-;2896:7;2886:17;;;2521:388;;;;;:::o;2914:456::-;2991:6;2999;3007;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3115:9;3102:23;3134:31;3159:5;3134:31;:::i;:::-;3184:5;-1:-1:-1;3241:2:1;3226:18;;3213:32;3254:33;3213:32;3254:33;:::i;:::-;2914:456;;3306:7;;-1:-1:-1;;;3360:2:1;3345:18;;;;3332:32;;2914:456::o;3375:127::-;3436:10;3431:3;3427:20;3424:1;3417:31;3467:4;3464:1;3457:15;3491:4;3488:1;3481:15;3507:275;3578:2;3572:9;3643:2;3624:13;;-1:-1:-1;;3620:27:1;3608:40;;3678:18;3663:34;;3699:22;;;3660:62;3657:88;;;3725:18;;:::i;:::-;3761:2;3754:22;3507:275;;-1:-1:-1;3507:275:1:o;3787:183::-;3847:4;3880:18;3872:6;3869:30;3866:56;;;3902:18;;:::i;:::-;-1:-1:-1;3947:1:1;3943:14;3959:4;3939:25;;3787:183::o;3975:662::-;4029:5;4082:3;4075:4;4067:6;4063:17;4059:27;4049:55;;4100:1;4097;4090:12;4049:55;4136:6;4123:20;4162:4;4186:60;4202:43;4242:2;4202:43;:::i;:::-;4186:60;:::i;:::-;4280:15;;;4366:1;4362:10;;;;4350:23;;4346:32;;;4311:12;;;;4390:15;;;4387:35;;;4418:1;4415;4408:12;4387:35;4454:2;4446:6;4442:15;4466:142;4482:6;4477:3;4474:15;4466:142;;;4548:17;;4536:30;;4586:12;;;;4499;;4466:142;;;-1:-1:-1;4626:5:1;3975:662;-1:-1:-1;;;;;;3975:662:1:o;4642:1215::-;4760:6;4768;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4877:9;4864:23;4906:18;4947:2;4939:6;4936:14;4933:34;;;4963:1;4960;4953:12;4933:34;5001:6;4990:9;4986:22;4976:32;;5046:7;5039:4;5035:2;5031:13;5027:27;5017:55;;5068:1;5065;5058:12;5017:55;5104:2;5091:16;5126:4;5150:60;5166:43;5206:2;5166:43;:::i;5150:60::-;5244:15;;;5326:1;5322:10;;;;5314:19;;5310:28;;;5275:12;;;;5350:19;;;5347:39;;;5382:1;5379;5372:12;5347:39;5406:11;;;;5426:217;5442:6;5437:3;5434:15;5426:217;;;5522:3;5509:17;5539:31;5564:5;5539:31;:::i;:::-;5583:18;;5459:12;;;;5621;;;;5426:217;;;5662:5;-1:-1:-1;;5705:18:1;;5692:32;;-1:-1:-1;;5736:16:1;;;5733:36;;;5765:1;5762;5755:12;5733:36;;5788:63;5843:7;5832:8;5821:9;5817:24;5788:63;:::i;:::-;5778:73;;;4642:1215;;;;;:::o;6051:159::-;6118:20;;6178:6;6167:18;;6157:29;;6147:57;;6200:1;6197;6190:12;6147:57;6051:159;;;:::o;6215:328::-;6289:6;6297;6305;6358:2;6346:9;6337:7;6333:23;6329:32;6326:52;;;6374:1;6371;6364:12;6326:52;6397:28;6415:9;6397:28;:::i;:::-;6387:38;;6444:37;6477:2;6466:9;6462:18;6444:37;:::i;:::-;6434:47;;6500:37;6533:2;6522:9;6518:18;6500:37;:::i;:::-;6490:47;;6215:328;;;;;:::o;6548:180::-;6607:6;6660:2;6648:9;6639:7;6635:23;6631:32;6628:52;;;6676:1;6673;6666:12;6628:52;-1:-1:-1;6699:23:1;;6548:180;-1:-1:-1;6548:180:1:o;6733:118::-;6819:5;6812:13;6805:21;6798:5;6795:32;6785:60;;6841:1;6838;6831:12;6856:382;6921:6;6929;6982:2;6970:9;6961:7;6957:23;6953:32;6950:52;;;6998:1;6995;6988:12;6950:52;7037:9;7024:23;7056:31;7081:5;7056:31;:::i;:::-;7106:5;-1:-1:-1;7163:2:1;7148:18;;7135:32;7176:30;7135:32;7176:30;:::i;7490:376::-;7552:6;7560;7613:2;7601:9;7592:7;7588:23;7584:32;7581:52;;;7629:1;7626;7619:12;7581:52;7668:9;7655:23;7687:28;7709:5;7687:28;:::i;8131:385::-;8217:6;8225;8233;8241;8294:3;8282:9;8273:7;8269:23;8265:33;8262:53;;;8311:1;8308;8301:12;8262:53;-1:-1:-1;;8334:23:1;;;8404:2;8389:18;;8376:32;;-1:-1:-1;8455:2:1;8440:18;;8427:32;;8506:2;8491:18;8478:32;;-1:-1:-1;8131:385:1;-1:-1:-1;8131:385:1:o;9207:127::-;9268:10;9263:3;9259:20;9256:1;9249:31;9299:4;9296:1;9289:15;9323:4;9320:1;9313:15;9339:422;9428:1;9471:5;9428:1;9485:270;9506:7;9496:8;9493:21;9485:270;;;9565:4;9561:1;9557:6;9553:17;9547:4;9544:27;9541:53;;;9574:18;;:::i;:::-;9624:7;9614:8;9610:22;9607:55;;;9644:16;;;;9607:55;9723:22;;;;9683:15;;;;9485:270;;;9489:3;9339:422;;;;;:::o;9766:806::-;9815:5;9845:8;9835:80;;-1:-1:-1;9886:1:1;9900:5;;9835:80;9934:4;9924:76;;-1:-1:-1;9971:1:1;9985:5;;9924:76;10016:4;10034:1;10029:59;;;;10102:1;10097:130;;;;10009:218;;10029:59;10059:1;10050:10;;10073:5;;;10097:130;10134:3;10124:8;10121:17;10118:43;;;10141:18;;:::i;:::-;-1:-1:-1;;10197:1:1;10183:16;;10212:5;;10009:218;;10311:2;10301:8;10298:16;10292:3;10286:4;10283:13;10279:36;10273:2;10263:8;10260:16;10255:2;10249:4;10246:12;10242:35;10239:77;10236:159;;;-1:-1:-1;10348:19:1;;;10380:5;;10236:159;10427:34;10452:8;10446:4;10427:34;:::i;:::-;10497:6;10493:1;10489:6;10485:19;10476:7;10473:32;10470:58;;;10508:18;;:::i;:::-;10546:20;;9766:806;-1:-1:-1;;;9766:806:1:o;10577:140::-;10635:5;10664:47;10705:4;10695:8;10691:19;10685:4;10664:47;:::i;10722:168::-;10795:9;;;10826;;10843:15;;;10837:22;;10823:37;10813:71;;10864:18;;:::i;10895:128::-;10962:9;;;10983:11;;;10980:37;;;10997:18;;:::i;11378:127::-;11439:10;11434:3;11430:20;11427:1;11420:31;11470:4;11467:1;11460:15;11494:4;11491:1;11484:15;11857:197;11895:3;11923:6;11964:2;11957:5;11953:14;11991:2;11982:7;11979:15;11976:41;;11997:18;;:::i;:::-;12046:1;12033:15;;11857:197;-1:-1:-1;;;11857:197:1:o;12059:125::-;12124:9;;;12145:10;;;12142:36;;;12158:18;;:::i;13296:217::-;13336:1;13362;13352:132;;13406:10;13401:3;13397:20;13394:1;13387:31;13441:4;13438:1;13431:15;13469:4;13466:1;13459:15;13352:132;-1:-1:-1;13498:9:1;;13296:217::o;14642:385::-;14721:6;14729;14782:2;14770:9;14761:7;14757:23;14753:32;14750:52;;;14798:1;14795;14788:12;14750:52;14830:9;14824:16;14849:31;14874:5;14849:31;:::i;:::-;14949:2;14934:18;;14928:25;14899:5;;-1:-1:-1;14962:33:1;14928:25;14962:33;:::i;17656:245::-;17735:6;17743;17796:2;17784:9;17775:7;17771:23;17767:32;17764:52;;;17812:1;17809;17802:12;17764:52;-1:-1:-1;;17835:16:1;;17891:2;17876:18;;;17870:25;17835:16;;17870:25;;-1:-1:-1;17656:245:1:o;18262:184::-;18332:6;18385:2;18373:9;18364:7;18360:23;18356:32;18353:52;;;18401:1;18398;18391:12;18353:52;-1:-1:-1;18424:16:1;;18262:184;-1:-1:-1;18262:184:1:o;18753:245::-;18820:6;18873:2;18861:9;18852:7;18848:23;18844:32;18841:52;;;18889:1;18886;18879:12;18841:52;18921:9;18915:16;18940:28;18962:5;18940:28;:::i;19362:251::-;19432:6;19485:2;19473:9;19464:7;19460:23;19456:32;19453:52;;;19501:1;19498;19491:12;19453:52;19533:9;19527:16;19552:31;19577:5;19552:31;:::i;24618:1026::-;24880:4;24928:3;24917:9;24913:19;24959:6;24948:9;24941:25;24985:2;25023:6;25018:2;25007:9;25003:18;24996:34;25066:3;25061:2;25050:9;25046:18;25039:31;25090:6;25125;25119:13;25156:6;25148;25141:22;25194:3;25183:9;25179:19;25172:26;;25233:2;25225:6;25221:15;25207:29;;25254:1;25264:218;25278:6;25275:1;25272:13;25264:218;;;25343:13;;-1:-1:-1;;;;;25339:62:1;25327:75;;25457:15;;;;25422:12;;;;25300:1;25293:9;25264:218;;;-1:-1:-1;;;;;;;25538:55:1;;;;25533:2;25518:18;;25511:83;-1:-1:-1;;;25625:3:1;25610:19;25603:35;25499:3;24618:1026;-1:-1:-1;;;24618:1026:1:o

Swarm Source

ipfs://d8331e4dc453e00f8ead6edafa979aa6ebe864f4fb6b90df88fbf92c60c7bba8

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.