ETH Price: $2,424.38 (+2.17%)

Contract

0x24a48CB226f50C4a029270Ab5F7766125FB66577
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve169436502023-03-31 0:34:23524 days ago1680222863IN
0x24a48CB2...25FB66577
0 ETH0.0012205125.87875534
Update Fees169435992023-03-31 0:24:11524 days ago1680222251IN
0x24a48CB2...25FB66577
0 ETH0.0023150622.86728744
Update Fees169435722023-03-31 0:18:47524 days ago1680221927IN
0x24a48CB2...25FB66577
0 ETH0.0010813324.23696513
Approve169435192023-03-31 0:08:11524 days ago1680221291IN
0x24a48CB2...25FB66577
0 ETH0.0012643926.80913234
Approve169435162023-03-31 0:07:35524 days ago1680221255IN
0x24a48CB2...25FB66577
0 ETH0.0012623226.76508027
Update Fees169435042023-03-31 0:05:11524 days ago1680221111IN
0x24a48CB2...25FB66577
0 ETH0.0019945125.40303631
Update Max Walle...169434962023-03-31 0:03:35524 days ago1680221015IN
0x24a48CB2...25FB66577
0 ETH0.000862327.46187264
Update Max Txn A...169434922023-03-31 0:02:47524 days ago1680220967IN
0x24a48CB2...25FB66577
0 ETH0.0010447627.99404404
Update Fees169434742023-03-30 23:59:11524 days ago1680220751IN
0x24a48CB2...25FB66577
0 ETH0.0012699625.29663761
Update Fees169434632023-03-30 23:56:59524 days ago1680220619IN
0x24a48CB2...25FB66577
0 ETH0.0020496229.23727258
Update Fees169434392023-03-30 23:51:59524 days ago1680220319IN
0x24a48CB2...25FB66577
0 ETH0.001676230.04430124
Approve169433942023-03-30 23:42:47524 days ago1680219767IN
0x24a48CB2...25FB66577
0 ETH0.0014987131.77744874
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Approve169433922023-03-30 23:42:23524 days ago1680219743IN
0x24a48CB2...25FB66577
0 ETH0.0014082129.85842064
Pulseheart169433912023-03-30 23:42:11524 days ago1680219731IN
0x24a48CB2...25FB66577
0 ETH0.0013620529.64724163
0x60c06040169432052023-03-30 23:04:11524 days ago1680217451IN
 Create: PulseHeartSwap
0 ETH0.199325528.99418887

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PulseHeartSwap

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-31
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
// Welcome to HeartSwap - $HRTS - the leading decentralized exchange on the Pulse Chain!
// https://www.pulseheartswap.com
// https://twitter.com/PulseHeartSwap
// https://t.me/PulseHeartSwap

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IERC20 {

    function totalSupply() external view returns(uint256);


    function balanceOf(address account) external view returns(uint256);


    function transfer(address recipient, uint256 amount) external returns(bool);

  
    function allowance(address owner, address spender) external view returns(uint256);


    function approve(address spender, uint256 amount) external returns(bool);

 
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);

     
        event Transfer(address indexed from, address indexed to, uint256 value);

     
        event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
  
    function name() external view returns(string memory);


    function symbol() external view returns(string memory);


    function decimals() external view returns(uint8);
}

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

}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;


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

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


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


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

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

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

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


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


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


    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }


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


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }


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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
  
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }


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

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


    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);


    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }


    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }


    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

 
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

interface IUniswapV2Router01 {
    function factory() external pure returns(address);
    function WETH() external pure returns(address);

    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    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 IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract PulseHeartSwap is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;

    // addresses
    address private developmentWallet;
    address private treasuryWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;

