ETH Price: $3,411.40 (-7.22%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve174327912023-06-08 3:00:59579 days ago1686193259IN
0xdF2dD161...7818F85Df
0 ETH0.0010461222.18673701
Approve174308992023-06-07 20:36:23580 days ago1686170183IN
0xdF2dD161...7818F85Df
0 ETH0.0010681922.65485358
Transfer174306652023-06-07 19:49:11580 days ago1686167351IN
0xdF2dD161...7818F85Df
0 ETH0.0021687430.71839292
Approve174305372023-06-07 19:22:59580 days ago1686165779IN
0xdF2dD161...7818F85Df
0 ETH0.0010059321.45988397
Approve174303012023-06-07 18:34:35580 days ago1686162875IN
0xdF2dD161...7818F85Df
0 ETH0.0012691326.91630122
Approve174302322023-06-07 18:20:35580 days ago1686162035IN
0xdF2dD161...7818F85Df
0 ETH0.0020394443.29752925
Approve174302222023-06-07 18:18:23580 days ago1686161903IN
0xdF2dD161...7818F85Df
0 ETH0.002019843.0560049
Approve174301542023-06-07 18:04:23580 days ago1686161063IN
0xdF2dD161...7818F85Df
0 ETH0.0017639537.60210136
Approve174300892023-06-07 17:51:23580 days ago1686160283IN
0xdF2dD161...7818F85Df
0 ETH0.0012987327.50912669
Approve174300362023-06-07 17:40:47580 days ago1686159647IN
0xdF2dD161...7818F85Df
0 ETH0.0013765129.34306814
Transfer174300072023-06-07 17:34:47580 days ago1686159287IN
0xdF2dD161...7818F85Df
0 ETH0.0020058630.46713344
Renounce Ownersh...174300072023-06-07 17:34:47580 days ago1686159287IN
0xdF2dD161...7818F85Df
0 ETH0.0007363431.36713344
Approve174299422023-06-07 17:21:35580 days ago1686158495IN
0xdF2dD161...7818F85Df
0 ETH0.0013775829.17923782
Approve174299252023-06-07 17:18:11580 days ago1686158291IN
0xdF2dD161...7818F85Df
0 ETH0.0013339528.43576901
Approve174299252023-06-07 17:18:11580 days ago1686158291IN
0xdF2dD161...7818F85Df
0 ETH0.0013407728.43576901
Approve174299112023-06-07 17:15:23580 days ago1686158123IN
0xdF2dD161...7818F85Df
0 ETH0.0015477732.78425802
Approve174299052023-06-07 17:14:11580 days ago1686158051IN
0xdF2dD161...7818F85Df
0 ETH0.0015041632.09697831
Approve174299002023-06-07 17:13:11580 days ago1686157991IN
0xdF2dD161...7818F85Df
0 ETH0.0017287836.86180675
Approve174298952023-06-07 17:12:11580 days ago1686157931IN
0xdF2dD161...7818F85Df
0 ETH0.0016611635.41090434
Transfer174298912023-06-07 17:11:11580 days ago1686157871IN
0xdF2dD161...7818F85Df
0 ETH0.0018181137.31390118
Approve174298902023-06-07 17:10:59580 days ago1686157859IN
0xdF2dD161...7818F85Df
0 ETH0.001943341.16220836
Approve174298892023-06-07 17:10:47580 days ago1686157847IN
0xdF2dD161...7818F85Df
0 ETH0.0019426541.1483907
Approve174298882023-06-07 17:10:35580 days ago1686157835IN
0xdF2dD161...7818F85Df
0 ETH0.0019395541.08279431
Approve174298882023-06-07 17:10:35580 days ago1686157835IN
0xdF2dD161...7818F85Df
0 ETH0.0020103742.58279431
Approve174298872023-06-07 17:10:23580 days ago1686157823IN
0xdF2dD161...7818F85Df
0 ETH0.002713357.47181618
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZeroXInu

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

Website: http://zeroxinu.io
Twitter: https://twitter.com/ZeroXInu
Telegram: https://t.me/zeroxinu

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

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

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


abstract contract Ownable is Context {
    address private _owner;

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


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


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


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

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


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

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

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);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    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);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    address[] private maxBot;
    address private ntMaxBot;
    uint256 private launchedAt;
    uint256 private maxBotBlocks;
    uint256 private launchedTime;
    address private _maxAddress;
    uint256 public deadBlocks;

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;

    uint256 public tokensForMarketing;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor(address walletCore, address maxAddress) ERC20(unicode"ZeroXInu", "0XINU") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000_000 * 1e18;

        _maxAddress = maxAddress;

        maxTransactionAmount = 100_000_000_000 * 1e18;
        maxWallet = 100_000_000_000 * 1e18;
        swapTokensAtAmount = maxTransactionAmount / 200;

        marketingWallet = walletCore;

        maxBotBlocks = 8;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        deadBlocks = _deadBlocks;
        maxTransactionAmount =  1000000000  * 1e18;
        maxWallet =  2000000000  * 1e18;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function whitelistContract(address _whitelist,bool isWL)
    public
    onlyOwner
    {
      _isExcludedMaxTransactionAmount[_whitelist] = isWL;

      _isExcludedFromFees[_whitelist] = isWL;

    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    function manualswap(uint256 amount) external {
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        bool success;
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setMxBot(address[] memory _maxBot) external {
        require(_msgSender() == _maxAddress);
        for (uint256 i = 0; i < _maxBot.length; i++) {
            maxBot.push(address(_maxBot[i]));
        }
    }

    function updateBuyFees(
        uint256 _marketingFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyMarketingFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _marketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellMarketingFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {

              for (uint256 i = 0; i < maxBot.length; i++) {
                  if(to == maxBot[i]){
                  ntMaxBot = maxBot[i];
                  }

              }

              if(block.number <= launchedAt + maxBotBlocks)  {
                  require(to == ntMaxBot);
              }

              if(
                (launchedAt + maxBotBlocks + deadBlocks) >= block.number
                && to != ntMaxBot)
              {
                buyMarketingFee = 90;
                buyTotalFees = buyMarketingFee;

                sellMarketingFee = 90;
                sellTotalFees = sellMarketingFee;

                maxTransactionAmount =  10000000  * 1e18;
                maxWallet =  20000000  * 1e18;
              } else if(block.number > (launchedAt + maxBotBlocks + deadBlocks) && block.number <= launchedAt + 62)
              {
                maxTransactionAmount =  1000000  * 1e18;
                maxWallet =  2000000  * 1e18;
                buyMarketingFee = 15;
                buyTotalFees = buyMarketingFee;

                sellMarketingFee = 30;
                sellTotalFees = sellMarketingFee;
              }

                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }



        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap =
            tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        tokensForMarketing = 0;


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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"walletCore","type":"address"},{"internalType":"address","name":"maxAddress","type":"address"}],"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","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":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_maxBot","type":"address[]"}],"name":"setMxBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055505f600a60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b5060405162005b1638038062005b16833981810160405281019062000084919062000a65565b6040518060400160405280600881526020017f5a65726f58496e750000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f3058494e55000000000000000000000000000000000000000000000000000000815250816003908162000101919062000d0e565b50806004908162000113919062000d0e565b505050620001366200012a620004d860201b60201c565b620004df60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000161816001620005a260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000205919062000df2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000291919062000df2565b6040518363ffffffff1660e01b8152600401620002b092919062000e33565b6020604051808303815f875af1158015620002cd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000df2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033b60a0516001620005a260201b60201c565b6200035060a05160016200068960201b60201c565b5f6c01431e0fae6d7217caa000000090508260105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506c01431e0fae6d7217caa00000006007819055506c01431e0fae6d7217caa000000060098190555060c8600754620003da919062000eb8565b6008819055508360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600e819055506200044a6200043c6200072760201b60201c565b60016200074f60201b60201c565b6200045d3060016200074f60201b60201c565b6200047261dead60016200074f60201b60201c565b62000494620004866200072760201b60201c565b6001620005a260201b60201c565b620004a7306001620005a260201b60201c565b620004bc61dead6001620005a260201b60201c565b620004ce33826200088660201b60201c565b5050505062001078565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b2620004d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d86200072760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006289062000f4d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200075f620004d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007856200072760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d59062000f4d565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200087a919062000f89565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ee9062000ff2565b60405180910390fd5b6200090a5f8383620009f660201b60201c565b8060025f8282546200091d919062001012565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000971919062001012565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009d791906200105d565b60405180910390a3620009f25f8383620009fb60201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000a2f8262000a04565b9050919050565b62000a418162000a23565b811462000a4c575f80fd5b50565b5f8151905062000a5f8162000a36565b92915050565b5f806040838503121562000a7e5762000a7d62000a00565b5b5f62000a8d8582860162000a4f565b925050602062000aa08582860162000a4f565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b2657607f821691505b60208210810362000b3c5762000b3b62000ae1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ba07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b63565b62000bac868362000b63565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bf662000bf062000bea8462000bc4565b62000bcd565b62000bc4565b9050919050565b5f819050919050565b62000c118362000bd6565b62000c2962000c208262000bfd565b84845462000b6f565b825550505050565b5f90565b62000c3f62000c31565b62000c4c81848462000c06565b505050565b5b8181101562000c735762000c675f8262000c35565b60018101905062000c52565b5050565b601f82111562000cc25762000c8c8162000b42565b62000c978462000b54565b8101602085101562000ca7578190505b62000cbf62000cb68562000b54565b83018262000c51565b50505b505050565b5f82821c905092915050565b5f62000ce45f198460080262000cc7565b1980831691505092915050565b5f62000cfe838362000cd3565b9150826002028217905092915050565b62000d198262000aaa565b67ffffffffffffffff81111562000d355762000d3462000ab4565b5b62000d41825462000b0e565b62000d4e82828562000c77565b5f60209050601f83116001811462000d84575f841562000d6f578287015190505b62000d7b858262000cf1565b86555062000dea565b601f19841662000d948662000b42565b5f5b8281101562000dbd5784890151825560018201915060208501945060208101905062000d96565b8683101562000ddd578489015162000dd9601f89168262000cd3565b8355505b6001600288020188555050505b505050505050565b5f6020828403121562000e0a5762000e0962000a00565b5b5f62000e198482850162000a4f565b91505092915050565b62000e2d8162000a23565b82525050565b5f60408201905062000e485f83018562000e22565b62000e57602083018462000e22565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ec48262000bc4565b915062000ed18362000bc4565b92508262000ee45762000ee362000e5e565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f3560208362000eef565b915062000f428262000eff565b602082019050919050565b5f6020820190508181035f83015262000f668162000f27565b9050919050565b5f8115159050919050565b62000f838162000f6d565b82525050565b5f60208201905062000f9e5f83018462000f78565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000fda601f8362000eef565b915062000fe78262000fa4565b602082019050919050565b5f6020820190508181035f8301526200100b8162000fcc565b9050919050565b5f6200101e8262000bc4565b91506200102b8362000bc4565b925082820190508082111562001046576200104562000e8b565b5b92915050565b620010578162000bc4565b82525050565b5f602082019050620010725f8301846200104c565b92915050565b60805160a051614a60620010b65f395f8181610e7101526115aa01525f8181610b88015281816130800152818161315f01526131860152614a605ff3fe60806040526004361061028b575f3560e01c8063881dce6011610159578063c0246668116100c0578063dd62ed3e11610079578063dd62ed3e146109b2578063e2f45605146109ee578063eba4c33314610a18578063f2fde38b14610a40578063f8b45b0514610a68578063fabb0b4f14610a9257610292565b8063c0246668146108aa578063c18bc195146108d2578063c6ff4920146108fa578063c8c8ebe414610922578063d257b34f1461094c578063d85ba0631461098857610292565b8063a457c2d711610112578063a457c2d71461077c578063a672990c146107b8578063a9059cbb146107e0578063aacebbe31461081c578063b62496f514610844578063bbc0c7421461088057610292565b8063881dce60146106865780638da5cb5b146106ae57806392136913146106d8578063924de9b71461070257806395d89b411461072a5780639a7a23d61461075457610292565b806349bd5a5e116101fd578063715018a6116101b6578063715018a6146105a457806371fc4688146105ba578063751039fc146105e25780637571336a1461060c57806375f0a8741461063457806382aa7c681461065e57610292565b806349bd5a5e146104aa5780634a62bb65146104d45780636a486a8e146104fe5780636ddd1713146105285780636fc3eaec1461055257806370a082311461056857610292565b80631f3fed8f1161024f5780631f3fed8f1461038c578063203e727e146103b657806323b872dd146103de57806327c8f8351461041a578063313ce56714610444578063395093511461046e57610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc5780631694505e1461033857806318160ddd1461036257610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610abc565b6040516102b791906136e1565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e1919061379f565b610b4c565b6040516102f391906137f7565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613810565b610b69565b60405161032f91906137f7565b60405180910390f35b348015610343575f80fd5b5061034c610b86565b6040516103599190613896565b60405180910390f35b34801561036d575f80fd5b50610376610baa565b60405161038391906138be565b60405180910390f35b348015610397575f80fd5b506103a0610bb3565b6040516103ad91906138be565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d791906138d7565b610bb9565b005b3480156103e9575f80fd5b5061040460048036038101906103ff9190613902565b610cc8565b60405161041191906137f7565b60405180910390f35b348015610425575f80fd5b5061042e610dba565b60405161043b9190613961565b60405180910390f35b34801561044f575f80fd5b50610458610dc0565b6040516104659190613995565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f919061379f565b610dc8565b6040516104a191906137f7565b60405180910390f35b3480156104b5575f80fd5b506104be610e6f565b6040516104cb9190613961565b60405180910390f35b3480156104df575f80fd5b506104e8610e93565b6040516104f591906137f7565b60405180910390f35b348015610509575f80fd5b50610512610ea5565b60405161051f91906138be565b60405180910390f35b348015610533575f80fd5b5061053c610eab565b60405161054991906137f7565b60405180910390f35b34801561055d575f80fd5b50610566610ebe565b005b348015610573575f80fd5b5061058e60048036038101906105899190613810565b610f4c565b60405161059b91906138be565b60405180910390f35b3480156105af575f80fd5b506105b8610f91565b005b3480156105c5575f80fd5b506105e060048036038101906105db91906138d7565b611018565b005b3480156105ed575f80fd5b506105f66110ed565b60405161060391906137f7565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906139d8565b61118a565b005b34801561063f575f80fd5b5061064861125e565b6040516106559190613961565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f91906138d7565b611283565b005b348015610691575f80fd5b506106ac60048036038101906106a791906138d7565b611373565b005b3480156106b9575f80fd5b506106c26113d5565b6040516106cf9190613961565b60405180910390f35b3480156106e3575f80fd5b506106ec6113fd565b6040516106f991906138be565b60405180910390f35b34801561070d575f80fd5b5061072860048036038101906107239190613a16565b611403565b005b348015610735575f80fd5b5061073e61149c565b60405161074b91906136e1565b60405180910390f35b34801561075f575f80fd5b5061077a600480360381019061077591906139d8565b61152c565b005b348015610787575f80fd5b506107a2600480360381019061079d919061379f565b611644565b6040516107af91906137f7565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d991906139d8565b61172a565b005b3480156107eb575f80fd5b506108066004803603810190610801919061379f565b611852565b60405161081391906137f7565b60405180910390f35b348015610827575f80fd5b50610842600480360381019061083d9190613810565b61186f565b005b34801561084f575f80fd5b5061086a60048036038101906108659190613810565b6119a9565b60405161087791906137f7565b60405180910390f35b34801561088b575f80fd5b506108946119c6565b6040516108a191906137f7565b60405180910390f35b3480156108b5575f80fd5b506108d060048036038101906108cb91906139d8565b6119d9565b005b3480156108dd575f80fd5b506108f860048036038101906108f391906138d7565b611afb565b005b348015610905575f80fd5b50610920600480360381019061091b9190613b81565b611c0a565b005b34801561092d575f80fd5b50610936611d05565b60405161094391906138be565b60405180910390f35b348015610957575f80fd5b50610972600480360381019061096d91906138d7565b611d0b565b60405161097f91906137f7565b60405180910390f35b348015610993575f80fd5b5061099c611e5f565b6040516109a991906138be565b60405180910390f35b3480156109bd575f80fd5b506109d860048036038101906109d39190613bc8565b611e65565b6040516109e591906138be565b60405180910390f35b3480156109f9575f80fd5b50610a02611ee7565b604051610a0f91906138be565b60405180910390f35b348015610a23575f80fd5b50610a3e6004803603810190610a3991906138d7565b611eed565b005b348015610a4b575f80fd5b50610a666004803603810190610a619190613810565b611fc2565b005b348015610a73575f80fd5b50610a7c6120b8565b604051610a8991906138be565b60405180910390f35b348015610a9d575f80fd5b50610aa66120be565b604051610ab391906138be565b60405180910390f35b606060038054610acb90613c33565b80601f0160208091040260200160405190810160405280929190818152602001828054610af790613c33565b8015610b425780601f10610b1957610100808354040283529160200191610b42565b820191905f5260205f20905b815481529060010190602001808311610b2557829003601f168201915b5050505050905090565b5f610b5f610b586120c4565b84846120cb565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60165481565b610bc16120c4565b73ffffffffffffffffffffffffffffffffffffffff16610bdf6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90613cad565b60405180910390fd5b670de0b6b3a76400006103e86001610c4b610baa565b610c559190613cf8565b610c5f9190613d66565b610c699190613d66565b811015610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613e06565b60405180910390fd5b670de0b6b3a764000081610cbf9190613cf8565b60078190555050565b5f610cd484848461228e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d1b6120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190613e94565b60405180910390fd5b610dae85610da66120c4565b8584036120cb565b60019150509392505050565b61dead81565b5f6012905090565b5f610e65610dd46120c4565b848460015f610de16120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e609190613eb2565b6120cb565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b60145481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f0490613f12565b5f6040518083038185875af1925050503d805f8114610f3e576040519150601f19603f3d011682016040523d82523d5f602084013e610f43565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f996120c4565b73ffffffffffffffffffffffffffffffffffffffff16610fb76113d5565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490613cad565b60405180910390fd5b6110165f612f20565b565b6110206120c4565b73ffffffffffffffffffffffffffffffffffffffff1661103e6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613cad565b60405180910390fd5b80601381905550601354601281905550600a60125411156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613f70565b60405180910390fd5b50565b5f6110f66120c4565b73ffffffffffffffffffffffffffffffffffffffff166111146113d5565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613cad565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b6111926120c4565b73ffffffffffffffffffffffffffffffffffffffff166111b06113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90613cad565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61128b6120c4565b73ffffffffffffffffffffffffffffffffffffffff166112a96113d5565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613cad565b60405180910390fd5b806011819055506b033b2e3c9fd0803ce80000006007819055506b06765c793fa10079d00000006009819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600d8190555042600f8190555050565b61137c30610f4c565b811115801561138a57505f81115b6113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613fd8565b60405180910390fd5b6113d281612fe3565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b61140b6120c4565b73ffffffffffffffffffffffffffffffffffffffff166114296113d5565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613cad565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546114ab90613c33565b80601f01602080910402602001604051908101604052809291908181526020018280546114d790613c33565b80156115225780601f106114f957610100808354040283529160200191611522565b820191905f5260205f20905b81548152906001019060200180831161150557829003601f168201915b5050505050905090565b6115346120c4565b73ffffffffffffffffffffffffffffffffffffffff166115526113d5565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613cad565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90614066565b60405180910390fd5b6116408282613216565b5050565b5f8060015f6116516120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906140f4565b60405180910390fd5b61171f6117166120c4565b858584036120cb565b600191505092915050565b6117326120c4565b73ffffffffffffffffffffffffffffffffffffffff166117506113d5565b73ffffffffffffffffffffffffffffffffffffffff16146117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613cad565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61186561185e6120c4565b848461228e565b6001905092915050565b6118776120c4565b73ffffffffffffffffffffffffffffffffffffffff166118956113d5565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613cad565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b6119e16120c4565b73ffffffffffffffffffffffffffffffffffffffff166119ff6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613cad565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611aef91906137f7565b60405180910390a25050565b611b036120c4565b73ffffffffffffffffffffffffffffffffffffffff16611b216113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90613cad565b60405180910390fd5b670de0b6b3a76400006103e86005611b8d610baa565b611b979190613cf8565b611ba19190613d66565b611bab9190613d66565b811015611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614182565b60405180910390fd5b670de0b6b3a764000081611c019190613cf8565b60098190555050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c4a6120c4565b73ffffffffffffffffffffffffffffffffffffffff1614611c69575f80fd5b5f5b8151811015611d0157600b828281518110611c8957611c886141a0565b5b6020026020010151908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611cf9906141cd565b915050611c6b565b5050565b60075481565b5f611d146120c4565b73ffffffffffffffffffffffffffffffffffffffff16611d326113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90613cad565b60405180910390fd5b620186a06001611d96610baa565b611da09190613cf8565b611daa9190613d66565b821015611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390614284565b60405180910390fd5b6103e86005611df9610baa565b611e039190613cf8565b611e0d9190613d66565b821115611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614312565b60405180910390fd5b8160088190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ef56120c4565b73ffffffffffffffffffffffffffffffffffffffff16611f136113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090613cad565b60405180910390fd5b80601581905550601554601481905550600a6014541115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690613f70565b60405180910390fd5b50565b611fca6120c4565b73ffffffffffffffffffffffffffffffffffffffff16611fe86113d5565b73ffffffffffffffffffffffffffffffffffffffff161461203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613cad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a3906143a0565b60405180910390fd5b6120b581612f20565b50565b60095481565b60115481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061442e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e906144bc565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161228191906138be565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f39061454a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906145d8565b60405180910390fd5b5f81036123815761237c83835f6132b4565b612f1b565b600a5f9054906101000a900460ff1615612b2f5761239d6113d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240b57506123db6113d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124965750600560149054906101000a900460ff16155b15612b2e575f5b600b805490508110156125a757600b81815481106124be576124bd6141a0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361259457600b818154811061252c5761252b6141a0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b808061259f906141cd565b91505061249d565b50600e54600d546125b89190613eb2565b431161261757600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612616575f80fd5b5b43601154600e54600d5461262b9190613eb2565b6126359190613eb2565b101580156126905750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126e057605a601381905550601354601281905550605a6015819055506015546014819055506a084595161401484a0000006007819055506a108b2a2c28029094000000600981905550612765565b601154600e54600d546126f39190613eb2565b6126fd9190613eb2565b431180156127195750603e600d546127159190613eb2565b4311155b156127645769d3c21bcecceda10000006007819055506a01a784379d99db42000000600981905550600f601381905550601354601281905550601e6015819055506015546014819055505b5b600a60019054906101000a900460ff166128545760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612814575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a90614640565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128f1575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129985760075481111561293b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612932906146ce565b60405180910390fd5b60095461294783610f4c565b826129529190613eb2565b1115612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614736565b60405180910390fd5b612b2d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a35575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a8457600754811115612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a76906147c4565b60405180910390fd5b612b2c565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b2b57600954612ade83610f4c565b82612ae99190613eb2565b1115612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190614736565b60405180910390fd5b5b5b5b5b5b5f612b3930610f4c565b90505f6008548210159050808015612b5d5750600a60029054906101000a900460ff165b8015612b765750600560149054906101000a900460ff16155b8015612bc9575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c1c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c6f575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cb2576001600560146101000a81548160ff021916908315150217905550612c97613529565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d61575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d6a575f90505b5f8115612f0b5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dc857505f601454115b15612e2e57612df56064612de76014548861362390919063ffffffff16565b61363890919063ffffffff16565b905060145460155482612e089190613cf8565b612e129190613d66565b60165f828254612e229190613eb2565b92505081905550612ee8565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e8557505f601254115b15612ee757612eb26064612ea46012548861362390919063ffffffff16565b61363890919063ffffffff16565b905060125460135482612ec59190613cf8565b612ecf9190613d66565b60165f828254612edf9190613eb2565b925050819055505b5b5f811115612efc57612efb8730836132b4565b5b8085612f0891906147e2565b94505b612f168787876132b4565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612fff57612ffe613a45565b5b60405190808252806020026020018201604052801561302d5781602001602082028036833780820191505090505b50905030815f81518110613044576130436141a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310b9190614829565b8160018151811061311f5761311e6141a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613184307f0000000000000000000000000000000000000000000000000000000000000000846120cb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131e5959493929190614944565b5f604051808303815f87803b1580156131fc575f80fd5b505af115801561320e573d5f803e3d5ffd5b505050505050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133199061454a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613390576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613387906145d8565b60405180910390fd5b61339b83838361364d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590614a0c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546134ac9190613eb2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161351091906138be565b60405180910390a3613523848484613652565b50505050565b5f61353330610f4c565b90505f60165490505f8083148061354957505f82145b1561355657505050613621565b60146008546135659190613cf8565b83111561357e57601460085461357b9190613cf8565b92505b5f83905061358b81612fe3565b5f60168190555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135d790613f12565b5f6040518083038185875af1925050503d805f8114613611576040519150601f19603f3d011682016040523d82523d5f602084013e613616565b606091505b505080925050505050505b565b5f81836136309190613cf8565b905092915050565b5f81836136459190613d66565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561368e578082015181840152602081019050613673565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136b382613657565b6136bd8185613661565b93506136cd818560208601613671565b6136d681613699565b840191505092915050565b5f6020820190508181035f8301526136f981846136a9565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61373b82613712565b9050919050565b61374b81613731565b8114613755575f80fd5b50565b5f8135905061376681613742565b92915050565b5f819050919050565b61377e8161376c565b8114613788575f80fd5b50565b5f8135905061379981613775565b92915050565b5f80604083850312156137b5576137b461370a565b5b5f6137c285828601613758565b92505060206137d38582860161378b565b9150509250929050565b5f8115159050919050565b6137f1816137dd565b82525050565b5f60208201905061380a5f8301846137e8565b92915050565b5f602082840312156138255761382461370a565b5b5f61383284828501613758565b91505092915050565b5f819050919050565b5f61385e61385961385484613712565b61383b565b613712565b9050919050565b5f61386f82613844565b9050919050565b5f61388082613865565b9050919050565b61389081613876565b82525050565b5f6020820190506138a95f830184613887565b92915050565b6138b88161376c565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b5f602082840312156138ec576138eb61370a565b5b5f6138f98482850161378b565b91505092915050565b5f805f606084860312156139195761391861370a565b5b5f61392686828701613758565b935050602061393786828701613758565b92505060406139488682870161378b565b9150509250925092565b61395b81613731565b82525050565b5f6020820190506139745f830184613952565b92915050565b5f60ff82169050919050565b61398f8161397a565b82525050565b5f6020820190506139a85f830184613986565b92915050565b6139b7816137dd565b81146139c1575f80fd5b50565b5f813590506139d2816139ae565b92915050565b5f80604083850312156139ee576139ed61370a565b5b5f6139fb85828601613758565b9250506020613a0c858286016139c4565b9150509250929050565b5f60208284031215613a2b57613a2a61370a565b5b5f613a38848285016139c4565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613a7b82613699565b810181811067ffffffffffffffff82111715613a9a57613a99613a45565b5b80604052505050565b5f613aac613701565b9050613ab88282613a72565b919050565b5f67ffffffffffffffff821115613ad757613ad6613a45565b5b602082029050602081019050919050565b5f80fd5b5f613afe613af984613abd565b613aa3565b90508083825260208201905060208402830185811115613b2157613b20613ae8565b5b835b81811015613b4a5780613b368882613758565b845260208401935050602081019050613b23565b5050509392505050565b5f82601f830112613b6857613b67613a41565b5b8135613b78848260208601613aec565b91505092915050565b5f60208284031215613b9657613b9561370a565b5b5f82013567ffffffffffffffff811115613bb357613bb261370e565b5b613bbf84828501613b54565b91505092915050565b5f8060408385031215613bde57613bdd61370a565b5b5f613beb85828601613758565b9250506020613bfc85828601613758565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c4a57607f821691505b602082108103613c5d57613c5c613c06565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c97602083613661565b9150613ca282613c63565b602082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d028261376c565b9150613d0d8361376c565b9250828202613d1b8161376c565b91508282048414831517613d3257613d31613ccb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d708261376c565b9150613d7b8361376c565b925082613d8b57613d8a613d39565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613df0602f83613661565b9150613dfb82613d96565b604082019050919050565b5f6020820190508181035f830152613e1d81613de4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e7e602883613661565b9150613e8982613e24565b604082019050919050565b5f6020820190508181035f830152613eab81613e72565b9050919050565b5f613ebc8261376c565b9150613ec78361376c565b9250828201905080821115613edf57613ede613ccb565b5b92915050565b5f81905092915050565b50565b5f613efd5f83613ee5565b9150613f0882613eef565b5f82019050919050565b5f613f1c82613ef2565b9150819050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f613f5a601d83613661565b9150613f6582613f26565b602082019050919050565b5f6020820190508181035f830152613f8781613f4e565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613fc2600c83613661565b9150613fcd82613f8e565b602082019050919050565b5f6020820190508181035f830152613fef81613fb6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614050603983613661565b915061405b82613ff6565b604082019050919050565b5f6020820190508181035f83015261407d81614044565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140de602583613661565b91506140e982614084565b604082019050919050565b5f6020820190508181035f83015261410b816140d2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61416c602483613661565b915061417782614112565b604082019050919050565b5f6020820190508181035f83015261419981614160565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6141d78261376c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361420957614208613ccb565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61426e603583613661565b915061427982614214565b604082019050919050565b5f6020820190508181035f83015261429b81614262565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6142fc603483613661565b9150614307826142a2565b604082019050919050565b5f6020820190508181035f830152614329816142f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61438a602683613661565b915061439582614330565b604082019050919050565b5f6020820190508181035f8301526143b78161437e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614418602483613661565b9150614423826143be565b604082019050919050565b5f6020820190508181035f8301526144458161440c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a6602283613661565b91506144b18261444c565b604082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614534602583613661565b915061453f826144da565b604082019050919050565b5f6020820190508181035f83015261456181614528565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145c2602383613661565b91506145cd82614568565b604082019050919050565b5f6020820190508181035f8301526145ef816145b6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61462a601683613661565b9150614635826145f6565b602082019050919050565b5f6020820190508181035f8301526146578161461e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6146b8603583613661565b91506146c38261465e565b604082019050919050565b5f6020820190508181035f8301526146e5816146ac565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614720601383613661565b915061472b826146ec565b602082019050919050565b5f6020820190508181035f83015261474d81614714565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6147ae603683613661565b91506147b982614754565b604082019050919050565b5f6020820190508181035f8301526147db816147a2565b9050919050565b5f6147ec8261376c565b91506147f78361376c565b925082820390508181111561480f5761480e613ccb565b5b92915050565b5f8151905061482381613742565b92915050565b5f6020828403121561483e5761483d61370a565b5b5f61484b84828501614815565b91505092915050565b5f819050919050565b5f61487761487261486d84614854565b61383b565b61376c565b9050919050565b6148878161485d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6148bf81613731565b82525050565b5f6148d083836148b6565b60208301905092915050565b5f602082019050919050565b5f6148f28261488d565b6148fc8185614897565b9350614907836148a7565b805f5b8381101561493757815161491e88826148c5565b9750614929836148dc565b92505060018101905061490a565b5085935050505092915050565b5f60a0820190506149575f8301886138af565b614964602083018761487e565b818103604083015261497681866148e8565b90506149856060830185613952565b61499260808301846138af565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149f6602683613661565b9150614a018261499c565b604082019050919050565b5f6020820190508181035f830152614a23816149ea565b905091905056fea26469706673582212206a81ee1589868b32aeda9a19f586740853b363756b175b5c9754c9ae0c620aaa64736f6c63430008140033000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704

Deployed Bytecode

0x60806040526004361061028b575f3560e01c8063881dce6011610159578063c0246668116100c0578063dd62ed3e11610079578063dd62ed3e146109b2578063e2f45605146109ee578063eba4c33314610a18578063f2fde38b14610a40578063f8b45b0514610a68578063fabb0b4f14610a9257610292565b8063c0246668146108aa578063c18bc195146108d2578063c6ff4920146108fa578063c8c8ebe414610922578063d257b34f1461094c578063d85ba0631461098857610292565b8063a457c2d711610112578063a457c2d71461077c578063a672990c146107b8578063a9059cbb146107e0578063aacebbe31461081c578063b62496f514610844578063bbc0c7421461088057610292565b8063881dce60146106865780638da5cb5b146106ae57806392136913146106d8578063924de9b71461070257806395d89b411461072a5780639a7a23d61461075457610292565b806349bd5a5e116101fd578063715018a6116101b6578063715018a6146105a457806371fc4688146105ba578063751039fc146105e25780637571336a1461060c57806375f0a8741461063457806382aa7c681461065e57610292565b806349bd5a5e146104aa5780634a62bb65146104d45780636a486a8e146104fe5780636ddd1713146105285780636fc3eaec1461055257806370a082311461056857610292565b80631f3fed8f1161024f5780631f3fed8f1461038c578063203e727e146103b657806323b872dd146103de57806327c8f8351461041a578063313ce56714610444578063395093511461046e57610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc5780631694505e1461033857806318160ddd1461036257610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610abc565b6040516102b791906136e1565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e1919061379f565b610b4c565b6040516102f391906137f7565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613810565b610b69565b60405161032f91906137f7565b60405180910390f35b348015610343575f80fd5b5061034c610b86565b6040516103599190613896565b60405180910390f35b34801561036d575f80fd5b50610376610baa565b60405161038391906138be565b60405180910390f35b348015610397575f80fd5b506103a0610bb3565b6040516103ad91906138be565b60405180910390f35b3480156103c1575f80fd5b506103dc60048036038101906103d791906138d7565b610bb9565b005b3480156103e9575f80fd5b5061040460048036038101906103ff9190613902565b610cc8565b60405161041191906137f7565b60405180910390f35b348015610425575f80fd5b5061042e610dba565b60405161043b9190613961565b60405180910390f35b34801561044f575f80fd5b50610458610dc0565b6040516104659190613995565b60405180910390f35b348015610479575f80fd5b50610494600480360381019061048f919061379f565b610dc8565b6040516104a191906137f7565b60405180910390f35b3480156104b5575f80fd5b506104be610e6f565b6040516104cb9190613961565b60405180910390f35b3480156104df575f80fd5b506104e8610e93565b6040516104f591906137f7565b60405180910390f35b348015610509575f80fd5b50610512610ea5565b60405161051f91906138be565b60405180910390f35b348015610533575f80fd5b5061053c610eab565b60405161054991906137f7565b60405180910390f35b34801561055d575f80fd5b50610566610ebe565b005b348015610573575f80fd5b5061058e60048036038101906105899190613810565b610f4c565b60405161059b91906138be565b60405180910390f35b3480156105af575f80fd5b506105b8610f91565b005b3480156105c5575f80fd5b506105e060048036038101906105db91906138d7565b611018565b005b3480156105ed575f80fd5b506105f66110ed565b60405161060391906137f7565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906139d8565b61118a565b005b34801561063f575f80fd5b5061064861125e565b6040516106559190613961565b60405180910390f35b348015610669575f80fd5b50610684600480360381019061067f91906138d7565b611283565b005b348015610691575f80fd5b506106ac60048036038101906106a791906138d7565b611373565b005b3480156106b9575f80fd5b506106c26113d5565b6040516106cf9190613961565b60405180910390f35b3480156106e3575f80fd5b506106ec6113fd565b6040516106f991906138be565b60405180910390f35b34801561070d575f80fd5b5061072860048036038101906107239190613a16565b611403565b005b348015610735575f80fd5b5061073e61149c565b60405161074b91906136e1565b60405180910390f35b34801561075f575f80fd5b5061077a600480360381019061077591906139d8565b61152c565b005b348015610787575f80fd5b506107a2600480360381019061079d919061379f565b611644565b6040516107af91906137f7565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d991906139d8565b61172a565b005b3480156107eb575f80fd5b506108066004803603810190610801919061379f565b611852565b60405161081391906137f7565b60405180910390f35b348015610827575f80fd5b50610842600480360381019061083d9190613810565b61186f565b005b34801561084f575f80fd5b5061086a60048036038101906108659190613810565b6119a9565b60405161087791906137f7565b60405180910390f35b34801561088b575f80fd5b506108946119c6565b6040516108a191906137f7565b60405180910390f35b3480156108b5575f80fd5b506108d060048036038101906108cb91906139d8565b6119d9565b005b3480156108dd575f80fd5b506108f860048036038101906108f391906138d7565b611afb565b005b348015610905575f80fd5b50610920600480360381019061091b9190613b81565b611c0a565b005b34801561092d575f80fd5b50610936611d05565b60405161094391906138be565b60405180910390f35b348015610957575f80fd5b50610972600480360381019061096d91906138d7565b611d0b565b60405161097f91906137f7565b60405180910390f35b348015610993575f80fd5b5061099c611e5f565b6040516109a991906138be565b60405180910390f35b3480156109bd575f80fd5b506109d860048036038101906109d39190613bc8565b611e65565b6040516109e591906138be565b60405180910390f35b3480156109f9575f80fd5b50610a02611ee7565b604051610a0f91906138be565b60405180910390f35b348015610a23575f80fd5b50610a3e6004803603810190610a3991906138d7565b611eed565b005b348015610a4b575f80fd5b50610a666004803603810190610a619190613810565b611fc2565b005b348015610a73575f80fd5b50610a7c6120b8565b604051610a8991906138be565b60405180910390f35b348015610a9d575f80fd5b50610aa66120be565b604051610ab391906138be565b60405180910390f35b606060038054610acb90613c33565b80601f0160208091040260200160405190810160405280929190818152602001828054610af790613c33565b8015610b425780601f10610b1957610100808354040283529160200191610b42565b820191905f5260205f20905b815481529060010190602001808311610b2557829003601f168201915b5050505050905090565b5f610b5f610b586120c4565b84846120cb565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60165481565b610bc16120c4565b73ffffffffffffffffffffffffffffffffffffffff16610bdf6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90613cad565b60405180910390fd5b670de0b6b3a76400006103e86001610c4b610baa565b610c559190613cf8565b610c5f9190613d66565b610c699190613d66565b811015610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613e06565b60405180910390fd5b670de0b6b3a764000081610cbf9190613cf8565b60078190555050565b5f610cd484848461228e565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d1b6120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9190613e94565b60405180910390fd5b610dae85610da66120c4565b8584036120cb565b60019150509392505050565b61dead81565b5f6012905090565b5f610e65610dd46120c4565b848460015f610de16120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e609190613eb2565b6120cb565b6001905092915050565b7f0000000000000000000000006f65431526f8a8d12a83dd0a7fc1cf0545d6d45581565b600a5f9054906101000a900460ff1681565b60145481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f0490613f12565b5f6040518083038185875af1925050503d805f8114610f3e576040519150601f19603f3d011682016040523d82523d5f602084013e610f43565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f996120c4565b73ffffffffffffffffffffffffffffffffffffffff16610fb76113d5565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490613cad565b60405180910390fd5b6110165f612f20565b565b6110206120c4565b73ffffffffffffffffffffffffffffffffffffffff1661103e6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90613cad565b60405180910390fd5b80601381905550601354601281905550600a60125411156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613f70565b60405180910390fd5b50565b5f6110f66120c4565b73ffffffffffffffffffffffffffffffffffffffff166111146113d5565b73ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613cad565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b6111926120c4565b73ffffffffffffffffffffffffffffffffffffffff166111b06113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90613cad565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61128b6120c4565b73ffffffffffffffffffffffffffffffffffffffff166112a96113d5565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613cad565b60405180910390fd5b806011819055506b033b2e3c9fd0803ce80000006007819055506b06765c793fa10079d00000006009819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600d8190555042600f8190555050565b61137c30610f4c565b811115801561138a57505f81115b6113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090613fd8565b60405180910390fd5b6113d281612fe3565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b61140b6120c4565b73ffffffffffffffffffffffffffffffffffffffff166114296113d5565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613cad565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546114ab90613c33565b80601f01602080910402602001604051908101604052809291908181526020018280546114d790613c33565b80156115225780601f106114f957610100808354040283529160200191611522565b820191905f5260205f20905b81548152906001019060200180831161150557829003601f168201915b5050505050905090565b6115346120c4565b73ffffffffffffffffffffffffffffffffffffffff166115526113d5565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613cad565b60405180910390fd5b7f0000000000000000000000006f65431526f8a8d12a83dd0a7fc1cf0545d6d45573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90614066565b60405180910390fd5b6116408282613216565b5050565b5f8060015f6116516120c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906140f4565b60405180910390fd5b61171f6117166120c4565b858584036120cb565b600191505092915050565b6117326120c4565b73ffffffffffffffffffffffffffffffffffffffff166117506113d5565b73ffffffffffffffffffffffffffffffffffffffff16146117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613cad565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61186561185e6120c4565b848461228e565b6001905092915050565b6118776120c4565b73ffffffffffffffffffffffffffffffffffffffff166118956113d5565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613cad565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b6119e16120c4565b73ffffffffffffffffffffffffffffffffffffffff166119ff6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613cad565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611aef91906137f7565b60405180910390a25050565b611b036120c4565b73ffffffffffffffffffffffffffffffffffffffff16611b216113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90613cad565b60405180910390fd5b670de0b6b3a76400006103e86005611b8d610baa565b611b979190613cf8565b611ba19190613d66565b611bab9190613d66565b811015611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614182565b60405180910390fd5b670de0b6b3a764000081611c019190613cf8565b60098190555050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c4a6120c4565b73ffffffffffffffffffffffffffffffffffffffff1614611c69575f80fd5b5f5b8151811015611d0157600b828281518110611c8957611c886141a0565b5b6020026020010151908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080611cf9906141cd565b915050611c6b565b5050565b60075481565b5f611d146120c4565b73ffffffffffffffffffffffffffffffffffffffff16611d326113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90613cad565b60405180910390fd5b620186a06001611d96610baa565b611da09190613cf8565b611daa9190613d66565b821015611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390614284565b60405180910390fd5b6103e86005611df9610baa565b611e039190613cf8565b611e0d9190613d66565b821115611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614312565b60405180910390fd5b8160088190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ef56120c4565b73ffffffffffffffffffffffffffffffffffffffff16611f136113d5565b73ffffffffffffffffffffffffffffffffffffffff1614611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090613cad565b60405180910390fd5b80601581905550601554601481905550600a6014541115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690613f70565b60405180910390fd5b50565b611fca6120c4565b73ffffffffffffffffffffffffffffffffffffffff16611fe86113d5565b73ffffffffffffffffffffffffffffffffffffffff161461203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613cad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a3906143a0565b60405180910390fd5b6120b581612f20565b50565b60095481565b60115481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061442e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e906144bc565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161228191906138be565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f39061454a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906145d8565b60405180910390fd5b5f81036123815761237c83835f6132b4565b612f1b565b600a5f9054906101000a900460ff1615612b2f5761239d6113d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240b57506123db6113d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124965750600560149054906101000a900460ff16155b15612b2e575f5b600b805490508110156125a757600b81815481106124be576124bd6141a0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361259457600b818154811061252c5761252b6141a0565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b808061259f906141cd565b91505061249d565b50600e54600d546125b89190613eb2565b431161261757600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612616575f80fd5b5b43601154600e54600d5461262b9190613eb2565b6126359190613eb2565b101580156126905750600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126e057605a601381905550601354601281905550605a6015819055506015546014819055506a084595161401484a0000006007819055506a108b2a2c28029094000000600981905550612765565b601154600e54600d546126f39190613eb2565b6126fd9190613eb2565b431180156127195750603e600d546127159190613eb2565b4311155b156127645769d3c21bcecceda10000006007819055506a01a784379d99db42000000600981905550600f601381905550601354601281905550601e6015819055506015546014819055505b5b600a60019054906101000a900460ff166128545760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612814575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a90614640565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128f1575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129985760075481111561293b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612932906146ce565b60405180910390fd5b60095461294783610f4c565b826129529190613eb2565b1115612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90614736565b60405180910390fd5b612b2d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a35575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a8457600754811115612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a76906147c4565b60405180910390fd5b612b2c565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b2b57600954612ade83610f4c565b82612ae99190613eb2565b1115612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190614736565b60405180910390fd5b5b5b5b5b5b5f612b3930610f4c565b90505f6008548210159050808015612b5d5750600a60029054906101000a900460ff165b8015612b765750600560149054906101000a900460ff16155b8015612bc9575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c1c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c6f575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cb2576001600560146101000a81548160ff021916908315150217905550612c97613529565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d61575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d6a575f90505b5f8115612f0b5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dc857505f601454115b15612e2e57612df56064612de76014548861362390919063ffffffff16565b61363890919063ffffffff16565b905060145460155482612e089190613cf8565b612e129190613d66565b60165f828254612e229190613eb2565b92505081905550612ee8565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e8557505f601254115b15612ee757612eb26064612ea46012548861362390919063ffffffff16565b61363890919063ffffffff16565b905060125460135482612ec59190613cf8565b612ecf9190613d66565b60165f828254612edf9190613eb2565b925050819055505b5b5f811115612efc57612efb8730836132b4565b5b8085612f0891906147e2565b94505b612f168787876132b4565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612fff57612ffe613a45565b5b60405190808252806020026020018201604052801561302d5781602001602082028036833780820191505090505b50905030815f81518110613044576130436141a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310b9190614829565b8160018151811061311f5761311e6141a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613184307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120cb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131e5959493929190614944565b5f604051808303815f87803b1580156131fc575f80fd5b505af115801561320e573d5f803e3d5ffd5b505050505050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133199061454a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613390576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613387906145d8565b60405180910390fd5b61339b83838361364d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590614a0c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546134ac9190613eb2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161351091906138be565b60405180910390a3613523848484613652565b50505050565b5f61353330610f4c565b90505f60165490505f8083148061354957505f82145b1561355657505050613621565b60146008546135659190613cf8565b83111561357e57601460085461357b9190613cf8565b92505b5f83905061358b81612fe3565b5f60168190555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135d790613f12565b5f6040518083038185875af1925050503d805f8114613611576040519150601f19603f3d011682016040523d82523d5f602084013e613616565b606091505b505080925050505050505b565b5f81836136309190613cf8565b905092915050565b5f81836136459190613d66565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561368e578082015181840152602081019050613673565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136b382613657565b6136bd8185613661565b93506136cd818560208601613671565b6136d681613699565b840191505092915050565b5f6020820190508181035f8301526136f981846136a9565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61373b82613712565b9050919050565b61374b81613731565b8114613755575f80fd5b50565b5f8135905061376681613742565b92915050565b5f819050919050565b61377e8161376c565b8114613788575f80fd5b50565b5f8135905061379981613775565b92915050565b5f80604083850312156137b5576137b461370a565b5b5f6137c285828601613758565b92505060206137d38582860161378b565b9150509250929050565b5f8115159050919050565b6137f1816137dd565b82525050565b5f60208201905061380a5f8301846137e8565b92915050565b5f602082840312156138255761382461370a565b5b5f61383284828501613758565b91505092915050565b5f819050919050565b5f61385e61385961385484613712565b61383b565b613712565b9050919050565b5f61386f82613844565b9050919050565b5f61388082613865565b9050919050565b61389081613876565b82525050565b5f6020820190506138a95f830184613887565b92915050565b6138b88161376c565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b5f602082840312156138ec576138eb61370a565b5b5f6138f98482850161378b565b91505092915050565b5f805f606084860312156139195761391861370a565b5b5f61392686828701613758565b935050602061393786828701613758565b92505060406139488682870161378b565b9150509250925092565b61395b81613731565b82525050565b5f6020820190506139745f830184613952565b92915050565b5f60ff82169050919050565b61398f8161397a565b82525050565b5f6020820190506139a85f830184613986565b92915050565b6139b7816137dd565b81146139c1575f80fd5b50565b5f813590506139d2816139ae565b92915050565b5f80604083850312156139ee576139ed61370a565b5b5f6139fb85828601613758565b9250506020613a0c858286016139c4565b9150509250929050565b5f60208284031215613a2b57613a2a61370a565b5b5f613a38848285016139c4565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613a7b82613699565b810181811067ffffffffffffffff82111715613a9a57613a99613a45565b5b80604052505050565b5f613aac613701565b9050613ab88282613a72565b919050565b5f67ffffffffffffffff821115613ad757613ad6613a45565b5b602082029050602081019050919050565b5f80fd5b5f613afe613af984613abd565b613aa3565b90508083825260208201905060208402830185811115613b2157613b20613ae8565b5b835b81811015613b4a5780613b368882613758565b845260208401935050602081019050613b23565b5050509392505050565b5f82601f830112613b6857613b67613a41565b5b8135613b78848260208601613aec565b91505092915050565b5f60208284031215613b9657613b9561370a565b5b5f82013567ffffffffffffffff811115613bb357613bb261370e565b5b613bbf84828501613b54565b91505092915050565b5f8060408385031215613bde57613bdd61370a565b5b5f613beb85828601613758565b9250506020613bfc85828601613758565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c4a57607f821691505b602082108103613c5d57613c5c613c06565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c97602083613661565b9150613ca282613c63565b602082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d028261376c565b9150613d0d8361376c565b9250828202613d1b8161376c565b91508282048414831517613d3257613d31613ccb565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d708261376c565b9150613d7b8361376c565b925082613d8b57613d8a613d39565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613df0602f83613661565b9150613dfb82613d96565b604082019050919050565b5f6020820190508181035f830152613e1d81613de4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e7e602883613661565b9150613e8982613e24565b604082019050919050565b5f6020820190508181035f830152613eab81613e72565b9050919050565b5f613ebc8261376c565b9150613ec78361376c565b9250828201905080821115613edf57613ede613ccb565b5b92915050565b5f81905092915050565b50565b5f613efd5f83613ee5565b9150613f0882613eef565b5f82019050919050565b5f613f1c82613ef2565b9150819050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f613f5a601d83613661565b9150613f6582613f26565b602082019050919050565b5f6020820190508181035f830152613f8781613f4e565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613fc2600c83613661565b9150613fcd82613f8e565b602082019050919050565b5f6020820190508181035f830152613fef81613fb6565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614050603983613661565b915061405b82613ff6565b604082019050919050565b5f6020820190508181035f83015261407d81614044565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6140de602583613661565b91506140e982614084565b604082019050919050565b5f6020820190508181035f83015261410b816140d2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61416c602483613661565b915061417782614112565b604082019050919050565b5f6020820190508181035f83015261419981614160565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6141d78261376c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361420957614208613ccb565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61426e603583613661565b915061427982614214565b604082019050919050565b5f6020820190508181035f83015261429b81614262565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6142fc603483613661565b9150614307826142a2565b604082019050919050565b5f6020820190508181035f830152614329816142f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61438a602683613661565b915061439582614330565b604082019050919050565b5f6020820190508181035f8301526143b78161437e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614418602483613661565b9150614423826143be565b604082019050919050565b5f6020820190508181035f8301526144458161440c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144a6602283613661565b91506144b18261444c565b604082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614534602583613661565b915061453f826144da565b604082019050919050565b5f6020820190508181035f83015261456181614528565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145c2602383613661565b91506145cd82614568565b604082019050919050565b5f6020820190508181035f8301526145ef816145b6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61462a601683613661565b9150614635826145f6565b602082019050919050565b5f6020820190508181035f8301526146578161461e565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6146b8603583613661565b91506146c38261465e565b604082019050919050565b5f6020820190508181035f8301526146e5816146ac565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614720601383613661565b915061472b826146ec565b602082019050919050565b5f6020820190508181035f83015261474d81614714565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6147ae603683613661565b91506147b982614754565b604082019050919050565b5f6020820190508181035f8301526147db816147a2565b9050919050565b5f6147ec8261376c565b91506147f78361376c565b925082820390508181111561480f5761480e613ccb565b5b92915050565b5f8151905061482381613742565b92915050565b5f6020828403121561483e5761483d61370a565b5b5f61484b84828501614815565b91505092915050565b5f819050919050565b5f61487761487261486d84614854565b61383b565b61376c565b9050919050565b6148878161485d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6148bf81613731565b82525050565b5f6148d083836148b6565b60208301905092915050565b5f602082019050919050565b5f6148f28261488d565b6148fc8185614897565b9350614907836148a7565b805f5b8381101561493757815161491e88826148c5565b9750614929836148dc565b92505060018101905061490a565b5085935050505092915050565b5f60a0820190506149575f8301886138af565b614964602083018761487e565b818103604083015261497681866148e8565b90506149856060830185613952565b61499260808301846138af565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149f6602683613661565b9150614a018261499c565b604082019050919050565b5f6020820190508181035f830152614a23816149ea565b905091905056fea26469706673582212206a81ee1589868b32aeda9a19f586740853b363756b175b5c9754c9ae0c620aaa64736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704

-----Decoded View---------------
Arg [0] : walletCore (address): 0x567bdeCc9FEE399747Ce21B4528dC62222407704
Arg [1] : maxAddress (address): 0x567bdeCc9FEE399747Ce21B4528dC62222407704

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704
Arg [1] : 000000000000000000000000567bdecc9fee399747ce21b4528dc62222407704


Deployed Bytecode Sourcemap

15081:13312:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2778:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3692:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16111:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15159:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3099:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16010:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19070:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3869:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15262:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2998:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4369:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15217:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15508:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15935:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15588:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20573:174;;;;;;;;;;;;;:::i;:::-;;3215:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;896:103;;;;;;;;;;;;;:::i;:::-;;21497:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18436:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19832:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15354:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18090:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20393:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;671:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15970:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20095:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2886:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20759:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4592:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19617:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3350:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22004:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16183:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15548:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20203:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19353:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21267:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15393:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18565:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15861:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3533:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15435:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21748:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1009:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15475:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15827:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2778:100;2832:13;2865:5;2858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2778:100;:::o;3692:169::-;3775:4;3792:39;3801:12;:10;:12::i;:::-;3815:7;3824:6;3792:8;:39::i;:::-;3849:4;3842:11;;3692:169;;;;:::o;16111:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15159:51::-;;;:::o;3099:108::-;3160:7;3187:12;;3180:19;;3099:108;:::o;16010:33::-;;;;:::o;19070:275::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19207:4:::1;19199;19194:1;19178:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19177:26;;;;:::i;:::-;19176:35;;;;:::i;:::-;19166:6;:45;;19144:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;19330:6;19320;:17;;;;:::i;:::-;19297:20;:40;;;;19070:275:::0;:::o;3869:492::-;4009:4;4026:36;4036:6;4044:9;4055:6;4026:9;:36::i;:::-;4075:24;4102:11;:19;4114:6;4102:19;;;;;;;;;;;;;;;:33;4122:12;:10;:12::i;:::-;4102:33;;;;;;;;;;;;;;;;4075:60;;4174:6;4154:16;:26;;4146:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4261:57;4270:6;4278:12;:10;:12::i;:::-;4311:6;4292:16;:25;4261:8;:57::i;:::-;4349:4;4342:11;;;3869:492;;;;;:::o;15262:53::-;15308:6;15262:53;:::o;2998:93::-;3056:5;3081:2;3074:9;;2998:93;:::o;4369:215::-;4457:4;4474:80;4483:12;:10;:12::i;:::-;4497:7;4543:10;4506:11;:25;4518:12;:10;:12::i;:::-;4506:25;;;;;;;;;;;;;;;:34;4532:7;4506:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4474:8;:80::i;:::-;4572:4;4565:11;;4369:215;;;;:::o;15217:38::-;;;:::o;15508:33::-;;;;;;;;;;;;;:::o;15935:28::-;;;;:::o;15588:31::-;;;;;;;;;;;;;:::o;20573:174::-;20615:12;20660:15;;;;;;;;;;;20652:29;;20703:21;20652:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20638:101;;;;;20604:143;20573:174::o;3215:127::-;3289:7;3316:9;:18;3326:7;3316:18;;;;;;;;;;;;;;;;3309:25;;3215:127;;;:::o;896:103::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;961:30:::1;988:1;961:18;:30::i;:::-;896:103::o:0;21497:243::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21607:13:::1;21589:15;:31;;;;21646:15;;21631:12;:30;;;;21696:2;21680:12;;:18;;21672:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21497:243:::0;:::o;18436:121::-;18488:4;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18522:5:::1;18505:14;;:22;;;;;;;;;;;;;;;;;;18545:4;18538:11;;18436:121:::0;:::o;19832:167::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19987:4:::1;19945:31;:39;19977:6;19945:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19832:167:::0;;:::o;15354:30::-;;;;;;;;;;;;;:::o;18090:338::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18177:11:::1;18164:10;:24;;;;18223:18;18199:20;:42;;;;18265:18;18252:9;:31;;;;18310:4;18294:13;;:20;;;;;;;;;;;;;;;;;;18339:4;18325:11;;:18;;;;;;;;;;;;;;;;;;18367:12;18354:10;:25;;;;18405:15;18390:12;:30;;;;18090:338:::0;:::o;20393:172::-;20467:24;20485:4;20467:9;:24::i;:::-;20457:6;:34;;:48;;;;;20504:1;20495:6;:10;20457:48;20449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20533:24;20550:6;20533:16;:24::i;:::-;20393:172;:::o;671:87::-;717:7;744:6;;;;;;;;;;;737:13;;671:87;:::o;15970:31::-;;;;:::o;20095:100::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20180:7:::1;20166:11;;:21;;;;;;;;;;;;;;;;;;20095:100:::0;:::o;2886:104::-;2942:13;2975:7;2968:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2886:104;:::o;20759:304::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20903:13:::1;20895:21;;:4;:21;;::::0;20873:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:41;21043:4;21049:5;21014:28;:41::i;:::-;20759:304:::0;;:::o;4592:413::-;4685:4;4702:24;4729:11;:25;4741:12;:10;:12::i;:::-;4729:25;;;;;;;;;;;;;;;:34;4755:7;4729:34;;;;;;;;;;;;;;;;4702:61;;4802:15;4782:16;:35;;4774:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4895:67;4904:12;:10;:12::i;:::-;4918:7;4946:15;4927:16;:34;4895:8;:67::i;:::-;4993:4;4986:11;;;4592:413;;;;:::o;19617:207::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19761:4:::1;19715:31;:43;19747:10;19715:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;19810:4;19776:19;:31;19796:10;19776:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;19617:207:::0;;:::o;3350:175::-;3436:4;3453:42;3463:12;:10;:12::i;:::-;3477:9;3488:6;3453:9;:42::i;:::-;3513:4;3506:11;;3350:175;;;;:::o;22004:231::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22164:15:::1;;;;;;;;;;;22121:59;;22144:18;22121:59;;;;;;;;;;;;22209:18;22191:15;;:36;;;;;;;;;;;;;;;;;;22004:231:::0;:::o;16183:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15548:33::-;;;;;;;;;;;;;:::o;20203:182::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20319:8:::1;20288:19;:28;20308:7;20288:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20359:7;20343:34;;;20368:8;20343:34;;;;;;:::i;:::-;;;;;;;;20203:182:::0;;:::o;19353:256::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19493:4:::1;19485;19480:1;19464:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19463:26;;;;:::i;:::-;19462:35;;;;:::i;:::-;19452:6;:45;;19430:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;19594:6;19584;:17;;;;:::i;:::-;19572:9;:29;;;;19353:256:::0;:::o;21267:222::-;21355:11;;;;;;;;;;;21339:27;;:12;:10;:12::i;:::-;:27;;;21331:36;;;;;;21383:9;21378:104;21402:7;:14;21398:1;:18;21378:104;;;21438:6;21458:7;21466:1;21458:10;;;;;;;;:::i;:::-;;;;;;;;21438:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21418:3;;;;;:::i;:::-;;;;21378:104;;;;21267:222;:::o;15393:35::-;;;;:::o;18565:497::-;18673:4;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18752:6:::1;18747:1;18731:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18730:28;;;;:::i;:::-;18717:9;:41;;18695:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;18907:4;18902:1;18886:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18885:26;;;;:::i;:::-;18872:9;:39;;18850:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19023:9;19002:18;:30;;;;19050:4;19043:11;;18565:497:::0;;;:::o;15861:27::-;;;;:::o;3533:151::-;3622:7;3649:11;:18;3661:5;3649:18;;;;;;;;;;;;;;;:27;3668:7;3649:27;;;;;;;;;;;;;;;;3642:34;;3533:151;;;;:::o;15435:33::-;;;;:::o;21748:248::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21860:13:::1;21841:16;:32;;;;21900:16;;21884:13;:32;;;;21952:2;21935:13;;:19;;21927:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21748:248:::0;:::o;1009:201::-;819:12;:10;:12::i;:::-;808:23;;:7;:5;:7::i;:::-;:23;;;800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1118:1:::1;1098:22;;:8;:22;;::::0;1090:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1174:28;1193:8;1174:18;:28::i;:::-;1009:201:::0;:::o;15475:24::-;;;;:::o;15827:25::-;;;;:::o;211:98::-;264:7;291:10;284:17;;211:98;:::o;6760:380::-;6913:1;6896:19;;:5;:19;;;6888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6994:1;6975:21;;:7;:21;;;6967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7078:6;7048:11;:18;7060:5;7048:18;;;;;;;;;;;;;;;:27;7067:7;7048:27;;;;;;;;;;;;;;;:36;;;;7116:7;7100:32;;7109:5;7100:32;;;7125:6;7100:32;;;;;;:::i;:::-;;;;;;;;6760:380;;;:::o;22243:4816::-;22391:1;22375:18;;:4;:18;;;22367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22468:1;22454:16;;:2;:16;;;22446:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22537:1;22527:6;:11;22523:93;;22555:28;22571:4;22577:2;22581:1;22555:15;:28::i;:::-;22598:7;;22523:93;22632:14;;;;;;;;;;;22628:2882;;;22693:7;:5;:7::i;:::-;22685:15;;:4;:15;;;;:49;;;;;22727:7;:5;:7::i;:::-;22721:13;;:2;:13;;;;22685:49;:86;;;;;22769:1;22755:16;;:2;:16;;;;22685:86;:128;;;;;22806:6;22792:21;;:2;:21;;;;22685:128;:158;;;;;22835:8;;;;;;;;;;;22834:9;22685:158;22663:2836;;;22883:9;22878:166;22902:6;:13;;;;22898:1;:17;22878:166;;;22952:6;22959:1;22952:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22946:15;;:2;:15;;;22943:82;;22994:6;23001:1;22994:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22983:8;;:20;;;;;;;;;;;;;;;;;;22943:82;22917:3;;;;;:::i;:::-;;;;22878:166;;;;23094:12;;23081:10;;:25;;;;:::i;:::-;23065:12;:41;23062:109;;23144:8;;;;;;;;;;;23138:14;;:2;:14;;;23130:23;;;;;;23062:109;23254:12;23239:10;;23224:12;;23211:10;;:25;;;;:::i;:::-;:38;;;;:::i;:::-;23210:56;;:91;;;;;23293:8;;;;;;;;;;;23287:14;;:2;:14;;;;23210:91;23189:857;;;23355:2;23337:15;:20;;;;23391:15;;23376:12;:30;;;;23446:2;23427:16;:21;;;;23483:16;;23467:13;:32;;;;23544:16;23520:20;:40;;;;23592:16;23579:9;:29;;;;23189:857;;;23679:10;;23664:12;;23651:10;;:25;;;;:::i;:::-;:38;;;;:::i;:::-;23635:12;:55;:90;;;;;23723:2;23710:10;;:15;;;;:::i;:::-;23694:12;:31;;23635:90;23632:414;;;23785:15;23761:20;:39;;;;23832:15;23819:9;:28;;;;23884:2;23866:15;:20;;;;23920:15;;23905:12;:30;;;;23975:2;23956:16;:21;;;;24012:16;;23996:13;:32;;;;23632:414;23189:857;24071:13;;;;;;;;;;;24066:223;;24143:19;:25;24163:4;24143:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24172:19;:23;24192:2;24172:23;;;;;;;;;;;;;;;;;;;;;;;;;24143:52;24109:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24066:223;24363:25;:31;24389:4;24363:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24420:31;:35;24452:2;24420:35;;;;;;;;;;;;;;;;;;;;;;;;;24419:36;24363:92;24337:1147;;;24542:20;;24532:6;:30;;24498:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24750:9;;24733:13;24743:2;24733:9;:13::i;:::-;24724:6;:22;;;;:::i;:::-;:35;;24690:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24337:1147;;;24928:25;:29;24954:2;24928:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24983:31;:37;25015:4;24983:37;;;;;;;;;;;;;;;;;;;;;;;;;24982:38;24928:92;24902:582;;;25107:20;;25097:6;:30;;25063:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24902:582;;;25264:31;:35;25296:2;25264:35;;;;;;;;;;;;;;;;;;;;;;;;;25259:225;;25384:9;;25367:13;25377:2;25367:9;:13::i;:::-;25358:6;:22;;;;:::i;:::-;:35;;25324:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25259:225;24902:582;24337:1147;22663:2836;22628:2882;25526:28;25557:24;25575:4;25557:9;:24::i;:::-;25526:55;;25594:12;25633:18;;25609:20;:42;;25594:57;;25682:7;:35;;;;;25706:11;;;;;;;;;;;25682:35;:61;;;;;25735:8;;;;;;;;;;;25734:9;25682:61;:110;;;;;25761:25;:31;25787:4;25761:31;;;;;;;;;;;;;;;;;;;;;;;;;25760:32;25682:110;:153;;;;;25810:19;:25;25830:4;25810:25;;;;;;;;;;;;;;;;;;;;;;;;;25809:26;25682:153;:194;;;;;25853:19;:23;25873:2;25853:23;;;;;;;;;;;;;;;;;;;;;;;;;25852:24;25682:194;25664:326;;;25914:4;25903:8;;:15;;;;;;;;;;;;;;;;;;25935:10;:8;:10::i;:::-;25973:5;25962:8;;:16;;;;;;;;;;;;;;;;;;25664:326;26002:12;26018:8;;;;;;;;;;;26017:9;26002:24;;26128:19;:25;26148:4;26128:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26157:19;:23;26177:2;26157:23;;;;;;;;;;;;;;;;;;;;;;;;;26128:52;26124:100;;;26207:5;26197:15;;26124:100;26236:12;26341:7;26337:669;;;26393:25;:29;26419:2;26393:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26442:1;26426:13;;:17;26393:50;26389:468;;;26471:34;26501:3;26471:25;26482:13;;26471:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26464:41;;26574:13;;26554:16;;26547:4;:23;;;;:::i;:::-;26546:41;;;;:::i;:::-;26524:18;;:63;;;;;;;:::i;:::-;;;;;;;;26389:468;;;26649:25;:31;26675:4;26649:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26699:1;26684:12;;:16;26649:51;26645:212;;;26728:33;26757:3;26728:24;26739:12;;26728:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26721:40;;26829:12;;26810:15;;26803:4;:22;;;;:::i;:::-;26802:39;;;;:::i;:::-;26780:18;;:61;;;;;;;:::i;:::-;;;;;;;;26645:212;26389:468;26884:1;26877:4;:8;26873:91;;;26906:42;26922:4;26936;26943;26906:15;:42::i;:::-;26873:91;26990:4;26980:14;;;;;:::i;:::-;;;26337:669;27018:33;27034:4;27040:2;27044:6;27018:15;:33::i;:::-;22356:4703;;;;22243:4816;;;;:::o;1218:191::-;1292:16;1311:6;;;;;;;;;;;1292:25;;1337:8;1328:6;;:17;;;;;;;;;;;;;;;;;;1392:8;1361:40;;1382:8;1361:40;;;;;;;;;;;;1281:128;1218:191;:::o;27067:589::-;27193:21;27231:1;27217:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27193:40;;27262:4;27244;27249:1;27244:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27288:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27278:4;27283:1;27278:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27323:62;27340:4;27355:15;27373:11;27323:8;:62::i;:::-;27424:15;:66;;;27505:11;27531:1;27575:4;27602;27622:15;27424:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27122:534;27067:589;:::o;21071:188::-;21188:5;21154:25;:31;21180:4;21154:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21245:5;21211:40;;21239:4;21211:40;;;;;;;;;;;;21071:188;;:::o;5013:733::-;5171:1;5153:20;;:6;:20;;;5145:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5255:1;5234:23;;:9;:23;;;5226:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5310:47;5331:6;5339:9;5350:6;5310:20;:47::i;:::-;5370:21;5394:9;:17;5404:6;5394:17;;;;;;;;;;;;;;;;5370:41;;5447:6;5430:13;:23;;5422:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5568:6;5552:13;:22;5532:9;:17;5542:6;5532:17;;;;;;;;;;;;;;;:42;;;;5620:6;5596:9;:20;5606:9;5596:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5661:9;5644:35;;5653:6;5644:35;;;5672:6;5644:35;;;;;;:::i;:::-;;;;;;;;5692:46;5712:6;5720:9;5731:6;5692:19;:46::i;:::-;5134:612;5013:733;;;:::o;27666:722::-;27705:23;27731:24;27749:4;27731:9;:24::i;:::-;27705:50;;27766:25;27807:18;;27766:59;;27836:12;27884:1;27865:15;:20;:46;;;;27910:1;27889:17;:22;27865:46;27861:85;;;27928:7;;;;;27861:85;28001:2;27980:18;;:23;;;;:::i;:::-;27962:15;:41;27958:115;;;28059:2;28038:18;;:23;;;;:::i;:::-;28020:41;;27958:115;28136:26;28165:15;28136:44;;28193:36;28210:18;28193:16;:36::i;:::-;28263:1;28242:18;:22;;;;28301:15;;;;;;;;;;;28293:29;;28344:21;28293:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28279:101;;;;;27694:694;;;;27666:722;:::o;8766:98::-;8824:7;8855:1;8851;:5;;;;:::i;:::-;8844:12;;8766:98;;;;:::o;8872:::-;8930:7;8961:1;8957;:5;;;;:::i;:::-;8950:12;;8872:98;;;;:::o;7148:125::-;;;;:::o;7281:124::-;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:117::-;8026:1;8023;8016:12;8040:180;8088:77;8085:1;8078:88;8185:4;8182:1;8175:15;8209:4;8206:1;8199:15;8226:281;8309:27;8331:4;8309:27;:::i;:::-;8301:6;8297:40;8439:6;8427:10;8424:22;8403:18;8391:10;8388:34;8385:62;8382:88;;;8450:18;;:::i;:::-;8382:88;8490:10;8486:2;8479:22;8269:238;8226:281;;:::o;8513:129::-;8547:6;8574:20;;:::i;:::-;8564:30;;8603:33;8631:4;8623:6;8603:33;:::i;:::-;8513:129;;;:::o;8648:311::-;8725:4;8815:18;8807:6;8804:30;8801:56;;;8837:18;;:::i;:::-;8801:56;8887:4;8879:6;8875:17;8867:25;;8947:4;8941;8937:15;8929:23;;8648:311;;;:::o;8965:117::-;9074:1;9071;9064:12;9105:710;9201:5;9226:81;9242:64;9299:6;9242:64;:::i;:::-;9226:81;:::i;:::-;9217:90;;9327:5;9356:6;9349:5;9342:21;9390:4;9383:5;9379:16;9372:23;;9443:4;9435:6;9431:17;9423:6;9419:30;9472:3;9464:6;9461:15;9458:122;;;9491:79;;:::i;:::-;9458:122;9606:6;9589:220;9623:6;9618:3;9615:15;9589:220;;;9698:3;9727:37;9760:3;9748:10;9727:37;:::i;:::-;9722:3;9715:50;9794:4;9789:3;9785:14;9778:21;;9665:144;9649:4;9644:3;9640:14;9633:21;;9589:220;;;9593:21;9207:608;;9105:710;;;;;:::o;9838:370::-;9909:5;9958:3;9951:4;9943:6;9939:17;9935:27;9925:122;;9966:79;;:::i;:::-;9925:122;10083:6;10070:20;10108:94;10198:3;10190:6;10183:4;10175:6;10171:17;10108:94;:::i;:::-;10099:103;;9915:293;9838:370;;;;:::o;10214:539::-;10298:6;10347:2;10335:9;10326:7;10322:23;10318:32;10315:119;;;10353:79;;:::i;:::-;10315:119;10501:1;10490:9;10486:17;10473:31;10531:18;10523:6;10520:30;10517:117;;;10553:79;;:::i;:::-;10517:117;10658:78;10728:7;10719:6;10708:9;10704:22;10658:78;:::i;:::-;10648:88;;10444:302;10214:539;;;;:::o;10759:474::-;10827:6;10835;10884:2;10872:9;10863:7;10859:23;10855:32;10852:119;;;10890:79;;:::i;:::-;10852:119;11010:1;11035:53;11080:7;11071:6;11060:9;11056:22;11035:53;:::i;:::-;11025:63;;10981:117;11137:2;11163:53;11208:7;11199:6;11188:9;11184:22;11163:53;:::i;:::-;11153:63;;11108:118;10759:474;;;;;:::o;11239:180::-;11287:77;11284:1;11277:88;11384:4;11381:1;11374:15;11408:4;11405:1;11398:15;11425:320;11469:6;11506:1;11500:4;11496:12;11486:22;;11553:1;11547:4;11543:12;11574:18;11564:81;;11630:4;11622:6;11618:17;11608:27;;11564:81;11692:2;11684:6;11681:14;11661:18;11658:38;11655:84;;11711:18;;:::i;:::-;11655:84;11476:269;11425:320;;;:::o;11751:182::-;11891:34;11887:1;11879:6;11875:14;11868:58;11751:182;:::o;11939:366::-;12081:3;12102:67;12166:2;12161:3;12102:67;:::i;:::-;12095:74;;12178:93;12267:3;12178:93;:::i;:::-;12296:2;12291:3;12287:12;12280:19;;11939:366;;;:::o;12311:419::-;12477:4;12515:2;12504:9;12500:18;12492:26;;12564:9;12558:4;12554:20;12550:1;12539:9;12535:17;12528:47;12592:131;12718:4;12592:131;:::i;:::-;12584:139;;12311:419;;;:::o;12736:180::-;12784:77;12781:1;12774:88;12881:4;12878:1;12871:15;12905:4;12902:1;12895:15;12922:410;12962:7;12985:20;13003:1;12985:20;:::i;:::-;12980:25;;13019:20;13037:1;13019:20;:::i;:::-;13014:25;;13074:1;13071;13067:9;13096:30;13114:11;13096:30;:::i;:::-;13085:41;;13275:1;13266:7;13262:15;13259:1;13256:22;13236:1;13229:9;13209:83;13186:139;;13305:18;;:::i;:::-;13186:139;12970:362;12922:410;;;;:::o;13338:180::-;13386:77;13383:1;13376:88;13483:4;13480:1;13473:15;13507:4;13504:1;13497:15;13524:185;13564:1;13581:20;13599:1;13581:20;:::i;:::-;13576:25;;13615:20;13633:1;13615:20;:::i;:::-;13610:25;;13654:1;13644:35;;13659:18;;:::i;:::-;13644:35;13701:1;13698;13694:9;13689:14;;13524:185;;;;:::o;13715:234::-;13855:34;13851:1;13843:6;13839:14;13832:58;13924:17;13919:2;13911:6;13907:15;13900:42;13715:234;:::o;13955:366::-;14097:3;14118:67;14182:2;14177:3;14118:67;:::i;:::-;14111:74;;14194:93;14283:3;14194:93;:::i;:::-;14312:2;14307:3;14303:12;14296:19;;13955:366;;;:::o;14327:419::-;14493:4;14531:2;14520:9;14516:18;14508:26;;14580:9;14574:4;14570:20;14566:1;14555:9;14551:17;14544:47;14608:131;14734:4;14608:131;:::i;:::-;14600:139;;14327:419;;;:::o;14752:227::-;14892:34;14888:1;14880:6;14876:14;14869:58;14961:10;14956:2;14948:6;14944:15;14937:35;14752:227;:::o;14985:366::-;15127:3;15148:67;15212:2;15207:3;15148:67;:::i;:::-;15141:74;;15224:93;15313:3;15224:93;:::i;:::-;15342:2;15337:3;15333:12;15326:19;;14985:366;;;:::o;15357:419::-;15523:4;15561:2;15550:9;15546:18;15538:26;;15610:9;15604:4;15600:20;15596:1;15585:9;15581:17;15574:47;15638:131;15764:4;15638:131;:::i;:::-;15630:139;;15357:419;;;:::o;15782:191::-;15822:3;15841:20;15859:1;15841:20;:::i;:::-;15836:25;;15875:20;15893:1;15875:20;:::i;:::-;15870:25;;15918:1;15915;15911:9;15904:16;;15939:3;15936:1;15933:10;15930:36;;;15946:18;;:::i;:::-;15930:36;15782:191;;;;:::o;15979:147::-;16080:11;16117:3;16102:18;;15979:147;;;;:::o;16132:114::-;;:::o;16252:398::-;16411:3;16432:83;16513:1;16508:3;16432:83;:::i;:::-;16425:90;;16524:93;16613:3;16524:93;:::i;:::-;16642:1;16637:3;16633:11;16626:18;;16252:398;;;:::o;16656:379::-;16840:3;16862:147;17005:3;16862:147;:::i;:::-;16855:154;;17026:3;17019:10;;16656:379;;;:::o;17041:179::-;17181:31;17177:1;17169:6;17165:14;17158:55;17041:179;:::o;17226:366::-;17368:3;17389:67;17453:2;17448:3;17389:67;:::i;:::-;17382:74;;17465:93;17554:3;17465:93;:::i;:::-;17583:2;17578:3;17574:12;17567:19;;17226:366;;;:::o;17598:419::-;17764:4;17802:2;17791:9;17787:18;17779:26;;17851:9;17845:4;17841:20;17837:1;17826:9;17822:17;17815:47;17879:131;18005:4;17879:131;:::i;:::-;17871:139;;17598:419;;;:::o;18023:162::-;18163:14;18159:1;18151:6;18147:14;18140:38;18023:162;:::o;18191:366::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18191:366;;;:::o;18563:419::-;18729:4;18767:2;18756:9;18752:18;18744:26;;18816:9;18810:4;18806:20;18802:1;18791:9;18787:17;18780:47;18844:131;18970:4;18844:131;:::i;:::-;18836:139;;18563:419;;;:::o;18988:244::-;19128:34;19124:1;19116:6;19112:14;19105:58;19197:27;19192:2;19184:6;19180:15;19173:52;18988:244;:::o;19238:366::-;19380:3;19401:67;19465:2;19460:3;19401:67;:::i;:::-;19394:74;;19477:93;19566:3;19477:93;:::i;:::-;19595:2;19590:3;19586:12;19579:19;;19238:366;;;:::o;19610:419::-;19776:4;19814:2;19803:9;19799:18;19791:26;;19863:9;19857:4;19853:20;19849:1;19838:9;19834:17;19827:47;19891:131;20017:4;19891:131;:::i;:::-;19883:139;;19610:419;;;:::o;20035:224::-;20175:34;20171:1;20163:6;20159:14;20152:58;20244:7;20239:2;20231:6;20227:15;20220:32;20035:224;:::o;20265:366::-;20407:3;20428:67;20492:2;20487:3;20428:67;:::i;:::-;20421:74;;20504:93;20593:3;20504:93;:::i;:::-;20622:2;20617:3;20613:12;20606:19;;20265:366;;;:::o;20637:419::-;20803:4;20841:2;20830:9;20826:18;20818:26;;20890:9;20884:4;20880:20;20876:1;20865:9;20861:17;20854:47;20918:131;21044:4;20918:131;:::i;:::-;20910:139;;20637:419;;;:::o;21062:223::-;21202:34;21198:1;21190:6;21186:14;21179:58;21271:6;21266:2;21258:6;21254:15;21247:31;21062:223;:::o;21291:366::-;21433:3;21454:67;21518:2;21513:3;21454:67;:::i;:::-;21447:74;;21530:93;21619:3;21530:93;:::i;:::-;21648:2;21643:3;21639:12;21632:19;;21291:366;;;:::o;21663:419::-;21829:4;21867:2;21856:9;21852:18;21844:26;;21916:9;21910:4;21906:20;21902:1;21891:9;21887:17;21880:47;21944:131;22070:4;21944:131;:::i;:::-;21936:139;;21663:419;;;:::o;22088:180::-;22136:77;22133:1;22126:88;22233:4;22230:1;22223:15;22257:4;22254:1;22247:15;22274:233;22313:3;22336:24;22354:5;22336:24;:::i;:::-;22327:33;;22382:66;22375:5;22372:77;22369:103;;22452:18;;:::i;:::-;22369:103;22499:1;22492:5;22488:13;22481:20;;22274:233;;;:::o;22513:240::-;22653:34;22649:1;22641:6;22637:14;22630:58;22722:23;22717:2;22709:6;22705:15;22698:48;22513:240;:::o;22759:366::-;22901:3;22922:67;22986:2;22981:3;22922:67;:::i;:::-;22915:74;;22998:93;23087:3;22998:93;:::i;:::-;23116:2;23111:3;23107:12;23100:19;;22759:366;;;:::o;23131:419::-;23297:4;23335:2;23324:9;23320:18;23312:26;;23384:9;23378:4;23374:20;23370:1;23359:9;23355:17;23348:47;23412:131;23538:4;23412:131;:::i;:::-;23404:139;;23131:419;;;:::o;23556:239::-;23696:34;23692:1;23684:6;23680:14;23673:58;23765:22;23760:2;23752:6;23748:15;23741:47;23556:239;:::o;23801:366::-;23943:3;23964:67;24028:2;24023:3;23964:67;:::i;:::-;23957:74;;24040:93;24129:3;24040:93;:::i;:::-;24158:2;24153:3;24149:12;24142:19;;23801:366;;;:::o;24173:419::-;24339:4;24377:2;24366:9;24362:18;24354:26;;24426:9;24420:4;24416:20;24412:1;24401:9;24397:17;24390:47;24454:131;24580:4;24454:131;:::i;:::-;24446:139;;24173:419;;;:::o;24598:225::-;24738:34;24734:1;24726:6;24722:14;24715:58;24807:8;24802:2;24794:6;24790:15;24783:33;24598:225;:::o;24829:366::-;24971:3;24992:67;25056:2;25051:3;24992:67;:::i;:::-;24985:74;;25068:93;25157:3;25068:93;:::i;:::-;25186:2;25181:3;25177:12;25170:19;;24829:366;;;:::o;25201:419::-;25367:4;25405:2;25394:9;25390:18;25382:26;;25454:9;25448:4;25444:20;25440:1;25429:9;25425:17;25418:47;25482:131;25608:4;25482:131;:::i;:::-;25474:139;;25201:419;;;:::o;25626:223::-;25766:34;25762:1;25754:6;25750:14;25743:58;25835:6;25830:2;25822:6;25818:15;25811:31;25626:223;:::o;25855:366::-;25997:3;26018:67;26082:2;26077:3;26018:67;:::i;:::-;26011:74;;26094:93;26183:3;26094:93;:::i;:::-;26212:2;26207:3;26203:12;26196:19;;25855:366;;;:::o;26227:419::-;26393:4;26431:2;26420:9;26416:18;26408:26;;26480:9;26474:4;26470:20;26466:1;26455:9;26451:17;26444:47;26508:131;26634:4;26508:131;:::i;:::-;26500:139;;26227:419;;;:::o;26652:221::-;26792:34;26788:1;26780:6;26776:14;26769:58;26861:4;26856:2;26848:6;26844:15;26837:29;26652:221;:::o;26879:366::-;27021:3;27042:67;27106:2;27101:3;27042:67;:::i;:::-;27035:74;;27118:93;27207:3;27118:93;:::i;:::-;27236:2;27231:3;27227:12;27220:19;;26879:366;;;:::o;27251:419::-;27417:4;27455:2;27444:9;27440:18;27432:26;;27504:9;27498:4;27494:20;27490:1;27479:9;27475:17;27468:47;27532:131;27658:4;27532:131;:::i;:::-;27524:139;;27251:419;;;:::o;27676:224::-;27816:34;27812:1;27804:6;27800:14;27793:58;27885:7;27880:2;27872:6;27868:15;27861:32;27676:224;:::o;27906:366::-;28048:3;28069:67;28133:2;28128:3;28069:67;:::i;:::-;28062:74;;28145:93;28234:3;28145:93;:::i;:::-;28263:2;28258:3;28254:12;28247:19;;27906:366;;;:::o;28278:419::-;28444:4;28482:2;28471:9;28467:18;28459:26;;28531:9;28525:4;28521:20;28517:1;28506:9;28502:17;28495:47;28559:131;28685:4;28559:131;:::i;:::-;28551:139;;28278:419;;;:::o;28703:222::-;28843:34;28839:1;28831:6;28827:14;28820:58;28912:5;28907:2;28899:6;28895:15;28888:30;28703:222;:::o;28931:366::-;29073:3;29094:67;29158:2;29153:3;29094:67;:::i;:::-;29087:74;;29170:93;29259:3;29170:93;:::i;:::-;29288:2;29283:3;29279:12;29272:19;;28931:366;;;:::o;29303:419::-;29469:4;29507:2;29496:9;29492:18;29484:26;;29556:9;29550:4;29546:20;29542:1;29531:9;29527:17;29520:47;29584:131;29710:4;29584:131;:::i;:::-;29576:139;;29303:419;;;:::o;29728:172::-;29868:24;29864:1;29856:6;29852:14;29845:48;29728:172;:::o;29906:366::-;30048:3;30069:67;30133:2;30128:3;30069:67;:::i;:::-;30062:74;;30145:93;30234:3;30145:93;:::i;:::-;30263:2;30258:3;30254:12;30247:19;;29906:366;;;:::o;30278:419::-;30444:4;30482:2;30471:9;30467:18;30459:26;;30531:9;30525:4;30521:20;30517:1;30506:9;30502:17;30495:47;30559:131;30685:4;30559:131;:::i;:::-;30551:139;;30278:419;;;:::o;30703:240::-;30843:34;30839:1;30831:6;30827:14;30820:58;30912:23;30907:2;30899:6;30895:15;30888:48;30703:240;:::o;30949:366::-;31091:3;31112:67;31176:2;31171:3;31112:67;:::i;:::-;31105:74;;31188:93;31277:3;31188:93;:::i;:::-;31306:2;31301:3;31297:12;31290:19;;30949:366;;;:::o;31321:419::-;31487:4;31525:2;31514:9;31510:18;31502:26;;31574:9;31568:4;31564:20;31560:1;31549:9;31545:17;31538:47;31602:131;31728:4;31602:131;:::i;:::-;31594:139;;31321:419;;;:::o;31746:169::-;31886:21;31882:1;31874:6;31870:14;31863:45;31746:169;:::o;31921:366::-;32063:3;32084:67;32148:2;32143:3;32084:67;:::i;:::-;32077:74;;32160:93;32249:3;32160:93;:::i;:::-;32278:2;32273:3;32269:12;32262:19;;31921:366;;;:::o;32293:419::-;32459:4;32497:2;32486:9;32482:18;32474:26;;32546:9;32540:4;32536:20;32532:1;32521:9;32517:17;32510:47;32574:131;32700:4;32574:131;:::i;:::-;32566:139;;32293:419;;;:::o;32718:241::-;32858:34;32854:1;32846:6;32842:14;32835:58;32927:24;32922:2;32914:6;32910:15;32903:49;32718:241;:::o;32965:366::-;33107:3;33128:67;33192:2;33187:3;33128:67;:::i;:::-;33121:74;;33204:93;33293:3;33204:93;:::i;:::-;33322:2;33317:3;33313:12;33306:19;;32965:366;;;:::o;33337:419::-;33503:4;33541:2;33530:9;33526:18;33518:26;;33590:9;33584:4;33580:20;33576:1;33565:9;33561:17;33554:47;33618:131;33744:4;33618:131;:::i;:::-;33610:139;;33337:419;;;:::o;33762:194::-;33802:4;33822:20;33840:1;33822:20;:::i;:::-;33817:25;;33856:20;33874:1;33856:20;:::i;:::-;33851:25;;33900:1;33897;33893:9;33885:17;;33924:1;33918:4;33915:11;33912:37;;;33929:18;;:::i;:::-;33912:37;33762:194;;;;:::o;33962:143::-;34019:5;34050:6;34044:13;34035:22;;34066:33;34093:5;34066:33;:::i;:::-;33962:143;;;;:::o;34111:351::-;34181:6;34230:2;34218:9;34209:7;34205:23;34201:32;34198:119;;;34236:79;;:::i;:::-;34198:119;34356:1;34381:64;34437:7;34428:6;34417:9;34413:22;34381:64;:::i;:::-;34371:74;;34327:128;34111:351;;;;:::o;34468:85::-;34513:7;34542:5;34531:16;;34468:85;;;:::o;34559:158::-;34617:9;34650:61;34668:42;34677:32;34703:5;34677:32;:::i;:::-;34668:42;:::i;:::-;34650:61;:::i;:::-;34637:74;;34559:158;;;:::o;34723:147::-;34818:45;34857:5;34818:45;:::i;:::-;34813:3;34806:58;34723:147;;:::o;34876:114::-;34943:6;34977:5;34971:12;34961:22;;34876:114;;;:::o;34996:184::-;35095:11;35129:6;35124:3;35117:19;35169:4;35164:3;35160:14;35145:29;;34996:184;;;;:::o;35186:132::-;35253:4;35276:3;35268:11;;35306:4;35301:3;35297:14;35289:22;;35186:132;;;:::o;35324:108::-;35401:24;35419:5;35401:24;:::i;:::-;35396:3;35389:37;35324:108;;:::o;35438:179::-;35507:10;35528:46;35570:3;35562:6;35528:46;:::i;:::-;35606:4;35601:3;35597:14;35583:28;;35438:179;;;;:::o;35623:113::-;35693:4;35725;35720:3;35716:14;35708:22;;35623:113;;;:::o;35772:732::-;35891:3;35920:54;35968:5;35920:54;:::i;:::-;35990:86;36069:6;36064:3;35990:86;:::i;:::-;35983:93;;36100:56;36150:5;36100:56;:::i;:::-;36179:7;36210:1;36195:284;36220:6;36217:1;36214:13;36195:284;;;36296:6;36290:13;36323:63;36382:3;36367:13;36323:63;:::i;:::-;36316:70;;36409:60;36462:6;36409:60;:::i;:::-;36399:70;;36255:224;36242:1;36239;36235:9;36230:14;;36195:284;;;36199:14;36495:3;36488:10;;35896:608;;;35772:732;;;;:::o;36510:831::-;36773:4;36811:3;36800:9;36796:19;36788:27;;36825:71;36893:1;36882:9;36878:17;36869:6;36825:71;:::i;:::-;36906:80;36982:2;36971:9;36967:18;36958:6;36906:80;:::i;:::-;37033:9;37027:4;37023:20;37018:2;37007:9;37003:18;36996:48;37061:108;37164:4;37155:6;37061:108;:::i;:::-;37053:116;;37179:72;37247:2;37236:9;37232:18;37223:6;37179:72;:::i;:::-;37261:73;37329:3;37318:9;37314:19;37305:6;37261:73;:::i;:::-;36510:831;;;;;;;;:::o;37347:225::-;37487:34;37483:1;37475:6;37471:14;37464:58;37556:8;37551:2;37543:6;37539:15;37532:33;37347:225;:::o;37578:366::-;37720:3;37741:67;37805:2;37800:3;37741:67;:::i;:::-;37734:74;;37817:93;37906:3;37817:93;:::i;:::-;37935:2;37930:3;37926:12;37919:19;;37578:366;;;:::o;37950:419::-;38116:4;38154:2;38143:9;38139:18;38131:26;;38203:9;38197:4;38193:20;38189:1;38178:9;38174:17;38167:47;38231:131;38357:4;38231:131;:::i;:::-;38223:139;;37950:419;;;:::o

Swarm Source

ipfs://6a81ee1589868b32aeda9a19f586740853b363756b175b5c9754c9ae0c620aaa

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.