ETH Price: $3,291.76 (-2.87%)

Token

Bobo Bucks (BOBO)
 

Overview

Max Total Supply

1,000,000,000 BOBO

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: Router 2
Balance
420.69 BOBO

Value
$0.00
0x7a250d5630b4cf539739df2c5dacb4c659f2488d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BOBO

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-01
*/

/**
 *  BOBOBUCKS.COM   T.ME/BOBO_BUCKS
*/
 
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;
 
/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
 
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
 
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
 
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
 
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
 
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
 
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
 
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
 
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
 
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
 
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
 
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
 
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
 
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;
 
    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }
 
    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }
 
    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }
 
    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }
 
    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }
 
    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }
 
    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }
 
    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }
 
    event OwnershipTransferred(address owner);
}
 
interface IDEXFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
 
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}
 
interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}
 
contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;
 
    address _token;
 
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
 
    IERC20 BASE = IERC20(0xc778417E063141139Fce010982780140Aa0cD5Ab);
    address WETH = 0xc778417E063141139Fce010982780140Aa0cD5Ab;
    IDEXRouter router;
 
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
 
    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;
 
    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;
 
    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;
 
    mapping (address => bool) public allowed;
    mapping (address => address) public choice;
 
    mapping (address => Share) public shares;
 
    //bool public blacklistMode = true;
 
    address public constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
 
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed; // to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
 
    modifier onlyToken() {
        require(msg.sender == _token); _;
    }
 
    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
 
        allowed[USDT] = true;
        allowed[USDC] = true;
        allowed[DAI] = true;
 
        IERC20(BASE).approve(_router, 2**256 - 1);
    }
 
    receive() external payable {}
 
    function getTotalRewards(address token) public view returns(uint256){
        return totalRewardsDistributed[token];
    }
 
    function getTotalRewardsToUser(address token, address user) public view returns(uint256){
        return totalRewardsToUser[token][user];
    }
 
    function checkCanClaimDividendOfUser(address user, address claimer) public view returns(bool){
        return canClaimDividendOfUser[user][claimer];
    }
 
    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }
 
    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }
 
    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }
 
    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }
 
    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {
 
        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, USDT);
            }
        }
 
        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }
 
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }
 
    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;
 
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
 
    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");
 
        if (shares[shareholder].amount == 0) {
            return;
        }
 
        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
 
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
 
            if (rewardAddress == address(BASE)) {
 
                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);
 
            } else {
 
                IERC20 rewardToken = IERC20(rewardAddress);
 
                uint256 beforeBalance = rewardToken.balanceOf(shareholder);
 
                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;
 
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;
 
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
                        0,
                        path,
                        shareholder,
                        block.timestamp
                    );
 
                }
 
                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));
 
            }
 
        }
    }
 
    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }
 
    function claimDividend(
        address rewardAddress
    ) external {
        distributeDividend(msg.sender, rewardAddress);
    }
 
    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }
 
    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }
 
    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }
 
    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");
 
        distributeDividend(user, rewardAddress);
    }
 
    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }
 
    function getUnpaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
 
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
 
        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }
 
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }
 
    function getCumulativeDividends(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }
 
    function addShareholder(
        address shareholder
    ) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }
 
    function removeShareholder(
        address shareholder
    ) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
        shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
 
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
 
    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        _sent = IERC20(token).transfer(_to, _contractBalance);
    }
 
}
 
