ETH Price: $4,065.10 (+1.47%)

Contract

0xAa407cae90E31b94Fb384dBC6f79325cA0324048
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer236263752025-10-21 13:56:351 hr ago1761054995IN
0xAa407cae...cA0324048
0 ETH0.000134151.46895715
Approve236193512025-10-20 14:16:4725 hrs ago1760969807IN
0xAa407cae...cA0324048
0 ETH0.000105422.23022197
Transfer236193222025-10-20 14:10:5925 hrs ago1760969459IN
0xAa407cae...cA0324048
0 ETH0.000075470.82629023
Transfer235969452025-10-17 11:00:354 days ago1760698835IN
0xAa407cae...cA0324048
0 ETH0.000195292.63070925
Transfer235903162025-10-16 12:46:475 days ago1760618807IN
0xAa407cae...cA0324048
0 ETH0.000023760.26021007
Transfer235902582025-10-16 12:35:115 days ago1760618111IN
0xAa407cae...cA0324048
0 ETH0.000019590.21455301
Approve235897872025-10-16 11:00:115 days ago1760612411IN
0xAa407cae...cA0324048
0 ETH0.000048811.03260182
Transfer235817792025-10-15 8:04:356 days ago1760515475IN
0xAa407cae...cA0324048
0 ETH0.000019210.25887878
Transfer235815772025-10-15 7:23:476 days ago1760513027IN
0xAa407cae...cA0324048
0 ETH0.000010080.13592832
Transfer235786902025-10-14 21:42:236 days ago1760478143IN
0xAa407cae...cA0324048
0 ETH0.00010641.22940125
Approve235778332025-10-14 18:49:356 days ago1760467775IN
0xAa407cae...cA0324048
0 ETH0.000071691.51659452
Approve235776972025-10-14 18:22:236 days ago1760466143IN
0xAa407cae...cA0324048
0 ETH0.000161873.42005075
Approve235776942025-10-14 18:21:476 days ago1760466107IN
0xAa407cae...cA0324048
0 ETH0.000256475.41856987
Approve235776922025-10-14 18:21:236 days ago1760466083IN
0xAa407cae...cA0324048
0 ETH0.000078141.6530107
Approve235771432025-10-14 16:30:596 days ago1760459459IN
0xAa407cae...cA0324048
0 ETH0.00017483.71671342
Approve235770662025-10-14 16:15:356 days ago1760458535IN
0xAa407cae...cA0324048
0 ETH0.00014153.00865263
Approve235770322025-10-14 16:08:356 days ago1760458115IN
0xAa407cae...cA0324048
0 ETH0.000210054.4379723
Approve235770112025-10-14 16:04:236 days ago1760457863IN
0xAa407cae...cA0324048
0 ETH0.000171363.62042568
Transfer235763902025-10-14 13:58:117 days ago1760450291IN
0xAa407cae...cA0324048
0 ETH0.000111961.99068331
Transfer235759752025-10-14 12:34:357 days ago1760445275IN
0xAa407cae...cA0324048
0 ETH0.000044430.48658726
Transfer235702462025-10-13 17:22:117 days ago1760376131IN
0xAa407cae...cA0324048
0 ETH0.000160791.85818153
Transfer235640512025-10-12 20:32:238 days ago1760301143IN
0xAa407cae...cA0324048
0 ETH0.000025710.37037226
Transfer235640022025-10-12 20:22:358 days ago1760300555IN
0xAa407cae...cA0324048
0 ETH0.000030120.32985431
Transfer235639312025-10-12 20:08:238 days ago1760299703IN
0xAa407cae...cA0324048
0 ETH0.000118931.37434187
Transfer235635772025-10-12 18:57:238 days ago1760295443IN
0xAa407cae...cA0324048
0 ETH0.000196072.14674387
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
Crotch

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-05-17
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
 
 
interface IERC20Errors {
 
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
 
 
    error ERC20InvalidSender(address sender);
 
    error ERC20InvalidReceiver(address receiver);
 
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
 
    error ERC20InvalidApprover(address approver);
 
    error ERC20InvalidSpender(address spender);
}
 
interface IERC721Errors {
 
    error ERC721InvalidOwner(address owner);
 
    error ERC721NonexistentToken(uint256 tokenId);
 
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
 
    error ERC721InvalidSender(address sender);
 
    error ERC721InvalidReceiver(address receiver);
 
    error ERC721InsufficientApproval(address operator, uint256 tokenId);
 
    error ERC721InvalidApprover(address approver);
 
    error ERC721InvalidOperator(address operator);
}
 
 
interface IERC1155Errors {
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
 
    error ERC1155InvalidSender(address sender);
 
    error ERC1155InvalidReceiver(address receiver);
 
    error ERC1155MissingApprovalForAll(address operator, address owner);
 
    error ERC1155InvalidApprover(address approver);
 
    error ERC1155InvalidOperator(address operator);
 
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
 
    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}
 
 
abstract contract Ownable is Context {
    address private _owner;
 
    error OwnableUnauthorizedAccount(address account);
 
    error OwnableInvalidOwner(address owner);
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }
 
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
 
 
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
 
interface IERC20 {
 
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
 
    function totalSupply() external view returns (uint256);
 
    function balanceOf(address account) external view returns (uint256);
 
    function transfer(address to, uint256 value) external returns (bool);
 
    function allowance(address owner, address spender) external view returns (uint256);
 
    function approve(address spender, uint256 value) external returns (bool);
 
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}
 
interface IERC20Metadata is IERC20 {
 
    function name() external view returns (string memory);
 
 
    function symbol() external view returns (string memory);
 
    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}
 
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors, ReentrancyGuard {
    mapping(address account => uint256) private _balances;
 
    mapping(address account => mapping(address spender => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
 
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    function name() public view virtual returns (string memory) {
        return _name;
    }
 
 
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }
 
 
    function decimals() public view virtual returns (uint8) {
        return 18;
    }
 
 
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }
 
 
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }
 
 
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }
 
 
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }
 
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }
 
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }
 
        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }
 
        emit Transfer(from, to, value);
    }
 
 
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }
 
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }
 
 
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }
 
 
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}
 
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}
 
 
interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
        ) external returns (uint amountToken, uint amountETH);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

