ETH Price: $1,978.72 (-5.23%)

Contract

0xdfFeeE3AD9d9418d5E34a25A7FF35aD8cD4bdb46
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve201813872024-06-27 6:59:11617 days ago1719471551IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.000176463.74486908
Approve191148402024-01-29 21:23:59767 days ago1706563439IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0007193215.2655541
Change Fee Alloc...169713362023-04-03 22:05:591068 days ago1680559559IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0021700429.52963654
Change Fee Alloc...169713132023-04-03 22:01:231068 days ago1680559283IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.001232834.34863486
Transfer168937782023-03-24 0:24:471079 days ago1679617487IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0029130219.06389971
Approve168936602023-03-24 0:00:591079 days ago1679616059IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0010531622.45314261
Approve168935982023-03-23 23:47:591079 days ago1679615279IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0008191417.47740828
Approve168926612023-03-23 20:37:591079 days ago1679603879IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0008418828.28053526
Approve168926582023-03-23 20:37:231079 days ago1679603843IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0013957229.77922414
Change Total Fee...168626612023-03-19 15:29:591083 days ago1679239799IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0007073420.49928258
Enable Trading168524542023-03-18 5:06:111084 days ago1679115971IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0004377915.26922818
Change Wallet Li...168524392023-03-18 5:03:111084 days ago1679115791IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0004462915.35764437
Change Tx Limit168524342023-03-18 5:02:111084 days ago1679115731IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.000444715.30398762
Change Tx Limit168524282023-03-18 5:00:591084 days ago1679115659IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0004204214.46842934
Change Wallet Li...168524192023-03-18 4:59:111084 days ago1679115551IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0004509515.51789472
Approve168524112023-03-18 4:57:351084 days ago1679115455IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0007417715.73787584
Transfer168523992023-03-18 4:55:111084 days ago1679115311IN
0xdfFeeE3A...8cD4bdb46
0 ETH0.0028106815.13808358

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer220280762025-03-12 3:23:35359 days ago1741749815
0xdfFeeE3A...8cD4bdb46
0.002325 ETH
Deposit220280762025-03-12 3:23:35359 days ago1741749815
0xdfFeeE3A...8cD4bdb46
0.00004843 ETH
Transfer220280762025-03-12 3:23:35359 days ago1741749815
0xdfFeeE3A...8cD4bdb46
0.00242187 ETH
Swap Exact ETH F...220280762025-03-12 3:23:35359 days ago1741749815
0xdfFeeE3A...8cD4bdb46
0.00004843 ETH
Transfer220280762025-03-12 3:23:35359 days ago1741749815
0xdfFeeE3A...8cD4bdb46
0.00484375 ETH
Transfer191148482024-01-29 21:25:35767 days ago1706563535
0xdfFeeE3A...8cD4bdb46
0.00222872 ETH
Deposit191148482024-01-29 21:25:35767 days ago1706563535
0xdfFeeE3A...8cD4bdb46
0.00004643 ETH
Transfer191148482024-01-29 21:25:35767 days ago1706563535
0xdfFeeE3A...8cD4bdb46
0.00232158 ETH
Swap Exact ETH F...191148482024-01-29 21:25:35767 days ago1706563535
0xdfFeeE3A...8cD4bdb46
0.00004643 ETH
Transfer191148482024-01-29 21:25:35767 days ago1706563535
0xdfFeeE3A...8cD4bdb46
0.00464317 ETH
Transfer170017632023-04-08 5:55:591063 days ago1680933359
0xdfFeeE3A...8cD4bdb46
0.00410006 ETH
Deposit170017632023-04-08 5:55:591063 days ago1680933359
0xdfFeeE3A...8cD4bdb46
0.00008541 ETH
Transfer170017632023-04-08 5:55:591063 days ago1680933359
0xdfFeeE3A...8cD4bdb46
0.0042709 ETH
Swap Exact ETH F...170017632023-04-08 5:55:591063 days ago1680933359
0xdfFeeE3A...8cD4bdb46
0.00008541 ETH
Transfer170017632023-04-08 5:55:591063 days ago1680933359
0xdfFeeE3A...8cD4bdb46
0.0085418 ETH
Transfer169084192023-03-26 1:45:471076 days ago1679795147
0xdfFeeE3A...8cD4bdb46
0.00330961 ETH
Deposit169084192023-03-26 1:45:471076 days ago1679795147
0xdfFeeE3A...8cD4bdb46
0.0008274 ETH
Transfer169084192023-03-26 1:45:471076 days ago1679795147
0xdfFeeE3A...8cD4bdb46
0.00330961 ETH
Swap Exact ETH F...169084192023-03-26 1:45:471076 days ago1679795147
0xdfFeeE3A...8cD4bdb46
0.0008274 ETH
Transfer169084192023-03-26 1:45:471076 days ago1679795147
0xdfFeeE3A...8cD4bdb46
0.00827402 ETH
Transfer168940792023-03-24 1:25:351079 days ago1679621135
0xdfFeeE3A...8cD4bdb46
0.00346373 ETH
Deposit168940792023-03-24 1:25:351079 days ago1679621135
0xdfFeeE3A...8cD4bdb46
0.00086593 ETH
Transfer168940792023-03-24 1:25:351079 days ago1679621135
0xdfFeeE3A...8cD4bdb46
0.00346373 ETH
Swap Exact ETH F...168940792023-03-24 1:25:351079 days ago1679621135
0xdfFeeE3A...8cD4bdb46
0.00086593 ETH
Transfer168940792023-03-24 1:25:351079 days ago1679621135
0xdfFeeE3A...8cD4bdb46
0.00865933 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OdogeBurner

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2023-03-18
*/

// SPDX-License-Identifier: Unlicensed

/**
Buy and Burn oDoge, Rewards oDoge claim from the contract itself.
*/

pragma solidity 0.8.13;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }
}