    struct Fees {
        uint256 buyTotalFees;
        uint256 buyTreasuryFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellTreasuryFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyTreasuryFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellTreasuryFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    mapping(address => bool) public marketPair;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("Heart Swap", "HRTS") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(0xdead)] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);

        uint256 totalSupply = 1000000000 * 1e18;
        maxBuyAmount = totalSupply  / 100; // 1% maxBuyAmount
        maxSellAmount = totalSupply / 100; // 1% maxSellAmount
        maxWalletAmount = totalSupply / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 1000; 

        _fees.buyTreasuryFee = 95;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevelopmentFee = 0;
        _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellTreasuryFee = 95;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevelopmentFee = 0;
        _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;

        treasuryWallet = address(0x140A58f275629dA5868fA8985bD6F23Dfaef3886);
        developmentWallet = address(0xABC8aE23b2239144d7E4FEfFFCFc48C576aA216d);

       
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // ENABLE TRADING FOR HEARTSWAP. IT CAN'T BE TURNED OFF! 
    function pulseheart() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
    }


    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) public onlyOwner {
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint256 _treasuryFeeBuy, uint256 _liquidityFeeBuy,uint256 _developmentFeeBuy,uint256 _treasuryFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner {
        _fees.buyTreasuryFee = _treasuryFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevelopmentFee = _developmentFeeBuy;
        _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellTreasuryFee = _treasuryFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevelopmentFee = _developmentFeeSell;
        _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function removeLimits() external onlyOwner {
        updateMaxTxnAmount(1000,1000);
        updateMaxWalletAmount(1000);
    }

    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }

    function setWallets(address _treasuryWallet,address _developmentWallet) external onlyOwner{
        treasuryWallet = _treasuryWallet;
        developmentWallet = _developmentWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }

        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        if (takeFee) {
            uint256 fees = 0;
           if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForTreasury += fees * _fees.sellTreasuryFee / _fees.sellTotalFees;
                tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForTreasury += fees * _fees.buyTreasuryFee / _fees.buyTotalFees;
                tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

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

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForTreasury + tokensForDevelopment;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForTreasury = newBalance.mul(tokensForTreasury).div(toSwap);
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForTreasury + ethForDevelopment);


        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForDevelopment = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(developmentWallet).call{ value: (address(this).balance - ethForTreasury) } ("");
        (success,) = address(treasuryWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pulseheart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600a81526020017f48656172742053776170000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f485254530000000000000000000000000000000000000000000000000000000081525081600390805190602001906200016292919062000dfb565b5080600490805190602001906200017b92919062000dfb565b50505060006200019062000ab060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000f15565b6040518363ffffffff1660e01b8152600401620003ba92919062000f58565b602060405180830381600087803b158015620003d557600080fd5b505af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016019600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200050d62000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860006200062662000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000620006e562000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008d06080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ae260201b60201c565b5060006b033b2e3c9fd0803ce80000009050606481620008f1919062000fed565b60088190555060648162000906919062000fed565b6009819055506064816200091b919062000fed565b600a819055506103e860018262000933919062001025565b6200093f919062000fed565b600b81905550605f600d600101819055506000600d600301819055506000600d60020181905550600d60020154600d60030154600d6001015462000984919062001086565b62000990919062001086565b600d60000181905550605f600d600501819055506000600d600701819055506000600d60060181905550600d60060154600d60070154600d60050154620009d8919062001086565b620009e4919062001086565b600d6004018190555073140a58f275629da5868fa8985bd6f23dfaef3886600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073abc8ae23b2239144d7e4fefffcfc48c576aa216d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000aa9338262000b1060201b60201c565b506200126b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000b0662000af862000ab060201b60201c565b848462000cab60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7a9062001144565b60405180910390fd5b62000b9f8160025462000d9860201b62001da61790919060201c565b60028190555062000bfd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d9860201b62001da61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c9f919062001177565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d8b919062001177565b60405180910390a3505050565b600080828462000da9919062001086565b90508381101562000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de890620011e4565b60405180910390fd5b8091505092915050565b82805462000e099062001235565b90600052602060002090601f01602090048101928262000e2d576000855562000e79565b82601f1062000e4857805160ff191683800117855562000e79565b8280016001018555821562000e79579182015b8281111562000e7857825182559160200191906001019062000e5b565b5b50905062000e88919062000e8c565b5090565b5b8082111562000ea757600081600090555060010162000e8d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000edd8262000eb0565b9050919050565b62000eef8162000ed0565b811462000efb57600080fd5b50565b60008151905062000f0f8162000ee4565b92915050565b60006020828403121562000f2e5762000f2d62000eab565b5b600062000f3e8482850162000efe565b91505092915050565b62000f528162000ed0565b82525050565b600060408201905062000f6f600083018562000f47565b62000f7e602083018462000f47565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffa8262000f85565b9150620010078362000f85565b9250826200101a576200101962000f8f565b5b828204905092915050565b6000620010328262000f85565b91506200103f8362000f85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200107b576200107a62000fbe565b5b828202905092915050565b6000620010938262000f85565b9150620010a08362000f85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d857620010d762000fbe565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200112c601f83620010e3565b91506200113982620010f4565b602082019050919050565b600060208201905081810360008301526200115f816200111d565b9050919050565b620011718162000f85565b82525050565b60006020820190506200118e600083018462001166565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011cc601b83620010e3565b9150620011d98262001194565b602082019050919050565b60006020820190508181036000830152620011ff81620011bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200124e57607f821691505b6020821081141562001265576200126462001206565b5b50919050565b60805160a0516141a7620012bb60003960008181610d38015261171b015260008181611d8401528181612edc01528181612fcc01528181612ff30152818161308f01526130b601526141a76000f3fe6080604052600436106102295760003560e01c806395d89b4111610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a7691701116100f2578063a769170114610684578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b806395d89b41146105b657806396880b17146105e1578063992c58e41461061e578063a457c2d71461064757610230565b806339509351116101b157806370a082311161017557806370a08231146104f7578063715018a614610534578063751039fc1461054b5780637571336a146105625780638da5cb5b1461058b57610230565b806339509351146103ea57806349bd5a5e146104275780634fbee19314610452578063555467a11461048f5780636ddd1713146104cc57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b604051610257919061326e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613329565b6109b8565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061339f565b6109d6565b6040516102d19190613384565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133cc565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061341b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061341b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613462565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610ba1565b6040516103b69190613384565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e191906134fe565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613329565b610c83565b60405161041e9190613384565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b6040516104499190613528565b60405180910390f35b34801561045e57600080fd5b506104796004803603810190610474919061339f565b610d5a565b6040516104869190613384565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613543565b610db0565b6040516104c39190613384565b60405180910390f35b3480156104d857600080fd5b506104e1610e59565b6040516104ee9190613384565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061339f565b610e6c565b60405161052b919061341b565b60405180910390f35b34801561054057600080fd5b50610549610eb4565b005b34801561055757600080fd5b5061056061100c565b005b34801561056e57600080fd5b5061058960048036038101906105849190613570565b6110bc565b005b34801561059757600080fd5b506105a06111ae565b6040516105ad9190613528565b60405180910390f35b3480156105c257600080fd5b506105cb6111d8565b6040516105d8919061326e565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061339f565b61126a565b6040516106159190613384565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906135b0565b61128a565b005b34801561065357600080fd5b5061066e60048036038101906106699190613329565b6113c3565b60405161067b9190613384565b60405180910390f35b34801561069057600080fd5b50610699611490565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613329565b61155f565b6040516106cf9190613384565b60405180910390f35b3480156106e457600080fd5b506106ed61157d565b6040516106fa9190613384565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613570565b611590565b005b34801561073857600080fd5b50610753600480360381019061074e9190613570565b611682565b005b34801561076157600080fd5b5061077c60048036038101906107779190613543565b611803565b005b34801561078a57600080fd5b506107936118c3565b6040516107a0919061341b565b60405180910390f35b3480156107b557600080fd5b506107be6118c9565b6040516107d298979695949392919061363d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906136bb565b6118ff565b005b34801561081057600080fd5b5061082b600480360381019061082691906136bb565b611a1c565b604051610838919061341b565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613570565b611aa3565b005b34801561087657600080fd5b5061087f611b95565b60405161088c919061341b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061339f565b611b9b565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061339f565b611d62565b6040516108f29190613384565b60405180910390f35b34801561090757600080fd5b50610910611d82565b60405161091d919061375a565b60405180910390f35b606060038054610935906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906137a4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e04565b8484611e0c565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6109fe611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613822565b60405180910390fd5b6103e882610a99610add565b610aa39190613871565b610aad91906138fa565b6008819055506103e881610abf610add565b610ac99190613871565b610ad391906138fa565b6009819055505050565b6000600254905090565b60165481565b610af5611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613822565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611ef7565b610c6f84610bba611e04565b610c6a8560405180606001604052806028815260200161414a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b600190509392505050565b60006012905090565b6000610d2c610c90611e04565b84610d278560016000610ca1611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b611e0c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dba611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613822565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ebc611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611014611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90613822565b60405180910390fd5b6110af6103e8806109f6565b6110ba6103e8611803565b565b6110c4611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613822565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111e7906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611213906137a4565b80156112605780601f1061123557610100808354040283529160200191611260565b820191906000526020600020905b81548152906001019060200180831161124357829003601f168201915b5050505050905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b611292611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890613822565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461135b919061392b565b611365919061392b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546113a8919061392b565b6113b2919061392b565b600d60040181905550505050505050565b60006114866113d0611e04565b84611481856040518060600160405280602581526020016140ff60259139600160006113fa611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b6001905092915050565b611498611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613822565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b600061157361156c611e04565b8484611ef7565b6001905092915050565b600c60029054906101000a900460ff1681565b611598611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613822565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613822565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906139f3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61180b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613822565b60405180910390fd5b6103e8816118a6610add565b6118b09190613871565b6118ba91906138fa565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611907611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613822565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611aab611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613822565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611ba3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613a85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611db5919061392b565b905083811015611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613af1565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611eea919061341b565b60405180910390a3505050565b6000811415611f1157611f0c83836000612896565b61282d565b611f196111ae565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f875750611f576111ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa05750600c60029054906101000a900460ff16155b1561232657600c60009054906101000a900460ff1661209a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061205a5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613b5d565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561218c57600854811115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90613bef565b60405180910390fd5b61227b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561222f5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227a57600954811115612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613c81565b60405180910390fd5b5b5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661232557600a546122d883610e6c565b826122e3919061392b565b1115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613ced565b60405180910390fd5b5b5b600061233130610e6c565b90506000600b5482101590508080156123565750600c60019054906101000a900460ff165b801561236f5750600c60029054906101000a900460ff16155b80156123c45750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561241a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124705750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b4576001600c60026101000a81548160ff021916908315150217905550612498612a40565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257457600090505b801561281e576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125da57506000600d60040154115b156126bc5761260a60646125fc600d6004015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60040154600d60070154826126239190613871565b61262d91906138fa565b6016600082825461263e919061392b565b92505081905550600d60040154600d600501548261265c9190613871565b61266691906138fa565b60156000828254612677919061392b565b92505081905550600d60040154600d60060154826126959190613871565b61269f91906138fa565b601760008282546126b0919061392b565b925050819055506127f9565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271a57506000600d60000154115b156127f85761274a606461273c600d6000015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60000154600d60030154826127639190613871565b61276d91906138fa565b6016600082825461277e919061392b565b92505081905550600d60000154600d600101548261279c9190613871565b6127a691906138fa565b601560008282546127b7919061392b565b92505081905550600d60000154600d60020154826127d59190613871565b6127df91906138fa565b601760008282546127f0919061392b565b925050819055505b5b600081111561280e5761280d873083612896565b5b808561281a9190613d0d565b9450505b612829868686612896565b5050505b505050565b600083831115829061287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871919061326e565b60405180910390fd5b50600083856128899190613d0d565b9050809150509392505050565b61290181604051806060016040528060268152602001614124602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612994816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a33919061341b565b60405180910390a3505050565b6000612a4b30610e6c565b90506000601754601554601654612a62919061392b565b612a6c919061392b565b9050600080831480612a7e5750600082145b15612a8b57505050612d2c565b6014600b54612a9a9190613871565b831115612ab3576014600b54612ab09190613871565b92505b600060028360165486612ac69190613871565b612ad091906138fa565b612ada91906138fa565b90506000612af18286612df390919063ffffffff16565b90506000479050612b0182612e3d565b6000612b168247612df390919063ffffffff16565b90506000612b4187612b3360155485612d2e90919063ffffffff16565b612da990919063ffffffff16565b90506000612b6c88612b5e60175486612d2e90919063ffffffff16565b612da990919063ffffffff16565b905060008183612b7c919061392b565b84612b879190613d0d565b9050600060168190555060006015819055506000601781905550600087118015612bb15750600081115b15612bfa57612bc08782613089565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612bf1929190613d41565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612c3f9190613d0d565b604051612c4b90613d9b565b60006040518083038185875af1925050503d8060008114612c88576040519150601f19603f3d011682016040523d82523d6000602084013e612c8d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cd990613d9b565b60006040518083038185875af1925050503d8060008114612d16576040519150601f19603f3d011682016040523d82523d6000602084013e612d1b565b606091505b505080985050505050505050505050505b565b600080831415612d415760009050612da3565b60008284612d4f9190613871565b9050828482612d5e91906138fa565b14612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613e22565b60405180910390fd5b809150505b92915050565b6000612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613172565b905092915050565b6000612e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612832565b905092915050565b6000600267ffffffffffffffff811115612e5a57612e59613e42565b5b604051908082528060200260200182016040528015612e885781602001602082028036833780820191505090505b5090503081600081518110612ea057612e9f613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4057600080fd5b505afa158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f789190613eb5565b81600181518110612f8c57612f8b613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ff1307f000000000000000000000000000000000000000000000000000000000000000084611e0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613053959493929190613fdb565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6130b4307f000000000000000000000000000000000000000000000000000000000000000084611e0c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161311996959493929190614035565b6060604051808303818588803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b91906140ab565b5050505050565b600080831182906131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b0919061326e565b60405180910390fd5b50600083856131c891906138fa565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613240826131d5565b61324a81856131e0565b935061325a8185602086016131f1565b61326381613224565b840191505092915050565b600060208201905081810360008301526132888184613235565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132c082613295565b9050919050565b6132d0816132b5565b81146132db57600080fd5b50565b6000813590506132ed816132c7565b92915050565b6000819050919050565b613306816132f3565b811461331157600080fd5b50565b600081359050613323816132fd565b92915050565b600080604083850312156133405761333f613290565b5b600061334e858286016132de565b925050602061335f85828601613314565b9150509250929050565b60008115159050919050565b61337e81613369565b82525050565b60006020820190506133996000830184613375565b92915050565b6000602082840312156133b5576133b4613290565b5b60006133c3848285016132de565b91505092915050565b600080604083850312156133e3576133e2613290565b5b60006133f185828601613314565b925050602061340285828601613314565b9150509250929050565b613415816132f3565b82525050565b6000602082019050613430600083018461340c565b92915050565b61343f81613369565b811461344a57600080fd5b50565b60008135905061345c81613436565b92915050565b60006020828403121561347857613477613290565b5b60006134868482850161344d565b91505092915050565b6000806000606084860312156134a8576134a7613290565b5b60006134b6868287016132de565b93505060206134c7868287016132de565b92505060406134d886828701613314565b9150509250925092565b600060ff82169050919050565b6134f8816134e2565b82525050565b600060208201905061351360008301846134ef565b92915050565b613522816132b5565b82525050565b600060208201905061353d6000830184613519565b92915050565b60006020828403121561355957613558613290565b5b600061356784828501613314565b91505092915050565b6000806040838503121561358757613586613290565b5b6000613595858286016132de565b92505060206135a68582860161344d565b9150509250929050565b60008060008060008060c087890312156135cd576135cc613290565b5b60006135db89828a01613314565b96505060206135ec89828a01613314565b95505060406135fd89828a01613314565b945050606061360e89828a01613314565b935050608061361f89828a01613314565b92505060a061363089828a01613314565b9150509295509295509295565b600061010082019050613653600083018b61340c565b613660602083018a61340c565b61366d604083018961340c565b61367a606083018861340c565b613687608083018761340c565b61369460a083018661340c565b6136a160c083018561340c565b6136ae60e083018461340c565b9998505050505050505050565b600080604083850312156136d2576136d1613290565b5b60006136e0858286016132de565b92505060206136f1858286016132de565b9150509250929050565b6000819050919050565b600061372061371b61371684613295565b6136fb565b613295565b9050919050565b600061373282613705565b9050919050565b600061374482613727565b9050919050565b61375481613739565b82525050565b600060208201905061376f600083018461374b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137bc57607f821691505b602082108114156137d0576137cf613775565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380c6020836131e0565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387c826132f3565b9150613887836132f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c0576138bf613842565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613905826132f3565b9150613910836132f3565b9250826139205761391f6138cb565b5b828204905092915050565b6000613936826132f3565b9150613941836132f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397657613975613842565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b60006139dd602a836131e0565b91506139e882613981565b604082019050919050565b60006020820190508181036000830152613a0c816139d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6f6026836131e0565b9150613a7a82613a13565b604082019050919050565b60006020820190508181036000830152613a9e81613a62565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613adb601b836131e0565b9150613ae682613aa5565b602082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b476016836131e0565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bd96035836131e0565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c6b6036836131e0565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cd76013836131e0565b9150613ce282613ca1565b602082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b6000613d18826132f3565b9150613d23836132f3565b925082821015613d3657613d35613842565b5b828203905092915050565b6000604082019050613d56600083018561340c565b613d63602083018461340c565b9392505050565b600081905092915050565b50565b6000613d85600083613d6a565b9150613d9082613d75565b600082019050919050565b6000613da682613d78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c6021836131e0565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613eaf816132c7565b92915050565b600060208284031215613ecb57613eca613290565b5b6000613ed984828501613ea0565b91505092915050565b6000819050919050565b6000613f07613f02613efd84613ee2565b6136fb565b6132f3565b9050919050565b613f1781613eec565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f52816132b5565b82525050565b6000613f648383613f49565b60208301905092915050565b6000602082019050919050565b6000613f8882613f1d565b613f928185613f28565b9350613f9d83613f39565b8060005b83811015613fce578151613fb58882613f58565b9750613fc083613f70565b925050600181019050613fa1565b5085935050505092915050565b600060a082019050613ff0600083018861340c565b613ffd6020830187613f0e565b818103604083015261400f8186613f7d565b905061401e6060830185613519565b61402b608083018461340c565b9695505050505050565b600060c08201905061404a6000830189613519565b614057602083018861340c565b6140646040830187613f0e565b6140716060830186613f0e565b61407e6080830185613519565b61408b60a083018461340c565b979650505050505050565b6000815190506140a5816132fd565b92915050565b6000806000606084860312156140c4576140c3613290565b5b60006140d286828701614096565b93505060206140e386828701614096565b92505060406140f486828701614096565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122096fc6d840abc6cb4d9893a8d62388f2e52d0674edf9051f0e35c995c7e6b9cb564736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806395d89b4111610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a7691701116100f2578063a769170114610684578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b806395d89b41146105b657806396880b17146105e1578063992c58e41461061e578063a457c2d71461064757610230565b806339509351116101b157806370a082311161017557806370a08231146104f7578063715018a614610534578063751039fc1461054b5780637571336a146105625780638da5cb5b1461058b57610230565b806339509351146103ea57806349bd5a5e146104275780634fbee19314610452578063555467a11461048f5780636ddd1713146104cc57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b604051610257919061326e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613329565b6109b8565b6040516102949190613384565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061339f565b6109d6565b6040516102d19190613384565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc91906133cc565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061341b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061341b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613462565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610ba1565b6040516103b69190613384565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e191906134fe565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613329565b610c83565b60405161041e9190613384565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b6040516104499190613528565b60405180910390f35b34801561045e57600080fd5b506104796004803603810190610474919061339f565b610d5a565b6040516104869190613384565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613543565b610db0565b6040516104c39190613384565b60405180910390f35b3480156104d857600080fd5b506104e1610e59565b6040516104ee9190613384565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061339f565b610e6c565b60405161052b919061341b565b60405180910390f35b34801561054057600080fd5b50610549610eb4565b005b34801561055757600080fd5b5061056061100c565b005b34801561056e57600080fd5b5061058960048036038101906105849190613570565b6110bc565b005b34801561059757600080fd5b506105a06111ae565b6040516105ad9190613528565b60405180910390f35b3480156105c257600080fd5b506105cb6111d8565b6040516105d8919061326e565b60405180910390f35b3480156105ed57600080fd5b506106086004803603810190610603919061339f565b61126a565b6040516106159190613384565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906135b0565b61128a565b005b34801561065357600080fd5b5061066e60048036038101906106699190613329565b6113c3565b60405161067b9190613384565b60405180910390f35b34801561069057600080fd5b50610699611490565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613329565b61155f565b6040516106cf9190613384565b60405180910390f35b3480156106e457600080fd5b506106ed61157d565b6040516106fa9190613384565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190613570565b611590565b005b34801561073857600080fd5b50610753600480360381019061074e9190613570565b611682565b005b34801561076157600080fd5b5061077c60048036038101906107779190613543565b611803565b005b34801561078a57600080fd5b506107936118c3565b6040516107a0919061341b565b60405180910390f35b3480156107b557600080fd5b506107be6118c9565b6040516107d298979695949392919061363d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906136bb565b6118ff565b005b34801561081057600080fd5b5061082b600480360381019061082691906136bb565b611a1c565b604051610838919061341b565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613570565b611aa3565b005b34801561087657600080fd5b5061087f611b95565b60405161088c919061341b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b7919061339f565b611b9b565b005b3480156108ca57600080fd5b506108e560048036038101906108e0919061339f565b611d62565b6040516108f29190613384565b60405180910390f35b34801561090757600080fd5b50610910611d82565b60405161091d919061375a565b60405180910390f35b606060038054610935906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906137a4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611e04565b8484611e0c565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b6109fe611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613822565b60405180910390fd5b6103e882610a99610add565b610aa39190613871565b610aad91906138fa565b6008819055506103e881610abf610add565b610ac99190613871565b610ad391906138fa565b6009819055505050565b6000600254905090565b60165481565b610af5611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613822565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611ef7565b610c6f84610bba611e04565b610c6a8560405180606001604052806028815260200161414a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b600190509392505050565b60006012905090565b6000610d2c610c90611e04565b84610d278560016000610ca1611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b611e0c565b6001905092915050565b7f0000000000000000000000007aae541dea281e8271657fc3faa540f15a4d4a4a81565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dba611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613822565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ebc611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611014611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90613822565b60405180910390fd5b6110af6103e8806109f6565b6110ba6103e8611803565b565b6110c4611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613822565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111e7906137a4565b80601f0160208091040260200160405190810160405280929190818152602001828054611213906137a4565b80156112605780601f1061123557610100808354040283529160200191611260565b820191906000526020600020905b81548152906001019060200180831161124357829003601f168201915b5050505050905090565b601a6020528060005260406000206000915054906101000a900460ff1681565b611292611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890613822565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461135b919061392b565b611365919061392b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546113a8919061392b565b6113b2919061392b565b600d60040181905550505050505050565b60006114866113d0611e04565b84611481856040518060600160405280602581526020016140ff60259139600160006113fa611e04565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b611e0c565b6001905092915050565b611498611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613822565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b600061157361156c611e04565b8484611ef7565b6001905092915050565b600c60029054906101000a900460ff1681565b611598611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613822565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61168a611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613822565b60405180910390fd5b7f0000000000000000000000007aae541dea281e8271657fc3faa540f15a4d4a4a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f906139f3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61180b611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613822565b60405180910390fd5b6103e8816118a6610add565b6118b09190613871565b6118ba91906138fa565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b611907611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613822565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611aab611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613822565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611ba3611e04565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613822565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990613a85565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611db5919061392b565b905083811015611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613af1565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611eea919061341b565b60405180910390a3505050565b6000811415611f1157611f0c83836000612896565b61282d565b611f196111ae565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f875750611f576111ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa05750600c60029054906101000a900460ff16155b1561232657600c60009054906101000a900460ff1661209a57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061205a5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090613b5d565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561213d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561218c57600854811115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90613bef565b60405180910390fd5b61227b565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561222f5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227a57600954811115612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613c81565b60405180910390fd5b5b5b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661232557600a546122d883610e6c565b826122e3919061392b565b1115612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613ced565b60405180910390fd5b5b5b600061233130610e6c565b90506000600b5482101590508080156123565750600c60019054906101000a900460ff165b801561236f5750600c60029054906101000a900460ff16155b80156123c45750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561241a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124705750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b4576001600c60026101000a81548160ff021916908315150217905550612498612a40565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257457600090505b801561281e576000601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125da57506000600d60040154115b156126bc5761260a60646125fc600d6004015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60040154600d60070154826126239190613871565b61262d91906138fa565b6016600082825461263e919061392b565b92505081905550600d60040154600d600501548261265c9190613871565b61266691906138fa565b60156000828254612677919061392b565b92505081905550600d60040154600d60060154826126959190613871565b61269f91906138fa565b601760008282546126b0919061392b565b925050819055506127f9565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271a57506000600d60000154115b156127f85761274a606461273c600d6000015488612d2e90919063ffffffff16565b612da990919063ffffffff16565b9050600d60000154600d60030154826127639190613871565b61276d91906138fa565b6016600082825461277e919061392b565b92505081905550600d60000154600d600101548261279c9190613871565b6127a691906138fa565b601560008282546127b7919061392b565b92505081905550600d60000154600d60020154826127d59190613871565b6127df91906138fa565b601760008282546127f0919061392b565b925050819055505b5b600081111561280e5761280d873083612896565b5b808561281a9190613d0d565b9450505b612829868686612896565b5050505b505050565b600083831115829061287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871919061326e565b60405180910390fd5b50600083856128899190613d0d565b9050809150509392505050565b61290181604051806060016040528060268152602001614124602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128329092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612994816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a33919061341b565b60405180910390a3505050565b6000612a4b30610e6c565b90506000601754601554601654612a62919061392b565b612a6c919061392b565b9050600080831480612a7e5750600082145b15612a8b57505050612d2c565b6014600b54612a9a9190613871565b831115612ab3576014600b54612ab09190613871565b92505b600060028360165486612ac69190613871565b612ad091906138fa565b612ada91906138fa565b90506000612af18286612df390919063ffffffff16565b90506000479050612b0182612e3d565b6000612b168247612df390919063ffffffff16565b90506000612b4187612b3360155485612d2e90919063ffffffff16565b612da990919063ffffffff16565b90506000612b6c88612b5e60175486612d2e90919063ffffffff16565b612da990919063ffffffff16565b905060008183612b7c919061392b565b84612b879190613d0d565b9050600060168190555060006015819055506000601781905550600087118015612bb15750600081115b15612bfa57612bc08782613089565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612bf1929190613d41565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612c3f9190613d0d565b604051612c4b90613d9b565b60006040518083038185875af1925050503d8060008114612c88576040519150601f19603f3d011682016040523d82523d6000602084013e612c8d565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612cd990613d9b565b60006040518083038185875af1925050503d8060008114612d16576040519150601f19603f3d011682016040523d82523d6000602084013e612d1b565b606091505b505080985050505050505050505050505b565b600080831415612d415760009050612da3565b60008284612d4f9190613871565b9050828482612d5e91906138fa565b14612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613e22565b60405180910390fd5b809150505b92915050565b6000612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613172565b905092915050565b6000612e3583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612832565b905092915050565b6000600267ffffffffffffffff811115612e5a57612e59613e42565b5b604051908082528060200260200182016040528015612e885781602001602082028036833780820191505090505b5090503081600081518110612ea057612e9f613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4057600080fd5b505afa158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f789190613eb5565b81600181518110612f8c57612f8b613e71565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ff1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613053959493929190613fdb565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6130b4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e0c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161311996959493929190614035565b6060604051808303818588803b15801561313257600080fd5b505af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316b91906140ab565b5050505050565b600080831182906131b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b0919061326e565b60405180910390fd5b50600083856131c891906138fa565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613240826131d5565b61324a81856131e0565b935061325a8185602086016131f1565b61326381613224565b840191505092915050565b600060208201905081810360008301526132888184613235565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132c082613295565b9050919050565b6132d0816132b5565b81146132db57600080fd5b50565b6000813590506132ed816132c7565b92915050565b6000819050919050565b613306816132f3565b811461331157600080fd5b50565b600081359050613323816132fd565b92915050565b600080604083850312156133405761333f613290565b5b600061334e858286016132de565b925050602061335f85828601613314565b9150509250929050565b60008115159050919050565b61337e81613369565b82525050565b60006020820190506133996000830184613375565b92915050565b6000602082840312156133b5576133b4613290565b5b60006133c3848285016132de565b91505092915050565b600080604083850312156133e3576133e2613290565b5b60006133f185828601613314565b925050602061340285828601613314565b9150509250929050565b613415816132f3565b82525050565b6000602082019050613430600083018461340c565b92915050565b61343f81613369565b811461344a57600080fd5b50565b60008135905061345c81613436565b92915050565b60006020828403121561347857613477613290565b5b60006134868482850161344d565b91505092915050565b6000806000606084860312156134a8576134a7613290565b5b60006134b6868287016132de565b93505060206134c7868287016132de565b92505060406134d886828701613314565b9150509250925092565b600060ff82169050919050565b6134f8816134e2565b82525050565b600060208201905061351360008301846134ef565b92915050565b613522816132b5565b82525050565b600060208201905061353d6000830184613519565b92915050565b60006020828403121561355957613558613290565b5b600061356784828501613314565b91505092915050565b6000806040838503121561358757613586613290565b5b6000613595858286016132de565b92505060206135a68582860161344d565b9150509250929050565b60008060008060008060c087890312156135cd576135cc613290565b5b60006135db89828a01613314565b96505060206135ec89828a01613314565b95505060406135fd89828a01613314565b945050606061360e89828a01613314565b935050608061361f89828a01613314565b92505060a061363089828a01613314565b9150509295509295509295565b600061010082019050613653600083018b61340c565b613660602083018a61340c565b61366d604083018961340c565b61367a606083018861340c565b613687608083018761340c565b61369460a083018661340c565b6136a160c083018561340c565b6136ae60e083018461340c565b9998505050505050505050565b600080604083850312156136d2576136d1613290565b5b60006136e0858286016132de565b92505060206136f1858286016132de565b9150509250929050565b6000819050919050565b600061372061371b61371684613295565b6136fb565b613295565b9050919050565b600061373282613705565b9050919050565b600061374482613727565b9050919050565b61375481613739565b82525050565b600060208201905061376f600083018461374b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137bc57607f821691505b602082108114156137d0576137cf613775565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380c6020836131e0565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061387c826132f3565b9150613887836132f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c0576138bf613842565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613905826132f3565b9150613910836132f3565b9250826139205761391f6138cb565b5b828204905092915050565b6000613936826132f3565b9150613941836132f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397657613975613842565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b60006139dd602a836131e0565b91506139e882613981565b604082019050919050565b60006020820190508181036000830152613a0c816139d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a6f6026836131e0565b9150613a7a82613a13565b604082019050919050565b60006020820190508181036000830152613a9e81613a62565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613adb601b836131e0565b9150613ae682613aa5565b602082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613b476016836131e0565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613bd96035836131e0565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613c6b6036836131e0565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613cd76013836131e0565b9150613ce282613ca1565b602082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b6000613d18826132f3565b9150613d23836132f3565b925082821015613d3657613d35613842565b5b828203905092915050565b6000604082019050613d56600083018561340c565b613d63602083018461340c565b9392505050565b600081905092915050565b50565b6000613d85600083613d6a565b9150613d9082613d75565b600082019050919050565b6000613da682613d78565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0c6021836131e0565b9150613e1782613db0565b604082019050919050565b60006020820190508181036000830152613e3b81613dff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613eaf816132c7565b92915050565b600060208284031215613ecb57613eca613290565b5b6000613ed984828501613ea0565b91505092915050565b6000819050919050565b6000613f07613f02613efd84613ee2565b6136fb565b6132f3565b9050919050565b613f1781613eec565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f52816132b5565b82525050565b6000613f648383613f49565b60208301905092915050565b6000602082019050919050565b6000613f8882613f1d565b613f928185613f28565b9350613f9d83613f39565b8060005b83811015613fce578151613fb58882613f58565b9750613fc083613f70565b925050600181019050613fa1565b5085935050505092915050565b600060a082019050613ff0600083018861340c565b613ffd6020830187613f0e565b818103604083015261400f8186613f7d565b905061401e6060830185613519565b61402b608083018461340c565b9695505050505050565b600060c08201905061404a6000830189613519565b614057602083018861340c565b6140646040830187613f0e565b6140716060830186613f0e565b61407e6080830185613519565b61408b60a083018461340c565b979650505050505050565b6000815190506140a5816132fd565b92915050565b6000806000606084860312156140c4576140c3613290565b5b60006140d286828701614096565b93505060206140e386828701614096565b92505060406140f486828701614096565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122096fc6d840abc6cb4d9893a8d62388f2e52d0674edf9051f0e35c995c7e6b9cb564736f6c63430008090033

Deployed Bytecode Sourcemap

13527:11818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2879:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14919:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17584:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2282:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14723:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17960:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3057:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2179:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3421:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13660:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19793:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17418:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14037:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2401:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6680:148;;;;;;;;;;;;;:::i;:::-;;19254:129;;;;;;;;;;;;;:::i;:::-;;19102:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6462:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2066:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14989:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18069:731;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3648:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17303:105;;;;;;;;;;;;;:::i;:::-;;2535:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14075:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18812:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19391:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17806:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14684:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14410:265;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;19595:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2719:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18950:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14763:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6836:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15056:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13611;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1957:99;2010:13;2043:5;2036:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:99;:::o;2879:168::-;2961:4;2978:39;2987:12;:10;:12::i;:::-;3001:7;3010:6;2978:8;:39::i;:::-;3035:4;3028:11;;2879:168;;;;:::o;14919:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;17584:214::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17724:4:::1;17711:9;17695:13;:11;:13::i;:::-;:25;;;;:::i;:::-;17694:34;;;;:::i;:::-;17679:12;:49;;;;17786:4;17772:10;17756:13;:11;:13::i;:::-;:26;;;;:::i;:::-;17755:35;;;;:::i;:::-;17739:13;:51;;;;17584:214:::0;;:::o;2282:107::-;2342:7;2369:12;;2362:19;;2282:107;:::o;14723:33::-;;;;:::o;17960:101::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18046:7:::1;18032:11;;:21;;;;;;;;;;;;;;;;;;17960:101:::0;:::o;3057:354::-;3196:4;3213:36;3223:6;3231:9;3242:6;3213:9;:36::i;:::-;3260:121;3269:6;3277:12;:10;:12::i;:::-;3291:89;3329:6;3291:89;;;;;;;;;;;;;;;;;:11;:19;3303:6;3291:19;;;;;;;;;;;;;;;:33;3311:12;:10;:12::i;:::-;3291:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3260:8;:121::i;:::-;3399:4;3392:11;;3057:354;;;;;:::o;2179:92::-;2236:5;2261:2;2254:9;;2179:92;:::o;3421:217::-;3508:4;3525:83;3534:12;:10;:12::i;:::-;3548:7;3557:50;3596:10;3557:11;:25;3569:12;:10;:12::i;:::-;3557:25;;;;;;;;;;;;;;;:34;3583:7;3557:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3525:8;:83::i;:::-;3626:4;3619:11;;3421:217;;;;:::o;13660:38::-;;;:::o;19793:125::-;19858:4;19882:19;:28;19902:7;19882:28;;;;;;;;;;;;;;;;;;;;;;;;;19875:35;;19793:125;;;:::o;17418:158::-;17499:4;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17537:9:::1;17515:19;:31;;;;17564:4;17557:11;;17418:158:::0;;;:::o;14037:31::-;;;;;;;;;;;;;:::o;2401:126::-;2474:7;2501:9;:18;2511:7;2501:18;;;;;;;;;;;;;;;;2494:25;;2401:126;;;:::o;6680:148::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6787:1:::1;6750:40;;6771:6;;;;;;;;;;;6750:40;;;;;;;;;;;;6818:1;6801:6;;:19;;;;;;;;;;;;;;;;;;6680:148::o:0;19254:129::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19308:29:::1;19327:4;19332::::0;19308:18:::1;:29::i;:::-;19348:27;19370:4;19348:21;:27::i;:::-;19254:129::o:0;19102:144::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19234:4:::1;19192:31;:39;19224:6;19192:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19102:144:::0;;:::o;6462:78::-;6499:7;6526:6;;;;;;;;;;;6519:13;;6462:78;:::o;2066:103::-;2121:13;2154:7;2147:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2066:103;:::o;14989:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;18069:731::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18300:15:::1;18277:5;:20;;:38;;;;18350:16;18326:5;:21;;:40;;;;18403:18;18377:5;:23;;:44;;;;18500:5;:23;;;18476:5;:21;;;18453:5;:20;;;:44;;;;:::i;:::-;:70;;;;:::i;:::-;18432:5;:18;;:91;;;;18560:16;18536:5;:21;;:40;;;;18612:17;18587:5;:22;;:42;;;;18667:19;18640:5;:24;;:46;;;;18768:5;:24;;;18743:5;:22;;;18719:5;:21;;;:46;;;;:::i;:::-;:73;;;;:::i;:::-;18697:5;:19;;:95;;;;18069:731:::0;;;;;;:::o;3648:268::-;3740:4;3757:129;3766:12;:10;:12::i;:::-;3780:7;3789:96;3828:15;3789:96;;;;;;;;;;;;;;;;;:11;:25;3801:12;:10;:12::i;:::-;3789:25;;;;;;;;;;;;;;;:34;3815:7;3789:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3757:8;:129::i;:::-;3904:4;3897:11;;3648:268;;;;:::o;17303:105::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17367:4:::1;17355:9;;:16;;;;;;;;;;;;;;;;;;17396:4;17382:11;;:18;;;;;;;;;;;;;;;;;;17303:105::o:0;2535:174::-;2620:4;2637:42;2647:12;:10;:12::i;:::-;2661:9;2672:6;2637:9;:42::i;:::-;2697:4;2690:11;;2535:174;;;;:::o;14075:22::-;;;;;;;;;;;;;:::o;18812:132::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18928:8:::1;18897:19;:28;18917:7;18897:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18812:132:::0;;:::o;19391:196::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19484:13:::1;19476:21;;:4;:21;;;;19468:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;19574:5;19555:10;:16;19566:4;19555:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;19391:196:::0;;:::o;17806:146::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17940:4:::1;17923:13;17907;:11;:13::i;:::-;:29;;;;:::i;:::-;17906:38;;;;:::i;:::-;17888:15;:56;;;;17806:146:::0;:::o;14684:32::-;;;;:::o;14410:265::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19595:190::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19713:15:::1;19696:14;;:32;;;;;;;;;;;;;;;;;;19759:18;19739:17;;:38;;;;;;;;;;;;;;;;;;19595:190:::0;;:::o;2719:150::-;2807:7;2834:11;:18;2846:5;2834:18;;;;;;;;;;;;;;;:27;2853:7;2834:27;;;;;;;;;;;;;;;;2827:34;;2719:150;;;;:::o;18950:146::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19080:8:::1;19042:26;:35;19069:7;19042:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18950:146:::0;;:::o;14763:35::-;;;;:::o;6836:244::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6945:1:::1;6925:22;;:8;:22;;;;6917:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7035:8;7006:38;;7027:6;;;;;;;;;;;7006:38;;;;;;;;;;;;7064:8;7055:6;;:17;;;;;;;;;;;;;;;;;;6836:244:::0;:::o;15056:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;13611:::-;;;:::o;4893:180::-;4950:7;4970:9;4986:1;4982;:5;;;;:::i;:::-;4970:17;;5011:1;5006;:6;;4998:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5064:1;5057:8;;;4893:180;;;;:::o;1399:97::-;1451:7;1478:10;1471:17;;1399:97;:::o;4628:220::-;4786:6;4756:11;:18;4768:5;4756:18;;;;;;;;;;;;;;;:27;4775:7;4756:27;;;;;;;;;;;;;;;:36;;;;4824:7;4808:32;;4817:5;4808:32;;;4833:6;4808:32;;;;;;:::i;:::-;;;;;;;;4628:220;;;:::o;19926:2940::-;20083:1;20073:6;:11;20069:102;;;20101:37;20117:6;20125:9;20136:1;20101:15;:37::i;:::-;20153:7;;20069:102;20211:7;:5;:7::i;:::-;20201:17;;:6;:17;;;;:54;;;;;20248:7;:5;:7::i;:::-;20235:20;;:9;:20;;;;20201:54;:82;;;;;20273:10;;;;;;;;;;;20272:11;20201:82;20183:888;;;20317:9;;;;;;;;;;;20312:147;;20355:19;:27;20375:6;20355:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;20386:19;:30;20406:9;20386:30;;;;;;;;;;;;;;;;;;;;;;;;;20355:61;20347:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20312:147;20477:10;:18;20488:6;20477:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;20500:31;:42;20532:9;20500:42;;;;;;;;;;;;;;;;;;;;;;;;;20499:43;20477:65;20473:410;;;20581:12;;20571:6;:22;;20563:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;20473:410;;;20691:10;:21;20702:9;20691:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;20717:31;:39;20749:6;20717:39;;;;;;;;;;;;;;;;;;;;;;;;;20716:40;20691:65;20687:196;;;20795:13;;20785:6;:23;;20777:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;20687:196;20473:410;20904:26;:37;20931:9;20904:37;;;;;;;;;;;;;;;;;;;;;;;;;20899:159;;21003:15;;20979:20;20989:9;20979;:20::i;:::-;20970:6;:29;;;;:::i;:::-;:48;;20962:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;20899:159;20183:888;21084:28;21115:24;21133:4;21115:9;:24::i;:::-;21084:55;;21153:12;21192:19;;21168:20;:43;;21153:58;;21242:7;:35;;;;;21266:11;;;;;;;;;;;21242:35;:63;;;;;21295:10;;;;;;;;;;;21294:11;21242:63;:101;;;;;21322:10;:21;21333:9;21322:21;;;;;;;;;;;;;;;;;;;;;;;;;21242:101;:146;;;;;21361:19;:27;21381:6;21361:27;;;;;;;;;;;;;;;;;;;;;;;;;21360:28;21242:146;:194;;;;;21406:19;:30;21426:9;21406:30;;;;;;;;;;;;;;;;;;;;;;;;;21405:31;21242:194;21224:326;;;21476:4;21463:10;;:17;;;;;;;;;;;;;;;;;;21495:10;:8;:10::i;:::-;21533:5;21520:10;;:18;;;;;;;;;;;;;;;;;;21224:326;21563:12;21579:10;;;;;;;;;;;21578:11;21563:26;;21606:19;:27;21626:6;21606:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21637:19;:30;21657:9;21637:30;;;;;;;;;;;;;;;;;;;;;;;;;21606:61;21602:109;;;21694:5;21684:15;;21602:109;21738:7;21734:1070;;;21762:12;21796:10;:21;21807:9;21796:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;21843:1;21821:5;:19;;;:23;21796:48;21792:859;;;21872:40;21908:3;21872:31;21883:5;:19;;;21872:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;21865:47;;21985:5;:19;;;21960:5;:22;;;21953:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;21931:18;;:73;;;;;;;:::i;:::-;;;;;;;;22075:5;:19;;;22051:5;:21;;;22044:4;:28;;;;:::i;:::-;:50;;;;:::i;:::-;22023:17;;:71;;;;;;;:::i;:::-;;;;;;;;22171:5;:19;;;22144:5;:24;;;22137:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;22113:20;;:77;;;;;;;:::i;:::-;;;;;;;;21792:859;;;22252:10;:18;22263:6;22252:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;22295:1;22274:5;:18;;;:22;22252:44;22248:403;;;22324:39;22359:3;22324:30;22335:5;:18;;;22324:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;22317:46;;22435:5;:18;;;22411:5;:21;;;22404:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;22382:18;;:71;;;;;;;:::i;:::-;;;;;;;;22523:5;:18;;;22500:5;:20;;;22493:4;:27;;;;:::i;:::-;:48;;;;:::i;:::-;22472:17;;:69;;;;;;;:::i;:::-;;;;;;;;22617:5;:18;;;22591:5;:23;;;22584:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;22560:20;;:75;;;;;;;:::i;:::-;;;;;;;;22248:403;21792:859;22678:1;22671:4;:8;22667:93;;;22700:44;22716:6;22732:4;22739;22700:15;:44::i;:::-;22667:93;22786:4;22776:14;;;;;:::i;:::-;;;21747:1057;21734:1070;22816:42;22832:6;22840:9;22851:6;22816:15;:42::i;:::-;20048:2818;;;19926:2940;;;;:::o;5234:191::-;5319:7;5352:1;5347;:6;;5355:12;5339:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5379:9;5395:1;5391;:5;;;;:::i;:::-;5379:17;;5416:1;5409:8;;;5234:191;;;;;:::o;3926:358::-;4088:71;4110:6;4088:71;;;;;;;;;;;;;;;;;:9;:17;4098:6;4088:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4068:9;:17;4078:6;4068:17;;;;;;;;;;;;;;;:91;;;;4193:32;4218:6;4193:9;:20;4203:9;4193:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4170:9;:20;4180:9;4170:20;;;;;;;;;;;;;;;:55;;;;4258:9;4241:35;;4250:6;4241:35;;;4269:6;4241:35;;;;;;:::i;:::-;;;;;;;;3926:358;;;:::o;23734:1606::-;23773:28;23804:24;23822:4;23804:9;:24::i;:::-;23773:55;;23839:14;23897:20;;23877:17;;23856:18;;:38;;;;:::i;:::-;:61;;;;:::i;:::-;23839:78;;23928:12;23981:1;23957:20;:25;:40;;;;23996:1;23986:6;:11;23957:40;23953:57;;;24001:7;;;;;23953:57;24071:2;24049:19;;:24;;;;:::i;:::-;24026:20;:47;24022:127;;;24135:2;24113:19;;:24;;;;:::i;:::-;24090:47;;24022:127;24210:23;24289:1;24280:6;24259:18;;24236:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;24210:80;;24301:26;24330:41;24355:15;24330:20;:24;;:41;;;;:::i;:::-;24301:70;;24385:25;24413:21;24385:49;;24447:36;24464:18;24447:16;:36::i;:::-;24498:18;24519:44;24545:17;24519:21;:25;;:44;;;;:::i;:::-;24498:65;;24577:22;24602:45;24640:6;24602:33;24617:17;;24602:10;:14;;:33;;;;:::i;:::-;:37;;:45;;;;:::i;:::-;24577:70;;24658:25;24686:48;24727:6;24686:36;24701:20;;24686:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;24658:76;;24745:23;24802:17;24785:14;:34;;;;:::i;:::-;24771:10;:49;;;;:::i;:::-;24745:75;;24856:1;24835:18;:22;;;;24888:1;24868:17;:21;;;;24923:1;24900:20;:24;;;;24961:1;24943:15;:19;:42;;;;;24984:1;24966:15;:19;24943:42;24939:192;;;25002:46;25015:15;25032;25002:12;:46::i;:::-;25068:51;25083:18;25103:15;25068:51;;;;;;;:::i;:::-;;;;;;;;24939:192;25164:17;;;;;;;;;;;25156:31;;25221:14;25197:21;:38;;;;:::i;:::-;25156:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25143:100;;;;;25275:14;;;;;;;;;;;25267:28;;25304:21;25267:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25254:78;;;;;23762:1578;;;;;;;;;;23734:1606;:::o;5433:256::-;5490:7;5525:1;5520;:6;5516:47;;;5550:1;5543:8;;;;5516:47;5576:9;5592:1;5588;:5;;;;:::i;:::-;5576:17;;5621:1;5616;5612;:5;;;;:::i;:::-;:10;5604:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5680:1;5673:8;;;5433:256;;;;;:::o;5700:131::-;5757:7;5784:39;5788:1;5791;5784:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5777:46;;5700:131;;;;:::o;5086:135::-;5143:7;5170:43;5174:1;5177;5170:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5163:50;;5086:135;;;;:::o;22874:494::-;22938:21;22976:1;22962:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22938:40;;23007:4;22989;22994:1;22989:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23033:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23023:4;23028:1;23023:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23059:49;23076:4;23091:6;23100:7;23059:8;:49::i;:::-;23147:6;:57;;;23219:7;23241:1;23285:4;23312;23332:15;23147:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22925:443;22874:494;:::o;23376:350::-;23520:49;23537:4;23552:6;23561:7;23520:8;:49::i;:::-;23612:6;:22;;;23643:9;23664:4;23671:7;23680:1;23683;23695:4;23702:15;23612:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23376:350;;:::o;5843:277::-;5928:7;5960:1;5956;:5;5963:12;5948:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5987:9;6003:1;5999;:5;;;;:::i;:::-;5987:17;;6111:1;6104:8;;;5843:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:1057::-;7571:6;7579;7587;7595;7603;7611;7660:3;7648:9;7639:7;7635:23;7631:33;7628:120;;;7667:79;;:::i;:::-;7628:120;7787:1;7812:53;7857:7;7848:6;7837:9;7833:22;7812:53;:::i;:::-;7802:63;;7758:117;7914:2;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7885:118;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;8170:2;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8141:118;8298:3;8325:53;8370:7;8361:6;8350:9;8346:22;8325:53;:::i;:::-;8315:63;;8269:119;8427:3;8454:53;8499:7;8490:6;8479:9;8475:22;8454:53;:::i;:::-;8444:63;;8398:119;7467:1057;;;;;;;;:::o;8530:997::-;8819:4;8857:3;8846:9;8842:19;8834:27;;8871:71;8939:1;8928:9;8924:17;8915:6;8871:71;:::i;:::-;8952:72;9020:2;9009:9;9005:18;8996:6;8952:72;:::i;:::-;9034;9102:2;9091:9;9087:18;9078:6;9034:72;:::i;:::-;9116;9184:2;9173:9;9169:18;9160:6;9116:72;:::i;:::-;9198:73;9266:3;9255:9;9251:19;9242:6;9198:73;:::i;:::-;9281;9349:3;9338:9;9334:19;9325:6;9281:73;:::i;:::-;9364;9432:3;9421:9;9417:19;9408:6;9364:73;:::i;:::-;9447;9515:3;9504:9;9500:19;9491:6;9447:73;:::i;:::-;8530:997;;;;;;;;;;;:::o;9533:474::-;9601:6;9609;9658:2;9646:9;9637:7;9633:23;9629:32;9626:119;;;9664:79;;:::i;:::-;9626:119;9784:1;9809:53;9854:7;9845:6;9834:9;9830:22;9809:53;:::i;:::-;9799:63;;9755:117;9911:2;9937:53;9982:7;9973:6;9962:9;9958:22;9937:53;:::i;:::-;9927:63;;9882:118;9533:474;;;;;:::o;10013:60::-;10041:3;10062:5;10055:12;;10013:60;;;:::o;10079:142::-;10129:9;10162:53;10180:34;10189:24;10207:5;10189:24;:::i;:::-;10180:34;:::i;:::-;10162:53;:::i;:::-;10149:66;;10079:142;;;:::o;10227:126::-;10277:9;10310:37;10341:5;10310:37;:::i;:::-;10297:50;;10227:126;;;:::o;10359:153::-;10436:9;10469:37;10500:5;10469:37;:::i;:::-;10456:50;;10359:153;;;:::o;10518:185::-;10632:64;10690:5;10632:64;:::i;:::-;10627:3;10620:77;10518:185;;:::o;10709:276::-;10829:4;10867:2;10856:9;10852:18;10844:26;;10880:98;10975:1;10964:9;10960:17;10951:6;10880:98;:::i;:::-;10709:276;;;;:::o;10991:180::-;11039:77;11036:1;11029:88;11136:4;11133:1;11126:15;11160:4;11157:1;11150:15;11177:320;11221:6;11258:1;11252:4;11248:12;11238:22;;11305:1;11299:4;11295:12;11326:18;11316:81;;11382:4;11374:6;11370:17;11360:27;;11316:81;11444:2;11436:6;11433:14;11413:18;11410:38;11407:84;;;11463:18;;:::i;:::-;11407:84;11228:269;11177:320;;;:::o;11503:182::-;11643:34;11639:1;11631:6;11627:14;11620:58;11503:182;:::o;11691:366::-;11833:3;11854:67;11918:2;11913:3;11854:67;:::i;:::-;11847:74;;11930:93;12019:3;11930:93;:::i;:::-;12048:2;12043:3;12039:12;12032:19;;11691:366;;;:::o;12063:419::-;12229:4;12267:2;12256:9;12252:18;12244:26;;12316:9;12310:4;12306:20;12302:1;12291:9;12287:17;12280:47;12344:131;12470:4;12344:131;:::i;:::-;12336:139;;12063:419;;;:::o;12488:180::-;12536:77;12533:1;12526:88;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12674:348;12714:7;12737:20;12755:1;12737:20;:::i;:::-;12732:25;;12771:20;12789:1;12771:20;:::i;:::-;12766:25;;12959:1;12891:66;12887:74;12884:1;12881:81;12876:1;12869:9;12862:17;12858:105;12855:131;;;12966:18;;:::i;:::-;12855:131;13014:1;13011;13007:9;12996:20;;12674:348;;;;:::o;13028:180::-;13076:77;13073:1;13066:88;13173:4;13170:1;13163:15;13197:4;13194:1;13187:15;13214:185;13254:1;13271:20;13289:1;13271:20;:::i;:::-;13266:25;;13305:20;13323:1;13305:20;:::i;:::-;13300:25;;13344:1;13334:35;;13349:18;;:::i;:::-;13334:35;13391:1;13388;13384:9;13379:14;;13214:185;;;;:::o;13405:305::-;13445:3;13464:20;13482:1;13464:20;:::i;:::-;13459:25;;13498:20;13516:1;13498:20;:::i;:::-;13493:25;;13652:1;13584:66;13580:74;13577:1;13574:81;13571:107;;;13658:18;;:::i;:::-;13571:107;13702:1;13699;13695:9;13688:16;;13405:305;;;;:::o;13716:229::-;13856:34;13852:1;13844:6;13840:14;13833:58;13925:12;13920:2;13912:6;13908:15;13901:37;13716:229;:::o;13951:366::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:419::-;14489:4;14527:2;14516:9;14512:18;14504:26;;14576:9;14570:4;14566:20;14562:1;14551:9;14547:17;14540:47;14604:131;14730:4;14604:131;:::i;:::-;14596:139;;14323:419;;;:::o;14748:225::-;14888:34;14884:1;14876:6;14872:14;14865:58;14957:8;14952:2;14944:6;14940:15;14933:33;14748:225;:::o;14979:366::-;15121:3;15142:67;15206:2;15201:3;15142:67;:::i;:::-;15135:74;;15218:93;15307:3;15218:93;:::i;:::-;15336:2;15331:3;15327:12;15320:19;;14979:366;;;:::o;15351:419::-;15517:4;15555:2;15544:9;15540:18;15532:26;;15604:9;15598:4;15594:20;15590:1;15579:9;15575:17;15568:47;15632:131;15758:4;15632:131;:::i;:::-;15624:139;;15351:419;;;:::o;15776:177::-;15916:29;15912:1;15904:6;15900:14;15893:53;15776:177;:::o;15959:366::-;16101:3;16122:67;16186:2;16181:3;16122:67;:::i;:::-;16115:74;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;15959:366;;;:::o;16331:419::-;16497:4;16535:2;16524:9;16520:18;16512:26;;16584:9;16578:4;16574:20;16570:1;16559:9;16555:17;16548:47;16612:131;16738:4;16612:131;:::i;:::-;16604:139;;16331:419;;;:::o;16756:172::-;16896:24;16892:1;16884:6;16880:14;16873:48;16756:172;:::o;16934:366::-;17076:3;17097:67;17161:2;17156:3;17097:67;:::i;:::-;17090:74;;17173:93;17262:3;17173:93;:::i;:::-;17291:2;17286:3;17282:12;17275:19;;16934:366;;;:::o;17306:419::-;17472:4;17510:2;17499:9;17495:18;17487:26;;17559:9;17553:4;17549:20;17545:1;17534:9;17530:17;17523:47;17587:131;17713:4;17587:131;:::i;:::-;17579:139;;17306:419;;;:::o;17731:240::-;17871:34;17867:1;17859:6;17855:14;17848:58;17940:23;17935:2;17927:6;17923:15;17916:48;17731:240;:::o;17977:366::-;18119:3;18140:67;18204:2;18199:3;18140:67;:::i;:::-;18133:74;;18216:93;18305:3;18216:93;:::i;:::-;18334:2;18329:3;18325:12;18318:19;;17977:366;;;:::o;18349:419::-;18515:4;18553:2;18542:9;18538:18;18530:26;;18602:9;18596:4;18592:20;18588:1;18577:9;18573:17;18566:47;18630:131;18756:4;18630:131;:::i;:::-;18622:139;;18349:419;;;:::o;18774:241::-;18914:34;18910:1;18902:6;18898:14;18891:58;18983:24;18978:2;18970:6;18966:15;18959:49;18774:241;:::o;19021:366::-;19163:3;19184:67;19248:2;19243:3;19184:67;:::i;:::-;19177:74;;19260:93;19349:3;19260:93;:::i;:::-;19378:2;19373:3;19369:12;19362:19;;19021:366;;;:::o;19393:419::-;19559:4;19597:2;19586:9;19582:18;19574:26;;19646:9;19640:4;19636:20;19632:1;19621:9;19617:17;19610:47;19674:131;19800:4;19674:131;:::i;:::-;19666:139;;19393:419;;;:::o;19818:169::-;19958:21;19954:1;19946:6;19942:14;19935:45;19818:169;:::o;19993:366::-;20135:3;20156:67;20220:2;20215:3;20156:67;:::i;:::-;20149:74;;20232:93;20321:3;20232:93;:::i;:::-;20350:2;20345:3;20341:12;20334:19;;19993:366;;;:::o;20365:419::-;20531:4;20569:2;20558:9;20554:18;20546:26;;20618:9;20612:4;20608:20;20604:1;20593:9;20589:17;20582:47;20646:131;20772:4;20646:131;:::i;:::-;20638:139;;20365:419;;;:::o;20790:191::-;20830:4;20850:20;20868:1;20850:20;:::i;:::-;20845:25;;20884:20;20902:1;20884:20;:::i;:::-;20879:25;;20923:1;20920;20917:8;20914:34;;;20928:18;;:::i;:::-;20914:34;20973:1;20970;20966:9;20958:17;;20790:191;;;;:::o;20987:332::-;21108:4;21146:2;21135:9;21131:18;21123:26;;21159:71;21227:1;21216:9;21212:17;21203:6;21159:71;:::i;:::-;21240:72;21308:2;21297:9;21293:18;21284:6;21240:72;:::i;:::-;20987:332;;;;;:::o;21325:147::-;21426:11;21463:3;21448:18;;21325:147;;;;:::o;21478:114::-;;:::o;21598:398::-;21757:3;21778:83;21859:1;21854:3;21778:83;:::i;:::-;21771:90;;21870:93;21959:3;21870:93;:::i;:::-;21988:1;21983:3;21979:11;21972:18;;21598:398;;;:::o;22002:379::-;22186:3;22208:147;22351:3;22208:147;:::i;:::-;22201:154;;22372:3;22365:10;;22002:379;;;:::o;22387:220::-;22527:34;22523:1;22515:6;22511:14;22504:58;22596:3;22591:2;22583:6;22579:15;22572:28;22387:220;:::o;22613:366::-;22755:3;22776:67;22840:2;22835:3;22776:67;:::i;:::-;22769:74;;22852:93;22941:3;22852:93;:::i;:::-;22970:2;22965:3;22961:12;22954:19;;22613:366;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;22985:419;;;:::o;23410:180::-;23458:77;23455:1;23448:88;23555:4;23552:1;23545:15;23579:4;23576:1;23569:15;23596:180;23644:77;23641:1;23634:88;23741:4;23738:1;23731:15;23765:4;23762:1;23755:15;23782:143;23839:5;23870:6;23864:13;23855:22;;23886:33;23913:5;23886:33;:::i;:::-;23782:143;;;;:::o;23931:351::-;24001:6;24050:2;24038:9;24029:7;24025:23;24021:32;24018:119;;;24056:79;;:::i;:::-;24018:119;24176:1;24201:64;24257:7;24248:6;24237:9;24233:22;24201:64;:::i;:::-;24191:74;;24147:128;23931:351;;;;:::o;24288:85::-;24333:7;24362:5;24351:16;;24288:85;;;:::o;24379:158::-;24437:9;24470:61;24488:42;24497:32;24523:5;24497:32;:::i;:::-;24488:42;:::i;:::-;24470:61;:::i;:::-;24457:74;;24379:158;;;:::o;24543:147::-;24638:45;24677:5;24638:45;:::i;:::-;24633:3;24626:58;24543:147;;:::o;24696:114::-;24763:6;24797:5;24791:12;24781:22;;24696:114;;;:::o;24816:184::-;24915:11;24949:6;24944:3;24937:19;24989:4;24984:3;24980:14;24965:29;;24816:184;;;;:::o;25006:132::-;25073:4;25096:3;25088:11;;25126:4;25121:3;25117:14;25109:22;;25006:132;;;:::o;25144:108::-;25221:24;25239:5;25221:24;:::i;:::-;25216:3;25209:37;25144:108;;:::o;25258:179::-;25327:10;25348:46;25390:3;25382:6;25348:46;:::i;:::-;25426:4;25421:3;25417:14;25403:28;;25258:179;;;;:::o;25443:113::-;25513:4;25545;25540:3;25536:14;25528:22;;25443:113;;;:::o;25592:732::-;25711:3;25740:54;25788:5;25740:54;:::i;:::-;25810:86;25889:6;25884:3;25810:86;:::i;:::-;25803:93;;25920:56;25970:5;25920:56;:::i;:::-;25999:7;26030:1;26015:284;26040:6;26037:1;26034:13;26015:284;;;26116:6;26110:13;26143:63;26202:3;26187:13;26143:63;:::i;:::-;26136:70;;26229:60;26282:6;26229:60;:::i;:::-;26219:70;;26075:224;26062:1;26059;26055:9;26050:14;;26015:284;;;26019:14;26315:3;26308:10;;25716:608;;;25592:732;;;;:::o;26330:831::-;26593:4;26631:3;26620:9;26616:19;26608:27;;26645:71;26713:1;26702:9;26698:17;26689:6;26645:71;:::i;:::-;26726:80;26802:2;26791:9;26787:18;26778:6;26726:80;:::i;:::-;26853:9;26847:4;26843:20;26838:2;26827:9;26823:18;26816:48;26881:108;26984:4;26975:6;26881:108;:::i;:::-;26873:116;;26999:72;27067:2;27056:9;27052:18;27043:6;26999:72;:::i;:::-;27081:73;27149:3;27138:9;27134:19;27125:6;27081:73;:::i;:::-;26330:831;;;;;;;;:::o;27167:807::-;27416:4;27454:3;27443:9;27439:19;27431:27;;27468:71;27536:1;27525:9;27521:17;27512:6;27468:71;:::i;:::-;27549:72;27617:2;27606:9;27602:18;27593:6;27549:72;:::i;:::-;27631:80;27707:2;27696:9;27692:18;27683:6;27631:80;:::i;:::-;27721;27797:2;27786:9;27782:18;27773:6;27721:80;:::i;:::-;27811:73;27879:3;27868:9;27864:19;27855:6;27811:73;:::i;:::-;27894;27962:3;27951:9;27947:19;27938:6;27894:73;:::i;:::-;27167:807;;;;;;;;;:::o;27980:143::-;28037:5;28068:6;28062:13;28053:22;;28084:33;28111:5;28084:33;:::i;:::-;27980:143;;;;:::o;28129:663::-;28217:6;28225;28233;28282:2;28270:9;28261:7;28257:23;28253:32;28250:119;;;28288:79;;:::i;:::-;28250:119;28408:1;28433:64;28489:7;28480:6;28469:9;28465:22;28433:64;:::i;:::-;28423:74;;28379:128;28546:2;28572:64;28628:7;28619:6;28608:9;28604:22;28572:64;:::i;:::-;28562:74;;28517:129;28685:2;28711:64;28767:7;28758:6;28747:9;28743:22;28711:64;:::i;:::-;28701:74;;28656:129;28129:663;;;;;:::o

Swarm Source

ipfs://96fc6d840abc6cb4d9893a8d62388f2e52d0674edf9051f0e35c995c7e6b9cb5

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  ]

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.