ETH Price: $2,868.38 (-10.97%)
Gas: 14 Gwei

Contract

0xc99808C486D2A4cb5c0a0402066098FbDB77a2EC
 

Overview

ETH Balance

0.014604162576008648 ETH

Eth Value

$41.89 (@ $2,868.38/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve180072392023-08-27 16:38:23312 days ago1693154303IN
0xc99808C4...bDB77a2EC
0 ETH0.0004287317.31132688
Approve176761412023-07-12 7:57:11358 days ago1689148631IN
0xc99808C4...bDB77a2EC
0 ETH0.0006448213.68771969
Approve170544152023-04-15 19:18:59446 days ago1681586339IN
0xc99808C4...bDB77a2EC
0 ETH0.0006363525.6324272
Approve170367472023-04-13 5:45:47448 days ago1681364747IN
0xc99808C4...bDB77a2EC
0 ETH0.0006710424.66176289
Approve170107112023-04-09 12:21:59452 days ago1681042919IN
0xc99808C4...bDB77a2EC
0 ETH0.0004793719.35626418
Approve170107062023-04-09 12:20:59452 days ago1681042859IN
0xc99808C4...bDB77a2EC
0 ETH0.0004662318.77994775
Approve169743672023-04-04 8:31:11457 days ago1680597071IN
0xc99808C4...bDB77a2EC
0 ETH0.000545320.04059179
Approve169743602023-04-04 8:29:47457 days ago1680596987IN
0xc99808C4...bDB77a2EC
0 ETH0.0005553620.41050095
Approve169736962023-04-04 6:12:23457 days ago1680588743IN
0xc99808C4...bDB77a2EC
0 ETH0.000523219.2282455
Approve169736932023-04-04 6:11:47457 days ago1680588707IN
0xc99808C4...bDB77a2EC
0 ETH0.0005422119.92714619
Approve169732792023-04-04 4:46:59458 days ago1680583619IN
0xc99808C4...bDB77a2EC
0 ETH0.0004784517.58376695
Approve169732602023-04-04 4:43:11458 days ago1680583391IN
0xc99808C4...bDB77a2EC
0 ETH0.0009032719.17363903
Set Sell Fees169701172023-04-03 17:57:47458 days ago1680544667IN
0xc99808C4...bDB77a2EC
0 ETH0.002222260.98921675
Approve169700682023-04-03 17:47:47458 days ago1680544067IN
0xc99808C4...bDB77a2EC
0 ETH0.0019693142.10272986
Approve169691912023-04-03 14:49:35458 days ago1680533375IN
0xc99808C4...bDB77a2EC
0 ETH0.0008345831
Approve169687822023-04-03 13:26:23458 days ago1680528383IN
0xc99808C4...bDB77a2EC
0 ETH0.0006773425.15969848
Add Or Remove Bo...169687262023-04-03 13:14:59458 days ago1680527699IN
0xc99808C4...bDB77a2EC
0 ETH0.0007065827.06588228
Approve169687252023-04-03 13:14:47458 days ago1680527687IN
0xc99808C4...bDB77a2EC
0 ETH0.0006893625.33495534
Add Or Remove Bo...169687212023-04-03 13:13:59458 days ago1680527639IN
0xc99808C4...bDB77a2EC
0 ETH0.0007100927.20047021
Approve169686552023-04-03 13:00:47458 days ago1680526847IN
0xc99808C4...bDB77a2EC
0 ETH0.0005726921.04738982
Approve169683142023-04-03 11:51:47458 days ago1680522707IN
0xc99808C4...bDB77a2EC
0 ETH0.0006738324.76406354
Approve169651332023-04-03 1:04:23459 days ago1680483863IN
0xc99808C4...bDB77a2EC
0 ETH0.0007853316.77280057
Approve169651282023-04-03 1:03:23459 days ago1680483803IN
0xc99808C4...bDB77a2EC
0 ETH0.000797617.04347337
Approve169651232023-04-03 1:02:23459 days ago1680483743IN
0xc99808C4...bDB77a2EC
0 ETH0.0004867118.09484053
Approve169651182023-04-03 1:01:23459 days ago1680483683IN
0xc99808C4...bDB77a2EC
0 ETH0.0008376717.89979153
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
169425602023-03-30 20:53:47462 days ago1680209627
0xc99808C4...bDB77a2EC
0.07652669 ETH
169425602023-03-30 20:53:47462 days ago1680209627
0xc99808C4...bDB77a2EC
0.00004431 ETH
169425602023-03-30 20:53:47462 days ago1680209627
0xc99808C4...bDB77a2EC
0.00765266 ETH
169425602023-03-30 20:53:47462 days ago1680209627
0xc99808C4...bDB77a2EC
0.08417936 ETH
169363942023-03-30 0:06:59463 days ago1680134819
0xc99808C4...bDB77a2EC
0.0780814 ETH
169363942023-03-30 0:06:59463 days ago1680134819
0xc99808C4...bDB77a2EC
0.00004595 ETH
169363942023-03-30 0:06:59463 days ago1680134819
0xc99808C4...bDB77a2EC
0.00780814 ETH
169363942023-03-30 0:06:59463 days ago1680134819
0xc99808C4...bDB77a2EC
0.08588954 ETH
169309942023-03-29 5:52:35463 days ago1680069155
0xc99808C4...bDB77a2EC
0.0812222 ETH
169309942023-03-29 5:52:35463 days ago1680069155
0xc99808C4...bDB77a2EC
0.0000493 ETH
169309942023-03-29 5:52:35463 days ago1680069155
0xc99808C4...bDB77a2EC
0.00812222 ETH
169309942023-03-29 5:52:35463 days ago1680069155
0xc99808C4...bDB77a2EC
0.08934442 ETH
169287122023-03-28 22:11:35464 days ago1680041495
0xc99808C4...bDB77a2EC
0.08191413 ETH
169287122023-03-28 22:11:35464 days ago1680041495
0xc99808C4...bDB77a2EC
0.0000501 ETH
169287122023-03-28 22:11:35464 days ago1680041495
0xc99808C4...bDB77a2EC
0.00819141 ETH
169287122023-03-28 22:11:35464 days ago1680041495
0xc99808C4...bDB77a2EC
0.09010554 ETH
169279782023-03-28 19:42:59464 days ago1680032579
0xc99808C4...bDB77a2EC
0.09182425 ETH
169279782023-03-28 19:42:59464 days ago1680032579
0xc99808C4...bDB77a2EC
0.00006114 ETH
169279782023-03-28 19:42:59464 days ago1680032579
0xc99808C4...bDB77a2EC
0.00918242 ETH
169279782023-03-28 19:42:59464 days ago1680032579
0xc99808C4...bDB77a2EC
0.10100668 ETH
169275212023-03-28 18:11:11464 days ago1680027071
0xc99808C4...bDB77a2EC
0.04144693 ETH
169275212023-03-28 18:11:11464 days ago1680027071
0xc99808C4...bDB77a2EC
0.06217039 ETH
169275212023-03-28 18:11:11464 days ago1680027071
0xc99808C4...bDB77a2EC
0.00007531 ETH
169275212023-03-28 18:11:11464 days ago1680027071
0xc99808C4...bDB77a2EC
0.01036173 ETH
169275212023-03-28 18:11:11464 days ago1680027071
0xc99808C4...bDB77a2EC
0.11397906 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BABY_SHARBI_ETH

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Tg: @baby_sharbi
//website: babysharbi.net

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

interface IERC20Extended {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;

    function claimDividend(address _user) external;

    function getPaidEarnings(address shareholder)
        external
        view
        returns (uint256);

    function getUnpaidEarnings(address shareholder)
        external
        view
        returns (uint256);

    function totalDistributed() external view returns (uint256);
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address public token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20Extended public Sharbi =
        IERC20Extended(0xF3A3023e6Dede84AD88a656A3269F2A36e83c9a9);
    IDexRouter public router;

    address[] public shareholders;
    mapping(address => uint256) public shareholderIndexes;
    mapping(address => uint256) public shareholderClaims;

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1 * (10**Sharbi.decimals());

    uint256 currentIndex;

    bool initialized;
    modifier initializer() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == token);
        _;
    }

    constructor(address router_) {
        token = msg.sender;
        router = IDexRouter(router_);
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = Sharbi.balanceOf(address(this));

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

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: msg.value
        }(0, path, address(this), block.timestamp);

        uint256 amount = Sharbi.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            Sharbi.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address _user) external {
        distributeDividend(_user);
    }

    function getPaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        return shares[shareholder].totalRealised;
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