/**
 * ERC20 standard interface.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

    function getOwner() external view returns (address);

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

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

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

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

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

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

abstract contract Auth {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

    /**
     * Function modifier to require caller to be contract deployer
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!Owner");
        _;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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 addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

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

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;

    function withdraw(address shareholder) external;

    function removeStuckDividends() external;
}

contract OdogeDividends is IOdogeDividends {
    using SafeMath for uint256;
    address _token;

    address public Odoge;

    IDEXRouter router;

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

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) 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 = 30 minutes;
    uint256 public minDistribution = 0 * (10**9);

    uint256 public currentIndex;
    bool initialized;

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

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

    constructor() {
        _token = msg.sender;
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        Odoge = 0x796a4503b444A71b331c9556bEF0815237ddEaBC;
    }

    receive() external payable {
        deposit();
    }

    function removeStuckDividends() external onlyToken {
        uint256 balance = IERC20(Odoge).balanceOf(address(this));

        IERC20(Odoge).transfer(
            address(0x0C6AC3FCEA667fD6C62483cE1DBbce6f6ce0fB1f),
            balance
        );
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    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() public payable override {
        uint256 balanceBefore = IERC20(Odoge).balanceOf(address(this));

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

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

        uint256 amount = IERC20(Odoge).balanceOf(address(this)).sub(
            balanceBefore
        );
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

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

        if (shareholderCount == 0) {
            return;
        }

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

        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) public 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);
            IERC20(Odoge).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function withdraw(address shareholder) external override onlyToken {
        distributeDividend(shareholder);
    }

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

contract OdogeBurner is IERC20, Auth {
    using SafeMath for uint256;

    address public Odoge = 0x796a4503b444A71b331c9556bEF0815237ddEaBC; // Odoge

    string private constant _name = "Odoge Buy and Burn";
    string private constant _symbol = "oNMC";
    uint8 private constant _decimals = 18;

    uint256 private _totalSupply = 210000000 * (10**_decimals);

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private cooldown;

    address private WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    uint256 public buyFee = 20;
    uint256 public sellFee = 30;

    uint256 public toReflections = 10;
    uint256 public toBurn = 10;
    uint256 public toTreasury = 40;
    uint256 public toMarketing = 40;

    uint256 public allocationSum = 100;

    IDEXRouter public router;
    address public pair;
    address public factory;
    address private tokenOwner;

    address public devWallet;
    address public treasuryWallet;
    address public marketingWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingOpen = false;

    OdogeDividends public OdogeDividend;
    uint256 public OdogeDividendsGas = 0;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    uint256 public maxTx = _totalSupply.div(250);
    uint256 public maxWallet = _totalSupply.div(250);
    uint256 public swapThreshold = _totalSupply.div(1000);

    constructor(address _owner) Auth(_owner) {
        devWallet = payable(_owner);
        marketingWallet = payable(_owner);
        treasuryWallet = payable(_owner);

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        WETH = router.WETH();

        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        OdogeDividend = new OdogeDividends();

        isFeeExempt[_owner] = true;
        isFeeExempt[devWallet] = true;

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

        isTxLimitExempt[_owner] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[devWallet] = true;

        _balances[_owner] = _totalSupply;

        emit Transfer(address(0), _owner, _totalSupply);
    }

    receive() external payable {}

    function satoshi() external onlyOwner {
        require(!tradingOpen, "Behave.");

        maxTx = 1_950_000 * (10**_decimals);
        maxWallet = 4_200_000 * (10**_decimals);
    }

    //once enabled, cannot be reversed
    function enableTrading() external onlyOwner {
        tradingOpen = true;
    }

    function changeTotalFees(uint256 newBuyFee, uint256 newSellFee)
        external
        onlyOwner
    {
        buyFee = newBuyFee;
        sellFee = newSellFee;

        require(buyFee <= 20, "too high");
        require(sellFee <= 20, "too high");
    }

    function changeFeeAllocation(
        uint256 newTreasuryFee,
        uint256 newMarketingFee,
        uint256 newBurnFee,
        uint256 newReflectionsFee
    ) external onlyOwner {
        toReflections = newReflectionsFee;
        toMarketing = newMarketingFee;
        toTreasury = newTreasuryFee;
        toBurn = newBurnFee;
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= maxTx, "Can not lower max tx");
        maxTx = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= maxWallet, "Can not lower max wallet");
        maxWallet = newLimit;
    }

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

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

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setMarketingWallet(address payable newMarketingWallet) external onlyOwner {
        marketingWallet = payable(newMarketingWallet);
    }

    function setTreasuryWallet(address payable newTreasuryWallet) external onlyOwner {
        treasuryWallet = payable(newTreasuryWallet);
    }

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        tokenOwner = newOwnerWallet;
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external onlyOwner {
        OdogeDividend.setDistributionCriteria(newMinPeriod, newMinDistribution);
    }

    function _setIsDividendExempt(address holder, bool exempt) internal {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            OdogeDividend.setShare(holder, 0);
        } else {
            OdogeDividend.setShare(holder, _balances[holder]);
        }
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        _setIsDividendExempt(holder, exempt);
    }

    function changeOdogeGas(uint256 newGas) external onlyOwner {
        OdogeDividendsGas = newGas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function totalSupply() external view 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 getOwner() external view override returns (address) {
        return owner;
    }

    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, type(uint256).max);
    }

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

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

        return _transfer(sender, recipient, amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (sender != owner && recipient != owner)
            require(tradingOpen, "hold ur horses big guy."); //transfers disabled before tradingActive

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

        require(amount <= maxTx || isTxLimitExempt[sender], "tx");

        if (!isTxLimitExempt[recipient]) {
            require(_balances[recipient].add(amount) <= maxWallet, "wallet");
        }

        if (
            msg.sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

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

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try OdogeDividend.setShare(sender, _balances[sender]) {} catch {}
        }

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

        emit Transfer(sender, recipient, finalAmount);
        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,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = pair == recipient ? sellFee : buyFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        approve(address(this), tokenAmount);

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

    function burnOdoge(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(Odoge);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, DEAD, block.timestamp);
    }

    function swapBack() internal lockTheSwap {
        swapTokensForEth(_balances[address(this)]);

        uint256 totalEthBalance = address(this).balance;

        uint256 ethForBurn = totalEthBalance.mul(toBurn).div(100);
        burnOdoge(ethForBurn);

        uint256 ethForMarketing = totalEthBalance.mul(toMarketing).div(100);
        payable(marketingWallet).transfer(ethForMarketing);

        uint256 ethForReflections = totalEthBalance.mul(toReflections).div(100);
        try OdogeDividend.deposit{value: ethForReflections}() {} catch {}

        payable(treasuryWallet).transfer(address(this).balance);
    }

    function manualSwapBack() external onlyOwner {
        swapBack();
    }

    function clearStuckEth() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            payable(devWallet).transfer(contractETHBalance);
        }
    }

    function manualProcessGas(uint256 manualGas) external onlyOwner {
        OdogeDividend.process(manualGas);
    }

    function checkPendingReflections(address shareholder)
        external
        view
        returns (uint256)
    {
        return OdogeDividend.getUnpaidEarnings(shareholder);
    }

    function withdraw() external {
        OdogeDividend.withdraw(msg.sender);
    }

    function removeStuckDividends() external onlyOwner {
        OdogeDividend.removeStuckDividends();
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"Odoge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OdogeDividend","outputs":[{"internalType":"contract OdogeDividends","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OdogeDividendsGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocationSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBurnFee","type":"uint256"},{"internalType":"uint256","name":"newReflectionsFee","type":"uint256"}],"name":"changeFeeAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGas","type":"uint256"}],"name":"changeOdogeGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"changeTotalFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"checkPendingReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"manualGas","type":"uint256"}],"name":"manualProcessGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","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 payable","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"toBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273796a4503b444a71b331c9556bef0815237ddeabc600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000069919062000dc6565b630c8458806200007a919062000e17565b60025561dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014600c55601e600d55600a600e55600a600f556028601055602860115560646012556001601960156101000a81548160ff0219169083151502179055506000601960166101000a81548160ff0219169083151502179055506000601b556200017d60fa60025462000b6460201b620023521790919060201c565b601c556200019d60fa60025462000b6460201b620023521790919060201c565b601d55620001be6103e860025462000b6460201b620023521790919060201c565b601e55348015620001ce57600080fd5b5060405162007de438038062007de48339818101604052810190620001f4919062000ee2565b80806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e2919062000ee2565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000ee2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200051492919062000f25565b6020604051808303816000875af115801562000534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055a919062000ee2565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040516200066b9062000c1e565b604051809103906000f08015801562000688573d6000803e3d6000fd5b50601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600254600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000b55919062000f63565b60405180910390a350620010af565b600062000bae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000bb660201b60201c565b905092915050565b6000808311829062000c00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf7919062001024565b60405180910390fd5b506000838562000c11919062001077565b9050809150509392505050565b61221e8062005bc683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cba5780860481111562000c925762000c9162000c2c565b5b600185161562000ca25780820291505b808102905062000cb28562000c5b565b945062000c72565b94509492505050565b60008262000cd5576001905062000da8565b8162000ce5576000905062000da8565b816001811462000cfe576002811462000d095762000d3f565b600191505062000da8565b60ff84111562000d1e5762000d1d62000c2c565b5b8360020a91508482111562000d385762000d3762000c2c565b5b5062000da8565b5060208310610133831016604e8410600b841016171562000d795782820a90508381111562000d735762000d7262000c2c565b5b62000da8565b62000d88848484600162000c68565b9250905081840481111562000da25762000da162000c2c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dd38262000daf565b915062000de08362000db9565b925062000e0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cc3565b905092915050565b600062000e248262000daf565b915062000e318362000daf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e6d5762000e6c62000c2c565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eaa8262000e7d565b9050919050565b62000ebc8162000e9d565b811462000ec857600080fd5b50565b60008151905062000edc8162000eb1565b92915050565b60006020828403121562000efb5762000efa62000e78565b5b600062000f0b8482850162000ecb565b91505092915050565b62000f1f8162000e9d565b82525050565b600060408201905062000f3c600083018562000f14565b62000f4b602083018462000f14565b9392505050565b62000f5d8162000daf565b82525050565b600060208201905062000f7a600083018462000f52565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000fbc57808201518184015260208101905062000f9f565b8381111562000fcc576000848401525b50505050565b6000601f19601f8301169050919050565b600062000ff08262000f80565b62000ffc818562000f8b565b93506200100e81856020860162000f9c565b620010198162000fd2565b840191505092915050565b6000602082019050818103600083015262001040818462000fe3565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010848262000daf565b9150620010918362000daf565b925082620010a457620010a362001048565b5b828204905092915050565b614b0780620010bf6000396000f3fe60806040526004361061039b5760003560e01c806377359aa7116101dc578063b19efa4411610102578063de54018e116100a0578063f887ea401161006f578063f887ea4014610d3f578063f8b45b0514610d6a578063fabe628314610d95578063ffb54a9914610dbe576103a2565b8063de54018e14610cab578063dfbfbc6b14610cd6578063f2fde38b14610ced578063f708a64f14610d16576103a2565b8063caa5581b116100dc578063caa5581b14610c03578063ce4ef10e14610c2e578063d920334e14610c45578063dd62ed3e14610c6e576103a2565b8063b19efa4414610b86578063bb542ef014610baf578063c45a015514610bd8576103a2565b80638b42507f1161017a578063a3a2e89e11610149578063a3a2e89e14610acc578063a8602fea14610af5578063a8aa1b3114610b1e578063a9059cbb14610b49576103a2565b80638b42507f14610a0e5780638e775c7214610a4b5780638ea5220f14610a7657806395d89b4114610aa1576103a2565b806381934031116101b6578063819340311461098c57806389291a8f146109b5578063893d20e8146109cc5780638a8c523c146109f7576103a2565b806377359aa7146108fb57806379900169146109385780637db1342c14610963576103a2565b80633dab5269116102c15780634f12a85e1161025f57806370a082311161022e57806370a082311461083d5780637437681e1461087a57806375df1305146108a557806375f0a874146108d0576103a2565b80634f12a85e14610795578063571ac8b0146107c05780635d098b38146107fd57806366eb378514610826576103a2565b8063454343771161029b57806345434377146106e95780634626402b14610714578063470624021461073f5780634a74bb021461076a576103a2565b80633dab5269146106465780633f4218e01461066f5780634355855a146106ac576103a2565b8063246ea64e116103395780632f54bf6e116103085780632f54bf6e1461059e57806330ca34ee146105db578063313ce567146106045780633ccfd60b1461062f576103a2565b8063246ea64e146104f45780632b112e491461051f5780632b14ca561461054a5780632d48e89614610575576103a2565b80630b730923116103755780630b7309231461043a57806318160ddd146104635780631f53ac021461048e57806323b872dd146104b7576103a2565b80630445b667146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610de9565b6040516103c99190613a9b565b60405180910390f35b3480156103de57600080fd5b506103e7610def565b6040516103f49190613b4f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190613c00565b610e2c565b6040516104319190613c5b565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613c76565b610f1e565b005b34801561046f57600080fd5b50610478610f88565b6040516104859190613a9b565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613d1b565b610f92565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613d48565b61101e565b6040516104eb9190613c5b565b60405180910390f35b34801561050057600080fd5b5061050961121e565b6040516105169190613a9b565b60405180910390f35b34801561052b57600080fd5b50610534611224565b6040516105419190613a9b565b60405180910390f35b34801561055657600080fd5b5061055f6112a6565b60405161056c9190613a9b565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613d9b565b6112ac565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190613ddb565b611387565b6040516105d29190613c5b565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613d9b565b6113e0565b005b34801561061057600080fd5b506106196114c6565b6040516106269190613e24565b60405180910390f35b34801561063b57600080fd5b506106446114cf565b005b34801561065257600080fd5b5061066d60048036038101906106689190613e6b565b61155e565b005b34801561067b57600080fd5b5061069660048036038101906106919190613ddb565b6115cb565b6040516106a39190613c5b565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190613ddb565b6115eb565b6040516106e09190613c5b565b60405180910390f35b3480156106f557600080fd5b506106fe61160b565b60405161070b9190613a9b565b60405180910390f35b34801561072057600080fd5b50610729611611565b6040516107369190613eba565b60405180910390f35b34801561074b57600080fd5b50610754611637565b6040516107619190613a9b565b60405180910390f35b34801561077657600080fd5b5061077f61163d565b60405161078c9190613c5b565b60405180910390f35b3480156107a157600080fd5b506107aa611650565b6040516107b79190613eba565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613ddb565b611676565b6040516107f49190613c5b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613d1b565b6116a9565b005b34801561083257600080fd5b5061083b611735565b005b34801561084957600080fd5b50610864600480360381019061085f9190613ddb565b611787565b6040516108719190613a9b565b60405180910390f35b34801561088657600080fd5b5061088f6117d0565b60405161089c9190613a9b565b60405180910390f35b3480156108b157600080fd5b506108ba6117d6565b6040516108c79190613a9b565b60405180910390f35b3480156108dc57600080fd5b506108e56117dc565b6040516108f29190613eba565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613ddb565b611802565b60405161092f9190613a9b565b60405180910390f35b34801561094457600080fd5b5061094d6118a7565b60405161095a9190613a9b565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190613ed5565b6118ad565b005b34801561099857600080fd5b506109b360048036038101906109ae9190613ed5565b611944565b005b3480156109c157600080fd5b506109ca611a1c565b005b3480156109d857600080fd5b506109e1611adf565b6040516109ee9190613eba565b60405180910390f35b348015610a0357600080fd5b50610a0c611b08565b005b348015610a1a57600080fd5b50610a356004803603810190610a309190613ddb565b611b6d565b604051610a429190613c5b565b60405180910390f35b348015610a5757600080fd5b50610a60611b8d565b604051610a6d9190613f61565b60405180910390f35b348015610a8257600080fd5b50610a8b611bb3565b604051610a989190613eba565b60405180910390f35b348015610aad57600080fd5b50610ab6611bd9565b604051610ac39190613b4f565b60405180910390f35b348015610ad857600080fd5b50610af36004803603810190610aee9190613f7c565b611c16565b005b348015610b0157600080fd5b50610b1c6004803603810190610b179190613d1b565b611cb9565b005b348015610b2a57600080fd5b50610b33611d45565b604051610b409190613eba565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b9190613c00565b611d6b565b604051610b7d9190613c5b565b60405180910390f35b348015610b9257600080fd5b50610bad6004803603810190610ba89190613ed5565b611d80565b005b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613d1b565b611dd2565b005b348015610be457600080fd5b50610bed611e5e565b604051610bfa9190613eba565b60405180910390f35b348015610c0f57600080fd5b50610c18611e84565b604051610c259190613a9b565b60405180910390f35b348015610c3a57600080fd5b50610c43611e8a565b005b348015610c5157600080fd5b50610c6c6004803603810190610c679190613ed5565b611f68565b005b348015610c7a57600080fd5b50610c956004803603810190610c909190613fbc565b611fff565b604051610ca29190613a9b565b60405180910390f35b348015610cb757600080fd5b50610cc0612086565b604051610ccd9190613a9b565b60405180910390f35b348015610ce257600080fd5b50610ceb61208c565b005b348015610cf957600080fd5b50610d146004803603810190610d0f9190613d1b565b612158565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190613f7c565b61221a565b005b348015610d4b57600080fd5b50610d54612270565b604051610d61919061402f565b60405180910390f35b348015610d7657600080fd5b50610d7f612296565b604051610d8c9190613a9b565b60405180910390f35b348015610da157600080fd5b50610dbc6004803603810190610db79190613f7c565b61229c565b005b348015610dca57600080fd5b50610dd361233f565b604051610de09190613c5b565b60405180910390f35b601e5481565b60606040518060400160405280601281526020017f4f646f67652042757920616e64204275726e0000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f0c9190613a9b565b60405180910390a36001905092915050565b610f2733611387565b610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90614096565b60405180910390fd5b80600e81905550826011819055508360108190555081600f8190555050505050565b6000600254905090565b610f9b33611387565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614096565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461120a57611189826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611215848484612400565b90509392505050565b600f5481565b60006112a1611254600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611787565b611293611282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611787565b600254612c4b90919063ffffffff16565b612c4b90919063ffffffff16565b905090565b600d5481565b6112b533611387565b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016113519291906140b6565b600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6113e933611387565b611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614096565b60405180910390fd5b81600c8190555080600d819055506014600c54111561147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061412b565b60405180910390fd5b6014600d5411156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b99061412b565b60405180910390fd5b5050565b60006012905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9336040518263ffffffff1660e01b815260040161152a9190613eba565b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b50505050565b61156733611387565b6115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90614096565b60405180910390fd5b81601960156101000a81548160ff02191690831515021790555080601e819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601960159054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116a2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e2c565b9050919050565b6116b233611387565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614096565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61173e33611387565b61177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490614096565b60405180910390fd5b611785612c95565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c5481565b60115481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b815260040161185f9190613eba565b602060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a09190614160565b9050919050565b60105481565b6118b633611387565b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614096565b60405180910390fd5b601d5481101561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906141d9565b60405180910390fd5b80601d8190555050565b61194d33611387565b61198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b81526004016119e79190613a9b565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b5050505050565b611a2533611387565b611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614096565b60405180910390fd5b60004790506000811115611adc57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ada573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b1133611387565b611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790614096565b60405180910390fd5b6001601960166101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f6f4e4d4300000000000000000000000000000000000000000000000000000000815250905090565b611c1f33611387565b611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590614096565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cc233611387565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890614096565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d78338484612400565b905092915050565b611d8933611387565b611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf90614096565b60405180910390fd5b80601b8190555050565b611ddb33611387565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614096565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611e9333611387565b611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614096565b60405180910390fd5b601960169054906101000a900460ff1615611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614245565b60405180910390fd5b6012600a611f3091906143c7565b621dc130611f3e9190614412565b601c819055506012600a611f5291906143c7565b62401640611f609190614412565b601d81905550565b611f7133611387565b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614096565b60405180910390fd5b601c54811015611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906144b8565b60405180910390fd5b80601c8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b61209533611387565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dfbfbc6b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b50505050565b61216133611387565b6121a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219790614096565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161220f91906144f9565b60405180910390a150565b61222333611387565b612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614096565b60405180910390fd5b61226c8282612efa565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6122a533611387565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614096565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960169054906101000a900460ff1681565b600061239483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613152565b905092915050565b60008383111582906123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9190613b4f565b60405180910390fd5b50600083856123f39190614514565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124ab575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561250057601960169054906101000a900460ff166124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614594565b60405180910390fd5b5b601960149054906101000a900460ff1615612527576125208484846131b5565b9050612c44565b601c54821115806125815750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614600565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126a857601d5461266683600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b11156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e9061466c565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127135750601960149054906101000a900460ff16155b801561272b5750601960159054906101000a900460ff165b80156127785750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561278657612785612c95565b5b61280f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128f85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612902578261290e565b61290d8585856133e6565b5b905061296281600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a9292919061468c565b600060405180830381600087803b158015612aac57600080fd5b505af1925050508015612abd575060015b505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd957601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bac92919061468c565b600060405180830381600087803b158015612bc657600080fd5b505af1925050508015612bd7575060015b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c369190613a9b565b60405180910390a360019150505b9392505050565b6000612c8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239c565b905092915050565b6001601960146101000a81548160ff021916908315150217905550612cf8600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358e565b60004790506000612d276064612d19600f54856137af90919063ffffffff16565b61235290919063ffffffff16565b9050612d3281613829565b6000612d5c6064612d4e601154866137af90919063ffffffff16565b61235290919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612dc6573d6000803e3d6000fd5b506000612df16064612de3600e54876137af90919063ffffffff16565b61235290919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5d57600080fd5b505af193505050508015612e6f575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed8573d6000803e3d6000fd5b50505050506000601960146101000a81548160ff021916908315150217905550565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f845750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f8d57600080fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561307f57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016130489291906146f0565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b5050505061314e565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161311b92919061468c565b600060405180830381600087803b15801561313557600080fd5b505af1158015613149573d6000803e3d6000fd5b505050505b5050565b60008083118290613199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131909190613b4f565b60405180910390fd5b50600083856131a89190614748565b9050809150509392505050565b6000613240826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132d582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133759190613a9b565b60405180910390a3600190509392505050565b60008082846133979190614779565b9050838110156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d39061481b565b60405180910390fd5b8091505092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344657600c5461344a565b600d545b90506000613474606461346684876137af90919063ffffffff16565b61235290919063ffffffff16565b90506134c881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135689190613a9b565b60405180910390a36135838185612c4b90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff8111156135ab576135aa61483b565b5b6040519080825280602002602001820160405280156135d95781602001602082028036833780820191505090505b50905030816000815181106135f1576135f061486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc91906148ae565b816001815181106136d0576136cf61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137143083610e2c565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613779959493929190614999565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050505050565b60008083036137c15760009050613823565b600082846137cf9190614412565b90508284826137de9190614748565b1461381e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381590614a65565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156138465761384561483b565b5b6040519080825280602002602001820160405280156138745781602001602082028036833780820191505090505b509050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390891906148ae565b8160008151811061391c5761391b61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d5761398c61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613a4c9493929190614a85565b6000604051808303818588803b158015613a6557600080fd5b505af1158015613a79573d6000803e3d6000fd5b50505050505050565b6000819050919050565b613a9581613a82565b82525050565b6000602082019050613ab06000830184613a8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613af0578082015181840152602081019050613ad5565b83811115613aff576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b2182613ab6565b613b2b8185613ac1565b9350613b3b818560208601613ad2565b613b4481613b05565b840191505092915050565b60006020820190508181036000830152613b698184613b16565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ba182613b76565b9050919050565b613bb181613b96565b8114613bbc57600080fd5b50565b600081359050613bce81613ba8565b92915050565b613bdd81613a82565b8114613be857600080fd5b50565b600081359050613bfa81613bd4565b92915050565b60008060408385031215613c1757613c16613b71565b5b6000613c2585828601613bbf565b9250506020613c3685828601613beb565b9150509250929050565b60008115159050919050565b613c5581613c40565b82525050565b6000602082019050613c706000830184613c4c565b92915050565b60008060008060808587031215613c9057613c8f613b71565b5b6000613c9e87828801613beb565b9450506020613caf87828801613beb565b9350506040613cc087828801613beb565b9250506060613cd187828801613beb565b91505092959194509250565b6000613ce882613b76565b9050919050565b613cf881613cdd565b8114613d0357600080fd5b50565b600081359050613d1581613cef565b92915050565b600060208284031215613d3157613d30613b71565b5b6000613d3f84828501613d06565b91505092915050565b600080600060608486031215613d6157613d60613b71565b5b6000613d6f86828701613bbf565b9350506020613d8086828701613bbf565b9250506040613d9186828701613beb565b9150509250925092565b60008060408385031215613db257613db1613b71565b5b6000613dc085828601613beb565b9250506020613dd185828601613beb565b9150509250929050565b600060208284031215613df157613df0613b71565b5b6000613dff84828501613bbf565b91505092915050565b600060ff82169050919050565b613e1e81613e08565b82525050565b6000602082019050613e396000830184613e15565b92915050565b613e4881613c40565b8114613e5357600080fd5b50565b600081359050613e6581613e3f565b92915050565b60008060408385031215613e8257613e81613b71565b5b6000613e9085828601613e56565b9250506020613ea185828601613beb565b9150509250929050565b613eb481613b96565b82525050565b6000602082019050613ecf6000830184613eab565b92915050565b600060208284031215613eeb57613eea613b71565b5b6000613ef984828501613beb565b91505092915050565b6000819050919050565b6000613f27613f22613f1d84613b76565b613f02565b613b76565b9050919050565b6000613f3982613f0c565b9050919050565b6000613f4b82613f2e565b9050919050565b613f5b81613f40565b82525050565b6000602082019050613f766000830184613f52565b92915050565b60008060408385031215613f9357613f92613b71565b5b6000613fa185828601613bbf565b9250506020613fb285828601613e56565b9150509250929050565b60008060408385031215613fd357613fd2613b71565b5b6000613fe185828601613bbf565b9250506020613ff285828601613bbf565b9150509250929050565b600061400782613f0c565b9050919050565b600061401982613ffc565b9050919050565b6140298161400e565b82525050565b60006020820190506140446000830184614020565b92915050565b7f214f776e65720000000000000000000000000000000000000000000000000000600082015250565b6000614080600683613ac1565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b60006040820190506140cb6000830185613a8c565b6140d86020830184613a8c565b9392505050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000614115600883613ac1565b9150614120826140df565b602082019050919050565b6000602082019050818103600083015261414481614108565b9050919050565b60008151905061415a81613bd4565b92915050565b60006020828403121561417657614175613b71565b5b60006141848482850161414b565b91505092915050565b7f43616e206e6f74206c6f776572206d61782077616c6c65740000000000000000600082015250565b60006141c3601883613ac1565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4265686176652e00000000000000000000000000000000000000000000000000600082015250565b600061422f600783613ac1565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156142eb578086048111156142c7576142c6614265565b5b60018516156142d65780820291505b80810290506142e485614294565b94506142ab565b94509492505050565b60008261430457600190506143c0565b8161431257600090506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343614265565b5b8360020a91508482111561435b5761435a614265565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390614265565b5b6143c0565b6143a384848460016142a1565b925090508184048111156143ba576143b9614265565b5b81810290505b9392505050565b60006143d282613a82565b91506143dd83613e08565b925061440a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f4565b905092915050565b600061441d82613a82565b915061442883613a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446157614460614265565b5b828202905092915050565b7f43616e206e6f74206c6f776572206d6178207478000000000000000000000000600082015250565b60006144a2601483613ac1565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b60006144e382613ffc565b9050919050565b6144f3816144d8565b82525050565b600060208201905061450e60008301846144ea565b92915050565b600061451f82613a82565b915061452a83613a82565b92508282101561453d5761453c614265565b5b828203905092915050565b7f686f6c6420757220686f7273657320626967206775792e000000000000000000600082015250565b600061457e601783613ac1565b915061458982614548565b602082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006145ea600283613ac1565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000614656600683613ac1565b915061466182614620565b602082019050919050565b6000602082019050818103600083015261468581614649565b9050919050565b60006040820190506146a16000830185613eab565b6146ae6020830184613a8c565b9392505050565b6000819050919050565b60006146da6146d56146d0846146b5565b613f02565b613a82565b9050919050565b6146ea816146bf565b82525050565b60006040820190506147056000830185613eab565b61471260208301846146e1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061475382613a82565b915061475e83613a82565b92508261476e5761476d614719565b5b828204905092915050565b600061478482613a82565b915061478f83613a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c4576147c3614265565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614805601b83613ac1565b9150614810826147cf565b602082019050919050565b60006020820190508181036000830152614834816147f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148a881613ba8565b92915050565b6000602082840312156148c4576148c3613b71565b5b60006148d284828501614899565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491081613b96565b82525050565b60006149228383614907565b60208301905092915050565b6000602082019050919050565b6000614946826148db565b61495081856148e6565b935061495b836148f7565b8060005b8381101561498c5781516149738882614916565b975061497e8361492e565b92505060018101905061495f565b5085935050505092915050565b600060a0820190506149ae6000830188613a8c565b6149bb60208301876146e1565b81810360408301526149cd818661493b565b90506149dc6060830185613eab565b6149e96080830184613a8c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602183613ac1565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b6000608082019050614a9a60008301876146e1565b8181036020830152614aac818661493b565b9050614abb6040830185613eab565b614ac86060830184613a8c565b9594505050505056fea2646970667358221220d3f5c33e4007110b21b79384f1690a0c77c0833fcae5d404b19d2df1bf936f6064736f6c634300080d003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c556000600d5534801561002e57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073796a4503b444a71b331c9556bef0815237ddeabc600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120f6806101286000396000f3fe60806040526004361061010d5760003560e01c80638c21cd5211610095578063dfbfbc6b11610064578063dfbfbc6b14610361578063e2d2e21914610378578063efca2eed146103a3578063ffb2c479146103ce578063ffd49c84146103f75761011c565b80638c21cd52146102b0578063997664d7146102ed578063ce7c2ac214610318578063d0e30db0146103575761011c565b80632d48e896116100dc5780632d48e896146101dd5780633a98ef39146102065780634f12a85e146102315780634fab0ae81461025c57806351cff8d9146102875761011c565b806311ce023d1461012157806314b6ca961461014c57806326987b601461017557806328fd3198146101a05761011c565b3661011c5761011a610422565b005b600080fd5b34801561012d57600080fd5b5061013661080a565b604051610143919061184f565b60405180910390f35b34801561015857600080fd5b50610173600480360381019061016e91906118f9565b610810565b005b34801561018157600080fd5b5061018a610acf565b604051610197919061184f565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c29190611939565b610ad5565b6040516101d4919061184f565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611966565b610bee565b005b34801561021257600080fd5b5061021b610c58565b604051610228919061184f565b60405180910390f35b34801561023d57600080fd5b50610246610c5e565b60405161025391906119b5565b60405180910390f35b34801561026857600080fd5b50610271610c84565b60405161027e919061184f565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190611939565b610c8a565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190611939565b610cee565b6040516102e491906119eb565b60405180910390f35b3480156102f957600080fd5b50610302610d5b565b60405161030f919061184f565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190611939565b610d61565b60405161034e93929190611a06565b60405180910390f35b61035f610422565b005b34801561036d57600080fd5b50610376610d8b565b005b34801561038457600080fd5b5061038d610f3b565b60405161039a919061184f565b60405180910390f35b3480156103af57600080fd5b506103b8610f41565b6040516103c5919061184f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190611a3d565b610f47565b005b34801561040357600080fd5b5061040c611082565b604051610419919061184f565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161047f91906119b5565b602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c09190611a7f565b90506000600267ffffffffffffffff8111156104df576104de611aac565b5b60405190808252806020026020018201604052801561050d5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190611af0565b816000815181106105b5576105b4611b1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061062657610625611b1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b81526004016106c39493929190611c4f565b6000604051808303818588803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b505050505060006107a583600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161075691906119b5565b602060405180830381865afa158015610773573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107979190611a7f565b61108890919063ffffffff16565b90506107bc816008546110d290919063ffffffff16565b6008819055506107ff6107ee6007546107e084600b5461113090919063ffffffff16565b6111aa90919063ffffffff16565b600a546110d290919063ffffffff16565b600a81905550505050565b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086857600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156108bd576108bc826111f4565b5b60008111801561090f57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156109225761091d82611487565b610984565b60008114801561097457506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156109835761098282611536565b5b5b6109ed816109df600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461108890919063ffffffff16565b6110d290919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610a85600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600e5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610b295760009050610be9565b6000610b76600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610bd157600092505050610be9565b610be4818361108890919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c4657600080fd5b81600c8190555080600d819055505050565b60075481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce257600080fd5b610ceb816111f4565b50565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d3e9190611cca565b108015610d545750600d54610d5283610ad5565b115b9050919050565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610de357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4091906119b5565b602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611a7f565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb730c6ac3fcea667fd6c62483ce1dbbce6f6ce0fb1f836040518363ffffffff1660e01b8152600401610ef4929190611d20565b6020604051808303816000875af1158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190611d75565b5050565b600a5481565b60095481565b6000600380549050905060008103610f5f575061107f565b60008060005a90505b8482108015610f7657508383105b1561107a5783600e5410610f8d576000600e819055505b610fd66003600e5481548110610fa657610fa5611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cee565b15611025576110246003600e5481548110610ff457610ff3611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111f4565b5b61104a61103b5a8361108890919063ffffffff16565b836110d290919063ffffffff16565b91505a9050600e600081548092919061106290611da2565b9190505550828061107290611da2565b935050610f68565b505050505b50565b600c5481565b60006110ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061176f565b905092915050565b60008082846110e19190611cca565b905083811015611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90611e47565b60405180910390fd5b8091505092915050565b600080830361114257600090506111a4565b600082846111509190611e67565b905082848261115f9190611ef0565b1461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690611f93565b60405180910390fd5b809150505b92915050565b60006111ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117d3565b905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154031561148457600061124a82610ad5565b905060008111156114825761126a816009546110d290919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112cd929190611d20565b6020604051808303816000875af11580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190611d75565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113aa81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546110d290919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061143b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6003600160038054905061154a9190611fb3565b8154811061155b5761155a611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106115d9576115d8611b1d565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506116799190611fb3565b8154811061168a57611689611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061170557611704611fe7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000611768600b5461175a600a548561113090919063ffffffff16565b6111aa90919063ffffffff16565b9050919050565b60008383111582906117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae919061209e565b60405180910390fd5b50600083856117c69190611fb3565b9050809150509392505050565b6000808311829061181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811919061209e565b60405180910390fd5b50600083856118299190611ef0565b9050809150509392505050565b6000819050919050565b61184981611836565b82525050565b60006020820190506118646000830184611840565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061189a8261186f565b9050919050565b6118aa8161188f565b81146118b557600080fd5b50565b6000813590506118c7816118a1565b92915050565b6118d681611836565b81146118e157600080fd5b50565b6000813590506118f3816118cd565b92915050565b600080604083850312156119105761190f61186a565b5b600061191e858286016118b8565b925050602061192f858286016118e4565b9150509250929050565b60006020828403121561194f5761194e61186a565b5b600061195d848285016118b8565b91505092915050565b6000806040838503121561197d5761197c61186a565b5b600061198b858286016118e4565b925050602061199c858286016118e4565b9150509250929050565b6119af8161188f565b82525050565b60006020820190506119ca60008301846119a6565b92915050565b60008115159050919050565b6119e5816119d0565b82525050565b6000602082019050611a0060008301846119dc565b92915050565b6000606082019050611a1b6000830186611840565b611a286020830185611840565b611a356040830184611840565b949350505050565b600060208284031215611a5357611a5261186a565b5b6000611a61848285016118e4565b91505092915050565b600081519050611a79816118cd565b92915050565b600060208284031215611a9557611a9461186a565b5b6000611aa384828501611a6a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611aea816118a1565b92915050565b600060208284031215611b0657611b0561186a565b5b6000611b1484828501611adb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000611b7b611b76611b7184611b4c565b611b56565b611836565b9050919050565b611b8b81611b60565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611bc68161188f565b82525050565b6000611bd88383611bbd565b60208301905092915050565b6000602082019050919050565b6000611bfc82611b91565b611c068185611b9c565b9350611c1183611bad565b8060005b83811015611c42578151611c298882611bcc565b9750611c3483611be4565b925050600181019050611c15565b5085935050505092915050565b6000608082019050611c646000830187611b82565b8181036020830152611c768186611bf1565b9050611c8560408301856119a6565b611c926060830184611840565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cd582611836565b9150611ce083611836565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d1557611d14611c9b565b5b828201905092915050565b6000604082019050611d3560008301856119a6565b611d426020830184611840565b9392505050565b611d52816119d0565b8114611d5d57600080fd5b50565b600081519050611d6f81611d49565b92915050565b600060208284031215611d8b57611d8a61186a565b5b6000611d9984828501611d60565b91505092915050565b6000611dad82611836565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ddf57611dde611c9b565b5b600182019050919050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611e31601b83611dea565b9150611e3c82611dfb565b602082019050919050565b60006020820190508181036000830152611e6081611e24565b9050919050565b6000611e7282611836565b9150611e7d83611836565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611eb657611eb5611c9b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611efb82611836565b9150611f0683611836565b925082611f1657611f15611ec1565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7d602183611dea565b9150611f8882611f21565b604082019050919050565b60006020820190508181036000830152611fac81611f70565b9050919050565b6000611fbe82611836565b9150611fc983611836565b925082821015611fdc57611fdb611c9b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b60005b8381101561203f578082015181840152602081019050612024565b8381111561204e576000848401525b50505050565b6000601f19601f8301169050919050565b600061207082612016565b61207a8185611dea565b935061208a818560208601612021565b61209381612054565b840191505092915050565b600060208201905081810360008301526120b88184612065565b90509291505056fea26469706673582212209c8c2d3d222911e083926117fa3ce17cf561a771434581887b0534d2d4162bf064736f6c634300080d00330000000000000000000000000c6ac3fcea667fd6c62483ce1dbbce6f6ce0fb1f

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806377359aa7116101dc578063b19efa4411610102578063de54018e116100a0578063f887ea401161006f578063f887ea4014610d3f578063f8b45b0514610d6a578063fabe628314610d95578063ffb54a9914610dbe576103a2565b8063de54018e14610cab578063dfbfbc6b14610cd6578063f2fde38b14610ced578063f708a64f14610d16576103a2565b8063caa5581b116100dc578063caa5581b14610c03578063ce4ef10e14610c2e578063d920334e14610c45578063dd62ed3e14610c6e576103a2565b8063b19efa4414610b86578063bb542ef014610baf578063c45a015514610bd8576103a2565b80638b42507f1161017a578063a3a2e89e11610149578063a3a2e89e14610acc578063a8602fea14610af5578063a8aa1b3114610b1e578063a9059cbb14610b49576103a2565b80638b42507f14610a0e5780638e775c7214610a4b5780638ea5220f14610a7657806395d89b4114610aa1576103a2565b806381934031116101b6578063819340311461098c57806389291a8f146109b5578063893d20e8146109cc5780638a8c523c146109f7576103a2565b806377359aa7146108fb57806379900169146109385780637db1342c14610963576103a2565b80633dab5269116102c15780634f12a85e1161025f57806370a082311161022e57806370a082311461083d5780637437681e1461087a57806375df1305146108a557806375f0a874146108d0576103a2565b80634f12a85e14610795578063571ac8b0146107c05780635d098b38146107fd57806366eb378514610826576103a2565b8063454343771161029b57806345434377146106e95780634626402b14610714578063470624021461073f5780634a74bb021461076a576103a2565b80633dab5269146106465780633f4218e01461066f5780634355855a146106ac576103a2565b8063246ea64e116103395780632f54bf6e116103085780632f54bf6e1461059e57806330ca34ee146105db578063313ce567146106045780633ccfd60b1461062f576103a2565b8063246ea64e146104f45780632b112e491461051f5780632b14ca561461054a5780632d48e89614610575576103a2565b80630b730923116103755780630b7309231461043a57806318160ddd146104635780631f53ac021461048e57806323b872dd146104b7576103a2565b80630445b667146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610de9565b6040516103c99190613a9b565b60405180910390f35b3480156103de57600080fd5b506103e7610def565b6040516103f49190613b4f565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190613c00565b610e2c565b6040516104319190613c5b565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613c76565b610f1e565b005b34801561046f57600080fd5b50610478610f88565b6040516104859190613a9b565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613d1b565b610f92565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613d48565b61101e565b6040516104eb9190613c5b565b60405180910390f35b34801561050057600080fd5b5061050961121e565b6040516105169190613a9b565b60405180910390f35b34801561052b57600080fd5b50610534611224565b6040516105419190613a9b565b60405180910390f35b34801561055657600080fd5b5061055f6112a6565b60405161056c9190613a9b565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613d9b565b6112ac565b005b3480156105aa57600080fd5b506105c560048036038101906105c09190613ddb565b611387565b6040516105d29190613c5b565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613d9b565b6113e0565b005b34801561061057600080fd5b506106196114c6565b6040516106269190613e24565b60405180910390f35b34801561063b57600080fd5b506106446114cf565b005b34801561065257600080fd5b5061066d60048036038101906106689190613e6b565b61155e565b005b34801561067b57600080fd5b5061069660048036038101906106919190613ddb565b6115cb565b6040516106a39190613c5b565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190613ddb565b6115eb565b6040516106e09190613c5b565b60405180910390f35b3480156106f557600080fd5b506106fe61160b565b60405161070b9190613a9b565b60405180910390f35b34801561072057600080fd5b50610729611611565b6040516107369190613eba565b60405180910390f35b34801561074b57600080fd5b50610754611637565b6040516107619190613a9b565b60405180910390f35b34801561077657600080fd5b5061077f61163d565b60405161078c9190613c5b565b60405180910390f35b3480156107a157600080fd5b506107aa611650565b6040516107b79190613eba565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190613ddb565b611676565b6040516107f49190613c5b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613d1b565b6116a9565b005b34801561083257600080fd5b5061083b611735565b005b34801561084957600080fd5b50610864600480360381019061085f9190613ddb565b611787565b6040516108719190613a9b565b60405180910390f35b34801561088657600080fd5b5061088f6117d0565b60405161089c9190613a9b565b60405180910390f35b3480156108b157600080fd5b506108ba6117d6565b6040516108c79190613a9b565b60405180910390f35b3480156108dc57600080fd5b506108e56117dc565b6040516108f29190613eba565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613ddb565b611802565b60405161092f9190613a9b565b60405180910390f35b34801561094457600080fd5b5061094d6118a7565b60405161095a9190613a9b565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190613ed5565b6118ad565b005b34801561099857600080fd5b506109b360048036038101906109ae9190613ed5565b611944565b005b3480156109c157600080fd5b506109ca611a1c565b005b3480156109d857600080fd5b506109e1611adf565b6040516109ee9190613eba565b60405180910390f35b348015610a0357600080fd5b50610a0c611b08565b005b348015610a1a57600080fd5b50610a356004803603810190610a309190613ddb565b611b6d565b604051610a429190613c5b565b60405180910390f35b348015610a5757600080fd5b50610a60611b8d565b604051610a6d9190613f61565b60405180910390f35b348015610a8257600080fd5b50610a8b611bb3565b604051610a989190613eba565b60405180910390f35b348015610aad57600080fd5b50610ab6611bd9565b604051610ac39190613b4f565b60405180910390f35b348015610ad857600080fd5b50610af36004803603810190610aee9190613f7c565b611c16565b005b348015610b0157600080fd5b50610b1c6004803603810190610b179190613d1b565b611cb9565b005b348015610b2a57600080fd5b50610b33611d45565b604051610b409190613eba565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b9190613c00565b611d6b565b604051610b7d9190613c5b565b60405180910390f35b348015610b9257600080fd5b50610bad6004803603810190610ba89190613ed5565b611d80565b005b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613d1b565b611dd2565b005b348015610be457600080fd5b50610bed611e5e565b604051610bfa9190613eba565b60405180910390f35b348015610c0f57600080fd5b50610c18611e84565b604051610c259190613a9b565b60405180910390f35b348015610c3a57600080fd5b50610c43611e8a565b005b348015610c5157600080fd5b50610c6c6004803603810190610c679190613ed5565b611f68565b005b348015610c7a57600080fd5b50610c956004803603810190610c909190613fbc565b611fff565b604051610ca29190613a9b565b60405180910390f35b348015610cb757600080fd5b50610cc0612086565b604051610ccd9190613a9b565b60405180910390f35b348015610ce257600080fd5b50610ceb61208c565b005b348015610cf957600080fd5b50610d146004803603810190610d0f9190613d1b565b612158565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190613f7c565b61221a565b005b348015610d4b57600080fd5b50610d54612270565b604051610d61919061402f565b60405180910390f35b348015610d7657600080fd5b50610d7f612296565b604051610d8c9190613a9b565b60405180910390f35b348015610da157600080fd5b50610dbc6004803603810190610db79190613f7c565b61229c565b005b348015610dca57600080fd5b50610dd361233f565b604051610de09190613c5b565b60405180910390f35b601e5481565b60606040518060400160405280601281526020017f4f646f67652042757920616e64204275726e0000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f0c9190613a9b565b60405180910390a36001905092915050565b610f2733611387565b610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90614096565b60405180910390fd5b80600e81905550826011819055508360108190555081600f8190555050505050565b6000600254905090565b610f9b33611387565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614096565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461120a57611189826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611215848484612400565b90509392505050565b600f5481565b60006112a1611254600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611787565b611293611282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611787565b600254612c4b90919063ffffffff16565b612c4b90919063ffffffff16565b905090565b600d5481565b6112b533611387565b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016113519291906140b6565b600060405180830381600087803b15801561136b57600080fd5b505af115801561137f573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6113e933611387565b611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614096565b60405180910390fd5b81600c8190555080600d819055506014600c54111561147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061412b565b60405180910390fd5b6014600d5411156114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b99061412b565b60405180910390fd5b5050565b60006012905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9336040518263ffffffff1660e01b815260040161152a9190613eba565b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b50505050565b61156733611387565b6115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90614096565b60405180910390fd5b81601960156101000a81548160ff02191690831515021790555080601e819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601960159054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116a2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e2c565b9050919050565b6116b233611387565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890614096565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61173e33611387565b61177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490614096565b60405180910390fd5b611785612c95565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c5481565b60115481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b815260040161185f9190613eba565b602060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a09190614160565b9050919050565b60105481565b6118b633611387565b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614096565b60405180910390fd5b601d5481101561193a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611931906141d9565b60405180910390fd5b80601d8190555050565b61194d33611387565b61198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b81526004016119e79190613a9b565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b5050505050565b611a2533611387565b611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614096565b60405180910390fd5b60004790506000811115611adc57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ada573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b1133611387565b611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790614096565b60405180910390fd5b6001601960166101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f6f4e4d4300000000000000000000000000000000000000000000000000000000815250905090565b611c1f33611387565b611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590614096565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cc233611387565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890614096565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d78338484612400565b905092915050565b611d8933611387565b611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf90614096565b60405180910390fd5b80601b8190555050565b611ddb33611387565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614096565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611e9333611387565b611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614096565b60405180910390fd5b601960169054906101000a900460ff1615611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614245565b60405180910390fd5b6012600a611f3091906143c7565b621dc130611f3e9190614412565b601c819055506012600a611f5291906143c7565b62401640611f609190614412565b601d81905550565b611f7133611387565b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614096565b60405180910390fd5b601c54811015611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec906144b8565b60405180910390fd5b80601c8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b61209533611387565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dfbfbc6b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b50505050565b61216133611387565b6121a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219790614096565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161220f91906144f9565b60405180910390a150565b61222333611387565b612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614096565b60405180910390fd5b61226c8282612efa565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6122a533611387565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614096565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960169054906101000a900460ff1681565b600061239483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613152565b905092915050565b60008383111582906123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9190613b4f565b60405180910390fd5b50600083856123f39190614514565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124ab575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561250057601960169054906101000a900460ff166124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614594565b60405180910390fd5b5b601960149054906101000a900460ff1615612527576125208484846131b5565b9050612c44565b601c54821115806125815750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614600565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126a857601d5461266683600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b11156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e9061466c565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127135750601960149054906101000a900460ff16155b801561272b5750601960159054906101000a900460ff165b80156127785750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561278657612785612c95565b5b61280f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128f85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612902578261290e565b61290d8585856133e6565b5b905061296281600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a9292919061468c565b600060405180830381600087803b158015612aac57600080fd5b505af1925050508015612abd575060015b505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd957601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bac92919061468c565b600060405180830381600087803b158015612bc657600080fd5b505af1925050508015612bd7575060015b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c369190613a9b565b60405180910390a360019150505b9392505050565b6000612c8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239c565b905092915050565b6001601960146101000a81548160ff021916908315150217905550612cf8600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358e565b60004790506000612d276064612d19600f54856137af90919063ffffffff16565b61235290919063ffffffff16565b9050612d3281613829565b6000612d5c6064612d4e601154866137af90919063ffffffff16565b61235290919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612dc6573d6000803e3d6000fd5b506000612df16064612de3600e54876137af90919063ffffffff16565b61235290919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5d57600080fd5b505af193505050508015612e6f575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed8573d6000803e3d6000fd5b50505050506000601960146101000a81548160ff021916908315150217905550565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f845750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f8d57600080fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561307f57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016130489291906146f0565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b5050505061314e565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161311b92919061468c565b600060405180830381600087803b15801561313557600080fd5b505af1158015613149573d6000803e3d6000fd5b505050505b5050565b60008083118290613199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131909190613b4f565b60405180910390fd5b50600083856131a89190614748565b9050809150509392505050565b6000613240826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132d582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133759190613a9b565b60405180910390a3600190509392505050565b60008082846133979190614779565b9050838110156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d39061481b565b60405180910390fd5b8091505092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344657600c5461344a565b600d545b90506000613474606461346684876137af90919063ffffffff16565b61235290919063ffffffff16565b90506134c881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135689190613a9b565b60405180910390a36135838185612c4b90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff8111156135ab576135aa61483b565b5b6040519080825280602002602001820160405280156135d95781602001602082028036833780820191505090505b50905030816000815181106135f1576135f061486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc91906148ae565b816001815181106136d0576136cf61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137143083610e2c565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613779959493929190614999565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050505050565b60008083036137c15760009050613823565b600082846137cf9190614412565b90508284826137de9190614748565b1461381e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381590614a65565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156138465761384561483b565b5b6040519080825280602002602001820160405280156138745781602001602082028036833780820191505090505b509050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390891906148ae565b8160008151811061391c5761391b61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d5761398c61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613a4c9493929190614a85565b6000604051808303818588803b158015613a6557600080fd5b505af1158015613a79573d6000803e3d6000fd5b50505050505050565b6000819050919050565b613a9581613a82565b82525050565b6000602082019050613ab06000830184613a8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613af0578082015181840152602081019050613ad5565b83811115613aff576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b2182613ab6565b613b2b8185613ac1565b9350613b3b818560208601613ad2565b613b4481613b05565b840191505092915050565b60006020820190508181036000830152613b698184613b16565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ba182613b76565b9050919050565b613bb181613b96565b8114613bbc57600080fd5b50565b600081359050613bce81613ba8565b92915050565b613bdd81613a82565b8114613be857600080fd5b50565b600081359050613bfa81613bd4565b92915050565b60008060408385031215613c1757613c16613b71565b5b6000613c2585828601613bbf565b9250506020613c3685828601613beb565b9150509250929050565b60008115159050919050565b613c5581613c40565b82525050565b6000602082019050613c706000830184613c4c565b92915050565b60008060008060808587031215613c9057613c8f613b71565b5b6000613c9e87828801613beb565b9450506020613caf87828801613beb565b9350506040613cc087828801613beb565b9250506060613cd187828801613beb565b91505092959194509250565b6000613ce882613b76565b9050919050565b613cf881613cdd565b8114613d0357600080fd5b50565b600081359050613d1581613cef565b92915050565b600060208284031215613d3157613d30613b71565b5b6000613d3f84828501613d06565b91505092915050565b600080600060608486031215613d6157613d60613b71565b5b6000613d6f86828701613bbf565b9350506020613d8086828701613bbf565b9250506040613d9186828701613beb565b9150509250925092565b60008060408385031215613db257613db1613b71565b5b6000613dc085828601613beb565b9250506020613dd185828601613beb565b9150509250929050565b600060208284031215613df157613df0613b71565b5b6000613dff84828501613bbf565b91505092915050565b600060ff82169050919050565b613e1e81613e08565b82525050565b6000602082019050613e396000830184613e15565b92915050565b613e4881613c40565b8114613e5357600080fd5b50565b600081359050613e6581613e3f565b92915050565b60008060408385031215613e8257613e81613b71565b5b6000613e9085828601613e56565b9250506020613ea185828601613beb565b9150509250929050565b613eb481613b96565b82525050565b6000602082019050613ecf6000830184613eab565b92915050565b600060208284031215613eeb57613eea613b71565b5b6000613ef984828501613beb565b91505092915050565b6000819050919050565b6000613f27613f22613f1d84613b76565b613f02565b613b76565b9050919050565b6000613f3982613f0c565b9050919050565b6000613f4b82613f2e565b9050919050565b613f5b81613f40565b82525050565b6000602082019050613f766000830184613f52565b92915050565b60008060408385031215613f9357613f92613b71565b5b6000613fa185828601613bbf565b9250506020613fb285828601613e56565b9150509250929050565b60008060408385031215613fd357613fd2613b71565b5b6000613fe185828601613bbf565b9250506020613ff285828601613bbf565b9150509250929050565b600061400782613f0c565b9050919050565b600061401982613ffc565b9050919050565b6140298161400e565b82525050565b60006020820190506140446000830184614020565b92915050565b7f214f776e65720000000000000000000000000000000000000000000000000000600082015250565b6000614080600683613ac1565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b60006040820190506140cb6000830185613a8c565b6140d86020830184613a8c565b9392505050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000614115600883613ac1565b9150614120826140df565b602082019050919050565b6000602082019050818103600083015261414481614108565b9050919050565b60008151905061415a81613bd4565b92915050565b60006020828403121561417657614175613b71565b5b60006141848482850161414b565b91505092915050565b7f43616e206e6f74206c6f776572206d61782077616c6c65740000000000000000600082015250565b60006141c3601883613ac1565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4265686176652e00000000000000000000000000000000000000000000000000600082015250565b600061422f600783613ac1565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156142eb578086048111156142c7576142c6614265565b5b60018516156142d65780820291505b80810290506142e485614294565b94506142ab565b94509492505050565b60008261430457600190506143c0565b8161431257600090506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343614265565b5b8360020a91508482111561435b5761435a614265565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390614265565b5b6143c0565b6143a384848460016142a1565b925090508184048111156143ba576143b9614265565b5b81810290505b9392505050565b60006143d282613a82565b91506143dd83613e08565b925061440a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f4565b905092915050565b600061441d82613a82565b915061442883613a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446157614460614265565b5b828202905092915050565b7f43616e206e6f74206c6f776572206d6178207478000000000000000000000000600082015250565b60006144a2601483613ac1565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b60006144e382613ffc565b9050919050565b6144f3816144d8565b82525050565b600060208201905061450e60008301846144ea565b92915050565b600061451f82613a82565b915061452a83613a82565b92508282101561453d5761453c614265565b5b828203905092915050565b7f686f6c6420757220686f7273657320626967206775792e000000000000000000600082015250565b600061457e601783613ac1565b915061458982614548565b602082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006145ea600283613ac1565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000614656600683613ac1565b915061466182614620565b602082019050919050565b6000602082019050818103600083015261468581614649565b9050919050565b60006040820190506146a16000830185613eab565b6146ae6020830184613a8c565b9392505050565b6000819050919050565b60006146da6146d56146d0846146b5565b613f02565b613a82565b9050919050565b6146ea816146bf565b82525050565b60006040820190506147056000830185613eab565b61471260208301846146e1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061475382613a82565b915061475e83613a82565b92508261476e5761476d614719565b5b828204905092915050565b600061478482613a82565b915061478f83613a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c4576147c3614265565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614805601b83613ac1565b9150614810826147cf565b602082019050919050565b60006020820190508181036000830152614834816147f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148a881613ba8565b92915050565b6000602082840312156148c4576148c3613b71565b5b60006148d284828501614899565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491081613b96565b82525050565b60006149228383614907565b60208301905092915050565b6000602082019050919050565b6000614946826148db565b61495081856148e6565b935061495b836148f7565b8060005b8381101561498c5781516149738882614916565b975061497e8361492e565b92505060018101905061495f565b5085935050505092915050565b600060a0820190506149ae6000830188613a8c565b6149bb60208301876146e1565b81810360408301526149cd818661493b565b90506149dc6060830185613eab565b6149e96080830184613a8c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602183613ac1565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b6000608082019050614a9a60008301876146e1565b8181036020830152614aac818661493b565b9050614abb6040830185613eab565b614ac86060830184613a8c565b9594505050505056fea2646970667358221220d3f5c33e4007110b21b79384f1690a0c77c0833fcae5d404b19d2df1bf936f6064736f6c634300080d0033

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

0000000000000000000000000c6ac3fcea667fd6c62483ce1dbbce6f6ce0fb1f

-----Decoded View---------------
Arg [0] : _owner (address): 0x0C6AC3FCEA667fD6C62483cE1DBbce6f6ce0fB1f

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c6ac3fcea667fd6c62483ce1dbbce6f6ce0fb1f


Deployed Bytecode Sourcemap

11880:12784:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13675:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18456:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18981:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15348:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18138:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16338:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19559:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12867:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17988:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12791:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17135:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3046:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15075:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18248:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24465:82;;;;;;;;;;;;;:::i;:::-;;16904:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12597:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12701:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12977:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13172:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12758:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13275:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11959:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19237:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16469:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23831:74;;;;;;;;;;;;;:::i;:::-;;18658:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13569:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12937:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13208:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24269:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12900:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15867:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24146:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23913:225;;;;;;;;;;;;;:::i;:::-;;18558:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14986:81;;;;;;;;;;;;;:::i;:::-;;12647:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13362:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13141:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18350:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16047:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16624:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13051:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19367:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17876:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16775:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13077:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12827:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14751:187;;;;;;;;;;;;;:::i;:::-;;15703:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18785:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13404:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24555:106;;;;;;;;;;;;;:::i;:::-;;3157:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17713:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13020:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13620:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16177:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13322:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13675:53;;;;:::o;18456:94::-;18504:13;18537:5;;;;;;;;;;;;;;;;;18530:12;;18456:94;:::o;18981:248::-;19083:4;19140:6;19105:11;:23;19117:10;19105:23;;;;;;;;;;;;;;;:32;19129:7;19105:32;;;;;;;;;;;;;;;:41;;;;19183:7;19162:37;;19171:10;19162:37;;;19192:6;19162:37;;;;;;:::i;:::-;;;;;;;;19217:4;19210:11;;18981:248;;;;:::o;15348:347::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15562:17:::1;15546:13;:33;;;;15604:15;15590:11;:29;;;;15643:14;15630:10;:27;;;;15677:10;15668:6;:19;;;;15348:347:::0;;;;:::o;18138:102::-;18193:7;18220:12;;18213:19;;18138:102;:::o;16338:123::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16440:12:::1;16420:9;;:33;;;;;;;;;;;;;;;;;;16338:123:::0;:::o;19559:420::-;19693:4;19749:17;19714:11;:19;19726:6;19714:19;;;;;;;;;;;;;;;:31;19734:10;19714:31;;;;;;;;;;;;;;;;:52;19710:206;;19817:87;19871:6;19817:87;;;;;;;;;;;;;;;;;:11;:19;19829:6;19817:19;;;;;;;;;;;;;;;:31;19837:10;19817:31;;;;;;;;;;;;;;;;:53;;:87;;;;;:::i;:::-;19783:11;:19;19795:6;19783:19;;;;;;;;;;;;;;;:31;19803:10;19783:31;;;;;;;;;;;;;;;:121;;;;19710:206;19935:36;19945:6;19953:9;19964:6;19935:9;:36::i;:::-;19928:43;;19559:420;;;;;:::o;12867:26::-;;;;:::o;17988:142::-;18041:7;18068:54;18106:15;18116:4;;;;;;;;;;;18106:9;:15::i;:::-;18068:33;18085:15;18095:4;;;;;;;;;;;18085:9;:15::i;:::-;18068:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;18061:61;;17988:142;:::o;12791:27::-;;;;:::o;17135:217::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17273:13:::1;;;;;;;;;;;:37;;;17311:12;17325:18;17273:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17135:217:::0;;:::o;3046:103::-;3101:4;3136:5;;;;;;;;;;;3125:16;;:7;:16;;;3118:23;;3046:103;;;:::o;15075:265::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15201:9:::1;15192:6;:18;;;;15231:10;15221:7;:20;;;;15272:2;15262:6;;:12;;15254:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;15317:2;15306:7;;:13;;15298:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;15075:265:::0;;:::o;18248:94::-;18300:5;12183:2;18318:16;;18248:94;:::o;24465:82::-;24505:13;;;;;;;;;;;:22;;;24528:10;24505:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24465:82::o;16904:223::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17062:14:::1;17038:21;;:38;;;;;;;;;;;;;;;;;;17103:16;17087:13;:32;;;;16904:223:::0;;:::o;12597:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12701:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12977:34::-;;;;:::o;13172:29::-;;;;;;;;;;;;;:::o;12758:26::-;;;;:::o;13275:40::-;;;;;;;;;;;;;:::o;11959:65::-;;;;;;;;;;;;;:::o;19237:122::-;19292:4;19316:35;19324:7;19333:17;19316:7;:35::i;:::-;19309:42;;19237:122;;;:::o;16469:147::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16589:18:::1;16563:15;;:45;;;;;;;;;;;;;;;;;;16469:147:::0;:::o;23831:74::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23887:10:::1;:8;:10::i;:::-;23831:74::o:0;18658:119::-;18724:7;18751:9;:18;18761:7;18751:18;;;;;;;;;;;;;;;;18744:25;;18658:119;;;:::o;13569:44::-;;;;:::o;12937:31::-;;;;:::o;13208:30::-;;;;;;;;;;;;;:::o;24269:188::-;24373:7;24405:13;;;;;;;;;;;:31;;;24437:11;24405:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24398:51;;24269:188;;;:::o;12900:30::-;;;;:::o;15867:172::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15962:9:::1;;15950:8;:21;;15942:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16023:8;16011:9;:20;;;;15867:172:::0;:::o;24146:115::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24221:13:::1;;;;;;;;;;;:21;;;24243:9;24221:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24146:115:::0;:::o;23913:225::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23968:26:::1;23997:21;23968:50;;24054:1;24033:18;:22;24029:102;;;24080:9;;;;;;;;;;;24072:27;;:47;24100:18;24072:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24029:102;23957:181;23913:225::o:0;18558:92::-;18610:7;18637:5;;;;;;;;;;;18630:12;;18558:92;:::o;14986:81::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15055:4:::1;15041:11;;:18;;;;;;;;;;;;;;;;;;14986:81::o:0;12647:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;13362:35::-;;;;;;;;;;;;;:::o;13141:24::-;;;;;;;;;;;;;:::o;18350:98::-;18400:13;18433:7;;;;;;;;;;;;;;;;;18426:14;;18350:98;:::o;16047:122::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16155:6:::1;16133:11;:19;16145:6;16133:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;16047:122:::0;;:::o;16624:143::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16741:17:::1;16716:14;;:43;;;;;;;;;;;;;;;;;;16624:143:::0;:::o;13051:19::-;;;;;;;;;;;;;:::o;19367:184::-;19474:4;19503:40;19513:10;19525:9;19536:6;19503:9;:40::i;:::-;19496:47;;19367:184;;;;:::o;17876:104::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17966:6:::1;17946:17;:26;;;;17876:104:::0;:::o;16775:121::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16874:14:::1;16861:10;;:27;;;;;;;;;;;;;;;;;;16775:121:::0;:::o;13077:22::-;;;;;;;;;;;;;:::o;12827:33::-;;;;:::o;14751:187::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14809:11:::1;;;;;;;;;;;14808:12;14800:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;12183:2;14866;:13;;;;:::i;:::-;14853:9;:27;;;;:::i;:::-;14845:5;:35;;;;12183:2;14916;:13;;;;:::i;:::-;14903:9;:27;;;;:::i;:::-;14891:9;:39;;;;14751:187::o:0;15703:156::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15794:5:::1;;15782:8;:17;;15774:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;15843:8;15835:5;:16;;;;15703:156:::0;:::o;18785:188::-;18905:7;18937:11;:19;18949:6;18937:19;;;;;;;;;;;;;;;:28;18957:7;18937:28;;;;;;;;;;;;;;;;18930:35;;18785:188;;;;:::o;13404:36::-;;;;:::o;24555:106::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:13:::1;;;;;;;;;;;:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24555:106::o:0;3157:136::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3241:3:::1;3233:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3260:25;3281:3;3260:25;;;;;;:::i;:::-;;;;;;;;3157:136:::0;:::o;17713:155::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17824:36:::1;17845:6;17853;17824:20;:36::i;:::-;17713:155:::0;;:::o;13020:24::-;;;;;;;;;;;;;:::o;13620:48::-;;;;:::o;16177:153::-;2936:19;2944:10;2936:7;:19::i;:::-;2928:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16316:6:::1;16290:15;:23;16306:6;16290:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;16177:153:::0;;:::o;13322:31::-;;;;;;;;;;;;;:::o;1067:132::-;1125:7;1152:39;1156:1;1159;1152:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1145:46;;1067:132;;;;:::o;575:226::-;695:7;728:1;723;:6;;731:12;715:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;755:9;771:1;767;:5;;;;:::i;:::-;755:17;;792:1;785:8;;;575:226;;;;;:::o;19987:1568::-;20109:4;20140:5;;;;;;;;;;;20130:15;;:6;:15;;;;:37;;;;;20162:5;;;;;;;;;;20149:18;;:9;:18;;;;20130:37;20126:103;;;20190:11;;;;;;;;;;;20182:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20126:103;20288:16;;;;;;;;;;;20284:97;;;20328:41;20343:6;20351:9;20362:6;20328:14;:41::i;:::-;20321:48;;;;20284:97;20411:5;;20401:6;:15;;:42;;;;20420:15;:23;20436:6;20420:23;;;;;;;;;;;;;;;;;;;;;;;;;20401:42;20393:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20468:15;:26;20484:9;20468:26;;;;;;;;;;;;;;;;;;;;;;;;;20463:124;;20555:9;;20519:32;20544:6;20519:9;:20;20529:9;20519:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:45;;20511:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20463:124;20631:4;;;;;;;;;;;20617:18;;:10;:18;;;;:52;;;;;20653:16;;;;;;;;;;;20652:17;20617:52;:90;;;;;20686:21;;;;;;;;;;;20617:90;:148;;;;;20752:13;;20724:9;:24;20742:4;20724:24;;;;;;;;;;;;;;;;:41;;20617:148;20599:215;;;20792:10;:8;:10::i;:::-;20599:215;20846:90;20882:6;20846:90;;;;;;;;;;;;;;;;;:9;:17;20856:6;20846:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;20826:9;:17;20836:6;20826:17;;;;;;;;;;;;;;;:110;;;;20949:19;20972:11;:19;20984:6;20972:19;;;;;;;;;;;;;;;;;;;;;;;;;20971:20;:47;;;;;20996:11;:22;21008:9;20996:22;;;;;;;;;;;;;;;;;;;;;;;;;20995:23;20971:47;:119;;21084:6;20971:119;;;21034:34;21042:6;21050:9;21061:6;21034:7;:34::i;:::-;20971:119;20949:141;;21124:37;21149:11;21124:9;:20;21134:9;21124:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;21101:9;:20;21111:9;21101:20;;;;;;;;;;;;;;;:60;;;;21208:16;:24;21225:6;21208:24;;;;;;;;;;;;;;;;;;;;;;;;;21203:122;;21253:13;;;;;;;;;;;:22;;;21276:6;21284:9;:17;21294:6;21284:17;;;;;;;;;;;;;;;;21253:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21249:65;21203:122;21342:16;:27;21359:9;21342:27;;;;;;;;;;;;;;;;;;;;;;;;;21337:131;;21390:13;;;;;;;;;;;:22;;;21413:9;21424;:20;21434:9;21424:20;;;;;;;;;;;;;;;;21390:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21386:71;21337:131;21502:9;21485:40;;21494:6;21485:40;;;21513:11;21485:40;;;;;;:::i;:::-;;;;;;;;21543:4;21536:11;;;19987:1568;;;;;;:::o;431:136::-;489:7;516:43;520:1;523;516:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;509:50;;431:136;;;;:::o;23191:632::-;13502:4;13483:16;;:23;;;;;;;;;;;;;;;;;;23243:42:::1;23260:9;:24;23278:4;23260:24;;;;;;;;;;;;;;;;23243:16;:42::i;:::-;23298:23;23324:21;23298:47;;23358:18;23379:36;23411:3;23379:27;23399:6;;23379:15;:19;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;23358:57;;23426:21;23436:10;23426:9;:21::i;:::-;23460:23;23486:41;23523:3;23486:32;23506:11;;23486:15;:19;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;23460:67;;23546:15;;;;;;;;;;;23538:33;;:50;23572:15;23538:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23601:25;23629:43;23668:3;23629:34;23649:13;;23629:15;:19;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;23601:71;;23687:13;;;;;;;;;;;:21;;;23716:17;23687:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;23683:65:::0;23768:14:::1;;;;;;;;;;;23760:32;;:55;23793:21;23760:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23232:591;;;;13548:5:::0;13529:16;;:24;;;;;;;;;;;;;;;;;;23191:632::o;17360:345::-;17465:4;17447:23;;:6;:23;;;;:41;;;;;17484:4;;;;;;;;;;;17474:14;;:6;:14;;;;17447:41;17439:50;;;;;;17527:6;17500:16;:24;17517:6;17500:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17548:6;17544:154;;;17571:13;;;;;;;;;;;:22;;;17594:6;17602:1;17571:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17544:154;;;17637:13;;;;;;;;;;;:22;;;17660:6;17668:9;:17;17678:6;17668:17;;;;;;;;;;;;;;;;17637:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17544:154;17360:345;;:::o;1207:379::-;1327:7;1426:1;1422;:5;1429:12;1414:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1453:9;1469:1;1465;:5;;;;:::i;:::-;1453:17;;1577:1;1570:8;;;1207:379;;;;;:::o;21563:401::-;21690:4;21727:90;21763:6;21727:90;;;;;;;;;;;;;;;;;:9;:17;21737:6;21727:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;21707:9;:17;21717:6;21707:17;;;;;;;;;;;;;;;:110;;;;21851:32;21876:6;21851:9;:20;21861:9;21851:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21828:9;:20;21838:9;21828:20;;;;;;;;;;;;;;;:55;;;;21916:9;21899:35;;21908:6;21899:35;;;21927:6;21899:35;;;;;;:::i;:::-;;;;;;;;21952:4;21945:11;;21563:401;;;;;:::o;242:181::-;300:7;320:9;336:1;332;:5;;;;:::i;:::-;320:17;;361:1;356;:6;;348:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;414:1;407:8;;;242:181;;;;:::o;21972:451::-;22092:7;22112:21;22144:9;22136:17;;:4;;;;;;;;;;;:17;;;:36;;22166:6;;22136:36;;;22156:7;;22136:36;22112:60;;22183:17;22203:34;22233:3;22203:25;22214:13;22203:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;22183:54;;22277:39;22306:9;22277;:24;22295:4;22277:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22250:9;:24;22268:4;22250:24;;;;;;;;;;;;;;;:66;;;;22357:4;22332:42;;22341:6;22332:42;;;22364:9;22332:42;;;;;;:::i;:::-;;;;;;;;22394:21;22405:9;22394:6;:10;;:21;;;;:::i;:::-;22387:28;;;;21972:451;;;;;:::o;22431:458::-;22497:21;22535:1;22521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22497:40;;22566:4;22548;22553:1;22548:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22592:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22582:4;22587:1;22582:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22618:35;22634:4;22641:11;22618:7;:35::i;:::-;;22666:6;;;;;;;;;;;:57;;;22738:11;22764:1;22808:4;22835;22855:15;22666:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22486:403;22431:458;:::o;809:250::-;867:7;896:1;891;:6;887:47;;921:1;914:8;;;;887:47;946:9;962:1;958;:5;;;;:::i;:::-;946:17;;991:1;986;982;:5;;;;:::i;:::-;:10;974:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1050:1;1043:8;;;809:250;;;;;:::o;22897:286::-;22951:21;22989:1;22975:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22951:40;;23012:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23002:4;23007:1;23002:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23054:5;;;;;;;;;;;23036:4;23041:1;23036:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;23071:6;;;;;;;;;;;:57;;;23136:6;23144:1;23147:4;23153;;;;;;;;;;;23159:15;23071:104;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22940:243;22897:286;:::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;1913:117::-;2022:1;2019;2012: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:765::-;3932:6;3940;3948;3956;4005:3;3993:9;3984:7;3980:23;3976:33;3973:120;;;4012:79;;:::i;:::-;3973:120;4132:1;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4103:117;4259:2;4285:53;4330:7;4321:6;4310:9;4306:22;4285:53;:::i;:::-;4275:63;;4230:118;4387:2;4413:53;4458:7;4449:6;4438:9;4434:22;4413:53;:::i;:::-;4403:63;;4358:118;4515:2;4541:53;4586:7;4577:6;4566:9;4562:22;4541:53;:::i;:::-;4531:63;;4486:118;3846:765;;;;;;;:::o;4617:104::-;4662:7;4691:24;4709:5;4691:24;:::i;:::-;4680:35;;4617:104;;;:::o;4727:138::-;4808:32;4834:5;4808:32;:::i;:::-;4801:5;4798:43;4788:71;;4855:1;4852;4845:12;4788:71;4727:138;:::o;4871:155::-;4925:5;4963:6;4950:20;4941:29;;4979:41;5014:5;4979:41;:::i;:::-;4871:155;;;;:::o;5032:345::-;5099:6;5148:2;5136:9;5127:7;5123:23;5119:32;5116:119;;;5154:79;;:::i;:::-;5116:119;5274:1;5299:61;5352:7;5343:6;5332:9;5328:22;5299:61;:::i;:::-;5289:71;;5245:125;5032:345;;;;:::o;5383:619::-;5460:6;5468;5476;5525:2;5513:9;5504:7;5500:23;5496:32;5493:119;;;5531:79;;:::i;:::-;5493:119;5651:1;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5622:117;5778:2;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5749:118;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;5383:619;;;;;:::o;6008:474::-;6076:6;6084;6133:2;6121:9;6112:7;6108:23;6104:32;6101:119;;;6139:79;;:::i;:::-;6101:119;6259:1;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6230:117;6386:2;6412:53;6457:7;6448:6;6437:9;6433:22;6412:53;:::i;:::-;6402:63;;6357:118;6008:474;;;;;:::o;6488:329::-;6547:6;6596:2;6584:9;6575:7;6571:23;6567:32;6564:119;;;6602:79;;:::i;:::-;6564:119;6722:1;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6693:117;6488:329;;;;:::o;6823:86::-;6858:7;6898:4;6891:5;6887:16;6876:27;;6823:86;;;:::o;6915:112::-;6998:22;7014:5;6998:22;:::i;:::-;6993:3;6986:35;6915:112;;:::o;7033:214::-;7122:4;7160:2;7149:9;7145:18;7137:26;;7173:67;7237:1;7226:9;7222:17;7213:6;7173:67;:::i;:::-;7033:214;;;;:::o;7253:116::-;7323:21;7338:5;7323:21;:::i;:::-;7316:5;7313:32;7303:60;;7359:1;7356;7349:12;7303:60;7253:116;:::o;7375:133::-;7418:5;7456:6;7443:20;7434:29;;7472:30;7496:5;7472:30;:::i;:::-;7375:133;;;;:::o;7514:468::-;7579:6;7587;7636:2;7624:9;7615:7;7611:23;7607:32;7604:119;;;7642:79;;:::i;:::-;7604:119;7762:1;7787:50;7829:7;7820:6;7809:9;7805:22;7787:50;:::i;:::-;7777:60;;7733:114;7886:2;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7857:118;7514:468;;;;;:::o;7988:118::-;8075:24;8093:5;8075:24;:::i;:::-;8070:3;8063:37;7988:118;;:::o;8112:222::-;8205:4;8243:2;8232:9;8228:18;8220:26;;8256:71;8324:1;8313:9;8309:17;8300:6;8256:71;:::i;:::-;8112:222;;;;:::o;8340:329::-;8399:6;8448:2;8436:9;8427:7;8423:23;8419:32;8416:119;;;8454:79;;:::i;:::-;8416:119;8574:1;8599:53;8644:7;8635:6;8624:9;8620:22;8599:53;:::i;:::-;8589:63;;8545:117;8340:329;;;;:::o;8675:60::-;8703:3;8724:5;8717:12;;8675:60;;;:::o;8741:142::-;8791:9;8824:53;8842:34;8851:24;8869:5;8851:24;:::i;:::-;8842:34;:::i;:::-;8824:53;:::i;:::-;8811:66;;8741:142;;;:::o;8889:134::-;8947:9;8980:37;9011:5;8980:37;:::i;:::-;8967:50;;8889:134;;;:::o;9029:165::-;9110:9;9143:45;9182:5;9143:45;:::i;:::-;9130:58;;9029:165;;;:::o;9200:193::-;9318:68;9380:5;9318:68;:::i;:::-;9313:3;9306:81;9200:193;;:::o;9399:284::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9574:102;9673:1;9662:9;9658:17;9649:6;9574:102;:::i;:::-;9399:284;;;;:::o;9689:468::-;9754:6;9762;9811:2;9799:9;9790:7;9786:23;9782:32;9779:119;;;9817:79;;:::i;:::-;9779:119;9937:1;9962:53;10007:7;9998:6;9987:9;9983:22;9962:53;:::i;:::-;9952:63;;9908:117;10064:2;10090:50;10132:7;10123:6;10112:9;10108:22;10090:50;:::i;:::-;10080:60;;10035:115;9689:468;;;;;:::o;10163:474::-;10231:6;10239;10288:2;10276:9;10267:7;10263:23;10259:32;10256:119;;;10294:79;;:::i;:::-;10256:119;10414:1;10439:53;10484:7;10475:6;10464:9;10460:22;10439:53;:::i;:::-;10429:63;;10385:117;10541:2;10567:53;10612:7;10603:6;10592:9;10588:22;10567:53;:::i;:::-;10557:63;;10512:118;10163:474;;;;;:::o;10643:126::-;10693:9;10726:37;10757:5;10726:37;:::i;:::-;10713:50;;10643:126;;;:::o;10775:144::-;10843:9;10876:37;10907:5;10876:37;:::i;:::-;10863:50;;10775:144;;;:::o;10925:167::-;11030:55;11079:5;11030:55;:::i;:::-;11025:3;11018:68;10925:167;;:::o;11098:258::-;11209:4;11247:2;11236:9;11232:18;11224:26;;11260:89;11346:1;11335:9;11331:17;11322:6;11260:89;:::i;:::-;11098:258;;;;:::o;11362:156::-;11502:8;11498:1;11490:6;11486:14;11479:32;11362:156;:::o;11524:365::-;11666:3;11687:66;11751:1;11746:3;11687:66;:::i;:::-;11680:73;;11762:93;11851:3;11762:93;:::i;:::-;11880:2;11875:3;11871:12;11864:19;;11524:365;;;:::o;11895:419::-;12061:4;12099:2;12088:9;12084:18;12076:26;;12148:9;12142:4;12138:20;12134:1;12123:9;12119:17;12112:47;12176:131;12302:4;12176:131;:::i;:::-;12168:139;;11895:419;;;:::o;12320:332::-;12441:4;12479:2;12468:9;12464:18;12456:26;;12492:71;12560:1;12549:9;12545:17;12536:6;12492:71;:::i;:::-;12573:72;12641:2;12630:9;12626:18;12617:6;12573:72;:::i;:::-;12320:332;;;;;:::o;12658:158::-;12798:10;12794:1;12786:6;12782:14;12775:34;12658:158;:::o;12822:365::-;12964:3;12985:66;13049:1;13044:3;12985:66;:::i;:::-;12978:73;;13060:93;13149:3;13060:93;:::i;:::-;13178:2;13173:3;13169:12;13162:19;;12822:365;;;:::o;13193:419::-;13359:4;13397:2;13386:9;13382:18;13374:26;;13446:9;13440:4;13436:20;13432:1;13421:9;13417:17;13410:47;13474:131;13600:4;13474:131;:::i;:::-;13466:139;;13193:419;;;:::o;13618:143::-;13675:5;13706:6;13700:13;13691:22;;13722:33;13749:5;13722:33;:::i;:::-;13618:143;;;;:::o;13767:351::-;13837:6;13886:2;13874:9;13865:7;13861:23;13857:32;13854:119;;;13892:79;;:::i;:::-;13854:119;14012:1;14037:64;14093:7;14084:6;14073:9;14069:22;14037:64;:::i;:::-;14027:74;;13983:128;13767:351;;;;:::o;14124:174::-;14264:26;14260:1;14252:6;14248:14;14241:50;14124:174;:::o;14304:366::-;14446:3;14467:67;14531:2;14526:3;14467:67;:::i;:::-;14460:74;;14543:93;14632:3;14543:93;:::i;:::-;14661:2;14656:3;14652:12;14645:19;;14304:366;;;:::o;14676:419::-;14842:4;14880:2;14869:9;14865:18;14857:26;;14929:9;14923:4;14919:20;14915:1;14904:9;14900:17;14893:47;14957:131;15083:4;14957:131;:::i;:::-;14949:139;;14676:419;;;:::o;15101:157::-;15241:9;15237:1;15229:6;15225:14;15218:33;15101:157;:::o;15264:365::-;15406:3;15427:66;15491:1;15486:3;15427:66;:::i;:::-;15420:73;;15502:93;15591:3;15502:93;:::i;:::-;15620:2;15615:3;15611:12;15604:19;;15264:365;;;:::o;15635:419::-;15801:4;15839:2;15828:9;15824:18;15816:26;;15888:9;15882:4;15878:20;15874:1;15863:9;15859:17;15852:47;15916:131;16042:4;15916:131;:::i;:::-;15908:139;;15635:419;;;:::o;16060:180::-;16108:77;16105:1;16098:88;16205:4;16202:1;16195:15;16229:4;16226:1;16219:15;16246:102;16288:8;16335:5;16332:1;16328:13;16307:34;;16246:102;;;:::o;16354:848::-;16415:5;16422:4;16446:6;16437:15;;16470:5;16461:14;;16484:712;16505:1;16495:8;16492:15;16484:712;;;16600:4;16595:3;16591:14;16585:4;16582:24;16579:50;;;16609:18;;:::i;:::-;16579:50;16659:1;16649:8;16645:16;16642:451;;;17074:4;17067:5;17063:16;17054:25;;16642:451;17124:4;17118;17114:15;17106:23;;17154:32;17177:8;17154:32;:::i;:::-;17142:44;;16484:712;;;16354:848;;;;;;;:::o;17208:1073::-;17262:5;17453:8;17443:40;;17474:1;17465:10;;17476:5;;17443:40;17502:4;17492:36;;17519:1;17510:10;;17521:5;;17492:36;17588:4;17636:1;17631:27;;;;17672:1;17667:191;;;;17581:277;;17631:27;17649:1;17640:10;;17651:5;;;17667:191;17712:3;17702:8;17699:17;17696:43;;;17719:18;;:::i;:::-;17696:43;17768:8;17765:1;17761:16;17752:25;;17803:3;17796:5;17793:14;17790:40;;;17810:18;;:::i;:::-;17790:40;17843:5;;;17581:277;;17967:2;17957:8;17954:16;17948:3;17942:4;17939:13;17935:36;17917:2;17907:8;17904:16;17899:2;17893:4;17890:12;17886:35;17870:111;17867:246;;;18023:8;18017:4;18013:19;18004:28;;18058:3;18051:5;18048:14;18045:40;;;18065:18;;:::i;:::-;18045:40;18098:5;;17867:246;18138:42;18176:3;18166:8;18160:4;18157:1;18138:42;:::i;:::-;18123:57;;;;18212:4;18207:3;18203:14;18196:5;18193:25;18190:51;;;18221:18;;:::i;:::-;18190:51;18270:4;18263:5;18259:16;18250:25;;17208:1073;;;;;;:::o;18287:281::-;18345:5;18369:23;18387:4;18369:23;:::i;:::-;18361:31;;18413:25;18429:8;18413:25;:::i;:::-;18401:37;;18457:104;18494:66;18484:8;18478:4;18457:104;:::i;:::-;18448:113;;18287:281;;;;:::o;18574:348::-;18614:7;18637:20;18655:1;18637:20;:::i;:::-;18632:25;;18671:20;18689:1;18671:20;:::i;:::-;18666:25;;18859:1;18791:66;18787:74;18784:1;18781:81;18776:1;18769:9;18762:17;18758:105;18755:131;;;18866:18;;:::i;:::-;18755:131;18914:1;18911;18907:9;18896:20;;18574:348;;;;:::o;18928:170::-;19068:22;19064:1;19056:6;19052:14;19045:46;18928:170;:::o;19104:366::-;19246:3;19267:67;19331:2;19326:3;19267:67;:::i;:::-;19260:74;;19343:93;19432:3;19343:93;:::i;:::-;19461:2;19456:3;19452:12;19445:19;;19104:366;;;:::o;19476:419::-;19642:4;19680:2;19669:9;19665:18;19657:26;;19729:9;19723:4;19719:20;19715:1;19704:9;19700:17;19693:47;19757:131;19883:4;19757:131;:::i;:::-;19749:139;;19476:419;;;:::o;19901:134::-;19959:9;19992:37;20023:5;19992:37;:::i;:::-;19979:50;;19901:134;;;:::o;20041:147::-;20136:45;20175:5;20136:45;:::i;:::-;20131:3;20124:58;20041:147;;:::o;20194:238::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20346:79;20422:1;20411:9;20407:17;20398:6;20346:79;:::i;:::-;20194:238;;;;:::o;20438:191::-;20478:4;20498:20;20516:1;20498:20;:::i;:::-;20493:25;;20532:20;20550:1;20532:20;:::i;:::-;20527:25;;20571:1;20568;20565:8;20562:34;;;20576:18;;:::i;:::-;20562:34;20621:1;20618;20614:9;20606:17;;20438:191;;;;:::o;20635:173::-;20775:25;20771:1;20763:6;20759:14;20752:49;20635:173;:::o;20814:366::-;20956:3;20977:67;21041:2;21036:3;20977:67;:::i;:::-;20970:74;;21053:93;21142:3;21053:93;:::i;:::-;21171:2;21166:3;21162:12;21155:19;;20814:366;;;:::o;21186:419::-;21352:4;21390:2;21379:9;21375:18;21367:26;;21439:9;21433:4;21429:20;21425:1;21414:9;21410:17;21403:47;21467:131;21593:4;21467:131;:::i;:::-;21459:139;;21186:419;;;:::o;21611:152::-;21751:4;21747:1;21739:6;21735:14;21728:28;21611:152;:::o;21769:365::-;21911:3;21932:66;21996:1;21991:3;21932:66;:::i;:::-;21925:73;;22007:93;22096:3;22007:93;:::i;:::-;22125:2;22120:3;22116:12;22109:19;;21769:365;;;:::o;22140:419::-;22306:4;22344:2;22333:9;22329:18;22321:26;;22393:9;22387:4;22383:20;22379:1;22368:9;22364:17;22357:47;22421:131;22547:4;22421:131;:::i;:::-;22413:139;;22140:419;;;:::o;22565:156::-;22705:8;22701:1;22693:6;22689:14;22682:32;22565:156;:::o;22727:365::-;22869:3;22890:66;22954:1;22949:3;22890:66;:::i;:::-;22883:73;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22727:365;;;:::o;23098:419::-;23264:4;23302:2;23291:9;23287:18;23279:26;;23351:9;23345:4;23341:20;23337:1;23326:9;23322:17;23315:47;23379:131;23505:4;23379:131;:::i;:::-;23371:139;;23098:419;;;:::o;23523:332::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23695:71;23763:1;23752:9;23748:17;23739:6;23695:71;:::i;:::-;23776:72;23844:2;23833:9;23829:18;23820:6;23776:72;:::i;:::-;23523:332;;;;;:::o;23861:85::-;23906:7;23935:5;23924:16;;23861:85;;;:::o;23952:158::-;24010:9;24043:61;24061:42;24070:32;24096:5;24070:32;:::i;:::-;24061:42;:::i;:::-;24043:61;:::i;:::-;24030:74;;23952:158;;;:::o;24116:147::-;24211:45;24250:5;24211:45;:::i;:::-;24206:3;24199:58;24116:147;;:::o;24269:348::-;24398:4;24436:2;24425:9;24421:18;24413:26;;24449:71;24517:1;24506:9;24502:17;24493:6;24449:71;:::i;:::-;24530:80;24606:2;24595:9;24591:18;24582:6;24530:80;:::i;:::-;24269:348;;;;;:::o;24623:180::-;24671:77;24668:1;24661:88;24768:4;24765:1;24758:15;24792:4;24789:1;24782:15;24809:185;24849:1;24866:20;24884:1;24866:20;:::i;:::-;24861:25;;24900:20;24918:1;24900:20;:::i;:::-;24895:25;;24939:1;24929:35;;24944:18;;:::i;:::-;24929:35;24986:1;24983;24979:9;24974:14;;24809:185;;;;:::o;25000:305::-;25040:3;25059:20;25077:1;25059:20;:::i;:::-;25054:25;;25093:20;25111:1;25093:20;:::i;:::-;25088:25;;25247:1;25179:66;25175:74;25172:1;25169:81;25166:107;;;25253:18;;:::i;:::-;25166:107;25297:1;25294;25290:9;25283:16;;25000:305;;;;:::o;25311:177::-;25451:29;25447:1;25439:6;25435:14;25428:53;25311:177;:::o;25494:366::-;25636:3;25657:67;25721:2;25716:3;25657:67;:::i;:::-;25650:74;;25733:93;25822:3;25733:93;:::i;:::-;25851:2;25846:3;25842:12;25835:19;;25494:366;;;:::o;25866:419::-;26032:4;26070:2;26059:9;26055:18;26047:26;;26119:9;26113:4;26109:20;26105:1;26094:9;26090:17;26083:47;26147:131;26273:4;26147:131;:::i;:::-;26139:139;;25866:419;;;:::o;26291:180::-;26339:77;26336:1;26329:88;26436:4;26433:1;26426:15;26460:4;26457:1;26450:15;26477:180;26525:77;26522:1;26515:88;26622:4;26619:1;26612:15;26646:4;26643:1;26636:15;26663:143;26720:5;26751:6;26745:13;26736:22;;26767:33;26794:5;26767:33;:::i;:::-;26663:143;;;;:::o;26812:351::-;26882:6;26931:2;26919:9;26910:7;26906:23;26902:32;26899:119;;;26937:79;;:::i;:::-;26899:119;27057:1;27082:64;27138:7;27129:6;27118:9;27114:22;27082:64;:::i;:::-;27072:74;;27028:128;26812:351;;;;:::o;27169:114::-;27236:6;27270:5;27264:12;27254:22;;27169:114;;;:::o;27289:184::-;27388:11;27422:6;27417:3;27410:19;27462:4;27457:3;27453:14;27438:29;;27289:184;;;;:::o;27479:132::-;27546:4;27569:3;27561:11;;27599:4;27594:3;27590:14;27582:22;;27479:132;;;:::o;27617:108::-;27694:24;27712:5;27694:24;:::i;:::-;27689:3;27682:37;27617:108;;:::o;27731:179::-;27800:10;27821:46;27863:3;27855:6;27821:46;:::i;:::-;27899:4;27894:3;27890:14;27876:28;;27731:179;;;;:::o;27916:113::-;27986:4;28018;28013:3;28009:14;28001:22;;27916:113;;;:::o;28065:732::-;28184:3;28213:54;28261:5;28213:54;:::i;:::-;28283:86;28362:6;28357:3;28283:86;:::i;:::-;28276:93;;28393:56;28443:5;28393:56;:::i;:::-;28472:7;28503:1;28488:284;28513:6;28510:1;28507:13;28488:284;;;28589:6;28583:13;28616:63;28675:3;28660:13;28616:63;:::i;:::-;28609:70;;28702:60;28755:6;28702:60;:::i;:::-;28692:70;;28548:224;28535:1;28532;28528:9;28523:14;;28488:284;;;28492:14;28788:3;28781:10;;28189:608;;;28065:732;;;;:::o;28803:831::-;29066:4;29104:3;29093:9;29089:19;29081:27;;29118:71;29186:1;29175:9;29171:17;29162:6;29118:71;:::i;:::-;29199:80;29275:2;29264:9;29260:18;29251:6;29199:80;:::i;:::-;29326:9;29320:4;29316:20;29311:2;29300:9;29296:18;29289:48;29354:108;29457:4;29448:6;29354:108;:::i;:::-;29346:116;;29472:72;29540:2;29529:9;29525:18;29516:6;29472:72;:::i;:::-;29554:73;29622:3;29611:9;29607:19;29598:6;29554:73;:::i;:::-;28803:831;;;;;;;;:::o;29640:220::-;29780:34;29776:1;29768:6;29764:14;29757:58;29849:3;29844:2;29836:6;29832:15;29825:28;29640:220;:::o;29866:366::-;30008:3;30029:67;30093:2;30088:3;30029:67;:::i;:::-;30022:74;;30105:93;30194:3;30105:93;:::i;:::-;30223:2;30218:3;30214:12;30207:19;;29866:366;;;:::o;30238:419::-;30404:4;30442:2;30431:9;30427:18;30419:26;;30491:9;30485:4;30481:20;30477:1;30466:9;30462:17;30455:47;30519:131;30645:4;30519:131;:::i;:::-;30511:139;;30238:419;;;:::o;30663:720::-;30898:4;30936:3;30925:9;30921:19;30913:27;;30950:79;31026:1;31015:9;31011:17;31002:6;30950:79;:::i;:::-;31076:9;31070:4;31066:20;31061:2;31050:9;31046:18;31039:48;31104:108;31207:4;31198:6;31104:108;:::i;:::-;31096:116;;31222:72;31290:2;31279:9;31275:18;31266:6;31222:72;:::i;:::-;31304;31372:2;31361:9;31357:18;31348:6;31304:72;:::i;:::-;30663:720;;;;;;;:::o

Swarm Source

ipfs://9c8c2d3d222911e083926117fa3ce17cf561a771434581887b0534d2d4162bf0

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.