contract BOBO is IERC20, Auth {
    using SafeMath for uint256;
 
    uint256 public constant MASK = type(uint128).max;
    address BASE = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;
 
    string constant _name = "Bobo Bucks";
    string constant _symbol = "BOBO";
    uint8 constant _decimals = 9;
 
    uint256 _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.div(50);
 
    uint256 public minAmountToTriggerSwap = 0;
 
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
 
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public _isFree;
 
    bool public isFeeOnTransferEnabled = false;
 
    mapping (address => bool) public automatedMarketMakerPairs;
 
    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 500;
    uint256 buyOperationsFee = 500;
    uint256 buyTotalFee = 1000;
 
    uint256 sellLiquidityFee = 250;
    uint256 sellReflectionFee = 1750;
    uint256 sellOperationsFee = 0;
    uint256 sellTotalFee = 2000;
 
    uint256 feeDenominator = 10000;
 
    uint256  _liquidityTokensToSwap;
    uint256  _reflectionTokensToSwap;
    uint256  _operationsTokensToSwap;
 
    address public autoLiquidityReceiver = msg.sender;
    address public operationsFeeReceiver = 0xa25f660C32de73C7F5973Af7a9Fa43994F764c06;
 
    IDEXRouter public router;
    address public pair;
 
    DividendDistributor distributor;
    address public distributorAddress;
 
    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000; // 0.0025%
 
    bool inSwap;
    modifier swapping() {
        inSwap = true; _;
        inSwap = false;
    }
 
    constructor () Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
 
        isFeeExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
 
        autoLiquidityReceiver = msg.sender;
 
        _setAutomatedMarketMakerPair(pair, true);
 
        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
 
 
    receive() external payable {}
 
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
 
    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }
 
    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }
 
    function transfer(
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }
 
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if(_allowances[sender][msg.sender] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
 
        return _transferFrom(sender, recipient, amount);
    }
 
    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }
 
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;
 
        if (!isSell && !_isFree[recipient]){
            require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
        }
 
        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) {
                swapBack();
            }
        }
 
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
 
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
 
        _balances[recipient] = _balances[recipient].add(amountReceived);
 
        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {}
        }
 
        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
 
    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }
 
    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {
 
        if(isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            bool isBuy = automatedMarketMakerPairs[sender] || sender == routerAddress;
            bool isSell =  automatedMarketMakerPairs[recipient]|| recipient == routerAddress;
 
            if(isBuy || isSell) {
                return !isFeeExempt[sender] && !isFeeExempt[recipient];
            } else {
                return false;
            }
        }
 
    }
 
    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        if (selling) {
            return sellTotalFee;
        }
        return buyTotalFee;
    }
 
    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;
 
        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);
 
        if(isSell) {
            _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
            _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
            _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
        } else {
            _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
            _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
            _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
        }
 
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
 
        return amount.sub(feeAmount);
    }
 
    function shouldSwapBack() internal view returns (bool) {
        return !automatedMarketMakerPairs[msg.sender]
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapMinimumTokens;
    }
 
    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }
 
    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        if (value) {
            isDividendExempt[_pair] = true;
        }
        if (!value) {
            isDividendExempt[_pair] = false;
        }
    }
 
    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap);
 
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);
 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;
 
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
 
        uint256 amountETH = address(this).balance.sub(balanceBefore);
 
        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
 
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
 
        try distributor.deposit{value: amountETHReflection}() {} catch {}
        payable(operationsFeeReceiver).transfer(amountETHOperations);
 
        if(tokensForLiquidity > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                tokensForLiquidity,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, tokensForLiquidity);
        }
    }
 
    function buyTokens(
        uint256 amount,
        address to
    ) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
 
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
 
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
 
    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }
 
    function setMaxWallet(
        uint256 amount
    ) external authorized {
        _maxWallet = amount;
    }
 
    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external authorized {
        minAmountToTriggerSwap = amount;
    }
 
    function setIsFeeOnTransferEnabled(
        bool status
    ) external authorized {
        isFeeOnTransferEnabled = status;
    }
 
    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external authorized {
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }
 
    function setIsFeeExempt(
        address holder,
        bool exempt
    ) external authorized {
        isFeeExempt[holder] = exempt;
    }
 
    function setFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = true;
    }
 
    function unSetFree(
        address holder
    ) public onlyOwner {
        _isFree[holder] = false;
    }
 
    function checkFree(
        address holder
    ) public view onlyOwner returns(bool){
        return _isFree[holder];
    }
 
    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _feeDenominator
    ) external authorized {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee);
 
        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee);
 
        feeDenominator = _feeDenominator;
    }
 
    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver
    ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
    }
 
    function setSwapBackSettings(
        bool _enabled,
        uint256 _amount
    ) external authorized {
        swapEnabled = _enabled;
        swapMinimumTokens = _amount;
    }
 
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
 
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
 
        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) {
            _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        }
        pair = _pair;
 
        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }
 
    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeOnTransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTriggerSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buyOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sellOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsFeeOnTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinAmountToTriggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000186919062000e66565b633b9aca0062000197919062000fa3565b600755620001b7603260075462000af060201b6200244b1790919060201c565b60085560006009556000600f60006101000a81548160ff02191690831515021790555060006011556101f46012556101f46013556103e860145560fa6015556106d660165560006017556107d060185561271060195533601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a25f660c32de73c7f5973af7a9fa43994f764c06601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602260146101000a81548160ff021916908315150217905550611388600754620002d0919062000dd3565b602355348015620002e057600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043d57600080fd5b505afa15801562000452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000478919062000d3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620004d692919062000d89565b602060405180830381600087803b158015620004f157600080fd5b505af115801562000506573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052c919062000d3b565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200067a57600080fd5b505afa1580156200068f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b5919062000d3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508033604051620007059062000d16565b6200071292919062000d89565b604051809103906000f0801580156200072f573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620009ed602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b0860201b60201c565b62000a018160075462000c2260201b60201c565b5062000a38602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075462000c2260201b60201c565b50600754600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000ae1919062000db6565b60405180910390a350620010d4565b6000818362000b00919062000dd3565b905092915050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000bbf576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8062000c1e576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000d04919062000db6565b60405180910390a36001905092915050565b613ecd80620056ac83390190565b60008151905062000d3581620010ba565b92915050565b60006020828403121562000d4e57600080fd5b600062000d5e8482850162000d24565b91505092915050565b62000d728162001004565b82525050565b62000d838162001038565b82525050565b600060408201905062000da0600083018562000d67565b62000daf602083018462000d67565b9392505050565b600060208201905062000dcd600083018462000d78565b92915050565b600062000de08262001038565b915062000ded8362001038565b92508262000e005762000dff6200107e565b5b828204905092915050565b6000808291508390505b600185111562000e5d5780860481111562000e355762000e346200104f565b5b600185161562000e455780820291505b808102905062000e5585620010ad565b945062000e15565b94509492505050565b600062000e738262001038565b915062000e808362001042565b925062000eaf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000eb7565b905092915050565b60008262000ec9576001905062000f9c565b8162000ed9576000905062000f9c565b816001811462000ef2576002811462000efd5762000f33565b600191505062000f9c565b60ff84111562000f125762000f116200104f565b5b8360020a91508482111562000f2c5762000f2b6200104f565b5b5062000f9c565b5060208310610133831016604e8410600b841016171562000f6d5782820a90508381111562000f675762000f666200104f565b5b62000f9c565b62000f7c848484600162000e0b565b9250905081840481111562000f965762000f956200104f565b5b81810290505b9392505050565b600062000fb08262001038565b915062000fbd8362001038565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ff95762000ff86200104f565b5b828202905092915050565b6000620010118262001018565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b620010c58162001004565b8114620010d157600080fd5b50565b6145c880620010e46000396000f3fe6080604052600436106102975760003560e01c8063893d20e81161015a578063b6a5d7de116100c1578063f0b37c041161007a578063f0b37c0414610a83578063f1f3bca314610aac578063f2fde38b14610ae9578063f708a64f14610b12578063f887ea4014610b3b578063fe9fbb8014610b665761029e565b8063b6a5d7de14610975578063ca33e64c1461099e578063da2e3bad146109c9578063dd62ed3e146109f2578063df20fd4914610a2f578063e91f214e14610a585761029e565b8063a4b45c0011610113578063a4b45c0014610851578063a51af4c51461087a578063a8aa1b31146108a5578063a9059cbb146108d0578063ad5c46481461090d578063b62496f5146109385761029e565b8063893d20e81461075357806389ef69f61461077e57806391950f30146107a757806395d89b41146107d25780639a7a23d6146107fd5780639d64bf93146108265761029e565b8063379fad9a116101fe578063658d4b7f116101b7578063658d4b7f146106435780636ddd17131461066c5780637088fb7f1461069757806370a08231146106ae57806382247ec0146106eb5780638366e79a146107165761029e565b8063379fad9a146104fd5780633f4218e0146105265780634355855a14610563578063571ac8b0146105a05780635881f3ef146105dd5780635d0044ca1461061a5761029e565b806323b872dd1161025057806323b872dd146103c7578063296020e7146104045780632b112e49146104415780632f54bf6e1461046c578063313ce567146104a95780633425c001146104d45761029e565b806303382cbb146102a357806306fdde03146102ce57806307c89fe8146102f9578063095ea7b31461033657806315d61a821461037357806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ba3565b6040516102c59190613fd4565b60405180910390f35b3480156102da57600080fd5b506102e3610bc9565b6040516102f0919061411c565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613aa2565b610c06565b60405161032d91906140e6565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613be4565b610ca4565b60405161036a91906140e6565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613cae565b610d96565b005b3480156103a857600080fd5b506103b1610de8565b6040516103be919061419e565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b59565b610df2565b6040516103fb91906140e6565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613aa2565b610fd4565b60405161043891906140e6565b60405180910390f35b34801561044d57600080fd5b50610456610ff4565b604051610463919061419e565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613aa2565b611076565b6040516104a091906140e6565b60405180910390f35b3480156104b557600080fd5b506104be6110cf565b6040516104cb919061423c565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613aa2565b6110d8565b005b34801561050957600080fd5b50610524600480360381019061051f9190613c20565b61117b565b005b34801561053257600080fd5b5061054d60048036038101906105489190613aa2565b6111e0565b60405161055a91906140e6565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613aa2565b611200565b60405161059791906140e6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613aa2565b611220565b6040516105d491906140e6565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613aa2565b611235565b6040516106119190613fd4565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613cae565b6116f7565b005b34801561064f57600080fd5b5061066a60048036038101906106659190613ba8565b611749565b005b34801561067857600080fd5b506106816117ec565b60405161068e91906140e6565b60405180910390f35b3480156106a357600080fd5b506106ac6117ff565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613aa2565b611896565b6040516106e2919061419e565b60405180910390f35b3480156106f757600080fd5b506107006118df565b60405161070d919061419e565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613b1d565b6118e5565b60405161074a91906140e6565b60405180910390f35b34801561075f57600080fd5b50610768611a52565b6040516107759190613fd4565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613aa2565b611a7b565b005b3480156107b357600080fd5b506107bc611b1e565b6040516107c991906140e6565b60405180910390f35b3480156107de57600080fd5b506107e7611b31565b6040516107f4919061411c565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613ba8565b611b6e565b005b34801561083257600080fd5b5061083b611bc4565b604051610848919061419e565b60405180910390f35b34801561085d57600080fd5b5061087860048036038101906108739190613b1d565b611bca565b005b34801561088657600080fd5b5061088f611c98565b60405161089c9190613fd4565b60405180910390f35b3480156108b157600080fd5b506108ba611cbe565b6040516108c79190613fd4565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613be4565b611ce4565b60405161090491906140e6565b60405180910390f35b34801561091957600080fd5b50610922611cf9565b60405161092f9190613fd4565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613aa2565b611d1f565b60405161096c91906140e6565b60405180910390f35b34801561098157600080fd5b5061099c60048036038101906109979190613aa2565b611d3f565b005b3480156109aa57600080fd5b506109b3611de1565b6040516109c09190613fd4565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613d4f565b611e07565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613b1d565b611edf565b604051610a26919061419e565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613c72565b611f66565b005b348015610a6457600080fd5b50610a6d611fd3565b604051610a7a919061419e565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613aa2565b611fe9565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613c20565b61208c565b604051610ae0919061419e565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190613af4565b6120a9565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613ba8565b6121c2565b005b348015610b4757600080fd5b50610b506123cf565b604051610b5d9190614101565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b889190613aa2565b6123f5565b604051610b9a91906140e6565b60405180910390f35b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600a81526020017f426f626f204275636b7300000000000000000000000000000000000000000000815250905090565b6000610c1133611076565b610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c479061415e565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d84919061419e565b60405180910390a36001905092915050565b610d9f336123f5565b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd59061417e565b60405180910390fd5b8060098190555050565b6000600754905090565b6000600754600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610fc057610f3f826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610fcb8484846124b6565b90509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000611071611024600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b611063611052600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b600754612ae390919063ffffffff16565b612ae390919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6110e133611076565b611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061415e565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611184336123f5565b6111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061417e565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b600061122e82600754610ca4565b9050919050565b600061124033611076565b61127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769061415e565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ca57600080fd5b505afa1580156112de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113029190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136457600080fd5b505afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c9190613acb565b6040518363ffffffff1660e01b81526004016113b992919061400a565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190613acb565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ca578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be9190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115589190613acb565b6040518363ffffffff1660e01b815260040161157592919061400a565b602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c79190613acb565b91505b81602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050919050565b611700336123f5565b61173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117369061417e565b60405180910390fd5b8060088190555050565b611752336123f5565b611791576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117889061417e565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260149054906101000a900460ff1681565b61180833611076565b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061415e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611892573d6000803e3d6000fd5b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60006118f033611076565b61192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061415e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161196a9190613fd4565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190613cd7565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016119f792919061405c565b602060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190613c49565b91505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a8433611076565b611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba9061415e565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f60009054906101000a900460ff1681565b60606040518060400160405280600481526020017f424f424f00000000000000000000000000000000000000000000000000000000815250905090565b611b7733611076565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061415e565b60405180910390fd5b611bc08282612af9565b5050565b60095481565b611bd3336123f5565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c099061417e565b60405180910390fd5b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf13384846124b6565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b611d4833611076565b611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061415e565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e10336123f5565b611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061417e565b60405180910390fd5b866011819055508560128190555084601381905550611e8985611e7b888a612c1190919063ffffffff16565b612c1190919063ffffffff16565b601481905550836015819055508260168190555081601781905550611ec982611ebb8587612c1190919063ffffffff16565b612c1190919063ffffffff16565b6018819055508060198190555050505050505050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6f336123f5565b611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa59061417e565b60405180910390fd5b81602260146101000a81548160ff021916908315150217905550806023819055505050565b6fffffffffffffffffffffffffffffffff801681565b611ff233611076565b612031576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120289061415e565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000811561209e5760185490506120a4565b60145490505b919050565b6120b233611076565b6120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e89061415e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516121b79190613fef565b60405180910390a150565b6121cb336123f5565b61220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122019061417e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156122fc57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016122c5929190614033565b600060405180830381600087803b1580156122df57600080fd5b505af11580156122f3573d6000803e3d6000fd5b505050506123cb565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161239892919061405c565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b505050505b5050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836124599190614302565b905092915050565b60008383111582906124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0919061411c565b60405180910390fd5b5082840390509392505050565b6000602460009054906101000a900460ff16156124df576124d8848484612c27565b9050612adc565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061258b57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9050801580156125e55750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126795760085484600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263891906142ac565b10612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061413e565b60405180910390fd5b5b80801561268857506009548410155b156126a457612695612d95565b156126a3576126a2612e68565b5b5b61272d846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061277c8787613405565b6127865784612792565b6127918787876136c6565b5b90506127e681600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661294c57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161291692919061405c565b600060405180830381600087803b15801561293057600080fd5b505af1925050508015612941575060015b61294a5761294b565b5b5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a6f57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a3992919061405c565b600060405180830381600087803b158015612a5357600080fd5b505af1925050508015612a64575060015b612a6d57612a6e565b5b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612acc919061419e565b60405180910390a3600193505050505b9392505050565b60008183612af1919061438d565b905092915050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612baf576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80612c0d576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60008183612c1f91906142ac565b905092915050565b6000612cb2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dfe5750602460009054906101000a900460ff16155b8015612e165750602260149054906101000a900460ff165b8015612e635750602354600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602460006101000a81548160ff0219169083151502179055506000612e8e30611896565b90506000612ebd601b54612eaf601c54601a54612c1190919063ffffffff16565b612c1190919063ffffffff16565b90506000612ed76002601a5461244b90919063ffffffff16565b90506000612eee8285612ae390919063ffffffff16565b90506000600267ffffffffffffffff811115612f33577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f615781602001602082028036833780820191505090505b5090503081600081518110612f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016130d99594939291906141b9565b600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b5050505060006131208247612ae390919063ffffffff16565b9050600061315e600261315089613142601a54876139f990919063ffffffff16565b61244b90919063ffffffff16565b61244b90919063ffffffff16565b905060006131898861317b601b54866139f990919063ffffffff16565b61244b90919063ffffffff16565b905060006131b4896131a6601c54876139f990919063ffffffff16565b61244b90919063ffffffff16565b90506000601a819055506000601c819055506000601b81905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323857600080fd5b505af19350505050801561324a575060015b61325357613254565b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132bc573d6000803e3d6000fd5b5060008811156133de57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161334f96959493929190614085565b6060604051808303818588803b15801561336857600080fd5b505af115801561337c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a19190613d00565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450683896040516133d5929190614213565b60405180910390a15b505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000600f60009054906101000a900460ff16156134c757600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134c05750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506136c0565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061357357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135fa57508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905081806136055750805b156136b857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136ae5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b93505050506136c0565b600093505050505b92915050565b600080601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061377357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905060006137808261208c565b905060006137ab60195461379d84896139f990919063ffffffff16565b61244b90919063ffffffff16565b9050821561384b5781601554826137c29190614333565b6137cc9190614302565b601a60008282546137dd91906142ac565b9250508190555081601754826137f39190614333565b6137fd9190614302565b601c600082825461380e91906142ac565b9250508190555081601654826138249190614333565b61382e9190614302565b601b600082825461383f91906142ac565b925050819055506138df565b816011548261385a9190614333565b6138649190614302565b601a600082825461387591906142ac565b92505081905550816013548261388b9190614333565b6138959190614302565b601c60008282546138a691906142ac565b9250508190555081601254826138bc9190614333565b6138c69190614302565b601b60008282546138d791906142ac565b925050819055505b61393181600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139d1919061419e565b60405180910390a36139ec8187612ae390919063ffffffff16565b9450505050509392505050565b60008183613a079190614333565b905092915050565b600081359050613a1e81614536565b92915050565b600081519050613a3381614536565b92915050565b600081359050613a488161454d565b92915050565b600081359050613a5d81614564565b92915050565b600081519050613a7281614564565b92915050565b600081359050613a878161457b565b92915050565b600081519050613a9c8161457b565b92915050565b600060208284031215613ab457600080fd5b6000613ac284828501613a0f565b91505092915050565b600060208284031215613add57600080fd5b6000613aeb84828501613a24565b91505092915050565b600060208284031215613b0657600080fd5b6000613b1484828501613a39565b91505092915050565b60008060408385031215613b3057600080fd5b6000613b3e85828601613a0f565b9250506020613b4f85828601613a0f565b9150509250929050565b600080600060608486031215613b6e57600080fd5b6000613b7c86828701613a0f565b9350506020613b8d86828701613a0f565b9250506040613b9e86828701613a78565b9150509250925092565b60008060408385031215613bbb57600080fd5b6000613bc985828601613a0f565b9250506020613bda85828601613a4e565b9150509250929050565b60008060408385031215613bf757600080fd5b6000613c0585828601613a0f565b9250506020613c1685828601613a78565b9150509250929050565b600060208284031215613c3257600080fd5b6000613c4084828501613a4e565b91505092915050565b600060208284031215613c5b57600080fd5b6000613c6984828501613a63565b91505092915050565b60008060408385031215613c8557600080fd5b6000613c9385828601613a4e565b9250506020613ca485828601613a78565b9150509250929050565b600060208284031215613cc057600080fd5b6000613cce84828501613a78565b91505092915050565b600060208284031215613ce957600080fd5b6000613cf784828501613a8d565b91505092915050565b600080600060608486031215613d1557600080fd5b6000613d2386828701613a8d565b9350506020613d3486828701613a8d565b9250506040613d4586828701613a8d565b9150509250925092565b600080600080600080600060e0888a031215613d6a57600080fd5b6000613d788a828b01613a78565b9750506020613d898a828b01613a78565b9650506040613d9a8a828b01613a78565b9550506060613dab8a828b01613a78565b9450506080613dbc8a828b01613a78565b93505060a0613dcd8a828b01613a78565b92505060c0613dde8a828b01613a78565b91505092959891949750929550565b6000613df98383613e14565b60208301905092915050565b613e0e81614428565b82525050565b613e1d816143c1565b82525050565b613e2c816143c1565b82525050565b6000613e3d82614267565b613e47818561428a565b9350613e5283614257565b8060005b83811015613e83578151613e6a8882613ded565b9750613e758361427d565b925050600181019050613e56565b5085935050505092915050565b613e99816143e5565b82525050565b613ea88161443a565b82525050565b613eb78161445e565b82525050565b6000613ec882614272565b613ed2818561429b565b9350613ee2818560208601614494565b613eeb81614525565b840191505092915050565b6000613f03601d8361429b565b91507f4d61782077616c6c657420686173206265656e207472696767657265640000006000830152602082019050919050565b6000613f4360068361429b565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f83600b8361429b565b91507f21415554484f52495a45440000000000000000000000000000000000000000006000830152602082019050919050565b613fbf81614411565b82525050565b613fce8161441b565b82525050565b6000602082019050613fe96000830184613e23565b92915050565b60006020820190506140046000830184613e05565b92915050565b600060408201905061401f6000830185613e23565b61402c6020830184613e23565b9392505050565b60006040820190506140486000830185613e23565b6140556020830184613eae565b9392505050565b60006040820190506140716000830185613e23565b61407e6020830184613fb6565b9392505050565b600060c08201905061409a6000830189613e23565b6140a76020830188613fb6565b6140b46040830187613eae565b6140c16060830186613eae565b6140ce6080830185613e23565b6140db60a0830184613fb6565b979650505050505050565b60006020820190506140fb6000830184613e90565b92915050565b60006020820190506141166000830184613e9f565b92915050565b600060208201905081810360008301526141368184613ebd565b905092915050565b6000602082019050818103600083015261415781613ef6565b9050919050565b6000602082019050818103600083015261417781613f36565b9050919050565b6000602082019050818103600083015261419781613f76565b9050919050565b60006020820190506141b36000830184613fb6565b92915050565b600060a0820190506141ce6000830188613fb6565b6141db6020830187613eae565b81810360408301526141ed8186613e32565b90506141fc6060830185613e23565b6142096080830184613fb6565b9695505050505050565b60006040820190506142286000830185613fb6565b6142356020830184613fb6565b9392505050565b60006020820190506142516000830184613fc5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142b782614411565b91506142c283614411565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142f7576142f66144c7565b5b828201905092915050565b600061430d82614411565b915061431883614411565b925082614328576143276144f6565b5b828204905092915050565b600061433e82614411565b915061434983614411565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614382576143816144c7565b5b828202905092915050565b600061439882614411565b91506143a383614411565b9250828210156143b6576143b56144c7565b5b828203905092915050565b60006143cc826143f1565b9050919050565b60006143de826143f1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061443382614470565b9050919050565b60006144458261444c565b9050919050565b6000614457826143f1565b9050919050565b600061446982614411565b9050919050565b600061447b82614482565b9050919050565b600061448d826143f1565b9050919050565b60005b838110156144b2578082015181840152602081019050614497565b838111156144c1576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b61453f816143c1565b811461454a57600080fd5b50565b614556816143d3565b811461456157600080fd5b50565b61456d816143e5565b811461457857600080fd5b50565b61458481614411565b811461458f57600080fd5b5056fea264697066735822122076295d3ba1919ac642075de1e7c1ddcdfcfd75ffbc77436770512592b238341964736f6c63430008000033608060405273c778417e063141139fce010982780140aa0cd5ab600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c778417e063141139fce010982780140aa0cd5ab600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000601555348015620000ce57600080fd5b5060405162003ecd38038062003ecd8339818101604052810190620000f49190620004b1565b80806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001de57737a250d5630b4cf539739df2c5dacb4c659f2488d620001e0565b815b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e600073dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200042492919062000540565b602060405180830381600087803b1580156200043f57600080fd5b505af115801562000454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047a9190620004f2565b505050620005ff565b6000815190506200049481620005cb565b92915050565b600081519050620004ab81620005e5565b92915050565b60008060408385031215620004c557600080fd5b6000620004d58582860162000483565b9250506020620004e88582860162000483565b9150509250929050565b6000602082840312156200050557600080fd5b600062000515848285016200049a565b91505092915050565b62000529816200056d565b82525050565b6200053a81620005b7565b82525050565b60006040820190506200055760008301856200051e565b6200056660208301846200052f565b9392505050565b60006200057a826200058d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620005c482620005ad565b9050919050565b620005d6816200056d565b8114620005e257600080fd5b50565b620005f08162000581565b8114620005fc57600080fd5b50565b6138be806200060f6000396000f3fe60806040526004361061023f5760003560e01c806389a302711161012e578063ce7c2ac2116100ab578063efca2eed1161006f578063efca2eed146108f1578063f0b37c041461091c578063f2fde38b14610945578063f854a27f1461096e578063fe9fbb80146109ab57610246565b8063ce7c2ac214610815578063d0e30db014610854578063d63a8e111461085e578063e0bab4c41461089b578063e2d2e219146108c657610246565b8063bcd259a8116100f2578063bcd259a81461071e578063c161357a14610747578063c238efd514610770578063c54e44eb146107ad578063ca89b899146107d857610246565b806389a30271146106255780638e42417514610650578063929925db1461068d578063997664d7146106ca578063b6a5d7de146106f557610246565b80632f54bf6e116101bc57806363eabae91161018057806363eabae9146105565780637088fb7f1461057f5780638366e79a1461059657806383e84500146105d357806387f681d8146105fc57610246565b80632f54bf6e1461045f5780633333cfc31461049c5780633a98ef39146104c55780635881f3ef146104f0578063610035a41461051957610246565b806315f7e05e1161020357806315f7e05e146103565780631b386a421461037f5780632870e95d146103bc57806328fd3198146103e55780632bcf161c1461042257610246565b806302c4aede1461024b5780630300f92514610288578063061ad62a146102c557806311ce023d1461030257806314b6ca961461032d57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906130be565b6109e8565b60405161027f9190613435565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190613110565b610a1b565b6040516102bc919061357b565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906130be565b610a40565b6040516102f99190613435565b60405180910390f35b34801561030e57600080fd5b50610317610a73565b604051610324919061357b565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906131d7565b610a79565b005b34801561036257600080fd5b5061037d600480360381019061037891906130be565b610e6f565b005b34801561038b57600080fd5b506103a660048036038101906103a19190613110565b610e7c565b6040516103b3919061357b565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906130be565b610f03565b005b3480156103f157600080fd5b5061040c600480360381019061040791906130be565b610fda565b604051610419919061357b565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906130be565b6110f4565b604051610456919061357b565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906130be565b61113d565b6040516104939190613494565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061319b565b611196565b005b3480156104d157600080fd5b506104da611239565b6040516104e7919061357b565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906130be565b61123f565b005b34801561052557600080fd5b50610540600480360381019061053b91906130be565b6112d1565b60405161054d9190613494565b60405180910390f35b34801561056257600080fd5b5061057d6004803603810190610578919061319b565b611327565b005b34801561058b57600080fd5b506105946113bf565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190613110565b611456565b6040516105ca9190613494565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613110565b611632565b005b34801561060857600080fd5b50610623600480360381019061061e91906130be565b6116fc565b005b34801561063157600080fd5b5061063a6117eb565b6040516106479190613435565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613110565b611803565b6040516106849190613494565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613110565b611897565b6040516106c19190613494565b60405180910390f35b3480156106d657600080fd5b506106df6118c6565b6040516106ec919061357b565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906130be565b6118cc565b005b34801561072a57600080fd5b5061074560048036038101906107409190613110565b61196e565b005b34801561075357600080fd5b5061076e6004803603810190610769919061314c565b611a45565b005b34801561077c57600080fd5b50610797600480360381019061079291906130be565b611b20565b6040516107a49190613435565b60405180910390f35b3480156107b957600080fd5b506107c2611b89565b6040516107cf9190613435565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa91906130be565b611ba1565b60405161080c919061357b565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906130be565b611bb9565b60405161084b93929190613596565b60405180910390f35b61085c611be3565b005b34801561086a57600080fd5b50610885600480360381019061088091906130be565b611ca3565b6040516108929190613494565b60405180910390f35b3480156108a757600080fd5b506108b0611cc3565b6040516108bd9190613435565b60405180910390f35b3480156108d257600080fd5b506108db611cdb565b6040516108e8919061357b565b60405180910390f35b3480156108fd57600080fd5b50610906611ce1565b604051610913919061357b565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906130be565b611ce7565b005b34801561095157600080fd5b5061096c600480360381019061096791906130e7565b611d8a565b005b34801561097a57600080fd5b50610995600480360381019061099091906130be565b611ea3565b6040516109a29190613494565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906130be565b611ec3565b6040516109df9190613494565b60405180910390f35b600d6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a602052816000526040600020602052806000526040600020600091509150505481565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad357600080fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115610c5d57600e6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c3d57610c3882600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f19565b610c5c565b610c5b8273dac17f958d2ee523a2206206994597c13d831ec7611f19565b5b5b600081118015610caf57506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b15610cc257610cbd82612c68565b610d24565b600081148015610d1457506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15610d2357610d2282612d17565b5b5b610d8d81610d7f601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601154612fb690919063ffffffff16565b612fcc90919063ffffffff16565b60118190555080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610e25601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612fe2565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b610e793382611f19565b50565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f5957600080fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561102f57600090506110ef565b600061107c601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612fe2565b90506000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116110d7576000925050506110ef565b6110ea8183612fb690919063ffffffff16565b925050505b919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61119f3361113d565b6111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d59061355b565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6112483361113d565b611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061355b565b60405180910390fd5b600081905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113c83361113d565b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe9061355b565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611452573d6000803e3d6000fd5b5050565b60006114613361113d565b6114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061355b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611506906134fb565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161154a9190613435565b60206040518083038186803b15801561156257600080fd5b505afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a919061323c565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016115d792919061346b565b602060405180830381600087803b1580156115f157600080fd5b505af1158015611605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116299190613213565b91505092915050565b61163b3361113d565b61167a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116719061355b565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6117053361113d565b611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b9061355b565b60405180910390fd5b600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60125481565b6118d53361113d565b611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b9061355b565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9061353b565b60405180910390fd5b611a418282611f19565b5050565b611a4e3361113d565b611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a849061355b565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401611ac892919061346b565b602060405180830381600087803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1a9190613213565b50505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b73dac17f958d2ee523a2206206994597c13d831ec781565b60096020528060005260406000206000915090505481565b60106020528060005260406000206000915090508060000154908060010154908060020154905083565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3d57600080fd5b6000349050611c5781601254612fcc90919063ffffffff16565b601281905550611c9a611c89601154611c7b8460155461301490919063ffffffff16565b61302a90919063ffffffff16565b601454612fcc90919063ffffffff16565b60148190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b60145481565b60135481565b611cf03361113d565b611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d269061355b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611d933361113d565b611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc99061355b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611e989190613450565b60405180910390a150565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061351b565b60405180910390fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611ff557612c64565b600061200083610fda565b90506000811115612c625761202081601354612fcc90919063ffffffff16565b60138190555042600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120bf81601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612fcc90919063ffffffff16565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612150601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612fe2565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123dc578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612232573d6000803e3d6000fd5b5061228581600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fcc90919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061235781600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fcc90919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c61565b600082905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161241c9190613435565b60206040518083038186803b15801561243457600080fd5b505afa158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246c919061323c565b9050600073ffffffffffffffffffffffffffffffffffffffff16600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561271d576000600267ffffffffffffffff811115612545577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125735781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106125d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110612648577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95856000848a426040518663ffffffff1660e01b81526004016126e594939291906134af565b6000604051808303818588803b1580156126fe57600080fd5b505af1158015612712573d6000803e3d6000fd5b505050505050612a08565b6000600367ffffffffffffffff811115612760577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561278e5781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106127ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106128c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600281518110612937577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95856000848a426040518663ffffffff1660e01b81526004016129d494939291906134af565b6000604051808303818588803b1580156129ed57600080fd5b505af1158015612a01573d6000803e3d6000fd5b5050505050505b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401612a439190613435565b60206040518083038186803b158015612a5b57600080fd5b505afa158015612a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a93919061323c565b9050612af9612aab8383612fb690919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fcc90919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bdd612b528383612fb690919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fcc90919063ffffffff16565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505b5b505b5050565b600680549050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066001600680549050612d2b91906136f8565b81548110612d62577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612e06577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546007600060066001600680549050612ea691906136f8565b81548110612edd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006805480612f7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008183612fc491906136f8565b905092915050565b60008183612fda9190613617565b905092915050565b600061300d601554612fff6014548561301490919063ffffffff16565b61302a90919063ffffffff16565b9050919050565b60008183613022919061369e565b905092915050565b60008183613038919061366d565b905092915050565b60008135905061304f8161382c565b92915050565b60008135905061306481613843565b92915050565b6000813590506130798161385a565b92915050565b60008151905061308e8161385a565b92915050565b6000813590506130a381613871565b92915050565b6000815190506130b881613871565b92915050565b6000602082840312156130d057600080fd5b60006130de84828501613040565b91505092915050565b6000602082840312156130f957600080fd5b600061310784828501613055565b91505092915050565b6000806040838503121561312357600080fd5b600061313185828601613040565b925050602061314285828601613040565b9150509250929050565b60008060006060848603121561316157600080fd5b600061316f86828701613040565b935050602061318086828701613040565b925050604061319186828701613094565b9150509250925092565b600080604083850312156131ae57600080fd5b60006131bc85828601613040565b92505060206131cd8582860161306a565b9150509250929050565b600080604083850312156131ea57600080fd5b60006131f885828601613040565b925050602061320985828601613094565b9150509250929050565b60006020828403121561322557600080fd5b60006132338482850161307f565b91505092915050565b60006020828403121561324e57600080fd5b600061325c848285016130a9565b91505092915050565b6000613271838361328c565b60208301905092915050565b61328681613786565b82525050565b6132958161372c565b82525050565b6132a48161372c565b82525050565b60006132b5826135dd565b6132bf81856135f5565b93506132ca836135cd565b8060005b838110156132fb5781516132e28882613265565b97506132ed836135e8565b9250506001810190506132ce565b5085935050505092915050565b61331181613750565b82525050565b61332081613798565b82525050565b6000613333601c83613606565b91507f43616e2774207769746864726177206e617469766520746f6b656e73000000006000830152602082019050919050565b6000613373601783613606565b91507f496e76616c6964207265776172642061646472657373210000000000000000006000830152602082019050919050565b60006133b3601183613606565b91507f596f752063616e277420646f20746861740000000000000000000000000000006000830152602082019050919050565b60006133f3600683613606565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b61342f8161377c565b82525050565b600060208201905061344a600083018461329b565b92915050565b6000602082019050613465600083018461327d565b92915050565b6000604082019050613480600083018561329b565b61348d6020830184613426565b9392505050565b60006020820190506134a96000830184613308565b92915050565b60006080820190506134c46000830187613317565b81810360208301526134d681866132aa565b90506134e5604083018561329b565b6134f26060830184613426565b95945050505050565b6000602082019050818103600083015261351481613326565b9050919050565b6000602082019050818103600083015261353481613366565b9050919050565b60006020820190508181036000830152613554816133a6565b9050919050565b60006020820190508181036000830152613574816133e6565b9050919050565b60006020820190506135906000830184613426565b92915050565b60006060820190506135ab6000830186613426565b6135b86020830185613426565b6135c56040830184613426565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136228261377c565b915061362d8361377c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613662576136616137ce565b5b828201905092915050565b60006136788261377c565b91506136838361377c565b925082613693576136926137fd565b5b828204905092915050565b60006136a98261377c565b91506136b48361377c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136ed576136ec6137ce565b5b828202905092915050565b60006137038261377c565b915061370e8361377c565b925082821015613721576137206137ce565b5b828203905092915050565b60006137378261375c565b9050919050565b60006137498261375c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613791826137aa565b9050919050565b60006137a38261377c565b9050919050565b60006137b5826137bc565b9050919050565b60006137c78261375c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6138358161372c565b811461384057600080fd5b50565b61384c8161373e565b811461385757600080fd5b50565b61386381613750565b811461386e57600080fd5b50565b61387a8161377c565b811461388557600080fd5b5056fea26469706673582212208b976e71d0ebb56e0c2c0b138a80af7420513a615142c57bc4363b31a575b76864736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063893d20e81161015a578063b6a5d7de116100c1578063f0b37c041161007a578063f0b37c0414610a83578063f1f3bca314610aac578063f2fde38b14610ae9578063f708a64f14610b12578063f887ea4014610b3b578063fe9fbb8014610b665761029e565b8063b6a5d7de14610975578063ca33e64c1461099e578063da2e3bad146109c9578063dd62ed3e146109f2578063df20fd4914610a2f578063e91f214e14610a585761029e565b8063a4b45c0011610113578063a4b45c0014610851578063a51af4c51461087a578063a8aa1b31146108a5578063a9059cbb146108d0578063ad5c46481461090d578063b62496f5146109385761029e565b8063893d20e81461075357806389ef69f61461077e57806391950f30146107a757806395d89b41146107d25780639a7a23d6146107fd5780639d64bf93146108265761029e565b8063379fad9a116101fe578063658d4b7f116101b7578063658d4b7f146106435780636ddd17131461066c5780637088fb7f1461069757806370a08231146106ae57806382247ec0146106eb5780638366e79a146107165761029e565b8063379fad9a146104fd5780633f4218e0146105265780634355855a14610563578063571ac8b0146105a05780635881f3ef146105dd5780635d0044ca1461061a5761029e565b806323b872dd1161025057806323b872dd146103c7578063296020e7146104045780632b112e49146104415780632f54bf6e1461046c578063313ce567146104a95780633425c001146104d45761029e565b806303382cbb146102a357806306fdde03146102ce57806307c89fe8146102f9578063095ea7b31461033657806315d61a821461037357806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610ba3565b6040516102c59190613fd4565b60405180910390f35b3480156102da57600080fd5b506102e3610bc9565b6040516102f0919061411c565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613aa2565b610c06565b60405161032d91906140e6565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613be4565b610ca4565b60405161036a91906140e6565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613cae565b610d96565b005b3480156103a857600080fd5b506103b1610de8565b6040516103be919061419e565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613b59565b610df2565b6040516103fb91906140e6565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613aa2565b610fd4565b60405161043891906140e6565b60405180910390f35b34801561044d57600080fd5b50610456610ff4565b604051610463919061419e565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613aa2565b611076565b6040516104a091906140e6565b60405180910390f35b3480156104b557600080fd5b506104be6110cf565b6040516104cb919061423c565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613aa2565b6110d8565b005b34801561050957600080fd5b50610524600480360381019061051f9190613c20565b61117b565b005b34801561053257600080fd5b5061054d60048036038101906105489190613aa2565b6111e0565b60405161055a91906140e6565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613aa2565b611200565b60405161059791906140e6565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613aa2565b611220565b6040516105d491906140e6565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613aa2565b611235565b6040516106119190613fd4565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613cae565b6116f7565b005b34801561064f57600080fd5b5061066a60048036038101906106659190613ba8565b611749565b005b34801561067857600080fd5b506106816117ec565b60405161068e91906140e6565b60405180910390f35b3480156106a357600080fd5b506106ac6117ff565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613aa2565b611896565b6040516106e2919061419e565b60405180910390f35b3480156106f757600080fd5b506107006118df565b60405161070d919061419e565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613b1d565b6118e5565b60405161074a91906140e6565b60405180910390f35b34801561075f57600080fd5b50610768611a52565b6040516107759190613fd4565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190613aa2565b611a7b565b005b3480156107b357600080fd5b506107bc611b1e565b6040516107c991906140e6565b60405180910390f35b3480156107de57600080fd5b506107e7611b31565b6040516107f4919061411c565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613ba8565b611b6e565b005b34801561083257600080fd5b5061083b611bc4565b604051610848919061419e565b60405180910390f35b34801561085d57600080fd5b5061087860048036038101906108739190613b1d565b611bca565b005b34801561088657600080fd5b5061088f611c98565b60405161089c9190613fd4565b60405180910390f35b3480156108b157600080fd5b506108ba611cbe565b6040516108c79190613fd4565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613be4565b611ce4565b60405161090491906140e6565b60405180910390f35b34801561091957600080fd5b50610922611cf9565b60405161092f9190613fd4565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613aa2565b611d1f565b60405161096c91906140e6565b60405180910390f35b34801561098157600080fd5b5061099c60048036038101906109979190613aa2565b611d3f565b005b3480156109aa57600080fd5b506109b3611de1565b6040516109c09190613fd4565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613d4f565b611e07565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613b1d565b611edf565b604051610a26919061419e565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613c72565b611f66565b005b348015610a6457600080fd5b50610a6d611fd3565b604051610a7a919061419e565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613aa2565b611fe9565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613c20565b61208c565b604051610ae0919061419e565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190613af4565b6120a9565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613ba8565b6121c2565b005b348015610b4757600080fd5b50610b506123cf565b604051610b5d9190614101565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b889190613aa2565b6123f5565b604051610b9a91906140e6565b60405180910390f35b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600a81526020017f426f626f204275636b7300000000000000000000000000000000000000000000815250905090565b6000610c1133611076565b610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c479061415e565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d84919061419e565b60405180910390a36001905092915050565b610d9f336123f5565b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd59061417e565b60405180910390fd5b8060098190555050565b6000600754905090565b6000600754600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610fc057610f3f826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610fcb8484846124b6565b90509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000611071611024600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b611063611052600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611896565b600754612ae390919063ffffffff16565b612ae390919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6110e133611076565b611120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111179061415e565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611184336123f5565b6111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba9061417e565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b600061122e82600754610ca4565b9050919050565b600061124033611076565b61127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769061415e565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ca57600080fd5b505afa1580156112de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113029190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136457600080fd5b505afa158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c9190613acb565b6040518363ffffffff1660e01b81526004016113b992919061400a565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190613acb565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ca578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be9190613acb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152057600080fd5b505afa158015611534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115589190613acb565b6040518363ffffffff1660e01b815260040161157592919061400a565b602060405180830381600087803b15801561158f57600080fd5b505af11580156115a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c79190613acb565b91505b81602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050919050565b611700336123f5565b61173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117369061417e565b60405180910390fd5b8060088190555050565b611752336123f5565b611791576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117889061417e565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260149054906101000a900460ff1681565b61180833611076565b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061415e565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611892573d6000803e3d6000fd5b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60006118f033611076565b61192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061415e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161196a9190613fd4565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190613cd7565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016119f792919061405c565b602060405180830381600087803b158015611a1157600080fd5b505af1158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190613c49565b91505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a8433611076565b611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba9061415e565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600f60009054906101000a900460ff1681565b60606040518060400160405280600481526020017f424f424f00000000000000000000000000000000000000000000000000000000815250905090565b611b7733611076565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad9061415e565b60405180910390fd5b611bc08282612af9565b5050565b60095481565b611bd3336123f5565b611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c099061417e565b60405180910390fd5b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cf13384846124b6565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b611d4833611076565b611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e9061415e565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e10336123f5565b611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061417e565b60405180910390fd5b866011819055508560128190555084601381905550611e8985611e7b888a612c1190919063ffffffff16565b612c1190919063ffffffff16565b601481905550836015819055508260168190555081601781905550611ec982611ebb8587612c1190919063ffffffff16565b612c1190919063ffffffff16565b6018819055508060198190555050505050505050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6f336123f5565b611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa59061417e565b60405180910390fd5b81602260146101000a81548160ff021916908315150217905550806023819055505050565b6fffffffffffffffffffffffffffffffff801681565b611ff233611076565b612031576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120289061415e565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000811561209e5760185490506120a4565b60145490505b919050565b6120b233611076565b6120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e89061415e565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516121b79190613fef565b60405180910390a150565b6121cb336123f5565b61220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122019061417e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156122fc57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016122c5929190614033565b600060405180830381600087803b1580156122df57600080fd5b505af11580156122f3573d6000803e3d6000fd5b505050506123cb565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161239892919061405c565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b505050505b5050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836124599190614302565b905092915050565b60008383111582906124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0919061411c565b60405180910390fd5b5082840390509392505050565b6000602460009054906101000a900460ff16156124df576124d8848484612c27565b9050612adc565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061258b57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9050801580156125e55750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126795760085484600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263891906142ac565b10612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f9061413e565b60405180910390fd5b5b80801561268857506009548410155b156126a457612695612d95565b156126a3576126a2612e68565b5b5b61272d846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061277c8787613405565b6127865784612792565b6127918787876136c6565b5b90506127e681600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661294c57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161291692919061405c565b600060405180830381600087803b15801561293057600080fd5b505af1925050508015612941575060015b61294a5761294b565b5b5b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a6f57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a3992919061405c565b600060405180830381600087803b158015612a5357600080fd5b505af1925050508015612a64575060015b612a6d57612a6e565b5b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612acc919061419e565b60405180910390a3600193505050505b9392505050565b60008183612af1919061438d565b905092915050565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612baf576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80612c0d576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60008183612c1f91906142ac565b905092915050565b6000612cb2826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124619092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4782600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dfe5750602460009054906101000a900460ff16155b8015612e165750602260149054906101000a900460ff165b8015612e635750602354600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602460006101000a81548160ff0219169083151502179055506000612e8e30611896565b90506000612ebd601b54612eaf601c54601a54612c1190919063ffffffff16565b612c1190919063ffffffff16565b90506000612ed76002601a5461244b90919063ffffffff16565b90506000612eee8285612ae390919063ffffffff16565b90506000600267ffffffffffffffff811115612f33577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f615781602001602082028036833780820191505090505b5090503081600081518110612f9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016130d99594939291906141b9565b600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b5050505060006131208247612ae390919063ffffffff16565b9050600061315e600261315089613142601a54876139f990919063ffffffff16565b61244b90919063ffffffff16565b61244b90919063ffffffff16565b905060006131898861317b601b54866139f990919063ffffffff16565b61244b90919063ffffffff16565b905060006131b4896131a6601c54876139f990919063ffffffff16565b61244b90919063ffffffff16565b90506000601a819055506000601c819055506000601b81905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561323857600080fd5b505af19350505050801561324a575060015b61325357613254565b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132bc573d6000803e3d6000fd5b5060008811156133de57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161334f96959493929190614085565b6060604051808303818588803b15801561336857600080fd5b505af115801561337c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a19190613d00565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450683896040516133d5929190614213565b60405180910390a15b505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000600f60009054906101000a900460ff16156134c757600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134c05750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506136c0565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061357357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135fa57508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905081806136055750805b156136b857600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136ae5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b93505050506136c0565b600093505050505b92915050565b600080601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061377357508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905060006137808261208c565b905060006137ab60195461379d84896139f990919063ffffffff16565b61244b90919063ffffffff16565b9050821561384b5781601554826137c29190614333565b6137cc9190614302565b601a60008282546137dd91906142ac565b9250508190555081601754826137f39190614333565b6137fd9190614302565b601c600082825461380e91906142ac565b9250508190555081601654826138249190614333565b61382e9190614302565b601b600082825461383f91906142ac565b925050819055506138df565b816011548261385a9190614333565b6138649190614302565b601a600082825461387591906142ac565b92505081905550816013548261388b9190614333565b6138959190614302565b601c60008282546138a691906142ac565b9250508190555081601254826138bc9190614333565b6138c69190614302565b601b60008282546138d791906142ac565b925050819055505b61393181600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1190919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139d1919061419e565b60405180910390a36139ec8187612ae390919063ffffffff16565b9450505050509392505050565b60008183613a079190614333565b905092915050565b600081359050613a1e81614536565b92915050565b600081519050613a3381614536565b92915050565b600081359050613a488161454d565b92915050565b600081359050613a5d81614564565b92915050565b600081519050613a7281614564565b92915050565b600081359050613a878161457b565b92915050565b600081519050613a9c8161457b565b92915050565b600060208284031215613ab457600080fd5b6000613ac284828501613a0f565b91505092915050565b600060208284031215613add57600080fd5b6000613aeb84828501613a24565b91505092915050565b600060208284031215613b0657600080fd5b6000613b1484828501613a39565b91505092915050565b60008060408385031215613b3057600080fd5b6000613b3e85828601613a0f565b9250506020613b4f85828601613a0f565b9150509250929050565b600080600060608486031215613b6e57600080fd5b6000613b7c86828701613a0f565b9350506020613b8d86828701613a0f565b9250506040613b9e86828701613a78565b9150509250925092565b60008060408385031215613bbb57600080fd5b6000613bc985828601613a0f565b9250506020613bda85828601613a4e565b9150509250929050565b60008060408385031215613bf757600080fd5b6000613c0585828601613a0f565b9250506020613c1685828601613a78565b9150509250929050565b600060208284031215613c3257600080fd5b6000613c4084828501613a4e565b91505092915050565b600060208284031215613c5b57600080fd5b6000613c6984828501613a63565b91505092915050565b60008060408385031215613c8557600080fd5b6000613c9385828601613a4e565b9250506020613ca485828601613a78565b9150509250929050565b600060208284031215613cc057600080fd5b6000613cce84828501613a78565b91505092915050565b600060208284031215613ce957600080fd5b6000613cf784828501613a8d565b91505092915050565b600080600060608486031215613d1557600080fd5b6000613d2386828701613a8d565b9350506020613d3486828701613a8d565b9250506040613d4586828701613a8d565b9150509250925092565b600080600080600080600060e0888a031215613d6a57600080fd5b6000613d788a828b01613a78565b9750506020613d898a828b01613a78565b9650506040613d9a8a828b01613a78565b9550506060613dab8a828b01613a78565b9450506080613dbc8a828b01613a78565b93505060a0613dcd8a828b01613a78565b92505060c0613dde8a828b01613a78565b91505092959891949750929550565b6000613df98383613e14565b60208301905092915050565b613e0e81614428565b82525050565b613e1d816143c1565b82525050565b613e2c816143c1565b82525050565b6000613e3d82614267565b613e47818561428a565b9350613e5283614257565b8060005b83811015613e83578151613e6a8882613ded565b9750613e758361427d565b925050600181019050613e56565b5085935050505092915050565b613e99816143e5565b82525050565b613ea88161443a565b82525050565b613eb78161445e565b82525050565b6000613ec882614272565b613ed2818561429b565b9350613ee2818560208601614494565b613eeb81614525565b840191505092915050565b6000613f03601d8361429b565b91507f4d61782077616c6c657420686173206265656e207472696767657265640000006000830152602082019050919050565b6000613f4360068361429b565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f83600b8361429b565b91507f21415554484f52495a45440000000000000000000000000000000000000000006000830152602082019050919050565b613fbf81614411565b82525050565b613fce8161441b565b82525050565b6000602082019050613fe96000830184613e23565b92915050565b60006020820190506140046000830184613e05565b92915050565b600060408201905061401f6000830185613e23565b61402c6020830184613e23565b9392505050565b60006040820190506140486000830185613e23565b6140556020830184613eae565b9392505050565b60006040820190506140716000830185613e23565b61407e6020830184613fb6565b9392505050565b600060c08201905061409a6000830189613e23565b6140a76020830188613fb6565b6140b46040830187613eae565b6140c16060830186613eae565b6140ce6080830185613e23565b6140db60a0830184613fb6565b979650505050505050565b60006020820190506140fb6000830184613e90565b92915050565b60006020820190506141166000830184613e9f565b92915050565b600060208201905081810360008301526141368184613ebd565b905092915050565b6000602082019050818103600083015261415781613ef6565b9050919050565b6000602082019050818103600083015261417781613f36565b9050919050565b6000602082019050818103600083015261419781613f76565b9050919050565b60006020820190506141b36000830184613fb6565b92915050565b600060a0820190506141ce6000830188613fb6565b6141db6020830187613eae565b81810360408301526141ed8186613e32565b90506141fc6060830185613e23565b6142096080830184613fb6565b9695505050505050565b60006040820190506142286000830185613fb6565b6142356020830184613fb6565b9392505050565b60006020820190506142516000830184613fc5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006142b782614411565b91506142c283614411565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142f7576142f66144c7565b5b828201905092915050565b600061430d82614411565b915061431883614411565b925082614328576143276144f6565b5b828204905092915050565b600061433e82614411565b915061434983614411565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614382576143816144c7565b5b828202905092915050565b600061439882614411565b91506143a383614411565b9250828210156143b6576143b56144c7565b5b828203905092915050565b60006143cc826143f1565b9050919050565b60006143de826143f1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061443382614470565b9050919050565b60006144458261444c565b9050919050565b6000614457826143f1565b9050919050565b600061446982614411565b9050919050565b600061447b82614482565b9050919050565b600061448d826143f1565b9050919050565b60005b838110156144b2578082015181840152602081019050614497565b838111156144c1576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b61453f816143c1565b811461454a57600080fd5b50565b614556816143d3565b811461456157600080fd5b50565b61456d816143e5565b811461457857600080fd5b50565b61458481614411565b811461458f57600080fd5b5056fea264697066735822122076295d3ba1919ac642075de1e7c1ddcdfcfd75ffbc77436770512592b238341964736f6c63430008000033

