ETH Price: $1,638.53 (+5.45%)
 

Overview

ETH Balance

24 wei

Eth Value

Less Than $0.01 (@ $1,638.53/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve213568512024-12-08 9:23:35125 days ago1733649815IN
0xd3E4D93E...5a1B5c111
0 ETH0.000222638.22758909
Approve213568502024-12-08 9:23:23125 days ago1733649803IN
0xd3E4D93E...5a1B5c111
0 ETH0.000231318.54863204
Approve213568502024-12-08 9:23:23125 days ago1733649803IN
0xd3E4D93E...5a1B5c111
0 ETH0.000401438.54863204
Transfer210372162024-10-24 18:21:11170 days ago1729794071IN
0xd3E4D93E...5a1B5c111
0 ETH0.0006687710.70860988
Approve210320592024-10-24 1:05:35171 days ago1729731935IN
0xd3E4D93E...5a1B5c111
0 ETH0.000150835.57426237
Approve210078562024-10-20 16:02:11174 days ago1729440131IN
0xd3E4D93E...5a1B5c111
0 ETH0.000327712.11087245
Approve210039812024-10-20 3:04:23174 days ago1729393463IN
0xd3E4D93E...5a1B5c111
0 ETH0.000266255.67002439
Approve207482502024-09-14 10:28:11210 days ago1726309691IN
0xd3E4D93E...5a1B5c111
0 ETH0.000077141.63604027
Transfer207444532024-09-13 21:43:35211 days ago1726263815IN
0xd3E4D93E...5a1B5c111
0 ETH0.0006242610.00174499
Transfer207441902024-09-13 20:50:35211 days ago1726260635IN
0xd3E4D93E...5a1B5c111
0 ETH0.000355097.83591381
Transfer207441862024-09-13 20:49:35211 days ago1726260575IN
0xd3E4D93E...5a1B5c111
0 ETH0.000404376.47876932
Approve206962232024-09-07 4:06:47217 days ago1725682007IN
0xd3E4D93E...5a1B5c111
0 ETH0.00005451.15454071
Approve206816752024-09-05 3:23:35219 days ago1725506615IN
0xd3E4D93E...5a1B5c111
0 ETH0.000392798.31994781
Transfer206753152024-09-04 6:06:23220 days ago1725429983IN
0xd3E4D93E...5a1B5c111
0 ETH0.00003730.82313336
Transfer206753012024-09-04 6:03:35220 days ago1725429815IN
0xd3E4D93E...5a1B5c111
0 ETH0.000045080.72230605
Transfer206748202024-09-04 4:26:59220 days ago1725424019IN
0xd3E4D93E...5a1B5c111
0 ETH0.000063531.26779169
Approve206731992024-09-03 23:00:11221 days ago1725404411IN
0xd3E4D93E...5a1B5c111
0 ETH0.000028320.60359787
Approve206731962024-09-03 22:59:23221 days ago1725404363IN
0xd3E4D93E...5a1B5c111
0 ETH0.000051281.08761703
Approve206731862024-09-03 22:57:23221 days ago1725404243IN
0xd3E4D93E...5a1B5c111
0 ETH0.00005231.10937943
Transfer206731762024-09-03 22:55:23221 days ago1725404123IN
0xd3E4D93E...5a1B5c111
0 ETH0.000050771.12011514
Transfer206731712024-09-03 22:54:23221 days ago1725404063IN
0xd3E4D93E...5a1B5c111
0 ETH0.000051051.12644172
Transfer206731672024-09-03 22:53:35221 days ago1725404015IN
0xd3E4D93E...5a1B5c111
0 ETH0.000051171.12895479
Transfer206731632024-09-03 22:52:47221 days ago1725403967IN
0xd3E4D93E...5a1B5c111
0 ETH0.000051911.14539868
Approve206731542024-09-03 22:50:59221 days ago1725403859IN
0xd3E4D93E...5a1B5c111
0 ETH0.00005641.19481341
Transfer206722962024-09-03 19:58:47221 days ago1725393527IN
0xd3E4D93E...5a1B5c111
0 ETH0.000272044.73694521
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer210320592024-10-24 1:05:35171 days ago1729731935
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer210320592024-10-24 1:05:35171 days ago1729731935
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer210078562024-10-20 16:02:11174 days ago1729440131
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer210078562024-10-20 16:02:11174 days ago1729440131
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer210039812024-10-20 3:04:23174 days ago1729393463
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer210039812024-10-20 3:04:23174 days ago1729393463
0xd3E4D93E...5a1B5c111
0.00236646 ETH
Transfer207482522024-09-14 10:28:35210 days ago1726309715
0xd3E4D93E...5a1B5c111
0.00265536 ETH
Transfer207482522024-09-14 10:28:35210 days ago1726309715
0xd3E4D93E...5a1B5c111
0.00265536 ETH
Transfer206816772024-09-05 3:23:59219 days ago1725506639
0xd3E4D93E...5a1B5c111
0.00256361 ETH
Transfer206816772024-09-05 3:23:59219 days ago1725506639
0xd3E4D93E...5a1B5c111
0.00256361 ETH
Transfer206733262024-09-03 23:25:35221 days ago1725405935
0xd3E4D93E...5a1B5c111
0.00267568 ETH
Transfer206733262024-09-03 23:25:35221 days ago1725405935
0xd3E4D93E...5a1B5c111
0.00267568 ETH
Transfer206733032024-09-03 23:20:59221 days ago1725405659
0xd3E4D93E...5a1B5c111
0.00324903 ETH
Transfer206733032024-09-03 23:20:59221 days ago1725405659
0xd3E4D93E...5a1B5c111
0.00324903 ETH
Transfer206732292024-09-03 23:06:11221 days ago1725404771
0xd3E4D93E...5a1B5c111
0.00324903 ETH
Transfer206732292024-09-03 23:06:11221 days ago1725404771
0xd3E4D93E...5a1B5c111
0.00324903 ETH
Transfer206732112024-09-03 23:02:35221 days ago1725404555
0xd3E4D93E...5a1B5c111
0.00474509 ETH
Transfer206732112024-09-03 23:02:35221 days ago1725404555
0xd3E4D93E...5a1B5c111
0.00474509 ETH
Transfer206731992024-09-03 23:00:11221 days ago1725404411
0xd3E4D93E...5a1B5c111
0.00478534 ETH
Transfer206731992024-09-03 23:00:11221 days ago1725404411
0xd3E4D93E...5a1B5c111
0.00478534 ETH
Transfer206731592024-09-03 22:51:59221 days ago1725403919
0xd3E4D93E...5a1B5c111
0.01236606 ETH
Transfer206731592024-09-03 22:51:59221 days ago1725403919
0xd3E4D93E...5a1B5c111
0.01236606 ETH
Transfer206178412024-08-27 5:30:11228 days ago1724736611
0xd3E4D93E...5a1B5c111
0.01995157 ETH
Transfer206178412024-08-27 5:30:11228 days ago1724736611
0xd3E4D93E...5a1B5c111
0.01995157 ETH
Transfer205499442024-08-17 17:50:59238 days ago1723917059
0xd3E4D93E...5a1B5c111
0.02390483 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
$KALI

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-02
*/

//   /$$    /$$   /$$  /$$$$$$  /$$       /$$$$$$
//  /$$$$$$ | $$  /$$/ /$$__  $$| $$      |_  $$_/
// /$$__  $$| $$ /$$/ | $$  \ $$| $$        | $$  
//| $$  \__/| $$$$$/  | $$$$$$$$| $$        | $$  
//|  $$$$$$ | $$  $$  | $$__  $$| $$        | $$  
// \____  $$| $$\  $$ | $$  | $$| $$        | $$  
// /$$  \ $$| $$ \  $$| $$  | $$| $$$$$$$$ /$$$$$$
//|  $$$$$$/|__/  \__/|__/  |__/|________/|______/
// \_  $$_/                                       
//   \__/                                        


//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.8;

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

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

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

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

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

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

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

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

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

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

interface IBEP20Metadata is IBEP20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {BEP20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IBEP20-balanceOf} and {IBEP20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IBEP20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IBEP20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IBEP20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IBEP20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IBEP20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IBEP20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {BEP20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IBEP20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IBEP20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "BEP20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");

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

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

contract $KALI is BEP20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _interlock = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 public tokenLiquidityThreshold = 1e6 * 10**18;

    uint256 public genesis_block;
    uint256 private deadline = 3;
    uint256 private launchtax = 99;

    address public marketingWallet = 0xb5Cee947dDaac0C334ad31A0Df1D3B87eBb7D4a7;  // Wallet where the tax goes
    address public devWallet = 0x45e94639aCD763995c5EB8260aF37258Bb3A54A0; // Developer Wallet
    address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 dev;
    }

    Taxes public taxes = Taxes(2, 0, 0);
    Taxes public sellTaxes = Taxes(2, 0, 0);

    mapping(address => bool) public exemptFee;

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() BEP20("Kali Muscle Coin", "$KALI") {
        _tokengeneration(msg.sender, 1e10 * 10**decimals());
        exemptFee[msg.sender] = true;

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pancake pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[deadWallet] = true;
//////// JS WALLET
        exemptFee[0x23C99f168E3B3C0b5f52C094b062f0077cc69afF] = true;
//////// Mexican WALLET
        exemptFee[0x6661B69E92C80280Eb2a973ED32F5E46266cD2c2] = true;

    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing +      
                sellTaxes.dev;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (sender == pair && recipient != address(router) && !useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing +
                taxes.dev ;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 MarketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (MarketingAmt > 0) {
                payable(marketingWallet).sendValue(MarketingAmt);
            }

            uint256 devAmt = unitBalance * 2 * swapTaxes.dev;
            if (devAmt > 0) {
                payable(devWallet).sendValue(devAmt);
            }

        }
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadWallet,
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount <= 1e7, "Swap threshold amount should be lower or equal to 1% of tokens");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function SetBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity, _dev);
        require((_marketing + _liquidity + _dev) <= 12, "Must keep fees at 12% or less");
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity, _dev);
        require((_marketing + _liquidity + _dev) <= 12, "Must keep fees at 12% or less");
    }

    function EnableTrading() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require(_deadline < 5,"Deadline should be less than 5 Blocks");
        deadline = _deadline;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0),"Fee Address cannot be zero address");
        devWallet = newWallet;
    }

    function updateExemptFee(address _address, bool state) external onlyOwner {
        exemptFee[_address] = state;
    }

    function bulkExemptFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = state;
        }
    }

    function rescueBNB(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueBSC20(address tokenAdd, uint256 amount) external onlyOwner {
        require(tokenAdd != address(this), "Owner can't claim contract's balance of its own tokens");
        IBEP20(tokenAdd).transfer(owner(), amount);
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"SetBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"SetSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueBSC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600760146101000a81548160ff0219169083151502179055505f600760156101000a81548160ff0219169083151502179055505f600760166101000a81548160ff02191690831515021790555069d3c21bcecceda10000006008556003600a556063600b5573b5cee947ddaac0c334ad31a0df1d3b87ebb7d4a7600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507345e94639acd763995c5eb8260af37258bb3a54a0600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060600160405280600281526020015f81526020015f815250600e5f820151815f0155602082015181600101556040820151816002015550506040518060600160405280600281526020015f81526020015f81525060115f820151815f015560208201518160010155604082015181600201555050348015610195575f80fd5b506040518060400160405280601081526020017f4b616c69204d7573636c6520436f696e000000000000000000000000000000008152506040518060400160405280600581526020017f244b414c4900000000000000000000000000000000000000000000000000000081525081600390816102119190610aea565b5080600490816102219190610aea565b50505061024061023561072d60201b60201c565b61073460201b60201c565b610279336102526107f760201b60201c565b600a61025e9190610d21565b6402540be40061026e9190610d6b565b6107ff60201b60201c565b600160145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610330573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103549190610e0a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103dd9190610e0a565b6040518363ffffffff1660e01b81526004016103fa929190610e44565b6020604051808303815f875af1158015610416573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043a9190610e0a565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f7323c99f168e3b3c0b5f52c094b062f0077cc69aff73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f736661b69e92c80280eb2a973ed32f5e46266cd2c273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050610e93565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b80600281905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a49190610e7a565b60405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061092b57607f821691505b60208210810361093e5761093d6108e7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610965565b6109aa8683610965565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6109ee6109e96109e4846109c2565b6109cb565b6109c2565b9050919050565b5f819050919050565b610a07836109d4565b610a1b610a13826109f5565b848454610971565b825550505050565b5f90565b610a2f610a23565b610a3a8184846109fe565b505050565b5b81811015610a5d57610a525f82610a27565b600181019050610a40565b5050565b601f821115610aa257610a7381610944565b610a7c84610956565b81016020851015610a8b578190505b610a9f610a9785610956565b830182610a3f565b50505b505050565b5f82821c905092915050565b5f610ac25f1984600802610aa7565b1980831691505092915050565b5f610ada8383610ab3565b9150826002028217905092915050565b610af3826108b0565b67ffffffffffffffff811115610b0c57610b0b6108ba565b5b610b168254610914565b610b21828285610a61565b5f60209050601f831160018114610b52575f8415610b40578287015190505b610b4a8582610acf565b865550610bb1565b601f198416610b6086610944565b5f5b82811015610b8757848901518255600182019150602085019450602081019050610b62565b86831015610ba45784890151610ba0601f891682610ab3565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610c3b57808604811115610c1757610c16610bb9565b5b6001851615610c265780820291505b8081029050610c3485610be6565b9450610bfb565b94509492505050565b5f82610c535760019050610d0e565b81610c60575f9050610d0e565b8160018114610c765760028114610c8057610caf565b6001915050610d0e565b60ff841115610c9257610c91610bb9565b5b8360020a915084821115610ca957610ca8610bb9565b5b50610d0e565b5060208310610133831016604e8410600b8410161715610ce45782820a905083811115610cdf57610cde610bb9565b5b610d0e565b610cf18484846001610bf2565b92509050818404811115610d0857610d07610bb9565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610d2b826109c2565b9150610d3683610d15565b9250610d637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610c44565b905092915050565b5f610d75826109c2565b9150610d80836109c2565b9250828202610d8e816109c2565b91508282048414831517610da557610da4610bb9565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dd982610db0565b9050919050565b610de981610dcf565b8114610df3575f80fd5b50565b5f81519050610e0481610de0565b92915050565b5f60208284031215610e1f57610e1e610dac565b5b5f610e2c84828501610df6565b91505092915050565b610e3e81610dcf565b82525050565b5f604082019050610e575f830185610e35565b610e646020830184610e35565b9392505050565b610e74816109c2565b82525050565b5f602082019050610e8d5f830184610e6b565b92915050565b61440580610ea05f395ff3fe608060405260043610610228575f3560e01c8063715018a611610122578063a9059cbb116100aa578063edaa11681161006e578063edaa1168146107f3578063f2fde38b1461081b578063f66895a314610843578063f887ea401461086f578063fbe6324e146108995761022f565b8063a9059cbb146106ef578063aacebbe31461072b578063c5d32bb214610753578063c9300ed51461078f578063dd62ed3e146107b75761022f565b80638da5cb5b116100f15780638da5cb5b1461060b5780638ea5220f1461063557806395d89b411461065f578063a457c2d714610689578063a8aa1b31146106c55761022f565b8063715018a614610575578063728f8eea1461058b57806375f0a874146105b757806385141a77146105e15761022f565b8063274a533c116101b0578063441b1d3011610174578063441b1d30146104975780634a2b3b13146104bf5780634ada218b146104e75780634e736f221461051157806370a08231146105395761022f565b8063274a533c146103b7578063313ce567146103e1578063355496ca1461040b578063395093511461043357806342b6fa111461046f5761022f565b80631675d802116101f75780631675d802146102e957806318160ddd146103135780631816467f1461033d5780631d97b7cd1461036557806323b872dd1461037b5761022f565b806306fdde0314610233578063095ea7b31461025d5780630e375a5c146102995780631340538f146102c15761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108c3565b6040516102549190612d93565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612e51565b610953565b6040516102909190612ea9565b60405180910390f35b3480156102a4575f80fd5b506102bf60048036038101906102ba919061302c565b610970565b005b3480156102cc575f80fd5b506102e760048036038101906102e29190613086565b610a77565b005b3480156102f4575f80fd5b506102fd610b10565b60405161030a91906130c0565b60405180910390f35b34801561031e575f80fd5b50610327610b16565b60405161033491906130c0565b60405180910390f35b348015610348575f80fd5b50610363600480360381019061035e91906130d9565b610b1f565b005b348015610370575f80fd5b50610379610c4c565b005b348015610386575f80fd5b506103a1600480360381019061039c9190613104565b610d57565b6040516103ae9190612ea9565b60405180910390f35b3480156103c2575f80fd5b506103cb610e52565b6040516103d891906130c0565b60405180910390f35b3480156103ec575f80fd5b506103f5610e58565b604051610402919061316f565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190613188565b610e60565b005b34801561043e575f80fd5b5061045960048036038101906104549190612e51565b610f34565b6040516104669190612ea9565b60405180910390f35b34801561047a575f80fd5b50610495600480360381019061049091906131c6565b610fdb565b005b3480156104a2575f80fd5b506104bd60048036038101906104b891906131c6565b6110c5565b005b3480156104ca575f80fd5b506104e560048036038101906104e091906131f1565b61118f565b005b3480156104f2575f80fd5b506104fb6112a6565b6040516105089190612ea9565b60405180910390f35b34801561051c575f80fd5b50610537600480360381019061053291906131f1565b6112b9565b005b348015610544575f80fd5b5061055f600480360381019061055a91906130d9565b6113d0565b60405161056c91906130c0565b60405180910390f35b348015610580575f80fd5b50610589611415565b005b348015610596575f80fd5b5061059f61149c565b6040516105ae93929190613241565b60405180910390f35b3480156105c2575f80fd5b506105cb6114b3565b6040516105d89190613285565b60405180910390f35b3480156105ec575f80fd5b506105f56114d8565b6040516106029190613285565b60405180910390f35b348015610616575f80fd5b5061061f6114de565b60405161062c9190613285565b60405180910390f35b348015610640575f80fd5b50610649611506565b6040516106569190613285565b60405180910390f35b34801561066a575f80fd5b5061067361152b565b6040516106809190612d93565b60405180910390f35b348015610694575f80fd5b506106af60048036038101906106aa9190612e51565b6115bb565b6040516106bc9190612ea9565b60405180910390f35b3480156106d0575f80fd5b506106d96116aa565b6040516106e69190613285565b60405180910390f35b3480156106fa575f80fd5b5061071560048036038101906107109190612e51565b6116cf565b6040516107229190612ea9565b60405180910390f35b348015610736575f80fd5b50610751600480360381019061074c91906130d9565b6116e5565b005b34801561075e575f80fd5b50610779600480360381019061077491906130d9565b611812565b6040516107869190612ea9565b60405180910390f35b34801561079a575f80fd5b506107b560048036038101906107b09190612e51565b61182f565b005b3480156107c2575f80fd5b506107dd60048036038101906107d8919061329e565b6119a0565b6040516107ea91906130c0565b60405180910390f35b3480156107fe575f80fd5b50610819600480360381019061081491906131c6565b611a22565b005b348015610826575f80fd5b50610841600480360381019061083c91906130d9565b611b3b565b005b34801561084e575f80fd5b50610857611c31565b60405161086693929190613241565b60405180910390f35b34801561087a575f80fd5b50610883611c48565b6040516108909190613337565b60405180910390f35b3480156108a4575f80fd5b506108ad611c6d565b6040516108ba9190612ea9565b60405180910390f35b6060600380546108d29061337d565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe9061337d565b80156109495780601f1061092057610100808354040283529160200191610949565b820191905f5260205f20905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b5f61096661095f611c80565b8484611c87565b6001905092915050565b610978611c80565b73ffffffffffffffffffffffffffffffffffffffff166109966114de565b73ffffffffffffffffffffffffffffffffffffffff16146109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906133f7565b60405180910390fd5b5f5b8251811015610a72578160145f858481518110610a0e57610a0d613415565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506109ee565b505050565b610a7f611c80565b73ffffffffffffffffffffffffffffffffffffffff16610a9d6114de565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906133f7565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60085481565b5f600254905090565b610b27611c80565b73ffffffffffffffffffffffffffffffffffffffff16610b456114de565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b92906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c00906134b2565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c54611c80565b73ffffffffffffffffffffffffffffffffffffffff16610c726114de565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906133f7565b60405180910390fd5b600760169054906101000a900460ff1615610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061351a565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600981905550565b5f610d63848484611e4a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610daa611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e20906135a8565b60405180910390fd5b610e4685610e35611c80565b8584610e4191906135f3565b611c87565b60019150509392505050565b60095481565b5f6012905090565b610e68611c80565b73ffffffffffffffffffffffffffffffffffffffff16610e866114de565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed3906133f7565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610fd1610f40611c80565b848460015f610f4d611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fcc9190613626565b611c87565b6001905092915050565b610fe3611c80565b73ffffffffffffffffffffffffffffffffffffffff166110016114de565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906133f7565b60405180910390fd5b6298968081111561109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906136c9565b60405180910390fd5b6110a5610e58565b600a6110b19190613816565b816110bc9190613860565b60088190555050565b6110cd611c80565b73ffffffffffffffffffffffffffffffffffffffff166110eb6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611138906133f7565b60405180910390fd5b6111496114de565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561118b573d5f803e3d5ffd5b5050565b611197611c80565b73ffffffffffffffffffffffffffffffffffffffff166111b56114de565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906133f7565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600e5f820151815f01556020820151816001015560408201518160020155905050600c8183856112569190613626565b6112609190613626565b11156112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906138eb565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b6112c1611c80565b73ffffffffffffffffffffffffffffffffffffffff166112df6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906133f7565b60405180910390fd5b60405180606001604052808481526020018381526020018281525060115f820151815f01556020820151816001015560408201518160020155905050600c8183856113809190613626565b61138a9190613626565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906138eb565b60405180910390fd5b505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61141d611c80565b73ffffffffffffffffffffffffffffffffffffffff1661143b6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611488906133f7565b60405180910390fd5b61149a5f6123d1565b565b600e805f0154908060010154908060020154905083565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461153a9061337d565b80601f01602080910402602001604051908101604052809291908181526020018280546115669061337d565b80156115b15780601f10611588576101008083540402835291602001916115b1565b820191905f5260205f20905b81548152906001019060200180831161159457829003601f168201915b5050505050905090565b5f8060015f6115c8611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613979565b60405180910390fd5b61169f61168d611c80565b85858461169a91906135f3565b611c87565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116db338484611e4a565b6001905092915050565b6116ed611c80565b73ffffffffffffffffffffffffffffffffffffffff1661170b6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906134b2565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611837611c80565b73ffffffffffffffffffffffffffffffffffffffff166118556114de565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a2906133f7565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613a07565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61193d6114de565b836040518363ffffffff1660e01b815260040161195b929190613a25565b6020604051808303815f875af1158015611977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199b9190613a60565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a2a611c80565b73ffffffffffffffffffffffffffffffffffffffff16611a486114de565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906133f7565b60405180910390fd5b600760169054906101000a900460ff1615611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613afb565b60405180910390fd5b60058110611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613b89565b60405180910390fd5b80600a8190555050565b611b43611c80565b73ffffffffffffffffffffffffffffffffffffffff16611b616114de565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613c17565b60405180910390fd5b611c2e816123d1565b50565b6011805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613ca5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90613d33565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e3d91906130c0565b60405180910390a3505050565b5f8111611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613dc1565b60405180910390fd5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f2a575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7f57600760169054906101000a900460ff16611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590613e29565b60405180910390fd5b5b5f805f611f8a612d05565b5f60145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612029575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120435750600a546009546120409190613626565b43105b9050600760149054906101000a900460ff16806120a6575060145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806120f7575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612104575f92506122e5565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561215e575080155b156121be5760116002015460115f015460116001015461217e9190613626565b6121889190613626565b945084935060116040518060600160405290815f82015481526020016001820154815260200160028201548152505091506122e4565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16148015612267575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b8015612271575080155b156122d157600e60020154600e5f0154600e600101546122919190613626565b61229b9190613626565b9450849350600e6040518060600160405290815f82015481526020016001820154815260200160028201548152505091506122e3565b80156122e257600b549450600b5493505b5b5b5b606484876122f39190613860565b6122fd9190613e74565b9250600760159054906101000a900460ff168015612368575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612378576123778583612494565b5b61238e8888858961238991906135f3565b61269c565b5f8311156123c7575f8511156123c6575f606486886123ad9190613860565b6123b79190613e74565b90506123c489308361269c565b505b5b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612698576001600760146101000a81548160ff0219169083151502179055505f82031561267d575f6124d5306113d0565b9050600854811061267b57600160085411156124f15760085490505b5f6002846124ff9190613860565b90505f818460200151846125139190613860565b61251d9190613e74565b90505f818461252c91906135f3565b90505f47905061253b82612904565b5f814761254891906135f3565b90505f87602001518661255b91906135f3565b826125669190613e74565b90505f8860200151826125799190613860565b90505f81111561258e5761258d8682612b3a565b5b5f895f01516002846125a09190613860565b6125aa9190613860565b90505f8111156125ff576125fe81600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1590919063ffffffff16565b5b5f8a604001516002856126129190613860565b61261c9190613860565b90505f8111156126715761267081600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1590919063ffffffff16565b5b5050505050505050505b505b5f600760146101000a81548160ff0219169083151502179055505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270190613f14565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90613fa2565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156127fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f290614030565b60405180910390fd5b818161280791906135f3565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128929190613626565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f691906130c0565b60405180910390a350505050565b5f600267ffffffffffffffff8111156129205761291f612ec6565b5b60405190808252806020026020018201604052801561294e5781602001602082028036833780820191505090505b50905030815f8151811061296557612964613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a2d9190614062565b81600181518110612a4157612a40613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aa73060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c87565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b0995949392919061417d565b5f604051808303815f87803b158015612b20575f80fd5b505af1158015612b32573d5f803e3d5ffd5b505050505050565b612b663060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c87565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b8152600401612bcd969594939291906141d5565b60606040518083038185885af1158015612be9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c0e9190614248565b5050505050565b80471015612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f906142e2565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612c7d9061432d565b5f6040518083038185875af1925050503d805f8114612cb7576040519150601f19603f3d011682016040523d82523d5f602084013e612cbc565b606091505b5050905080612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf7906143b1565b60405180910390fd5b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d6582612d23565b612d6f8185612d2d565b9350612d7f818560208601612d3d565b612d8881612d4b565b840191505092915050565b5f6020820190508181035f830152612dab8184612d5b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ded82612dc4565b9050919050565b612dfd81612de3565b8114612e07575f80fd5b50565b5f81359050612e1881612df4565b92915050565b5f819050919050565b612e3081612e1e565b8114612e3a575f80fd5b50565b5f81359050612e4b81612e27565b92915050565b5f8060408385031215612e6757612e66612dbc565b5b5f612e7485828601612e0a565b9250506020612e8585828601612e3d565b9150509250929050565b5f8115159050919050565b612ea381612e8f565b82525050565b5f602082019050612ebc5f830184612e9a565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612efc82612d4b565b810181811067ffffffffffffffff82111715612f1b57612f1a612ec6565b5b80604052505050565b5f612f2d612db3565b9050612f398282612ef3565b919050565b5f67ffffffffffffffff821115612f5857612f57612ec6565b5b602082029050602081019050919050565b5f80fd5b5f612f7f612f7a84612f3e565b612f24565b90508083825260208201905060208402830185811115612fa257612fa1612f69565b5b835b81811015612fcb5780612fb78882612e0a565b845260208401935050602081019050612fa4565b5050509392505050565b5f82601f830112612fe957612fe8612ec2565b5b8135612ff9848260208601612f6d565b91505092915050565b61300b81612e8f565b8114613015575f80fd5b50565b5f8135905061302681613002565b92915050565b5f806040838503121561304257613041612dbc565b5b5f83013567ffffffffffffffff81111561305f5761305e612dc0565b5b61306b85828601612fd5565b925050602061307c85828601613018565b9150509250929050565b5f6020828403121561309b5761309a612dbc565b5b5f6130a884828501613018565b91505092915050565b6130ba81612e1e565b82525050565b5f6020820190506130d35f8301846130b1565b92915050565b5f602082840312156130ee576130ed612dbc565b5b5f6130fb84828501612e0a565b91505092915050565b5f805f6060848603121561311b5761311a612dbc565b5b5f61312886828701612e0a565b935050602061313986828701612e0a565b925050604061314a86828701612e3d565b9150509250925092565b5f60ff82169050919050565b61316981613154565b82525050565b5f6020820190506131825f830184613160565b92915050565b5f806040838503121561319e5761319d612dbc565b5b5f6131ab85828601612e0a565b92505060206131bc85828601613018565b9150509250929050565b5f602082840312156131db576131da612dbc565b5b5f6131e884828501612e3d565b91505092915050565b5f805f6060848603121561320857613207612dbc565b5b5f61321586828701612e3d565b935050602061322686828701612e3d565b925050604061323786828701612e3d565b9150509250925092565b5f6060820190506132545f8301866130b1565b61326160208301856130b1565b61326e60408301846130b1565b949350505050565b61327f81612de3565b82525050565b5f6020820190506132985f830184613276565b92915050565b5f80604083850312156132b4576132b3612dbc565b5b5f6132c185828601612e0a565b92505060206132d285828601612e0a565b9150509250929050565b5f819050919050565b5f6132ff6132fa6132f584612dc4565b6132dc565b612dc4565b9050919050565b5f613310826132e5565b9050919050565b5f61332182613306565b9050919050565b61333181613317565b82525050565b5f60208201905061334a5f830184613328565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061339457607f821691505b6020821081036133a7576133a6613350565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6133e1602083612d2d565b91506133ec826133ad565b602082019050919050565b5f6020820190508181035f83015261340e816133d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f46656520416464726573732063616e6e6f74206265207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61349c602283612d2d565b91506134a782613442565b604082019050919050565b5f6020820190508181035f8301526134c981613490565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e6700000000000000005f82015250565b5f613504601883612d2d565b915061350f826134d0565b602082019050919050565b5f6020820190508181035f830152613531816134f8565b9050919050565b7f42455032303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613592602883612d2d565b915061359d82613538565b604082019050919050565b5f6020820190508181035f8301526135bf81613586565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135fd82612e1e565b915061360883612e1e565b92508282039050818111156136205761361f6135c6565b5b92915050565b5f61363082612e1e565b915061363b83612e1e565b9250828201905080821115613653576136526135c6565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c64206265205f8201527f6c6f776572206f7220657175616c20746f203125206f6620746f6b656e730000602082015250565b5f6136b3603e83612d2d565b91506136be82613659565b604082019050919050565b5f6020820190508181035f8301526136e0816136a7565b9050919050565b5f8160011c9050919050565b5f808291508390505b600185111561373c57808604811115613718576137176135c6565b5b60018516156137275780820291505b8081029050613735856136e7565b94506136fc565b94509492505050565b5f82613754576001905061380f565b81613761575f905061380f565b81600181146137775760028114613781576137b0565b600191505061380f565b60ff841115613793576137926135c6565b5b8360020a9150848211156137aa576137a96135c6565b5b5061380f565b5060208310610133831016604e8410600b84101617156137e55782820a9050838111156137e0576137df6135c6565b5b61380f565b6137f284848460016136f3565b92509050818404811115613809576138086135c6565b5b81810290505b9392505050565b5f61382082612e1e565b915061382b83613154565b92506138587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613745565b905092915050565b5f61386a82612e1e565b915061387583612e1e565b925082820261388381612e1e565b9150828204841483151761389a576138996135c6565b5b5092915050565b7f4d757374206b656570206665657320617420313225206f72206c6573730000005f82015250565b5f6138d5601d83612d2d565b91506138e0826138a1565b602082019050919050565b5f6020820190508181035f830152613902816138c9565b9050919050565b7f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613963602583612d2d565b915061396e82613909565b604082019050919050565b5f6020820190508181035f83015261399081613957565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c5f8201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b5f6139f1603683612d2d565b91506139fc82613997565b604082019050919050565b5f6020820190508181035f830152613a1e816139e5565b9050919050565b5f604082019050613a385f830185613276565b613a4560208301846130b1565b9392505050565b5f81519050613a5a81613002565b92915050565b5f60208284031215613a7557613a74612dbc565b5b5f613a8284828501613a4c565b91505092915050565b7f43616e2774206368616e6765207768656e2074726164696e67206861732073745f8201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b5f613ae5602583612d2d565b9150613af082613a8b565b604082019050919050565b5f6020820190508181035f830152613b1281613ad9565b9050919050565b7f446561646c696e652073686f756c64206265206c657373207468616e203520425f8201527f6c6f636b73000000000000000000000000000000000000000000000000000000602082015250565b5f613b73602583612d2d565b9150613b7e82613b19565b604082019050919050565b5f6020820190508181035f830152613ba081613b67565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c01602683612d2d565b9150613c0c82613ba7565b604082019050919050565b5f6020820190508181035f830152613c2e81613bf5565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8f602483612d2d565b9150613c9a82613c35565b604082019050919050565b5f6020820190508181035f830152613cbc81613c83565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d1d602283612d2d565b9150613d2882613cc3565b604082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613dab602983612d2d565b9150613db682613d51565b604082019050919050565b5f6020820190508181035f830152613dd881613d9f565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f613e13601383612d2d565b9150613e1e82613ddf565b602082019050919050565b5f6020820190508181035f830152613e4081613e07565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e7e82612e1e565b9150613e8983612e1e565b925082613e9957613e98613e47565b5b828204905092915050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efe602583612d2d565b9150613f0982613ea4565b604082019050919050565b5f6020820190508181035f830152613f2b81613ef2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8c602383612d2d565b9150613f9782613f32565b604082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b7f42455032303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61401a602683612d2d565b915061402582613fc0565b604082019050919050565b5f6020820190508181035f8301526140478161400e565b9050919050565b5f8151905061405c81612df4565b92915050565b5f6020828403121561407757614076612dbc565b5b5f6140848482850161404e565b91505092915050565b5f819050919050565b5f6140b06140ab6140a68461408d565b6132dc565b612e1e565b9050919050565b6140c081614096565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6140f881612de3565b82525050565b5f61410983836140ef565b60208301905092915050565b5f602082019050919050565b5f61412b826140c6565b61413581856140d0565b9350614140836140e0565b805f5b8381101561417057815161415788826140fe565b975061416283614115565b925050600181019050614143565b5085935050505092915050565b5f60a0820190506141905f8301886130b1565b61419d60208301876140b7565b81810360408301526141af8186614121565b90506141be6060830185613276565b6141cb60808301846130b1565b9695505050505050565b5f60c0820190506141e85f830189613276565b6141f560208301886130b1565b61420260408301876140b7565b61420f60608301866140b7565b61421c6080830185613276565b61422960a08301846130b1565b979650505050505050565b5f8151905061424281612e27565b92915050565b5f805f6060848603121561425f5761425e612dbc565b5b5f61426c86828701614234565b935050602061427d86828701614234565b925050604061428e86828701614234565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f6142cc601d83612d2d565b91506142d782614298565b602082019050919050565b5f6020820190508181035f8301526142f9816142c0565b9050919050565b5f81905092915050565b50565b5f6143185f83614300565b91506143238261430a565b5f82019050919050565b5f6143378261430d565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f61439b603a83612d2d565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b905091905056fea2646970667358221220f413ce57f27384f6479c027bc87ce53a9b000e51a02713513ae5386548a3c7b464736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610228575f3560e01c8063715018a611610122578063a9059cbb116100aa578063edaa11681161006e578063edaa1168146107f3578063f2fde38b1461081b578063f66895a314610843578063f887ea401461086f578063fbe6324e146108995761022f565b8063a9059cbb146106ef578063aacebbe31461072b578063c5d32bb214610753578063c9300ed51461078f578063dd62ed3e146107b75761022f565b80638da5cb5b116100f15780638da5cb5b1461060b5780638ea5220f1461063557806395d89b411461065f578063a457c2d714610689578063a8aa1b31146106c55761022f565b8063715018a614610575578063728f8eea1461058b57806375f0a874146105b757806385141a77146105e15761022f565b8063274a533c116101b0578063441b1d3011610174578063441b1d30146104975780634a2b3b13146104bf5780634ada218b146104e75780634e736f221461051157806370a08231146105395761022f565b8063274a533c146103b7578063313ce567146103e1578063355496ca1461040b578063395093511461043357806342b6fa111461046f5761022f565b80631675d802116101f75780631675d802146102e957806318160ddd146103135780631816467f1461033d5780631d97b7cd1461036557806323b872dd1461037b5761022f565b806306fdde0314610233578063095ea7b31461025d5780630e375a5c146102995780631340538f146102c15761022f565b3661022f57005b5f80fd5b34801561023e575f80fd5b506102476108c3565b6040516102549190612d93565b60405180910390f35b348015610268575f80fd5b50610283600480360381019061027e9190612e51565b610953565b6040516102909190612ea9565b60405180910390f35b3480156102a4575f80fd5b506102bf60048036038101906102ba919061302c565b610970565b005b3480156102cc575f80fd5b506102e760048036038101906102e29190613086565b610a77565b005b3480156102f4575f80fd5b506102fd610b10565b60405161030a91906130c0565b60405180910390f35b34801561031e575f80fd5b50610327610b16565b60405161033491906130c0565b60405180910390f35b348015610348575f80fd5b50610363600480360381019061035e91906130d9565b610b1f565b005b348015610370575f80fd5b50610379610c4c565b005b348015610386575f80fd5b506103a1600480360381019061039c9190613104565b610d57565b6040516103ae9190612ea9565b60405180910390f35b3480156103c2575f80fd5b506103cb610e52565b6040516103d891906130c0565b60405180910390f35b3480156103ec575f80fd5b506103f5610e58565b604051610402919061316f565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190613188565b610e60565b005b34801561043e575f80fd5b5061045960048036038101906104549190612e51565b610f34565b6040516104669190612ea9565b60405180910390f35b34801561047a575f80fd5b50610495600480360381019061049091906131c6565b610fdb565b005b3480156104a2575f80fd5b506104bd60048036038101906104b891906131c6565b6110c5565b005b3480156104ca575f80fd5b506104e560048036038101906104e091906131f1565b61118f565b005b3480156104f2575f80fd5b506104fb6112a6565b6040516105089190612ea9565b60405180910390f35b34801561051c575f80fd5b50610537600480360381019061053291906131f1565b6112b9565b005b348015610544575f80fd5b5061055f600480360381019061055a91906130d9565b6113d0565b60405161056c91906130c0565b60405180910390f35b348015610580575f80fd5b50610589611415565b005b348015610596575f80fd5b5061059f61149c565b6040516105ae93929190613241565b60405180910390f35b3480156105c2575f80fd5b506105cb6114b3565b6040516105d89190613285565b60405180910390f35b3480156105ec575f80fd5b506105f56114d8565b6040516106029190613285565b60405180910390f35b348015610616575f80fd5b5061061f6114de565b60405161062c9190613285565b60405180910390f35b348015610640575f80fd5b50610649611506565b6040516106569190613285565b60405180910390f35b34801561066a575f80fd5b5061067361152b565b6040516106809190612d93565b60405180910390f35b348015610694575f80fd5b506106af60048036038101906106aa9190612e51565b6115bb565b6040516106bc9190612ea9565b60405180910390f35b3480156106d0575f80fd5b506106d96116aa565b6040516106e69190613285565b60405180910390f35b3480156106fa575f80fd5b5061071560048036038101906107109190612e51565b6116cf565b6040516107229190612ea9565b60405180910390f35b348015610736575f80fd5b50610751600480360381019061074c91906130d9565b6116e5565b005b34801561075e575f80fd5b50610779600480360381019061077491906130d9565b611812565b6040516107869190612ea9565b60405180910390f35b34801561079a575f80fd5b506107b560048036038101906107b09190612e51565b61182f565b005b3480156107c2575f80fd5b506107dd60048036038101906107d8919061329e565b6119a0565b6040516107ea91906130c0565b60405180910390f35b3480156107fe575f80fd5b50610819600480360381019061081491906131c6565b611a22565b005b348015610826575f80fd5b50610841600480360381019061083c91906130d9565b611b3b565b005b34801561084e575f80fd5b50610857611c31565b60405161086693929190613241565b60405180910390f35b34801561087a575f80fd5b50610883611c48565b6040516108909190613337565b60405180910390f35b3480156108a4575f80fd5b506108ad611c6d565b6040516108ba9190612ea9565b60405180910390f35b6060600380546108d29061337d565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe9061337d565b80156109495780601f1061092057610100808354040283529160200191610949565b820191905f5260205f20905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b5f61096661095f611c80565b8484611c87565b6001905092915050565b610978611c80565b73ffffffffffffffffffffffffffffffffffffffff166109966114de565b73ffffffffffffffffffffffffffffffffffffffff16146109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906133f7565b60405180910390fd5b5f5b8251811015610a72578160145f858481518110610a0e57610a0d613415565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506109ee565b505050565b610a7f611c80565b73ffffffffffffffffffffffffffffffffffffffff16610a9d6114de565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea906133f7565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60085481565b5f600254905090565b610b27611c80565b73ffffffffffffffffffffffffffffffffffffffff16610b456114de565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b92906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c00906134b2565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c54611c80565b73ffffffffffffffffffffffffffffffffffffffff16610c726114de565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906133f7565b60405180910390fd5b600760169054906101000a900460ff1615610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061351a565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600981905550565b5f610d63848484611e4a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610daa611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e20906135a8565b60405180910390fd5b610e4685610e35611c80565b8584610e4191906135f3565b611c87565b60019150509392505050565b60095481565b5f6012905090565b610e68611c80565b73ffffffffffffffffffffffffffffffffffffffff16610e866114de565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed3906133f7565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610fd1610f40611c80565b848460015f610f4d611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fcc9190613626565b611c87565b6001905092915050565b610fe3611c80565b73ffffffffffffffffffffffffffffffffffffffff166110016114de565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906133f7565b60405180910390fd5b6298968081111561109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906136c9565b60405180910390fd5b6110a5610e58565b600a6110b19190613816565b816110bc9190613860565b60088190555050565b6110cd611c80565b73ffffffffffffffffffffffffffffffffffffffff166110eb6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611138906133f7565b60405180910390fd5b6111496114de565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561118b573d5f803e3d5ffd5b5050565b611197611c80565b73ffffffffffffffffffffffffffffffffffffffff166111b56114de565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906133f7565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600e5f820151815f01556020820151816001015560408201518160020155905050600c8183856112569190613626565b6112609190613626565b11156112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906138eb565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b6112c1611c80565b73ffffffffffffffffffffffffffffffffffffffff166112df6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c906133f7565b60405180910390fd5b60405180606001604052808481526020018381526020018281525060115f820151815f01556020820151816001015560408201518160020155905050600c8183856113809190613626565b61138a9190613626565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906138eb565b60405180910390fd5b505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61141d611c80565b73ffffffffffffffffffffffffffffffffffffffff1661143b6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611488906133f7565b60405180910390fd5b61149a5f6123d1565b565b600e805f0154908060010154908060020154905083565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461153a9061337d565b80601f01602080910402602001604051908101604052809291908181526020018280546115669061337d565b80156115b15780601f10611588576101008083540402835291602001916115b1565b820191905f5260205f20905b81548152906001019060200180831161159457829003601f168201915b5050505050905090565b5f8060015f6115c8611c80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613979565b60405180910390fd5b61169f61168d611c80565b85858461169a91906135f3565b611c87565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116db338484611e4a565b6001905092915050565b6116ed611c80565b73ffffffffffffffffffffffffffffffffffffffff1661170b6114de565b73ffffffffffffffffffffffffffffffffffffffff1614611761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611758906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906134b2565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611837611c80565b73ffffffffffffffffffffffffffffffffffffffff166118556114de565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a2906133f7565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090613a07565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61193d6114de565b836040518363ffffffff1660e01b815260040161195b929190613a25565b6020604051808303815f875af1158015611977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199b9190613a60565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a2a611c80565b73ffffffffffffffffffffffffffffffffffffffff16611a486114de565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906133f7565b60405180910390fd5b600760169054906101000a900460ff1615611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613afb565b60405180910390fd5b60058110611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613b89565b60405180910390fd5b80600a8190555050565b611b43611c80565b73ffffffffffffffffffffffffffffffffffffffff16611b616114de565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613c17565b60405180910390fd5b611c2e816123d1565b50565b6011805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613ca5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90613d33565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e3d91906130c0565b60405180910390a3505050565b5f8111611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8390613dc1565b60405180910390fd5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611f2a575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f7f57600760169054906101000a900460ff16611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590613e29565b60405180910390fd5b5b5f805f611f8a612d05565b5f60145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612029575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120435750600a546009546120409190613626565b43105b9050600760149054906101000a900460ff16806120a6575060145f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806120f7575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612104575f92506122e5565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561215e575080155b156121be5760116002015460115f015460116001015461217e9190613626565b6121889190613626565b945084935060116040518060600160405290815f82015481526020016001820154815260200160028201548152505091506122e4565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16148015612267575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b8015612271575080155b156122d157600e60020154600e5f0154600e600101546122919190613626565b61229b9190613626565b9450849350600e6040518060600160405290815f82015481526020016001820154815260200160028201548152505091506122e3565b80156122e257600b549450600b5493505b5b5b5b606484876122f39190613860565b6122fd9190613e74565b9250600760159054906101000a900460ff168015612368575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15612378576123778583612494565b5b61238e8888858961238991906135f3565b61269c565b5f8311156123c7575f8511156123c6575f606486886123ad9190613860565b6123b79190613e74565b90506123c489308361269c565b505b5b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612698576001600760146101000a81548160ff0219169083151502179055505f82031561267d575f6124d5306113d0565b9050600854811061267b57600160085411156124f15760085490505b5f6002846124ff9190613860565b90505f818460200151846125139190613860565b61251d9190613e74565b90505f818461252c91906135f3565b90505f47905061253b82612904565b5f814761254891906135f3565b90505f87602001518661255b91906135f3565b826125669190613e74565b90505f8860200151826125799190613860565b90505f81111561258e5761258d8682612b3a565b5b5f895f01516002846125a09190613860565b6125aa9190613860565b90505f8111156125ff576125fe81600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1590919063ffffffff16565b5b5f8a604001516002856126129190613860565b61261c9190613860565b90505f8111156126715761267081600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c1590919063ffffffff16565b5b5050505050505050505b505b5f600760146101000a81548160ff0219169083151502179055505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270190613f14565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90613fa2565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156127fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f290614030565b60405180910390fd5b818161280791906135f3565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128929190613626565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f691906130c0565b60405180910390a350505050565b5f600267ffffffffffffffff8111156129205761291f612ec6565b5b60405190808252806020026020018201604052801561294e5781602001602082028036833780820191505090505b50905030815f8151811061296557612964613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a2d9190614062565b81600181518110612a4157612a40613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aa73060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c87565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612b0995949392919061417d565b5f604051808303815f87803b158015612b20575f80fd5b505af1158015612b32573d5f803e3d5ffd5b505050505050565b612b663060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611c87565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061dead426040518863ffffffff1660e01b8152600401612bcd969594939291906141d5565b60606040518083038185885af1158015612be9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612c0e9190614248565b5050505050565b80471015612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f906142e2565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051612c7d9061432d565b5f6040518083038185875af1925050503d805f8114612cb7576040519150601f19603f3d011682016040523d82523d5f602084013e612cbc565b606091505b5050905080612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf7906143b1565b60405180910390fd5b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d6582612d23565b612d6f8185612d2d565b9350612d7f818560208601612d3d565b612d8881612d4b565b840191505092915050565b5f6020820190508181035f830152612dab8184612d5b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ded82612dc4565b9050919050565b612dfd81612de3565b8114612e07575f80fd5b50565b5f81359050612e1881612df4565b92915050565b5f819050919050565b612e3081612e1e565b8114612e3a575f80fd5b50565b5f81359050612e4b81612e27565b92915050565b5f8060408385031215612e6757612e66612dbc565b5b5f612e7485828601612e0a565b9250506020612e8585828601612e3d565b9150509250929050565b5f8115159050919050565b612ea381612e8f565b82525050565b5f602082019050612ebc5f830184612e9a565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612efc82612d4b565b810181811067ffffffffffffffff82111715612f1b57612f1a612ec6565b5b80604052505050565b5f612f2d612db3565b9050612f398282612ef3565b919050565b5f67ffffffffffffffff821115612f5857612f57612ec6565b5b602082029050602081019050919050565b5f80fd5b5f612f7f612f7a84612f3e565b612f24565b90508083825260208201905060208402830185811115612fa257612fa1612f69565b5b835b81811015612fcb5780612fb78882612e0a565b845260208401935050602081019050612fa4565b5050509392505050565b5f82601f830112612fe957612fe8612ec2565b5b8135612ff9848260208601612f6d565b91505092915050565b61300b81612e8f565b8114613015575f80fd5b50565b5f8135905061302681613002565b92915050565b5f806040838503121561304257613041612dbc565b5b5f83013567ffffffffffffffff81111561305f5761305e612dc0565b5b61306b85828601612fd5565b925050602061307c85828601613018565b9150509250929050565b5f6020828403121561309b5761309a612dbc565b5b5f6130a884828501613018565b91505092915050565b6130ba81612e1e565b82525050565b5f6020820190506130d35f8301846130b1565b92915050565b5f602082840312156130ee576130ed612dbc565b5b5f6130fb84828501612e0a565b91505092915050565b5f805f6060848603121561311b5761311a612dbc565b5b5f61312886828701612e0a565b935050602061313986828701612e0a565b925050604061314a86828701612e3d565b9150509250925092565b5f60ff82169050919050565b61316981613154565b82525050565b5f6020820190506131825f830184613160565b92915050565b5f806040838503121561319e5761319d612dbc565b5b5f6131ab85828601612e0a565b92505060206131bc85828601613018565b9150509250929050565b5f602082840312156131db576131da612dbc565b5b5f6131e884828501612e3d565b91505092915050565b5f805f6060848603121561320857613207612dbc565b5b5f61321586828701612e3d565b935050602061322686828701612e3d565b925050604061323786828701612e3d565b9150509250925092565b5f6060820190506132545f8301866130b1565b61326160208301856130b1565b61326e60408301846130b1565b949350505050565b61327f81612de3565b82525050565b5f6020820190506132985f830184613276565b92915050565b5f80604083850312156132b4576132b3612dbc565b5b5f6132c185828601612e0a565b92505060206132d285828601612e0a565b9150509250929050565b5f819050919050565b5f6132ff6132fa6132f584612dc4565b6132dc565b612dc4565b9050919050565b5f613310826132e5565b9050919050565b5f61332182613306565b9050919050565b61333181613317565b82525050565b5f60208201905061334a5f830184613328565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061339457607f821691505b6020821081036133a7576133a6613350565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6133e1602083612d2d565b91506133ec826133ad565b602082019050919050565b5f6020820190508181035f83015261340e816133d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f46656520416464726573732063616e6e6f74206265207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61349c602283612d2d565b91506134a782613442565b604082019050919050565b5f6020820190508181035f8301526134c981613490565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e6700000000000000005f82015250565b5f613504601883612d2d565b915061350f826134d0565b602082019050919050565b5f6020820190508181035f830152613531816134f8565b9050919050565b7f42455032303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613592602883612d2d565b915061359d82613538565b604082019050919050565b5f6020820190508181035f8301526135bf81613586565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135fd82612e1e565b915061360883612e1e565b92508282039050818111156136205761361f6135c6565b5b92915050565b5f61363082612e1e565b915061363b83612e1e565b9250828201905080821115613653576136526135c6565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c64206265205f8201527f6c6f776572206f7220657175616c20746f203125206f6620746f6b656e730000602082015250565b5f6136b3603e83612d2d565b91506136be82613659565b604082019050919050565b5f6020820190508181035f8301526136e0816136a7565b9050919050565b5f8160011c9050919050565b5f808291508390505b600185111561373c57808604811115613718576137176135c6565b5b60018516156137275780820291505b8081029050613735856136e7565b94506136fc565b94509492505050565b5f82613754576001905061380f565b81613761575f905061380f565b81600181146137775760028114613781576137b0565b600191505061380f565b60ff841115613793576137926135c6565b5b8360020a9150848211156137aa576137a96135c6565b5b5061380f565b5060208310610133831016604e8410600b84101617156137e55782820a9050838111156137e0576137df6135c6565b5b61380f565b6137f284848460016136f3565b92509050818404811115613809576138086135c6565b5b81810290505b9392505050565b5f61382082612e1e565b915061382b83613154565b92506138587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613745565b905092915050565b5f61386a82612e1e565b915061387583612e1e565b925082820261388381612e1e565b9150828204841483151761389a576138996135c6565b5b5092915050565b7f4d757374206b656570206665657320617420313225206f72206c6573730000005f82015250565b5f6138d5601d83612d2d565b91506138e0826138a1565b602082019050919050565b5f6020820190508181035f830152613902816138c9565b9050919050565b7f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613963602583612d2d565b915061396e82613909565b604082019050919050565b5f6020820190508181035f83015261399081613957565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c5f8201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b5f6139f1603683612d2d565b91506139fc82613997565b604082019050919050565b5f6020820190508181035f830152613a1e816139e5565b9050919050565b5f604082019050613a385f830185613276565b613a4560208301846130b1565b9392505050565b5f81519050613a5a81613002565b92915050565b5f60208284031215613a7557613a74612dbc565b5b5f613a8284828501613a4c565b91505092915050565b7f43616e2774206368616e6765207768656e2074726164696e67206861732073745f8201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b5f613ae5602583612d2d565b9150613af082613a8b565b604082019050919050565b5f6020820190508181035f830152613b1281613ad9565b9050919050565b7f446561646c696e652073686f756c64206265206c657373207468616e203520425f8201527f6c6f636b73000000000000000000000000000000000000000000000000000000602082015250565b5f613b73602583612d2d565b9150613b7e82613b19565b604082019050919050565b5f6020820190508181035f830152613ba081613b67565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c01602683612d2d565b9150613c0c82613ba7565b604082019050919050565b5f6020820190508181035f830152613c2e81613bf5565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8f602483612d2d565b9150613c9a82613c35565b604082019050919050565b5f6020820190508181035f830152613cbc81613c83565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d1d602283612d2d565b9150613d2882613cc3565b604082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613dab602983612d2d565b9150613db682613d51565b604082019050919050565b5f6020820190508181035f830152613dd881613d9f565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f613e13601383612d2d565b9150613e1e82613ddf565b602082019050919050565b5f6020820190508181035f830152613e4081613e07565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e7e82612e1e565b9150613e8983612e1e565b925082613e9957613e98613e47565b5b828204905092915050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efe602583612d2d565b9150613f0982613ea4565b604082019050919050565b5f6020820190508181035f830152613f2b81613ef2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8c602383612d2d565b9150613f9782613f32565b604082019050919050565b5f6020820190508181035f830152613fb981613f80565b9050919050565b7f42455032303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61401a602683612d2d565b915061402582613fc0565b604082019050919050565b5f6020820190508181035f8301526140478161400e565b9050919050565b5f8151905061405c81612df4565b92915050565b5f6020828403121561407757614076612dbc565b5b5f6140848482850161404e565b91505092915050565b5f819050919050565b5f6140b06140ab6140a68461408d565b6132dc565b612e1e565b9050919050565b6140c081614096565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6140f881612de3565b82525050565b5f61410983836140ef565b60208301905092915050565b5f602082019050919050565b5f61412b826140c6565b61413581856140d0565b9350614140836140e0565b805f5b8381101561417057815161415788826140fe565b975061416283614115565b925050600181019050614143565b5085935050505092915050565b5f60a0820190506141905f8301886130b1565b61419d60208301876140b7565b81810360408301526141af8186614121565b90506141be6060830185613276565b6141cb60808301846130b1565b9695505050505050565b5f60c0820190506141e85f830189613276565b6141f560208301886130b1565b61420260408301876140b7565b61420f60608301866140b7565b61421c6080830185613276565b61422960a08301846130b1565b979650505050505050565b5f8151905061424281612e27565b92915050565b5f805f6060848603121561425f5761425e612dbc565b5b5f61426c86828701614234565b935050602061427d86828701614234565b925050604061428e86828701614234565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f6142cc601d83612d2d565b91506142d782614298565b602082019050919050565b5f6020820190508181035f8301526142f9816142c0565b9050919050565b5f81905092915050565b50565b5f6143185f83614300565b91506143238261430a565b5f82019050919050565b5f6143378261430d565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f61439b603a83612d2d565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b905091905056fea2646970667358221220f413ce57f27384f6479c027bc87ce53a9b000e51a02713513ae5386548a3c7b464736f6c634300081a0033

Deployed Bytecode Sourcemap

12270:10764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2901:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14208:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22408:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20367:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12534:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4021:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22089:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21398:222;;;;;;;;;;;;;:::i;:::-;;14377:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12596:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3863:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22280:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14833:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20527:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22618:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20815:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12491:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21104:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4192:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10933:94;;;;;;;;;;;;;:::i;:::-;;13108:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12705:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12913:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10710:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12817:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3120:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15089:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12380:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15507:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21886:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13198:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22738:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4811:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21628:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11035:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13150:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;12352:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12446:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2901:100;2955:13;2988:5;2981:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2901:100;:::o;14208:161::-;14283:4;14300:39;14309:12;:10;:12::i;:::-;14323:7;14332:6;14300:8;:39::i;:::-;14357:4;14350:11;;14208:161;;;;:::o;22408:202::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22505:9:::1;22500:103;22524:8;:15;22520:1;:19;22500:103;;;22586:5;22561:9;:22;22571:8;22580:1;22571:11;;;;;;;;:::i;:::-;;;;;;;;22561:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;22541:3;;;;;;;22500:103;;;;22408:202:::0;;:::o;20367:152::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20506:5:::1;20485:18;;:26;;;;;;;;;;;;;;;;;;20367:152:::0;:::o;12534:53::-;;;;:::o;4021:108::-;4082:7;4109:12;;4102:19;;4021:108;:::o;22089:183::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22192:1:::1;22171:23;;:9;:23;;::::0;22163:69:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22255:9;22243;;:21;;;;;;;;;;;;;;;;;;22089:183:::0;:::o;21398:222::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21462:14:::1;;;;;;;;;;;21461:15;21453:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21533:4;21516:14;;:21;;;;;;;;;;;;;;;;;;21569:4;21548:18;;:25;;;;;;;;;;;;;;;;;;21600:12;21584:13;:28;;;;21398:222::o:0;14377:448::-;14509:4;14526:36;14536:6;14544:9;14555:6;14526:9;:36::i;:::-;14575:24;14602:11;:19;14614:6;14602:19;;;;;;;;;;;;;;;:33;14622:12;:10;:12::i;:::-;14602:33;;;;;;;;;;;;;;;;14575:60;;14674:6;14654:16;:26;;14646:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14736:57;14745:6;14753:12;:10;:12::i;:::-;14786:6;14767:16;:25;;;;:::i;:::-;14736:8;:57::i;:::-;14813:4;14806:11;;;14377:448;;;;;:::o;12596:28::-;;;;:::o;3863:93::-;3921:5;3946:2;3939:9;;3863:93;:::o;22280:120::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22387:5:::1;22365:9;:19;22375:8;22365:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22280:120:::0;;:::o;14833:248::-;14949:4;14971:80;14980:12;:10;:12::i;:::-;14994:7;15040:10;15003:11;:25;15015:12;:10;:12::i;:::-;15003:25;;;;;;;;;;;;;;;:34;15029:7;15003:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14971:8;:80::i;:::-;15069:4;15062:11;;14833:248;;;;:::o;20527:280::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20665:3:::1;20651:10;:17;;20643:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:10;:8;:10::i;:::-;20785:2;:14;;;;:::i;:::-;20772:10;:27;;;;:::i;:::-;20746:23;:53;;;;20527:280:::0;:::o;22618:112::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22694:7:::1;:5;:7::i;:::-;22686:25;;:36;22712:9;22686:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22618:112:::0;:::o;20815:281::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20962:35:::1;;;;;;;;20968:10;20962:35;;;;20980:10;20962:35;;;;20992:4;20962:35;;::::0;20954:5:::1;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:2;21043:4;21030:10;21017;:23;;;;:::i;:::-;:30;;;;:::i;:::-;21016:38;;21008:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;20815:281:::0;;;:::o;12491:34::-;;;;;;;;;;;;;:::o;21104:286::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21256:35:::1;;;;;;;;21262:10;21256:35;;;;21274:10;21256:35;;;;21286:4;21256:35;;::::0;21244:9:::1;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;21346:2;21337:4;21324:10;21311;:23;;;;:::i;:::-;:30;;;;:::i;:::-;21310:38;;21302:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21104:286:::0;;;:::o;4192:127::-;4266:7;4293:9;:18;4303:7;4293:18;;;;;;;;;;;;;;;;4286:25;;4192:127;;;:::o;10933:94::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10998:21:::1;11016:1;10998:9;:21::i;:::-;10933:94::o:0;13108:35::-;;;;;;;;;;;;;;;;;;;:::o;12705:75::-;;;;;;;;;;;;;:::o;12913:79::-;12950:42;12913:79;:::o;10710:87::-;10756:7;10783:6;;;;;;;;;;;10776:13;;10710:87;:::o;12817:69::-;;;;;;;;;;;;;:::o;3120:104::-;3176:13;3209:7;3202:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3120:104;:::o;15089:410::-;15210:4;15232:24;15259:11;:25;15271:12;:10;:12::i;:::-;15259:25;;;;;;;;;;;;;;;:34;15285:7;15259:34;;;;;;;;;;;;;;;;15232:61;;15332:15;15312:16;:35;;15304:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15400:67;15409:12;:10;:12::i;:::-;15423:7;15451:15;15432:16;:34;;;;:::i;:::-;15400:8;:67::i;:::-;15487:4;15480:11;;;15089:410;;;;:::o;12380:19::-;;;;;;;;;;;;;:::o;15507:165::-;15585:4;15602:40;15612:10;15624:9;15635:6;15602:9;:40::i;:::-;15660:4;15653:11;;15507:165;;;;:::o;21886:195::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21995:1:::1;21974:23;;:9;:23;;::::0;21966:69:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22064:9;22046:15;;:27;;;;;;;;;;;;;;;;;;21886:195:::0;:::o;13198:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;22738:238::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22851:4:::1;22831:25;;:8;:25;;::::0;22823:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22933:8;22926:25;;;22952:7;:5;:7::i;:::-;22961:6;22926:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22738:238:::0;;:::o;4811:201::-;4945:7;4977:11;:18;4989:5;4977:18;;;;;;;;;;;;;;;:27;4996:7;4977:27;;;;;;;;;;;;;;;;4970:34;;4811:201;;;;:::o;21628:250::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21710:14:::1;;;;;;;;;;;21709:15;21701:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21797:1;21785:9;:13;21777:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21861:9;21850:8;:20;;;;21628:250:::0;:::o;11035:192::-;10856:12;:10;:12::i;:::-;10845:23;;:7;:5;:7::i;:::-;:23;;;10837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11144:1:::1;11124:22;;:8;:22;;::::0;11116:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11200:19;11210:8;11200:9;:19::i;:::-;11035:192:::0;:::o;13150:39::-;;;;;;;;;;;;;;;;;;;:::o;12352:21::-;;;;;;;;;;;;;:::o;12446:38::-;;;;;;;;;;;;;:::o;623:98::-;676:7;703:10;696:17;;623:98;:::o;9743:380::-;9896:1;9879:19;;:5;:19;;;9871:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9977:1;9958:21;;:7;:21;;;9950:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10061:6;10031:11;:18;10043:5;10031:18;;;;;;;;;;;;;;;:27;10050:7;10031:27;;;;;;;;;;;;;;;:36;;;;10099:7;10083:32;;10092:5;10083:32;;;10108:6;10083:32;;;;;;:::i;:::-;;;;;;;;9743:380;;;:::o;15680:2018::-;15830:1;15821:6;:10;15813:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15895:9;:17;15905:6;15895:17;;;;;;;;;;;;;;;;;;;;;;;;;15894:18;:43;;;;;15917:9;:20;15927:9;15917:20;;;;;;;;;;;;;;;;;;;;;;;;;15916:21;15894:43;15890:122;;;15962:14;;;;;;;;;;;15954:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15890:122;16024:15;16050:14;16075:11;16097:25;;:::i;:::-;16135:17;16156:9;:17;16166:6;16156:17;;;;;;;;;;;;;;;;;;;;;;;;;16155:18;:56;;;;;16191:9;:20;16201:9;16191:20;;;;;;;;;;;;;;;;;;;;;;;;;16190:21;16155:56;:112;;;;;16259:8;;16243:13;;:24;;;;:::i;:::-;16228:12;:39;16155:112;16135:132;;16355:10;;;;;;;;;;;:31;;;;16369:9;:17;16379:6;16369:17;;;;;;;;;;;;;;;;;;;;;;;;;16355:31;:55;;;;16390:9;:20;16400:9;16390:20;;;;;;;;;;;;;;;;;;;;;;;;;16355:55;16351:767;;;16431:1;16425:7;;16351:767;;;16496:4;;;;;;;;;;;16483:17;;:9;:17;;;:34;;;;;16505:12;16504:13;16483:34;16479:639;;;16645:9;:13;;;16600:9;:19;;;16561:9;:19;;;:58;;;;:::i;:::-;:97;;;;:::i;:::-;16534:124;;16682:7;16673:16;;16719:9;16704:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16479:639;;;16760:4;;;;;;;;;;;16750:14;;:6;:14;;;:46;;;;;16789:6;;;;;;;;;;;16768:28;;:9;:28;;;;16750:46;:63;;;;;16801:12;16800:13;16750:63;16746:372;;;16927:5;:9;;;16892:5;:15;;;16857:5;:15;;;:50;;;;:::i;:::-;:79;;;;:::i;:::-;16830:106;;16961:7;16952:16;;16998:5;16983:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16746:372;;;17025:12;17021:97;;;17064:9;;17054:19;;17097:9;;17088:18;;17021:97;16746:372;16479:639;16351:767;17156:3;17146:6;17137;:15;;;;:::i;:::-;17136:23;;;;:::i;:::-;17130:29;;17273:18;;;;;;;;;;;:36;;;;;17305:4;;;;;;;;;;;17295:14;;:6;:14;;;;17273:36;17269:72;;;17311:30;17319:7;17328:12;17311:7;:30::i;:::-;17269:72;17383:48;17399:6;17407:9;17427:3;17418:6;:12;;;;:::i;:::-;17383:15;:48::i;:::-;17452:1;17446:3;:7;17442:249;;;17528:1;17518:7;:11;17514:164;;;17550:17;17591:3;17580:7;17571:6;:16;;;;:::i;:::-;17570:24;;;;:::i;:::-;17550:44;;17613:49;17629:6;17645:4;17652:9;17613:15;:49::i;:::-;17531:147;17514:164;17442:249;15802:1896;;;;;15680:2018;;;:::o;11235:173::-;11291:16;11310:6;;;;;;;;;;;11291:25;;11336:8;11327:6;;:17;;;;;;;;;;;;;;;;;;11391:8;11360:40;;11381:8;11360:40;;;;;;;;;;;;11280:128;11235:173;:::o;17706:1603::-;13287:10;;;;;;;;;;;13282:110;;13327:4;13314:10;;:17;;;;;;;;;;;;;;;;;;17811:1:::1;17800:7;:12:::0;17797:49;17828:7:::1;17797:49;17858:23;17884:24;17902:4;17884:9;:24::i;:::-;17858:50;;17942:23;;17923:15;:42;17919:1383;;18012:1;17986:23;;:27;17982:109;;;18052:23;;18034:41;;17982:109;18162:19;18194:1;18184:7;:11;;;;:::i;:::-;18162:33;;18210:32;18304:11;18264:9;:19;;;18246:15;:37;;;;:::i;:::-;18245:70;;;;:::i;:::-;18210:105;;18330:14;18365:24;18347:15;:42;;;;:::i;:::-;18330:59;;18406:22;18431:21;18406:46;;18469:24;18486:6;18469:16;:24::i;:::-;18510:20;18557:14;18533:21;:38;;;;:::i;:::-;18510:61;;18586:19;18638:9;:19;;;18624:11;:33;;;;:::i;:::-;18608:12;:50;;;;:::i;:::-;18586:72;;18673:29;18719:9;:19;;;18705:11;:33;;;;:::i;:::-;18673:65;;18783:1;18759:21;:25;18755:172;;;18850:61;18863:24;18889:21;18850:12;:61::i;:::-;18755:172;18943:20;18984:9;:19;;;18980:1;18966:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;18943:60;;19037:1;19022:12;:16;19018:105;;;19059:48;19094:12;19067:15;;;;;;;;;;;19059:34;;;;:48;;;;:::i;:::-;19018:105;19139:14;19174:9;:13;;;19170:1;19156:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;19139:48;;19215:1;19206:6;:10;19202:87;;;19237:36;19266:6;19245:9;;;;;;;;;;;19237:28;;;;:36;;;;:::i;:::-;19202:87;17967:1335;;;;;;;;;17919:1383;17784:1525;13346:1;13375:5:::0;13362:10;;:18;;;;;;;;;;;;;;;;;;13282:110;17706:1603;;:::o;8324:578::-;8482:1;8464:20;;:6;:20;;;8456:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8566:1;8545:23;;:9;:23;;;8537:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8621:21;8645:9;:17;8655:6;8645:17;;;;;;;;;;;;;;;;8621:41;;8698:6;8681:13;:23;;8673:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8794:6;8778:13;:22;;;;:::i;:::-;8758:9;:17;8768:6;8758:17;;;;;;;;;;;;;;;:42;;;;8835:6;8811:9;:20;8821:9;8811:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8876:9;8859:35;;8868:6;8859:35;;;8887:6;8859:35;;;;;;:::i;:::-;;;;;;;;8445:457;8324:578;;;:::o;19317:534::-;19443:21;19481:1;19467:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19443:40;;19512:4;19494;19499:1;19494:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19538:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19528:4;19533:1;19528:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19564:53;19581:4;19596:6;;;;;;;;;;;19605:11;19564:8;:53::i;:::-;19656:6;;;;;;;;;;;:57;;;19728:11;19754:1;19770:4;19797;19817:15;19656:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19372:479;19317:534;:::o;19859:500::-;20007:53;20024:4;20039:6;;;;;;;;;;;20048:11;20007:8;:53::i;:::-;20103:6;;;;;;;;;;;:22;;;20134:9;20168:4;20188:11;20214:1;20257;12950:42;20325:15;20103:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19859:500;;:::o;10153:319::-;10268:6;10243:21;:31;;10235:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10322:12;10340:9;:14;;10363:6;10340:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10321:54;;;10394:7;10386:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10224:248;10153:319;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:117::-;3448:1;3445;3438:12;3462:180;3510:77;3507:1;3500:88;3607:4;3604:1;3597:15;3631:4;3628:1;3621:15;3648:281;3731:27;3753:4;3731:27;:::i;:::-;3723:6;3719:40;3861:6;3849:10;3846:22;3825:18;3813:10;3810:34;3807:62;3804:88;;;3872:18;;:::i;:::-;3804:88;3912:10;3908:2;3901:22;3691:238;3648:281;;:::o;3935:129::-;3969:6;3996:20;;:::i;:::-;3986:30;;4025:33;4053:4;4045:6;4025:33;:::i;:::-;3935:129;;;:::o;4070:311::-;4147:4;4237:18;4229:6;4226:30;4223:56;;;4259:18;;:::i;:::-;4223:56;4309:4;4301:6;4297:17;4289:25;;4369:4;4363;4359:15;4351:23;;4070:311;;;:::o;4387:117::-;4496:1;4493;4486:12;4527:710;4623:5;4648:81;4664:64;4721:6;4664:64;:::i;:::-;4648:81;:::i;:::-;4639:90;;4749:5;4778:6;4771:5;4764:21;4812:4;4805:5;4801:16;4794:23;;4865:4;4857:6;4853:17;4845:6;4841:30;4894:3;4886:6;4883:15;4880:122;;;4913:79;;:::i;:::-;4880:122;5028:6;5011:220;5045:6;5040:3;5037:15;5011:220;;;5120:3;5149:37;5182:3;5170:10;5149:37;:::i;:::-;5144:3;5137:50;5216:4;5211:3;5207:14;5200:21;;5087:144;5071:4;5066:3;5062:14;5055:21;;5011:220;;;5015:21;4629:608;;4527:710;;;;;:::o;5260:370::-;5331:5;5380:3;5373:4;5365:6;5361:17;5357:27;5347:122;;5388:79;;:::i;:::-;5347:122;5505:6;5492:20;5530:94;5620:3;5612:6;5605:4;5597:6;5593:17;5530:94;:::i;:::-;5521:103;;5337:293;5260:370;;;;:::o;5636:116::-;5706:21;5721:5;5706:21;:::i;:::-;5699:5;5696:32;5686:60;;5742:1;5739;5732:12;5686:60;5636:116;:::o;5758:133::-;5801:5;5839:6;5826:20;5817:29;;5855:30;5879:5;5855:30;:::i;:::-;5758:133;;;;:::o;5897:678::-;5987:6;5995;6044:2;6032:9;6023:7;6019:23;6015:32;6012:119;;;6050:79;;:::i;:::-;6012:119;6198:1;6187:9;6183:17;6170:31;6228:18;6220:6;6217:30;6214:117;;;6250:79;;:::i;:::-;6214:117;6355:78;6425:7;6416:6;6405:9;6401:22;6355:78;:::i;:::-;6345:88;;6141:302;6482:2;6508:50;6550:7;6541:6;6530:9;6526:22;6508:50;:::i;:::-;6498:60;;6453:115;5897:678;;;;;:::o;6581:323::-;6637:6;6686:2;6674:9;6665:7;6661:23;6657:32;6654:119;;;6692:79;;:::i;:::-;6654:119;6812:1;6837:50;6879:7;6870:6;6859:9;6855:22;6837:50;:::i;:::-;6827:60;;6783:114;6581:323;;;;:::o;6910:118::-;6997:24;7015:5;6997:24;:::i;:::-;6992:3;6985:37;6910:118;;:::o;7034:222::-;7127:4;7165:2;7154:9;7150:18;7142:26;;7178:71;7246:1;7235:9;7231:17;7222:6;7178:71;:::i;:::-;7034:222;;;;:::o;7262:329::-;7321:6;7370:2;7358:9;7349:7;7345:23;7341:32;7338:119;;;7376:79;;:::i;:::-;7338:119;7496:1;7521:53;7566:7;7557:6;7546:9;7542:22;7521:53;:::i;:::-;7511:63;;7467:117;7262:329;;;;:::o;7597:619::-;7674:6;7682;7690;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:53;7935:7;7926:6;7915:9;7911:22;7890:53;:::i;:::-;7880:63;;7836:117;7992:2;8018:53;8063:7;8054:6;8043:9;8039:22;8018:53;:::i;:::-;8008:63;;7963:118;8120:2;8146:53;8191:7;8182:6;8171:9;8167:22;8146:53;:::i;:::-;8136:63;;8091:118;7597:619;;;;;:::o;8222:86::-;8257:7;8297:4;8290:5;8286:16;8275:27;;8222:86;;;:::o;8314:112::-;8397:22;8413:5;8397:22;:::i;:::-;8392:3;8385:35;8314:112;;:::o;8432:214::-;8521:4;8559:2;8548:9;8544:18;8536:26;;8572:67;8636:1;8625:9;8621:17;8612:6;8572:67;:::i;:::-;8432:214;;;;:::o;8652:468::-;8717:6;8725;8774:2;8762:9;8753:7;8749:23;8745:32;8742:119;;;8780:79;;:::i;:::-;8742:119;8900:1;8925:53;8970:7;8961:6;8950:9;8946:22;8925:53;:::i;:::-;8915:63;;8871:117;9027:2;9053:50;9095:7;9086:6;9075:9;9071:22;9053:50;:::i;:::-;9043:60;;8998:115;8652:468;;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:619::-;9538:6;9546;9554;9603:2;9591:9;9582:7;9578:23;9574:32;9571:119;;;9609:79;;:::i;:::-;9571:119;9729:1;9754:53;9799:7;9790:6;9779:9;9775:22;9754:53;:::i;:::-;9744:63;;9700:117;9856:2;9882:53;9927:7;9918:6;9907:9;9903:22;9882:53;:::i;:::-;9872:63;;9827:118;9984:2;10010:53;10055:7;10046:6;10035:9;10031:22;10010:53;:::i;:::-;10000:63;;9955:118;9461:619;;;;;:::o;10086:442::-;10235:4;10273:2;10262:9;10258:18;10250:26;;10286:71;10354:1;10343:9;10339:17;10330:6;10286:71;:::i;:::-;10367:72;10435:2;10424:9;10420:18;10411:6;10367:72;:::i;:::-;10449;10517:2;10506:9;10502:18;10493:6;10449:72;:::i;:::-;10086:442;;;;;;:::o;10534:118::-;10621:24;10639:5;10621:24;:::i;:::-;10616:3;10609:37;10534:118;;:::o;10658:222::-;10751:4;10789:2;10778:9;10774:18;10766:26;;10802:71;10870:1;10859:9;10855:17;10846:6;10802:71;:::i;:::-;10658:222;;;;:::o;10886:474::-;10954:6;10962;11011:2;10999:9;10990:7;10986:23;10982:32;10979:119;;;11017:79;;:::i;:::-;10979:119;11137:1;11162:53;11207:7;11198:6;11187:9;11183:22;11162:53;:::i;:::-;11152:63;;11108:117;11264:2;11290:53;11335:7;11326:6;11315:9;11311:22;11290:53;:::i;:::-;11280:63;;11235:118;10886:474;;;;;:::o;11366:60::-;11394:3;11415:5;11408:12;;11366:60;;;:::o;11432:142::-;11482:9;11515:53;11533:34;11542:24;11560:5;11542:24;:::i;:::-;11533:34;:::i;:::-;11515:53;:::i;:::-;11502:66;;11432:142;;;:::o;11580:126::-;11630:9;11663:37;11694:5;11663:37;:::i;:::-;11650:50;;11580:126;;;:::o;11712:141::-;11777:9;11810:37;11841:5;11810:37;:::i;:::-;11797:50;;11712:141;;;:::o;11859:161::-;11961:52;12007:5;11961:52;:::i;:::-;11956:3;11949:65;11859:161;;:::o;12026:252::-;12134:4;12172:2;12161:9;12157:18;12149:26;;12185:86;12268:1;12257:9;12253:17;12244:6;12185:86;:::i;:::-;12026:252;;;;:::o;12284:180::-;12332:77;12329:1;12322:88;12429:4;12426:1;12419:15;12453:4;12450:1;12443:15;12470:320;12514:6;12551:1;12545:4;12541:12;12531:22;;12598:1;12592:4;12588:12;12619:18;12609:81;;12675:4;12667:6;12663:17;12653:27;;12609:81;12737:2;12729:6;12726:14;12706:18;12703:38;12700:84;;12756:18;;:::i;:::-;12700:84;12521:269;12470:320;;;:::o;12796:182::-;12936:34;12932:1;12924:6;12920:14;12913:58;12796:182;:::o;12984:366::-;13126:3;13147:67;13211:2;13206:3;13147:67;:::i;:::-;13140:74;;13223:93;13312:3;13223:93;:::i;:::-;13341:2;13336:3;13332:12;13325:19;;12984:366;;;:::o;13356:419::-;13522:4;13560:2;13549:9;13545:18;13537:26;;13609:9;13603:4;13599:20;13595:1;13584:9;13580:17;13573:47;13637:131;13763:4;13637:131;:::i;:::-;13629:139;;13356:419;;;:::o;13781:180::-;13829:77;13826:1;13819:88;13926:4;13923:1;13916:15;13950:4;13947:1;13940:15;13967:221;14107:34;14103:1;14095:6;14091:14;14084:58;14176:4;14171:2;14163:6;14159:15;14152:29;13967:221;:::o;14194:366::-;14336:3;14357:67;14421:2;14416:3;14357:67;:::i;:::-;14350:74;;14433:93;14522:3;14433:93;:::i;:::-;14551:2;14546:3;14542:12;14535:19;;14194:366;;;:::o;14566:419::-;14732:4;14770:2;14759:9;14755:18;14747:26;;14819:9;14813:4;14809:20;14805:1;14794:9;14790:17;14783:47;14847:131;14973:4;14847:131;:::i;:::-;14839:139;;14566:419;;;:::o;14991:174::-;15131:26;15127:1;15119:6;15115:14;15108:50;14991:174;:::o;15171:366::-;15313:3;15334:67;15398:2;15393:3;15334:67;:::i;:::-;15327:74;;15410:93;15499:3;15410:93;:::i;:::-;15528:2;15523:3;15519:12;15512:19;;15171:366;;;:::o;15543:419::-;15709:4;15747:2;15736:9;15732:18;15724:26;;15796:9;15790:4;15786:20;15782:1;15771:9;15767:17;15760:47;15824:131;15950:4;15824:131;:::i;:::-;15816:139;;15543:419;;;:::o;15968:227::-;16108:34;16104:1;16096:6;16092:14;16085:58;16177:10;16172:2;16164:6;16160:15;16153:35;15968:227;:::o;16201:366::-;16343:3;16364:67;16428:2;16423:3;16364:67;:::i;:::-;16357:74;;16440:93;16529:3;16440:93;:::i;:::-;16558:2;16553:3;16549:12;16542:19;;16201:366;;;:::o;16573:419::-;16739:4;16777:2;16766:9;16762:18;16754:26;;16826:9;16820:4;16816:20;16812:1;16801:9;16797:17;16790:47;16854:131;16980:4;16854:131;:::i;:::-;16846:139;;16573:419;;;:::o;16998:180::-;17046:77;17043:1;17036:88;17143:4;17140:1;17133:15;17167:4;17164:1;17157:15;17184:194;17224:4;17244:20;17262:1;17244:20;:::i;:::-;17239:25;;17278:20;17296:1;17278:20;:::i;:::-;17273:25;;17322:1;17319;17315:9;17307:17;;17346:1;17340:4;17337:11;17334:37;;;17351:18;;:::i;:::-;17334:37;17184:194;;;;:::o;17384:191::-;17424:3;17443:20;17461:1;17443:20;:::i;:::-;17438:25;;17477:20;17495:1;17477:20;:::i;:::-;17472:25;;17520:1;17517;17513:9;17506:16;;17541:3;17538:1;17535:10;17532:36;;;17548:18;;:::i;:::-;17532:36;17384:191;;;;:::o;17581:249::-;17721:34;17717:1;17709:6;17705:14;17698:58;17790:32;17785:2;17777:6;17773:15;17766:57;17581:249;:::o;17836:366::-;17978:3;17999:67;18063:2;18058:3;17999:67;:::i;:::-;17992:74;;18075:93;18164:3;18075:93;:::i;:::-;18193:2;18188:3;18184:12;18177:19;;17836:366;;;:::o;18208:419::-;18374:4;18412:2;18401:9;18397:18;18389:26;;18461:9;18455:4;18451:20;18447:1;18436:9;18432:17;18425:47;18489:131;18615:4;18489:131;:::i;:::-;18481:139;;18208:419;;;:::o;18633:102::-;18675:8;18722:5;18719:1;18715:13;18694:34;;18633:102;;;:::o;18741:848::-;18802:5;18809:4;18833:6;18824:15;;18857:5;18848:14;;18871:712;18892:1;18882:8;18879:15;18871:712;;;18987:4;18982:3;18978:14;18972:4;18969:24;18966:50;;;18996:18;;:::i;:::-;18966:50;19046:1;19036:8;19032:16;19029:451;;;19461:4;19454:5;19450:16;19441:25;;19029:451;19511:4;19505;19501:15;19493:23;;19541:32;19564:8;19541:32;:::i;:::-;19529:44;;18871:712;;;18741:848;;;;;;;:::o;19595:1073::-;19649:5;19840:8;19830:40;;19861:1;19852:10;;19863:5;;19830:40;19889:4;19879:36;;19906:1;19897:10;;19908:5;;19879:36;19975:4;20023:1;20018:27;;;;20059:1;20054:191;;;;19968:277;;20018:27;20036:1;20027:10;;20038:5;;;20054:191;20099:3;20089:8;20086:17;20083:43;;;20106:18;;:::i;:::-;20083:43;20155:8;20152:1;20148:16;20139:25;;20190:3;20183:5;20180:14;20177:40;;;20197:18;;:::i;:::-;20177:40;20230:5;;;19968:277;;20354:2;20344:8;20341:16;20335:3;20329:4;20326:13;20322:36;20304:2;20294:8;20291:16;20286:2;20280:4;20277:12;20273:35;20257:111;20254:246;;;20410:8;20404:4;20400:19;20391:28;;20445:3;20438:5;20435:14;20432:40;;;20452:18;;:::i;:::-;20432:40;20485:5;;20254:246;20525:42;20563:3;20553:8;20547:4;20544:1;20525:42;:::i;:::-;20510:57;;;;20599:4;20594:3;20590:14;20583:5;20580:25;20577:51;;;20608:18;;:::i;:::-;20577:51;20657:4;20650:5;20646:16;20637:25;;19595:1073;;;;;;:::o;20674:281::-;20732:5;20756:23;20774:4;20756:23;:::i;:::-;20748:31;;20800:25;20816:8;20800:25;:::i;:::-;20788:37;;20844:104;20881:66;20871:8;20865:4;20844:104;:::i;:::-;20835:113;;20674:281;;;;:::o;20961:410::-;21001:7;21024:20;21042:1;21024:20;:::i;:::-;21019:25;;21058:20;21076:1;21058:20;:::i;:::-;21053:25;;21113:1;21110;21106:9;21135:30;21153:11;21135:30;:::i;:::-;21124:41;;21314:1;21305:7;21301:15;21298:1;21295:22;21275:1;21268:9;21248:83;21225:139;;21344:18;;:::i;:::-;21225:139;21009:362;20961:410;;;;:::o;21377:179::-;21517:31;21513:1;21505:6;21501:14;21494:55;21377:179;:::o;21562:366::-;21704:3;21725:67;21789:2;21784:3;21725:67;:::i;:::-;21718:74;;21801:93;21890:3;21801:93;:::i;:::-;21919:2;21914:3;21910:12;21903:19;;21562:366;;;:::o;21934:419::-;22100:4;22138:2;22127:9;22123:18;22115:26;;22187:9;22181:4;22177:20;22173:1;22162:9;22158:17;22151:47;22215:131;22341:4;22215:131;:::i;:::-;22207:139;;21934:419;;;:::o;22359:224::-;22499:34;22495:1;22487:6;22483:14;22476:58;22568:7;22563:2;22555:6;22551:15;22544:32;22359:224;:::o;22589:366::-;22731:3;22752:67;22816:2;22811:3;22752:67;:::i;:::-;22745:74;;22828:93;22917:3;22828:93;:::i;:::-;22946:2;22941:3;22937:12;22930:19;;22589:366;;;:::o;22961:419::-;23127:4;23165:2;23154:9;23150:18;23142:26;;23214:9;23208:4;23204:20;23200:1;23189:9;23185:17;23178:47;23242:131;23368:4;23242:131;:::i;:::-;23234:139;;22961:419;;;:::o;23386:241::-;23526:34;23522:1;23514:6;23510:14;23503:58;23595:24;23590:2;23582:6;23578:15;23571:49;23386:241;:::o;23633:366::-;23775:3;23796:67;23860:2;23855:3;23796:67;:::i;:::-;23789:74;;23872:93;23961:3;23872:93;:::i;:::-;23990:2;23985:3;23981:12;23974:19;;23633:366;;;:::o;24005:419::-;24171:4;24209:2;24198:9;24194:18;24186:26;;24258:9;24252:4;24248:20;24244:1;24233:9;24229:17;24222:47;24286:131;24412:4;24286:131;:::i;:::-;24278:139;;24005:419;;;:::o;24430:332::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24602:71;24670:1;24659:9;24655:17;24646:6;24602:71;:::i;:::-;24683:72;24751:2;24740:9;24736:18;24727:6;24683:72;:::i;:::-;24430:332;;;;;:::o;24768:137::-;24822:5;24853:6;24847:13;24838:22;;24869:30;24893:5;24869:30;:::i;:::-;24768:137;;;;:::o;24911:345::-;24978:6;25027:2;25015:9;25006:7;25002:23;24998:32;24995:119;;;25033:79;;:::i;:::-;24995:119;25153:1;25178:61;25231:7;25222:6;25211:9;25207:22;25178:61;:::i;:::-;25168:71;;25124:125;24911:345;;;;:::o;25262:224::-;25402:34;25398:1;25390:6;25386:14;25379:58;25471:7;25466:2;25458:6;25454:15;25447:32;25262:224;:::o;25492:366::-;25634:3;25655:67;25719:2;25714:3;25655:67;:::i;:::-;25648:74;;25731:93;25820:3;25731:93;:::i;:::-;25849:2;25844:3;25840:12;25833:19;;25492:366;;;:::o;25864:419::-;26030:4;26068:2;26057:9;26053:18;26045:26;;26117:9;26111:4;26107:20;26103:1;26092:9;26088:17;26081:47;26145:131;26271:4;26145:131;:::i;:::-;26137:139;;25864:419;;;:::o;26289:224::-;26429:34;26425:1;26417:6;26413:14;26406:58;26498:7;26493:2;26485:6;26481:15;26474:32;26289:224;:::o;26519:366::-;26661:3;26682:67;26746:2;26741:3;26682:67;:::i;:::-;26675:74;;26758:93;26847:3;26758:93;:::i;:::-;26876:2;26871:3;26867:12;26860:19;;26519:366;;;:::o;26891:419::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:225::-;27456:34;27452:1;27444:6;27440:14;27433:58;27525:8;27520:2;27512:6;27508:15;27501:33;27316:225;:::o;27547:366::-;27689:3;27710:67;27774:2;27769:3;27710:67;:::i;:::-;27703:74;;27786:93;27875:3;27786:93;:::i;:::-;27904:2;27899:3;27895:12;27888:19;;27547:366;;;:::o;27919:419::-;28085:4;28123:2;28112:9;28108:18;28100:26;;28172:9;28166:4;28162:20;28158:1;28147:9;28143:17;28136:47;28200:131;28326:4;28200:131;:::i;:::-;28192:139;;27919:419;;;:::o;28344:223::-;28484:34;28480:1;28472:6;28468:14;28461:58;28553:6;28548:2;28540:6;28536:15;28529:31;28344:223;:::o;28573:366::-;28715:3;28736:67;28800:2;28795:3;28736:67;:::i;:::-;28729:74;;28812:93;28901:3;28812:93;:::i;:::-;28930:2;28925:3;28921:12;28914:19;;28573:366;;;:::o;28945:419::-;29111:4;29149:2;29138:9;29134:18;29126:26;;29198:9;29192:4;29188:20;29184:1;29173:9;29169:17;29162:47;29226:131;29352:4;29226:131;:::i;:::-;29218:139;;28945:419;;;:::o;29370:221::-;29510:34;29506:1;29498:6;29494:14;29487:58;29579:4;29574:2;29566:6;29562:15;29555:29;29370:221;:::o;29597:366::-;29739:3;29760:67;29824:2;29819:3;29760:67;:::i;:::-;29753:74;;29836:93;29925:3;29836:93;:::i;:::-;29954:2;29949:3;29945:12;29938:19;;29597:366;;;:::o;29969:419::-;30135:4;30173:2;30162:9;30158:18;30150:26;;30222:9;30216:4;30212:20;30208:1;30197:9;30193:17;30186:47;30250:131;30376:4;30250:131;:::i;:::-;30242:139;;29969:419;;;:::o;30394:228::-;30534:34;30530:1;30522:6;30518:14;30511:58;30603:11;30598:2;30590:6;30586:15;30579:36;30394:228;:::o;30628:366::-;30770:3;30791:67;30855:2;30850:3;30791:67;:::i;:::-;30784:74;;30867:93;30956:3;30867:93;:::i;:::-;30985:2;30980:3;30976:12;30969:19;;30628:366;;;:::o;31000:419::-;31166:4;31204:2;31193:9;31189:18;31181:26;;31253:9;31247:4;31243:20;31239:1;31228:9;31224:17;31217:47;31281:131;31407:4;31281:131;:::i;:::-;31273:139;;31000:419;;;:::o;31425:169::-;31565:21;31561:1;31553:6;31549:14;31542:45;31425:169;:::o;31600:366::-;31742:3;31763:67;31827:2;31822:3;31763:67;:::i;:::-;31756:74;;31839:93;31928:3;31839:93;:::i;:::-;31957:2;31952:3;31948:12;31941:19;;31600:366;;;:::o;31972:419::-;32138:4;32176:2;32165:9;32161:18;32153:26;;32225:9;32219:4;32215:20;32211:1;32200:9;32196:17;32189:47;32253:131;32379:4;32253:131;:::i;:::-;32245:139;;31972:419;;;:::o;32397:180::-;32445:77;32442:1;32435:88;32542:4;32539:1;32532:15;32566:4;32563:1;32556:15;32583:185;32623:1;32640:20;32658:1;32640:20;:::i;:::-;32635:25;;32674:20;32692:1;32674:20;:::i;:::-;32669:25;;32713:1;32703:35;;32718:18;;:::i;:::-;32703:35;32760:1;32757;32753:9;32748:14;;32583:185;;;;:::o;32774:224::-;32914:34;32910:1;32902:6;32898:14;32891:58;32983:7;32978:2;32970:6;32966:15;32959:32;32774:224;:::o;33004:366::-;33146:3;33167:67;33231:2;33226:3;33167:67;:::i;:::-;33160:74;;33243:93;33332:3;33243:93;:::i;:::-;33361:2;33356:3;33352:12;33345:19;;33004:366;;;:::o;33376:419::-;33542:4;33580:2;33569:9;33565:18;33557:26;;33629:9;33623:4;33619:20;33615:1;33604:9;33600:17;33593:47;33657:131;33783:4;33657:131;:::i;:::-;33649:139;;33376:419;;;:::o;33801:222::-;33941:34;33937:1;33929:6;33925:14;33918:58;34010:5;34005:2;33997:6;33993:15;33986:30;33801:222;:::o;34029:366::-;34171:3;34192:67;34256:2;34251:3;34192:67;:::i;:::-;34185:74;;34268:93;34357:3;34268:93;:::i;:::-;34386:2;34381:3;34377:12;34370:19;;34029:366;;;:::o;34401:419::-;34567:4;34605:2;34594:9;34590:18;34582:26;;34654:9;34648:4;34644:20;34640:1;34629:9;34625:17;34618:47;34682:131;34808:4;34682:131;:::i;:::-;34674:139;;34401:419;;;:::o;34826:225::-;34966:34;34962:1;34954:6;34950:14;34943:58;35035:8;35030:2;35022:6;35018:15;35011:33;34826:225;:::o;35057:366::-;35199:3;35220:67;35284:2;35279:3;35220:67;:::i;:::-;35213:74;;35296:93;35385:3;35296:93;:::i;:::-;35414:2;35409:3;35405:12;35398:19;;35057:366;;;:::o;35429:419::-;35595:4;35633:2;35622:9;35618:18;35610:26;;35682:9;35676:4;35672:20;35668:1;35657:9;35653:17;35646:47;35710:131;35836:4;35710:131;:::i;:::-;35702:139;;35429:419;;;:::o;35854:143::-;35911:5;35942:6;35936:13;35927:22;;35958:33;35985:5;35958:33;:::i;:::-;35854:143;;;;:::o;36003:351::-;36073:6;36122:2;36110:9;36101:7;36097:23;36093:32;36090:119;;;36128:79;;:::i;:::-;36090:119;36248:1;36273:64;36329:7;36320:6;36309:9;36305:22;36273:64;:::i;:::-;36263:74;;36219:128;36003:351;;;;:::o;36360:85::-;36405:7;36434:5;36423:16;;36360:85;;;:::o;36451:158::-;36509:9;36542:61;36560:42;36569:32;36595:5;36569:32;:::i;:::-;36560:42;:::i;:::-;36542:61;:::i;:::-;36529:74;;36451:158;;;:::o;36615:147::-;36710:45;36749:5;36710:45;:::i;:::-;36705:3;36698:58;36615:147;;:::o;36768:114::-;36835:6;36869:5;36863:12;36853:22;;36768:114;;;:::o;36888:184::-;36987:11;37021:6;37016:3;37009:19;37061:4;37056:3;37052:14;37037:29;;36888:184;;;;:::o;37078:132::-;37145:4;37168:3;37160:11;;37198:4;37193:3;37189:14;37181:22;;37078:132;;;:::o;37216:108::-;37293:24;37311:5;37293:24;:::i;:::-;37288:3;37281:37;37216:108;;:::o;37330:179::-;37399:10;37420:46;37462:3;37454:6;37420:46;:::i;:::-;37498:4;37493:3;37489:14;37475:28;;37330:179;;;;:::o;37515:113::-;37585:4;37617;37612:3;37608:14;37600:22;;37515:113;;;:::o;37664:732::-;37783:3;37812:54;37860:5;37812:54;:::i;:::-;37882:86;37961:6;37956:3;37882:86;:::i;:::-;37875:93;;37992:56;38042:5;37992:56;:::i;:::-;38071:7;38102:1;38087:284;38112:6;38109:1;38106:13;38087:284;;;38188:6;38182:13;38215:63;38274:3;38259:13;38215:63;:::i;:::-;38208:70;;38301:60;38354:6;38301:60;:::i;:::-;38291:70;;38147:224;38134:1;38131;38127:9;38122:14;;38087:284;;;38091:14;38387:3;38380:10;;37788:608;;;37664:732;;;;:::o;38402:831::-;38665:4;38703:3;38692:9;38688:19;38680:27;;38717:71;38785:1;38774:9;38770:17;38761:6;38717:71;:::i;:::-;38798:80;38874:2;38863:9;38859:18;38850:6;38798:80;:::i;:::-;38925:9;38919:4;38915:20;38910:2;38899:9;38895:18;38888:48;38953:108;39056:4;39047:6;38953:108;:::i;:::-;38945:116;;39071:72;39139:2;39128:9;39124:18;39115:6;39071:72;:::i;:::-;39153:73;39221:3;39210:9;39206:19;39197:6;39153:73;:::i;:::-;38402:831;;;;;;;;:::o;39239:807::-;39488:4;39526:3;39515:9;39511:19;39503:27;;39540:71;39608:1;39597:9;39593:17;39584:6;39540:71;:::i;:::-;39621:72;39689:2;39678:9;39674:18;39665:6;39621:72;:::i;:::-;39703:80;39779:2;39768:9;39764:18;39755:6;39703:80;:::i;:::-;39793;39869:2;39858:9;39854:18;39845:6;39793:80;:::i;:::-;39883:73;39951:3;39940:9;39936:19;39927:6;39883:73;:::i;:::-;39966;40034:3;40023:9;40019:19;40010:6;39966:73;:::i;:::-;39239:807;;;;;;;;;:::o;40052:143::-;40109:5;40140:6;40134:13;40125:22;;40156:33;40183:5;40156:33;:::i;:::-;40052:143;;;;:::o;40201:663::-;40289:6;40297;40305;40354:2;40342:9;40333:7;40329:23;40325:32;40322:119;;;40360:79;;:::i;:::-;40322:119;40480:1;40505:64;40561:7;40552:6;40541:9;40537:22;40505:64;:::i;:::-;40495:74;;40451:128;40618:2;40644:64;40700:7;40691:6;40680:9;40676:22;40644:64;:::i;:::-;40634:74;;40589:129;40757:2;40783:64;40839:7;40830:6;40819:9;40815:22;40783:64;:::i;:::-;40773:74;;40728:129;40201:663;;;;;:::o;40870:179::-;41010:31;41006:1;40998:6;40994:14;40987:55;40870:179;:::o;41055:366::-;41197:3;41218:67;41282:2;41277:3;41218:67;:::i;:::-;41211:74;;41294:93;41383:3;41294:93;:::i;:::-;41412:2;41407:3;41403:12;41396:19;;41055:366;;;:::o;41427:419::-;41593:4;41631:2;41620:9;41616:18;41608:26;;41680:9;41674:4;41670:20;41666:1;41655:9;41651:17;41644:47;41708:131;41834:4;41708:131;:::i;:::-;41700:139;;41427:419;;;:::o;41852:147::-;41953:11;41990:3;41975:18;;41852:147;;;;:::o;42005:114::-;;:::o;42125:398::-;42284:3;42305:83;42386:1;42381:3;42305:83;:::i;:::-;42298:90;;42397:93;42486:3;42397:93;:::i;:::-;42515:1;42510:3;42506:11;42499:18;;42125:398;;;:::o;42529:379::-;42713:3;42735:147;42878:3;42735:147;:::i;:::-;42728:154;;42899:3;42892:10;;42529:379;;;:::o;42914:245::-;43054:34;43050:1;43042:6;43038:14;43031:58;43123:28;43118:2;43110:6;43106:15;43099:53;42914:245;:::o;43165:366::-;43307:3;43328:67;43392:2;43387:3;43328:67;:::i;:::-;43321:74;;43404:93;43493:3;43404:93;:::i;:::-;43522:2;43517:3;43513:12;43506:19;;43165:366;;;:::o;43537:419::-;43703:4;43741:2;43730:9;43726:18;43718:26;;43790:9;43784:4;43780:20;43776:1;43765:9;43761:17;43754:47;43818:131;43944:4;43818:131;:::i;:::-;43810:139;;43537:419;;;:::o

Swarm Source

ipfs://f413ce57f27384f6479c027bc87ce53a9b000e51a02713513ae5386548a3c7b4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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