contract Crotch is ReentrancyGuard, ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    bool private swapping;
    bool public limitsDisabled;
    bool public isPancakeSwapEnable = true;
    bool public tradingEnabled = true;
    bool public dynamicLimitsEnabled = true;

    uint256 public Tax = 400; // 4%
    uint256 public taxThreshold = 4000 * 10** uint256(decimals()); // Change this value before deploy the mainnet
     // Anti-Whale Variables
    uint256 public maxTransactionAmount; // 0.2% of total supply initially
    uint256 public maxWalletAmount;      // Max tokens per wallet
    uint256 public tradingCooldown = 30; // 30 seconds cooldown
    uint256 public launchBlock;
    uint256 public sniperBlockWindow = 2;
    uint256 public contractLaunchTime;

    address public teamWallet = 0x246EADe3DC857956D5FB7B981E0C46d5314fB8fD; // Before deploy on the mainnet please change this address
    address public charityWallet = 0x6C147C0E6a9070Ad3Ce429C4f9fBF13c62070Ca8; // Before deploy on the mainnet please change this address
    address public buybackWallet = 0xc2d99a8AF865eBab4c860819d551a971608ecaA9; // Before deploy on the mainnet please change this address
    address public airdropWallet = 0x933a0da8eD2B8d960ca279E26Ec4bafd6eFB6EC5; // Before deploy on the mainnet please change this address
    
    mapping(address => uint256) private _lastTradingTime;
    mapping(address => bool) public isSniper;
    mapping(address => bool) public isExemptFromLimits;
    mapping(address => bool) public liquidityPairs; // Store multiple pairs 
    
    enum WalletType {
        TEAM, 
        CHARITY, 
        BUYBACK, 
        AIRDROP 
    }

    event UpdateThreshold(uint256 newThreshold);
    event UpdateWalletsForTeam(address team);
    event UpdateWalletsForCharity(address charity);
    event UpdateWalletsForBuyback(address buyback);
    event UpdateWalletsForAirdrop(address airdrop);
    event MaxWalletAmountUpdated(uint256 newAmount);
    event CooldownTimeUpdated(uint256 newTime);
    event ExemptFromLimitsUpdated(address account, bool isExempt);
    event DynamicLimitsUpdated(bool enabled);
    event TaxUpdated(uint256 newTax);
    event LimitsDisabled();
    event LaunchBlockInitialized(uint256 launchBlock);
    event TransferFailed(address indexed recipient, uint256 amount);
    event SniperRemoved(address indexed account);
    
    constructor() ERC20("Crotch", "CROTCH") Ownable(msg.sender) {
        uint256 totalSupply = 320_000_000 * (10**decimals());
        _mint(msg.sender, totalSupply);

        // Set initial caps
        maxTransactionAmount = totalSupply * 2 / 1000; // 0.2% of total supply
        maxWalletAmount = totalSupply * 10 / 1000;     // 1% of total supply

        // Set contract launch time
        contractLaunchTime = block.timestamp;

        // Exempt owner and contract from limits
        isExemptFromLimits[msg.sender] = true;
        isExemptFromLimits[address(this)] = true;
        
        // Exempt wallets from limits
        isExemptFromLimits[teamWallet] = true;
        isExemptFromLimits[charityWallet] = true;
        isExemptFromLimits[buybackWallet] = true;
        isExemptFromLimits[airdropWallet] = true;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D  // Deploy on Mainnet enable this UniswapV2 Ethereum Mainnet
        );
        
        uniswapV2Router = _uniswapV2Router;

        address weth = _uniswapV2Router.WETH();
        _createLiquidityPair(weth);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
    }

    // Function to set max wallet amount
    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= totalSupply() / 1000, "Max wallet amount too low");
        require(amount <= totalSupply() / 10, "Max wallet amount too high");
        maxWalletAmount = amount;
        emit MaxWalletAmountUpdated(amount);
    }

    // Function to set cooldown time
    function setTradingCooldown(uint256 time) external onlyOwner {
        require(time <= 300, "Cooldown time too high"); // Maximum 5 minutes
        tradingCooldown = time;
        emit CooldownTimeUpdated(time);
    }

    // Function to exempt address from limits
    function setExemptFromLimits(address account, bool exempt) external onlyOwner {
        isExemptFromLimits[account] = exempt;
        emit ExemptFromLimitsUpdated(account, exempt);
    }

    // Function to toggle dynamic limits
    function setDynamicLimits(bool enabled) external onlyOwner {
        dynamicLimitsEnabled = enabled;
        emit DynamicLimitsUpdated(enabled);
    }

    // Calculate current transaction limit based on token age
    function getCurrentMaxTransactionAmount() public view returns (uint256) {

        if (!dynamicLimitsEnabled || limitsDisabled) {
            return totalSupply(); // No limit if disabled
        }
        
        uint256 elapsedTime = block.timestamp - contractLaunchTime;
        
        // After 30 days, gradually increase limits
        if (elapsedTime > 30 days) {
            if (elapsedTime > 6 * 30 days) {
                // After 6 months, cap at 1% of total supply
                return totalSupply() * 10 / 1000;
            } else {
                // Linearly increase from 0.2% to 1% over 6 months
                // Avoid division before multiplication completely
                uint256 linearIncrease = (totalSupply() * 8 * elapsedTime) / (1000 * 6 * 30 days);
                return maxTransactionAmount + linearIncrease;
            }
        }
        
        return maxTransactionAmount;
    }

    function getCurrentMaxWalletAmount() public view returns (uint256) {
        if (!dynamicLimitsEnabled || limitsDisabled) {
            return totalSupply(); // No limit if disabled
        }
        
        uint256 elapsedTime = block.timestamp - contractLaunchTime;
        
        // After 30 days, gradually increase limits
        if (elapsedTime > 30 days) {
            if (elapsedTime > 6 * 30 days) {
                // After 6 months, cap at 3% of total supply
                return totalSupply() * 30 / 1000;
            } else {
                // Linearly increase from 1% to 3% over 6 months
                // Avoid division before multiplication completely
                uint256 linearIncrease = (totalSupply() * 20 * (elapsedTime - 30 days)) / (1000 * 6 * 30 days);
                return maxWalletAmount + linearIncrease;
            }
        }
        
        return maxWalletAmount;
    }

    function disableLimits() external onlyOwner {
        limitsDisabled = !limitsDisabled;
        emit LimitsDisabled();
    }

    function togglePancakeSwap() external onlyOwner {
        isPancakeSwapEnable = !isPancakeSwapEnable;
        
    }

    function setTaxThreshold(uint256 threshold) external onlyOwner {
        require(threshold >= (totalSupply() * 1) / 100_000, "Threshold too low"); // 0.001%
        taxThreshold = threshold;
        emit UpdateThreshold(taxThreshold);
    }

    function updateWallet(WalletType _walletType, address _wallet) external onlyOwner {
        require(_wallet != address(0), "Invalid address");

        if (_walletType == WalletType.TEAM) {
            teamWallet = _wallet;
            isExemptFromLimits[_wallet] = true;
            emit UpdateWalletsForTeam(_wallet);
        } else if (_walletType == WalletType.CHARITY) {
            charityWallet = _wallet;
            isExemptFromLimits[_wallet] = true;
            emit UpdateWalletsForCharity(_wallet);
        } else if (_walletType == WalletType.BUYBACK) {
            buybackWallet = _wallet;
            isExemptFromLimits[_wallet] = true;
            emit UpdateWalletsForBuyback(_wallet);
        } else if (_walletType == WalletType.AIRDROP) {
            airdropWallet = _wallet;
            isExemptFromLimits[_wallet] = true;
            emit UpdateWalletsForAirdrop(_wallet);
        }
    }

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // Add function to remove address from sniper list
    function removeSniperAddress(address account) external onlyOwner {
        require(isSniper[account], "Address is not marked as sniper");
        isSniper[account] = false;
        emit SniperRemoved(account);
    }

    function swapTokensAndDistribute() internal nonReentrant {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance == 0) return;

        swapTokensForEth(contractTokenBalance);
        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            uint256 share = ethBalance / 4;
            
            // Use fixed 35000 gas limit for all transfers
            bool success1;
            bool success2;
            bool success3;
            bool success4;
            
            (success1,) = payable(teamWallet).call{value: share, gas: 35000}("");
            (success2,) = payable(charityWallet).call{value: share, gas: 35000}("");
            (success3,) = payable(buybackWallet).call{value: share, gas: 35000}("");
            (success4,) = payable(airdropWallet).call{value: share, gas: 35000}("");
            
            // Emit events for any failed transfers
            if (!success1) emit TransferFailed(teamWallet, share);
            if (!success2) emit TransferFailed(charityWallet, share);
            if (!success3) emit TransferFailed(buybackWallet, share);
            if (!success4) emit TransferFailed(airdropWallet, share);
        }
    }
    
    function manualSwap() external onlyOwner {
        uint256 contractTokenBalance = balanceOf(address(this));
        require(contractTokenBalance > 0, "No tokens to swap");
        require(!swapping, "Swap in progress");
        
        swapping = true;
        swapTokensAndDistribute();
        swapping = false;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(sender != address(0), "ERC20: transfer from zero address");
        require(recipient != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(tradingEnabled || _msgSender() == owner(), "Trading is disabled");

        if (tradingEnabled) {
            // Set launch block on first buy only
            if (launchBlock == 0 && liquidityPairs[sender]) {
                launchBlock = block.number;
            }

            // Detect snipers in the early blocks
            if (block.number <= launchBlock + sniperBlockWindow && liquidityPairs[sender]) {
                isSniper[recipient] = true;
            }

            // Block sniper transfers
            require(!isSniper[sender] && !isSniper[recipient], "Sniper detected");
        }

        if (sender == owner() || recipient == owner() || 
            isExemptFromLimits[sender] || isExemptFromLimits[recipient]) {
            // Exempt transactions from limits
            _standardTransfer(sender, recipient, amount);
            return;
        }

        // Apply transaction limits
        uint256 currentMaxTxAmount = getCurrentMaxTransactionAmount();
        require(amount <= currentMaxTxAmount, "Transfer amount exceeds max transaction limit");

        // Apply wallet limits (except for liquidity pairs)
        if (!liquidityPairs[recipient]) {
            uint256 currentMaxWallet = getCurrentMaxWalletAmount();
            uint256 recipientBalance = balanceOf(recipient);
            require(recipientBalance + amount <= currentMaxWallet, "Max wallet amount exceeded");
        }

        // Anti-bot cooldown check on buys and sells
        bool isBuy = liquidityPairs[sender];
        bool isSell = liquidityPairs[recipient];
        
        if (isBuy || isSell) {
            // Check cooldown period for sender (for sells) and recipient (for buys)
            address trader = isBuy ? recipient : sender;
            
            // Skip check for exempt addresses
            if (!isExemptFromLimits[trader]) {
                uint256 lastTrade = _lastTradingTime[trader];
                require(block.timestamp >= lastTrade + tradingCooldown || lastTrade == 0, 
                        "Trading cooldown period not yet passed");
                
                // Update last trading time
                _lastTradingTime[trader] = block.timestamp;
            }
        }

        _standardTransfer(sender, recipient, amount);
    }

    function _standardTransfer(address sender, address recipient, uint256 amount) private {
        bool isBuy = liquidityPairs[sender];  
        bool isSell = liquidityPairs[recipient];

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= taxThreshold;
        
        // Flag to track if we should swap in this transaction
        bool shouldSwap = canSwap && isSell && !swapping 
                        && !isExemptFromLimits[sender] && !isExemptFromLimits[recipient];

        if (shouldSwap && isPancakeSwapEnable) {
            swapping = true;  // Set flag
            swapTokensAndDistribute();  // Call swap function
            swapping = false; // Reset flag AFTER the swap completes
        }                

        uint256 fee = 0;

        // Calculate and collect fee
        if (isBuy || isSell) {
            if (!isExemptFromLimits[sender] && !isExemptFromLimits[recipient]) {
                fee = _calculateTax(amount, Tax);
                _update(sender, address(this), fee);
                amount -= fee;
            }
        }
        // Update main transfer balances
        _update(sender, recipient, amount);

    }

    function _calculateTax(uint256 amount, uint256 taxPercentage) private pure returns (uint256) {
        return (amount * taxPercentage) / 10000;
    }

    function initializeLaunchBlock() external onlyOwner {
        require(launchBlock == 0, "Already initialized");
        launchBlock = block.number;
        emit LaunchBlockInitialized(launchBlock);
    }

    function _createLiquidityPair(address token) private {
        address pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), token);
        liquidityPairs[pair] = true;
    }

    function createLiquidityPair(address token) external onlyOwner {
        _createLiquidityPair(token);
    }
    
    function recoverStuckTokens(address token, uint256 amount) external onlyOwner nonReentrant {
        require(token != address(0), "Invalid token address");
        require(amount > 0, "Amount must be greater than zero");
        bool success = IERC20(token).transfer(owner(), amount);
        require(success, "Token transfer failed");
    }

    function recoverStuckETH(uint256 amount) external onlyOwner nonReentrant {
        require(amount > 0 && address(this).balance >= amount, "Invalid amount");
        payable(owner()).transfer(amount);
    }

    function updateTax(uint256 newTax) external onlyOwner {
        require(newTax <= 1000, "Tax too high"); // Max 10%
        Tax = newTax;
        emit TaxUpdated(newTax);
    }

    function isDynamicLimitsEnabled() external view returns (bool) {
        return dynamicLimitsEnabled;
    }

    function areAllLimitsDisabled() external view returns (bool) {
        return limitsDisabled;
    }

    receive() external payable {}
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"CooldownTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"DynamicLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"ExemptFromLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"launchBlock","type":"uint256"}],"name":"LaunchBlockInitialized","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"account","type":"address"}],"name":"SniperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"UpdateThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"airdrop","type":"address"}],"name":"UpdateWalletsForAirdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdateWalletsForBuyback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"charity","type":"address"}],"name":"UpdateWalletsForCharity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdateWalletsForTeam","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"Tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areAllLimitsDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractLaunchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"createLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dynamicLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMaxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMaxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeLaunchBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isDynamicLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPancakeSwapEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDynamicLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setTradingCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperBlockWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePancakeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingCooldown","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Crotch.WalletType","name":"_walletType","type":"uint8"},{"internalType":"address","name":"_wallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600660166101000a81548160ff0219169083151502179055506001600660176101000a81548160ff0219169083151502179055506001600660186101000a81548160ff0219169083151502179055506101906007556200006b6200075a60201b60201c565b60ff16600a6200007c919062000fc6565b610fa06200008b919062001017565b600855601e600b556002600d5573246eade3dc857956d5fb7b981e0c46d5314fb8fd600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736c147c0e6a9070ad3ce429c4f9fbf13c62070ca8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c2d99a8af865ebab4c860819d551a971608ecaa9601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073933a0da8ed2b8d960ca279e26ec4bafd6efb6ec5601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001f957600080fd5b50336040518060400160405280600681526020017f43726f74636800000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f43524f544348000000000000000000000000000000000000000000000000000081525060016000819055508160049081620002809190620012d2565b508060059081620002929190620012d2565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200030a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620003019190620013fe565b60405180910390fd5b6200031b816200076360201b60201c565b5060006200032e6200075a60201b60201c565b600a6200033c919062001428565b631312d0006200034d919062001017565b90506200036133826200082960201b60201c565b6103e860028262000373919062001017565b6200037f9190620014a8565b6009819055506103e8600a8262000397919062001017565b620003a39190620014a8565b600a8190555042600e819055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000709919062001516565b90506200071c81620008b660201b60201c565b62000751306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a0c60201b60201c565b5050506200161b565b60006012905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200089e5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620008959190620013fe565b60405180910390fd5b620008b26000838362000a2660201b60201c565b5050565b600060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000906573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200092c919062001516565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b81526004016200096892919062001548565b6020604051808303816000875af115801562000988573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ae919062001516565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000a21838383600162000c5960201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a7c57806003600082825462000a6f919062001575565b9250508190555062000b54565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000b0c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000b0393929190620015c1565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b9f578060036000828254039250508190555062000bed565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c4c9190620015fe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000cce5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000cc59190620013fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000d435760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000d3a9190620013fe565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801562000e33578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000e2a9190620015fe565b60405180910390a35b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ec75780860481111562000e9f5762000e9e62000e39565b5b600185161562000eaf5780820291505b808102905062000ebf8562000e68565b945062000e7f565b94509492505050565b60008262000ee2576001905062000fb5565b8162000ef2576000905062000fb5565b816001811462000f0b576002811462000f165762000f4c565b600191505062000fb5565b60ff84111562000f2b5762000f2a62000e39565b5b8360020a91508482111562000f455762000f4462000e39565b5b5062000fb5565b5060208310610133831016604e8410600b841016171562000f865782820a90508381111562000f805762000f7f62000e39565b5b62000fb5565b62000f95848484600162000e75565b9250905081840481111562000faf5762000fae62000e39565b5b81810290505b9392505050565b6000819050919050565b600062000fd38262000fbc565b915062000fe08362000fbc565b92506200100f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ed0565b905092915050565b6000620010248262000fbc565b9150620010318362000fbc565b9250828202620010418162000fbc565b915082820484148315176200105b576200105a62000e39565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010e457607f821691505b602082108103620010fa57620010f96200109c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620011647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001125565b62001170868362001125565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620011b3620011ad620011a78462000fbc565b62001188565b62000fbc565b9050919050565b6000819050919050565b620011cf8362001192565b620011e7620011de82620011ba565b84845462001132565b825550505050565b600090565b620011fe620011ef565b6200120b818484620011c4565b505050565b5b81811015620012335762001227600082620011f4565b60018101905062001211565b5050565b601f82111562001282576200124c8162001100565b620012578462001115565b8101602085101562001267578190505b6200127f620012768562001115565b83018262001210565b50505b505050565b600082821c905092915050565b6000620012a76000198460080262001287565b1980831691505092915050565b6000620012c2838362001294565b9150826002028217905092915050565b620012dd8262001062565b67ffffffffffffffff811115620012f957620012f86200106d565b5b620013058254620010cb565b6200131282828562001237565b600060209050601f8311600181146200134a576000841562001335578287015190505b620013418582620012b4565b865550620013b1565b601f1984166200135a8662001100565b60005b8281101562001384578489015182556001820191506020850194506020810190506200135d565b86831015620013a45784890151620013a0601f89168262001294565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620013e682620013b9565b9050919050565b620013f881620013d9565b82525050565b6000602082019050620014156000830184620013ed565b92915050565b600060ff82169050919050565b6000620014358262000fbc565b915062001442836200141b565b9250620014717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ed0565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014b58262000fbc565b9150620014c28362000fbc565b925082620014d557620014d462001479565b5b828204905092915050565b600080fd5b620014f081620013d9565b8114620014fc57600080fd5b50565b6000815190506200151081620014e5565b92915050565b6000602082840312156200152f576200152e620014e0565b5b60006200153f84828501620014ff565b91505092915050565b60006040820190506200155f6000830185620013ed565b6200156e6020830184620013ed565b9392505050565b6000620015828262000fbc565b91506200158f8362000fbc565b9250828201905080821115620015aa57620015a962000e39565b5b92915050565b620015bb8162000fbc565b82525050565b6000606082019050620015d86000830186620013ed565b620015e76020830185620015b0565b620015f66040830184620015b0565b949350505050565b6000602082019050620016156000830184620015b0565b92915050565b608051614da46200165360003960008181610d1c01528181612ef0015281816135ff015281816136e001526137070152614da46000f3fe6080604052600436106102e85760003560e01c806389947bfd11610190578063c3623b20116100dc578063d00efb2f11610095578063dd62ed3e1161006f578063dd62ed3e14610aee578063deab8aea14610b2b578063f2fde38b14610b56578063f928364c14610b7f576102ef565b8063d00efb2f14610a6f578063d576e97214610a9a578063dd4698d014610ac3576102ef565b8063c3623b2014610987578063c596f3fe1461099e578063c8c8ebe4146109c7578063cca0feb6146109f2578063cd2c6a9914610a1b578063cd34c0c214610a58576102ef565b8063a7ab56af11610149578063ab80904f11610123578063ab80904f146108dd578063ad75e48914610908578063ae3dcf2614610931578063bdc303161461095c576102ef565b8063a7ab56af1461084c578063a9059cbb14610875578063aa4bde28146108b2576102ef565b806389947bfd146107505780638da5cb5b1461077957806395d89b41146107a457806398e122fd146107cf578063a13d1a2b146107f8578063a14779c914610821576102ef565b806338eac85d1161024f5780635992704411610208578063715018a6116101e2578063715018a6146106b857806377d1440d146106cf5780637b208769146106fa578063890aceb214610725576102ef565b806359927044146106255780636ea405d31461065057806370a082311461067b576102ef565b806338eac85d146105395780633a03c07e146105645780634234c60b1461058f5780634ada218b146105b857806350e8e512146105e357806351bc3c851461060e576102ef565b80631f3f8d33116102a15780631f3f8d331461041557806323b872dd1461044057806327a14fc21461047d5780632fa62740146104a6578063313ce567146104e357806334b7f7ae1461050e576102ef565b806306fdde03146102f157806307a212be1461031c578063095ea7b3146103455780630f3a325f146103825780631694505e146103bf57806318160ddd146103ea576102ef565b366102ef57005b005b3480156102fd57600080fd5b50610306610b96565b6040516103139190613a78565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613ad5565b610c28565b005b34801561035157600080fd5b5061036c60048036038101906103679190613b60565b610cd7565b6040516103799190613bbb565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613bd6565b610cfa565b6040516103b69190613bbb565b60405180910390f35b3480156103cb57600080fd5b506103d4610d1a565b6040516103e19190613c62565b60405180910390f35b3480156103f657600080fd5b506103ff610d3e565b60405161040c9190613c8c565b60405180910390f35b34801561042157600080fd5b5061042a610d48565b6040516104379190613bbb565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ca7565b610d5f565b6040516104749190613bbb565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613ad5565b610d8e565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613bd6565b610e84565b6040516104da9190613bbb565b60405180910390f35b3480156104ef57600080fd5b506104f8610ea4565b6040516105059190613d16565b60405180910390f35b34801561051a57600080fd5b50610523610ead565b6040516105309190613c8c565b60405180910390f35b34801561054557600080fd5b5061054e610eb3565b60405161055b9190613bbb565b60405180910390f35b34801561057057600080fd5b50610579610ec6565b6040516105869190613bbb565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613ad5565b610ed9565b005b3480156105c457600080fd5b506105cd610f67565b6040516105da9190613bbb565b60405180910390f35b3480156105ef57600080fd5b506105f8610f7a565b6040516106059190613c8c565b60405180910390f35b34801561061a57600080fd5b50610623610f80565b005b34801561063157600080fd5b5061063a611069565b6040516106479190613d40565b60405180910390f35b34801561065c57600080fd5b5061066561108f565b6040516106729190613c8c565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d9190613bd6565b611095565b6040516106af9190613c8c565b60405180910390f35b3480156106c457600080fd5b506106cd6110de565b005b3480156106db57600080fd5b506106e46110f2565b6040516106f19190613c8c565b60405180910390f35b34801561070657600080fd5b5061070f6110f8565b60405161071c9190613d40565b60405180910390f35b34801561073157600080fd5b5061073a61111e565b6040516107479190613c8c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613d87565b611124565b005b34801561078557600080fd5b5061078e611180565b60405161079b9190613d40565b60405180910390f35b3480156107b057600080fd5b506107b96111aa565b6040516107c69190613a78565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613bd6565b61123c565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613db4565b611250565b005b34801561082d57600080fd5b506108366112ec565b6040516108439190613d40565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613bd6565b611312565b005b34801561088157600080fd5b5061089c60048036038101906108979190613b60565b611444565b6040516108a99190613bbb565b60405180910390f35b3480156108be57600080fd5b506108c7611467565b6040516108d49190613c8c565b60405180910390f35b3480156108e957600080fd5b506108f261146d565b6040516108ff9190613c8c565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613ad5565b611550565b005b34801561093d57600080fd5b50610946611608565b6040516109539190613c8c565b60405180910390f35b34801561096857600080fd5b506109716116f9565b60405161097e9190613bbb565b60405180910390f35b34801561099357600080fd5b5061099c611710565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613b60565b61179f565b005b3480156109d357600080fd5b506109dc611937565b6040516109e99190613c8c565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613ad5565b61193d565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190613bd6565b6119cb565b604051610a4f9190613bbb565b60405180910390f35b348015610a6457600080fd5b50610a6d6119eb565b005b348015610a7b57600080fd5b50610a84611a1f565b604051610a919190613c8c565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613e19565b611a25565b005b348015610acf57600080fd5b50610ad8611ea1565b604051610ae59190613bbb565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e59565b611eb4565b604051610b229190613c8c565b60405180910390f35b348015610b3757600080fd5b50610b40611f3b565b604051610b4d9190613d40565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613bd6565b611f61565b005b348015610b8b57600080fd5b50610b94611fe7565b005b606060048054610ba590613ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190613ec8565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b610c30612047565b620186a06001610c3e610d3e565b610c489190613f28565b610c529190613f99565b811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614016565b60405180910390fd5b806008819055507fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d01600854604051610ccc9190613c8c565b60405180910390a150565b600080610ce26120ce565b9050610cef8185856120d6565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b6000600660159054906101000a900460ff16905090565b600080610d6a6120ce565b9050610d778582856120e8565b610d8285858561217c565b60019150509392505050565b610d96612047565b6103e8610da1610d3e565b610dab9190613f99565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614082565b60405180910390fd5b600a610df7610d3e565b610e019190613f99565b811115610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906140ee565b60405180910390fd5b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e799190613c8c565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600b5481565b600660159054906101000a900460ff1681565b600660189054906101000a900460ff1681565b610ee1612047565b61012c811115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061415a565b60405180910390fd5b80600b819055507fc4d978175d3c07d16372ccefaf0cd6282f07b3b93c73c51ca598d816838b623b81604051610f5c9190613c8c565b60405180910390a150565b600660179054906101000a900460ff1681565b600e5481565b610f88612047565b6000610f9330611095565b905060008111610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf906141c6565b60405180910390fd5b600660149054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614232565b60405180910390fd5b6001600660146101000a81548160ff02191690831515021790555061104b61299e565b6000600660146101000a81548160ff02191690831515021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e6612047565b6110f06000612e26565b565b60085481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61112c612047565b80600660186101000a81548160ff0219169083151502179055507f7e0e6e2143876a516bcdac83e707a7aed20ee376e7dc65707b9d70807c54a4d0816040516111759190613bbb565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546111b990613ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546111e590613ec8565b80156112325780601f1061120757610100808354040283529160200191611232565b820191906000526020600020905b81548152906001019060200180831161121557829003601f168201915b5050505050905090565b611244612047565b61124d81612eec565b50565b611258612047565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff5ac7689d017b32b050acd71722bbd0751cfc9913acc11d642645cc2604a5a6682826040516112e0929190614252565b60405180910390a15050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131a612047565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906142c7565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb376567360405160405180910390a250565b60008061144f6120ce565b905061145c81858561217c565b600191505092915050565b600a5481565b6000600660189054906101000a900460ff1615806114975750600660159054906101000a900460ff165b156114ab576114a4610d3e565b905061154d565b6000600e54426114bb91906142e7565b905062278d008111156115465762ed4e008111156114fc576103e8600a6114e0610d3e565b6114ea9190613f28565b6114f49190613f99565b91505061154d565b600064039ef8b00082600861150f610d3e565b6115199190613f28565b6115239190613f28565b61152d9190613f99565b90508060095461153d919061431b565b9250505061154d565b6009549150505b90565b611558612047565b611560613058565b6000811180156115705750804710155b6115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061439b565b60405180910390fd5b6115b7611180565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fc573d6000803e3d6000fd5b5061160561309e565b50565b6000600660189054906101000a900460ff1615806116325750600660159054906101000a900460ff165b156116465761163f610d3e565b90506116f6565b6000600e544261165691906142e7565b905062278d008111156116ef5762ed4e00811115611697576103e8601e61167b610d3e565b6116859190613f28565b61168f9190613f99565b9150506116f6565b600064039ef8b00062278d00836116ae91906142e7565b60146116b8610d3e565b6116c29190613f28565b6116cc9190613f28565b6116d69190613f99565b905080600a546116e6919061431b565b925050506116f6565b600a549150505b90565b6000600660189054906101000a900460ff16905090565b611718612047565b6000600c541461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614407565b60405180910390fd5b43600c819055507f8da81f1d10edd7e242582e37f1e97267643687e6eb87d87c8be39d0a74ead87f600c546040516117959190613c8c565b60405180910390a1565b6117a7612047565b6117af613058565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614473565b60405180910390fd5b60008111611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906144df565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611887611180565b846040518363ffffffff1660e01b81526004016118a59291906144ff565b6020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061453d565b90508061192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906145b6565b60405180910390fd5b5061193361309e565b5050565b60095481565b611945612047565b6103e881111561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614622565b60405180910390fd5b806007819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91816040516119c09190613c8c565b60405180910390a150565b60156020528060005260406000206000915054906101000a900460ff1681565b6119f3612047565b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600c5481565b611a2d612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a939061468e565b60405180910390fd5b60006003811115611ab057611aaf6146ae565b5b826003811115611ac357611ac26146ae565b5b03611b9d5780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc593283808d96116d978f98a4d43b0d5377c2a186c00e6bc147ab590ac9d006081604051611b909190613d40565b60405180910390a1611e9d565b60016003811115611bb157611bb06146ae565b5b826003811115611bc457611bc36146ae565b5b03611c9e5780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc92adabe7e3c798b024690e02ee7d25de288e646ad1dbe65b009342bfd37a7f681604051611c919190613d40565b60405180910390a1611e9c565b60026003811115611cb257611cb16146ae565b5b826003811115611cc557611cc46146ae565b5b03611d9e5780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507e3a625ce2c1733a2f48879bc625b0e8b428365f072b18aaae4a11b26a7f187081604051611d919190613d40565b60405180910390a1611e9b565b600380811115611db157611db06146ae565b5b826003811115611dc457611dc36146ae565b5b03611e9a5780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f98feaa8b24e6c2f447c9354b74b62dd2bb32ebe2c33a556546d0e88420343e1481604051611e919190613d40565b60405180910390a15b5b5b5b5050565b600660169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f69612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd29190613d40565b60405180910390fd5b611fe481612e26565b50565b611fef612047565b600660159054906101000a900460ff1615600660156101000a81548160ff0219169083151502179055507fd0a8ff473dcac5e83a30583490a7d6b4eea5bbb9dd4aa26182b0fa8a231e0c9860405160405180910390a1565b61204f6120ce565b73ffffffffffffffffffffffffffffffffffffffff1661206d611180565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576120906120ce565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016120c39190613d40565b60405180910390fd5b565b600033905090565b6120e383838360016130a8565b505050565b60006120f48484611eb4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121765781811015612166578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161215d939291906146dd565b60405180910390fd5b612175848484840360006130a8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614786565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906147f2565b60405180910390fd5b6000811161229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614884565b60405180910390fd5b600660179054906101000a900460ff16806122f157506122bb611180565b73ffffffffffffffffffffffffffffffffffffffff166122d96120ce565b73ffffffffffffffffffffffffffffffffffffffff16145b612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906148f0565b60405180910390fd5b600660179054906101000a900460ff1615612557576000600c541480156123a05750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ad5743600c819055505b600d54600c546123bd919061431b565b43111580156124155750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612473576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d9061495c565b60405180910390fd5b5b61255f611180565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ca575061259b611180565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061261e5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806126725750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126875761268283838361327f565b612999565b600061269161146d565b9050808211156126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd906149ee565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612791576000612731611608565b9050600061273e85611095565b905081848261274d919061431b565b111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614a5a565b60405180910390fd5b50505b6000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061283c5750805b1561298a5760008261284e5786612850565b855b9050601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612988576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54816128f5919061431b565b421015806129035750600081145b612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614aec565b60405180910390fd5b42601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505b61299586868661327f565b5050505b505050565b6129a6613058565b60006129b130611095565b9050600081036129c15750612e1c565b6129ca81613560565b60004790506000811115612e195760006004826129e79190613f99565b9050600080600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612a3990614b3d565b600060405180830381858888f193505050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612acc90614b3d565b600060405180830381858888f193505050503d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b505080935050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612b5f90614b3d565b600060405180830381858888f193505050503d8060008114612b9d576040519150601f19603f3d011682016040523d82523d6000602084013e612ba2565b606091505b505080925050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612bf290614b3d565b600060405180830381858888f193505050503d8060008114612c30576040519150601f19603f3d011682016040523d82523d6000602084013e612c35565b606091505b50508091505083612cb157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612ca89190613c8c565b60405180910390a25b82612d2757601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d1e9190613c8c565b60405180910390a25b81612d9d57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d949190613c8c565b60405180910390a25b80612e1357601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612e0a9190613c8c565b60405180910390a25b50505050505b50505b612e2461309e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190614b67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b8152600401612fb7929190614b94565b6020604051808303816000875af1158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614b67565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260005403613094576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600081905550565b6001600081905550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361311a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016131119190613d40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361318c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016131839190613d40565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015613279578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516132709190613c8c565b60405180910390a35b50505050565b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600061332c30611095565b90506000600854821015905060008180156133445750835b801561335d5750600660149054906101000a900460ff16155b80156133b35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134095750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508080156134245750600660169054906101000a900460ff165b15613468576001600660146101000a81548160ff02191690831515021790555061344c61299e565b6000600660146101000a81548160ff0219169083151502179055505b600085806134735750845b1561354a57601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351c5750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135495761352d8760075461379d565b905061353a8930836137c0565b808761354691906142e7565b96505b5b6135558989896137c0565b505050505050505050565b6000600267ffffffffffffffff81111561357d5761357c614bbd565b5b6040519080825280602002602001820160405280156135ab5781602001602082028036833780820191505090505b50905030816000815181106135c3576135c2614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368c9190614b67565b816001815181106136a05761369f614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613705307f0000000000000000000000000000000000000000000000000000000000000000846120d6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613767959493929190614d14565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050505050565b600061271082846137ae9190613f28565b6137b89190613f99565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613812578060036000828254613806919061431b565b925050819055506138e7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561389f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613896939291906146dd565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613930578060036000828254039250508190555061397e565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139db9190613c8c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a22578082015181840152602081019050613a07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4a826139e8565b613a5481856139f3565b9350613a64818560208601613a04565b613a6d81613a2e565b840191505092915050565b60006020820190508181036000830152613a928184613a3f565b905092915050565b600080fd5b6000819050919050565b613ab281613a9f565b8114613abd57600080fd5b50565b600081359050613acf81613aa9565b92915050565b600060208284031215613aeb57613aea613a9a565b5b6000613af984828501613ac0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b2d82613b02565b9050919050565b613b3d81613b22565b8114613b4857600080fd5b50565b600081359050613b5a81613b34565b92915050565b60008060408385031215613b7757613b76613a9a565b5b6000613b8585828601613b4b565b9250506020613b9685828601613ac0565b9150509250929050565b60008115159050919050565b613bb581613ba0565b82525050565b6000602082019050613bd06000830184613bac565b92915050565b600060208284031215613bec57613beb613a9a565b5b6000613bfa84828501613b4b565b91505092915050565b6000819050919050565b6000613c28613c23613c1e84613b02565b613c03565b613b02565b9050919050565b6000613c3a82613c0d565b9050919050565b6000613c4c82613c2f565b9050919050565b613c5c81613c41565b82525050565b6000602082019050613c776000830184613c53565b92915050565b613c8681613a9f565b82525050565b6000602082019050613ca16000830184613c7d565b92915050565b600080600060608486031215613cc057613cbf613a9a565b5b6000613cce86828701613b4b565b9350506020613cdf86828701613b4b565b9250506040613cf086828701613ac0565b9150509250925092565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613b22565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613ba0565b8114613d6f57600080fd5b50565b600081359050613d8181613d5b565b92915050565b600060208284031215613d9d57613d9c613a9a565b5b6000613dab84828501613d72565b91505092915050565b60008060408385031215613dcb57613dca613a9a565b5b6000613dd985828601613b4b565b9250506020613dea85828601613d72565b9150509250929050565b60048110613e0157600080fd5b50565b600081359050613e1381613df4565b92915050565b60008060408385031215613e3057613e2f613a9a565b5b6000613e3e85828601613e04565b9250506020613e4f85828601613b4b565b9150509250929050565b60008060408385031215613e7057613e6f613a9a565b5b6000613e7e85828601613b4b565b9250506020613e8f85828601613b4b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee057607f821691505b602082108103613ef357613ef2613e99565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3382613a9f565b9150613f3e83613a9f565b9250828202613f4c81613a9f565b91508282048414831517613f6357613f62613ef9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa482613a9f565b9150613faf83613a9f565b925082613fbf57613fbe613f6a565b5b828204905092915050565b7f5468726573686f6c6420746f6f206c6f77000000000000000000000000000000600082015250565b60006140006011836139f3565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f206c6f7700000000000000600082015250565b600061406c6019836139f3565b915061407782614036565b602082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f2068696768000000000000600082015250565b60006140d8601a836139f3565b91506140e3826140a2565b602082019050919050565b60006020820190508181036000830152614107816140cb565b9050919050565b7f436f6f6c646f776e2074696d6520746f6f206869676800000000000000000000600082015250565b60006141446016836139f3565b915061414f8261410e565b602082019050919050565b6000602082019050818103600083015261417381614137565b9050919050565b7f4e6f20746f6b656e7320746f2073776170000000000000000000000000000000600082015250565b60006141b06011836139f3565b91506141bb8261417a565b602082019050919050565b600060208201905081810360008301526141df816141a3565b9050919050565b7f5377617020696e2070726f677265737300000000000000000000000000000000600082015250565b600061421c6010836139f3565b9150614227826141e6565b602082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b60006040820190506142676000830185613d31565b6142746020830184613bac565b9392505050565b7f41646472657373206973206e6f74206d61726b656420617320736e6970657200600082015250565b60006142b1601f836139f3565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b60006142f282613a9f565b91506142fd83613a9f565b925082820390508181111561431557614314613ef9565b5b92915050565b600061432682613a9f565b915061433183613a9f565b925082820190508082111561434957614348613ef9565b5b92915050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614385600e836139f3565b91506143908261434f565b602082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006143f16013836139f3565b91506143fc826143bb565b602082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b600061445d6015836139f3565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b60006144c96020836139f3565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b60006040820190506145146000830185613d31565b6145216020830184613c7d565b9392505050565b60008151905061453781613d5b565b92915050565b60006020828403121561455357614552613a9a565b5b600061456184828501614528565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006145a06015836139f3565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061460c600c836139f3565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000614678600f836139f3565b915061468382614642565b602082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006060820190506146f26000830186613d31565b6146ff6020830185613c7d565b61470c6040830184613c7d565b949350505050565b7f45524332303a207472616e736665722066726f6d207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147706021836139f3565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220746f207a65726f206164647265737300600082015250565b60006147dc601f836139f3565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061486e6029836139f3565b915061487982614812565b604082019050919050565b6000602082019050818103600083015261489d81614861565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006148da6013836139f3565b91506148e5826148a4565b602082019050919050565b60006020820190508181036000830152614909816148cd565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000614946600f836139f3565b915061495182614910565b602082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f5472616e7366657220616d6f756e742065786365656473206d6178207472616e60008201527f73616374696f6e206c696d697400000000000000000000000000000000000000602082015250565b60006149d8602d836139f3565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b6000614a44601a836139f3565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f54726164696e6720636f6f6c646f776e20706572696f64206e6f74207965742060008201527f7061737365640000000000000000000000000000000000000000000000000000602082015250565b6000614ad66026836139f3565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b600081905092915050565b50565b6000614b27600083614b0c565b9150614b3282614b17565b600082019050919050565b6000614b4882614b1a565b9150819050919050565b600081519050614b6181613b34565b92915050565b600060208284031215614b7d57614b7c613a9a565b5b6000614b8b84828501614b52565b91505092915050565b6000604082019050614ba96000830185613d31565b614bb66020830184613d31565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614c40614c3b614c3684614c1b565b613c03565b613a9f565b9050919050565b614c5081614c25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8b81613b22565b82525050565b6000614c9d8383614c82565b60208301905092915050565b6000602082019050919050565b6000614cc182614c56565b614ccb8185614c61565b9350614cd683614c72565b8060005b83811015614d07578151614cee8882614c91565b9750614cf983614ca9565b925050600181019050614cda565b5085935050505092915050565b600060a082019050614d296000830188613c7d565b614d366020830187614c47565b8181036040830152614d488186614cb6565b9050614d576060830185613d31565b614d646080830184613c7d565b969550505050505056fea2646970667358221220e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806389947bfd11610190578063c3623b20116100dc578063d00efb2f11610095578063dd62ed3e1161006f578063dd62ed3e14610aee578063deab8aea14610b2b578063f2fde38b14610b56578063f928364c14610b7f576102ef565b8063d00efb2f14610a6f578063d576e97214610a9a578063dd4698d014610ac3576102ef565b8063c3623b2014610987578063c596f3fe1461099e578063c8c8ebe4146109c7578063cca0feb6146109f2578063cd2c6a9914610a1b578063cd34c0c214610a58576102ef565b8063a7ab56af11610149578063ab80904f11610123578063ab80904f146108dd578063ad75e48914610908578063ae3dcf2614610931578063bdc303161461095c576102ef565b8063a7ab56af1461084c578063a9059cbb14610875578063aa4bde28146108b2576102ef565b806389947bfd146107505780638da5cb5b1461077957806395d89b41146107a457806398e122fd146107cf578063a13d1a2b146107f8578063a14779c914610821576102ef565b806338eac85d1161024f5780635992704411610208578063715018a6116101e2578063715018a6146106b857806377d1440d146106cf5780637b208769146106fa578063890aceb214610725576102ef565b806359927044146106255780636ea405d31461065057806370a082311461067b576102ef565b806338eac85d146105395780633a03c07e146105645780634234c60b1461058f5780634ada218b146105b857806350e8e512146105e357806351bc3c851461060e576102ef565b80631f3f8d33116102a15780631f3f8d331461041557806323b872dd1461044057806327a14fc21461047d5780632fa62740146104a6578063313ce567146104e357806334b7f7ae1461050e576102ef565b806306fdde03146102f157806307a212be1461031c578063095ea7b3146103455780630f3a325f146103825780631694505e146103bf57806318160ddd146103ea576102ef565b366102ef57005b005b3480156102fd57600080fd5b50610306610b96565b6040516103139190613a78565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613ad5565b610c28565b005b34801561035157600080fd5b5061036c60048036038101906103679190613b60565b610cd7565b6040516103799190613bbb565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613bd6565b610cfa565b6040516103b69190613bbb565b60405180910390f35b3480156103cb57600080fd5b506103d4610d1a565b6040516103e19190613c62565b60405180910390f35b3480156103f657600080fd5b506103ff610d3e565b60405161040c9190613c8c565b60405180910390f35b34801561042157600080fd5b5061042a610d48565b6040516104379190613bbb565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ca7565b610d5f565b6040516104749190613bbb565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613ad5565b610d8e565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190613bd6565b610e84565b6040516104da9190613bbb565b60405180910390f35b3480156104ef57600080fd5b506104f8610ea4565b6040516105059190613d16565b60405180910390f35b34801561051a57600080fd5b50610523610ead565b6040516105309190613c8c565b60405180910390f35b34801561054557600080fd5b5061054e610eb3565b60405161055b9190613bbb565b60405180910390f35b34801561057057600080fd5b50610579610ec6565b6040516105869190613bbb565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613ad5565b610ed9565b005b3480156105c457600080fd5b506105cd610f67565b6040516105da9190613bbb565b60405180910390f35b3480156105ef57600080fd5b506105f8610f7a565b6040516106059190613c8c565b60405180910390f35b34801561061a57600080fd5b50610623610f80565b005b34801561063157600080fd5b5061063a611069565b6040516106479190613d40565b60405180910390f35b34801561065c57600080fd5b5061066561108f565b6040516106729190613c8c565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d9190613bd6565b611095565b6040516106af9190613c8c565b60405180910390f35b3480156106c457600080fd5b506106cd6110de565b005b3480156106db57600080fd5b506106e46110f2565b6040516106f19190613c8c565b60405180910390f35b34801561070657600080fd5b5061070f6110f8565b60405161071c9190613d40565b60405180910390f35b34801561073157600080fd5b5061073a61111e565b6040516107479190613c8c565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613d87565b611124565b005b34801561078557600080fd5b5061078e611180565b60405161079b9190613d40565b60405180910390f35b3480156107b057600080fd5b506107b96111aa565b6040516107c69190613a78565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613bd6565b61123c565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613db4565b611250565b005b34801561082d57600080fd5b506108366112ec565b6040516108439190613d40565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e9190613bd6565b611312565b005b34801561088157600080fd5b5061089c60048036038101906108979190613b60565b611444565b6040516108a99190613bbb565b60405180910390f35b3480156108be57600080fd5b506108c7611467565b6040516108d49190613c8c565b60405180910390f35b3480156108e957600080fd5b506108f261146d565b6040516108ff9190613c8c565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613ad5565b611550565b005b34801561093d57600080fd5b50610946611608565b6040516109539190613c8c565b60405180910390f35b34801561096857600080fd5b506109716116f9565b60405161097e9190613bbb565b60405180910390f35b34801561099357600080fd5b5061099c611710565b005b3480156109aa57600080fd5b506109c560048036038101906109c09190613b60565b61179f565b005b3480156109d357600080fd5b506109dc611937565b6040516109e99190613c8c565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190613ad5565b61193d565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190613bd6565b6119cb565b604051610a4f9190613bbb565b60405180910390f35b348015610a6457600080fd5b50610a6d6119eb565b005b348015610a7b57600080fd5b50610a84611a1f565b604051610a919190613c8c565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613e19565b611a25565b005b348015610acf57600080fd5b50610ad8611ea1565b604051610ae59190613bbb565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e59565b611eb4565b604051610b229190613c8c565b60405180910390f35b348015610b3757600080fd5b50610b40611f3b565b604051610b4d9190613d40565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613bd6565b611f61565b005b348015610b8b57600080fd5b50610b94611fe7565b005b606060048054610ba590613ec8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190613ec8565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b5050505050905090565b610c30612047565b620186a06001610c3e610d3e565b610c489190613f28565b610c529190613f99565b811015610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90614016565b60405180910390fd5b806008819055507fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d01600854604051610ccc9190613c8c565b60405180910390a150565b600080610ce26120ce565b9050610cef8185856120d6565b600191505092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b6000600660159054906101000a900460ff16905090565b600080610d6a6120ce565b9050610d778582856120e8565b610d8285858561217c565b60019150509392505050565b610d96612047565b6103e8610da1610d3e565b610dab9190613f99565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614082565b60405180910390fd5b600a610df7610d3e565b610e019190613f99565b811115610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a906140ee565b60405180910390fd5b80600a819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e799190613c8c565b60405180910390a150565b60166020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600b5481565b600660159054906101000a900460ff1681565b600660189054906101000a900460ff1681565b610ee1612047565b61012c811115610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061415a565b60405180910390fd5b80600b819055507fc4d978175d3c07d16372ccefaf0cd6282f07b3b93c73c51ca598d816838b623b81604051610f5c9190613c8c565b60405180910390a150565b600660179054906101000a900460ff1681565b600e5481565b610f88612047565b6000610f9330611095565b905060008111610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf906141c6565b60405180910390fd5b600660149054906101000a900460ff1615611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f90614232565b60405180910390fd5b6001600660146101000a81548160ff02191690831515021790555061104b61299e565b6000600660146101000a81548160ff02191690831515021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e6612047565b6110f06000612e26565b565b60085481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b61112c612047565b80600660186101000a81548160ff0219169083151502179055507f7e0e6e2143876a516bcdac83e707a7aed20ee376e7dc65707b9d70807c54a4d0816040516111759190613bbb565b60405180910390a150565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546111b990613ec8565b80601f01602080910402602001604051908101604052809291908181526020018280546111e590613ec8565b80156112325780601f1061120757610100808354040283529160200191611232565b820191906000526020600020905b81548152906001019060200180831161121557829003601f168201915b5050505050905090565b611244612047565b61124d81612eec565b50565b611258612047565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff5ac7689d017b32b050acd71722bbd0751cfc9913acc11d642645cc2604a5a6682826040516112e0929190614252565b60405180910390a15050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131a612047565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906142c7565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa957ba3a52f05ac246d413f37460b13ee4b8281799a6b8365c8d227bb376567360405160405180910390a250565b60008061144f6120ce565b905061145c81858561217c565b600191505092915050565b600a5481565b6000600660189054906101000a900460ff1615806114975750600660159054906101000a900460ff165b156114ab576114a4610d3e565b905061154d565b6000600e54426114bb91906142e7565b905062278d008111156115465762ed4e008111156114fc576103e8600a6114e0610d3e565b6114ea9190613f28565b6114f49190613f99565b91505061154d565b600064039ef8b00082600861150f610d3e565b6115199190613f28565b6115239190613f28565b61152d9190613f99565b90508060095461153d919061431b565b9250505061154d565b6009549150505b90565b611558612047565b611560613058565b6000811180156115705750804710155b6115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061439b565b60405180910390fd5b6115b7611180565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115fc573d6000803e3d6000fd5b5061160561309e565b50565b6000600660189054906101000a900460ff1615806116325750600660159054906101000a900460ff165b156116465761163f610d3e565b90506116f6565b6000600e544261165691906142e7565b905062278d008111156116ef5762ed4e00811115611697576103e8601e61167b610d3e565b6116859190613f28565b61168f9190613f99565b9150506116f6565b600064039ef8b00062278d00836116ae91906142e7565b60146116b8610d3e565b6116c29190613f28565b6116cc9190613f28565b6116d69190613f99565b905080600a546116e6919061431b565b925050506116f6565b600a549150505b90565b6000600660189054906101000a900460ff16905090565b611718612047565b6000600c541461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614407565b60405180910390fd5b43600c819055507f8da81f1d10edd7e242582e37f1e97267643687e6eb87d87c8be39d0a74ead87f600c546040516117959190613c8c565b60405180910390a1565b6117a7612047565b6117af613058565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614473565b60405180910390fd5b60008111611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906144df565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611887611180565b846040518363ffffffff1660e01b81526004016118a59291906144ff565b6020604051808303816000875af11580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e8919061453d565b90508061192a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611921906145b6565b60405180910390fd5b5061193361309e565b5050565b60095481565b611945612047565b6103e881111561198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190614622565b60405180910390fd5b806007819055507f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91816040516119c09190613c8c565b60405180910390a150565b60156020528060005260406000206000915054906101000a900460ff1681565b6119f3612047565b600660169054906101000a900460ff1615600660166101000a81548160ff021916908315150217905550565b600c5481565b611a2d612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a939061468e565b60405180910390fd5b60006003811115611ab057611aaf6146ae565b5b826003811115611ac357611ac26146ae565b5b03611b9d5780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc593283808d96116d978f98a4d43b0d5377c2a186c00e6bc147ab590ac9d006081604051611b909190613d40565b60405180910390a1611e9d565b60016003811115611bb157611bb06146ae565b5b826003811115611bc457611bc36146ae565b5b03611c9e5780601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fc92adabe7e3c798b024690e02ee7d25de288e646ad1dbe65b009342bfd37a7f681604051611c919190613d40565b60405180910390a1611e9c565b60026003811115611cb257611cb16146ae565b5b826003811115611cc557611cc46146ae565b5b03611d9e5780601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507e3a625ce2c1733a2f48879bc625b0e8b428365f072b18aaae4a11b26a7f187081604051611d919190613d40565b60405180910390a1611e9b565b600380811115611db157611db06146ae565b5b826003811115611dc457611dc36146ae565b5b03611e9a5780601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f98feaa8b24e6c2f447c9354b74b62dd2bb32ebe2c33a556546d0e88420343e1481604051611e919190613d40565b60405180910390a15b5b5b5b5050565b600660169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f69612047565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdb5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611fd29190613d40565b60405180910390fd5b611fe481612e26565b50565b611fef612047565b600660159054906101000a900460ff1615600660156101000a81548160ff0219169083151502179055507fd0a8ff473dcac5e83a30583490a7d6b4eea5bbb9dd4aa26182b0fa8a231e0c9860405160405180910390a1565b61204f6120ce565b73ffffffffffffffffffffffffffffffffffffffff1661206d611180565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576120906120ce565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016120c39190613d40565b60405180910390fd5b565b600033905090565b6120e383838360016130a8565b505050565b60006120f48484611eb4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121765781811015612166578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161215d939291906146dd565b60405180910390fd5b612175848484840360006130a8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290614786565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906147f2565b60405180910390fd5b6000811161229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614884565b60405180910390fd5b600660179054906101000a900460ff16806122f157506122bb611180565b73ffffffffffffffffffffffffffffffffffffffff166122d96120ce565b73ffffffffffffffffffffffffffffffffffffffff16145b612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906148f0565b60405180910390fd5b600660179054906101000a900460ff1615612557576000600c541480156123a05750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ad5743600c819055505b600d54600c546123bd919061431b565b43111580156124155750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612473576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d9061495c565b60405180910390fd5b5b61255f611180565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ca575061259b611180565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061261e5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806126725750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126875761268283838361327f565b612999565b600061269161146d565b9050808211156126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd906149ee565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612791576000612731611608565b9050600061273e85611095565b905081848261274d919061431b565b111561278e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278590614a5a565b60405180910390fd5b50505b6000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061283c5750805b1561298a5760008261284e5786612850565b855b9050601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612988576000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b54816128f5919061431b565b421015806129035750600081145b612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614aec565b60405180910390fd5b42601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b505b61299586868661327f565b5050505b505050565b6129a6613058565b60006129b130611095565b9050600081036129c15750612e1c565b6129ca81613560565b60004790506000811115612e195760006004826129e79190613f99565b9050600080600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612a3990614b3d565b600060405180830381858888f193505050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612acc90614b3d565b600060405180830381858888f193505050503d8060008114612b0a576040519150601f19603f3d011682016040523d82523d6000602084013e612b0f565b606091505b505080935050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612b5f90614b3d565b600060405180830381858888f193505050503d8060008114612b9d576040519150601f19603f3d011682016040523d82523d6000602084013e612ba2565b606091505b505080925050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16856188b890604051612bf290614b3d565b600060405180830381858888f193505050503d8060008114612c30576040519150601f19603f3d011682016040523d82523d6000602084013e612c35565b606091505b50508091505083612cb157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612ca89190613c8c565b60405180910390a25b82612d2757601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d1e9190613c8c565b60405180910390a25b81612d9d57601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612d949190613c8c565b60405180910390a25b80612e1357601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c43b9761b3fba5321ca8212bfc231945f668ccc0c446f333999eea9ce8fda8186604051612e0a9190613c8c565b60405180910390a25b50505050505b50505b612e2461309e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190614b67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b8152600401612fb7929190614b94565b6020604051808303816000875af1158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa9190614b67565b90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260005403613094576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600081905550565b6001600081905550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361311a5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016131119190613d40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361318c5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016131839190613d40565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015613279578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516132709190613c8c565b60405180910390a35b50505050565b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600061332c30611095565b90506000600854821015905060008180156133445750835b801561335d5750600660149054906101000a900460ff16155b80156133b35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134095750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508080156134245750600660169054906101000a900460ff165b15613468576001600660146101000a81548160ff02191690831515021790555061344c61299e565b6000600660146101000a81548160ff0219169083151502179055505b600085806134735750845b1561354a57601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351c5750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135495761352d8760075461379d565b905061353a8930836137c0565b808761354691906142e7565b96505b5b6135558989896137c0565b505050505050505050565b6000600267ffffffffffffffff81111561357d5761357c614bbd565b5b6040519080825280602002602001820160405280156135ab5781602001602082028036833780820191505090505b50905030816000815181106135c3576135c2614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368c9190614b67565b816001815181106136a05761369f614bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613705307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120d6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613767959493929190614d14565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050505050565b600061271082846137ae9190613f28565b6137b89190613f99565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613812578060036000828254613806919061431b565b925050819055506138e7565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561389f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613896939291906146dd565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613930578060036000828254039250508190555061397e565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139db9190613c8c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a22578082015181840152602081019050613a07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a4a826139e8565b613a5481856139f3565b9350613a64818560208601613a04565b613a6d81613a2e565b840191505092915050565b60006020820190508181036000830152613a928184613a3f565b905092915050565b600080fd5b6000819050919050565b613ab281613a9f565b8114613abd57600080fd5b50565b600081359050613acf81613aa9565b92915050565b600060208284031215613aeb57613aea613a9a565b5b6000613af984828501613ac0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b2d82613b02565b9050919050565b613b3d81613b22565b8114613b4857600080fd5b50565b600081359050613b5a81613b34565b92915050565b60008060408385031215613b7757613b76613a9a565b5b6000613b8585828601613b4b565b9250506020613b9685828601613ac0565b9150509250929050565b60008115159050919050565b613bb581613ba0565b82525050565b6000602082019050613bd06000830184613bac565b92915050565b600060208284031215613bec57613beb613a9a565b5b6000613bfa84828501613b4b565b91505092915050565b6000819050919050565b6000613c28613c23613c1e84613b02565b613c03565b613b02565b9050919050565b6000613c3a82613c0d565b9050919050565b6000613c4c82613c2f565b9050919050565b613c5c81613c41565b82525050565b6000602082019050613c776000830184613c53565b92915050565b613c8681613a9f565b82525050565b6000602082019050613ca16000830184613c7d565b92915050565b600080600060608486031215613cc057613cbf613a9a565b5b6000613cce86828701613b4b565b9350506020613cdf86828701613b4b565b9250506040613cf086828701613ac0565b9150509250925092565b600060ff82169050919050565b613d1081613cfa565b82525050565b6000602082019050613d2b6000830184613d07565b92915050565b613d3a81613b22565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613ba0565b8114613d6f57600080fd5b50565b600081359050613d8181613d5b565b92915050565b600060208284031215613d9d57613d9c613a9a565b5b6000613dab84828501613d72565b91505092915050565b60008060408385031215613dcb57613dca613a9a565b5b6000613dd985828601613b4b565b9250506020613dea85828601613d72565b9150509250929050565b60048110613e0157600080fd5b50565b600081359050613e1381613df4565b92915050565b60008060408385031215613e3057613e2f613a9a565b5b6000613e3e85828601613e04565b9250506020613e4f85828601613b4b565b9150509250929050565b60008060408385031215613e7057613e6f613a9a565b5b6000613e7e85828601613b4b565b9250506020613e8f85828601613b4b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee057607f821691505b602082108103613ef357613ef2613e99565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f3382613a9f565b9150613f3e83613a9f565b9250828202613f4c81613a9f565b91508282048414831517613f6357613f62613ef9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa482613a9f565b9150613faf83613a9f565b925082613fbf57613fbe613f6a565b5b828204905092915050565b7f5468726573686f6c6420746f6f206c6f77000000000000000000000000000000600082015250565b60006140006011836139f3565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f206c6f7700000000000000600082015250565b600061406c6019836139f3565b915061407782614036565b602082019050919050565b6000602082019050818103600083015261409b8161405f565b9050919050565b7f4d61782077616c6c657420616d6f756e7420746f6f2068696768000000000000600082015250565b60006140d8601a836139f3565b91506140e3826140a2565b602082019050919050565b60006020820190508181036000830152614107816140cb565b9050919050565b7f436f6f6c646f776e2074696d6520746f6f206869676800000000000000000000600082015250565b60006141446016836139f3565b915061414f8261410e565b602082019050919050565b6000602082019050818103600083015261417381614137565b9050919050565b7f4e6f20746f6b656e7320746f2073776170000000000000000000000000000000600082015250565b60006141b06011836139f3565b91506141bb8261417a565b602082019050919050565b600060208201905081810360008301526141df816141a3565b9050919050565b7f5377617020696e2070726f677265737300000000000000000000000000000000600082015250565b600061421c6010836139f3565b9150614227826141e6565b602082019050919050565b6000602082019050818103600083015261424b8161420f565b9050919050565b60006040820190506142676000830185613d31565b6142746020830184613bac565b9392505050565b7f41646472657373206973206e6f74206d61726b656420617320736e6970657200600082015250565b60006142b1601f836139f3565b91506142bc8261427b565b602082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b60006142f282613a9f565b91506142fd83613a9f565b925082820390508181111561431557614314613ef9565b5b92915050565b600061432682613a9f565b915061433183613a9f565b925082820190508082111561434957614348613ef9565b5b92915050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614385600e836139f3565b91506143908261434f565b602082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b60006143f16013836139f3565b91506143fc826143bb565b602082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f496e76616c696420746f6b656e20616464726573730000000000000000000000600082015250565b600061445d6015836139f3565b915061446882614427565b602082019050919050565b6000602082019050818103600083015261448c81614450565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b60006144c96020836139f3565b91506144d482614493565b602082019050919050565b600060208201905081810360008301526144f8816144bc565b9050919050565b60006040820190506145146000830185613d31565b6145216020830184613c7d565b9392505050565b60008151905061453781613d5b565b92915050565b60006020828403121561455357614552613a9a565b5b600061456184828501614528565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b60006145a06015836139f3565b91506145ab8261456a565b602082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f54617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061460c600c836139f3565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000614678600f836139f3565b915061468382614642565b602082019050919050565b600060208201905081810360008301526146a78161466b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006060820190506146f26000830186613d31565b6146ff6020830185613c7d565b61470c6040830184613c7d565b949350505050565b7f45524332303a207472616e736665722066726f6d207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147706021836139f3565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220746f207a65726f206164647265737300600082015250565b60006147dc601f836139f3565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061486e6029836139f3565b915061487982614812565b604082019050919050565b6000602082019050818103600083015261489d81614861565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b60006148da6013836139f3565b91506148e5826148a4565b602082019050919050565b60006020820190508181036000830152614909816148cd565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b6000614946600f836139f3565b915061495182614910565b602082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f5472616e7366657220616d6f756e742065786365656473206d6178207472616e60008201527f73616374696f6e206c696d697400000000000000000000000000000000000000602082015250565b60006149d8602d836139f3565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b6000614a44601a836139f3565b9150614a4f82614a0e565b602082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f54726164696e6720636f6f6c646f776e20706572696f64206e6f74207965742060008201527f7061737365640000000000000000000000000000000000000000000000000000602082015250565b6000614ad66026836139f3565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b600081905092915050565b50565b6000614b27600083614b0c565b9150614b3282614b17565b600082019050919050565b6000614b4882614b1a565b9150819050919050565b600081519050614b6181613b34565b92915050565b600060208284031215614b7d57614b7c613a9a565b5b6000614b8b84828501614b52565b91505092915050565b6000604082019050614ba96000830185613d31565b614bb66020830184613d31565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614c40614c3b614c3684614c1b565b613c03565b613a9f565b9050919050565b614c5081614c25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c8b81613b22565b82525050565b6000614c9d8383614c82565b60208301905092915050565b6000602082019050919050565b6000614cc182614c56565b614ccb8185614c61565b9350614cd683614c72565b8060005b83811015614d07578151614cee8882614c91565b9750614cf983614ca9565b925050600181019050614cda565b5085935050505092915050565b600060a082019050614d296000830188613c7d565b614d366020830187614c47565b8181036040830152614d488186614cb6565b9050614d576060830185613d31565b614d646080830184613c7d565b969550505050505056fea2646970667358221220e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce64736f6c63430008130033