// main contract
contract BABY_SHARBI_ETH is IERC20Extended, Ownable {
    using SafeMath for uint256;

    string private constant _name = "Baby Sharbi";
    string private constant _symbol = "$BSHARBI";
    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 1_000_000_000_000 * 10**_decimals;

    address public Sharbi = 0xF3A3023e6Dede84AD88a656A3269F2A36e83c9a9;
    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    IDexRouter public router;
    address public pair;
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 _reflectionBuyFee = 3_00;
    uint256 _liquidityBuyFee = 1_00;
    uint256 _marketingBuyFee = 2_00;

    uint256 _reflectionSellFee = 3_00;
    uint256 _liquiditySellFee = 1_00;
    uint256 _marketingSellFee = 11_00;

    uint256 _reflectionFeeCount;
    uint256 _liquidityFeeCount;
    uint256 _marketingFeeCount;

    uint256 public totalBuyFee = 6_00;
    uint256 public totalSellFee = 15_00;
    uint256 public feeDenominator = 100_00;

    DividendDistributor public distributor;
    uint256 public distributorGas = 500000;

    uint256 public maxTxnAmount = _totalSupply / 100;
    uint256 public maxWalletAmount = _totalSupply / 100;
    uint256 public launchedAt;
    uint256 public snipingTime = 60 seconds;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isLimitExmpt;
    mapping(address => bool) public isWalletExmpt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public isBot;

    uint256 public swapThreshold = _totalSupply / 1000;
    bool public swapEnabled;
    bool public trading;
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

    constructor() Ownable() {
        address router_ = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0xFbE80249C95D20f8c87327dB3721c77581999493;

        router = IDexRouter(router_);
        pair = IDexFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        distributor = new DividendDistributor(router_);

        isFeeExempt[autoLiquidityReceiver] = true;
        isFeeExempt[marketingFeeReceiver] = true;
        isFeeExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(router)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        isLimitExmpt[autoLiquidityReceiver] = true;
        isLimitExmpt[marketingFeeReceiver] = true;
        isLimitExmpt[address(this)] = true;
        isLimitExmpt[address(router)] = true;

        isWalletExmpt[autoLiquidityReceiver] = true;
        isWalletExmpt[marketingFeeReceiver] = true;
        isWalletExmpt[pair] = true;
        isWalletExmpt[address(router)] = true;
        isWalletExmpt[address(this)] = true;

        _allowances[address(this)][address(router)] = _totalSupply;
        _allowances[address(this)][address(pair)] = _totalSupply;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

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

    function allowance(address holder, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(!isBot[sender], "Bot detected");
        if (!isLimitExmpt[sender] && !isLimitExmpt[recipient]) {
            require(amount <= maxTxnAmount, "Max txn limit exceeds");

            // trading disable till launch
            if (!trading) {
                require(
                    pair != sender && pair != recipient,
                    "Trading is disable"
                );
            }
            // anti snipper bot
            if (
                block.timestamp < launchedAt + snipingTime &&
                sender != address(router)
            ) {
                if (pair == sender) {
                    isBot[recipient] = true;
                } else if (pair == recipient) {
                    isBot[sender] = true;
                }
            }
        }

        if (!isWalletExmpt[recipient]) {
            require(
                balanceOf(recipient).add(amount) <= maxWalletAmount,
                "Max Wallet limit exceeds"
            );
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldSwapBack()) {
            swapBack();
        }

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        uint256 amountReceived;
        if (
            isFeeExempt[sender] ||
            isFeeExempt[recipient] ||
            (sender != pair && recipient != pair)
        ) {
            amountReceived = amount;
        } else {
            uint256 feeAmount;
            if (sender == pair) {
                feeAmount = amount.mul(totalBuyFee).div(feeDenominator);
                amountReceived = amount.sub(feeAmount);
                takeFee(sender, feeAmount);
                setBuyAccFee(amount);
            } else {
                feeAmount = amount.mul(totalSellFee).div(feeDenominator);
                amountReceived = amount.sub(feeAmount);
                takeFee(sender, feeAmount);
                setSellAccFee(amount);
            }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try
                distributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, uint256 feeAmount) internal {
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
    }

    function setBuyAccFee(uint256 _amount) internal {
        _liquidityFeeCount += _amount.mul(_liquidityBuyFee).div(feeDenominator);
        _reflectionFeeCount += _amount.mul(_reflectionBuyFee).div(
            feeDenominator
        );
        _marketingFeeCount += _amount.mul(_marketingBuyFee).div(feeDenominator);
    }

    function setSellAccFee(uint256 _amount) internal {
        _liquidityFeeCount += _amount.mul(_liquiditySellFee).div(
            feeDenominator
        );
        _reflectionFeeCount += _amount.mul(_reflectionSellFee).div(
            feeDenominator
        );
        _marketingFeeCount += _amount.mul(_marketingSellFee).div(
            feeDenominator
        );
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 totalFee = _liquidityFeeCount.add(_reflectionFeeCount).add(
            _marketingFeeCount
        );

        uint256 amountToLiquify = swapThreshold
            .mul(_liquidityFeeCount)
            .div(totalFee)
            .div(2);

        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
        _allowances[address(this)][address(router)] = _totalSupply;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance.sub(balanceBefore);

        uint256 totalBNBFee = totalFee.sub(_liquidityFeeCount.div(2));

        uint256 amountBNBLiquidity = amountBNB
            .mul(_liquidityFeeCount)
            .div(totalBNBFee)
            .div(2);

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }

        uint256 amountBNBReflection = amountBNB.mul(_reflectionFeeCount).div(
            totalBNBFee
        );
        if (amountBNBReflection > 0) {
            try distributor.deposit{value: amountBNBReflection}() {} catch {}
        }

        uint256 amountBNBMarketing = amountBNB.mul(_marketingFeeCount).div(
            totalBNBFee
        );

        if (amountBNBMarketing > 0) {
            payable(marketingFeeReceiver).transfer(amountBNBMarketing);
        }

        _liquidityFeeCount = 0;
        _reflectionFeeCount = 0;
        _marketingFeeCount = 0;
    }

    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }

    function getPaidDividend(address shareholder)
        public
        view
        returns (uint256)
    {
        return distributor.getPaidEarnings(shareholder);
    }

    function getUnpaidDividend(address shareholder)
        external
        view
        returns (uint256)
    {
        return distributor.getUnpaidEarnings(shareholder);
    }

    function getTotalDistributedDividend() external view returns (uint256) {
        return distributor.totalDistributed();
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function enableTrading() external onlyOwner {
        require(!trading, "Already enabled");
        trading = true;
        swapEnabled = true;
        launchedAt = block.timestamp;
    }

    function removeStuckEth(uint256 amount) external onlyOwner {
        payable(owner()).transfer(amount);
    }

    function setMaxTxnAmount(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 10000);
        maxTxnAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 10000);
        maxWalletAmount = amount;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsLimitExempt(address[] memory holders, bool exempt)
        external
        onlyOwner
    {
        for (uint256 i; i < holders.length; i++) {
            isLimitExmpt[holders[i]] = exempt;
        }
    }

    function setIsWalletExempt(address holder, bool exempt) external onlyOwner {
        isWalletExmpt[holder] = exempt;
    }

    function addOrRemoveBots(address[] memory accounts, bool exempt)
        external
        onlyOwner
    {
        for (uint256 i; i < accounts.length; i++) {
            isBot[accounts[i]] = exempt;
        }
    }

    function setBuyFees(
        uint256 _reflectionFee,
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _reflectionBuyFee = _reflectionFee;
        _liquidityBuyFee = _liquidityFee;
        _marketingBuyFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(
            totalBuyFee <= feeDenominator.mul(15).div(100),
            "Can't be greater than 15%"
        );
    }

    function setSellFees(
        uint256 _liquidityFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _feeDenominator
    ) public onlyOwner {
        _liquiditySellFee = _liquidityFee;
        _reflectionSellFee = _reflectionFee;
        _marketingSellFee = _marketingFee;
        totalSellFee = _liquidityFee.add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(
            totalSellFee <= feeDenominator.mul(15).div(100),
            "Can't be greater than 15%"
        );
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _marketingFeeReceiver
    ) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount)
        external
        onlyOwner
    {
        require(swapThreshold > 0);
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Sharbi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"addOrRemoveBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getPaidDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDistributedDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLimitExmpt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletExmpt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"trading","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"},{"stateMutability":"payable","type":"receive"}]

608060405273f3a3023e6dede84ad88a656a3269f2a36e83c9a9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c600655606460075560c860085561012c6009556064600a5561044c600b55610258600f556105dc6010556127106011556207a12060135560646009600a620000a59190620010d9565b64e8d4a51000620000b791906200112a565b620000c39190620011ba565b60145560646009600a620000d89190620010d9565b64e8d4a51000620000ea91906200112a565b620000f69190620011ba565b601555603c6017556103e86009600a620001119190620010d9565b64e8d4a510006200012391906200112a565b6200012f9190620011ba565b601f553480156200013f57600080fd5b506200015062000f2960201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000737a250d5630b4cf539739df2c5dacb4c659f2488d905033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fbe80249c95d20f8c87327db3721c77581999493600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e91906200125c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000418573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043e91906200125c565b6040518363ffffffff1660e01b81526004016200045d9291906200129f565b6020604051808303816000875af11580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a391906200125c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620004f29062000f31565b620004fe9190620012cc565b604051809103906000f0801580156200051b573d6000803e3d6000fd5b50601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009600a62000cbc9190620010d9565b64e8d4a5100062000cce91906200112a565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000d809190620010d9565b64e8d4a5100062000d9291906200112a565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506009600a62000e449190620010d9565b64e8d4a5100062000e5691906200112a565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000ef99190620010d9565b64e8d4a5100062000f0b91906200112a565b60405162000f1a9190620012fa565b60405180910390a35062001317565b600033905090565b6123a7806200682683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fcd5780860481111562000fa55762000fa462000f3f565b5b600185161562000fb55780820291505b808102905062000fc58562000f6e565b945062000f85565b94509492505050565b60008262000fe85760019050620010bb565b8162000ff85760009050620010bb565b81600181146200101157600281146200101c5762001052565b6001915050620010bb565b60ff84111562001031576200103062000f3f565b5b8360020a9150848211156200104b576200104a62000f3f565b5b50620010bb565b5060208310610133831016604e8410600b84101617156200108c5782820a90508381111562001086576200108562000f3f565b5b620010bb565b6200109b848484600162000f7b565b92509050818404811115620010b557620010b462000f3f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620010e682620010c2565b9150620010f383620010cc565b9250620011227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fd6565b905092915050565b60006200113782620010c2565b91506200114483620010c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001180576200117f62000f3f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011c782620010c2565b9150620011d483620010c2565b925082620011e757620011e66200118b565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200122482620011f7565b9050919050565b620012368162001217565b81146200124257600080fd5b50565b60008151905062001256816200122b565b92915050565b600060208284031215620012755762001274620011f2565b5b6000620012858482850162001245565b91505092915050565b620012998162001217565b82525050565b6000604082019050620012b660008301856200128e565b620012c560208301846200128e565b9392505050565b6000602082019050620012e360008301846200128e565b92915050565b620012f481620010c2565b82525050565b6000602082019050620013116000830184620012e9565b92915050565b6154ff80620013276000396000f3fe6080604052600436106103395760003560e01c806386cb8fb1116101ab578063bfe10928116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c41578063f708a64f14610c6a578063f887ea4014610c93578063fc899bdc14610cbe57610340565b8063ec44acf214610bd6578063f0fc6bca14610c01578063f2fde38b14610c1857610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e96fada214610bab57610340565b8063bfe1092814610a99578063c346df5014610ac4578063ca33e64c14610aef57610340565b80639d1944f511610164578063a8aa1b311161013e578063a8aa1b31146109db578063a9059cbb14610a06578063aa4bde2814610a43578063bf56b37114610a6e57610340565b80639d1944f51461095e5780639d9241ec14610987578063a4b45c00146109b257610340565b806386cb8fb11461084e57806386db0c051461088b578063893c9f2b146108c85780638a8c523c146108f15780638da5cb5b1461090857806395d89b411461093357610340565b80633f4218e011610285578063658d4b7f1161022357806370a08231116101fd57806370a08231146107a6578063715018a6146107e357806374010ece146107fa5780637d99c66d1461082357610340565b8063658d4b7f146107295780636c5b2855146107525780636ddd17131461077b57610340565b8063540b8a271161025f578063540b8a2714610659578063571ac8b01461069657806359b107b9146106d357806360e71962146106fe57610340565b80633f4218e0146105a25780634355855a146105df57806349bc3feb1461061c57610340565b806318160ddd116102f257806327a14fc2116102cc57806327a14fc2146104e85780632d48e89614610511578063313ce5671461053a5780633bbac5791461056557610340565b806318160ddd146104555780631961cee21461048057806323b872dd146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806310a60f02146103d8578063178d9b8e14610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce7565b6040516103679190614383565b60405180910390f35b34801561037c57600080fd5b50610385610ced565b6040516103929190614437565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906144f7565b610d2a565b6040516103cf9190614552565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906146e1565b610e1c565b005b34801561040d57600080fd5b506104286004803603810190610423919061473d565b610f46565b005b34801561043657600080fd5b5061043f611095565b60405161044c9190614383565b60405180910390f35b34801561046157600080fd5b5061046a61109b565b6040516104779190614383565b60405180910390f35b34801561048c57600080fd5b506104956110c0565b6040516104a29190614383565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906147a4565b611158565b6040516104df9190614552565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a91906147f7565b611355565b005b34801561051d57600080fd5b5061053860048036038101906105339190614824565b61142b565b005b34801561054657600080fd5b5061054f611553565b60405161055c9190614880565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061489b565b61155c565b6040516105999190614552565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061489b565b61157c565b6040516105d69190614552565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061489b565b61159c565b6040516106139190614552565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e919061489b565b6115bc565b6040516106509190614383565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061489b565b611661565b60405161068d9190614552565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b8919061489b565b611681565b6040516106ca9190614552565b60405180910390f35b3480156106df57600080fd5b506106e86116b1565b6040516106f59190614383565b60405180910390f35b34801561070a57600080fd5b506107136116b7565b6040516107209190614383565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906148c8565b6116bd565b005b34801561075e57600080fd5b506107796004803603810190610774919061473d565b6117ad565b005b34801561078757600080fd5b506107906118fc565b60405161079d9190614552565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061489b565b61190f565b6040516107da9190614383565b60405180910390f35b3480156107ef57600080fd5b506107f8611958565b005b34801561080657600080fd5b50610821600480360381019061081c91906147f7565b611aab565b005b34801561082f57600080fd5b50610838611b81565b6040516108459190614383565b60405180910390f35b34801561085a57600080fd5b506108756004803603810190610870919061489b565b611b87565b6040516108829190614552565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad919061489b565b611ba7565b6040516108bf9190614383565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea91906147f7565b611c4c565b005b3480156108fd57600080fd5b50610906611d32565b005b34801561091457600080fd5b5061091d611e56565b60405161092a9190614917565b60405180910390f35b34801561093f57600080fd5b50610948611e7f565b6040516109559190614437565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906147f7565b611ebc565b005b34801561099357600080fd5b5061099c611fa0565b6040516109a99190614383565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190614932565b611fa6565b005b3480156109e757600080fd5b506109f06120c1565b6040516109fd9190614917565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a2891906144f7565b6120e7565b604051610a3a9190614552565b60405180910390f35b348015610a4f57600080fd5b50610a586120fc565b604051610a659190614383565b60405180910390f35b348015610a7a57600080fd5b50610a83612102565b604051610a909190614383565b60405180910390f35b348015610aa557600080fd5b50610aae612108565b604051610abb91906149d1565b60405180910390f35b348015610ad057600080fd5b50610ad961212e565b604051610ae69190614917565b60405180910390f35b348015610afb57600080fd5b50610b04612154565b604051610b119190614917565b60405180910390f35b348015610b2657600080fd5b50610b2f61217a565b604051610b3c9190614383565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614932565b612180565b604051610b799190614383565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba491906149ec565b612207565b005b348015610bb757600080fd5b50610bc06122d0565b604051610bcd9190614917565b60405180910390f35b348015610be257600080fd5b50610beb6122f6565b604051610bf89190614552565b60405180910390f35b348015610c0d57600080fd5b50610c16612309565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a919061489b565b612398565b005b348015610c4d57600080fd5b50610c686004803603810190610c6391906146e1565b61255a565b005b348015610c7657600080fd5b50610c916004803603810190610c8c91906148c8565b612684565b005b348015610c9f57600080fd5b50610ca8612971565b604051610cb59190614a4d565b60405180910390f35b348015610cca57600080fd5b50610ce56004803603810190610ce091906148c8565b612997565b005b601f5481565b60606040518060400160405280600b81526020017f4261627920536861726269000000000000000000000000000000000000000000815250905090565b600081601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0a9190614383565b60405180910390a36001905092915050565b610e24612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890614ab4565b60405180910390fd5b60005b8251811015610f415781601e6000858481518110610ed557610ed4614ad4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f3990614b32565b915050610eb4565b505050565b610f4e612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290614ab4565b60405180910390fd5b836006819055508260078190555081600881905550611015826110078686612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b600f819055508060118190555061104b606461103d600f601154612aa590919063ffffffff16565b612abb90919063ffffffff16565b600f54111561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690614bc7565b60405180910390fd5b50505050565b60115481565b60006009600a6110ab9190614d1a565b64e8d4a510006110bb9190614d65565b905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190614dd4565b905090565b60006009600a6111689190614d1a565b64e8d4a510006111789190614d65565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611341576112c0826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61134c848484612b26565b90509392505050565b61135d612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190614ab4565b60405180910390fd5b6127106009600a6113fb9190614d1a565b64e8d4a5100061140b9190614d65565b6114159190614e30565b81101561142157600080fd5b8060158190555050565b611433612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614ab4565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161151d929190614e61565b600060405180830381600087803b15801561153757600080fd5b505af115801561154b573d6000803e3d6000fd5b505050505050565b60006009905090565b601e6020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016116199190614917565b602060405180830381865afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190614dd4565b9050919050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60006116aa826009600a6116959190614d1a565b64e8d4a510006116a59190614d65565b610d2a565b9050919050565b600f5481565b60135481565b6116c5612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614ab4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117b5612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990614ab4565b60405180910390fd5b83600a819055508260098190555081600b8190555061187c8261186e8587612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b601081905550806011819055506118b260646118a4600f601154612aa590919063ffffffff16565b612abb90919063ffffffff16565b60105411156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614bc7565b60405180910390fd5b50505050565b602060009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611960612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ab3612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3790614ab4565b60405180910390fd5b6127106009600a611b519190614d1a565b64e8d4a51000611b619190614d65565b611b6b9190614e30565b811015611b7757600080fd5b8060148190555050565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611c049190614917565b602060405180830381865afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c459190614dd4565b9050919050565b611c54612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614ab4565b60405180910390fd5b611ce9611e56565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2e573d6000803e3d6000fd5b5050565b611d3a612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614ab4565b60405180910390fd5b602060019054906101000a900460ff1615611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614ed6565b60405180910390fd5b6001602060016101000a81548160ff0219169083151502179055506001602060006101000a81548160ff02191690831515021790555042601681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2442534841524249000000000000000000000000000000000000000000000000815250905090565b611ec4612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890614ab4565b60405180910390fd5b620b71b08110611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d90614f42565b60405180910390fd5b8060138190555050565b60105481565b611fae612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290614ab4565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120f4338484612b26565b905092915050565b60155481565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61220f612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ab4565b60405180910390fd5b6000601f54116122ab57600080fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060019054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b81526004016123649190614917565b600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b50505050565b6123a0612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490614ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614fd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612562612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614ab4565b60405180910390fd5b60005b825181101561267f5781601b600085848151811061261357612612614ad4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061267790614b32565b9150506125f2565b505050565b61268c612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614ab4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127a35750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6127ac57600080fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561289e57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161286792919061502f565b600060405180830381600087803b15801561288157600080fd5b505af1158015612895573d6000803e3d6000fd5b5050505061296d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161293a929190615058565b600060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61299f612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614ab4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183612a9d9190615081565b905092915050565b60008183612ab39190614d65565b905092915050565b60008183612ac99190614e30565b905092915050565b6000838311158290612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b109190614437565b60405180910390fd5b5082840390509392505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bac90615123565b60405180910390fd5b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c595750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7957601454821115612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a9061518f565b60405180910390fd5b602060019054906101000a900460ff16612da3578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612d6357508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d99906151fb565b60405180910390fd5b5b601754601654612db39190615081565b42108015612e0f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612f78578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ec7576001601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f77565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f76576001601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661302a57601554612fe883612fda8661190f565b612a8f90919063ffffffff16565b1115613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302090615267565b60405180910390fd5b5b602060029054906101000a900460ff16156130515761304a84848461377b565b9050613774565b61305961394e565b1561306757613066613a25565b5b6130f0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131d65750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132895750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156132885750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b156132965782905061339c565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561334657613317601154613309600f5487612aa590919063ffffffff16565b612abb90919063ffffffff16565b905061332c81856140ca90919063ffffffff16565b915061333886826140e0565b613341846141de565b61339a565b61336f60115461336160105487612aa590919063ffffffff16565b612abb90919063ffffffff16565b905061338481856140ca90919063ffffffff16565b915061339086826140e0565b613399846142a4565b5b505b6133ee81601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355457601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161351e929190615058565b600060405180830381600087803b15801561353857600080fd5b505af1925050508015613549575060015b61355257613553565b5b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661367757601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613641929190615058565b600060405180830381600087803b15801561365b57600080fd5b505af192505050801561366c575060015b61367557613676565b5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016136d49190614383565b600060405180830381600087803b1580156136ee57600080fd5b505af19250505080156136ff575060015b61370857613709565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137669190614383565b60405180910390a360019150505b9392505050565b6000613806826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389b82601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161393b9190614383565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156139bb5750602060029054906101000a900460ff16155b80156139d35750602060009054906101000a900460ff165b8015613a205750601f54601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060026101000a81548160ff0219169083151502179055506000613a6d600e54613a5f600c54600d54612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b90506000613aad6002613a9f84613a91600d54601f54612aa590919063ffffffff16565b612abb90919063ffffffff16565b612abb90919063ffffffff16565b90506000613ac682601f546140ca90919063ffffffff16565b90506009600a613ad69190614d1a565b64e8d4a51000613ae69190614d65565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613ba557613ba4614572565b5b604051908082528060200260200182016040528015613bd35781602001602082028036833780820191505090505b5090503081600081518110613beb57613bea614ad4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb6919061529c565b81600181518110613cca57613cc9614ad4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613d6d959493929190615387565b600060405180830381600087803b158015613d8757600080fd5b505af1158015613d9b573d6000803e3d6000fd5b505050506000613db482476140ca90919063ffffffff16565b90506000613de0613dd16002600d54612abb90919063ffffffff16565b886140ca90919063ffffffff16565b90506000613e1e6002613e1084613e02600d5488612aa590919063ffffffff16565b612abb90919063ffffffff16565b612abb90919063ffffffff16565b90506000871115613f3257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eb2969594939291906153e1565b60606040518083038185885af1158015613ed0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ef59190615442565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613f29929190614e61565b60405180910390a15b6000613f5b83613f4d600c5487612aa590919063ffffffff16565b612abb90919063ffffffff16565b90506000811115613fed57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fd057600080fd5b505af193505050508015613fe2575060015b613feb57613fec565b5b5b600061401684614008600e5488612aa590919063ffffffff16565b612abb90919063ffffffff16565b9050600081111561408b57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614089573d6000803e3d6000fd5b505b6000600d819055506000600c819055506000600e81905550505050505050505050506000602060026101000a81548160ff021916908315150217905550565b600081836140d89190615495565b905092915050565b61413281601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141d29190614383565b60405180910390a35050565b6142076011546141f960075484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600d60008282546142189190615081565b9250508190555061424860115461423a60065484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600c60008282546142599190615081565b9250508190555061428960115461427b60085484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600e600082825461429a9190615081565b9250508190555050565b6142cd6011546142bf600a5484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600d60008282546142de9190615081565b9250508190555061430e60115461430060095484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600c600082825461431f9190615081565b9250508190555061434f601154614341600b5484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600e60008282546143609190615081565b9250508190555050565b6000819050919050565b61437d8161436a565b82525050565b60006020820190506143986000830184614374565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143d85780820151818401526020810190506143bd565b838111156143e7576000848401525b50505050565b6000601f19601f8301169050919050565b60006144098261439e565b61441381856143a9565b93506144238185602086016143ba565b61442c816143ed565b840191505092915050565b6000602082019050818103600083015261445181846143fe565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144988261446d565b9050919050565b6144a88161448d565b81146144b357600080fd5b50565b6000813590506144c58161449f565b92915050565b6144d48161436a565b81146144df57600080fd5b50565b6000813590506144f1816144cb565b92915050565b6000806040838503121561450e5761450d614463565b5b600061451c858286016144b6565b925050602061452d858286016144e2565b9150509250929050565b60008115159050919050565b61454c81614537565b82525050565b60006020820190506145676000830184614543565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145aa826143ed565b810181811067ffffffffffffffff821117156145c9576145c8614572565b5b80604052505050565b60006145dc614459565b90506145e882826145a1565b919050565b600067ffffffffffffffff82111561460857614607614572565b5b602082029050602081019050919050565b600080fd5b600061463161462c846145ed565b6145d2565b9050808382526020820190506020840283018581111561465457614653614619565b5b835b8181101561467d578061466988826144b6565b845260208401935050602081019050614656565b5050509392505050565b600082601f83011261469c5761469b61456d565b5b81356146ac84826020860161461e565b91505092915050565b6146be81614537565b81146146c957600080fd5b50565b6000813590506146db816146b5565b92915050565b600080604083850312156146f8576146f7614463565b5b600083013567ffffffffffffffff81111561471657614715614468565b5b61472285828601614687565b9250506020614733858286016146cc565b9150509250929050565b6000806000806080858703121561475757614756614463565b5b6000614765878288016144e2565b9450506020614776878288016144e2565b9350506040614787878288016144e2565b9250506060614798878288016144e2565b91505092959194509250565b6000806000606084860312156147bd576147bc614463565b5b60006147cb868287016144b6565b93505060206147dc868287016144b6565b92505060406147ed868287016144e2565b9150509250925092565b60006020828403121561480d5761480c614463565b5b600061481b848285016144e2565b91505092915050565b6000806040838503121561483b5761483a614463565b5b6000614849858286016144e2565b925050602061485a858286016144e2565b9150509250929050565b600060ff82169050919050565b61487a81614864565b82525050565b60006020820190506148956000830184614871565b92915050565b6000602082840312156148b1576148b0614463565b5b60006148bf848285016144b6565b91505092915050565b600080604083850312156148df576148de614463565b5b60006148ed858286016144b6565b92505060206148fe858286016146cc565b9150509250929050565b6149118161448d565b82525050565b600060208201905061492c6000830184614908565b92915050565b6000806040838503121561494957614948614463565b5b6000614957858286016144b6565b9250506020614968858286016144b6565b9150509250929050565b6000819050919050565b600061499761499261498d8461446d565b614972565b61446d565b9050919050565b60006149a98261497c565b9050919050565b60006149bb8261499e565b9050919050565b6149cb816149b0565b82525050565b60006020820190506149e660008301846149c2565b92915050565b60008060408385031215614a0357614a02614463565b5b6000614a11858286016146cc565b9250506020614a22858286016144e2565b9150509250929050565b6000614a378261499e565b9050919050565b614a4781614a2c565b82525050565b6000602082019050614a626000830184614a3e565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a9e6020836143a9565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3d8261436a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7057614b6f614b03565b5b600182019050919050565b7f43616e27742062652067726561746572207468616e2031352500000000000000600082015250565b6000614bb16019836143a9565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614c3e57808604811115614c1a57614c19614b03565b5b6001851615614c295780820291505b8081029050614c3785614be7565b9450614bfe565b94509492505050565b600082614c575760019050614d13565b81614c655760009050614d13565b8160018114614c7b5760028114614c8557614cb4565b6001915050614d13565b60ff841115614c9757614c96614b03565b5b8360020a915084821115614cae57614cad614b03565b5b50614d13565b5060208310610133831016604e8410600b8410161715614ce95782820a905083811115614ce457614ce3614b03565b5b614d13565b614cf68484846001614bf4565b92509050818404811115614d0d57614d0c614b03565b5b81810290505b9392505050565b6000614d258261436a565b9150614d3083614864565b9250614d5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c47565b905092915050565b6000614d708261436a565b9150614d7b8361436a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db457614db3614b03565b5b828202905092915050565b600081519050614dce816144cb565b92915050565b600060208284031215614dea57614de9614463565b5b6000614df884828501614dbf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e3b8261436a565b9150614e468361436a565b925082614e5657614e55614e01565b5b828204905092915050565b6000604082019050614e766000830185614374565b614e836020830184614374565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614ec0600f836143a9565b9150614ecb82614e8a565b602082019050919050565b60006020820190508181036000830152614eef81614eb3565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614f2c601d836143a9565b9150614f3782614ef6565b602082019050919050565b60006020820190508181036000830152614f5b81614f1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fbe6026836143a9565b9150614fc982614f62565b604082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b6000819050919050565b600061501961501461500f84614ff4565b614972565b61436a565b9050919050565b61502981614ffe565b82525050565b60006040820190506150446000830185614908565b6150516020830184615020565b9392505050565b600060408201905061506d6000830185614908565b61507a6020830184614374565b9392505050565b600061508c8261436a565b91506150978361436a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150cc576150cb614b03565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b600061510d600c836143a9565b9150615118826150d7565b602082019050919050565b6000602082019050818103600083015261513c81615100565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006151796015836143a9565b915061518482615143565b602082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b60006151e56012836143a9565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b60006152516018836143a9565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b6000815190506152968161449f565b92915050565b6000602082840312156152b2576152b1614463565b5b60006152c084828501615287565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fe8161448d565b82525050565b600061531083836152f5565b60208301905092915050565b6000602082019050919050565b6000615334826152c9565b61533e81856152d4565b9350615349836152e5565b8060005b8381101561537a5781516153618882615304565b975061536c8361531c565b92505060018101905061534d565b5085935050505092915050565b600060a08201905061539c6000830188614374565b6153a96020830187615020565b81810360408301526153bb8186615329565b90506153ca6060830185614908565b6153d76080830184614374565b9695505050505050565b600060c0820190506153f66000830189614908565b6154036020830188614374565b6154106040830187615020565b61541d6060830186615020565b61542a6080830185614908565b61543760a0830184614374565b979650505050505050565b60008060006060848603121561545b5761545a614463565b5b600061546986828701614dbf565b935050602061547a86828701614dbf565b925050604061548b86828701614dbf565b9150509250925092565b60006154a08261436a565b91506154ab8361436a565b9250828210156154be576154bd614b03565b5b82820390509291505056fea2646970667358221220575bb813d5e20808eb232aaf449febe5849a0fed40234bd22a1ef9132116f5dc64736f6c634300080a0033608060405273f3a3023e6dede84ad88a656a3269f2a36e83c9a9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55610e10600c55600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000106919062000223565b600a620001149190620003e2565b600162000122919062000433565b600d553480156200013257600080fd5b50604051620023a7380380620023a78339818101604052810190620001589190620004f9565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200052b565b600080fd5b600060ff82169050919050565b620001fd81620001e5565b81146200020957600080fd5b50565b6000815190506200021d81620001f2565b92915050565b6000602082840312156200023c576200023b620001e0565b5b60006200024c848285016200020c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002e357808604811115620002bb57620002ba62000255565b5b6001851615620002cb5780820291505b8081029050620002db8562000284565b94506200029b565b94509492505050565b600082620002fe5760019050620003d1565b816200030e5760009050620003d1565b8160018114620003275760028114620003325762000368565b6001915050620003d1565b60ff84111562000347576200034662000255565b5b8360020a91508482111562000361576200036062000255565b5b50620003d1565b5060208310610133831016604e8410600b8410161715620003a25782820a9050838111156200039c576200039b62000255565b5b620003d1565b620003b1848484600162000291565b92509050818404811115620003cb57620003ca62000255565b5b81810290505b9392505050565b6000819050919050565b6000620003ef82620003d8565b9150620003fc83620001e5565b92506200042b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620002ec565b905092915050565b60006200044082620003d8565b91506200044d83620003d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000489576200048862000255565b5b828202905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004c18262000494565b9050919050565b620004d381620004b4565b8114620004df57600080fd5b50565b600081519050620004f381620004c8565b92915050565b600060208284031215620005125762000511620001e0565b5b60006200052284828501620004e2565b91505092915050565b611e6c806200053b6000396000f3fe60806040526004361061012a5760003560e01c8063ab377daa116100ab578063e2d2e2191161006f578063e2d2e219146103fb578063efca2eed14610426578063f887ea4014610451578063fc0c546a1461047c578063ffb2c479146104a7578063ffd49c84146104d05761012a565b8063ab377daa1461030d578063c346df501461034a578063ce7c2ac214610375578063d0e30db0146103b4578063d4fda1f2146103be5761012a565b80633a98ef39116100f25780633a98ef39146102125780634fab0ae81461023d57806352f481581461026857806366817df5146102a5578063997664d7146102e25761012a565b806311ce023d1461012f57806314b6ca961461015a57806315f7e05e1461018357806328fd3198146101ac5780632d48e896146101e9575b600080fd5b34801561013b57600080fd5b506101446104fb565b60405161015191906116fb565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c91906117a5565b610501565b005b34801561018f57600080fd5b506101aa60048036038101906101a591906117e5565b6107c0565b005b3480156101b857600080fd5b506101d360048036038101906101ce91906117e5565b6107cc565b6040516101e091906116fb565b60405180910390f35b3480156101f557600080fd5b50610210600480360381019061020b9190611812565b6108e6565b005b34801561021e57600080fd5b50610227610950565b60405161023491906116fb565b60405180910390f35b34801561024957600080fd5b50610252610956565b60405161025f91906116fb565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a91906117e5565b61095c565b60405161029c91906116fb565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906117e5565b6109a8565b6040516102d991906116fb565b60405180910390f35b3480156102ee57600080fd5b506102f76109c0565b60405161030491906116fb565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f9190611852565b6109c6565b604051610341919061188e565b60405180910390f35b34801561035657600080fd5b5061035f610a05565b60405161036c9190611908565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906117e5565b610a2b565b6040516103ab93929190611923565b60405180910390f35b6103bc610a55565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906117e5565b610e95565b6040516103f291906116fb565b60405180910390f35b34801561040757600080fd5b50610410610ead565b60405161041d91906116fb565b60405180910390f35b34801561043257600080fd5b5061043b610eb3565b60405161044891906116fb565b60405180910390f35b34801561045d57600080fd5b50610466610eb9565b604051610473919061197b565b60405180910390f35b34801561048857600080fd5b50610491610edf565b60405161049e919061188e565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190611852565b610f03565b005b3480156104dc57600080fd5b506104e5611097565b6040516104f291906116fb565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461055957600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156105ae576105ad8261109d565b5b60008111801561060057506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156106135761060e82611335565b610675565b60008114801561066557506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561067457610673826113e4565b5b5b6106de816106d0600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007546115eb90919063ffffffff16565b61160190919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610776600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b6107c98161109d565b50565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561082157600090506108e1565b600061086e600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116108c9576000925050506108e1565b6108dc81836115eb90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461093e57600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60056020528060005260406000206000915090505481565b60085481565b600381815481106109d657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b0a919061188e565b602060405180830381865afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b91906119ab565b90506000600267ffffffffffffffff811115610b6a57610b696119d8565b5b604051908082528060200260200182016040528015610b985781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190611a1c565b81600081518110610c4057610c3f611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610cb157610cb0611a49565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610d4e9493929190611b71565b6000604051808303818588803b158015610d6757600080fd5b505af1158015610d7b573d6000803e3d6000fd5b50505050506000610e3083600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de1919061188e565b602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906119ab565b6115eb90919063ffffffff16565b9050610e478160085461160190919063ffffffff16565b600881905550610e8a610e79600754610e6b84600b5461164990919063ffffffff16565b61165f90919063ffffffff16565b600a5461160190919063ffffffff16565b600a81905550505050565b60046020528060005260406000206000915090505481565b600a5481565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f5b57600080fd5b600060038054905090506000811415610f745750611094565b6000805a905060005b8483108015610f8b57508381105b1561108f5783600e5410610fa2576000600e819055505b610feb6003600e5481548110610fbb57610fba611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611675565b1561103a576110396003600e548154811061100957611008611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661109d565b5b61105f6110505a846115eb90919063ffffffff16565b8461160190919063ffffffff16565b92505a9150600e600081548092919061107790611bec565b9190505550808061108790611bec565b915050610f7d565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156110ed57611332565b60006110f8826107cc565b90506000811115611330576111188160095461160190919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161117b929190611c35565b6020604051808303816000875af115801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190611c96565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125881600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461160190919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506112e9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611617565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506113f89190611cc3565b8154811061140957611408611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061148757611486611a49565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506115279190611cc3565b8154811061153857611537611a49565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115b3576115b2611cf7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836115f99190611cc3565b905092915050565b6000818361160f9190611d26565b905092915050565b6000611642600b54611634600a548561164990919063ffffffff16565b61165f90919063ffffffff16565b9050919050565b600081836116579190611d7c565b905092915050565b6000818361166d9190611e05565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116c59190611d26565b1080156116db5750600d546116d9836107cc565b115b9050919050565b6000819050919050565b6116f5816116e2565b82525050565b600060208201905061171060008301846116ec565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117468261171b565b9050919050565b6117568161173b565b811461176157600080fd5b50565b6000813590506117738161174d565b92915050565b611782816116e2565b811461178d57600080fd5b50565b60008135905061179f81611779565b92915050565b600080604083850312156117bc576117bb611716565b5b60006117ca85828601611764565b92505060206117db85828601611790565b9150509250929050565b6000602082840312156117fb576117fa611716565b5b600061180984828501611764565b91505092915050565b6000806040838503121561182957611828611716565b5b600061183785828601611790565b925050602061184885828601611790565b9150509250929050565b60006020828403121561186857611867611716565b5b600061187684828501611790565b91505092915050565b6118888161173b565b82525050565b60006020820190506118a3600083018461187f565b92915050565b6000819050919050565b60006118ce6118c96118c48461171b565b6118a9565b61171b565b9050919050565b60006118e0826118b3565b9050919050565b60006118f2826118d5565b9050919050565b611902816118e7565b82525050565b600060208201905061191d60008301846118f9565b92915050565b600060608201905061193860008301866116ec565b61194560208301856116ec565b61195260408301846116ec565b949350505050565b6000611965826118d5565b9050919050565b6119758161195a565b82525050565b6000602082019050611990600083018461196c565b92915050565b6000815190506119a581611779565b92915050565b6000602082840312156119c1576119c0611716565b5b60006119cf84828501611996565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611a168161174d565b92915050565b600060208284031215611a3257611a31611716565b5b6000611a4084828501611a07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000611a9d611a98611a9384611a78565b6118a9565b6116e2565b9050919050565b611aad81611a82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ae88161173b565b82525050565b6000611afa8383611adf565b60208301905092915050565b6000602082019050919050565b6000611b1e82611ab3565b611b288185611abe565b9350611b3383611acf565b8060005b83811015611b64578151611b4b8882611aee565b9750611b5683611b06565b925050600181019050611b37565b5085935050505092915050565b6000608082019050611b866000830187611aa4565b8181036020830152611b988186611b13565b9050611ba7604083018561187f565b611bb460608301846116ec565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bf7826116e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c2a57611c29611bbd565b5b600182019050919050565b6000604082019050611c4a600083018561187f565b611c5760208301846116ec565b9392505050565b60008115159050919050565b611c7381611c5e565b8114611c7e57600080fd5b50565b600081519050611c9081611c6a565b92915050565b600060208284031215611cac57611cab611716565b5b6000611cba84828501611c81565b91505092915050565b6000611cce826116e2565b9150611cd9836116e2565b925082821015611cec57611ceb611bbd565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611d31826116e2565b9150611d3c836116e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d7157611d70611bbd565b5b828201905092915050565b6000611d87826116e2565b9150611d92836116e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611dcb57611dca611bbd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e10826116e2565b9150611e1b836116e2565b925082611e2b57611e2a611dd6565b5b82820490509291505056fea2646970667358221220a60bedadd4614f4e2f4a7f1db58966ef69cad93a7d4e90ec76c6f744eefa760664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806386cb8fb1116101ab578063bfe10928116100f7578063ec44acf211610095578063f6cfa08a1161006f578063f6cfa08a14610c41578063f708a64f14610c6a578063f887ea4014610c93578063fc899bdc14610cbe57610340565b8063ec44acf214610bd6578063f0fc6bca14610c01578063f2fde38b14610c1857610340565b8063cf46f24c116100d1578063cf46f24c14610b1a578063dd62ed3e14610b45578063df20fd4914610b82578063e96fada214610bab57610340565b8063bfe1092814610a99578063c346df5014610ac4578063ca33e64c14610aef57610340565b80639d1944f511610164578063a8aa1b311161013e578063a8aa1b31146109db578063a9059cbb14610a06578063aa4bde2814610a43578063bf56b37114610a6e57610340565b80639d1944f51461095e5780639d9241ec14610987578063a4b45c00146109b257610340565b806386cb8fb11461084e57806386db0c051461088b578063893c9f2b146108c85780638a8c523c146108f15780638da5cb5b1461090857806395d89b411461093357610340565b80633f4218e011610285578063658d4b7f1161022357806370a08231116101fd57806370a08231146107a6578063715018a6146107e357806374010ece146107fa5780637d99c66d1461082357610340565b8063658d4b7f146107295780636c5b2855146107525780636ddd17131461077b57610340565b8063540b8a271161025f578063540b8a2714610659578063571ac8b01461069657806359b107b9146106d357806360e71962146106fe57610340565b80633f4218e0146105a25780634355855a146105df57806349bc3feb1461061c57610340565b806318160ddd116102f257806327a14fc2116102cc57806327a14fc2146104e85780632d48e89614610511578063313ce5671461053a5780633bbac5791461056557610340565b806318160ddd146104555780631961cee21461048057806323b872dd146104ab57610340565b80630445b6671461034557806306fdde0314610370578063095ea7b31461039b57806310a60f02146103d8578063178d9b8e14610401578063180b0d7e1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ce7565b6040516103679190614383565b60405180910390f35b34801561037c57600080fd5b50610385610ced565b6040516103929190614437565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906144f7565b610d2a565b6040516103cf9190614552565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906146e1565b610e1c565b005b34801561040d57600080fd5b506104286004803603810190610423919061473d565b610f46565b005b34801561043657600080fd5b5061043f611095565b60405161044c9190614383565b60405180910390f35b34801561046157600080fd5b5061046a61109b565b6040516104779190614383565b60405180910390f35b34801561048c57600080fd5b506104956110c0565b6040516104a29190614383565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906147a4565b611158565b6040516104df9190614552565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a91906147f7565b611355565b005b34801561051d57600080fd5b5061053860048036038101906105339190614824565b61142b565b005b34801561054657600080fd5b5061054f611553565b60405161055c9190614880565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061489b565b61155c565b6040516105999190614552565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061489b565b61157c565b6040516105d69190614552565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061489b565b61159c565b6040516106139190614552565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e919061489b565b6115bc565b6040516106509190614383565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061489b565b611661565b60405161068d9190614552565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b8919061489b565b611681565b6040516106ca9190614552565b60405180910390f35b3480156106df57600080fd5b506106e86116b1565b6040516106f59190614383565b60405180910390f35b34801561070a57600080fd5b506107136116b7565b6040516107209190614383565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906148c8565b6116bd565b005b34801561075e57600080fd5b506107796004803603810190610774919061473d565b6117ad565b005b34801561078757600080fd5b506107906118fc565b60405161079d9190614552565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061489b565b61190f565b6040516107da9190614383565b60405180910390f35b3480156107ef57600080fd5b506107f8611958565b005b34801561080657600080fd5b50610821600480360381019061081c91906147f7565b611aab565b005b34801561082f57600080fd5b50610838611b81565b6040516108459190614383565b60405180910390f35b34801561085a57600080fd5b506108756004803603810190610870919061489b565b611b87565b6040516108829190614552565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad919061489b565b611ba7565b6040516108bf9190614383565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea91906147f7565b611c4c565b005b3480156108fd57600080fd5b50610906611d32565b005b34801561091457600080fd5b5061091d611e56565b60405161092a9190614917565b60405180910390f35b34801561093f57600080fd5b50610948611e7f565b6040516109559190614437565b60405180910390f35b34801561096a57600080fd5b50610985600480360381019061098091906147f7565b611ebc565b005b34801561099357600080fd5b5061099c611fa0565b6040516109a99190614383565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190614932565b611fa6565b005b3480156109e757600080fd5b506109f06120c1565b6040516109fd9190614917565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a2891906144f7565b6120e7565b604051610a3a9190614552565b60405180910390f35b348015610a4f57600080fd5b50610a586120fc565b604051610a659190614383565b60405180910390f35b348015610a7a57600080fd5b50610a83612102565b604051610a909190614383565b60405180910390f35b348015610aa557600080fd5b50610aae612108565b604051610abb91906149d1565b60405180910390f35b348015610ad057600080fd5b50610ad961212e565b604051610ae69190614917565b60405180910390f35b348015610afb57600080fd5b50610b04612154565b604051610b119190614917565b60405180910390f35b348015610b2657600080fd5b50610b2f61217a565b604051610b3c9190614383565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614932565b612180565b604051610b799190614383565b60405180910390f35b348015610b8e57600080fd5b50610ba96004803603810190610ba491906149ec565b612207565b005b348015610bb757600080fd5b50610bc06122d0565b604051610bcd9190614917565b60405180910390f35b348015610be257600080fd5b50610beb6122f6565b604051610bf89190614552565b60405180910390f35b348015610c0d57600080fd5b50610c16612309565b005b348015610c2457600080fd5b50610c3f6004803603810190610c3a919061489b565b612398565b005b348015610c4d57600080fd5b50610c686004803603810190610c6391906146e1565b61255a565b005b348015610c7657600080fd5b50610c916004803603810190610c8c91906148c8565b612684565b005b348015610c9f57600080fd5b50610ca8612971565b604051610cb59190614a4d565b60405180910390f35b348015610cca57600080fd5b50610ce56004803603810190610ce091906148c8565b612997565b005b601f5481565b60606040518060400160405280600b81526020017f4261627920536861726269000000000000000000000000000000000000000000815250905090565b600081601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e0a9190614383565b60405180910390a36001905092915050565b610e24612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890614ab4565b60405180910390fd5b60005b8251811015610f415781601e6000858481518110610ed557610ed4614ad4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f3990614b32565b915050610eb4565b505050565b610f4e612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290614ab4565b60405180910390fd5b836006819055508260078190555081600881905550611015826110078686612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b600f819055508060118190555061104b606461103d600f601154612aa590919063ffffffff16565b612abb90919063ffffffff16565b600f54111561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690614bc7565b60405180910390fd5b50505050565b60115481565b60006009600a6110ab9190614d1a565b64e8d4a510006110bb9190614d65565b905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190614dd4565b905090565b60006009600a6111689190614d1a565b64e8d4a510006111789190614d65565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611341576112c0826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61134c848484612b26565b90509392505050565b61135d612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190614ab4565b60405180910390fd5b6127106009600a6113fb9190614d1a565b64e8d4a5100061140b9190614d65565b6114159190614e30565b81101561142157600080fd5b8060158190555050565b611433612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790614ab4565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161151d929190614e61565b600060405180830381600087803b15801561153757600080fd5b505af115801561154b573d6000803e3d6000fd5b505050505050565b60006009905090565b601e6020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352f48158836040518263ffffffff1660e01b81526004016116199190614917565b602060405180830381865afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190614dd4565b9050919050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60006116aa826009600a6116959190614d1a565b64e8d4a510006116a59190614d65565b610d2a565b9050919050565b600f5481565b60135481565b6116c5612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614ab4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117b5612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990614ab4565b60405180910390fd5b83600a819055508260098190555081600b8190555061187c8261186e8587612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b601081905550806011819055506118b260646118a4600f601154612aa590919063ffffffff16565b612abb90919063ffffffff16565b60105411156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614bc7565b60405180910390fd5b50505050565b602060009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611960612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490614ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ab3612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3790614ab4565b60405180910390fd5b6127106009600a611b519190614d1a565b64e8d4a51000611b619190614d65565b611b6b9190614e30565b811015611b7757600080fd5b8060148190555050565b60175481565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b8152600401611c049190614917565b602060405180830381865afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c459190614dd4565b9050919050565b611c54612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614ab4565b60405180910390fd5b611ce9611e56565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2e573d6000803e3d6000fd5b5050565b611d3a612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe90614ab4565b60405180910390fd5b602060019054906101000a900460ff1615611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614ed6565b60405180910390fd5b6001602060016101000a81548160ff0219169083151502179055506001602060006101000a81548160ff02191690831515021790555042601681905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f2442534841524249000000000000000000000000000000000000000000000000815250905090565b611ec4612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890614ab4565b60405180910390fd5b620b71b08110611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d90614f42565b60405180910390fd5b8060138190555050565b60105481565b611fae612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290614ab4565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120f4338484612b26565b905092915050565b60155481565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61220f612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ab4565b60405180910390fd5b6000601f54116122ab57600080fd5b81602060006101000a81548160ff02191690831515021790555080601f819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060019054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b81526004016123649190614917565b600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b50505050565b6123a0612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490614ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614fd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612562612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614ab4565b60405180910390fd5b60005b825181101561267f5781601b600085848151811061261357612612614ad4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061267790614b32565b9150506125f2565b505050565b61268c612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614ab4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127a35750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6127ac57600080fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561289e57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161286792919061502f565b600060405180830381600087803b15801561288157600080fd5b505af1158015612895573d6000803e3d6000fd5b5050505061296d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161293a929190615058565b600060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050505b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61299f612a87565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614ab4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60008183612a9d9190615081565b905092915050565b60008183612ab39190614d65565b905092915050565b60008183612ac99190614e30565b905092915050565b6000838311158290612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b109190614437565b60405180910390fd5b5082840390509392505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bac90615123565b60405180910390fd5b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c595750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f7957601454821115612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a9061518f565b60405180910390fd5b602060019054906101000a900460ff16612da3578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612d6357508273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b612da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d99906151fb565b60405180910390fd5b5b601754601654612db39190615081565b42108015612e0f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612f78578373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ec7576001601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f77565b8273ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f76576001601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661302a57601554612fe883612fda8661190f565b612a8f90919063ffffffff16565b1115613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302090615267565b60405180910390fd5b5b602060029054906101000a900460ff16156130515761304a84848461377b565b9050613774565b61305961394e565b1561306757613066613a25565b5b6130f0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131d65750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132895750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156132885750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b156132965782905061339c565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561334657613317601154613309600f5487612aa590919063ffffffff16565b612abb90919063ffffffff16565b905061332c81856140ca90919063ffffffff16565b915061333886826140e0565b613341846141de565b61339a565b61336f60115461336160105487612aa590919063ffffffff16565b612abb90919063ffffffff16565b905061338481856140ca90919063ffffffff16565b915061339086826140e0565b613399846142a4565b5b505b6133ee81601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355457601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161351e929190615058565b600060405180830381600087803b15801561353857600080fd5b505af1925050508015613549575060015b61355257613553565b5b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661367757601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613641929190615058565b600060405180830381600087803b15801561365b57600080fd5b505af192505050801561366c575060015b61367557613676565b5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016136d49190614383565b600060405180830381600087803b1580156136ee57600080fd5b505af19250505080156136ff575060015b61370857613709565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137669190614383565b60405180910390a360019150505b9392505050565b6000613806826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad19092919063ffffffff16565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389b82601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161393b9190614383565b60405180910390a3600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156139bb5750602060029054906101000a900460ff16155b80156139d35750602060009054906101000a900460ff165b8015613a205750601f54601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060026101000a81548160ff0219169083151502179055506000613a6d600e54613a5f600c54600d54612a8f90919063ffffffff16565b612a8f90919063ffffffff16565b90506000613aad6002613a9f84613a91600d54601f54612aa590919063ffffffff16565b612abb90919063ffffffff16565b612abb90919063ffffffff16565b90506000613ac682601f546140ca90919063ffffffff16565b90506009600a613ad69190614d1a565b64e8d4a51000613ae69190614d65565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff811115613ba557613ba4614572565b5b604051908082528060200260200182016040528015613bd35781602001602082028036833780820191505090505b5090503081600081518110613beb57613bea614ad4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb6919061529c565b81600181518110613cca57613cc9614ad4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613d6d959493929190615387565b600060405180830381600087803b158015613d8757600080fd5b505af1158015613d9b573d6000803e3d6000fd5b505050506000613db482476140ca90919063ffffffff16565b90506000613de0613dd16002600d54612abb90919063ffffffff16565b886140ca90919063ffffffff16565b90506000613e1e6002613e1084613e02600d5488612aa590919063ffffffff16565b612abb90919063ffffffff16565b612abb90919063ffffffff16565b90506000871115613f3257600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eb2969594939291906153e1565b60606040518083038185885af1158015613ed0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ef59190615442565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068188604051613f29929190614e61565b60405180910390a15b6000613f5b83613f4d600c5487612aa590919063ffffffff16565b612abb90919063ffffffff16565b90506000811115613fed57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613fd057600080fd5b505af193505050508015613fe2575060015b613feb57613fec565b5b5b600061401684614008600e5488612aa590919063ffffffff16565b612abb90919063ffffffff16565b9050600081111561408b57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614089573d6000803e3d6000fd5b505b6000600d819055506000600c819055506000600e81905550505050505050505050506000602060026101000a81548160ff021916908315150217905550565b600081836140d89190615495565b905092915050565b61413281601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8f90919063ffffffff16565b601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141d29190614383565b60405180910390a35050565b6142076011546141f960075484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600d60008282546142189190615081565b9250508190555061424860115461423a60065484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600c60008282546142599190615081565b9250508190555061428960115461427b60085484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600e600082825461429a9190615081565b9250508190555050565b6142cd6011546142bf600a5484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600d60008282546142de9190615081565b9250508190555061430e60115461430060095484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600c600082825461431f9190615081565b9250508190555061434f601154614341600b5484612aa590919063ffffffff16565b612abb90919063ffffffff16565b600e60008282546143609190615081565b9250508190555050565b6000819050919050565b61437d8161436a565b82525050565b60006020820190506143986000830184614374565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143d85780820151818401526020810190506143bd565b838111156143e7576000848401525b50505050565b6000601f19601f8301169050919050565b60006144098261439e565b61441381856143a9565b93506144238185602086016143ba565b61442c816143ed565b840191505092915050565b6000602082019050818103600083015261445181846143fe565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144988261446d565b9050919050565b6144a88161448d565b81146144b357600080fd5b50565b6000813590506144c58161449f565b92915050565b6144d48161436a565b81146144df57600080fd5b50565b6000813590506144f1816144cb565b92915050565b6000806040838503121561450e5761450d614463565b5b600061451c858286016144b6565b925050602061452d858286016144e2565b9150509250929050565b60008115159050919050565b61454c81614537565b82525050565b60006020820190506145676000830184614543565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145aa826143ed565b810181811067ffffffffffffffff821117156145c9576145c8614572565b5b80604052505050565b60006145dc614459565b90506145e882826145a1565b919050565b600067ffffffffffffffff82111561460857614607614572565b5b602082029050602081019050919050565b600080fd5b600061463161462c846145ed565b6145d2565b9050808382526020820190506020840283018581111561465457614653614619565b5b835b8181101561467d578061466988826144b6565b845260208401935050602081019050614656565b5050509392505050565b600082601f83011261469c5761469b61456d565b5b81356146ac84826020860161461e565b91505092915050565b6146be81614537565b81146146c957600080fd5b50565b6000813590506146db816146b5565b92915050565b600080604083850312156146f8576146f7614463565b5b600083013567ffffffffffffffff81111561471657614715614468565b5b61472285828601614687565b9250506020614733858286016146cc565b9150509250929050565b6000806000806080858703121561475757614756614463565b5b6000614765878288016144e2565b9450506020614776878288016144e2565b9350506040614787878288016144e2565b9250506060614798878288016144e2565b91505092959194509250565b6000806000606084860312156147bd576147bc614463565b5b60006147cb868287016144b6565b93505060206147dc868287016144b6565b92505060406147ed868287016144e2565b9150509250925092565b60006020828403121561480d5761480c614463565b5b600061481b848285016144e2565b91505092915050565b6000806040838503121561483b5761483a614463565b5b6000614849858286016144e2565b925050602061485a858286016144e2565b9150509250929050565b600060ff82169050919050565b61487a81614864565b82525050565b60006020820190506148956000830184614871565b92915050565b6000602082840312156148b1576148b0614463565b5b60006148bf848285016144b6565b91505092915050565b600080604083850312156148df576148de614463565b5b60006148ed858286016144b6565b92505060206148fe858286016146cc565b9150509250929050565b6149118161448d565b82525050565b600060208201905061492c6000830184614908565b92915050565b6000806040838503121561494957614948614463565b5b6000614957858286016144b6565b9250506020614968858286016144b6565b9150509250929050565b6000819050919050565b600061499761499261498d8461446d565b614972565b61446d565b9050919050565b60006149a98261497c565b9050919050565b60006149bb8261499e565b9050919050565b6149cb816149b0565b82525050565b60006020820190506149e660008301846149c2565b92915050565b60008060408385031215614a0357614a02614463565b5b6000614a11858286016146cc565b9250506020614a22858286016144e2565b9150509250929050565b6000614a378261499e565b9050919050565b614a4781614a2c565b82525050565b6000602082019050614a626000830184614a3e565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a9e6020836143a9565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3d8261436a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b7057614b6f614b03565b5b600182019050919050565b7f43616e27742062652067726561746572207468616e2031352500000000000000600082015250565b6000614bb16019836143a9565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614c3e57808604811115614c1a57614c19614b03565b5b6001851615614c295780820291505b8081029050614c3785614be7565b9450614bfe565b94509492505050565b600082614c575760019050614d13565b81614c655760009050614d13565b8160018114614c7b5760028114614c8557614cb4565b6001915050614d13565b60ff841115614c9757614c96614b03565b5b8360020a915084821115614cae57614cad614b03565b5b50614d13565b5060208310610133831016604e8410600b8410161715614ce95782820a905083811115614ce457614ce3614b03565b5b614d13565b614cf68484846001614bf4565b92509050818404811115614d0d57614d0c614b03565b5b81810290505b9392505050565b6000614d258261436a565b9150614d3083614864565b9250614d5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614c47565b905092915050565b6000614d708261436a565b9150614d7b8361436a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614db457614db3614b03565b5b828202905092915050565b600081519050614dce816144cb565b92915050565b600060208284031215614dea57614de9614463565b5b6000614df884828501614dbf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e3b8261436a565b9150614e468361436a565b925082614e5657614e55614e01565b5b828204905092915050565b6000604082019050614e766000830185614374565b614e836020830184614374565b9392505050565b7f416c726561647920656e61626c65640000000000000000000000000000000000600082015250565b6000614ec0600f836143a9565b9150614ecb82614e8a565b602082019050919050565b60006020820190508181036000830152614eef81614eb3565b9050919050565b7f476173206d757374206265206c6f776572207468616e20373530303030000000600082015250565b6000614f2c601d836143a9565b9150614f3782614ef6565b602082019050919050565b60006020820190508181036000830152614f5b81614f1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fbe6026836143a9565b9150614fc982614f62565b604082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b6000819050919050565b600061501961501461500f84614ff4565b614972565b61436a565b9050919050565b61502981614ffe565b82525050565b60006040820190506150446000830185614908565b6150516020830184615020565b9392505050565b600060408201905061506d6000830185614908565b61507a6020830184614374565b9392505050565b600061508c8261436a565b91506150978361436a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150cc576150cb614b03565b5b828201905092915050565b7f426f742064657465637465640000000000000000000000000000000000000000600082015250565b600061510d600c836143a9565b9150615118826150d7565b602082019050919050565b6000602082019050818103600083015261513c81615100565b9050919050565b7f4d61782074786e206c696d697420657863656564730000000000000000000000600082015250565b60006151796015836143a9565b915061518482615143565b602082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b7f54726164696e672069732064697361626c650000000000000000000000000000600082015250565b60006151e56012836143a9565b91506151f0826151af565b602082019050919050565b60006020820190508181036000830152615214816151d8565b9050919050565b7f4d61782057616c6c6574206c696d697420657863656564730000000000000000600082015250565b60006152516018836143a9565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b6000815190506152968161449f565b92915050565b6000602082840312156152b2576152b1614463565b5b60006152c084828501615287565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152fe8161448d565b82525050565b600061531083836152f5565b60208301905092915050565b6000602082019050919050565b6000615334826152c9565b61533e81856152d4565b9350615349836152e5565b8060005b8381101561537a5781516153618882615304565b975061536c8361531c565b92505060018101905061534d565b5085935050505092915050565b600060a08201905061539c6000830188614374565b6153a96020830187615020565b81810360408301526153bb8186615329565b90506153ca6060830185614908565b6153d76080830184614374565b9695505050505050565b600060c0820190506153f66000830189614908565b6154036020830188614374565b6154106040830187615020565b61541d6060830186615020565b61542a6080830185614908565b61543760a0830184614374565b979650505050505050565b60008060006060848603121561545b5761545a614463565b5b600061546986828701614dbf565b935050602061547a86828701614dbf565b925050604061548b86828701614dbf565b9150509250925092565b60006154a08261436a565b91506154ab8361436a565b9250828210156154be576154bd614b03565b5b82820390509291505056fea2646970667358221220575bb813d5e20808eb232aaf449febe5849a0fed40234bd22a1ef9132116f5dc64736f6c634300080a0033

Deployed Bytecode Sourcemap

13320:16176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15096:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17257:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17682:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27244:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27473:566;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14384:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16939:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25594:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18259:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26587:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29110:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17049:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15050:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14842:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14995:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25224:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14892:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17938:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14302:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14476:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26751:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28047:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15153:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17359:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5907:157;;;;;;;;;;;;;:::i;:::-;;26429:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14668:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14943:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25406:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26310:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26110:192;;;;;;;;;;;;;:::i;:::-;;5693:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17151:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29325:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14342:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28627:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13849:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18063:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14578:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14636:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14431:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13642:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13875:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14523:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17486:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28887:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13918:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15183:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25126:90;;;;;;;;;;;;;:::i;:::-;;6072:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26878:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25729:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13818:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27112:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15096:50;;;;:::o;17257:94::-;17305:13;17338:5;;;;;;;;;;;;;;;;;17331:12;;17257:94;:::o;17682:248::-;17784:4;17841:6;17806:11;:23;17818:10;17806:23;;;;;;;;;;;;;;;:32;17830:7;17806:32;;;;;;;;;;;;;;;:41;;;;17884:7;17863:37;;17872:10;17863:37;;;17893:6;17863:37;;;;;;:::i;:::-;;;;;;;;17918:4;17911:11;;17682:248;;;;:::o;27244:221::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27367:9:::1;27362:96;27382:8;:15;27378:1;:19;27362:96;;;27440:6;27419:5;:18;27425:8;27434:1;27425:11;;;;;;;;:::i;:::-;;;;;;;;27419:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27399:3;;;;;:::i;:::-;;;;27362:96;;;;27244:221:::0;;:::o;27473:566::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27679:14:::1;27659:17;:34;;;;27723:13;27704:16;:32;;;;27766:13;27747:16;:32;;;;27804:52;27842:13;27804:33;27822:14;27804:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;27790:11;:66;;;;27884:15;27867:14;:32;;;;27947:31;27974:3;27947:22;27966:2;27947:14;;:18;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;27932:11;;:46;;27910:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;27473:566:::0;;;;:::o;14384:38::-;;;;:::o;16939:102::-;16994:7;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;17014:19;;16939:102;:::o;25594:127::-;25656:7;25683:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25676:37;;25594:127;:::o;18259:419::-;18393:4;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;18414:11;:19;18426:6;18414:19;;;;;;;;;;;;;;;:31;18434:10;18414:31;;;;;;;;;;;;;;;;:47;18410:201;;18512:87;18566:6;18512:87;;;;;;;;;;;;;;;;;:11;:19;18524:6;18512:19;;;;;;;;;;;;;;;:31;18532:10;18512:31;;;;;;;;;;;;;;;;:53;;:87;;;;;:::i;:::-;18478:11;:19;18490:6;18478:19;;;;;;;;;;;;;;;:31;18498:10;18478:31;;;;;;;;;;;;;;;:121;;;;18410:201;18630:40;18644:6;18652:9;18663:6;18630:13;:40::i;:::-;18623:47;;18259:419;;;;;:::o;26587:156::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26694:5:::1;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;26679:20;;;;:::i;:::-;26669:6;:30;;26661:39;;;::::0;::::1;;26729:6;26711:15;:24;;;;26587:156:::0;:::o;29110:207::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29244:11:::1;;;;;;;;;;;:35;;;29280:10;29292:16;29244:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29110:207:::0;;:::o;17049:94::-;17101:5;13552:1;17119:16;;17049:94;:::o;15050:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;14842:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;14995:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;25224:174::-;25318:7;25350:11;;;;;;;;;;;:27;;;25378:11;25350:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25343:47;;25224:174;;;:::o;14892:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17938:117::-;17993:4;18017:30;18025:7;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;18017:7;:30::i;:::-;18010:37;;17938:117;;;:::o;14302:33::-;;;;:::o;14476:38::-;;;;:::o;26751:119::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26856:6:::1;26834:11;:19;26846:6;26834:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26751:119:::0;;:::o;28047:572::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28254:13:::1;28234:17;:33;;;;28299:14;28278:18;:35;;;;28344:13;28324:17;:33;;;;28383:52;28421:13;28383:33;28401:14;28383:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;28368:12;:67;;;;28463:15;28446:14;:32;;;;28527:31;28554:3;28527:22;28546:2;28527:14;;:18;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;28511:12;;:47;;28489:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;28047:572:::0;;;;:::o;15153:23::-;;;;;;;;;;;;;:::o;17359:119::-;17425:7;17452:9;:18;17462:7;17452:18;;;;;;;;;;;;;;;;17445:25;;17359:119;;;:::o;5907:157::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6014:1:::1;5977:40;;5998:6;::::0;::::1;;;;;;;;5977:40;;;;;;;;;;;;6053:1;6028:6:::0;::::1;:28;;;;;;;;;;;;;;;;;;5907:157::o:0;26429:150::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26533:5:::1;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;26518:20;;;;:::i;:::-;26508:6;:30;;26500:39;;;::::0;::::1;;26565:6;26550:12;:21;;;;26429:150:::0;:::o;14668:39::-;;;;:::o;14943:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;25406:180::-;25504:7;25536:11;;;;;;;;;;;:29;;;25566:11;25536:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25529:49;;25406:180;;;:::o;26310:111::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:7:::1;:5;:7::i;:::-;26380:25;;:33;26406:6;26380:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26310:111:::0;:::o;26110:192::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26174:7:::1;;;;;;;;;;;26173:8;26165:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;26222:4;26212:7;;:14;;;;;;;;;;;;;;;;;;26251:4;26237:11;;:18;;;;;;;;;;;;;;;;;;26279:15;26266:10;:28;;;;26110:192::o:0;5693:79::-;5731:7;5758:6;;;;;;;;;;;5751:13;;5693:79;:::o;17151:98::-;17201:13;17234:7;;;;;;;;;;;;;;;;;17227:14;;17151:98;:::o;29325:168::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29414:6:::1;29408:3;:12;29400:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29482:3;29465:14;:20;;;;29325:168:::0;:::o;14342:35::-;;;;:::o;28627:252::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28794:22:::1;28770:21;;:46;;;;;;;;;;;;;;;;;;28850:21;28827:20;;:44;;;;;;;;;;;;;;;;;;28627:252:::0;;:::o;13849:19::-;;;;;;;;;;;;;:::o;18063:188::-;18170:4;18199:44;18213:10;18225:9;18236:6;18199:13;:44::i;:::-;18192:51;;18063:188;;;;:::o;14578:51::-;;;;:::o;14636:25::-;;;;:::o;14431:38::-;;;;;;;;;;;;;:::o;13642:66::-;;;;;;;;;;;;;:::o;13875:36::-;;;;;;;;;;;;;:::o;14523:48::-;;;;:::o;17486:188::-;17606:7;17638:11;:19;17650:6;17638:19;;;;;;;;;;;;;;;:28;17658:7;17638:28;;;;;;;;;;;;;;;;17631:35;;17486:188;;;;:::o;28887:215::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29025:1:::1;29009:13;;:17;29001:26;;;::::0;::::1;;29052:8;29038:11;;:22;;;;;;;;;;;;;;;;;;29087:7;29071:13;:23;;;;28887:215:::0;;:::o;13918:35::-;;;;;;;;;;;;;:::o;15183:19::-;;;;;;;;;;;;;:::o;25126:90::-;25171:11;;;;;;;;;;;:25;;;25197:10;25171:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25126:90::o;6072:281::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6195:1:::1;6175:22;;:8;:22;;;;6153:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6308:8;6279:38;;6300:6;::::0;::::1;;;;;;;;6279:38;;;;;;;;;;;;6337:8;6328:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6072:281:::0;:::o;26878:226::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27001:9:::1;26996:101;27016:7;:14;27012:1;:18;26996:101;;;27079:6;27052:12;:24;27065:7;27073:1;27065:10;;;;;;;;:::i;:::-;;;;;;;;27052:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27032:3;;;;;:::i;:::-;;;;26996:101;;;;26878:226:::0;;:::o;25729:373::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25866:4:::1;25848:23;;:6;:23;;;;:41;;;;;25885:4;;;;;;;;;;;25875:14;;:6;:14;;;;25848:41;25840:50;;;::::0;::::1;;25928:6;25901:16;:24;25918:6;25901:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25949:6;25945:150;;;25972:11;;;;;;;;;;;:20;;;25993:6;26001:1;25972:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25945:150;;;26036:11;;;;;;;;;;;:20;;;26057:6;26065:9;:17;26075:6;26065:17;;;;;;;;;;;;;;;;26036:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25945:150;25729:373:::0;;:::o;13818:24::-;;;;;;;;;;;;;:::o;27112:124::-;5830:12;:10;:12::i;:::-;5820:22;;:6;;;;;;;;;;:22;;;5812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27222:6:::1;27198:13;:21;27212:6;27198:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27112:124:::0;;:::o;5029:115::-;5082:15;5125:10;5110:26;;5029:115;:::o;1646:98::-;1704:7;1735:1;1731;:5;;;;:::i;:::-;1724:12;;1646:98;;;;:::o;1858:::-;1916:7;1947:1;1943;:5;;;;:::i;:::-;1936:12;;1858:98;;;;:::o;1964:::-;2022:7;2053:1;2049;:5;;;;:::i;:::-;2042:12;;1964:98;;;;:::o;2176:240::-;2296:7;2354:1;2349;:6;;2357:12;2341:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2396:1;2392;:5;2385:12;;2176:240;;;;;:::o;18686:2773::-;18812:4;18838:5;:13;18844:6;18838:13;;;;;;;;;;;;;;;;;;;;;;;;;18837:14;18829:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;18884:12;:20;18897:6;18884:20;;;;;;;;;;;;;;;;;;;;;;;;;18883:21;:49;;;;;18909:12;:23;18922:9;18909:23;;;;;;;;;;;;;;;;;;;;;;;;;18908:24;18883:49;18879:759;;;18967:12;;18957:6;:22;;18949:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19071:7;;;;;;;;;;;19066:176;;19137:6;19129:14;;:4;;;;;;;;;;;:14;;;;:35;;;;;19155:9;19147:17;;:4;;;;;;;;;;;:17;;;;19129:35;19099:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19066:176;19342:11;;19329:10;;:24;;;;:::i;:::-;19311:15;:42;:88;;;;;19392:6;;;;;;;;;;;19374:25;;:6;:25;;;;19311:88;19289:338;;;19446:6;19438:14;;:4;;;;;;;;;;;:14;;;19434:178;;;19496:4;19477:5;:16;19483:9;19477:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;19434:178;;;19538:9;19530:17;;:4;;;;;;;;;;;:17;;;19526:86;;;19588:4;19572:5;:13;19578:6;19572:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;19526:86;19434:178;19289:338;18879:759;19655:13;:24;19669:9;19655:24;;;;;;;;;;;;;;;;;;;;;;;;;19650:195;;19758:15;;19722:32;19747:6;19722:20;19732:9;19722;:20::i;:::-;:24;;:32;;;;:::i;:::-;:51;;19696:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;19650:195;19861:6;;;;;;;;;;;19857:87;;;19891:41;19906:6;19914:9;19925:6;19891:14;:41::i;:::-;19884:48;;;;19857:87;19960:16;:14;:16::i;:::-;19956:59;;;19993:10;:8;:10::i;:::-;19956:59;20047:90;20083:6;20047:90;;;;;;;;;;;;;;;;;:9;:17;20057:6;20047:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;20027:9;:17;20037:6;20027:17;;;;;;;;;;;;;;;:110;;;;20150:22;20201:11;:19;20213:6;20201:19;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;20237:11;:22;20249:9;20237:22;;;;;;;;;;;;;;;;;;;;;;;;;20201:58;:112;;;;20287:4;;;;;;;;;;;20277:14;;:6;:14;;;;:35;;;;;20308:4;;;;;;;;;;;20295:17;;:9;:17;;;;20277:35;20201:112;20183:746;;;20357:6;20340:23;;20183:746;;;20396:17;20442:4;;;;;;;;;;;20432:14;;:6;:14;;;20428:490;;;20479:43;20507:14;;20479:23;20490:11;;20479:6;:10;;:23;;;;:::i;:::-;:27;;:43;;;;:::i;:::-;20467:55;;20558:21;20569:9;20558:6;:10;;:21;;;;:::i;:::-;20541:38;;20598:26;20606:6;20614:9;20598:7;:26::i;:::-;20643:20;20656:6;20643:12;:20::i;:::-;20428:490;;;20716:44;20745:14;;20716:24;20727:12;;20716:6;:10;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;20704:56;;20796:21;20807:9;20796:6;:10;;:21;;;;:::i;:::-;20779:38;;20836:26;20844:6;20852:9;20836:7;:26::i;:::-;20881:21;20895:6;20881:13;:21::i;:::-;20428:490;20381:548;20183:746;20964:40;20989:14;20964:9;:20;20974:9;20964:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;20941:9;:20;20951:9;20941:20;;;;;;;;;;;;;;;:63;;;;21022:16;:24;21039:6;21022:24;;;;;;;;;;;;;;;;;;;;;;;;;21017:120;;21067:11;;;;;;;;;;;:20;;;21088:6;21096:9;:17;21106:6;21096:17;;;;;;;;;;;;;;;;21067:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21063:63;;;;;;21017:120;21152:16;:27;21169:9;21152:27;;;;;;;;;;;;;;;;;;;;;;;;;21147:159;;21217:11;;;;;;;;;;;:20;;;21238:9;21249;:20;21259:9;21249:20;;;;;;;;;;;;;;;;21217:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21196:99;;;;;;21147:159;21322:11;;;;;;;;;;;:19;;;21342:14;;21322:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21318:51;;;;;;21403:9;21386:43;;21395:6;21386:43;;;21414:14;21386:43;;;;;;:::i;:::-;;;;;;;;21447:4;21440:11;;;18686:2773;;;;;;:::o;21467:401::-;21594:4;21631:90;21667:6;21631:90;;;;;;;;;;;;;;;;;:9;:17;21641:6;21631:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;21611:9;:17;21621:6;21611:17;;;;;;;;;;;;;;;:110;;;;21755:32;21780:6;21755:9;:20;21765:9;21755:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21732:9;:20;21742:9;21732:20;;;;;;;;;;;;;;;:55;;;;21820:9;21803:35;;21812:6;21803:35;;;21831:6;21803:35;;;;;;:::i;:::-;;;;;;;;21856:4;21849:11;;21467:401;;;;;:::o;22812:222::-;22861:4;22912;;;;;;;;;;;22898:18;;:10;:18;;;;:42;;;;;22934:6;;;;;;;;;;;22933:7;22898:42;:70;;;;;22957:11;;;;;;;;;;;22898:70;:128;;;;;23013:13;;22985:9;:24;23003:4;22985:24;;;;;;;;;;;;;;;;:41;;22898:128;22878:148;;22812:222;:::o;23042:2076::-;15267:4;15258:6;;:13;;;;;;;;;;;;;;;;;;23091:16:::1;23110:91;23172:18;;23110:43;23133:19;;23110:18;;:22;;:43;;;;:::i;:::-;:47;;:91;;;;:::i;:::-;23091:110;;23214:23;23240:100;23338:1;23240:79;23310:8;23240:51;23272:18;;23240:13;;:31;;:51;;;;:::i;:::-;:69;;:79;;;;:::i;:::-;:97;;:100;;;;:::i;:::-;23214:126;;23353:20;23376:34;23394:15;23376:13;;:17;;:34;;;;:::i;:::-;23353:57;;13552:1;13620:2;:13;;;;:::i;:::-;13600:17;:33;;;;:::i;:::-;23421:11;:26;23441:4;23421:26;;;;;;;;;;;;;;;:43;23456:6;;;;;;;;;;;23421:43;;;;;;;;;;;;;;;:58;;;;23490:21;23528:1;23514:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23490:40;;23559:4;23541;23546:1;23541:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23585:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23575:4;23580:1;23575:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23609:21;23633;23609:45;;23667:6;;;;;;;;;;;:57;;;23739:12;23766:1;23782:4;23809;23829:15;23667:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23868:17;23888:40;23914:13;23888:21;:25;;:40;;;;:::i;:::-;23868:60;;23941:19;23963:39;23976:25;23999:1;23976:18;;:22;;:25;;;;:::i;:::-;23963:8;:12;;:39;;;;:::i;:::-;23941:61;;24015:26;24044:99;24141:1;24044:78;24110:11;24044:47;24072:18;;24044:9;:27;;:47;;;;:::i;:::-;:65;;:78;;;;:::i;:::-;:96;;:99;;;;:::i;:::-;24015:128;;24178:1;24160:15;:19;24156:364;;;24196:6;;;;;;;;;;;:22;;;24226:18;24272:4;24296:15;24330:1;24350::::0;24370:21:::1;;;;;;;;;;;24410:15;24196:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24460:48;24472:18;24492:15;24460:48;;;;;;;:::i;:::-;;;;;;;;24156:364;24532:27;24562:75;24615:11;24562:34;24576:19;;24562:9;:13;;:34;;;;:::i;:::-;:38;;:75;;;;:::i;:::-;24532:105;;24674:1;24652:19;:23;24648:120;;;24696:11;;;;;;;;;;;:19;;;24723;24696:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;24692:65;;;;;;24648:120;24780:26;24809:74;24861:11;24809:33;24823:18;;24809:9;:13;;:33;;;;:::i;:::-;:37;;:74;;;;:::i;:::-;24780:103;;24921:1;24900:18;:22;24896:113;;;24947:20;;;;;;;;;;;24939:38;;:58;24978:18;24939:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24896:113;25042:1;25021:18;:22;;;;25076:1;25054:19;:23;;;;25109:1;25088:18;:22;;;;23080:2038;;;;;;;;;;15303:5:::0;15294:6;;:14;;;;;;;;;;;;;;;;;;23042:2076::o;1752:98::-;1810:7;1841:1;1837;:5;;;;:::i;:::-;1830:12;;1752:98;;;;:::o;21876:204::-;21975:39;22004:9;21975;:24;21993:4;21975:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21948:9;:24;21966:4;21948:24;;;;;;;;;;;;;;;:66;;;;22055:4;22030:42;;22039:6;22030:42;;;22062:9;22030:42;;;;;;:::i;:::-;;;;;;;;21876:204;;:::o;22088:328::-;22169:49;22203:14;;22169:29;22181:16;;22169:7;:11;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22147:18;;:71;;;;;;;:::i;:::-;;;;;;;;22252:74;22301:14;;22252:30;22264:17;;22252:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22229:19;;:97;;;;;;;:::i;:::-;;;;;;;;22359:49;22393:14;;22359:29;22371:16;;22359:7;:11;;:29;;;;:::i;:::-;:33;;:49;;;;:::i;:::-;22337:18;;:71;;;;;;;:::i;:::-;;;;;;;;22088:328;:::o;22424:380::-;22506:74;22555:14;;22506:30;22518:17;;22506:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22484:18;;:96;;;;;;;:::i;:::-;;;;;;;;22614:75;22664:14;;22614:31;22626:18;;22614:7;:11;;:31;;;;:::i;:::-;:35;;:75;;;;:::i;:::-;22591:19;;:98;;;;;;;:::i;:::-;;;;;;;;22722:74;22771:14;;22722:30;22734:17;;22722:7;:11;;:30;;;;:::i;:::-;:34;;:74;;;;:::i;:::-;22700:18;;:96;;;;;;;:::i;:::-;;;;;;;;22424:380;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:117::-;3955:1;3952;3945:12;3969:180;4017:77;4014:1;4007:88;4114:4;4111:1;4104:15;4138:4;4135:1;4128:15;4155:281;4238:27;4260:4;4238:27;:::i;:::-;4230:6;4226:40;4368:6;4356:10;4353:22;4332:18;4320:10;4317:34;4314:62;4311:88;;;4379:18;;:::i;:::-;4311:88;4419:10;4415:2;4408:22;4198:238;4155:281;;:::o;4442:129::-;4476:6;4503:20;;:::i;:::-;4493:30;;4532:33;4560:4;4552:6;4532:33;:::i;:::-;4442:129;;;:::o;4577:311::-;4654:4;4744:18;4736:6;4733:30;4730:56;;;4766:18;;:::i;:::-;4730:56;4816:4;4808:6;4804:17;4796:25;;4876:4;4870;4866:15;4858:23;;4577:311;;;:::o;4894:117::-;5003:1;5000;4993:12;5034:710;5130:5;5155:81;5171:64;5228:6;5171:64;:::i;:::-;5155:81;:::i;:::-;5146:90;;5256:5;5285:6;5278:5;5271:21;5319:4;5312:5;5308:16;5301:23;;5372:4;5364:6;5360:17;5352:6;5348:30;5401:3;5393:6;5390:15;5387:122;;;5420:79;;:::i;:::-;5387:122;5535:6;5518:220;5552:6;5547:3;5544:15;5518:220;;;5627:3;5656:37;5689:3;5677:10;5656:37;:::i;:::-;5651:3;5644:50;5723:4;5718:3;5714:14;5707:21;;5594:144;5578:4;5573:3;5569:14;5562:21;;5518:220;;;5522:21;5136:608;;5034:710;;;;;:::o;5767:370::-;5838:5;5887:3;5880:4;5872:6;5868:17;5864:27;5854:122;;5895:79;;:::i;:::-;5854:122;6012:6;5999:20;6037:94;6127:3;6119:6;6112:4;6104:6;6100:17;6037:94;:::i;:::-;6028:103;;5844:293;5767:370;;;;:::o;6143:116::-;6213:21;6228:5;6213:21;:::i;:::-;6206:5;6203:32;6193:60;;6249:1;6246;6239:12;6193:60;6143:116;:::o;6265:133::-;6308:5;6346:6;6333:20;6324:29;;6362:30;6386:5;6362:30;:::i;:::-;6265:133;;;;:::o;6404:678::-;6494:6;6502;6551:2;6539:9;6530:7;6526:23;6522:32;6519:119;;;6557:79;;:::i;:::-;6519:119;6705:1;6694:9;6690:17;6677:31;6735:18;6727:6;6724:30;6721:117;;;6757:79;;:::i;:::-;6721:117;6862:78;6932:7;6923:6;6912:9;6908:22;6862:78;:::i;:::-;6852:88;;6648:302;6989:2;7015:50;7057:7;7048:6;7037:9;7033:22;7015:50;:::i;:::-;7005:60;;6960:115;6404:678;;;;;:::o;7088:765::-;7174:6;7182;7190;7198;7247:3;7235:9;7226:7;7222:23;7218:33;7215:120;;;7254:79;;:::i;:::-;7215:120;7374:1;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7345:117;7501:2;7527:53;7572:7;7563:6;7552:9;7548:22;7527:53;:::i;:::-;7517:63;;7472:118;7629:2;7655:53;7700:7;7691:6;7680:9;7676:22;7655:53;:::i;:::-;7645:63;;7600:118;7757:2;7783:53;7828:7;7819:6;7808:9;7804:22;7783:53;:::i;:::-;7773:63;;7728:118;7088:765;;;;;;;:::o;7859:619::-;7936:6;7944;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:53;8325:7;8316:6;8305:9;8301:22;8280:53;:::i;:::-;8270:63;;8225:118;8382:2;8408:53;8453:7;8444:6;8433:9;8429:22;8408:53;:::i;:::-;8398:63;;8353:118;7859:619;;;;;:::o;8484:329::-;8543:6;8592:2;8580:9;8571:7;8567:23;8563:32;8560:119;;;8598:79;;:::i;:::-;8560:119;8718:1;8743:53;8788:7;8779:6;8768:9;8764:22;8743:53;:::i;:::-;8733:63;;8689:117;8484:329;;;;:::o;8819:474::-;8887:6;8895;8944:2;8932:9;8923:7;8919:23;8915:32;8912:119;;;8950:79;;:::i;:::-;8912:119;9070:1;9095:53;9140:7;9131:6;9120:9;9116:22;9095:53;:::i;:::-;9085:63;;9041:117;9197:2;9223:53;9268:7;9259:6;9248:9;9244:22;9223:53;:::i;:::-;9213:63;;9168:118;8819:474;;;;;:::o;9299:86::-;9334:7;9374:4;9367:5;9363:16;9352:27;;9299:86;;;:::o;9391:112::-;9474:22;9490:5;9474:22;:::i;:::-;9469:3;9462:35;9391:112;;:::o;9509:214::-;9598:4;9636:2;9625:9;9621:18;9613:26;;9649:67;9713:1;9702:9;9698:17;9689:6;9649:67;:::i;:::-;9509:214;;;;:::o;9729:329::-;9788:6;9837:2;9825:9;9816:7;9812:23;9808:32;9805:119;;;9843:79;;:::i;:::-;9805:119;9963:1;9988:53;10033:7;10024:6;10013:9;10009:22;9988:53;:::i;:::-;9978:63;;9934:117;9729:329;;;;:::o;10064:468::-;10129:6;10137;10186:2;10174:9;10165:7;10161:23;10157:32;10154:119;;;10192:79;;:::i;:::-;10154:119;10312:1;10337:53;10382:7;10373:6;10362:9;10358:22;10337:53;:::i;:::-;10327:63;;10283:117;10439:2;10465:50;10507:7;10498:6;10487:9;10483:22;10465:50;:::i;:::-;10455:60;;10410:115;10064:468;;;;;:::o;10538:118::-;10625:24;10643:5;10625:24;:::i;:::-;10620:3;10613:37;10538:118;;:::o;10662:222::-;10755:4;10793:2;10782:9;10778:18;10770:26;;10806:71;10874:1;10863:9;10859:17;10850:6;10806:71;:::i;:::-;10662:222;;;;:::o;10890:474::-;10958:6;10966;11015:2;11003:9;10994:7;10990:23;10986:32;10983:119;;;11021:79;;:::i;:::-;10983:119;11141:1;11166:53;11211:7;11202:6;11191:9;11187:22;11166:53;:::i;:::-;11156:63;;11112:117;11268:2;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11239:118;10890:474;;;;;:::o;11370:60::-;11398:3;11419:5;11412:12;;11370:60;;;:::o;11436:142::-;11486:9;11519:53;11537:34;11546:24;11564:5;11546:24;:::i;:::-;11537:34;:::i;:::-;11519:53;:::i;:::-;11506:66;;11436:142;;;:::o;11584:126::-;11634:9;11667:37;11698:5;11667:37;:::i;:::-;11654:50;;11584:126;;;:::o;11716:154::-;11794:9;11827:37;11858:5;11827:37;:::i;:::-;11814:50;;11716:154;;;:::o;11876:187::-;11991:65;12050:5;11991:65;:::i;:::-;11986:3;11979:78;11876:187;;:::o;12069:278::-;12190:4;12228:2;12217:9;12213:18;12205:26;;12241:99;12337:1;12326:9;12322:17;12313:6;12241:99;:::i;:::-;12069:278;;;;:::o;12353:468::-;12418:6;12426;12475:2;12463:9;12454:7;12450:23;12446:32;12443:119;;;12481:79;;:::i;:::-;12443:119;12601:1;12626:50;12668:7;12659:6;12648:9;12644:22;12626:50;:::i;:::-;12616:60;;12572:114;12725:2;12751:53;12796:7;12787:6;12776:9;12772:22;12751:53;:::i;:::-;12741:63;;12696:118;12353:468;;;;;:::o;12827:144::-;12895:9;12928:37;12959:5;12928:37;:::i;:::-;12915:50;;12827:144;;;:::o;12977:167::-;13082:55;13131:5;13082:55;:::i;:::-;13077:3;13070:68;12977:167;;:::o;13150:258::-;13261:4;13299:2;13288:9;13284:18;13276:26;;13312:89;13398:1;13387:9;13383:17;13374:6;13312:89;:::i;:::-;13150:258;;;;:::o;13414:182::-;13554:34;13550:1;13542:6;13538:14;13531:58;13414:182;:::o;13602:366::-;13744:3;13765:67;13829:2;13824:3;13765:67;:::i;:::-;13758:74;;13841:93;13930:3;13841:93;:::i;:::-;13959:2;13954:3;13950:12;13943:19;;13602:366;;;:::o;13974:419::-;14140:4;14178:2;14167:9;14163:18;14155:26;;14227:9;14221:4;14217:20;14213:1;14202:9;14198:17;14191:47;14255:131;14381:4;14255:131;:::i;:::-;14247:139;;13974:419;;;:::o;14399:180::-;14447:77;14444:1;14437:88;14544:4;14541:1;14534:15;14568:4;14565:1;14558:15;14585:180;14633:77;14630:1;14623:88;14730:4;14727:1;14720:15;14754:4;14751:1;14744:15;14771:233;14810:3;14833:24;14851:5;14833:24;:::i;:::-;14824:33;;14879:66;14872:5;14869:77;14866:103;;;14949:18;;:::i;:::-;14866:103;14996:1;14989:5;14985:13;14978:20;;14771:233;;;:::o;15010:175::-;15150:27;15146:1;15138:6;15134:14;15127:51;15010:175;:::o;15191:366::-;15333:3;15354:67;15418:2;15413:3;15354:67;:::i;:::-;15347:74;;15430:93;15519:3;15430:93;:::i;:::-;15548:2;15543:3;15539:12;15532:19;;15191:366;;;:::o;15563:419::-;15729:4;15767:2;15756:9;15752:18;15744:26;;15816:9;15810:4;15806:20;15802:1;15791:9;15787:17;15780:47;15844:131;15970:4;15844:131;:::i;:::-;15836:139;;15563:419;;;:::o;15988:102::-;16030:8;16077:5;16074:1;16070:13;16049:34;;15988:102;;;:::o;16096:848::-;16157:5;16164:4;16188:6;16179:15;;16212:5;16203:14;;16226:712;16247:1;16237:8;16234:15;16226:712;;;16342:4;16337:3;16333:14;16327:4;16324:24;16321:50;;;16351:18;;:::i;:::-;16321:50;16401:1;16391:8;16387:16;16384:451;;;16816:4;16809:5;16805:16;16796:25;;16384:451;16866:4;16860;16856:15;16848:23;;16896:32;16919:8;16896:32;:::i;:::-;16884:44;;16226:712;;;16096:848;;;;;;;:::o;16950:1073::-;17004:5;17195:8;17185:40;;17216:1;17207:10;;17218:5;;17185:40;17244:4;17234:36;;17261:1;17252:10;;17263:5;;17234:36;17330:4;17378:1;17373:27;;;;17414:1;17409:191;;;;17323:277;;17373:27;17391:1;17382:10;;17393:5;;;17409:191;17454:3;17444:8;17441:17;17438:43;;;17461:18;;:::i;:::-;17438:43;17510:8;17507:1;17503:16;17494:25;;17545:3;17538:5;17535:14;17532:40;;;17552:18;;:::i;:::-;17532:40;17585:5;;;17323:277;;17709:2;17699:8;17696:16;17690:3;17684:4;17681:13;17677:36;17659:2;17649:8;17646:16;17641:2;17635:4;17632:12;17628:35;17612:111;17609:246;;;17765:8;17759:4;17755:19;17746:28;;17800:3;17793:5;17790:14;17787:40;;;17807:18;;:::i;:::-;17787:40;17840:5;;17609:246;17880:42;17918:3;17908:8;17902:4;17899:1;17880:42;:::i;:::-;17865:57;;;;17954:4;17949:3;17945:14;17938:5;17935:25;17932:51;;;17963:18;;:::i;:::-;17932:51;18012:4;18005:5;18001:16;17992:25;;16950:1073;;;;;;:::o;18029:281::-;18087:5;18111:23;18129:4;18111:23;:::i;:::-;18103:31;;18155:25;18171:8;18155:25;:::i;:::-;18143:37;;18199:104;18236:66;18226:8;18220:4;18199:104;:::i;:::-;18190:113;;18029:281;;;;:::o;18316:348::-;18356:7;18379:20;18397:1;18379:20;:::i;:::-;18374:25;;18413:20;18431:1;18413:20;:::i;:::-;18408:25;;18601:1;18533:66;18529:74;18526:1;18523:81;18518:1;18511:9;18504:17;18500:105;18497:131;;;18608:18;;:::i;:::-;18497:131;18656:1;18653;18649:9;18638:20;;18316:348;;;;:::o;18670:143::-;18727:5;18758:6;18752:13;18743:22;;18774:33;18801:5;18774:33;:::i;:::-;18670:143;;;;:::o;18819:351::-;18889:6;18938:2;18926:9;18917:7;18913:23;18909:32;18906:119;;;18944:79;;:::i;:::-;18906:119;19064:1;19089:64;19145:7;19136:6;19125:9;19121:22;19089:64;:::i;:::-;19079:74;;19035:128;18819:351;;;;:::o;19176:180::-;19224:77;19221:1;19214:88;19321:4;19318:1;19311:15;19345:4;19342:1;19335:15;19362:185;19402:1;19419:20;19437:1;19419:20;:::i;:::-;19414:25;;19453:20;19471:1;19453:20;:::i;:::-;19448:25;;19492:1;19482:35;;19497:18;;:::i;:::-;19482:35;19539:1;19536;19532:9;19527:14;;19362:185;;;;:::o;19553:332::-;19674:4;19712:2;19701:9;19697:18;19689:26;;19725:71;19793:1;19782:9;19778:17;19769:6;19725:71;:::i;:::-;19806:72;19874:2;19863:9;19859:18;19850:6;19806:72;:::i;:::-;19553:332;;;;;:::o;19891:165::-;20031:17;20027:1;20019:6;20015:14;20008:41;19891:165;:::o;20062:366::-;20204:3;20225:67;20289:2;20284:3;20225:67;:::i;:::-;20218:74;;20301:93;20390:3;20301:93;:::i;:::-;20419:2;20414:3;20410:12;20403:19;;20062:366;;;:::o;20434:419::-;20600:4;20638:2;20627:9;20623:18;20615:26;;20687:9;20681:4;20677:20;20673:1;20662:9;20658:17;20651:47;20715:131;20841:4;20715:131;:::i;:::-;20707:139;;20434:419;;;:::o;20859:179::-;20999:31;20995:1;20987:6;20983:14;20976:55;20859:179;:::o;21044:366::-;21186:3;21207:67;21271:2;21266:3;21207:67;:::i;:::-;21200:74;;21283:93;21372:3;21283:93;:::i;:::-;21401:2;21396:3;21392:12;21385:19;;21044:366;;;:::o;21416:419::-;21582:4;21620:2;21609:9;21605:18;21597:26;;21669:9;21663:4;21659:20;21655:1;21644:9;21640:17;21633:47;21697:131;21823:4;21697:131;:::i;:::-;21689:139;;21416:419;;;:::o;21841:225::-;21981:34;21977:1;21969:6;21965:14;21958:58;22050:8;22045:2;22037:6;22033:15;22026:33;21841:225;:::o;22072:366::-;22214:3;22235:67;22299:2;22294:3;22235:67;:::i;:::-;22228:74;;22311:93;22400:3;22311:93;:::i;:::-;22429:2;22424:3;22420:12;22413:19;;22072:366;;;:::o;22444:419::-;22610:4;22648:2;22637:9;22633:18;22625:26;;22697:9;22691:4;22687:20;22683:1;22672:9;22668:17;22661:47;22725:131;22851:4;22725:131;:::i;:::-;22717:139;;22444:419;;;:::o;22869:85::-;22914:7;22943:5;22932:16;;22869:85;;;:::o;22960:158::-;23018:9;23051:61;23069:42;23078:32;23104:5;23078:32;:::i;:::-;23069:42;:::i;:::-;23051:61;:::i;:::-;23038:74;;22960:158;;;:::o;23124:147::-;23219:45;23258:5;23219:45;:::i;:::-;23214:3;23207:58;23124:147;;:::o;23277:348::-;23406:4;23444:2;23433:9;23429:18;23421:26;;23457:71;23525:1;23514:9;23510:17;23501:6;23457:71;:::i;:::-;23538:80;23614:2;23603:9;23599:18;23590:6;23538:80;:::i;:::-;23277:348;;;;;:::o;23631:332::-;23752:4;23790:2;23779:9;23775:18;23767:26;;23803:71;23871:1;23860:9;23856:17;23847:6;23803:71;:::i;:::-;23884:72;23952:2;23941:9;23937:18;23928:6;23884:72;:::i;:::-;23631:332;;;;;:::o;23969:305::-;24009:3;24028:20;24046:1;24028:20;:::i;:::-;24023:25;;24062:20;24080:1;24062:20;:::i;:::-;24057:25;;24216:1;24148:66;24144:74;24141:1;24138:81;24135:107;;;24222:18;;:::i;:::-;24135:107;24266:1;24263;24259:9;24252:16;;23969:305;;;;:::o;24280:162::-;24420:14;24416:1;24408:6;24404:14;24397:38;24280:162;:::o;24448:366::-;24590:3;24611:67;24675:2;24670:3;24611:67;:::i;:::-;24604:74;;24687:93;24776:3;24687:93;:::i;:::-;24805:2;24800:3;24796:12;24789:19;;24448:366;;;:::o;24820:419::-;24986:4;25024:2;25013:9;25009:18;25001:26;;25073:9;25067:4;25063:20;25059:1;25048:9;25044:17;25037:47;25101:131;25227:4;25101:131;:::i;:::-;25093:139;;24820:419;;;:::o;25245:171::-;25385:23;25381:1;25373:6;25369:14;25362:47;25245:171;:::o;25422:366::-;25564:3;25585:67;25649:2;25644:3;25585:67;:::i;:::-;25578:74;;25661:93;25750:3;25661:93;:::i;:::-;25779:2;25774:3;25770:12;25763:19;;25422:366;;;:::o;25794:419::-;25960:4;25998:2;25987:9;25983:18;25975:26;;26047:9;26041:4;26037:20;26033:1;26022:9;26018:17;26011:47;26075:131;26201:4;26075:131;:::i;:::-;26067:139;;25794:419;;;:::o;26219:168::-;26359:20;26355:1;26347:6;26343:14;26336:44;26219:168;:::o;26393:366::-;26535:3;26556:67;26620:2;26615:3;26556:67;:::i;:::-;26549:74;;26632:93;26721:3;26632:93;:::i;:::-;26750:2;26745:3;26741:12;26734:19;;26393:366;;;:::o;26765:419::-;26931:4;26969:2;26958:9;26954:18;26946:26;;27018:9;27012:4;27008:20;27004:1;26993:9;26989:17;26982:47;27046:131;27172:4;27046:131;:::i;:::-;27038:139;;26765:419;;;:::o;27190:174::-;27330:26;27326:1;27318:6;27314:14;27307:50;27190:174;:::o;27370:366::-;27512:3;27533:67;27597:2;27592:3;27533:67;:::i;:::-;27526:74;;27609:93;27698:3;27609:93;:::i;:::-;27727:2;27722:3;27718:12;27711:19;;27370:366;;;:::o;27742:419::-;27908:4;27946:2;27935:9;27931:18;27923:26;;27995:9;27989:4;27985:20;27981:1;27970:9;27966:17;27959:47;28023:131;28149:4;28023:131;:::i;:::-;28015:139;;27742:419;;;:::o;28167:143::-;28224:5;28255:6;28249:13;28240:22;;28271:33;28298:5;28271:33;:::i;:::-;28167:143;;;;:::o;28316:351::-;28386:6;28435:2;28423:9;28414:7;28410:23;28406:32;28403:119;;;28441:79;;:::i;:::-;28403:119;28561:1;28586:64;28642:7;28633:6;28622:9;28618:22;28586:64;:::i;:::-;28576:74;;28532:128;28316:351;;;;:::o;28673:114::-;28740:6;28774:5;28768:12;28758:22;;28673:114;;;:::o;28793:184::-;28892:11;28926:6;28921:3;28914:19;28966:4;28961:3;28957:14;28942:29;;28793:184;;;;:::o;28983:132::-;29050:4;29073:3;29065:11;;29103:4;29098:3;29094:14;29086:22;;28983:132;;;:::o;29121:108::-;29198:24;29216:5;29198:24;:::i;:::-;29193:3;29186:37;29121:108;;:::o;29235:179::-;29304:10;29325:46;29367:3;29359:6;29325:46;:::i;:::-;29403:4;29398:3;29394:14;29380:28;;29235:179;;;;:::o;29420:113::-;29490:4;29522;29517:3;29513:14;29505:22;;29420:113;;;:::o;29569:732::-;29688:3;29717:54;29765:5;29717:54;:::i;:::-;29787:86;29866:6;29861:3;29787:86;:::i;:::-;29780:93;;29897:56;29947:5;29897:56;:::i;:::-;29976:7;30007:1;29992:284;30017:6;30014:1;30011:13;29992:284;;;30093:6;30087:13;30120:63;30179:3;30164:13;30120:63;:::i;:::-;30113:70;;30206:60;30259:6;30206:60;:::i;:::-;30196:70;;30052:224;30039:1;30036;30032:9;30027:14;;29992:284;;;29996:14;30292:3;30285:10;;29693:608;;;29569:732;;;;:::o;30307:831::-;30570:4;30608:3;30597:9;30593:19;30585:27;;30622:71;30690:1;30679:9;30675:17;30666:6;30622:71;:::i;:::-;30703:80;30779:2;30768:9;30764:18;30755:6;30703:80;:::i;:::-;30830:9;30824:4;30820:20;30815:2;30804:9;30800:18;30793:48;30858:108;30961:4;30952:6;30858:108;:::i;:::-;30850:116;;30976:72;31044:2;31033:9;31029:18;31020:6;30976:72;:::i;:::-;31058:73;31126:3;31115:9;31111:19;31102:6;31058:73;:::i;:::-;30307:831;;;;;;;;:::o;31144:807::-;31393:4;31431:3;31420:9;31416:19;31408:27;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:72;31594:2;31583:9;31579:18;31570:6;31526:72;:::i;:::-;31608:80;31684:2;31673:9;31669:18;31660:6;31608:80;:::i;:::-;31698;31774:2;31763:9;31759:18;31750:6;31698:80;:::i;:::-;31788:73;31856:3;31845:9;31841:19;31832:6;31788:73;:::i;:::-;31871;31939:3;31928:9;31924:19;31915:6;31871:73;:::i;:::-;31144:807;;;;;;;;;:::o;31957:663::-;32045:6;32053;32061;32110:2;32098:9;32089:7;32085:23;32081:32;32078:119;;;32116:79;;:::i;:::-;32078:119;32236:1;32261:64;32317:7;32308:6;32297:9;32293:22;32261:64;:::i;:::-;32251:74;;32207:128;32374:2;32400:64;32456:7;32447:6;32436:9;32432:22;32400:64;:::i;:::-;32390:74;;32345:129;32513:2;32539:64;32595:7;32586:6;32575:9;32571:22;32539:64;:::i;:::-;32529:74;;32484:129;31957:663;;;;;:::o;32626:191::-;32666:4;32686:20;32704:1;32686:20;:::i;:::-;32681:25;;32720:20;32738:1;32720:20;:::i;:::-;32715:25;;32759:1;32756;32753:8;32750:34;;;32764:18;;:::i;:::-;32750:34;32809:1;32806;32802:9;32794:17;;32626:191;;;;:::o

Swarm Source

ipfs://a60bedadd4614f4e2f4a7f1db58966ef69cad93a7d4e90ec76c6f744eefa7606

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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