ETH Price: $2,394.34 (-0.82%)

Token

7 Cranes (CRNS)
 

Overview

Max Total Supply

777,777,777,777 CRNS

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
204,031,486 CRNS

Value
$0.00
0x0ba744604dbbd3fe3f99912b9acd6f39528bcd88
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:
SevenCranes

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

//Welcome to the 7 Cranes Foundation / 7 Cranes DAO

//“The reason birds can fly and we 
//can’t is simply because they 
//have perfect faith, for to have 
//faith is to have wings..”


//Portal: https://t.me/Geranos_ETH

//links: https://linktr.ee/7cranesdao

// $CRNS - 7 Cranes


pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }

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

        return c;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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

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

library Address {
  
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline)
    external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

contract SevenCranes is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "7 Cranes";
    string private _symbol = "CRNS";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 777777777777 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
    address public liquidityPoolAddress = 0x659b63388Ac4C6Ff857b2B461Af44561CBF271c0;
    address public marketingAddress = 0x659b63388Ac4C6Ff857b2B461Af44561CBF271c0;
    address public devAddress = 0x659b63388Ac4C6Ff857b2B461Af44561CBF271c0;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);

    struct Distribution {
        uint256 marketing;
        uint256 dividend;
        uint256 liquidityPool;
    }

    struct Limits {
        uint256 maxBuyAmount;
        uint256 maxWalletAmount;
        bool isMaxBuyWalletEnabled;
    }
    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 burnRate;
    }

    bool public isBotProtectionEnabled = true;
    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;
    Limits public limits = Limits(7777777777 * 10**  _decimals, 777777777777 * 10** _decimals, true);

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[liquidityPoolAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;
        taxFees = TaxFees(7,7,7);
        distribution = Distribution(20,60,20);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

    function seLimitAmounts(uint256 maxWalletAmount, uint256 maxBuyAmount) external onlyOwner {
        limits.maxWalletAmount = maxWalletAmount * 10**_decimals;
        limits.maxBuyAmount = maxBuyAmount * 10**_decimals;
       
    }

    function enableDisableMaxBuyLimit(bool doEnableMaxBuyWallet) external onlyOwner {
         limits.isMaxBuyWalletEnabled = doEnableMaxBuyWallet;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function enableDisableBotProtection(bool doEnableBotProection) external onlyOwner {
        isBotProtectionEnabled = doEnableBotProection;
    }

    function createUniswapPair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 burnRate) external onlyOwner {
        require(buyFee <= 10 && sellFee <= 10, "Buy ad sell fees cannot exceed 10 percent");
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.burnRate = burnRate;
    }

    function setDistribution(uint256 marketing, uint256 dividend, uint256 liquidityPool) external onlyOwner {
        distribution.marketing = marketing;
        distribution.dividend = dividend;
        distribution.liquidityPool = liquidityPool;
    }

    function setWalletAddresses(address devAddr, address marketingAddr, address lpAddress) external onlyOwner {
        devAddress = devAddr;
        marketingAddress = marketingAddr;
        liquidityPoolAddress = lpAddress;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityPoolAddress,
            block.timestamp
        );
    }
    receive() external payable {}

    function getTokenAmountByEthPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = from != uniswapV2Pair && to == uniswapV2Pair;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair) {
            if(limits.isMaxBuyWalletEnabled) {
                require(amount <= limits.maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
                require(holderBalance <= limits.maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if(isBotProtectionEnabled) {
                require(!Address.isContract(to), "No bots allowed");
            }
        }
        if(isSell) {
            sellTaxTokens();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            if(isBotProtectionEnabled) {
                require(!Address.isContract(from) || !Address.isContract(to), "No bots allowed");
            }
            if(limits.isMaxBuyWalletEnabled) {
                require(holderBalance <= limits.maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
        }
        
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                distributeShares(tokenAmount);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 tokens) private lockTheSwap {
        uint256 lpTokens = tokens.mul(distribution.liquidityPool).div(100).div(2);
        uint256 tokensToSwap = tokens.sub(lpTokens);
        swapTokensForEth(tokensToSwap);
        uint256 distributionEth = address(this).balance;
        uint256 lpEth = distributionEth.mul(distribution.liquidityPool).div(100).div(2);
        uint256 dividendEth = distributionEth.mul(distribution.dividend).div(100);
        uint256 marketingEth = distributionEth.sub(lpEth);

        if(marketingEth > 0) {
            payable(marketingAddress).transfer(marketingEth);
        }
        if(dividendEth > 0) {
            sendEthDividends(dividendEth);
        }
        addLiquidity(lpTokens, lpEth);
        emit SwapAndLiquify(lpTokens, lpEth, lpTokens);
    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;

        if(takeFees && isSell) {
            if(taxFees.burnRate > 0) {
                uint256 burnAmount = amount.mul(taxFees.burnRate).div(100);
                _balances[deadWallet] = _balances[deadWallet].add(burnAmount);
                amount = amount.sub(burnAmount);
            }
            taxAmount = amount.mul(taxFees.sellFee).div(100);
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);
        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "7 CRANES DIVIDEND";
    string private _symbol = "CRNSD";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 1000000 * 10 **  _decimals;
    SevenCranes private sevenCranes;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setTokenBalance(address account) external {
        uint256 balance = sevenCranes.balanceOf(account);
        if(!sevenCranes.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        sevenCranes = SevenCranes(payable(contractAddr));
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}("");
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }
        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"liquidityPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"doEnableBotProection","type":"bool"}],"name":"enableDisableBotProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"doEnableMaxBuyWallet","type":"bool"}],"name":"enableDisableMaxBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limits","outputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"bool","name":"isMaxBuyWalletEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"seLimitAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"liquidityPool","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"burnRate","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"},{"internalType":"address","name":"lpAddress","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"burnRate","type":"uint256"}],"stateMutability":"view","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600881526020017f37204372616e657300000000000000000000000000000000000000000000000081525060089080519060200190620000e8929190620008bf565b506040518060400160405280600481526020017f43524e53000000000000000000000000000000000000000000000000000000008152506009908051906020019062000136929190620008bf565b506009600a60006101000a81548160ff021916908360ff160217905550600a60009054906101000a900460ff16600a62000171919062000b09565b64b5172b0c7162000183919062000b5a565b600b556001600c60016101000a81548160ff021916908315150217905550670429d069189e0000600d5573659b63388ac4c6ff857b2b461af44561cbf271c0600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073659b63388ac4c6ff857b2b461af44561cbf271c0600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073659b63388ac4c6ff857b2b461af44561cbf271c0601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506012556001601360006101000a81548160ff0219169083151502179055506040518060600160405280600a60009054906101000a900460ff16600a62000339919062000b09565b6401cf9778716200034b919062000b5a565b8152602001600a60009054906101000a900460ff16600a6200036e919062000b09565b64b5172b0c7162000380919062000b5a565b815260200160011515815250601b600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055505050348015620003d157600080fd5b506000620003e46200088e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460036000620004996200088e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620004ed6200089660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005546200088e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060600160405280600781526020016007815260200160078152506014600082015181600001556020820151816001015560408201518160020155905050604051806060016040528060148152602001603c8152602001601481525060176000820151816000015560208201518160010155604082015181600201559050506200081f6200088e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000880919062000bcc565b60405180910390a362000c4e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620008cd9062000c18565b90600052602060002090601f016020900481019282620008f157600085556200093d565b82601f106200090c57805160ff19168380011785556200093d565b828001600101855582156200093d579182015b828111156200093c5782518255916020019190600101906200091f565b5b5090506200094c919062000950565b5090565b5b808211156200096b57600081600090555060010162000951565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009fd57808604811115620009d557620009d46200096f565b5b6001851615620009e55780820291505b8081029050620009f5856200099e565b9450620009b5565b94509492505050565b60008262000a18576001905062000aeb565b8162000a28576000905062000aeb565b816001811462000a41576002811462000a4c5762000a82565b600191505062000aeb565b60ff84111562000a615762000a606200096f565b5b8360020a91508482111562000a7b5762000a7a6200096f565b5b5062000aeb565b5060208310610133831016604e8410600b841016171562000abc5782820a90508381111562000ab65762000ab56200096f565b5b62000aeb565b62000acb8484846001620009ab565b9250905081840481111562000ae55762000ae46200096f565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b168262000af2565b915062000b238362000afc565b925062000b527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a06565b905092915050565b600062000b678262000af2565b915062000b748362000af2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bb05762000baf6200096f565b5b828202905092915050565b62000bc68162000af2565b82525050565b600060208201905062000be3600083018462000bbb565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3157607f821691505b6020821081141562000c485762000c4762000be9565b5b50919050565b615eca8062000c5e6000396000f3fe60806040526004361061028c5760003560e01c806385141a771161015a578063a457c2d7116100c1578063d25b17b61161007a578063d25b17b6146109cf578063dcda6af3146109fa578063dd62ed3e14610a23578063e7dad4f914610a60578063f2fde38b14610a9d578063fb6287d214610ac657610293565b8063a457c2d7146108af578063a5ece941146108ec578063a6769c7114610917578063a9059cbb14610940578063b2abbbc41461097d578063c49b9a80146109a657610293565b80639758f61d116101135780639758f61d146107b357806397995706146107dc57806398acb5d8146108075780639b0e2e86146108305780639c1b8af514610859578063a2ae74f41461088457610293565b806385141a77146106b357806385d4787b146106de578063860aefcf14610707578063871c128d146107345780638da5cb5b1461075d57806395d89b411461078857610293565b806349bd5a5e116101fe5780636f343052116101b75780636f343052146105bb5780636f9e36a9146105e457806370a082311461060d578063715018a61461064a5780637154021c1461066157806371cd56af1461068a57610293565b806349bd5a5e146104b95780634a131672146104e45780634a74bb02146104fb5780635342acb41461052657806354a5df1f146105635780635ee58efc1461058e57610293565b806318160ddd1161025057806318160ddd1461039557806323b872dd146103c0578063313ce567146103fd57806339509351146104285780633ad10ef614610465578063441d801f1461049057610293565b806306fdde0314610298578063095ea7b3146102c35780630ddc0976146103005780630e8322731461032d5780631694505e1461036a57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610aef565b6040516102ba91906143ef565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906144b9565b610b81565b6040516102f79190614514565b60405180910390f35b34801561030c57600080fd5b50610315610b9f565b6040516103249392919061453e565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190614575565b610bb7565b6040516103619190614514565b60405180910390f35b34801561037657600080fd5b5061037f610c0d565b60405161038c9190614601565b60405180910390f35b3480156103a157600080fd5b506103aa610c33565b6040516103b7919061461c565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190614637565b610c3d565b6040516103f49190614514565b60405180910390f35b34801561040957600080fd5b50610412610d16565b60405161041f91906146a6565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906144b9565b610d2d565b60405161045c9190614514565b60405180910390f35b34801561047157600080fd5b5061047a610de0565b60405161048791906146d0565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b2919061477c565b610e06565b005b3480156104c557600080fd5b506104ce610eab565b6040516104db91906146d0565b60405180910390f35b3480156104f057600080fd5b506104f9610ed1565b005b34801561050757600080fd5b50610510611251565b60405161051d9190614514565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614575565b611264565b60405161055a9190614514565b60405180910390f35b34801561056f57600080fd5b506105786112ba565b604051610585919061461c565b60405180910390f35b34801561059a57600080fd5b506105a36112c0565b6040516105b29392919061453e565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906147dc565b6112d8565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061482f565b611390565b005b34801561061957600080fd5b50610634600480360381019061062f9190614575565b611489565b604051610641919061461c565b60405180910390f35b34801561065657600080fd5b5061065f6114d2565b005b34801561066d57600080fd5b506106886004803603810190610683919061486f565b611625565b005b34801561069657600080fd5b506106b160048036038101906106ac919061477c565b6116da565b005b3480156106bf57600080fd5b506106c861177f565b6040516106d591906146d0565b60405180910390f35b3480156106ea57600080fd5b50610705600480360381019061070091906149da565b6117a5565b005b34801561071357600080fd5b5061071c611848565b60405161072b93929190614a23565b60405180910390f35b34801561074057600080fd5b5061075b60048036038101906107569190614a5a565b61186d565b005b34801561076957600080fd5b50610772611951565b60405161077f91906146d0565b60405180910390f35b34801561079457600080fd5b5061079d61197a565b6040516107aa91906143ef565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906147dc565b611a0c565b005b3480156107e857600080fd5b506107f1611b15565b6040516107fe919061461c565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190614575565b611d58565b005b34801561083c57600080fd5b50610857600480360381019061085291906149da565b611e31565b005b34801561086557600080fd5b5061086e611ed4565b60405161087b919061461c565b60405180910390f35b34801561089057600080fd5b50610899611eda565b6040516108a69190614514565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d191906144b9565b611eed565b6040516108e39190614514565b60405180910390f35b3480156108f857600080fd5b50610901611fba565b60405161090e91906146d0565b60405180910390f35b34801561092357600080fd5b5061093e6004803603810190610939919061486f565b611fe0565b005b34801561094c57600080fd5b50610967600480360381019061096291906144b9565b612092565b6040516109749190614514565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614a5a565b6120b0565b005b3480156109b257600080fd5b506109cd60048036038101906109c8919061486f565b61214f565b005b3480156109db57600080fd5b506109e4612238565b6040516109f191906146d0565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614add565b61225e565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614b5e565b6123c8565b604051610a57919061461c565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190614575565b61244f565b604051610a949190614514565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf9190614575565b6124a5565b005b348015610ad257600080fd5b50610aed6004803603810190610ae89190614b9e565b612667565b005b606060088054610afe90614c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90614c20565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b95610b8e6127c4565b84846127cc565b6001905092915050565b60148060000154908060010154908060020154905083565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610c4a848484612997565b610d0b84610c566127c4565b610d0685604051806060016040528060288152602001615e4860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132019092919063ffffffff16565b6127cc565b600190509392505050565b6000600a60009054906101000a900460ff16905090565b6000610dd6610d3a6127c4565b84610dd18560046000610d4b6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b6127cc565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0e6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290614c9e565b60405180910390fd5b610ea68383836132c3565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed96127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90614d30565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190614d65565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111359190614d65565b6040518363ffffffff1660e01b8152600401611152929190614d92565b6020604051808303816000875af1158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190614d65565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60178060000154908060010154908060020154905083565b6112e06127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490614c9e565b60405180910390fd5b826017600001819055508160176001018190555080601760020181905550505050565b6113986127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614c9e565b60405180910390fd5b600a60009054906101000a900460ff16600a6114419190614f1d565b8261144c9190614f68565b601b60010181905550600a60009054906101000a900460ff16600a6114719190614f1d565b8161147c9190614f68565b601b600001819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114da6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61162d6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190614c9e565b60405180910390fd5b80601b60020160006101000a81548160ff02191690831515021790555050565b6116e26127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614c9e565b60405180910390fd5b61177a83838361336e565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117ad6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614c9e565b60405180910390fd5b611845816001613419565b50565b601b8060000154908060010154908060020160009054906101000a900460ff16905083565b6118756127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614c9e565b60405180910390fd5b601254811415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90615034565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461198990614c20565b80601f01602080910402602001604051908101604052809291908181526020018280546119b590614c20565b8015611a025780601f106119d757610100808354040283529160200191611a02565b820191906000526020600020905b8154815290600101906020018083116119e557829003601f168201915b5050505050905090565b611a146127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890614c9e565b60405180910390fd5b600a8311158015611ab35750600a8211155b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae9906150c6565b60405180910390fd5b826014600001819055508160146001018190555080601460020181905550505050565b600080600267ffffffffffffffff811115611b3357611b3261489c565b5b604051908082528060200260200182016040528015611b615781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190614d65565b81600081518110611c0957611c086150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c5857611c576150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611cf19291906151d3565b600060405180830381865afa158015611d0e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d3791906152db565b600181518110611d4a57611d496150e6565b5b602002602001015191505090565b611d606127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de490614c9e565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e396127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614c9e565b60405180910390fd5b611ed1816000613419565b50565b60125481565b601360009054906101000a900460ff1681565b6000611fb0611efa6127c4565b84611fab85604051806060016040528060258152602001615e706025913960046000611f246127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132019092919063ffffffff16565b6127cc565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fe86127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614c9e565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b60006120a661209f6127c4565b8484612997565b6001905092915050565b6120b86127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90614c9e565b60405180910390fd5b80600d8190555050565b6121576127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614c9e565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161222d9190614514565b60405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006006600061226c6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90615396565b60405180910390fd5b82829050858590501461233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233290615428565b60405180910390fd5b5b848490508110156123c1576123ad6123526127c4565b868684818110612365576123646150e6565b5b905060200201602081019061237a9190614575565b633b9aca00868686818110612392576123916150e6565b5b905060200201356123a39190614f68565b6000806000613510565b6001816123ba9190615448565b905061233c565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124ad6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a190615510565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61266f6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f390614c9e565b60405180910390fd5b82601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561283c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612833906155a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390615634565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161298a919061461c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90615758565b60405180910390fd5b60008111612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab1906157ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390615856565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612bf95750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca15750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce05750612cb0611951565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612d1f5750612cef611951565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d3e84612d3087611489565b61326590919063ffffffff16565b9050612d48611951565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612db65750612d86611951565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e105750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ef957600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612eb95750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef906158e8565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561305857601b60020160009054906101000a900460ff1615612ff857601b60000154841115612faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa69061597a565b60405180910390fd5b601b60010154811115612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee90615a0c565b60405180910390fd5b5b601360009054906101000a900460ff16156130575761301685613b22565b15613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d90615a78565b60405180910390fd5b5b5b821561306757613066613b6d565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131135750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156131ea57601360009054906101000a900460ff16156131885761313686613b22565b1580613148575061314685613b22565b155b613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90615a78565b60405180910390fd5b5b601b60020160009054906101000a900460ff16156131e957601b600101548111156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90615a0c565b60405180910390fd5b5b5b6131f986868685876001613510565b505050505050565b6000838311158290613249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324091906143ef565b60405180910390fd5b50600083856132589190615a98565b9050809150509392505050565b60008082846132749190615448565b9050838110156132b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b090615b18565b60405180910390fd5b8091505092915050565b60005b838390508110156133685760008484838181106132e6576132e56150e6565b5b90506020020160208101906132fb9190614575565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061336090615b38565b9150506132c6565b50505050565b60005b83839050811015613413576000848483818110613391576133906150e6565b5b90506020020160208101906133a69190614575565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061340b90615b38565b915050613371565b50505050565b60005b825181101561350b57600083828151811061343a576134396150e6565b5b6020026020010151905082156134a7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506134f7565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061350390615b38565b91505061341c565b505050565b60008361351e57600061354a565b613549606461353b60146000015488613bd890919063ffffffff16565b613c5390919063ffffffff16565b5b90508380156135565750825b156136b65760006014600201541115613688576000613596606461358860146002015489613bd890919063ffffffff16565b613c5390919063ffffffff16565b905061360c8160036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b60036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136848187613c9d90919063ffffffff16565b9550505b6136b360646136a560146001015488613bd890919063ffffffff16565b613c5390919063ffffffff16565b90505b60006136cb8287613c9d90919063ffffffff16565b905061371f86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c9d90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b481600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384982600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516138e9919061461c565b60405180910390a38215613b1857601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b815260040161395291906146d0565b600060405180830381600087803b15801561396c57600080fd5b505af192505050801561397d575060015b61398657613987565b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b81526004016139e291906146d0565b600060405180830381600087803b1580156139fc57600080fd5b505af1925050508015613a0d575060015b613a1657613a17565b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796012546040518263ffffffff1660e01b8152600401613a74919061461c565b6060604051808303816000875af1925050508015613ab057506040513d601f19601f82011682018060405250810190613aad9190615b81565b60015b613ab957613b17565b3273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601254604051613b0b9493929190615bd4565b60405180910390a35050505b5b5050505050505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613b6457506000801b8214155b92505050919050565b6000613b7830611489565b90506000811115613bd5576000613b8d611b15565b9050808210158015613bac5750600c60009054906101000a900460ff16155b8015613bc45750600c60019054906101000a900460ff165b15613bd357613bd281613ce7565b5b505b50565b600080831415613beb5760009050613c4d565b60008284613bf99190614f68565b9050828482613c089190615c48565b14613c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3f90615ceb565b60405180910390fd5b809150505b92915050565b6000613c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee0565b905092915050565b6000613cdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613201565b905092915050565b6001600c60006101000a81548160ff0219169083151502179055506000613d426002613d346064613d2660176002015487613bd890919063ffffffff16565b613c5390919063ffffffff16565b613c5390919063ffffffff16565b90506000613d598284613c9d90919063ffffffff16565b9050613d6481613f43565b60004790506000613da96002613d9b6064613d8d60176002015487613bd890919063ffffffff16565b613c5390919063ffffffff16565b613c5390919063ffffffff16565b90506000613dd86064613dca60176001015486613bd890919063ffffffff16565b613c5390919063ffffffff16565b90506000613def8385613c9d90919063ffffffff16565b90506000811115613e6457600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e62573d6000803e3d6000fd5b505b6000821115613e7757613e7682614186565b5b613e818684614256565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868488604051613eb49392919061453e565b60405180910390a15050505050506000600c60006101000a81548160ff02191690831515021790555050565b60008083118290613f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1e91906143ef565b60405180910390fd5b5060008385613f369190615c48565b9050809150509392505050565b6000600267ffffffffffffffff811115613f6057613f5f61489c565b5b604051908082528060200260200182016040528015613f8e5781602001602082028036833780820191505090505b5090503081600081518110613fa657613fa56150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140719190614d65565b81600181518110614085576140846150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140ec30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127cc565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614150959493929190615d46565b600060405180830381600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516141ce90615dd1565b60006040518083038185875af1925050503d806000811461420b576040519150601f19603f3d011682016040523d82523d6000602084013e614210565b606091505b505090508015614252577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614249919061461c565b60405180910390a15b5050565b61428330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127cc565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161430c96959493929190615de6565b60606040518083038185885af115801561432a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061434f9190615b81565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614390578082015181840152602081019050614375565b8381111561439f576000848401525b50505050565b6000601f19601f8301169050919050565b60006143c182614356565b6143cb8185614361565b93506143db818560208601614372565b6143e4816143a5565b840191505092915050565b6000602082019050818103600083015261440981846143b6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061445082614425565b9050919050565b61446081614445565b811461446b57600080fd5b50565b60008135905061447d81614457565b92915050565b6000819050919050565b61449681614483565b81146144a157600080fd5b50565b6000813590506144b38161448d565b92915050565b600080604083850312156144d0576144cf61441b565b5b60006144de8582860161446e565b92505060206144ef858286016144a4565b9150509250929050565b60008115159050919050565b61450e816144f9565b82525050565b60006020820190506145296000830184614505565b92915050565b61453881614483565b82525050565b6000606082019050614553600083018661452f565b614560602083018561452f565b61456d604083018461452f565b949350505050565b60006020828403121561458b5761458a61441b565b5b60006145998482850161446e565b91505092915050565b6000819050919050565b60006145c76145c26145bd84614425565b6145a2565b614425565b9050919050565b60006145d9826145ac565b9050919050565b60006145eb826145ce565b9050919050565b6145fb816145e0565b82525050565b600060208201905061461660008301846145f2565b92915050565b6000602082019050614631600083018461452f565b92915050565b6000806000606084860312156146505761464f61441b565b5b600061465e8682870161446e565b935050602061466f8682870161446e565b9250506040614680868287016144a4565b9150509250925092565b600060ff82169050919050565b6146a08161468a565b82525050565b60006020820190506146bb6000830184614697565b92915050565b6146ca81614445565b82525050565b60006020820190506146e560008301846146c1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147105761470f6146eb565b5b8235905067ffffffffffffffff81111561472d5761472c6146f0565b5b602083019150836020820283011115614749576147486146f5565b5b9250929050565b614759816144f9565b811461476457600080fd5b50565b60008135905061477681614750565b92915050565b6000806000604084860312156147955761479461441b565b5b600084013567ffffffffffffffff8111156147b3576147b2614420565b5b6147bf868287016146fa565b935093505060206147d286828701614767565b9150509250925092565b6000806000606084860312156147f5576147f461441b565b5b6000614803868287016144a4565b9350506020614814868287016144a4565b9250506040614825868287016144a4565b9150509250925092565b600080604083850312156148465761484561441b565b5b6000614854858286016144a4565b9250506020614865858286016144a4565b9150509250929050565b6000602082840312156148855761488461441b565b5b600061489384828501614767565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148d4826143a5565b810181811067ffffffffffffffff821117156148f3576148f261489c565b5b80604052505050565b6000614906614411565b905061491282826148cb565b919050565b600067ffffffffffffffff8211156149325761493161489c565b5b602082029050602081019050919050565b600061495661495184614917565b6148fc565b90508083825260208201905060208402830185811115614979576149786146f5565b5b835b818110156149a2578061498e888261446e565b84526020840193505060208101905061497b565b5050509392505050565b600082601f8301126149c1576149c06146eb565b5b81356149d1848260208601614943565b91505092915050565b6000602082840312156149f0576149ef61441b565b5b600082013567ffffffffffffffff811115614a0e57614a0d614420565b5b614a1a848285016149ac565b91505092915050565b6000606082019050614a38600083018661452f565b614a45602083018561452f565b614a526040830184614505565b949350505050565b600060208284031215614a7057614a6f61441b565b5b6000614a7e848285016144a4565b91505092915050565b60008083601f840112614a9d57614a9c6146eb565b5b8235905067ffffffffffffffff811115614aba57614ab96146f0565b5b602083019150836020820283011115614ad657614ad56146f5565b5b9250929050565b60008060008060408587031215614af757614af661441b565b5b600085013567ffffffffffffffff811115614b1557614b14614420565b5b614b21878288016146fa565b9450945050602085013567ffffffffffffffff811115614b4457614b43614420565b5b614b5087828801614a87565b925092505092959194509250565b60008060408385031215614b7557614b7461441b565b5b6000614b838582860161446e565b9250506020614b948582860161446e565b9150509250929050565b600080600060608486031215614bb757614bb661441b565b5b6000614bc58682870161446e565b9350506020614bd68682870161446e565b9250506040614be78682870161446e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3857607f821691505b60208210811415614c4c57614c4b614bf1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c88602083614361565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1a602283614361565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b600081519050614d5f81614457565b92915050565b600060208284031215614d7b57614d7a61441b565b5b6000614d8984828501614d50565b91505092915050565b6000604082019050614da760008301856146c1565b614db460208301846146c1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614e4157808604811115614e1d57614e1c614dbb565b5b6001851615614e2c5780820291505b8081029050614e3a85614dea565b9450614e01565b94509492505050565b600082614e5a5760019050614f16565b81614e685760009050614f16565b8160018114614e7e5760028114614e8857614eb7565b6001915050614f16565b60ff841115614e9a57614e99614dbb565b5b8360020a915084821115614eb157614eb0614dbb565b5b50614f16565b5060208310610133831016604e8410600b8410161715614eec5782820a905083811115614ee757614ee6614dbb565b5b614f16565b614ef98484846001614df7565b92509050818404811115614f1057614f0f614dbb565b5b81810290505b9392505050565b6000614f2882614483565b9150614f338361468a565b9250614f607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e4a565b905092915050565b6000614f7382614483565b9150614f7e83614483565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fb757614fb6614dbb565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061501e602c83614361565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f4275792061642073656c6c20666565732063616e6e6f7420657863656564203160008201527f302070657263656e740000000000000000000000000000000000000000000000602082015250565b60006150b0602983614361565b91506150bb82615054565b604082019050919050565b600060208201905081810360008301526150df816150a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61514a81614445565b82525050565b600061515c8383615141565b60208301905092915050565b6000602082019050919050565b600061518082615115565b61518a8185615120565b935061519583615131565b8060005b838110156151c65781516151ad8882615150565b97506151b883615168565b925050600181019050615199565b5085935050505092915050565b60006040820190506151e8600083018561452f565b81810360208301526151fa8184615175565b90509392505050565b600067ffffffffffffffff82111561521e5761521d61489c565b5b602082029050602081019050919050565b60008151905061523e8161448d565b92915050565b600061525761525284615203565b6148fc565b9050808382526020820190506020840283018581111561527a576152796146f5565b5b835b818110156152a3578061528f888261522f565b84526020840193505060208101905061527c565b5050509392505050565b600082601f8301126152c2576152c16146eb565b5b81516152d2848260208601615244565b91505092915050565b6000602082840312156152f1576152f061441b565b5b600082015167ffffffffffffffff81111561530f5761530e614420565b5b61531b848285016152ad565b91505092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000615380602d83614361565b915061538b82615324565b604082019050919050565b600060208201905081810360008301526153af81615373565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615412602a83614361565b915061541d826153b6565b604082019050919050565b6000602082019050818103600083015261544181615405565b9050919050565b600061545382614483565b915061545e83614483565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561549357615492614dbb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154fa602683614361565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558c602483614361565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561e602283614361565b9150615629826155c2565b604082019050919050565b6000602082019050818103600083015261564d81615611565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156b0602583614361565b91506156bb82615654565b604082019050919050565b600060208201905081810360008301526156df816156a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615742602383614361565b915061574d826156e6565b604082019050919050565b6000602082019050818103600083015261577181615735565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157d4602983614361565b91506157df82615778565b604082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615840601e83614361565b915061584b8261580a565b602082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006158d2602f83614361565b91506158dd82615876565b604082019050919050565b60006020820190508181036000830152615901816158c5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615964602883614361565b915061596f82615908565b604082019050919050565b6000602082019050818103600083015261599381615957565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006159f6602583614361565b9150615a018261599a565b604082019050919050565b60006020820190508181036000830152615a25816159e9565b9050919050565b7f4e6f20626f747320616c6c6f7765640000000000000000000000000000000000600082015250565b6000615a62600f83614361565b9150615a6d82615a2c565b602082019050919050565b60006020820190508181036000830152615a9181615a55565b9050919050565b6000615aa382614483565b9150615aae83614483565b925082821015615ac157615ac0614dbb565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b02601b83614361565b9150615b0d82615acc565b602082019050919050565b60006020820190508181036000830152615b3181615af5565b9050919050565b6000615b4382614483565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615b7657615b75614dbb565b5b600182019050919050565b600080600060608486031215615b9a57615b9961441b565b5b6000615ba88682870161522f565b9350506020615bb98682870161522f565b9250506040615bca8682870161522f565b9150509250925092565b6000608082019050615be9600083018761452f565b615bf6602083018661452f565b615c03604083018561452f565b615c10606083018461452f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c5382614483565b9150615c5e83614483565b925082615c6e57615c6d615c19565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cd5602183614361565b9150615ce082615c79565b604082019050919050565b60006020820190508181036000830152615d0481615cc8565b9050919050565b6000819050919050565b6000615d30615d2b615d2684615d0b565b6145a2565b614483565b9050919050565b615d4081615d15565b82525050565b600060a082019050615d5b600083018861452f565b615d686020830187615d37565b8181036040830152615d7a8186615175565b9050615d8960608301856146c1565b615d96608083018461452f565b9695505050505050565b600081905092915050565b50565b6000615dbb600083615da0565b9150615dc682615dab565b600082019050919050565b6000615ddc82615dae565b9150819050919050565b600060c082019050615dfb60008301896146c1565b615e08602083018861452f565b615e156040830187615d37565b615e226060830186615d37565b615e2f60808301856146c1565b615e3c60a083018461452f565b97965050505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029294d698f2455a9892cf12f7c89b9eded8b8b0d9184a8b5eb872a86c550b9b964736f6c634300080c0033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806385141a771161015a578063a457c2d7116100c1578063d25b17b61161007a578063d25b17b6146109cf578063dcda6af3146109fa578063dd62ed3e14610a23578063e7dad4f914610a60578063f2fde38b14610a9d578063fb6287d214610ac657610293565b8063a457c2d7146108af578063a5ece941146108ec578063a6769c7114610917578063a9059cbb14610940578063b2abbbc41461097d578063c49b9a80146109a657610293565b80639758f61d116101135780639758f61d146107b357806397995706146107dc57806398acb5d8146108075780639b0e2e86146108305780639c1b8af514610859578063a2ae74f41461088457610293565b806385141a77146106b357806385d4787b146106de578063860aefcf14610707578063871c128d146107345780638da5cb5b1461075d57806395d89b411461078857610293565b806349bd5a5e116101fe5780636f343052116101b75780636f343052146105bb5780636f9e36a9146105e457806370a082311461060d578063715018a61461064a5780637154021c1461066157806371cd56af1461068a57610293565b806349bd5a5e146104b95780634a131672146104e45780634a74bb02146104fb5780635342acb41461052657806354a5df1f146105635780635ee58efc1461058e57610293565b806318160ddd1161025057806318160ddd1461039557806323b872dd146103c0578063313ce567146103fd57806339509351146104285780633ad10ef614610465578063441d801f1461049057610293565b806306fdde0314610298578063095ea7b3146102c35780630ddc0976146103005780630e8322731461032d5780631694505e1461036a57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610aef565b6040516102ba91906143ef565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906144b9565b610b81565b6040516102f79190614514565b60405180910390f35b34801561030c57600080fd5b50610315610b9f565b6040516103249392919061453e565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190614575565b610bb7565b6040516103619190614514565b60405180910390f35b34801561037657600080fd5b5061037f610c0d565b60405161038c9190614601565b60405180910390f35b3480156103a157600080fd5b506103aa610c33565b6040516103b7919061461c565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190614637565b610c3d565b6040516103f49190614514565b60405180910390f35b34801561040957600080fd5b50610412610d16565b60405161041f91906146a6565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906144b9565b610d2d565b60405161045c9190614514565b60405180910390f35b34801561047157600080fd5b5061047a610de0565b60405161048791906146d0565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b2919061477c565b610e06565b005b3480156104c557600080fd5b506104ce610eab565b6040516104db91906146d0565b60405180910390f35b3480156104f057600080fd5b506104f9610ed1565b005b34801561050757600080fd5b50610510611251565b60405161051d9190614514565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190614575565b611264565b60405161055a9190614514565b60405180910390f35b34801561056f57600080fd5b506105786112ba565b604051610585919061461c565b60405180910390f35b34801561059a57600080fd5b506105a36112c0565b6040516105b29392919061453e565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906147dc565b6112d8565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061482f565b611390565b005b34801561061957600080fd5b50610634600480360381019061062f9190614575565b611489565b604051610641919061461c565b60405180910390f35b34801561065657600080fd5b5061065f6114d2565b005b34801561066d57600080fd5b506106886004803603810190610683919061486f565b611625565b005b34801561069657600080fd5b506106b160048036038101906106ac919061477c565b6116da565b005b3480156106bf57600080fd5b506106c861177f565b6040516106d591906146d0565b60405180910390f35b3480156106ea57600080fd5b50610705600480360381019061070091906149da565b6117a5565b005b34801561071357600080fd5b5061071c611848565b60405161072b93929190614a23565b60405180910390f35b34801561074057600080fd5b5061075b60048036038101906107569190614a5a565b61186d565b005b34801561076957600080fd5b50610772611951565b60405161077f91906146d0565b60405180910390f35b34801561079457600080fd5b5061079d61197a565b6040516107aa91906143ef565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906147dc565b611a0c565b005b3480156107e857600080fd5b506107f1611b15565b6040516107fe919061461c565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190614575565b611d58565b005b34801561083c57600080fd5b50610857600480360381019061085291906149da565b611e31565b005b34801561086557600080fd5b5061086e611ed4565b60405161087b919061461c565b60405180910390f35b34801561089057600080fd5b50610899611eda565b6040516108a69190614514565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d191906144b9565b611eed565b6040516108e39190614514565b60405180910390f35b3480156108f857600080fd5b50610901611fba565b60405161090e91906146d0565b60405180910390f35b34801561092357600080fd5b5061093e6004803603810190610939919061486f565b611fe0565b005b34801561094c57600080fd5b50610967600480360381019061096291906144b9565b612092565b6040516109749190614514565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614a5a565b6120b0565b005b3480156109b257600080fd5b506109cd60048036038101906109c8919061486f565b61214f565b005b3480156109db57600080fd5b506109e4612238565b6040516109f191906146d0565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614add565b61225e565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614b5e565b6123c8565b604051610a57919061461c565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a829190614575565b61244f565b604051610a949190614514565b60405180910390f35b348015610aa957600080fd5b50610ac46004803603810190610abf9190614575565b6124a5565b005b348015610ad257600080fd5b50610aed6004803603810190610ae89190614b9e565b612667565b005b606060088054610afe90614c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90614c20565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b95610b8e6127c4565b84846127cc565b6001905092915050565b60148060000154908060010154908060020154905083565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610c4a848484612997565b610d0b84610c566127c4565b610d0685604051806060016040528060288152602001615e4860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132019092919063ffffffff16565b6127cc565b600190509392505050565b6000600a60009054906101000a900460ff16905090565b6000610dd6610d3a6127c4565b84610dd18560046000610d4b6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b6127cc565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e0e6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9290614c9e565b60405180910390fd5b610ea68383836132c3565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ed96127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90614d30565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190614d65565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111359190614d65565b6040518363ffffffff1660e01b8152600401611152929190614d92565b6020604051808303816000875af1158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190614d65565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60178060000154908060010154908060020154905083565b6112e06127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490614c9e565b60405180910390fd5b826017600001819055508160176001018190555080601760020181905550505050565b6113986127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614c9e565b60405180910390fd5b600a60009054906101000a900460ff16600a6114419190614f1d565b8261144c9190614f68565b601b60010181905550600a60009054906101000a900460ff16600a6114719190614f1d565b8161147c9190614f68565b601b600001819055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114da6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61162d6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190614c9e565b60405180910390fd5b80601b60020160006101000a81548160ff02191690831515021790555050565b6116e26127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614c9e565b60405180910390fd5b61177a83838361336e565b505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117ad6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614c9e565b60405180910390fd5b611845816001613419565b50565b601b8060000154908060010154908060020160009054906101000a900460ff16905083565b6118756127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614c9e565b60405180910390fd5b601254811415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90615034565b60405180910390fd5b8060128190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461198990614c20565b80601f01602080910402602001604051908101604052809291908181526020018280546119b590614c20565b8015611a025780601f106119d757610100808354040283529160200191611a02565b820191906000526020600020905b8154815290600101906020018083116119e557829003601f168201915b5050505050905090565b611a146127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890614c9e565b60405180910390fd5b600a8311158015611ab35750600a8211155b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae9906150c6565b60405180910390fd5b826014600001819055508160146001018190555080601460020181905550505050565b600080600267ffffffffffffffff811115611b3357611b3261489c565b5b604051908082528060200260200182016040528015611b615781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190614d65565b81600081518110611c0957611c086150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611c5857611c576150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611cf19291906151d3565b600060405180830381865afa158015611d0e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d3791906152db565b600181518110611d4a57611d496150e6565b5b602002602001015191505090565b611d606127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de490614c9e565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e396127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614c9e565b60405180910390fd5b611ed1816000613419565b50565b60125481565b601360009054906101000a900460ff1681565b6000611fb0611efa6127c4565b84611fab85604051806060016040528060258152602001615e706025913960046000611f246127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132019092919063ffffffff16565b6127cc565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fe86127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614c9e565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b60006120a661209f6127c4565b8484612997565b6001905092915050565b6120b86127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c90614c9e565b60405180910390fd5b80600d8190555050565b6121576127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614c9e565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161222d9190614514565b60405180910390a150565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006006600061226c6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90615396565b60405180910390fd5b82829050858590501461233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233290615428565b60405180910390fd5b5b848490508110156123c1576123ad6123526127c4565b868684818110612365576123646150e6565b5b905060200201602081019061237a9190614575565b633b9aca00868686818110612392576123916150e6565b5b905060200201356123a39190614f68565b6000806000613510565b6001816123ba9190615448565b905061233c565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124ad6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253190614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a190615510565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61266f6127c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f390614c9e565b60405180910390fd5b82601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561283c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612833906155a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390615634565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161298a919061461c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90615758565b60405180910390fd5b60008111612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab1906157ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390615856565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612bf95750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b90506000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca15750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ce05750612cb0611951565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612d1f5750612cef611951565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d3e84612d3087611489565b61326590919063ffffffff16565b9050612d48611951565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612db65750612d86611951565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e105750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ef957600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612eb95750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef906158e8565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561305857601b60020160009054906101000a900460ff1615612ff857601b60000154841115612faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa69061597a565b60405180910390fd5b601b60010154811115612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee90615a0c565b60405180910390fd5b5b601360009054906101000a900460ff16156130575761301685613b22565b15613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d90615a78565b60405180910390fd5b5b5b821561306757613066613b6d565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156131135750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156131ea57601360009054906101000a900460ff16156131885761313686613b22565b1580613148575061314685613b22565b155b613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90615a78565b60405180910390fd5b5b601b60020160009054906101000a900460ff16156131e957601b600101548111156131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df90615a0c565b60405180910390fd5b5b5b6131f986868685876001613510565b505050505050565b6000838311158290613249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324091906143ef565b60405180910390fd5b50600083856132589190615a98565b9050809150509392505050565b60008082846132749190615448565b9050838110156132b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b090615b18565b60405180910390fd5b8091505092915050565b60005b838390508110156133685760008484838181106132e6576132e56150e6565b5b90506020020160208101906132fb9190614575565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061336090615b38565b9150506132c6565b50505050565b60005b83839050811015613413576000848483818110613391576133906150e6565b5b90506020020160208101906133a69190614575565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061340b90615b38565b915050613371565b50505050565b60005b825181101561350b57600083828151811061343a576134396150e6565b5b6020026020010151905082156134a7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506134f7565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061350390615b38565b91505061341c565b505050565b60008361351e57600061354a565b613549606461353b60146000015488613bd890919063ffffffff16565b613c5390919063ffffffff16565b5b90508380156135565750825b156136b65760006014600201541115613688576000613596606461358860146002015489613bd890919063ffffffff16565b613c5390919063ffffffff16565b905061360c8160036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b60036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136848187613c9d90919063ffffffff16565b9550505b6136b360646136a560146001015488613bd890919063ffffffff16565b613c5390919063ffffffff16565b90505b60006136cb8287613c9d90919063ffffffff16565b905061371f86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c9d90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b481600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384982600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516138e9919061461c565b60405180910390a38215613b1857601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b815260040161395291906146d0565b600060405180830381600087803b15801561396c57600080fd5b505af192505050801561397d575060015b61398657613987565b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b81526004016139e291906146d0565b600060405180830381600087803b1580156139fc57600080fd5b505af1925050508015613a0d575060015b613a1657613a17565b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796012546040518263ffffffff1660e01b8152600401613a74919061461c565b6060604051808303816000875af1925050508015613ab057506040513d601f19601f82011682018060405250810190613aad9190615b81565b60015b613ab957613b17565b3273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601254604051613b0b9493929190615bd4565b60405180910390a35050505b5b5050505050505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015613b6457506000801b8214155b92505050919050565b6000613b7830611489565b90506000811115613bd5576000613b8d611b15565b9050808210158015613bac5750600c60009054906101000a900460ff16155b8015613bc45750600c60019054906101000a900460ff165b15613bd357613bd281613ce7565b5b505b50565b600080831415613beb5760009050613c4d565b60008284613bf99190614f68565b9050828482613c089190615c48565b14613c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3f90615ceb565b60405180910390fd5b809150505b92915050565b6000613c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee0565b905092915050565b6000613cdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613201565b905092915050565b6001600c60006101000a81548160ff0219169083151502179055506000613d426002613d346064613d2660176002015487613bd890919063ffffffff16565b613c5390919063ffffffff16565b613c5390919063ffffffff16565b90506000613d598284613c9d90919063ffffffff16565b9050613d6481613f43565b60004790506000613da96002613d9b6064613d8d60176002015487613bd890919063ffffffff16565b613c5390919063ffffffff16565b613c5390919063ffffffff16565b90506000613dd86064613dca60176001015486613bd890919063ffffffff16565b613c5390919063ffffffff16565b90506000613def8385613c9d90919063ffffffff16565b90506000811115613e6457600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e62573d6000803e3d6000fd5b505b6000821115613e7757613e7682614186565b5b613e818684614256565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868488604051613eb49392919061453e565b60405180910390a15050505050506000600c60006101000a81548160ff02191690831515021790555050565b60008083118290613f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1e91906143ef565b60405180910390fd5b5060008385613f369190615c48565b9050809150509392505050565b6000600267ffffffffffffffff811115613f6057613f5f61489c565b5b604051908082528060200260200182016040528015613f8e5781602001602082028036833780820191505090505b5090503081600081518110613fa657613fa56150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140719190614d65565b81600181518110614085576140846150e6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140ec30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127cc565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614150959493929190615d46565b600060405180830381600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516141ce90615dd1565b60006040518083038185875af1925050503d806000811461420b576040519150601f19603f3d011682016040523d82523d6000602084013e614210565b606091505b505090508015614252577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614249919061461c565b60405180910390a15b5050565b61428330600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127cc565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161430c96959493929190615de6565b60606040518083038185885af115801561432a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061434f9190615b81565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614390578082015181840152602081019050614375565b8381111561439f576000848401525b50505050565b6000601f19601f8301169050919050565b60006143c182614356565b6143cb8185614361565b93506143db818560208601614372565b6143e4816143a5565b840191505092915050565b6000602082019050818103600083015261440981846143b6565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061445082614425565b9050919050565b61446081614445565b811461446b57600080fd5b50565b60008135905061447d81614457565b92915050565b6000819050919050565b61449681614483565b81146144a157600080fd5b50565b6000813590506144b38161448d565b92915050565b600080604083850312156144d0576144cf61441b565b5b60006144de8582860161446e565b92505060206144ef858286016144a4565b9150509250929050565b60008115159050919050565b61450e816144f9565b82525050565b60006020820190506145296000830184614505565b92915050565b61453881614483565b82525050565b6000606082019050614553600083018661452f565b614560602083018561452f565b61456d604083018461452f565b949350505050565b60006020828403121561458b5761458a61441b565b5b60006145998482850161446e565b91505092915050565b6000819050919050565b60006145c76145c26145bd84614425565b6145a2565b614425565b9050919050565b60006145d9826145ac565b9050919050565b60006145eb826145ce565b9050919050565b6145fb816145e0565b82525050565b600060208201905061461660008301846145f2565b92915050565b6000602082019050614631600083018461452f565b92915050565b6000806000606084860312156146505761464f61441b565b5b600061465e8682870161446e565b935050602061466f8682870161446e565b9250506040614680868287016144a4565b9150509250925092565b600060ff82169050919050565b6146a08161468a565b82525050565b60006020820190506146bb6000830184614697565b92915050565b6146ca81614445565b82525050565b60006020820190506146e560008301846146c1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147105761470f6146eb565b5b8235905067ffffffffffffffff81111561472d5761472c6146f0565b5b602083019150836020820283011115614749576147486146f5565b5b9250929050565b614759816144f9565b811461476457600080fd5b50565b60008135905061477681614750565b92915050565b6000806000604084860312156147955761479461441b565b5b600084013567ffffffffffffffff8111156147b3576147b2614420565b5b6147bf868287016146fa565b935093505060206147d286828701614767565b9150509250925092565b6000806000606084860312156147f5576147f461441b565b5b6000614803868287016144a4565b9350506020614814868287016144a4565b9250506040614825868287016144a4565b9150509250925092565b600080604083850312156148465761484561441b565b5b6000614854858286016144a4565b9250506020614865858286016144a4565b9150509250929050565b6000602082840312156148855761488461441b565b5b600061489384828501614767565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148d4826143a5565b810181811067ffffffffffffffff821117156148f3576148f261489c565b5b80604052505050565b6000614906614411565b905061491282826148cb565b919050565b600067ffffffffffffffff8211156149325761493161489c565b5b602082029050602081019050919050565b600061495661495184614917565b6148fc565b90508083825260208201905060208402830185811115614979576149786146f5565b5b835b818110156149a2578061498e888261446e565b84526020840193505060208101905061497b565b5050509392505050565b600082601f8301126149c1576149c06146eb565b5b81356149d1848260208601614943565b91505092915050565b6000602082840312156149f0576149ef61441b565b5b600082013567ffffffffffffffff811115614a0e57614a0d614420565b5b614a1a848285016149ac565b91505092915050565b6000606082019050614a38600083018661452f565b614a45602083018561452f565b614a526040830184614505565b949350505050565b600060208284031215614a7057614a6f61441b565b5b6000614a7e848285016144a4565b91505092915050565b60008083601f840112614a9d57614a9c6146eb565b5b8235905067ffffffffffffffff811115614aba57614ab96146f0565b5b602083019150836020820283011115614ad657614ad56146f5565b5b9250929050565b60008060008060408587031215614af757614af661441b565b5b600085013567ffffffffffffffff811115614b1557614b14614420565b5b614b21878288016146fa565b9450945050602085013567ffffffffffffffff811115614b4457614b43614420565b5b614b5087828801614a87565b925092505092959194509250565b60008060408385031215614b7557614b7461441b565b5b6000614b838582860161446e565b9250506020614b948582860161446e565b9150509250929050565b600080600060608486031215614bb757614bb661441b565b5b6000614bc58682870161446e565b9350506020614bd68682870161446e565b9250506040614be78682870161446e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3857607f821691505b60208210811415614c4c57614c4b614bf1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c88602083614361565b9150614c9382614c52565b602082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1a602283614361565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b600081519050614d5f81614457565b92915050565b600060208284031215614d7b57614d7a61441b565b5b6000614d8984828501614d50565b91505092915050565b6000604082019050614da760008301856146c1565b614db460208301846146c1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614e4157808604811115614e1d57614e1c614dbb565b5b6001851615614e2c5780820291505b8081029050614e3a85614dea565b9450614e01565b94509492505050565b600082614e5a5760019050614f16565b81614e685760009050614f16565b8160018114614e7e5760028114614e8857614eb7565b6001915050614f16565b60ff841115614e9a57614e99614dbb565b5b8360020a915084821115614eb157614eb0614dbb565b5b50614f16565b5060208310610133831016604e8410600b8410161715614eec5782820a905083811115614ee757614ee6614dbb565b5b614f16565b614ef98484846001614df7565b92509050818404811115614f1057614f0f614dbb565b5b81810290505b9392505050565b6000614f2882614483565b9150614f338361468a565b9250614f607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e4a565b905092915050565b6000614f7382614483565b9150614f7e83614483565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fb757614fb6614dbb565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061501e602c83614361565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f4275792061642073656c6c20666565732063616e6e6f7420657863656564203160008201527f302070657263656e740000000000000000000000000000000000000000000000602082015250565b60006150b0602983614361565b91506150bb82615054565b604082019050919050565b600060208201905081810360008301526150df816150a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61514a81614445565b82525050565b600061515c8383615141565b60208301905092915050565b6000602082019050919050565b600061518082615115565b61518a8185615120565b935061519583615131565b8060005b838110156151c65781516151ad8882615150565b97506151b883615168565b925050600181019050615199565b5085935050505092915050565b60006040820190506151e8600083018561452f565b81810360208301526151fa8184615175565b90509392505050565b600067ffffffffffffffff82111561521e5761521d61489c565b5b602082029050602081019050919050565b60008151905061523e8161448d565b92915050565b600061525761525284615203565b6148fc565b9050808382526020820190506020840283018581111561527a576152796146f5565b5b835b818110156152a3578061528f888261522f565b84526020840193505060208101905061527c565b5050509392505050565b600082601f8301126152c2576152c16146eb565b5b81516152d2848260208601615244565b91505092915050565b6000602082840312156152f1576152f061441b565b5b600082015167ffffffffffffffff81111561530f5761530e614420565b5b61531b848285016152ad565b91505092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000615380602d83614361565b915061538b82615324565b604082019050919050565b600060208201905081810360008301526153af81615373565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615412602a83614361565b915061541d826153b6565b604082019050919050565b6000602082019050818103600083015261544181615405565b9050919050565b600061545382614483565b915061545e83614483565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561549357615492614dbb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154fa602683614361565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558c602483614361565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561e602283614361565b9150615629826155c2565b604082019050919050565b6000602082019050818103600083015261564d81615611565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156b0602583614361565b91506156bb82615654565b604082019050919050565b600060208201905081810360008301526156df816156a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615742602383614361565b915061574d826156e6565b604082019050919050565b6000602082019050818103600083015261577181615735565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157d4602983614361565b91506157df82615778565b604082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b6000615840601e83614361565b915061584b8261580a565b602082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006158d2602f83614361565b91506158dd82615876565b604082019050919050565b60006020820190508181036000830152615901816158c5565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615964602883614361565b915061596f82615908565b604082019050919050565b6000602082019050818103600083015261599381615957565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006159f6602583614361565b9150615a018261599a565b604082019050919050565b60006020820190508181036000830152615a25816159e9565b9050919050565b7f4e6f20626f747320616c6c6f7765640000000000000000000000000000000000600082015250565b6000615a62600f83614361565b9150615a6d82615a2c565b602082019050919050565b60006020820190508181036000830152615a9181615a55565b9050919050565b6000615aa382614483565b9150615aae83614483565b925082821015615ac157615ac0614dbb565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b02601b83614361565b9150615b0d82615acc565b602082019050919050565b60006020820190508181036000830152615b3181615af5565b9050919050565b6000615b4382614483565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615b7657615b75614dbb565b5b600182019050919050565b600080600060608486031215615b9a57615b9961441b565b5b6000615ba88682870161522f565b9350506020615bb98682870161522f565b9250506040615bca8682870161522f565b9150509250925092565b6000608082019050615be9600083018761452f565b615bf6602083018661452f565b615c03604083018561452f565b615c10606083018461452f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c5382614483565b9150615c5e83614483565b925082615c6e57615c6d615c19565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615cd5602183614361565b9150615ce082615c79565b604082019050919050565b60006020820190508181036000830152615d0481615cc8565b9050919050565b6000819050919050565b6000615d30615d2b615d2684615d0b565b6145a2565b614483565b9050919050565b615d4081615d15565b82525050565b600060a082019050615d5b600083018861452f565b615d686020830187615d37565b8181036040830152615d7a8186615175565b9050615d8960608301856146c1565b615d96608083018461452f565b9695505050505050565b600081905092915050565b50565b6000615dbb600083615da0565b9150615dc682615dab565b600082019050919050565b6000615ddc82615dae565b9150819050919050565b600060c082019050615dfb60008301896146c1565b615e08602083018861452f565b615e156040830187615d37565b615e226060830186615d37565b615e2f60808301856146c1565b615e3c60a083018461452f565b97965050505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029294d698f2455a9892cf12f7c89b9eded8b8b0d9184a8b5eb872a86c550b9b964736f6c634300080c0033

Deployed Bytecode Sourcemap

9589:16253:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12589:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13422:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11846:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15684:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10018:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12866:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13591:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12775:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13912:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10966:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15350:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10131:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16353:316;;;;;;;;;;;;;:::i;:::-;;10683:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19504:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10730:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11875:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17229:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14948:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12969:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8364:148;;;;;;;;;;;;;:::i;:::-;;15191:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15519:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11043:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17846:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11960:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22335:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8150:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12680:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16921:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19223:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17982:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11120:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11739:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14138:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10883:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16199:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13096:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16069:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18475:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10796:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14415:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13271:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17729:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8520:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17490:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12589:83;12626:13;12659:5;12652:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12589:83;:::o;13422:161::-;13497:4;13514:39;13523:12;:10;:12::i;:::-;13537:7;13546:6;13514:8;:39::i;:::-;13571:4;13564:11;;13422:161;;;;:::o;11846:22::-;;;;;;;;;;;;;;;;;;;:::o;15684:125::-;15749:4;15773:22;:28;15796:4;15773:28;;;;;;;;;;;;;;;;;;;;;;;;;15766:35;;15684:125;;;:::o;10018:106::-;;;;;;;;;;;;;:::o;12866:95::-;12919:7;12946;;12939:14;;12866:95;:::o;13591:313::-;13689:4;13706:36;13716:6;13724:9;13735:6;13706:9;:36::i;:::-;13753:121;13762:6;13770:12;:10;:12::i;:::-;13784:89;13822:6;13784:89;;;;;;;;;;;;;;;;;:11;:19;13796:6;13784:19;;;;;;;;;;;;;;;:33;13804:12;:10;:12::i;:::-;13784:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13753:8;:121::i;:::-;13892:4;13885:11;;13591:313;;;;;:::o;12775:83::-;12816:5;12841:9;;;;;;;;;;;12834:16;;12775:83;:::o;13912:218::-;14000:4;14017:83;14026:12;:10;:12::i;:::-;14040:7;14049:50;14088:10;14049:11;:25;14061:12;:10;:12::i;:::-;14049:25;;;;;;;;;;;;;;;:34;14075:7;14049:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14017:8;:83::i;:::-;14118:4;14111:11;;13912:218;;;;:::o;10966:70::-;;;;;;;;;;;;;:::o;15350:161::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15462:41:::1;15475:9;;15486:16;15462:12;:41::i;:::-;15350:161:::0;;;:::o;10131:41::-;;;;;;;;;;;;;:::o;16353:316::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16445:1:::1;16420:27;;:13;;;;;;;;;;;:27;;;16412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16530:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16512:55;;;16576:4;16583:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16512:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16496:13;;:110;;;;;;;;;;;;;;;;;;16657:4;16617:22;:37;16640:13;;;;;;;;;;;16617:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;16353:316::o:0;10683:40::-;;;;;;;;;;;;;:::o;19504:123::-;19568:4;19592:18;:27;19611:7;19592:27;;;;;;;;;;;;;;;;;;;;;;;;;19585:34;;19504:123;;;:::o;10730:50::-;;;;:::o;11875:32::-;;;;;;;;;;;;;;;;;;;:::o;17229:253::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17369:9:::1;17344:12;:22;;:34;;;;17413:8;17389:12;:21;;:32;;;;17461:13;17432:12;:26;;:42;;;;17229:253:::0;;;:::o;14948:235::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15096:9:::1;;;;;;;;;;;15092:2;:13;;;;:::i;:::-;15074:15;:31;;;;:::i;:::-;15049:6;:22;;:56;;;;15157:9;;;;;;;;;;;15153:2;:13;;;;:::i;:::-;15138:12;:28;;;;:::i;:::-;15116:6;:19;;:50;;;;14948:235:::0;;:::o;12969:119::-;13035:7;13062:9;:18;13072:7;13062:18;;;;;;;;;;;;;;;;13055:25;;12969:119;;;:::o;8364:148::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8471:1:::1;8434:40;;8455:6;::::0;::::1;;;;;;;;8434:40;;;;;;;;;;;;8502:1;8485:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8364:148::o:0;15191:151::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15314:20:::1;15283:6;:28;;;:51;;;;;;;;;;;;;;;;;;15191:151:::0;:::o;15519:157::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15629:39:::1;15646:9;;15657:10;15629:16;:39::i;:::-;15519:157:::0;;;:::o;11043:70::-;;;;;;;;;;;;;:::o;17846:128::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17930:36:::1;17950:9;17961:4;17930:19;:36::i;:::-;17846:128:::0;:::o;11960:96::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22335:209::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22433:16:::1;;22421:8;:28;;22413:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22528:8;22509:16;:27;;;;22335:209:::0;:::o;8150:79::-;8188:7;8215:6;;;;;;;;;;;8208:13;;8150:79;:::o;12680:87::-;12719:13;12752:7;12745:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12680:87;:::o;16921:300::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17040:2:::1;17030:6;:12;;:29;;;;;17057:2;17046:7;:13;;17030:29;17022:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;17133:6;17116:7;:14;;:23;;;;17168:7;17150;:15;;:25;;;;17205:8;17186:7;:16;;:27;;;;16921:300:::0;;;:::o;19223:275::-;19280:7;19301:21;19339:1;19325:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19301:40;;19362:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19352:4;19357:1;19352:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;19413:4;19395;19400:1;19395:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19436:15;;;;;;;;;;;:29;;;19466:14;;19482:4;19436:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19488:1;19436:54;;;;;;;;:::i;:::-;;;;;;;;19429:61;;;19223:275;:::o;23392:166::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23525:23:::1;23483:15;;:67;;;;;;;;;;;;;;;;;;23392:166:::0;:::o;17982:131::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18068:37:::1;18088:9;18099:5;18068:19;:37::i;:::-;17982:131:::0;:::o;11120:39::-;;;;:::o;11739:41::-;;;;;;;;;;;;;:::o;14138:269::-;14231:4;14248:129;14257:12;:10;:12::i;:::-;14271:7;14280:96;14319:15;14280:96;;;;;;;;;;;;;;;;;:11;:25;14292:12;:10;:12::i;:::-;14280:25;;;;;;;;;;;;;;;:34;14306:7;14280:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14248:8;:129::i;:::-;14395:4;14388:11;;14138:269;;;;:::o;10883:76::-;;;;;;;;;;;;;:::o;16199:146::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16317:20:::1;16292:22;;:45;;;;;;;;;;;;;;;;;;16199:146:::0;:::o;13096:167::-;13174:4;13191:42;13201:12;:10;:12::i;:::-;13215:9;13226:6;13191:9;:42::i;:::-;13251:4;13244:11;;13096:167;;;;:::o;16069:122::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16168:15:::1;16151:14;:32;;;;16069:122:::0;:::o;18475:171::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18576:8:::1;18552:21;;:32;;;;;;;;;;;;;;;;;;18600:38;18629:8;18600:38;;;;;;:::i;:::-;;;;;;;;18475:171:::0;:::o;10796:80::-;;;;;;;;;;;;;:::o;14415:525::-;14512:16;14551:18;:32;14570:12;:10;:12::i;:::-;14551:32;;;;;;;;;;;;;;;;;;;;;;;;;14543:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;14673:7;;:14;;14652:10;;:17;;:35;14644:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;14745:188;14762:10;;:17;;14751:8;:28;14745:188;;;14795:98;14810:12;:10;:12::i;:::-;14824:10;;14835:8;14824:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14866:5;14846:7;;14854:8;14846:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;14873:5;14880;14887;14795:14;:98::i;:::-;14920:1;14908:13;;;;;:::i;:::-;;;14745:188;;;14501:439;14415:525;;;;:::o;13271:143::-;13352:7;13379:11;:18;13391:5;13379:18;;;;;;;;;;;;;;;:27;13398:7;13379:27;;;;;;;;;;;;;;;;13372:34;;13271:143;;;;:::o;17729:109::-;17790:4;17814:10;:16;17825:4;17814:16;;;;;;;;;;;;;;;;;;;;;;;;;17807:23;;17729:109;;;:::o;8520:244::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8629:1:::1;8609:22;;:8;:22;;;;8601:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8719:8;8690:38;;8711:6;::::0;::::1;;;;;;;;8690:38;;;;;;;;;;;;8748:8;8739:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8520:244:::0;:::o;17490:231::-;8287:12;:10;:12::i;:::-;8277:22;;:6;;;;;;;;;;:22;;;8269:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17620:7:::1;17607:10;;:20;;;;;;;;;;;;;;;;;;17657:13;17638:16;;:32;;;;;;;;;;;;;;;;;;17704:9;17681:20;;:32;;;;;;;;;;;;;;;;;;17490:231:::0;;;:::o;4494:98::-;4547:7;4574:10;4567:17;;4494:98;:::o;19635:337::-;19745:1;19728:19;;:5;:19;;;;19720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19826:1;19807:21;;:7;:21;;;;19799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19910:6;19880:11;:18;19892:5;19880:18;;;;;;;;;;;;;;;:27;19899:7;19880:27;;;;;;;;;;;;;;;:36;;;;19948:7;19932:32;;19941:5;19932:32;;;19957:6;19932:32;;;;;;:::i;:::-;;;;;;;;19635:337;;;:::o;19980:1894::-;20084:1;20068:18;;:4;:18;;;;20060:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20161:1;20147:16;;:2;:16;;;;20139:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20231:1;20222:6;:10;20214:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20322:1;20297:27;;:13;;;;;;;;;;;:27;;;;20289:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20369:11;20391:13;;;;;;;;;;;20383:21;;:4;:21;;;;:44;;;;;20414:13;;;;;;;;;;;20408:19;;:2;:19;;;20383:44;20369:58;;20438:13;20455:18;:24;20474:4;20455:24;;;;;;;;;;;;;;;;;;;;;;;;;20454:25;:52;;;;;20484:18;:22;20503:2;20484:22;;;;;;;;;;;;;;;;;;;;;;;;;20483:23;20454:52;:71;;;;;20518:7;:5;:7::i;:::-;20510:15;;:4;:15;;;;20454:71;:88;;;;;20535:7;:5;:7::i;:::-;20529:13;;:2;:13;;;;20454:88;20438:104;;20553:21;20577:25;20595:6;20577:13;20587:2;20577:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;20553:49;;20713:7;:5;:7::i;:::-;20705:15;;:4;:15;;;;:32;;;;;20730:7;:5;:7::i;:::-;20724:13;;:2;:13;;;;20705:32;:52;;;;;20747:10;;;;;;;;;;;20741:16;;:2;:16;;;;20705:52;20702:180;;;20783:10;:16;20794:4;20783:16;;;;;;;;;;;;;;;;;;;;;;;;;20782:17;:36;;;;;20804:10;:14;20815:2;20804:14;;;;;;;;;;;;;;;;;;;;;;;;;20803:15;20782:36;20774:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20702:180;20903:13;;;;;;;;;;;20895:21;;:4;:21;;;20892:437;;;20936:6;:28;;;;;;;;;;;;20933:258;;;21003:6;:19;;;20993:6;:29;;20985:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;21111:6;:22;;;21094:13;:39;;21086:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;20933:258;21208:22;;;;;;;;;;;21205:113;;;21260:22;21279:2;21260:18;:22::i;:::-;21259:23;21251:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;21205:113;20892:437;21342:6;21339:53;;;21365:15;:13;:15::i;:::-;21339:53;21413:13;;;;;;;;;;;21405:21;;:4;:21;;;;:44;;;;;21436:13;;;;;;;;;;;21430:19;;:2;:19;;;;21405:44;21402:388;;;21469:22;;;;;;;;;;;21466:142;;;21521:24;21540:4;21521:18;:24::i;:::-;21520:25;:52;;;;21550:22;21569:2;21550:18;:22::i;:::-;21549:23;21520:52;21512:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21466:142;21625:6;:28;;;;;;;;;;;;21622:157;;;21699:6;:22;;;21682:13;:39;;21674:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;21622:157;21402:388;21810:56;21825:4;21831:2;21835:6;21843:8;21853:6;21861:4;21810:14;:56::i;:::-;20049:1825;;;19980:1894;;;:::o;2958:192::-;3044:7;3077:1;3072;:6;;3080:12;3064:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3104:9;3120:1;3116;:5;;;;:::i;:::-;3104:17;;3141:1;3134:8;;;2958:192;;;;;:::o;2625:181::-;2683:7;2703:9;2719:1;2715;:5;;;;:::i;:::-;2703:17;;2744:1;2739;:6;;2731:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2797:1;2790:8;;;2625:181;;;;:::o;16677:236::-;16764:9;16759:147;16783:9;;:16;;16779:1;:20;16759:147;;;16821:12;16836:9;;16846:1;16836:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16821:27;;16890:4;16863:18;:24;16882:4;16863:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;16806:100;16801:3;;;;;:::i;:::-;;;;16759:147;;;;16677:236;;;:::o;15817:244::-;15908:9;15903:151;15927:9;;:16;;15923:1;:20;15903:151;;;15965:12;15980:9;;15990:1;15980:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15965:27;;16038:4;16007:22;:28;16030:4;16007:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;15950:104;15945:3;;;;;:::i;:::-;;;;15903:151;;;;15817:244;;;:::o;18121:346::-;18216:9;18211:249;18235:9;:16;18231:1;:20;18211:249;;;18273:12;18288:9;18298:1;18288:12;;;;;;;;:::i;:::-;;;;;;;;18273:27;;18318:7;18315:134;;;18365:4;18346:10;:16;18357:4;18346:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;18315:134;;;18417:10;:16;18428:4;18417:16;;;;;;;;;;;;;;;;18410:23;;;;;;;;;;;18315:134;18258:202;18253:3;;;;;:::i;:::-;;;;18211:249;;;;18121:346;;:::o;24461:1378::-;24607:17;24627:8;:50;;24676:1;24627:50;;;24638:35;24669:3;24638:26;24649:7;:14;;;24638:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;24627:50;24607:70;;24693:8;:18;;;;;24705:6;24693:18;24690:360;;;24750:1;24731:7;:16;;;:20;24728:248;;;24772:18;24793:37;24826:3;24793:28;24804:7;:16;;;24793:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;24772:58;;24873:37;24899:10;24873:9;:21;24883:10;;;;;;;;;;;24873:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;24849:9;:21;24859:10;;;;;;;;;;;24849:21;;;;;;;;;;;;;;;:61;;;;24938:22;24949:10;24938:6;:10;;:22;;;;:::i;:::-;24929:31;;24753:223;24728:248;25002:36;25034:3;25002:27;25013:7;:15;;;25002:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;24990:48;;24690:360;25060:22;25085:21;25096:9;25085:6;:10;;:21;;;;:::i;:::-;25060:46;;25137:29;25159:6;25137:9;:17;25147:6;25137:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;25117:9;:17;25127:6;25117:17;;;;;;;;;;;;;;;:49;;;;25200:40;25225:14;25200:9;:20;25210:9;25200:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;25177:9;:20;25187:9;25177:20;;;;;;;;;;;;;;;:63;;;;25278:39;25307:9;25278;:24;25296:4;25278:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;25251:9;:24;25269:4;25251:24;;;;;;;;;;;;;;;:66;;;;25350:9;25333:35;;25342:6;25333:35;;;25361:6;25333:35;;;;;;:::i;:::-;;;;;;;;25382:17;25379:453;;;25420:15;;;;;;;;;;;:31;;;25452:6;25420:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25416:54;;;;;;25488:15;;;;;;;;;;;:31;;;25520:9;25488:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25484:57;;;;;;25559:15;;;;;;;;;;;:23;;;25583:16;;25559:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25555:266;;;;;25787:9;25698:99;;25763:4;25698:99;;;25723:10;25735:6;25743:18;25769:16;;25698:99;;;;;;;;;:::i;:::-;;;;;;;;25601:212;;;25555:266;25379:453;24596:1243;;24461:1378;;;;;;:::o;4867:619::-;4927:4;5189:16;5216:19;5238:66;5216:88;;;;5407:7;5395:20;5383:32;;5447:11;5435:8;:23;;:42;;;;;5474:3;5462:15;;:8;:15;;5435:42;5427:51;;;;4867:619;;;:::o;21882:445::-;21926:28;21957:24;21975:4;21957:9;:24::i;:::-;21926:55;;22019:1;21996:20;:24;21992:328;;;22037:19;22059:26;:24;:26::i;:::-;22037:48;;22128:11;22104:20;:35;;:56;;;;;22144:16;;;;;;;;;;;22143:17;22104:56;:81;;;;;22164:21;;;;;;;;;;;22104:81;22100:209;;;22264:29;22281:11;22264:16;:29::i;:::-;22100:209;22022:298;21992:328;21915:412;21882:445::o;3158:471::-;3216:7;3466:1;3461;:6;3457:47;;;3491:1;3484:8;;;;3457:47;3516:9;3532:1;3528;:5;;;;:::i;:::-;3516:17;;3561:1;3556;3552;:5;;;;:::i;:::-;:10;3544:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3620:1;3613:8;;;3158:471;;;;;:::o;3641:132::-;3699:7;3726:39;3730:1;3733;3726:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3719:46;;3641:132;;;;:::o;2814:136::-;2872:7;2899:43;2903:1;2906;2899:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2892:50;;2814:136;;;;:::o;22552:832::-;9953:4;9934:16;;:23;;;;;;;;;;;;;;;;;;22625:16:::1;22644:54;22696:1;22644:47;22687:3;22644:38;22655:12;:26;;;22644:6;:10;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;22625:73;;22709:20;22732;22743:8;22732:6;:10;;:20;;;;:::i;:::-;22709:43;;22763:30;22780:12;22763:16;:30::i;:::-;22804:23;22830:21;22804:47;;22862:13;22878:63;22939:1;22878:56;22930:3;22878:47;22898:12;:26;;;22878:15;:19;;:47;;;;:::i;:::-;:51;;:56;;;;:::i;:::-;:60;;:63;;;;:::i;:::-;22862:79;;22952:19;22974:51;23021:3;22974:42;22994:12;:21;;;22974:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;22952:73;;23036:20;23059:26;23079:5;23059:15;:19;;:26;;;;:::i;:::-;23036:49;;23116:1;23101:12;:16;23098:96;;;23142:16;;;;;;;;;;;23134:34;;:48;23169:12;23134:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23098:96;23221:1;23207:11;:15;23204:76;;;23239:29;23256:11;23239:16;:29::i;:::-;23204:76;23290:29;23303:8;23313:5;23290:12;:29::i;:::-;23335:41;23350:8;23360:5;23367:8;23335:41;;;;;;;;:::i;:::-;;;;;;;;22614:770;;;;;;9999:5:::0;9980:16;;:24;;;;;;;;;;;;;;;;;;22552:832;:::o;3785:278::-;3871:7;3903:1;3899;:5;3906:12;3891:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3930:9;3946:1;3942;:5;;;;:::i;:::-;3930:17;;4054:1;4047:8;;;3785:278;;;;;:::o;23795:585::-;23921:21;23959:1;23945:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23921:40;;23990:4;23972;23977:1;23972:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24016:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24006:4;24011:1;24006:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24049:62;24066:4;24081:15;;;;;;;;;;;24099:11;24049:8;:62::i;:::-;24148:15;;;;;;;;;;;:66;;;24229:11;24255:1;24299:4;24326;24346:15;24148:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23850:530;23795:585;:::o;23566:221::-;23631:12;23656:15;;;;;;;;;;;23648:29;;23686:9;23648:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23630:70;;;23715:7;23711:69;;;23744:24;23758:9;23744:24;;;;;;:::i;:::-;;;;;;;;23711:69;23619:168;23566:221;:::o;18654:526::-;18802:62;18819:4;18834:15;;;;;;;;;;;18852:11;18802:8;:62::i;:::-;18907:15;;;;;;;;;;;:31;;;18946:9;18979:4;18999:11;19025:1;19068;19111:20;;;;;;;;;;;19146:15;18907:265;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18654:526;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:442::-;3767:4;3805:2;3794:9;3790:18;3782:26;;3818:71;3886:1;3875:9;3871:17;3862:6;3818:71;:::i;:::-;3899:72;3967:2;3956:9;3952:18;3943:6;3899:72;:::i;:::-;3981;4049:2;4038:9;4034:18;4025:6;3981:72;:::i;:::-;3618:442;;;;;;:::o;4066:329::-;4125:6;4174:2;4162:9;4153:7;4149:23;4145:32;4142:119;;;4180:79;;:::i;:::-;4142:119;4300:1;4325:53;4370:7;4361:6;4350:9;4346:22;4325:53;:::i;:::-;4315:63;;4271:117;4066:329;;;;:::o;4401:60::-;4429:3;4450:5;4443:12;;4401:60;;;:::o;4467:142::-;4517:9;4550:53;4568:34;4577:24;4595:5;4577:24;:::i;:::-;4568:34;:::i;:::-;4550:53;:::i;:::-;4537:66;;4467:142;;;:::o;4615:126::-;4665:9;4698:37;4729:5;4698:37;:::i;:::-;4685:50;;4615:126;;;:::o;4747:152::-;4823:9;4856:37;4887:5;4856:37;:::i;:::-;4843:50;;4747:152;;;:::o;4905:183::-;5018:63;5075:5;5018:63;:::i;:::-;5013:3;5006:76;4905:183;;:::o;5094:274::-;5213:4;5251:2;5240:9;5236:18;5228:26;;5264:97;5358:1;5347:9;5343:17;5334:6;5264:97;:::i;:::-;5094:274;;;;:::o;5374:222::-;5467:4;5505:2;5494:9;5490:18;5482:26;;5518:71;5586:1;5575:9;5571:17;5562:6;5518:71;:::i;:::-;5374:222;;;;:::o;5602:619::-;5679:6;5687;5695;5744:2;5732:9;5723:7;5719:23;5715:32;5712:119;;;5750:79;;:::i;:::-;5712:119;5870:1;5895:53;5940:7;5931:6;5920:9;5916:22;5895:53;:::i;:::-;5885:63;;5841:117;5997:2;6023:53;6068:7;6059:6;6048:9;6044:22;6023:53;:::i;:::-;6013:63;;5968:118;6125:2;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6096:118;5602:619;;;;;:::o;6227:86::-;6262:7;6302:4;6295:5;6291:16;6280:27;;6227:86;;;:::o;6319:112::-;6402:22;6418:5;6402:22;:::i;:::-;6397:3;6390:35;6319:112;;:::o;6437:214::-;6526:4;6564:2;6553:9;6549:18;6541:26;;6577:67;6641:1;6630:9;6626:17;6617:6;6577:67;:::i;:::-;6437:214;;;;:::o;6657:118::-;6744:24;6762:5;6744:24;:::i;:::-;6739:3;6732:37;6657:118;;:::o;6781:222::-;6874:4;6912:2;6901:9;6897:18;6889:26;;6925:71;6993:1;6982:9;6978:17;6969:6;6925:71;:::i;:::-;6781:222;;;;:::o;7009:117::-;7118:1;7115;7108:12;7132:117;7241:1;7238;7231:12;7255:117;7364:1;7361;7354:12;7395:568;7468:8;7478:6;7528:3;7521:4;7513:6;7509:17;7505:27;7495:122;;7536:79;;:::i;:::-;7495:122;7649:6;7636:20;7626:30;;7679:18;7671:6;7668:30;7665:117;;;7701:79;;:::i;:::-;7665:117;7815:4;7807:6;7803:17;7791:29;;7869:3;7861:4;7853:6;7849:17;7839:8;7835:32;7832:41;7829:128;;;7876:79;;:::i;:::-;7829:128;7395:568;;;;;:::o;7969:116::-;8039:21;8054:5;8039:21;:::i;:::-;8032:5;8029:32;8019:60;;8075:1;8072;8065:12;8019:60;7969:116;:::o;8091:133::-;8134:5;8172:6;8159:20;8150:29;;8188:30;8212:5;8188:30;:::i;:::-;8091:133;;;;:::o;8230:698::-;8322:6;8330;8338;8387:2;8375:9;8366:7;8362:23;8358:32;8355:119;;;8393:79;;:::i;:::-;8355:119;8541:1;8530:9;8526:17;8513:31;8571:18;8563:6;8560:30;8557:117;;;8593:79;;:::i;:::-;8557:117;8706:80;8778:7;8769:6;8758:9;8754:22;8706:80;:::i;:::-;8688:98;;;;8484:312;8835:2;8861:50;8903:7;8894:6;8883:9;8879:22;8861:50;:::i;:::-;8851:60;;8806:115;8230:698;;;;;:::o;8934:619::-;9011:6;9019;9027;9076:2;9064:9;9055:7;9051:23;9047:32;9044:119;;;9082:79;;:::i;:::-;9044:119;9202:1;9227:53;9272:7;9263:6;9252:9;9248:22;9227:53;:::i;:::-;9217:63;;9173:117;9329:2;9355:53;9400:7;9391:6;9380:9;9376:22;9355:53;:::i;:::-;9345:63;;9300:118;9457:2;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9428:118;8934:619;;;;;:::o;9559:474::-;9627:6;9635;9684:2;9672:9;9663:7;9659:23;9655:32;9652:119;;;9690:79;;:::i;:::-;9652:119;9810:1;9835:53;9880:7;9871:6;9860:9;9856:22;9835:53;:::i;:::-;9825:63;;9781:117;9937:2;9963:53;10008:7;9999:6;9988:9;9984:22;9963:53;:::i;:::-;9953:63;;9908:118;9559:474;;;;;:::o;10039:323::-;10095:6;10144:2;10132:9;10123:7;10119:23;10115:32;10112:119;;;10150:79;;:::i;:::-;10112:119;10270:1;10295:50;10337:7;10328:6;10317:9;10313:22;10295:50;:::i;:::-;10285:60;;10241:114;10039:323;;;;:::o;10368:180::-;10416:77;10413:1;10406:88;10513:4;10510:1;10503:15;10537:4;10534:1;10527:15;10554:281;10637:27;10659:4;10637:27;:::i;:::-;10629:6;10625:40;10767:6;10755:10;10752:22;10731:18;10719:10;10716:34;10713:62;10710:88;;;10778:18;;:::i;:::-;10710:88;10818:10;10814:2;10807:22;10597:238;10554:281;;:::o;10841:129::-;10875:6;10902:20;;:::i;:::-;10892:30;;10931:33;10959:4;10951:6;10931:33;:::i;:::-;10841:129;;;:::o;10976:311::-;11053:4;11143:18;11135:6;11132:30;11129:56;;;11165:18;;:::i;:::-;11129:56;11215:4;11207:6;11203:17;11195:25;;11275:4;11269;11265:15;11257:23;;10976:311;;;:::o;11310:710::-;11406:5;11431:81;11447:64;11504:6;11447:64;:::i;:::-;11431:81;:::i;:::-;11422:90;;11532:5;11561:6;11554:5;11547:21;11595:4;11588:5;11584:16;11577:23;;11648:4;11640:6;11636:17;11628:6;11624:30;11677:3;11669:6;11666:15;11663:122;;;11696:79;;:::i;:::-;11663:122;11811:6;11794:220;11828:6;11823:3;11820:15;11794:220;;;11903:3;11932:37;11965:3;11953:10;11932:37;:::i;:::-;11927:3;11920:50;11999:4;11994:3;11990:14;11983:21;;11870:144;11854:4;11849:3;11845:14;11838:21;;11794:220;;;11798:21;11412:608;;11310:710;;;;;:::o;12043:370::-;12114:5;12163:3;12156:4;12148:6;12144:17;12140:27;12130:122;;12171:79;;:::i;:::-;12130:122;12288:6;12275:20;12313:94;12403:3;12395:6;12388:4;12380:6;12376:17;12313:94;:::i;:::-;12304:103;;12120:293;12043:370;;;;:::o;12419:539::-;12503:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:119;;;12558:79;;:::i;:::-;12520:119;12706:1;12695:9;12691:17;12678:31;12736:18;12728:6;12725:30;12722:117;;;12758:79;;:::i;:::-;12722:117;12863:78;12933:7;12924:6;12913:9;12909:22;12863:78;:::i;:::-;12853:88;;12649:302;12419:539;;;;:::o;12964:430::-;13107:4;13145:2;13134:9;13130:18;13122:26;;13158:71;13226:1;13215:9;13211:17;13202:6;13158:71;:::i;:::-;13239:72;13307:2;13296:9;13292:18;13283:6;13239:72;:::i;:::-;13321:66;13383:2;13372:9;13368:18;13359:6;13321:66;:::i;:::-;12964:430;;;;;;:::o;13400:329::-;13459:6;13508:2;13496:9;13487:7;13483:23;13479:32;13476:119;;;13514:79;;:::i;:::-;13476:119;13634:1;13659:53;13704:7;13695:6;13684:9;13680:22;13659:53;:::i;:::-;13649:63;;13605:117;13400:329;;;;:::o;13752:568::-;13825:8;13835:6;13885:3;13878:4;13870:6;13866:17;13862:27;13852:122;;13893:79;;:::i;:::-;13852:122;14006:6;13993:20;13983:30;;14036:18;14028:6;14025:30;14022:117;;;14058:79;;:::i;:::-;14022:117;14172:4;14164:6;14160:17;14148:29;;14226:3;14218:4;14210:6;14206:17;14196:8;14192:32;14189:41;14186:128;;;14233:79;;:::i;:::-;14186:128;13752:568;;;;;:::o;14326:934::-;14448:6;14456;14464;14472;14521:2;14509:9;14500:7;14496:23;14492:32;14489:119;;;14527:79;;:::i;:::-;14489:119;14675:1;14664:9;14660:17;14647:31;14705:18;14697:6;14694:30;14691:117;;;14727:79;;:::i;:::-;14691:117;14840:80;14912:7;14903:6;14892:9;14888:22;14840:80;:::i;:::-;14822:98;;;;14618:312;14997:2;14986:9;14982:18;14969:32;15028:18;15020:6;15017:30;15014:117;;;15050:79;;:::i;:::-;15014:117;15163:80;15235:7;15226:6;15215:9;15211:22;15163:80;:::i;:::-;15145:98;;;;14940:313;14326:934;;;;;;;:::o;15266:474::-;15334:6;15342;15391:2;15379:9;15370:7;15366:23;15362:32;15359:119;;;15397:79;;:::i;:::-;15359:119;15517:1;15542:53;15587:7;15578:6;15567:9;15563:22;15542:53;:::i;:::-;15532:63;;15488:117;15644:2;15670:53;15715:7;15706:6;15695:9;15691:22;15670:53;:::i;:::-;15660:63;;15615:118;15266:474;;;;;:::o;15746:619::-;15823:6;15831;15839;15888:2;15876:9;15867:7;15863:23;15859:32;15856:119;;;15894:79;;:::i;:::-;15856:119;16014:1;16039:53;16084:7;16075:6;16064:9;16060:22;16039:53;:::i;:::-;16029:63;;15985:117;16141:2;16167:53;16212:7;16203:6;16192:9;16188:22;16167:53;:::i;:::-;16157:63;;16112:118;16269:2;16295:53;16340:7;16331:6;16320:9;16316:22;16295:53;:::i;:::-;16285:63;;16240:118;15746:619;;;;;:::o;16371:180::-;16419:77;16416:1;16409:88;16516:4;16513:1;16506:15;16540:4;16537:1;16530:15;16557:320;16601:6;16638:1;16632:4;16628:12;16618:22;;16685:1;16679:4;16675:12;16706:18;16696:81;;16762:4;16754:6;16750:17;16740:27;;16696:81;16824:2;16816:6;16813:14;16793:18;16790:38;16787:84;;;16843:18;;:::i;:::-;16787:84;16608:269;16557:320;;;:::o;16883:182::-;17023:34;17019:1;17011:6;17007:14;17000:58;16883:182;:::o;17071:366::-;17213:3;17234:67;17298:2;17293:3;17234:67;:::i;:::-;17227:74;;17310:93;17399:3;17310:93;:::i;:::-;17428:2;17423:3;17419:12;17412:19;;17071:366;;;:::o;17443:419::-;17609:4;17647:2;17636:9;17632:18;17624:26;;17696:9;17690:4;17686:20;17682:1;17671:9;17667:17;17660:47;17724:131;17850:4;17724:131;:::i;:::-;17716:139;;17443:419;;;:::o;17868:221::-;18008:34;18004:1;17996:6;17992:14;17985:58;18077:4;18072:2;18064:6;18060:15;18053:29;17868:221;:::o;18095:366::-;18237:3;18258:67;18322:2;18317:3;18258:67;:::i;:::-;18251:74;;18334:93;18423:3;18334:93;:::i;:::-;18452:2;18447:3;18443:12;18436:19;;18095:366;;;:::o;18467:419::-;18633:4;18671:2;18660:9;18656:18;18648:26;;18720:9;18714:4;18710:20;18706:1;18695:9;18691:17;18684:47;18748:131;18874:4;18748:131;:::i;:::-;18740:139;;18467:419;;;:::o;18892:143::-;18949:5;18980:6;18974:13;18965:22;;18996:33;19023:5;18996:33;:::i;:::-;18892:143;;;;:::o;19041:351::-;19111:6;19160:2;19148:9;19139:7;19135:23;19131:32;19128:119;;;19166:79;;:::i;:::-;19128:119;19286:1;19311:64;19367:7;19358:6;19347:9;19343:22;19311:64;:::i;:::-;19301:74;;19257:128;19041:351;;;;:::o;19398:332::-;19519:4;19557:2;19546:9;19542:18;19534:26;;19570:71;19638:1;19627:9;19623:17;19614:6;19570:71;:::i;:::-;19651:72;19719:2;19708:9;19704:18;19695:6;19651:72;:::i;:::-;19398:332;;;;;:::o;19736:180::-;19784:77;19781:1;19774:88;19881:4;19878:1;19871:15;19905:4;19902:1;19895:15;19922:102;19964:8;20011:5;20008:1;20004:13;19983:34;;19922:102;;;:::o;20030:848::-;20091:5;20098:4;20122:6;20113:15;;20146:5;20137:14;;20160:712;20181:1;20171:8;20168:15;20160:712;;;20276:4;20271:3;20267:14;20261:4;20258:24;20255:50;;;20285:18;;:::i;:::-;20255:50;20335:1;20325:8;20321:16;20318:451;;;20750:4;20743:5;20739:16;20730:25;;20318:451;20800:4;20794;20790:15;20782:23;;20830:32;20853:8;20830:32;:::i;:::-;20818:44;;20160:712;;;20030:848;;;;;;;:::o;20884:1073::-;20938:5;21129:8;21119:40;;21150:1;21141:10;;21152:5;;21119:40;21178:4;21168:36;;21195:1;21186:10;;21197:5;;21168:36;21264:4;21312:1;21307:27;;;;21348:1;21343:191;;;;21257:277;;21307:27;21325:1;21316:10;;21327:5;;;21343:191;21388:3;21378:8;21375:17;21372:43;;;21395:18;;:::i;:::-;21372:43;21444:8;21441:1;21437:16;21428:25;;21479:3;21472:5;21469:14;21466:40;;;21486:18;;:::i;:::-;21466:40;21519:5;;;21257:277;;21643:2;21633:8;21630:16;21624:3;21618:4;21615:13;21611:36;21593:2;21583:8;21580:16;21575:2;21569:4;21566:12;21562:35;21546:111;21543:246;;;21699:8;21693:4;21689:19;21680:28;;21734:3;21727:5;21724:14;21721:40;;;21741:18;;:::i;:::-;21721:40;21774:5;;21543:246;21814:42;21852:3;21842:8;21836:4;21833:1;21814:42;:::i;:::-;21799:57;;;;21888:4;21883:3;21879:14;21872:5;21869:25;21866:51;;;21897:18;;:::i;:::-;21866:51;21946:4;21939:5;21935:16;21926:25;;20884:1073;;;;;;:::o;21963:281::-;22021:5;22045:23;22063:4;22045:23;:::i;:::-;22037:31;;22089:25;22105:8;22089:25;:::i;:::-;22077:37;;22133:104;22170:66;22160:8;22154:4;22133:104;:::i;:::-;22124:113;;21963:281;;;;:::o;22250:348::-;22290:7;22313:20;22331:1;22313:20;:::i;:::-;22308:25;;22347:20;22365:1;22347:20;:::i;:::-;22342:25;;22535:1;22467:66;22463:74;22460:1;22457:81;22452:1;22445:9;22438:17;22434:105;22431:131;;;22542:18;;:::i;:::-;22431:131;22590:1;22587;22583:9;22572:20;;22250:348;;;;:::o;22604:231::-;22744:34;22740:1;22732:6;22728:14;22721:58;22813:14;22808:2;22800:6;22796:15;22789:39;22604:231;:::o;22841:366::-;22983:3;23004:67;23068:2;23063:3;23004:67;:::i;:::-;22997:74;;23080:93;23169:3;23080:93;:::i;:::-;23198:2;23193:3;23189:12;23182:19;;22841:366;;;:::o;23213:419::-;23379:4;23417:2;23406:9;23402:18;23394:26;;23466:9;23460:4;23456:20;23452:1;23441:9;23437:17;23430:47;23494:131;23620:4;23494:131;:::i;:::-;23486:139;;23213:419;;;:::o;23638:228::-;23778:34;23774:1;23766:6;23762:14;23755:58;23847:11;23842:2;23834:6;23830:15;23823:36;23638:228;:::o;23872:366::-;24014:3;24035:67;24099:2;24094:3;24035:67;:::i;:::-;24028:74;;24111:93;24200:3;24111:93;:::i;:::-;24229:2;24224:3;24220:12;24213:19;;23872:366;;;:::o;24244:419::-;24410:4;24448:2;24437:9;24433:18;24425:26;;24497:9;24491:4;24487:20;24483:1;24472:9;24468:17;24461:47;24525:131;24651:4;24525:131;:::i;:::-;24517:139;;24244:419;;;:::o;24669:180::-;24717:77;24714:1;24707:88;24814:4;24811:1;24804:15;24838:4;24835:1;24828:15;24855:114;24922:6;24956:5;24950:12;24940:22;;24855:114;;;:::o;24975:184::-;25074:11;25108:6;25103:3;25096:19;25148:4;25143:3;25139:14;25124:29;;24975:184;;;;:::o;25165:132::-;25232:4;25255:3;25247:11;;25285:4;25280:3;25276:14;25268:22;;25165:132;;;:::o;25303:108::-;25380:24;25398:5;25380:24;:::i;:::-;25375:3;25368:37;25303:108;;:::o;25417:179::-;25486:10;25507:46;25549:3;25541:6;25507:46;:::i;:::-;25585:4;25580:3;25576:14;25562:28;;25417:179;;;;:::o;25602:113::-;25672:4;25704;25699:3;25695:14;25687:22;;25602:113;;;:::o;25751:732::-;25870:3;25899:54;25947:5;25899:54;:::i;:::-;25969:86;26048:6;26043:3;25969:86;:::i;:::-;25962:93;;26079:56;26129:5;26079:56;:::i;:::-;26158:7;26189:1;26174:284;26199:6;26196:1;26193:13;26174:284;;;26275:6;26269:13;26302:63;26361:3;26346:13;26302:63;:::i;:::-;26295:70;;26388:60;26441:6;26388:60;:::i;:::-;26378:70;;26234:224;26221:1;26218;26214:9;26209:14;;26174:284;;;26178:14;26474:3;26467:10;;25875:608;;;25751:732;;;;:::o;26489:483::-;26660:4;26698:2;26687:9;26683:18;26675:26;;26711:71;26779:1;26768:9;26764:17;26755:6;26711:71;:::i;:::-;26829:9;26823:4;26819:20;26814:2;26803:9;26799:18;26792:48;26857:108;26960:4;26951:6;26857:108;:::i;:::-;26849:116;;26489:483;;;;;:::o;26978:311::-;27055:4;27145:18;27137:6;27134:30;27131:56;;;27167:18;;:::i;:::-;27131:56;27217:4;27209:6;27205:17;27197:25;;27277:4;27271;27267:15;27259:23;;26978:311;;;:::o;27295:143::-;27352:5;27383:6;27377:13;27368:22;;27399:33;27426:5;27399:33;:::i;:::-;27295:143;;;;:::o;27461:732::-;27568:5;27593:81;27609:64;27666:6;27609:64;:::i;:::-;27593:81;:::i;:::-;27584:90;;27694:5;27723:6;27716:5;27709:21;27757:4;27750:5;27746:16;27739:23;;27810:4;27802:6;27798:17;27790:6;27786:30;27839:3;27831:6;27828:15;27825:122;;;27858:79;;:::i;:::-;27825:122;27973:6;27956:231;27990:6;27985:3;27982:15;27956:231;;;28065:3;28094:48;28138:3;28126:10;28094:48;:::i;:::-;28089:3;28082:61;28172:4;28167:3;28163:14;28156:21;;28032:155;28016:4;28011:3;28007:14;28000:21;;27956:231;;;27960:21;27574:619;;27461:732;;;;;:::o;28216:385::-;28298:5;28347:3;28340:4;28332:6;28328:17;28324:27;28314:122;;28355:79;;:::i;:::-;28314:122;28465:6;28459:13;28490:105;28591:3;28583:6;28576:4;28568:6;28564:17;28490:105;:::i;:::-;28481:114;;28304:297;28216:385;;;;:::o;28607:554::-;28702:6;28751:2;28739:9;28730:7;28726:23;28722:32;28719:119;;;28757:79;;:::i;:::-;28719:119;28898:1;28887:9;28883:17;28877:24;28928:18;28920:6;28917:30;28914:117;;;28950:79;;:::i;:::-;28914:117;29055:89;29136:7;29127:6;29116:9;29112:22;29055:89;:::i;:::-;29045:99;;28848:306;28607:554;;;;:::o;29167:232::-;29307:34;29303:1;29295:6;29291:14;29284:58;29376:15;29371:2;29363:6;29359:15;29352:40;29167:232;:::o;29405:366::-;29547:3;29568:67;29632:2;29627:3;29568:67;:::i;:::-;29561:74;;29644:93;29733:3;29644:93;:::i;:::-;29762:2;29757:3;29753:12;29746:19;;29405:366;;;:::o;29777:419::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:229::-;30342:34;30338:1;30330:6;30326:14;30319:58;30411:12;30406:2;30398:6;30394:15;30387:37;30202:229;:::o;30437:366::-;30579:3;30600:67;30664:2;30659:3;30600:67;:::i;:::-;30593:74;;30676:93;30765:3;30676:93;:::i;:::-;30794:2;30789:3;30785:12;30778:19;;30437:366;;;:::o;30809:419::-;30975:4;31013:2;31002:9;30998:18;30990:26;;31062:9;31056:4;31052:20;31048:1;31037:9;31033:17;31026:47;31090:131;31216:4;31090:131;:::i;:::-;31082:139;;30809:419;;;:::o;31234:305::-;31274:3;31293:20;31311:1;31293:20;:::i;:::-;31288:25;;31327:20;31345:1;31327:20;:::i;:::-;31322:25;;31481:1;31413:66;31409:74;31406:1;31403:81;31400:107;;;31487:18;;:::i;:::-;31400:107;31531:1;31528;31524:9;31517:16;;31234:305;;;;:::o;31545:225::-;31685:34;31681:1;31673:6;31669:14;31662:58;31754:8;31749:2;31741:6;31737:15;31730:33;31545:225;:::o;31776:366::-;31918:3;31939:67;32003:2;31998:3;31939:67;:::i;:::-;31932:74;;32015:93;32104:3;32015:93;:::i;:::-;32133:2;32128:3;32124:12;32117:19;;31776:366;;;:::o;32148:419::-;32314:4;32352:2;32341:9;32337:18;32329:26;;32401:9;32395:4;32391:20;32387:1;32376:9;32372:17;32365:47;32429:131;32555:4;32429:131;:::i;:::-;32421:139;;32148:419;;;:::o;32573:223::-;32713:34;32709:1;32701:6;32697:14;32690:58;32782:6;32777:2;32769:6;32765:15;32758:31;32573:223;:::o;32802:366::-;32944:3;32965:67;33029:2;33024:3;32965:67;:::i;:::-;32958:74;;33041:93;33130:3;33041:93;:::i;:::-;33159:2;33154:3;33150:12;33143:19;;32802:366;;;:::o;33174:419::-;33340:4;33378:2;33367:9;33363:18;33355:26;;33427:9;33421:4;33417:20;33413:1;33402:9;33398:17;33391:47;33455:131;33581:4;33455:131;:::i;:::-;33447:139;;33174:419;;;:::o;33599:221::-;33739:34;33735:1;33727:6;33723:14;33716:58;33808:4;33803:2;33795:6;33791:15;33784:29;33599:221;:::o;33826:366::-;33968:3;33989:67;34053:2;34048:3;33989:67;:::i;:::-;33982:74;;34065:93;34154:3;34065:93;:::i;:::-;34183:2;34178:3;34174:12;34167:19;;33826:366;;;:::o;34198:419::-;34364:4;34402:2;34391:9;34387:18;34379:26;;34451:9;34445:4;34441:20;34437:1;34426:9;34422:17;34415:47;34479:131;34605:4;34479:131;:::i;:::-;34471:139;;34198:419;;;:::o;34623:224::-;34763:34;34759:1;34751:6;34747:14;34740:58;34832:7;34827:2;34819:6;34815:15;34808:32;34623:224;:::o;34853:366::-;34995:3;35016:67;35080:2;35075:3;35016:67;:::i;:::-;35009:74;;35092:93;35181:3;35092:93;:::i;:::-;35210:2;35205:3;35201:12;35194:19;;34853:366;;;:::o;35225:419::-;35391:4;35429:2;35418:9;35414:18;35406:26;;35478:9;35472:4;35468:20;35464:1;35453:9;35449:17;35442:47;35506:131;35632:4;35506:131;:::i;:::-;35498:139;;35225:419;;;:::o;35650:222::-;35790:34;35786:1;35778:6;35774:14;35767:58;35859:5;35854:2;35846:6;35842:15;35835:30;35650:222;:::o;35878:366::-;36020:3;36041:67;36105:2;36100:3;36041:67;:::i;:::-;36034:74;;36117:93;36206:3;36117:93;:::i;:::-;36235:2;36230:3;36226:12;36219:19;;35878:366;;;:::o;36250:419::-;36416:4;36454:2;36443:9;36439:18;36431:26;;36503:9;36497:4;36493:20;36489:1;36478:9;36474:17;36467:47;36531:131;36657:4;36531:131;:::i;:::-;36523:139;;36250:419;;;:::o;36675:228::-;36815:34;36811:1;36803:6;36799:14;36792:58;36884:11;36879:2;36871:6;36867:15;36860:36;36675:228;:::o;36909:366::-;37051:3;37072:67;37136:2;37131:3;37072:67;:::i;:::-;37065:74;;37148:93;37237:3;37148:93;:::i;:::-;37266:2;37261:3;37257:12;37250:19;;36909:366;;;:::o;37281:419::-;37447:4;37485:2;37474:9;37470:18;37462:26;;37534:9;37528:4;37524:20;37520:1;37509:9;37505:17;37498:47;37562:131;37688:4;37562:131;:::i;:::-;37554:139;;37281:419;;;:::o;37706:180::-;37846:32;37842:1;37834:6;37830:14;37823:56;37706:180;:::o;37892:366::-;38034:3;38055:67;38119:2;38114:3;38055:67;:::i;:::-;38048:74;;38131:93;38220:3;38131:93;:::i;:::-;38249:2;38244:3;38240:12;38233:19;;37892:366;;;:::o;38264:419::-;38430:4;38468:2;38457:9;38453:18;38445:26;;38517:9;38511:4;38507:20;38503:1;38492:9;38488:17;38481:47;38545:131;38671:4;38545:131;:::i;:::-;38537:139;;38264:419;;;:::o;38689:234::-;38829:34;38825:1;38817:6;38813:14;38806:58;38898:17;38893:2;38885:6;38881:15;38874:42;38689:234;:::o;38929:366::-;39071:3;39092:67;39156:2;39151:3;39092:67;:::i;:::-;39085:74;;39168:93;39257:3;39168:93;:::i;:::-;39286:2;39281:3;39277:12;39270:19;;38929:366;;;:::o;39301:419::-;39467:4;39505:2;39494:9;39490:18;39482:26;;39554:9;39548:4;39544:20;39540:1;39529:9;39525:17;39518:47;39582:131;39708:4;39582:131;:::i;:::-;39574:139;;39301:419;;;:::o;39726:227::-;39866:34;39862:1;39854:6;39850:14;39843:58;39935:10;39930:2;39922:6;39918:15;39911:35;39726:227;:::o;39959:366::-;40101:3;40122:67;40186:2;40181:3;40122:67;:::i;:::-;40115:74;;40198:93;40287:3;40198:93;:::i;:::-;40316:2;40311:3;40307:12;40300:19;;39959:366;;;:::o;40331:419::-;40497:4;40535:2;40524:9;40520:18;40512:26;;40584:9;40578:4;40574:20;40570:1;40559:9;40555:17;40548:47;40612:131;40738:4;40612:131;:::i;:::-;40604:139;;40331:419;;;:::o;40756:224::-;40896:34;40892:1;40884:6;40880:14;40873:58;40965:7;40960:2;40952:6;40948:15;40941:32;40756:224;:::o;40986:366::-;41128:3;41149:67;41213:2;41208:3;41149:67;:::i;:::-;41142:74;;41225:93;41314:3;41225:93;:::i;:::-;41343:2;41338:3;41334:12;41327:19;;40986:366;;;:::o;41358:419::-;41524:4;41562:2;41551:9;41547:18;41539:26;;41611:9;41605:4;41601:20;41597:1;41586:9;41582:17;41575:47;41639:131;41765:4;41639:131;:::i;:::-;41631:139;;41358:419;;;:::o;41783:165::-;41923:17;41919:1;41911:6;41907:14;41900:41;41783:165;:::o;41954:366::-;42096:3;42117:67;42181:2;42176:3;42117:67;:::i;:::-;42110:74;;42193:93;42282:3;42193:93;:::i;:::-;42311:2;42306:3;42302:12;42295:19;;41954:366;;;:::o;42326:419::-;42492:4;42530:2;42519:9;42515:18;42507:26;;42579:9;42573:4;42569:20;42565:1;42554:9;42550:17;42543:47;42607:131;42733:4;42607:131;:::i;:::-;42599:139;;42326:419;;;:::o;42751:191::-;42791:4;42811:20;42829:1;42811:20;:::i;:::-;42806:25;;42845:20;42863:1;42845:20;:::i;:::-;42840:25;;42884:1;42881;42878:8;42875:34;;;42889:18;;:::i;:::-;42875:34;42934:1;42931;42927:9;42919:17;;42751:191;;;;:::o;42948:177::-;43088:29;43084:1;43076:6;43072:14;43065:53;42948:177;:::o;43131:366::-;43273:3;43294:67;43358:2;43353:3;43294:67;:::i;:::-;43287:74;;43370:93;43459:3;43370:93;:::i;:::-;43488:2;43483:3;43479:12;43472:19;;43131:366;;;:::o;43503:419::-;43669:4;43707:2;43696:9;43692:18;43684:26;;43756:9;43750:4;43746:20;43742:1;43731:9;43727:17;43720:47;43784:131;43910:4;43784:131;:::i;:::-;43776:139;;43503:419;;;:::o;43928:233::-;43967:3;43990:24;44008:5;43990:24;:::i;:::-;43981:33;;44036:66;44029:5;44026:77;44023:103;;;44106:18;;:::i;:::-;44023:103;44153:1;44146:5;44142:13;44135:20;;43928:233;;;:::o;44167:663::-;44255:6;44263;44271;44320:2;44308:9;44299:7;44295:23;44291:32;44288:119;;;44326:79;;:::i;:::-;44288:119;44446:1;44471:64;44527:7;44518:6;44507:9;44503:22;44471:64;:::i;:::-;44461:74;;44417:128;44584:2;44610:64;44666:7;44657:6;44646:9;44642:22;44610:64;:::i;:::-;44600:74;;44555:129;44723:2;44749:64;44805:7;44796:6;44785:9;44781:22;44749:64;:::i;:::-;44739:74;;44694:129;44167:663;;;;;:::o;44836:553::-;45013:4;45051:3;45040:9;45036:19;45028:27;;45065:71;45133:1;45122:9;45118:17;45109:6;45065:71;:::i;:::-;45146:72;45214:2;45203:9;45199:18;45190:6;45146:72;:::i;:::-;45228;45296:2;45285:9;45281:18;45272:6;45228:72;:::i;:::-;45310;45378:2;45367:9;45363:18;45354:6;45310:72;:::i;:::-;44836:553;;;;;;;:::o;45395:180::-;45443:77;45440:1;45433:88;45540:4;45537:1;45530:15;45564:4;45561:1;45554:15;45581:185;45621:1;45638:20;45656:1;45638:20;:::i;:::-;45633:25;;45672:20;45690:1;45672:20;:::i;:::-;45667:25;;45711:1;45701:35;;45716:18;;:::i;:::-;45701:35;45758:1;45755;45751:9;45746:14;;45581:185;;;;:::o;45772:220::-;45912:34;45908:1;45900:6;45896:14;45889:58;45981:3;45976:2;45968:6;45964:15;45957:28;45772:220;:::o;45998:366::-;46140:3;46161:67;46225:2;46220:3;46161:67;:::i;:::-;46154:74;;46237:93;46326:3;46237:93;:::i;:::-;46355:2;46350:3;46346:12;46339:19;;45998:366;;;:::o;46370:419::-;46536:4;46574:2;46563:9;46559:18;46551:26;;46623:9;46617:4;46613:20;46609:1;46598:9;46594:17;46587:47;46651:131;46777:4;46651:131;:::i;:::-;46643:139;;46370:419;;;:::o;46795:85::-;46840:7;46869:5;46858:16;;46795:85;;;:::o;46886:158::-;46944:9;46977:61;46995:42;47004:32;47030:5;47004:32;:::i;:::-;46995:42;:::i;:::-;46977:61;:::i;:::-;46964:74;;46886:158;;;:::o;47050:147::-;47145:45;47184:5;47145:45;:::i;:::-;47140:3;47133:58;47050:147;;:::o;47203:831::-;47466:4;47504:3;47493:9;47489:19;47481:27;;47518:71;47586:1;47575:9;47571:17;47562:6;47518:71;:::i;:::-;47599:80;47675:2;47664:9;47660:18;47651:6;47599:80;:::i;:::-;47726:9;47720:4;47716:20;47711:2;47700:9;47696:18;47689:48;47754:108;47857:4;47848:6;47754:108;:::i;:::-;47746:116;;47872:72;47940:2;47929:9;47925:18;47916:6;47872:72;:::i;:::-;47954:73;48022:3;48011:9;48007:19;47998:6;47954:73;:::i;:::-;47203:831;;;;;;;;:::o;48040:147::-;48141:11;48178:3;48163:18;;48040:147;;;;:::o;48193:114::-;;:::o;48313:398::-;48472:3;48493:83;48574:1;48569:3;48493:83;:::i;:::-;48486:90;;48585:93;48674:3;48585:93;:::i;:::-;48703:1;48698:3;48694:11;48687:18;;48313:398;;;:::o;48717:379::-;48901:3;48923:147;49066:3;48923:147;:::i;:::-;48916:154;;49087:3;49080:10;;48717:379;;;:::o;49102:807::-;49351:4;49389:3;49378:9;49374:19;49366:27;;49403:71;49471:1;49460:9;49456:17;49447:6;49403:71;:::i;:::-;49484:72;49552:2;49541:9;49537:18;49528:6;49484:72;:::i;:::-;49566:80;49642:2;49631:9;49627:18;49618:6;49566:80;:::i;:::-;49656;49732:2;49721:9;49717:18;49708:6;49656:80;:::i;:::-;49746:73;49814:3;49803:9;49799:19;49790:6;49746:73;:::i;:::-;49829;49897:3;49886:9;49882:19;49873:6;49829:73;:::i;:::-;49102:807;;;;;;;;;:::o

Swarm Source

ipfs://29294d698f2455a9892cf12f7c89b9eded8b8b0d9184a8b5eb872a86c550b9b9
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.