Deployed Bytecode Sourcemap

13992:16268:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7068:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21017:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8323:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14052:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7374:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30083:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8525:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17767:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15534:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7278:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14629:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14138:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14256:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18122:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14216:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14770;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24243:328;;;;;;;;;;;;;:::i;:::-;;14812:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14304:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7485:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2714:103;;;;;;;;;;;;;:::i;:::-;;14341:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14948:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14727:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18637:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2443:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7171:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29087:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18398:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15226:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22745:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7615:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14562:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18861:942;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29562:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19811:936;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29966:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28662:207;;;;;;;;;;;;;:::i;:::-;;29208:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14486:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29778:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15477:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20890:119;;;;;;;;;;;;;:::i;:::-;;14694:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21269:931;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14171:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7861:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15087:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2826:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20755:127;;;;;;;;;;;;;:::i;:::-;;7068:91;7113:13;7146:5;7139:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7068:91;:::o;21017:244::-;2398:13;:11;:13::i;:::-;21134:7:::1;21129:1;21113:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21112:29;;;;:::i;:::-;21099:9;:42;;21091:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21199:9;21184:12;:24;;;;21224:29;21240:12;;21224:29;;;;;;:::i;:::-;;;;;;;;21017:244:::0;:::o;8323:190::-;8396:4;8413:13;8429:12;:10;:12::i;:::-;8413:28;;8452:31;8461:5;8468:7;8477:5;8452:8;:31::i;:::-;8501:4;8494:11;;;8323:190;;;;:::o;15430:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;14052:51::-;;;:::o;7374:99::-;7426:7;7453:12;;7446:19;;7374:99;:::o;30083:101::-;30138:4;30162:14;;;;;;;;;;;30155:21;;30083:101;:::o;8525:249::-;8612:4;8629:15;8647:12;:10;:12::i;:::-;8629:30;;8670:37;8686:4;8692:7;8701:5;8670:15;:37::i;:::-;8718:26;8728:4;8734:2;8738:5;8718:9;:26::i;:::-;8762:4;8755:11;;;8525:249;;;;;:::o;17767:309::-;2398:13;:11;:13::i;:::-;17875:4:::1;17859:13;:11;:13::i;:::-;:20;;;;:::i;:::-;17849:6;:30;;17841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17954:2;17938:13;:11;:13::i;:::-;:18;;;;:::i;:::-;17928:6;:28;;17920:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18016:6;17998:15;:24;;;;18038:30;18061:6;18038:30;;;;;;:::i;:::-;;;;;;;;17767:309:::0;:::o;15534:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7278:84::-;7327:5;7352:2;7345:9;;7278:84;:::o;14629:35::-;;;;:::o;14138:26::-;;;;;;;;;;;;;:::o;14256:39::-;;;;;;;;;;;;;:::o;18122:221::-;2398:13;:11;:13::i;:::-;18210:3:::1;18202:4;:11;;18194:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18290:4;18272:15;:22;;;;18310:25;18330:4;18310:25;;;;;;:::i;:::-;;;;;;;;18122:221:::0;:::o;14216:33::-;;;;;;;;;;;;;:::o;14770:::-;;;;:::o;24243:328::-;2398:13;:11;:13::i;:::-;24295:28:::1;24326:24;24344:4;24326:9;:24::i;:::-;24295:55;;24392:1;24369:20;:24;24361:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24435:8;;;;;;;;;;;24434:9;24426:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24496:4;24485:8;;:15;;;;;;;;;;;;;;;;;;24511:25;:23;:25::i;:::-;24558:5;24547:8;;:16;;;;;;;;;;;;;;;;;;24284:287;24243:328::o:0;14812:70::-;;;;;;;;;;;;;:::o;14304:24::-;;;;:::o;7485:118::-;7550:7;7577:9;:18;7587:7;7577:18;;;;;;;;;;;;;;;;7570:25;;7485:118;;;:::o;2714:103::-;2398:13;:11;:13::i;:::-;2779:30:::1;2806:1;2779:18;:30::i;:::-;2714:103::o:0;14341:61::-;;;;:::o;14948:73::-;;;;;;;;;;;;;:::o;14727:36::-;;;;:::o;18637:153::-;2398:13;:11;:13::i;:::-;18730:7:::1;18707:20;;:30;;;;;;;;;;;;;;;;;;18753:29;18774:7;18753:29;;;;;;:::i;:::-;;;;;;;;18637:153:::0;:::o;2443:87::-;2489:7;2516:6;;;;;;;;;;;2509:13;;2443:87;:::o;7171:95::-;7218:13;7251:7;7244:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7171:95;:::o;29087:109::-;2398:13;:11;:13::i;:::-;29161:27:::1;29182:5;29161:20;:27::i;:::-;29087:109:::0;:::o;18398:189::-;2398:13;:11;:13::i;:::-;18517:6:::1;18487:18;:27;18506:7;18487:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;18539:40;18563:7;18572:6;18539:40;;;;;;;:::i;:::-;;;;;;;;18398:189:::0;;:::o;15226:73::-;;;;;;;;;;;;;:::o;22745:219::-;2398:13;:11;:13::i;:::-;22829:8:::1;:17;22838:7;22829:17;;;;;;;;;;;;;;;;;;;;;;;;;22821:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:5;22893:8;:17;22902:7;22893:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;22948:7;22934:22;;;;;;;;;;;;22745:219:::0;:::o;7615:182::-;7684:4;7701:13;7717:12;:10;:12::i;:::-;7701:28;;7740:27;7750:5;7757:2;7761:5;7740:9;:27::i;:::-;7785:4;7778:11;;;7615:182;;;;:::o;14562:30::-;;;;:::o;18861:942::-;18924:7;18951:20;;;;;;;;;;;18950:21;:39;;;;18975:14;;;;;;;;;;;18950:39;18946:116;;;19013:13;:11;:13::i;:::-;19006:20;;;;18946:116;19082:19;19122:18;;19104:15;:36;;;;:::i;:::-;19082:58;;19232:7;19218:11;:21;19214:534;;;19274:11;19260;:25;19256:481;;;19396:4;19391:2;19375:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;19368:32;;;;;19256:481;19577:22;19639:18;19623:11;19619:1;19603:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;;;:::i;:::-;19602:56;;;;:::i;:::-;19577:81;;19707:14;19684:20;;:37;;;;:::i;:::-;19677:44;;;;;;19214:534;19775:20;;19768:27;;;18861:942;;:::o;29562:208::-;2398:13;:11;:13::i;:::-;5674:21:::1;:19;:21::i;:::-;29663:1:::2;29654:6;:10;:45;;;;;29693:6;29668:21;:31;;29654:45;29646:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:7;:5;:7::i;:::-;29729:25;;:33;29755:6;29729:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;5718:20:::1;:18;:20::i;:::-;29562:208:::0;:::o;19811:936::-;19869:7;19894:20;;;;;;;;;;;19893:21;:39;;;;19918:14;;;;;;;;;;;19893:39;19889:116;;;19956:13;:11;:13::i;:::-;19949:20;;;;19889:116;20025:19;20065:18;;20047:15;:36;;;;:::i;:::-;20025:58;;20175:7;20161:11;:21;20157:540;;;20217:11;20203;:25;20199:487;;;20339:4;20334:2;20318:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;20311:32;;;;;20199:487;20518:22;20593:18;20580:7;20566:11;:21;;;;:::i;:::-;20560:2;20544:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:44;;;;:::i;:::-;20543:69;;;;:::i;:::-;20518:94;;20656:14;20638:15;;:32;;;;:::i;:::-;20631:39;;;;;;20157:540;20724:15;;20717:22;;;19811:936;;:::o;29966:109::-;30023:4;30047:20;;;;;;;;;;;30040:27;;29966:109;:::o;28662:207::-;2398:13;:11;:13::i;:::-;28748:1:::1;28733:11;;:16;28725:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28798:12;28784:11;:26;;;;28826:35;28849:11;;28826:35;;;;;;:::i;:::-;;;;;;;;28662:207::o:0;29208:346::-;2398:13;:11;:13::i;:::-;5674:21:::1;:19;:21::i;:::-;29335:1:::2;29318:19;;:5;:19;;::::0;29310:53:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:1;29382:6;:10;29374:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29440:12;29462:5;29455:22;;;29478:7;:5;:7::i;:::-;29487:6;29455:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29440:54;;29513:7;29505:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29299:255;5718:20:::1;:18;:20::i;:::-;29208:346:::0;;:::o;14486:35::-;;;;:::o;29778:180::-;2398:13;:11;:13::i;:::-;29861:4:::1;29851:6;:14;;29843:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;29910:6;29904:3;:12;;;;29932:18;29943:6;29932:18;;;;;;:::i;:::-;;;;;;;;29778:180:::0;:::o;15477:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;20890:119::-;2398:13;:11;:13::i;:::-;20972:19:::1;;;;;;;;;;;20971:20;20949:19;;:42;;;;;;;;;;;;;;;;;;20890:119::o:0;14694:26::-;;;;:::o;21269:931::-;2398:13;:11;:13::i;:::-;21389:1:::1;21370:21;;:7;:21;;::::0;21362:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21443:15;21428:30;;;;;;;;:::i;:::-;;:11;:30;;;;;;;;:::i;:::-;;::::0;21424:769:::1;;21488:7;21475:10;;:20;;;;;;;;;;;;;;;;;;21540:4;21510:18;:27;21529:7;21510:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21564:29;21585:7;21564:29;;;;;;:::i;:::-;;;;;;;;21424:769;;;21630:18;21615:33;;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;21611:582:::1;;21681:7;21665:13;;:23;;;;;;;;;;;;;;;;;;21733:4;21703:18;:27;21722:7;21703:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21757:32;21781:7;21757:32;;;;;;:::i;:::-;;;;;;;;21611:582;;;21826:18;21811:33;;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;21807:386:::1;;21877:7;21861:13;;:23;;;;;;;;;;;;;;;;;;21929:4;21899:18;:27;21918:7;21899:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21953:32;21977:7;21953:32;;;;;;:::i;:::-;;;;;;;;21807:386;;;22022:18;22007:33:::0;::::1;;;;;;;:::i;:::-;;:11;:33;;;;;;;;:::i;:::-;;::::0;22003:190:::1;;22073:7;22057:13;;:23;;;;;;;;;;;;;;;;;;22125:4;22095:18;:27;22114:7;22095:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22149:32;22173:7;22149:32;;;;;;:::i;:::-;;;;;;;;22003:190;21807:386;21611:582;21424:769;21269:931:::0;;:::o;14171:38::-;;;;;;;;;;;;;:::o;7861:142::-;7941:7;7968:11;:18;7980:5;7968:18;;;;;;;;;;;;;;;:27;7987:7;7968:27;;;;;;;;;;;;;;;;7961:34;;7861:142;;;;:::o;15087:73::-;;;;;;;;;;;;;:::o;2826:220::-;2398:13;:11;:13::i;:::-;2931:1:::1;2911:22;;:8;:22;;::::0;2907:93:::1;;2985:1;2957:31;;;;;;;;;;;:::i;:::-;;;;;;;;2907:93;3010:28;3029:8;3010:18;:28::i;:::-;2826:220:::0;:::o;20755:127::-;2398:13;:11;:13::i;:::-;20828:14:::1;;;;;;;;;;;20827:15;20810:14;;:32;;;;;;;;;;;;;;;;;;20858:16;;;;;;;;;;20755:127::o:0;2539:166::-;2610:12;:10;:12::i;:::-;2599:23;;:7;:5;:7::i;:::-;:23;;;2595:103;;2673:12;:10;:12::i;:::-;2646:40;;;;;;;;;;;:::i;:::-;;;;;;;;2595:103;2539:166::o;1560:98::-;1613:7;1640:10;1633:17;;1560:98;:::o;10297:130::-;10382:37;10391:5;10398:7;10407:5;10414:4;10382:8;:37::i;:::-;10297:130;;;:::o;10888:487::-;10988:24;11015:25;11025:5;11032:7;11015:9;:25::i;:::-;10988:52;;11075:17;11055:16;:37;11051:317;;11132:5;11113:16;:24;11109:132;;;11192:7;11201:16;11219:5;11165:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;11109:132;11284:57;11293:5;11300:7;11328:5;11309:16;:24;11335:5;11284:8;:57::i;:::-;11051:317;10977:398;10888:487;;;:::o;24583:2669::-;24708:1;24690:20;;:6;:20;;;24682:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24788:1;24767:23;;:9;:23;;;24759:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24854:1;24845:6;:10;24837:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24920:14;;;;;;;;;;;:41;;;;24954:7;:5;:7::i;:::-;24938:23;;:12;:10;:12::i;:::-;:23;;;24920:41;24912:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25002:14;;;;;;;;;;;24998:538;;;25103:1;25088:11;;:16;:42;;;;;25108:14;:22;25123:6;25108:22;;;;;;;;;;;;;;;;;;;;;;;;;25088:42;25084:109;;;25165:12;25151:11;:26;;;;25084:109;25294:17;;25280:11;;:31;;;;:::i;:::-;25264:12;:47;;:73;;;;;25315:14;:22;25330:6;25315:22;;;;;;;;;;;;;;;;;;;;;;;;;25264:73;25260:140;;;25380:4;25358:8;:19;25367:9;25358:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;25260:140;25464:8;:16;25473:6;25464:16;;;;;;;;;;;;;;;;;;;;;;;;;25463:17;:41;;;;;25485:8;:19;25494:9;25485:19;;;;;;;;;;;;;;;;;;;;;;;;;25484:20;25463:41;25455:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24998:538;25562:7;:5;:7::i;:::-;25552:17;;:6;:17;;;:41;;;;25586:7;:5;:7::i;:::-;25573:20;;:9;:20;;;25552:41;:85;;;;25611:18;:26;25630:6;25611:26;;;;;;;;;;;;;;;;;;;;;;;;;25552:85;:118;;;;25641:18;:29;25660:9;25641:29;;;;;;;;;;;;;;;;;;;;;;;;;25552:118;25548:264;;;25735:44;25753:6;25761:9;25772:6;25735:17;:44::i;:::-;25794:7;;25548:264;25861:26;25890:32;:30;:32::i;:::-;25861:61;;25951:18;25941:6;:28;;25933:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;26098:14;:25;26113:9;26098:25;;;;;;;;;;;;;;;;;;;;;;;;;26093:274;;26140:24;26167:27;:25;:27::i;:::-;26140:54;;26209:24;26236:20;26246:9;26236;:20::i;:::-;26209:47;;26308:16;26298:6;26279:16;:25;;;;:::i;:::-;:45;;26271:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;26125:242;;26093:274;26433:10;26446:14;:22;26461:6;26446:22;;;;;;;;;;;;;;;;;;;;;;;;;26433:35;;26479:11;26493:14;:25;26508:9;26493:25;;;;;;;;;;;;;;;;;;;;;;;;;26479:39;;26543:5;:15;;;;26552:6;26543:15;26539:649;;;26661:14;26678:5;:26;;26698:6;26678:26;;;26686:9;26678:26;26661:43;;26786:18;:26;26805:6;26786:26;;;;;;;;;;;;;;;;;;;;;;;;;26781:396;;26833:17;26853:16;:24;26870:6;26853:24;;;;;;;;;;;;;;;;26833:44;;26935:15;;26923:9;:27;;;;:::i;:::-;26904:15;:46;;:64;;;;26967:1;26954:9;:14;26904:64;26896:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:15;27119:16;:24;27136:6;27119:24;;;;;;;;;;;;;;;:42;;;;26814:363;26781:396;26560:628;26539:649;27200:44;27218:6;27226:9;27237:6;27200:17;:44::i;:::-;24671:2581;;;24583:2669;;;;:::o;22972:1259::-;5674:21;:19;:21::i;:::-;23040:28:::1;23071:24;23089:4;23071:9;:24::i;:::-;23040:55;;23134:1;23110:20;:25:::0;23106:38:::1;;23137:7;;;23106:38;23156;23173:20;23156:16;:38::i;:::-;23205:18;23226:21;23205:42;;23275:1;23262:10;:14;23258:966;;;23293:13;23322:1;23309:10;:14;;;;:::i;:::-;23293:30;;23412:13;23440::::0;23468::::1;23496::::0;23560:10:::1;;;;;;;;;;;23552:24;;23584:5;23596;23552:54;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23538:68;;;;;23643:13;;;;;;;;;;;23635:27;;23670:5;23682;23635:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23621:71;;;;;23729:13;;;;;;;;;;;23721:27;;23756:5;23768;23721:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23707:71;;;;;23815:13;;;;;;;;;;;23807:27;;23842:5;23854;23807:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23793:71;;;;;23951:8;23946:53;;23981:10;;;;;;;;;;;23966:33;;;23993:5;23966:33;;;;;;:::i;:::-;;;;;;;;23946:53;24019:8;24014:56;;24049:13;;;;;;;;;;;24034:36;;;24064:5;24034:36;;;;;;:::i;:::-;;;;;;;;24014:56;24090:8;24085:56;;24120:13;;;;;;;;;;;24105:36;;;24135:5;24105:36;;;;;;:::i;:::-;;;;;;;;24085:56;24161:8;24156:56;;24191:13;;;;;;;;;;;24176:36;;;24206:5;24176:36;;;;;;:::i;:::-;;;;;;;;24156:56;23278:946;;;;;23258:966;23029:1202;;5706:1;5718:20:::0;:18;:20::i;:::-;22972:1259::o;3055:191::-;3129:16;3148:6;;;;;;;;;;;3129:25;;3174:8;3165:6;;:17;;;;;;;;;;;;;;;;;;3229:8;3198:40;;3219:8;3198:40;;;;;;;;;;;;3118:128;3055:191;:::o;28877:202::-;28941:12;28974:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28956:55;;;29020:4;29027:5;28956:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:92;;29067:4;29044:14;:20;29059:4;29044:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;28930:149;28877:202;:::o;5754:315::-;5052:1;5883:7;;:18;5879:88;;5925:30;;;;;;;;;;;;;;5879:88;5052:1;6044:7;:17;;;;5754:315::o;6077:212::-;5009:1;6260:7;:21;;;;6077:212::o;10433:443::-;10563:1;10546:19;;:5;:19;;;10542:91;;10618:1;10589:32;;;;;;;;;;;:::i;:::-;;;;;;;;10542:91;10666:1;10647:21;;:7;:21;;;10643:92;;10720:1;10692:31;;;;;;;;;;;:::i;:::-;;;;;;;;10643:92;10775:5;10745:11;:18;10757:5;10745:18;;;;;;;;;;;;;;;:27;10764:7;10745:27;;;;;;;;;;;;;;;:35;;;;10795:9;10791:78;;;10842:7;10826:31;;10835:5;10826:31;;;10851:5;10826:31;;;;;;:::i;:::-;;;;;;;;10791:78;10433:443;;;;:::o;27260:1235::-;27357:10;27370:14;:22;27385:6;27370:22;;;;;;;;;;;;;;;;;;;;;;;;;27357:35;;27405:11;27419:14;:25;27434:9;27419:25;;;;;;;;;;;;;;;;;;;;;;;;;27405:39;;27457:28;27488:24;27506:4;27488:9;:24::i;:::-;27457:55;;27523:12;27562;;27538:20;:36;;27523:51;;27659:15;27677:7;:17;;;;;27688:6;27677:17;:30;;;;;27699:8;;;;;;;;;;;27698:9;27677:30;:87;;;;;27738:18;:26;27757:6;27738:26;;;;;;;;;;;;;;;;;;;;;;;;;27737:27;27677:87;:121;;;;;27769:18;:29;27788:9;27769:29;;;;;;;;;;;;;;;;;;;;;;;;;27768:30;27677:121;27659:139;;27815:10;:33;;;;;27829:19;;;;;;;;;;;27815:33;27811:227;;;27876:4;27865:8;;:15;;;;;;;;;;;;;;;;;;27908:25;:23;:25::i;:::-;27982:5;27971:8;;:16;;;;;;;;;;;;;;;;;;27811:227;28066:11;28136:5;:15;;;;28145:6;28136:15;28132:267;;;28173:18;:26;28192:6;28173:26;;;;;;;;;;;;;;;;;;;;;;;;;28172:27;:61;;;;;28204:18;:29;28223:9;28204:29;;;;;;;;;;;;;;;;;;;;;;;;;28203:30;28172:61;28168:220;;;28260:26;28274:6;28282:3;;28260:13;:26::i;:::-;28254:32;;28305:35;28313:6;28329:4;28336:3;28305:7;:35::i;:::-;28369:3;28359:13;;;;;:::i;:::-;;;28168:220;28132:267;28451:34;28459:6;28467:9;28478:6;28451:7;:34::i;:::-;27346:1149;;;;;;27260:1235;;;:::o;22208:473::-;22274:21;22312:1;22298:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22274:40;;22343:4;22325;22330:1;22325:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22369:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22359:4;22364:1;22359:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22404:62;22421:4;22436:15;22454:11;22404:8;:62::i;:::-;22477:15;:66;;;22558:11;22584:1;22600:4;22627;22647:15;22477:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22263:418;22208:473;:::o;28503:151::-;28587:7;28641:5;28624:13;28615:6;:22;;;;:::i;:::-;28614:32;;;;:::i;:::-;28607:39;;28503:151;;;;:::o;9108:732::-;9214:1;9198:18;;:4;:18;;;9194:369;;9249:5;9233:12;;:21;;;;;;;:::i;:::-;;;;;;;;9194:369;;;9287:19;9309:9;:15;9319:4;9309:15;;;;;;;;;;;;;;;;9287:37;;9357:5;9343:11;:19;9339:117;;;9415:4;9421:11;9434:5;9390:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;9339:117;9531:5;9517:11;:19;9499:9;:15;9509:4;9499:15;;;;;;;;;;;;;;;:37;;;;9272:291;9194:369;9594:1;9580:16;;:2;:16;;;9576:213;;9658:5;9642:12;;:21;;;;;;;;;;;9576:213;;;9757:5;9740:9;:13;9750:2;9740:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;9576:213;9822:2;9807:25;;9816:4;9807:25;;;9826:5;9807:25;;;;;;:::i;:::-;;;;;;;;9108:732;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:329::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:153::-;4539:9;4572:37;4603:5;4572:37;:::i;:::-;4559:50;;4462:153;;;:::o;4621:185::-;4735:64;4793:5;4735:64;:::i;:::-;4730:3;4723:77;4621:185;;:::o;4812:276::-;4932:4;4970:2;4959:9;4955:18;4947:26;;4983:98;5078:1;5067:9;5063:17;5054:6;4983:98;:::i;:::-;4812:276;;;;:::o;5094:118::-;5181:24;5199:5;5181:24;:::i;:::-;5176:3;5169:37;5094:118;;:::o;5218:222::-;5311:4;5349:2;5338:9;5334:18;5326:26;;5362:71;5430:1;5419:9;5415:17;5406:6;5362:71;:::i;:::-;5218:222;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:323::-;7170:6;7219:2;7207:9;7198:7;7194:23;7190:32;7187:119;;;7225:79;;:::i;:::-;7187:119;7345:1;7370:50;7412:7;7403:6;7392:9;7388:22;7370:50;:::i;:::-;7360:60;;7316:114;7114:323;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:114::-;8005:1;7998:5;7995:12;7985:40;;8021:1;8018;8011:12;7985:40;7917:114;:::o;8037:169::-;8098:5;8136:6;8123:20;8114:29;;8152:48;8194:5;8152:48;:::i;:::-;8037:169;;;;:::o;8212:504::-;8295:6;8303;8352:2;8340:9;8331:7;8327:23;8323:32;8320:119;;;8358:79;;:::i;:::-;8320:119;8478:1;8503:68;8563:7;8554:6;8543:9;8539:22;8503:68;:::i;:::-;8493:78;;8449:132;8620:2;8646:53;8691:7;8682:6;8671:9;8667:22;8646:53;:::i;:::-;8636:63;;8591:118;8212:504;;;;;:::o;8722:474::-;8790:6;8798;8847:2;8835:9;8826:7;8822:23;8818:32;8815:119;;;8853:79;;:::i;:::-;8815:119;8973:1;8998:53;9043:7;9034:6;9023:9;9019:22;8998:53;:::i;:::-;8988:63;;8944:117;9100:2;9126:53;9171:7;9162:6;9151:9;9147:22;9126:53;:::i;:::-;9116:63;;9071:118;8722:474;;;;;:::o;9202:180::-;9250:77;9247:1;9240:88;9347:4;9344:1;9337:15;9371:4;9368:1;9361:15;9388:320;9432:6;9469:1;9463:4;9459:12;9449:22;;9516:1;9510:4;9506:12;9537:18;9527:81;;9593:4;9585:6;9581:17;9571:27;;9527:81;9655:2;9647:6;9644:14;9624:18;9621:38;9618:84;;9674:18;;:::i;:::-;9618:84;9439:269;9388:320;;;:::o;9714:180::-;9762:77;9759:1;9752:88;9859:4;9856:1;9849:15;9883:4;9880:1;9873:15;9900:410;9940:7;9963:20;9981:1;9963:20;:::i;:::-;9958:25;;9997:20;10015:1;9997:20;:::i;:::-;9992:25;;10052:1;10049;10045:9;10074:30;10092:11;10074:30;:::i;:::-;10063:41;;10253:1;10244:7;10240:15;10237:1;10234:22;10214:1;10207:9;10187:83;10164:139;;10283:18;;:::i;:::-;10164:139;9948:362;9900:410;;;;:::o;10316:180::-;10364:77;10361:1;10354:88;10461:4;10458:1;10451:15;10485:4;10482:1;10475:15;10502:185;10542:1;10559:20;10577:1;10559:20;:::i;:::-;10554:25;;10593:20;10611:1;10593:20;:::i;:::-;10588:25;;10632:1;10622:35;;10637:18;;:::i;:::-;10622:35;10679:1;10676;10672:9;10667:14;;10502:185;;;;:::o;10693:167::-;10833:19;10829:1;10821:6;10817:14;10810:43;10693:167;:::o;10866:366::-;11008:3;11029:67;11093:2;11088:3;11029:67;:::i;:::-;11022:74;;11105:93;11194:3;11105:93;:::i;:::-;11223:2;11218:3;11214:12;11207:19;;10866:366;;;:::o;11238:419::-;11404:4;11442:2;11431:9;11427:18;11419:26;;11491:9;11485:4;11481:20;11477:1;11466:9;11462:17;11455:47;11519:131;11645:4;11519:131;:::i;:::-;11511:139;;11238:419;;;:::o;11663:175::-;11803:27;11799:1;11791:6;11787:14;11780:51;11663:175;:::o;11844:366::-;11986:3;12007:67;12071:2;12066:3;12007:67;:::i;:::-;12000:74;;12083:93;12172:3;12083:93;:::i;:::-;12201:2;12196:3;12192:12;12185:19;;11844:366;;;:::o;12216:419::-;12382:4;12420:2;12409:9;12405:18;12397:26;;12469:9;12463:4;12459:20;12455:1;12444:9;12440:17;12433:47;12497:131;12623:4;12497:131;:::i;:::-;12489:139;;12216:419;;;:::o;12641:176::-;12781:28;12777:1;12769:6;12765:14;12758:52;12641:176;:::o;12823:366::-;12965:3;12986:67;13050:2;13045:3;12986:67;:::i;:::-;12979:74;;13062:93;13151:3;13062:93;:::i;:::-;13180:2;13175:3;13171:12;13164:19;;12823:366;;;:::o;13195:419::-;13361:4;13399:2;13388:9;13384:18;13376:26;;13448:9;13442:4;13438:20;13434:1;13423:9;13419:17;13412:47;13476:131;13602:4;13476:131;:::i;:::-;13468:139;;13195:419;;;:::o;13620:172::-;13760:24;13756:1;13748:6;13744:14;13737:48;13620:172;:::o;13798:366::-;13940:3;13961:67;14025:2;14020:3;13961:67;:::i;:::-;13954:74;;14037:93;14126:3;14037:93;:::i;:::-;14155:2;14150:3;14146:12;14139:19;;13798:366;;;:::o;14170:419::-;14336:4;14374:2;14363:9;14359:18;14351:26;;14423:9;14417:4;14413:20;14409:1;14398:9;14394:17;14387:47;14451:131;14577:4;14451:131;:::i;:::-;14443:139;;14170:419;;;:::o;14595:167::-;14735:19;14731:1;14723:6;14719:14;14712:43;14595:167;:::o;14768:366::-;14910:3;14931:67;14995:2;14990:3;14931:67;:::i;:::-;14924:74;;15007:93;15096:3;15007:93;:::i;:::-;15125:2;15120:3;15116:12;15109:19;;14768:366;;;:::o;15140:419::-;15306:4;15344:2;15333:9;15329:18;15321:26;;15393:9;15387:4;15383:20;15379:1;15368:9;15364:17;15357:47;15421:131;15547:4;15421:131;:::i;:::-;15413:139;;15140:419;;;:::o;15565:166::-;15705:18;15701:1;15693:6;15689:14;15682:42;15565:166;:::o;15737:366::-;15879:3;15900:67;15964:2;15959:3;15900:67;:::i;:::-;15893:74;;15976:93;16065:3;15976:93;:::i;:::-;16094:2;16089:3;16085:12;16078:19;;15737:366;;;:::o;16109:419::-;16275:4;16313:2;16302:9;16298:18;16290:26;;16362:9;16356:4;16352:20;16348:1;16337:9;16333:17;16326:47;16390:131;16516:4;16390:131;:::i;:::-;16382:139;;16109:419;;;:::o;16534:320::-;16649:4;16687:2;16676:9;16672:18;16664:26;;16700:71;16768:1;16757:9;16753:17;16744:6;16700:71;:::i;:::-;16781:66;16843:2;16832:9;16828:18;16819:6;16781:66;:::i;:::-;16534:320;;;;;:::o;16860:181::-;17000:33;16996:1;16988:6;16984:14;16977:57;16860:181;:::o;17047:366::-;17189:3;17210:67;17274:2;17269:3;17210:67;:::i;:::-;17203:74;;17286:93;17375:3;17286:93;:::i;:::-;17404:2;17399:3;17395:12;17388:19;;17047:366;;;:::o;17419:419::-;17585:4;17623:2;17612:9;17608:18;17600:26;;17672:9;17666:4;17662:20;17658:1;17647:9;17643:17;17636:47;17700:131;17826:4;17700:131;:::i;:::-;17692:139;;17419:419;;;:::o;17844:194::-;17884:4;17904:20;17922:1;17904:20;:::i;:::-;17899:25;;17938:20;17956:1;17938:20;:::i;:::-;17933:25;;17982:1;17979;17975:9;17967:17;;18006:1;18000:4;17997:11;17994:37;;;18011:18;;:::i;:::-;17994:37;17844:194;;;;:::o;18044:191::-;18084:3;18103:20;18121:1;18103:20;:::i;:::-;18098:25;;18137:20;18155:1;18137:20;:::i;:::-;18132:25;;18180:1;18177;18173:9;18166:16;;18201:3;18198:1;18195:10;18192:36;;;18208:18;;:::i;:::-;18192:36;18044:191;;;;:::o;18241:164::-;18381:16;18377:1;18369:6;18365:14;18358:40;18241:164;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:169::-;19348:21;19344:1;19336:6;19332:14;19325:45;19208:169;:::o;19383:366::-;19525:3;19546:67;19610:2;19605:3;19546:67;:::i;:::-;19539:74;;19622:93;19711:3;19622:93;:::i;:::-;19740:2;19735:3;19731:12;19724:19;;19383:366;;;:::o;19755:419::-;19921:4;19959:2;19948:9;19944:18;19936:26;;20008:9;20002:4;19998:20;19994:1;19983:9;19979:17;19972:47;20036:131;20162:4;20036:131;:::i;:::-;20028:139;;19755:419;;;:::o;20180:171::-;20320:23;20316:1;20308:6;20304:14;20297:47;20180:171;:::o;20357:366::-;20499:3;20520:67;20584:2;20579:3;20520:67;:::i;:::-;20513:74;;20596:93;20685:3;20596:93;:::i;:::-;20714:2;20709:3;20705:12;20698:19;;20357:366;;;:::o;20729:419::-;20895:4;20933:2;20922:9;20918:18;20910:26;;20982:9;20976:4;20972:20;20968:1;20957:9;20953:17;20946:47;21010:131;21136:4;21010:131;:::i;:::-;21002:139;;20729:419;;;:::o;21154:182::-;21294:34;21290:1;21282:6;21278:14;21271:58;21154:182;:::o;21342:366::-;21484:3;21505:67;21569:2;21564:3;21505:67;:::i;:::-;21498:74;;21581:93;21670:3;21581:93;:::i;:::-;21699:2;21694:3;21690:12;21683:19;;21342:366;;;:::o;21714:419::-;21880:4;21918:2;21907:9;21903:18;21895:26;;21967:9;21961:4;21957:20;21953:1;21942:9;21938:17;21931:47;21995:131;22121:4;21995:131;:::i;:::-;21987:139;;21714:419;;;:::o;22139:332::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22311:71;22379:1;22368:9;22364:17;22355:6;22311:71;:::i;:::-;22392:72;22460:2;22449:9;22445:18;22436:6;22392:72;:::i;:::-;22139:332;;;;;:::o;22477:137::-;22531:5;22562:6;22556:13;22547:22;;22578:30;22602:5;22578:30;:::i;:::-;22477:137;;;;:::o;22620:345::-;22687:6;22736:2;22724:9;22715:7;22711:23;22707:32;22704:119;;;22742:79;;:::i;:::-;22704:119;22862:1;22887:61;22940:7;22931:6;22920:9;22916:22;22887:61;:::i;:::-;22877:71;;22833:125;22620:345;;;;:::o;22971:171::-;23111:23;23107:1;23099:6;23095:14;23088:47;22971:171;:::o;23148:366::-;23290:3;23311:67;23375:2;23370:3;23311:67;:::i;:::-;23304:74;;23387:93;23476:3;23387:93;:::i;:::-;23505:2;23500:3;23496:12;23489:19;;23148:366;;;:::o;23520:419::-;23686:4;23724:2;23713:9;23709:18;23701:26;;23773:9;23767:4;23763:20;23759:1;23748:9;23744:17;23737:47;23801:131;23927:4;23801:131;:::i;:::-;23793:139;;23520:419;;;:::o;23945:162::-;24085:14;24081:1;24073:6;24069:14;24062:38;23945:162;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:165::-;25050:17;25046:1;25038:6;25034:14;25027:41;24910:165;:::o;25081:366::-;25223:3;25244:67;25308:2;25303:3;25244:67;:::i;:::-;25237:74;;25320:93;25409:3;25320:93;:::i;:::-;25438:2;25433:3;25429:12;25422:19;;25081:366;;;:::o;25453:419::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25706:9;25700:4;25696:20;25692:1;25681:9;25677:17;25670:47;25734:131;25860:4;25734:131;:::i;:::-;25726:139;;25453:419;;;:::o;25878:180::-;25926:77;25923:1;25916:88;26023:4;26020:1;26013:15;26047:4;26044:1;26037:15;26064:442;26213:4;26251:2;26240:9;26236:18;26228:26;;26264:71;26332:1;26321:9;26317:17;26308:6;26264:71;:::i;:::-;26345:72;26413:2;26402:9;26398:18;26389:6;26345:72;:::i;:::-;26427;26495:2;26484:9;26480:18;26471:6;26427:72;:::i;:::-;26064:442;;;;;;:::o;26512:220::-;26652:34;26648:1;26640:6;26636:14;26629:58;26721:3;26716:2;26708:6;26704:15;26697:28;26512:220;:::o;26738:366::-;26880:3;26901:67;26965:2;26960:3;26901:67;:::i;:::-;26894:74;;26977:93;27066:3;26977:93;:::i;:::-;27095:2;27090:3;27086:12;27079:19;;26738:366;;;:::o;27110:419::-;27276:4;27314:2;27303:9;27299:18;27291:26;;27363:9;27357:4;27353:20;27349:1;27338:9;27334:17;27327:47;27391:131;27517:4;27391:131;:::i;:::-;27383:139;;27110:419;;;:::o;27535:181::-;27675:33;27671:1;27663:6;27659:14;27652:57;27535:181;:::o;27722:366::-;27864:3;27885:67;27949:2;27944:3;27885:67;:::i;:::-;27878:74;;27961:93;28050:3;27961:93;:::i;:::-;28079:2;28074:3;28070:12;28063:19;;27722:366;;;:::o;28094:419::-;28260:4;28298:2;28287:9;28283:18;28275:26;;28347:9;28341:4;28337:20;28333:1;28322:9;28318:17;28311:47;28375:131;28501:4;28375:131;:::i;:::-;28367:139;;28094:419;;;:::o;28519:228::-;28659:34;28655:1;28647:6;28643:14;28636:58;28728:11;28723:2;28715:6;28711:15;28704:36;28519:228;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:169::-;29690:21;29686:1;29678:6;29674:14;29667:45;29550:169;:::o;29725:366::-;29867:3;29888:67;29952:2;29947:3;29888:67;:::i;:::-;29881:74;;29964:93;30053:3;29964:93;:::i;:::-;30082:2;30077:3;30073:12;30066:19;;29725:366;;;:::o;30097:419::-;30263:4;30301:2;30290:9;30286:18;30278:26;;30350:9;30344:4;30340:20;30336:1;30325:9;30321:17;30314:47;30378:131;30504:4;30378:131;:::i;:::-;30370:139;;30097:419;;;:::o;30522:165::-;30662:17;30658:1;30650:6;30646:14;30639:41;30522:165;:::o;30693:366::-;30835:3;30856:67;30920:2;30915:3;30856:67;:::i;:::-;30849:74;;30932:93;31021:3;30932:93;:::i;:::-;31050:2;31045:3;31041:12;31034:19;;30693:366;;;:::o;31065:419::-;31231:4;31269:2;31258:9;31254:18;31246:26;;31318:9;31312:4;31308:20;31304:1;31293:9;31289:17;31282:47;31346:131;31472:4;31346:131;:::i;:::-;31338:139;;31065:419;;;:::o;31490:232::-;31630:34;31626:1;31618:6;31614:14;31607:58;31699:15;31694:2;31686:6;31682:15;31675:40;31490:232;:::o;31728:366::-;31870:3;31891:67;31955:2;31950:3;31891:67;:::i;:::-;31884:74;;31967:93;32056:3;31967:93;:::i;:::-;32085:2;32080:3;32076:12;32069:19;;31728:366;;;:::o;32100:419::-;32266:4;32304:2;32293:9;32289:18;32281:26;;32353:9;32347:4;32343:20;32339:1;32328:9;32324:17;32317:47;32381:131;32507:4;32381:131;:::i;:::-;32373:139;;32100:419;;;:::o;32525:176::-;32665:28;32661:1;32653:6;32649:14;32642:52;32525:176;:::o;32707:366::-;32849:3;32870:67;32934:2;32929:3;32870:67;:::i;:::-;32863:74;;32946:93;33035:3;32946:93;:::i;:::-;33064:2;33059:3;33055:12;33048:19;;32707:366;;;:::o;33079:419::-;33245:4;33283:2;33272:9;33268:18;33260:26;;33332:9;33326:4;33322:20;33318:1;33307:9;33303:17;33296:47;33360:131;33486:4;33360:131;:::i;:::-;33352:139;;33079:419;;;:::o;33504:225::-;33644:34;33640:1;33632:6;33628:14;33621:58;33713:8;33708:2;33700:6;33696:15;33689:33;33504:225;:::o;33735:366::-;33877:3;33898:67;33962:2;33957:3;33898:67;:::i;:::-;33891:74;;33974:93;34063:3;33974:93;:::i;:::-;34092:2;34087:3;34083:12;34076:19;;33735:366;;;:::o;34107:419::-;34273:4;34311:2;34300:9;34296:18;34288:26;;34360:9;34354:4;34350:20;34346:1;34335:9;34331:17;34324:47;34388:131;34514:4;34388:131;:::i;:::-;34380:139;;34107:419;;;:::o;34532:147::-;34633:11;34670:3;34655:18;;34532:147;;;;:::o;34685:114::-;;:::o;34805:398::-;34964:3;34985:83;35066:1;35061:3;34985:83;:::i;:::-;34978:90;;35077:93;35166:3;35077:93;:::i;:::-;35195:1;35190:3;35186:11;35179:18;;34805:398;;;:::o;35209:379::-;35393:3;35415:147;35558:3;35415:147;:::i;:::-;35408:154;;35579:3;35572:10;;35209:379;;;:::o;35594:143::-;35651:5;35682:6;35676:13;35667:22;;35698:33;35725:5;35698:33;:::i;:::-;35594:143;;;;:::o;35743:351::-;35813:6;35862:2;35850:9;35841:7;35837:23;35833:32;35830:119;;;35868:79;;:::i;:::-;35830:119;35988:1;36013:64;36069:7;36060:6;36049:9;36045:22;36013:64;:::i;:::-;36003:74;;35959:128;35743:351;;;;:::o;36100:332::-;36221:4;36259:2;36248:9;36244:18;36236:26;;36272:71;36340:1;36329:9;36325:17;36316:6;36272:71;:::i;:::-;36353:72;36421:2;36410:9;36406:18;36397:6;36353:72;:::i;:::-;36100:332;;;;;:::o;36438:180::-;36486:77;36483:1;36476:88;36583:4;36580:1;36573:15;36607:4;36604:1;36597:15;36624:180;36672:77;36669:1;36662:88;36769:4;36766:1;36759:15;36793:4;36790:1;36783:15;36810:85;36855:7;36884:5;36873:16;;36810:85;;;:::o;36901:158::-;36959:9;36992:61;37010:42;37019:32;37045:5;37019:32;:::i;:::-;37010:42;:::i;:::-;36992:61;:::i;:::-;36979:74;;36901:158;;;:::o;37065:147::-;37160:45;37199:5;37160:45;:::i;:::-;37155:3;37148:58;37065:147;;:::o;37218:114::-;37285:6;37319:5;37313:12;37303:22;;37218:114;;;:::o;37338:184::-;37437:11;37471:6;37466:3;37459:19;37511:4;37506:3;37502:14;37487:29;;37338:184;;;;:::o;37528:132::-;37595:4;37618:3;37610:11;;37648:4;37643:3;37639:14;37631:22;;37528:132;;;:::o;37666:108::-;37743:24;37761:5;37743:24;:::i;:::-;37738:3;37731:37;37666:108;;:::o;37780:179::-;37849:10;37870:46;37912:3;37904:6;37870:46;:::i;:::-;37948:4;37943:3;37939:14;37925:28;;37780:179;;;;:::o;37965:113::-;38035:4;38067;38062:3;38058:14;38050:22;;37965:113;;;:::o;38114:732::-;38233:3;38262:54;38310:5;38262:54;:::i;:::-;38332:86;38411:6;38406:3;38332:86;:::i;:::-;38325:93;;38442:56;38492:5;38442:56;:::i;:::-;38521:7;38552:1;38537:284;38562:6;38559:1;38556:13;38537:284;;;38638:6;38632:13;38665:63;38724:3;38709:13;38665:63;:::i;:::-;38658:70;;38751:60;38804:6;38751:60;:::i;:::-;38741:70;;38597:224;38584:1;38581;38577:9;38572:14;;38537:284;;;38541:14;38837:3;38830:10;;38238:608;;;38114:732;;;;:::o;38852:831::-;39115:4;39153:3;39142:9;39138:19;39130:27;;39167:71;39235:1;39224:9;39220:17;39211:6;39167:71;:::i;:::-;39248:80;39324:2;39313:9;39309:18;39300:6;39248:80;:::i;:::-;39375:9;39369:4;39365:20;39360:2;39349:9;39345:18;39338:48;39403:108;39506:4;39497:6;39403:108;:::i;:::-;39395:116;;39521:72;39589:2;39578:9;39574:18;39565:6;39521:72;:::i;:::-;39603:73;39671:3;39660:9;39656:19;39647:6;39603:73;:::i;:::-;38852:831;;;;;;;;:::o

Swarm Source

ipfs://e680c5bd646195c29817a02fbcb36bc36753e90a6fbd2c3d2e4dc6f36505cfce

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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