Deployed Bytecode Sourcemap

16884:15122:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18545:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20242:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29796:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20665:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28798:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19972:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21247:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17867:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31214:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4587:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20066:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29677:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28944:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17760:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17811:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20915:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31365:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28677:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29407:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18777:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28243:142;;;;;;;;;;;;;:::i;:::-;;20412:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17535:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28394:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20328:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29561:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17917:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20152:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25559:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17593:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30755:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18734:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18667:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21057:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17076:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17969:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4258:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18489:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29932:814;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20523:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31020:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16957:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4429:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24007:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4989:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29087:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18636:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4762:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18545:81;;;;;;;;;;;;;:::o;20242:80::-;20290:13;20314:5;;;;;;;;;;;;;;;;;20307:12;;20242:80;:::o;29796:127::-;29877:4;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;29900:7:::1;:15;29908:6;29900:15;;;;;;;;;;;;;;;;;;;;;;;;;29893:22;;29796:127:::0;;;:::o;20665:241::-;20765:4;20817:6;20782:11;:23;20794:10;20782:23;;;;;;;;;;;;;;;:32;20806:7;20782:32;;;;;;;;;;;;;;;:41;;;;20860:7;20839:37;;20848:10;20839:37;;;20869:6;20839:37;;;;;;:::i;:::-;;;;;;;;20894:4;20887:11;;20665:241;;;;:::o;28798:137::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28921:6:::1;28896:22;:31;;;;28798:137:::0;:::o;19972:88::-;20027:7;20045:12;;20038:19;;19972:88;:::o;21247:400::-;21381:4;21436:12;;21401:11;:19;21413:6;21401:19;;;;;;;;;;;;;;;:31;21421:10;21401:31;;;;;;;;;;;;;;;;:47;21398:181;;21498:69;21534:6;21498:69;;;;;;;;;;;;;;;;;:11;:19;21510:6;21498:19;;;;;;;;;;;;;;;:31;21518:10;21498:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;21464:11;:19;21476:6;21464:19;;;;;;;;;;;;;;;:31;21484:10;21464:31;;;;;;;;;;;;;;;:103;;;;21398:181;21599:40;21613:6;21621:9;21632:6;21599:13;:40::i;:::-;21592:47;;21247:400;;;;;:::o;17867:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;31214:142::-;31267:7;31294:54;31332:15;31342:4;;;;;;;;;;;31332:9;:15::i;:::-;31294:33;31311:15;31321:4;;;;;;;;;;;31311:9;:15::i;:::-;31294:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;31287:61;;31214:142;:::o;4587:103::-;4642:4;4677:5;;;;;;;;;;;4666:16;;:7;:16;;;4659:23;;4587:103;;;:::o;20066:80::-;20118:5;17464:1;20127:16;;20066:80;:::o;29677:110::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:5:::1;29756:7;:15;29764:6;29756:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;29677:110:::0;:::o;28944:134::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29064:6:::1;29039:22;;:31;;;;;;;;;;;;;;;;;;28944:134:::0;:::o;17760:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17811:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;20915:133::-;20986:4;21010:30;21018:7;21027:12;;21010:7;:30::i;:::-;21003:37;;20915:133;;;:::o;31365:573::-;31455:13;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31481:27:::1;31522:7;31481:49;;31564:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31552:47;;;31608:4;31615:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31552:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31544:95;;31671:1;31654:19;;:5;:19;;;31650:150;;;31710:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31698:50;;;31757:4;31764:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31698:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31690:98;;31650:150;31817:5;31810:4;;:12;;;;;;;;;;;;;;;;;;31845:16;31836:6;;:25;;;;;;;;;;;;;;;;;;31918:12;;31872:11;:26;31892:4;31872:26;;;;;;;;;;;;;;;:43;31907:6;;;;;;;;;;;31872:43;;;;;;;;;;;;;;;:58;;;;4004:1;31365:573:::0;;;:::o;28677:112::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28775:6:::1;28762:10;:19;;;;28677:112:::0;:::o;29407:145::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29538:6:::1;29516:11;:19;29528:6;29516:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29407:145:::0;;:::o;18777:30::-;;;;;;;;;;;;;:::o;28243:142::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28290:15:::1;28308:21;28290:39;;28348:10;28340:28;;:37;28369:7;28340:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4004:1;28243:142::o:0;20412:105::-;20478:7;20496:9;:18;20506:7;20496:18;;;;;;;;;;;;;;;;20489:25;;20412:105;;;:::o;17535:48::-;;;;:::o;28394:274::-;28506:10;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28529:24:::1;28563:6;28556:24;;;28589:4;28556:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28529:66;;28621:6;28614:23;;;28638:3;28643:16;28614:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28606:54;;4004:1;28394:274:::0;;;;:::o;20328:78::-;20380:7;20398:5;;;;;;;;;;;20391:12;;20328:78;:::o;29561:107::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;29656:4:::1;29638:7;:15;29646:6;29638:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;29561:107:::0;:::o;17917:42::-;;;;;;;;;;;;;:::o;20152:84::-;20202:13;20226:7;;;;;;;;;;;;;;;;;20219:14;;20152:84;:::o;25559:167::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25676:42:::1;25705:5;25712;25676:28;:42::i;:::-;25559:167:::0;;:::o;17593:41::-;;;;:::o;30755:256::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30924:22:::1;30900:21;;:46;;;;;;;;;;;;;;;;;;30981:22;30957:21;;:46;;;;;;;;;;;;;;;;;;30755:256:::0;;:::o;18734:33::-;;;;;;;;;;;;;:::o;18667:19::-;;;;;;;;;;;;;:::o;21057:181::-;21162:4;21186:44;21200:10;21212:9;21223:6;21186:13;:44::i;:::-;21179:51;;21057:181;;;;:::o;17076:64::-;;;;;;;;;;;;;:::o;17969:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;4258:94::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4340:4:::1;4318:14:::0;:19:::1;4333:3;4318:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4258:94:::0;:::o;18489:49::-;;;;;;;;;;;;;:::o;29932:814::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30256:16:::1;30238:15;:34;;;;30302:17;30283:16;:36;;;;30349:17;30330:16;:36;;;;30391:62;30435:17;30391:39;30412:17;30391:16;:20;;:39;;;;:::i;:::-;:43;;:62;;;;:::i;:::-;30377:11;:76;;;;30486:17;30467:16;:36;;;;30534:18;30514:17;:38;;;;30583:18;30563:17;:38;;;;30627:65;30673:18;30627:41;30649:18;30627:17;:21;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;30612:12;:80;;;;30723:15;30706:14;:32;;;;29932:814:::0;;;;;;;:::o;20523:133::-;20607:7;20625:11;:19;20637:6;20625:19;;;;;;;;;;;;;;;:28;20645:7;20625:28;;;;;;;;;;;;;;;;20618:35;;20523:133;;;;:::o;31020:185::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;31151:8:::1;31137:11;;:22;;;;;;;;;;;;;;;;;;31190:7;31170:17;:27;;;;31020:185:::0;;:::o;16957:48::-;16988:17;16957:48;;;:::o;4429:97::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4513:5:::1;4491:14;:19;4506:3;4491:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4429:97:::0;:::o;24007:187::-;24079:7;24103;24099:59;;;24134:12;;24127:19;;;;24099:59;24175:11;;24168:18;;24007:187;;;;:::o;4989:173::-;3972:19;3980:10;3972:7;:19::i;:::-;3964:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5073:3:::1;5065:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;5109:4;5087:14:::0;:19:::1;5102:3;5087:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5129:25;5150:3;5129:25;;;;;;:::i;:::-;;;;;;;;4989:173:::0;:::o;29087:311::-;4142:24;4155:10;4142:12;:24::i;:::-;4134:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29228:6:::1;29201:16;:24;29218:6;29201:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;29248:6;29245:146;;;29270:11;;;;;;;;;;;:20;;;29291:6;29299:1;29270:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29245:146;;;29332:11;;;;;;;;;;;:20;;;29353:6;29361:9;:17;29371:6;29361:17;;;;;;;;;;;;;;;;29332:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29245:146;29087:311:::0;;:::o;18636:24::-;;;;;;;;;;;;;:::o;4762:107::-;4818:4;4842:14;:19;4857:3;4842:19;;;;;;;;;;;;;;;;;;;;;;;;;4835:26;;4762:107;;;:::o;1850:98::-;1908:7;1939:1;1935;:5;;;;:::i;:::-;1928:12;;1850:98;;;;:::o;2064:206::-;2150:7;2208:1;2203;:6;;2211:12;2195:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2250:1;2246;:5;2239:12;;2064:206;;;;;:::o;21656:1333::-;21782:4;21803:6;;;;;;;;;;;21799:87;;;21833:41;21848:6;21856:9;21867:6;21833:14;:41::i;:::-;21826:48;;;;21799:87;21899:21;21931:6;;;;;;;;;;;21899:39;;21949:11;21963:25;:36;21989:9;21963:36;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;22016:13;22003:26;;:9;:26;;;21963:66;21949:80;;22048:6;22047:7;:30;;;;;22059:7;:18;22067:9;22059:18;;;;;;;;;;;;;;;;;;;;;;;;;22058:19;22047:30;22043:148;;;22135:10;;22125:6;22102:9;:20;22112:9;22102:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;22101:44;22093:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22043:148;22208:6;:42;;;;;22228:22;;22218:6;:32;;22208:42;22204:141;;;22271:16;:14;:16::i;:::-;22267:67;;;22308:10;:8;:10::i;:::-;22267:67;22204:141;22378:53;22400:6;22378:53;;;;;;;;;;;;;;;;;:9;:17;22388:6;22378:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;22358:9;:17;22368:6;22358:17;;;;;;;;;;;;;;;:73;;;;22445:22;22470:32;22484:6;22492:9;22470:13;:32::i;:::-;:78;;22542:6;22470:78;;;22505:34;22513:6;22521:9;22532:6;22505:7;:34::i;:::-;22470:78;22445:103;;22585:40;22610:14;22585:9;:20;22595:9;22585:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;22562:9;:20;22572:9;22562:20;;;;;;;;;;;;;;;:63;;;;22644:16;:24;22661:6;22644:24;;;;;;;;;;;;;;;;;;;;;;;;;22639:120;;22689:11;;;;;;;;;;;:20;;;22710:6;22718:9;:17;22728:6;22718:17;;;;;;;;;;;;;;;;22689:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22685:63;;;;;;22639:120;22774:16;:27;22791:9;22774:27;;;;;;;;;;;;;;;;;;;;;;;;;22769:129;;22822:11;;;;;;;;;;;:20;;;22843:9;22854;:20;22864:9;22854:20;;;;;;;;;;;;;;;;22822:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22818:69;;;;;;22769:129;22933:9;22916:43;;22925:6;22916:43;;;22944:14;22916:43;;;;;;:::i;:::-;;;;;;;;22977:4;22970:11;;;;;21656:1333;;;;;;:::o;1636:98::-;1694:7;1725:1;1721;:5;;;;:::i;:::-;1714:12;;1636:98;;;;:::o;25735:315::-;25879:5;25844:25;:32;25870:5;25844:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;25899:5;25895:68;;;25947:4;25921:16;:23;25938:5;25921:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;25895:68;25978:5;25973:70;;26026:5;26000:16;:23;26017:5;26000:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25973:70;25735:315;;:::o;1529:98::-;1587:7;1618:1;1614;:5;;;;:::i;:::-;1607:12;;1529:98;;;;:::o;22998:313::-;23125:4;23162:53;23184:6;23162:53;;;;;;;;;;;;;;;;;:9;:17;23172:6;23162:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23142:9;:17;23152:6;23142:17;;;;;;;;;;;;;;;:73;;;;23249:32;23274:6;23249:9;:20;23259:9;23249:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23226:9;:20;23236:9;23226:20;;;;;;;;;;;;;;;:55;;;;23299:4;23292:11;;22998:313;;;;;:::o;25329:221::-;25378:4;25403:25;:37;25429:10;25403:37;;;;;;;;;;;;;;;;;;;;;;;;;25402:38;:58;;;;;25454:6;;;;;;;;;;;25453:7;25402:58;:82;;;;;25473:11;;;;;;;;;;;25402:82;:140;;;;;25525:17;;25497:9;:24;25515:4;25497:24;;;;;;;;;;;;;;;;:45;;25402:140;25395:147;;25329:221;:::o;26059:1779::-;18948:4;18939:6;;:13;;;;;;;;;;;;;;;;;;26108:23:::1;26134:24;26152:4;26134:9;:24::i;:::-;26108:50;;26169:25;26197:80;26253:23;;26197:51;26224:23;;26197:22;;:26;;:51;;;;:::i;:::-;:55;;:80;;;;:::i;:::-;26169:108;;26291:26;26320:29;26347:1;26320:22;;:26;;:29;;;;:::i;:::-;26291:58;;26360:20;26383:39;26403:18;26383:15;:19;;:39;;;;:::i;:::-;26360:62;;26436:21;26474:1;26460:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26436:40;;26505:4;26487;26492:1;26487:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;26531:4;;;;;;;;;;;26521;26526:1;26521:7;;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;::::0;::::1;26546:21;26570;26546:45;;26605:6;;;;;;;;;;;:57;;;26677:12;26704:1;26720:4;26747;26767:15;26605:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26807:17;26827:40;26853:13;26827:21;:25;;:40;;;;:::i;:::-;26807:60;;26881:26;26910:67;26975:1;26910:60;26952:17;26910:37;26924:22;;26910:9;:13;;:37;;;;:::i;:::-;:41;;:60;;;;:::i;:::-;:64;;:67;;;;:::i;:::-;26881:96;;26988:27;27018:61;27061:17;27018:38;27032:23;;27018:9;:13;;:38;;;;:::i;:::-;:42;;:61;;;;:::i;:::-;26988:91;;27090:27;27120:61;27163:17;27120:38;27134:23;;27120:9;:13;;:38;;;;:::i;:::-;:42;;:61;;;;:::i;:::-;27090:91;;27220:1;27195:22;:26;;;;27258:1;27232:23;:27;;;;27296:1;27270:23;:27;;;;27315:11;;;;;;;;;;;:19;;;27342;27315:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;27311:65;;;;;;27394:21;;;;;;;;;;;27386:39;;:60;27426:19;27386:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27484:1;27463:18;:22;27460:371;;;27501:6;;;;;;;;;;;:22;;;27531:18;27577:4;27601:18;27638:1;27658::::0;27678:21:::1;;;;;;;;;;;27718:15;27501:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27768:51;27780:18;27800;27768:51;;;;;;;:::i;:::-;;;;;;;;27460:371;18954:1;;;;;;;;;;18975:5:::0;18966:6;;:14;;;;;;;;;;;;;;;;;;26059:1779::o;23320:678::-;23426:4;23449:22;;;;;;;;;;;23446:542;;;23496:11;:19;23508:6;23496:19;;;;;;;;;;;;;;;;;;;;;;;;;23495:20;:47;;;;;23520:11;:22;23532:9;23520:22;;;;;;;;;;;;;;;;;;;;;;;;;23519:23;23495:47;23488:54;;;;23446:542;23575:21;23607:6;;;;;;;;;;;23575:39;;23629:10;23642:25;:33;23668:6;23642:33;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;23689:13;23679:23;;:6;:23;;;23642:60;23629:73;;23717:11;23732:25;:36;23758:9;23732:36;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;23784:13;23771:26;;:9;:26;;;23732:65;23717:80;;23818:5;:15;;;;23827:6;23818:15;23815:162;;;23862:11;:19;23874:6;23862:19;;;;;;;;;;;;;;;;;;;;;;;;;23861:20;:47;;;;;23886:11;:22;23898:9;23886:22;;;;;;;;;;;;;;;;;;;;;;;;;23885:23;23861:47;23854:54;;;;;;;23815:162;23956:5;23949:12;;;;;23320:678;;;;;:::o;24203:1117::-;24322:7;24342:21;24374:6;;;;;;;;;;;24342:39;;24392:11;24406:25;:35;24432:8;24406:35;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;24457:13;24445:25;;:8;:25;;;24406:64;24392:78;;24484:16;24503:19;24515:6;24503:11;:19::i;:::-;24484:38;;24533:17;24553:40;24578:14;;24553:20;24564:8;24553:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;24533:60;;24610:6;24607:526;;;24690:8;24671:16;;24659:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24633:22;;:65;;;;;;;:::i;:::-;;;;;;;;24772:8;24752:17;;24740:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;24713:23;;:67;;;;;;;:::i;:::-;;;;;;;;24854:8;24834:17;;24822:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;24795:23;;:67;;;;;;;:::i;:::-;;;;;;;;24607:526;;;24951:8;24933:15;;24921:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;24895:22;;:64;;;;;;;:::i;:::-;;;;;;;;25032:8;25013:16;;25001:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24974:23;;:66;;;;;;;:::i;:::-;;;;;;;;25113:8;25094:16;;25082:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;25055:23;;:66;;;;;;;:::i;:::-;;;;;;;;24607:526;25173:39;25202:9;25173;:24;25191:4;25173:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;25146:9;:24;25164:4;25146:24;;;;;;;;;;;;;;;:66;;;;25253:4;25228:42;;25237:6;25228:42;;;25260:9;25228:42;;;;;;:::i;:::-;;;;;;;;25291:21;25302:9;25291:6;:10;;:21;;;;:::i;:::-;25284:28;;;;;;24203:1117;;;;;:::o;1743:98::-;1801:7;1832:1;1828;:5;;;;:::i;:::-;1821:12;;1743:98;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:137::-;;686:6;680:13;671:22;;702:30;726:5;702:30;:::i;:::-;661:77;;;;:::o;744:139::-;;828:6;815:20;806:29;;844:33;871:5;844:33;:::i;:::-;796:87;;;;:::o;889:143::-;;977:6;971:13;962:22;;993:33;1020:5;993:33;:::i;:::-;952:80;;;;:::o;1038:262::-;;1146:2;1134:9;1125:7;1121:23;1117:32;1114:2;;;1162:1;1159;1152:12;1114:2;1205:1;1230:53;1275:7;1266:6;1255:9;1251:22;1230:53;:::i;:::-;1220:63;;1176:117;1104:196;;;;:::o;1306:284::-;;1425:2;1413:9;1404:7;1400:23;1396:32;1393:2;;;1441:1;1438;1431:12;1393:2;1484:1;1509:64;1565:7;1556:6;1545:9;1541:22;1509:64;:::i;:::-;1499:74;;1455:128;1383:207;;;;:::o;1596:278::-;;1712:2;1700:9;1691:7;1687:23;1683:32;1680:2;;;1728:1;1725;1718:12;1680:2;1771:1;1796:61;1849:7;1840:6;1829:9;1825:22;1796:61;:::i;:::-;1786:71;;1742:125;1670:204;;;;:::o;1880:407::-;;;2005:2;1993:9;1984:7;1980:23;1976:32;1973:2;;;2021:1;2018;2011:12;1973:2;2064:1;2089:53;2134:7;2125:6;2114:9;2110:22;2089:53;:::i;:::-;2079:63;;2035:117;2191:2;2217:53;2262:7;2253:6;2242:9;2238:22;2217:53;:::i;:::-;2207:63;;2162:118;1963:324;;;;;:::o;2293:552::-;;;;2435:2;2423:9;2414:7;2410:23;2406:32;2403:2;;;2451:1;2448;2441:12;2403:2;2494:1;2519:53;2564:7;2555:6;2544:9;2540:22;2519:53;:::i;:::-;2509:63;;2465:117;2621:2;2647:53;2692:7;2683:6;2672:9;2668:22;2647:53;:::i;:::-;2637:63;;2592:118;2749:2;2775:53;2820:7;2811:6;2800:9;2796:22;2775:53;:::i;:::-;2765:63;;2720:118;2393:452;;;;;:::o;2851:401::-;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:50;3227:7;3218:6;3207:9;3203:22;3185:50;:::i;:::-;3175:60;;3130:115;2931:321;;;;;:::o;3258:407::-;;;3383:2;3371:9;3362:7;3358:23;3354:32;3351:2;;;3399:1;3396;3389:12;3351:2;3442:1;3467:53;3512:7;3503:6;3492:9;3488:22;3467:53;:::i;:::-;3457:63;;3413:117;3569:2;3595:53;3640:7;3631:6;3620:9;3616:22;3595:53;:::i;:::-;3585:63;;3540:118;3341:324;;;;;:::o;3671:256::-;;3776:2;3764:9;3755:7;3751:23;3747:32;3744:2;;;3792:1;3789;3782:12;3744:2;3835:1;3860:50;3902:7;3893:6;3882:9;3878:22;3860:50;:::i;:::-;3850:60;;3806:114;3734:193;;;;:::o;3933:278::-;;4049:2;4037:9;4028:7;4024:23;4020:32;4017:2;;;4065:1;4062;4055:12;4017:2;4108:1;4133:61;4186:7;4177:6;4166:9;4162:22;4133:61;:::i;:::-;4123:71;;4079:125;4007:204;;;;:::o;4217:401::-;;;4339:2;4327:9;4318:7;4314:23;4310:32;4307:2;;;4355:1;4352;4345:12;4307:2;4398:1;4423:50;4465:7;4456:6;4445:9;4441:22;4423:50;:::i;:::-;4413:60;;4369:114;4522:2;4548:53;4593:7;4584:6;4573:9;4569:22;4548:53;:::i;:::-;4538:63;;4493:118;4297:321;;;;;:::o;4624:262::-;;4732:2;4720:9;4711:7;4707:23;4703:32;4700:2;;;4748:1;4745;4738:12;4700:2;4791:1;4816:53;4861:7;4852:6;4841:9;4837:22;4816:53;:::i;:::-;4806:63;;4762:117;4690:196;;;;:::o;4892:284::-;;5011:2;4999:9;4990:7;4986:23;4982:32;4979:2;;;5027:1;5024;5017:12;4979:2;5070:1;5095:64;5151:7;5142:6;5131:9;5127:22;5095:64;:::i;:::-;5085:74;;5041:128;4969:207;;;;:::o;5182:596::-;;;;5335:2;5323:9;5314:7;5310:23;5306:32;5303:2;;;5351:1;5348;5341:12;5303:2;5394:1;5419:64;5475:7;5466:6;5455:9;5451:22;5419:64;:::i;:::-;5409:74;;5365:128;5532:2;5558:64;5614:7;5605:6;5594:9;5590:22;5558:64;:::i;:::-;5548:74;;5503:129;5671:2;5697:64;5753:7;5744:6;5733:9;5729:22;5697:64;:::i;:::-;5687:74;;5642:129;5293:485;;;;;:::o;5784:1136::-;;;;;;;;5994:3;5982:9;5973:7;5969:23;5965:33;5962:2;;;6011:1;6008;6001:12;5962:2;6054:1;6079:53;6124:7;6115:6;6104:9;6100:22;6079:53;:::i;:::-;6069:63;;6025:117;6181:2;6207:53;6252:7;6243:6;6232:9;6228:22;6207:53;:::i;:::-;6197:63;;6152:118;6309:2;6335:53;6380:7;6371:6;6360:9;6356:22;6335:53;:::i;:::-;6325:63;;6280:118;6437:2;6463:53;6508:7;6499:6;6488:9;6484:22;6463:53;:::i;:::-;6453:63;;6408:118;6565:3;6592:53;6637:7;6628:6;6617:9;6613:22;6592:53;:::i;:::-;6582:63;;6536:119;6694:3;6721:53;6766:7;6757:6;6746:9;6742:22;6721:53;:::i;:::-;6711:63;;6665:119;6823:3;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6794:119;5952:968;;;;;;;;;;:::o;6926:179::-;;7016:46;7058:3;7050:6;7016:46;:::i;:::-;7094:4;7089:3;7085:14;7071:28;;7006:99;;;;:::o;7111:147::-;7206:45;7245:5;7206:45;:::i;:::-;7201:3;7194:58;7184:74;;:::o;7264:108::-;7341:24;7359:5;7341:24;:::i;:::-;7336:3;7329:37;7319:53;;:::o;7378:118::-;7465:24;7483:5;7465:24;:::i;:::-;7460:3;7453:37;7443:53;;:::o;7532:732::-;;7680:54;7728:5;7680:54;:::i;:::-;7750:86;7829:6;7824:3;7750:86;:::i;:::-;7743:93;;7860:56;7910:5;7860:56;:::i;:::-;7939:7;7970:1;7955:284;7980:6;7977:1;7974:13;7955:284;;;8056:6;8050:13;8083:63;8142:3;8127:13;8083:63;:::i;:::-;8076:70;;8169:60;8222:6;8169:60;:::i;:::-;8159:70;;8015:224;8002:1;7999;7995:9;7990:14;;7955:284;;;7959:14;8255:3;8248:10;;7656:608;;;;;;;:::o;8270:109::-;8351:21;8366:5;8351:21;:::i;:::-;8346:3;8339:34;8329:50;;:::o;8385:167::-;8490:55;8539:5;8490:55;:::i;:::-;8485:3;8478:68;8468:84;;:::o;8558:147::-;8653:45;8692:5;8653:45;:::i;:::-;8648:3;8641:58;8631:74;;:::o;8711:364::-;;8827:39;8860:5;8827:39;:::i;:::-;8882:71;8946:6;8941:3;8882:71;:::i;:::-;8875:78;;8962:52;9007:6;9002:3;8995:4;8988:5;8984:16;8962:52;:::i;:::-;9039:29;9061:6;9039:29;:::i;:::-;9034:3;9030:39;9023:46;;8803:272;;;;;:::o;9081:327::-;;9244:67;9308:2;9303:3;9244:67;:::i;:::-;9237:74;;9341:31;9337:1;9332:3;9328:11;9321:52;9399:2;9394:3;9390:12;9383:19;;9227:181;;;:::o;9414:303::-;;9577:66;9641:1;9636:3;9577:66;:::i;:::-;9570:73;;9673:8;9669:1;9664:3;9660:11;9653:29;9708:2;9703:3;9699:12;9692:19;;9560:157;;;:::o;9723:309::-;;9886:67;9950:2;9945:3;9886:67;:::i;:::-;9879:74;;9983:13;9979:1;9974:3;9970:11;9963:34;10023:2;10018:3;10014:12;10007:19;;9869:163;;;:::o;10038:118::-;10125:24;10143:5;10125:24;:::i;:::-;10120:3;10113:37;10103:53;;:::o;10162:112::-;10245:22;10261:5;10245:22;:::i;:::-;10240:3;10233:35;10223:51;;:::o;10280:222::-;;10411:2;10400:9;10396:18;10388:26;;10424:71;10492:1;10481:9;10477:17;10468:6;10424:71;:::i;:::-;10378:124;;;;:::o;10508:238::-;;10647:2;10636:9;10632:18;10624:26;;10660:79;10736:1;10725:9;10721:17;10712:6;10660:79;:::i;:::-;10614:132;;;;:::o;10752:332::-;;10911:2;10900:9;10896:18;10888:26;;10924:71;10992:1;10981:9;10977:17;10968:6;10924:71;:::i;:::-;11005:72;11073:2;11062:9;11058:18;11049:6;11005:72;:::i;:::-;10878:206;;;;;:::o;11090:348::-;;11257:2;11246:9;11242:18;11234:26;;11270:71;11338:1;11327:9;11323:17;11314:6;11270:71;:::i;:::-;11351:80;11427:2;11416:9;11412:18;11403:6;11351:80;:::i;:::-;11224:214;;;;;:::o;11444:332::-;;11603:2;11592:9;11588:18;11580:26;;11616:71;11684:1;11673:9;11669:17;11660:6;11616:71;:::i;:::-;11697:72;11765:2;11754:9;11750:18;11741:6;11697:72;:::i;:::-;11570:206;;;;;:::o;11782:807::-;;12069:3;12058:9;12054:19;12046:27;;12083:71;12151:1;12140:9;12136:17;12127:6;12083:71;:::i;:::-;12164:72;12232:2;12221:9;12217:18;12208:6;12164:72;:::i;:::-;12246:80;12322:2;12311:9;12307:18;12298:6;12246:80;:::i;:::-;12336;12412:2;12401:9;12397:18;12388:6;12336:80;:::i;:::-;12426:73;12494:3;12483:9;12479:19;12470:6;12426:73;:::i;:::-;12509;12577:3;12566:9;12562:19;12553:6;12509:73;:::i;:::-;12036:553;;;;;;;;;:::o;12595:210::-;;12720:2;12709:9;12705:18;12697:26;;12733:65;12795:1;12784:9;12780:17;12771:6;12733:65;:::i;:::-;12687:118;;;;:::o;12811:258::-;;12960:2;12949:9;12945:18;12937:26;;12973:89;13059:1;13048:9;13044:17;13035:6;12973:89;:::i;:::-;12927:142;;;;:::o;13075:313::-;;13226:2;13215:9;13211:18;13203:26;;13275:9;13269:4;13265:20;13261:1;13250:9;13246:17;13239:47;13303:78;13376:4;13367:6;13303:78;:::i;:::-;13295:86;;13193:195;;;;:::o;13394:419::-;;13598:2;13587:9;13583:18;13575:26;;13647:9;13641:4;13637:20;13633:1;13622:9;13618:17;13611:47;13675:131;13801:4;13675:131;:::i;:::-;13667:139;;13565:248;;;:::o;13819:419::-;;14023:2;14012:9;14008:18;14000:26;;14072:9;14066:4;14062:20;14058:1;14047:9;14043:17;14036:47;14100:131;14226:4;14100:131;:::i;:::-;14092:139;;13990:248;;;:::o;14244:419::-;;14448:2;14437:9;14433:18;14425:26;;14497:9;14491:4;14487:20;14483:1;14472:9;14468:17;14461:47;14525:131;14651:4;14525:131;:::i;:::-;14517:139;;14415:248;;;:::o;14669:222::-;;14800:2;14789:9;14785:18;14777:26;;14813:71;14881:1;14870:9;14866:17;14857:6;14813:71;:::i;:::-;14767:124;;;;:::o;14897:831::-;;15198:3;15187:9;15183:19;15175:27;;15212:71;15280:1;15269:9;15265:17;15256:6;15212:71;:::i;:::-;15293:80;15369:2;15358:9;15354:18;15345:6;15293:80;:::i;:::-;15420:9;15414:4;15410:20;15405:2;15394:9;15390:18;15383:48;15448:108;15551:4;15542:6;15448:108;:::i;:::-;15440:116;;15566:72;15634:2;15623:9;15619:18;15610:6;15566:72;:::i;:::-;15648:73;15716:3;15705:9;15701:19;15692:6;15648:73;:::i;:::-;15165:563;;;;;;;;:::o;15734:332::-;;15893:2;15882:9;15878:18;15870:26;;15906:71;15974:1;15963:9;15959:17;15950:6;15906:71;:::i;:::-;15987:72;16055:2;16044:9;16040:18;16031:6;15987:72;:::i;:::-;15860:206;;;;;:::o;16072:214::-;;16199:2;16188:9;16184:18;16176:26;;16212:67;16276:1;16265:9;16261:17;16252:6;16212:67;:::i;:::-;16166:120;;;;:::o;16292:132::-;;16382:3;16374:11;;16412:4;16407:3;16403:14;16395:22;;16364:60;;;:::o;16430:114::-;;16531:5;16525:12;16515:22;;16504:40;;;:::o;16550:99::-;;16636:5;16630:12;16620:22;;16609:40;;;:::o;16655:113::-;;16757:4;16752:3;16748:14;16740:22;;16730:38;;;:::o;16774:184::-;;16907:6;16902:3;16895:19;16947:4;16942:3;16938:14;16923:29;;16885:73;;;;:::o;16964:169::-;;17082:6;17077:3;17070:19;17122:4;17117:3;17113:14;17098:29;;17060:73;;;;:::o;17139:305::-;;17198:20;17216:1;17198:20;:::i;:::-;17193:25;;17232:20;17250:1;17232:20;:::i;:::-;17227:25;;17386:1;17318:66;17314:74;17311:1;17308:81;17305:2;;;17392:18;;:::i;:::-;17305:2;17436:1;17433;17429:9;17422:16;;17183:261;;;;:::o;17450:185::-;;17507:20;17525:1;17507:20;:::i;:::-;17502:25;;17541:20;17559:1;17541:20;:::i;:::-;17536:25;;17580:1;17570:2;;17585:18;;:::i;:::-;17570:2;17627:1;17624;17620:9;17615:14;;17492:143;;;;:::o;17641:348::-;;17704:20;17722:1;17704:20;:::i;:::-;17699:25;;17738:20;17756:1;17738:20;:::i;:::-;17733:25;;17926:1;17858:66;17854:74;17851:1;17848:81;17843:1;17836:9;17829:17;17825:105;17822:2;;;17933:18;;:::i;:::-;17822:2;17981:1;17978;17974:9;17963:20;;17689:300;;;;:::o;17995:191::-;;18055:20;18073:1;18055:20;:::i;:::-;18050:25;;18089:20;18107:1;18089:20;:::i;:::-;18084:25;;18128:1;18125;18122:8;18119:2;;;18133:18;;:::i;:::-;18119:2;18178:1;18175;18171:9;18163:17;;18040:146;;;;:::o;18192:96::-;;18258:24;18276:5;18258:24;:::i;:::-;18247:35;;18237:51;;;:::o;18294:104::-;;18368:24;18386:5;18368:24;:::i;:::-;18357:35;;18347:51;;;:::o;18404:90::-;;18481:5;18474:13;18467:21;18456:32;;18446:48;;;:::o;18500:126::-;;18577:42;18570:5;18566:54;18555:65;;18545:81;;;:::o;18632:77::-;;18698:5;18687:16;;18677:32;;;:::o;18715:86::-;;18790:4;18783:5;18779:16;18768:27;;18758:43;;;:::o;18807:134::-;;18898:37;18929:5;18898:37;:::i;:::-;18885:50;;18875:66;;;:::o;18947:162::-;;19048:55;19097:5;19048:55;:::i;:::-;19035:68;;19025:84;;;:::o;19115:131::-;;19216:24;19234:5;19216:24;:::i;:::-;19203:37;;19193:53;;;:::o;19252:121::-;;19343:24;19361:5;19343:24;:::i;:::-;19330:37;;19320:53;;;:::o;19379:126::-;;19462:37;19493:5;19462:37;:::i;:::-;19449:50;;19439:66;;;:::o;19511:113::-;;19594:24;19612:5;19594:24;:::i;:::-;19581:37;;19571:53;;;:::o;19630:307::-;19698:1;19708:113;19722:6;19719:1;19716:13;19708:113;;;19807:1;19802:3;19798:11;19792:18;19788:1;19783:3;19779:11;19772:39;19744:2;19741:1;19737:10;19732:15;;19708:113;;;19839:6;19836:1;19833:13;19830:2;;;19919:1;19910:6;19905:3;19901:16;19894:27;19830:2;19679:258;;;;:::o;19943:180::-;19991:77;19988:1;19981:88;20088:4;20085:1;20078:15;20112:4;20109:1;20102:15;20129:180;20177:77;20174:1;20167:88;20274:4;20271:1;20264:15;20298:4;20295:1;20288:15;20315:102;;20407:2;20403:7;20398:2;20391:5;20387:14;20383:28;20373:38;;20363:54;;;:::o;20423:122::-;20496:24;20514:5;20496:24;:::i;:::-;20489:5;20486:35;20476:2;;20535:1;20532;20525:12;20476:2;20466:79;:::o;20551:138::-;20632:32;20658:5;20632:32;:::i;:::-;20625:5;20622:43;20612:2;;20679:1;20676;20669:12;20612:2;20602:87;:::o;20695:116::-;20765:21;20780:5;20765:21;:::i;:::-;20758:5;20755:32;20745:2;;20801:1;20798;20791:12;20745:2;20735:76;:::o;20817:122::-;20890:24;20908:5;20890:24;:::i;:::-;20883:5;20880:35;20870:2;;20929:1;20926;20919:12;20870:2;20860:79;:::o

Swarm Source

ipfs://8b976e71d0ebb56e0c2c0b138a80af7420513a615142c57bc4363b31a575b768
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.