ETH Price: $2,467.25 (-5.83%)
Gas: 4.95 Gwei

Token

Sandren Flames (SNDRNFLMS)
 

Overview

Max Total Supply

370,449,250.868217723 SNDRNFLMS

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
383,412.530265515 SNDRNFLMS

Value
$0.00
0xEA035365ddC9E5Db8B22AB1Cf7d618DDE39dca1a
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:
SandrenFlames

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.17;
// 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 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);
    function getPair(address token0, address token1) external view returns (address);
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}

contract SandrenFlames is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    event TokensBurned(uint256, uint256);
    event RaffleWinner(address, uint256);
    event SandrenLiquidityAdded(uint, uint256);
    struct SandrenConfig {
        uint256 maxWalletAmount;
        uint256 ethPriceToSwap;
        uint256 ethPriceForRewards;
        uint256 liquidityPoolPercentage;
        uint256 burnFrequencynMinutes;
        uint256 burnRateInBasePoints;
        uint256 minimumSandrenTokens;
        uint8[3] buyFees;
        uint8[3] sellFees; 
        bool isBurnEnabled;        
    }

    struct LastWinner {
        address holder;
        uint ethAmount;
    }

    IUniswapV2Router02 private uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    string private _name = "Sandren Flames";
    string private _symbol = "SNDRNFLMS";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1000000000 * 10 ** 9; 
    IterableMapping private sandrenHoldersMap = new IterableMapping();
    bool inSwapAndLiquify;
    uint256 public tokensBurnedSinceLaunch;
    uint256 public totalEthRewardedSinceLaunch;
    uint public liquidityUnlockDate;    
    uint public nextLiquidityBurnTimeStamp;   
    TokenBurner public tokenBurner = new TokenBurner(address(this));
    IERC20 private sandrenToken = IERC20(0xC39F5519123d40D695012f779afBAcBd3AdbEb91);  //Mainnet
    LastWinner public lastWinner = LastWinner(address(0), 0);
    SandrenConfig public sandrenConfig = SandrenConfig(
        100000000001 * 10 ** 9,
        // 10000001 * 10 ** _decimals,  //maxWalletAmount
        300000000000000000,    //ethPriceToSwap .3ETH
        100000000000000000, //ethPriceForRewards - .1 ETH is the minimum amount to be included in rewards.
        75,  //liquidityPoolPercentage
        60,  //burnFrequencynMinutes
        100,  //burnRateInBasePoints - .05% for Buyback and Burn and .05% for SNDRN LP
        100000 * 10 ** 9,  //minimumSandrenTokens 100K tokens of SNDRN required for Eth reward entry
        [3, 4, 5], //buyFees random taxation between 3%-5% on every buy
        [4, 5, 6], //sellFees random taxation between 4%-6% on every sell
        true  //isBurnEnabled
    );
 
    constructor () {
         _balances[address(this)] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(tokenBurner)] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), address(this), _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 setSandrenFlamesConfig(uint256 maxWalletAmount, uint ethPriceToSwap,uint256 ethPriceForRewards, uint256 liquidityPoolPercentage, uint256 burnFrequencynMinutes,
                                    uint256 minimumSandrenTokens, uint8[3] calldata buyFees, uint8[3] calldata sellFees, bool isBurnEnabled) external onlyOwner {
        sandrenConfig.maxWalletAmount = maxWalletAmount * 10 ** 9;
        sandrenConfig.ethPriceToSwap = ethPriceToSwap;
        sandrenConfig.ethPriceForRewards = ethPriceForRewards;
        sandrenConfig.liquidityPoolPercentage = liquidityPoolPercentage;
        sandrenConfig.burnFrequencynMinutes = burnFrequencynMinutes;
        sandrenConfig.minimumSandrenTokens = minimumSandrenTokens * 10 ** 9;
        sandrenConfig.buyFees = buyFees;
        sandrenConfig.sellFees = sellFees;
        sandrenConfig.isBurnEnabled = isBurnEnabled;
    }

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

    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");
        _tTotal = _tTotal.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }
    
    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function checkIncludedInEthRaffle(address holder) public view returns(bool) {
        return sandrenHoldersMap.keyExists(holder);
    }

    function totalRaffleParticipants() public view returns(uint256) {
        return sandrenHoldersMap.size();
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }

    function chooseRandomWinner() private returns(address) {
        uint256 totalHolders = sandrenHoldersMap.size();
        //We should at least have more than one Sandren holder to use the random pick
        if(totalHolders > 1 ) {
            uint256 randomIndex = getRandomeNumberByRange(totalHolders);
            address holder = sandrenHoldersMap.getKeyAtIndex(randomIndex);
            uint256 balance = sandrenToken.balanceOf(holder);
            if(balance >= sandrenConfig.minimumSandrenTokens) {
                return holder;
            } else {
                sandrenHoldersMap.remove(holder);
                return address(0);
            }
        } 
        return address(0);
    }
    
    function getRandomTax(uint8[3] memory fees) public view returns(uint256) {
        uint256 range = fees.length;
        uint256 index = getRandomeNumberByRange(range);
        return fees[index];
    }

    function getRandomeNumberByRange(uint256 range) public view returns(uint) {
        uint randomnumber = uint(keccak256(abi.encodePacked(block.timestamp))) % range;
        return randomnumber;
    }

    function burnTokens() external {
        require(block.timestamp >= nextLiquidityBurnTimeStamp, "Next burn time is not due yet, be patient");
        require(!sandrenConfig.isBurnEnabled, "Burning tokens is currently disabled");
        burnTokensFromLiquidityPool();
    }

    function lockLiquidity(uint256 newLockDate) external onlyOwner {
        require(newLockDate > liquidityUnlockDate, "New lock date must be greater than existing lock date");
        liquidityUnlockDate = newLockDate;
    }

    function openTrading() external onlyOwner() {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            address(this),
            block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        nextLiquidityBurnTimeStamp = block.timestamp;
        liquidityUnlockDate = block.timestamp.add(3 days); //lock the liquidity for 3 days
    }

    //This is only for protection at launch in case of any issues.  Liquidity cannot be pulled if 
    //liquidityUnlockDate has not been reached or contract is renounced
    function removeLiqudityPool() external onlyOwner {
        require(liquidityUnlockDate < block.timestamp, "Liquidity is currently locked");
        uint liquidity = IERC20(uniswapV2Pair).balanceOf(address(this));
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), liquidity);
        removeLiquidity(liquidity, owner());
    } 

    function burnTokensFromLiquidityPool() private lockTheSwap {
        uint liquidity = IERC20(uniswapV2Pair).balanceOf(address(this));
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), liquidity);
        uint tokensToBurn = liquidity.div(sandrenConfig.burnRateInBasePoints);
        removeLiquidity(tokensToBurn, address(tokenBurner));
         //this puts ETH back in the liquidity pool
        tokenBurner.buyBack(); 
        //burn all of the tokens that were removed from the liquidity pool and tokens from the buy back
        uint256 tokenBurnAmount = balanceOf(address(tokenBurner)); 
        if(tokenBurnAmount > 0) {
            //burn the tokens we removed from LP and what was bought
            _burn(address(tokenBurner), tokenBurnAmount);
            tokensBurnedSinceLaunch = tokensBurnedSinceLaunch.add(tokenBurnAmount);
            nextLiquidityBurnTimeStamp = block.timestamp.add(sandrenConfig.burnFrequencynMinutes.mul(60));
            emit TokensBurned(tokenBurnAmount, nextLiquidityBurnTimeStamp);
        }
        buySandrenTokensAndAddToLiquidityPool();
    }

    function removeLiquidity(uint256 tokenAmount, address toAddress) private {
         uniswapV2Router.removeLiquidity(
            uniswapV2Router.WETH(),
            address(this),
            tokenAmount,
            1,
            1,
            toAddress,
            block.timestamp
        );
    }

    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");
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        bool isSell = false;
        if(from != owner() && to != owner() && from != address(this) &&
           from != address(tokenBurner) && to != address(tokenBurner)) {
            uint256 holderBalance = balanceOf(to).add(amount);
            if (from == uniswapV2Pair) {
                require(holderBalance <= sandrenConfig.maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                uint256 tokenAmount = getTokenAmountByEthPrice(sandrenConfig.ethPriceForRewards);
                if(holderBalance >= tokenAmount) {
                    addRemoveSandrenHolder(to);
                }
            }
            if (from != uniswapV2Pair && to != uniswapV2Pair) {
                require(holderBalance <= sandrenConfig.maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if (from != uniswapV2Pair && to == uniswapV2Pair) {
                isSell = true;
                if(block.timestamp >= nextLiquidityBurnTimeStamp && sandrenConfig.isBurnEnabled) {
                    burnTokensFromLiquidityPool();
                } else {
                    sellTokens();
                }
            }  
        }
        tokenTransfer(from, to, amount, takeFees, isSell);
    }

    function addSandrenHoldersForEthRewards(address[] calldata holders) external onlyOwner {
       for(uint256 i =0; i < holders.length; i++) {
            addRemoveSandrenHolder(holders[i]);
       }
    }

    function tokenTransfer(address from, address to, uint256 amount, bool takeFees, bool isSell) private {
        uint256 taxFee = isSell ? getRandomTax(sandrenConfig.sellFees) : getRandomTax(sandrenConfig.buyFees);
        uint256 taxAmount = takeFees ? amount.mul(taxFee).div(100) : 0;  
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, amount);
    }

    function addRemoveSandrenHolder(address holder) private {
        if(!Address.isContract(holder) && sandrenToken.balanceOf(holder) >= sandrenConfig.minimumSandrenTokens) {
            sandrenHoldersMap.add(holder);
        } else {
            sandrenHoldersMap.remove(holder);
        }
    }

    function sellTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice(sandrenConfig.ethPriceToSwap);
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                swapTokensForEth(tokenAmount);
            }
        }
    }

    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);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    
        uint256 ethBalance = address(this).balance;
        uint256 lpShare = ethBalance.mul(sandrenConfig.liquidityPoolPercentage).div(100);
        uint256 ethPrize = ethBalance.sub(lpShare);
        address chosenWinner = chooseRandomWinner();
        // if random winner has Sandren tokens, then chooseWinner will be the winners address and the eth prize will be sent immediately
        // otherwise the eth prize amount will be used to add to the liquidity pool for Sandren Token      
        if(chosenWinner != address(0)) {
            payable(chosenWinner).transfer(ethPrize);
            lastWinner.holder = chosenWinner;
            lastWinner.ethAmount = ethPrize;
            totalEthRewardedSinceLaunch = totalEthRewardedSinceLaunch.add(ethPrize);
            sandrenHoldersMap.remove(chosenWinner);
            emit RaffleWinner(chosenWinner, ethPrize);
        } else {
            lastWinner.holder = address(0);
            lastWinner.ethAmount = 0;
        }
        buySandrenTokensAndAddToLiquidityPool();
    }

    function buySandrenTokensAndAddToLiquidityPool() private {
        uint256 ethBalance = address(this).balance;
        if(ethBalance > 0) {
            uint256 takeHalfEth = ethBalance.div(2);
            swapEthForSandren(takeHalfEth);
            uint256 tokenAmount = sandrenToken.balanceOf(address(this));
            addSandrenLiquidity(takeHalfEth, tokenAmount);
            emit SandrenLiquidityAdded(takeHalfEth, tokenAmount);
        }
    }

    function addSandrenLiquidity(uint256 ethAmount, uint256 tokenAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        sandrenToken.approve(address(uniswapV2Router), tokenAmount);
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(sandrenToken),
            tokenAmount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    function swapEthForSandren(uint ethAmount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(sandrenToken);
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens
        {value: ethAmount}(
        0,
        path,
        address(this),
        block.timestamp);
    }

    function getTokenAmountByEthPrice(uint ethAmount) private view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethAmount, path)[1];
    }

    receive() external payable {}

    function recoverEthInContract() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

contract TokenBurner is Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 private uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IERC20 private wethToken = IERC20(uniswapV2Router.WETH());
    IERC20 public tokenContractAddress;
    event sentEthForSandrenLiquidityPool(uint);
    constructor(address tokenAddr) {
        tokenContractAddress = IERC20(tokenAddr);
    }

    function buyBack() external {
        withdrawWETH();
        uint256 ethAmount = address(this).balance;
        uint256 halfForBuyBack = ethAmount.div(2);
        swapEthForSandrenFlames(halfForBuyBack);
         (bool success,) = address(tokenContractAddress).call{value : halfForBuyBack}("");
          if (success) {
            emit sentEthForSandrenLiquidityPool(halfForBuyBack);
        }
    }

    function swapEthForSandrenFlames(uint ethAmount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(tokenContractAddress);
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens
        {value: ethAmount}(
        0,
        path,
        address(this),
        block.timestamp);
    }

    function withdrawWETH() private {
        uint weth = IERC20(uniswapV2Router.WETH()).balanceOf(address(this));
        IWETH(uniswapV2Router.WETH()).withdraw(weth);
    }

    receive() external payable {}

    function recoverEth() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

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

    Map private map;

    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 add(address key) public {
        if (!map.inserted[key]) {
            map.inserted[key] = true;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[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 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":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RaffleWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"SandrenLiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokensBurned","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":"holders","type":"address[]"}],"name":"addSandrenHoldersForEthRewards","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIncludedInEthRaffle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[3]","name":"fees","type":"uint8[3]"}],"name":"getRandomTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"range","type":"uint256"}],"name":"getRandomeNumberByRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastWinner","outputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityUnlockDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLockDate","type":"uint256"}],"name":"lockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLiquidityBurnTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLiqudityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sandrenConfig","outputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap","type":"uint256"},{"internalType":"uint256","name":"ethPriceForRewards","type":"uint256"},{"internalType":"uint256","name":"liquidityPoolPercentage","type":"uint256"},{"internalType":"uint256","name":"burnFrequencynMinutes","type":"uint256"},{"internalType":"uint256","name":"burnRateInBasePoints","type":"uint256"},{"internalType":"uint256","name":"minimumSandrenTokens","type":"uint256"},{"internalType":"bool","name":"isBurnEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap","type":"uint256"},{"internalType":"uint256","name":"ethPriceForRewards","type":"uint256"},{"internalType":"uint256","name":"liquidityPoolPercentage","type":"uint256"},{"internalType":"uint256","name":"burnFrequencynMinutes","type":"uint256"},{"internalType":"uint256","name":"minimumSandrenTokens","type":"uint256"},{"internalType":"uint8[3]","name":"buyFees","type":"uint8[3]"},{"internalType":"uint8[3]","name":"sellFees","type":"uint8[3]"},{"internalType":"bool","name":"isBurnEnabled","type":"bool"}],"name":"setSandrenFlamesConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBurner","outputs":[{"internalType":"contract TokenBurner","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensBurnedSinceLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthRewardedSinceLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaffleParticipants","outputs":[{"internalType":"uint256","name":"","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600e81526020017f53616e6472656e20466c616d657300000000000000000000000000000000000081525060069081620000e1919062000a98565b506040518060400160405280600981526020017f534e44524e464c4d5300000000000000000000000000000000000000000000008152506007908162000128919062000a98565b506009600860006101000a81548160ff021916908360ff160217905550670de0b6b3a76400006009556040516200015f9062000742565b604051809103906000f0801580156200017c573d6000803e3d6000fd5b50600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030604051620001cc9062000750565b620001d8919062000bc4565b604051809103906000f080158015620001f5573d6000803e3d6000fd5b50600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c39f5519123d40d695012f779afbacbd3adbeb91601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250601160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505060405180610140016040528068056bc75e2d9eaaca008152602001670429d069189e0000815260200167016345785d8a00008152602001604b8152602001603c815260200160648152602001655af3107a400081526020016040518060600160405280600360ff168152602001600460ff168152602001600560ff1681525081526020016040518060600160405280600460ff168152602001600560ff168152602001600660ff168152508152602001600115158152506013600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701906003620004259291906200075e565b5061010082015181600801906003620004409291906200075e565b506101208201518160090160006101000a81548160ff02191690831515021790555050503480156200047157600080fd5b506000620004846200071160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600954600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600560006200057e6200071960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000703919062000bf2565b60405180910390a362000c0f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109578062006b6b83390190565b6114ac80620074c283390190565b826003601f01602090048101928215620007ec5791602002820160005b83821115620007bb57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026200077b565b8015620007ea5782816101000a81549060ff0219169055600101602081600001049283019260010302620007bb565b505b509050620007fb9190620007ff565b5090565b5b808211156200081a57600081600090555060010162000800565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008a057607f821691505b602082108103620008b657620008b562000858565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008e1565b6200092c8683620008e1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000979620009736200096d8462000944565b6200094e565b62000944565b9050919050565b6000819050919050565b620009958362000958565b620009ad620009a48262000980565b848454620008ee565b825550505050565b600090565b620009c4620009b5565b620009d18184846200098a565b505050565b5b81811015620009f957620009ed600082620009ba565b600181019050620009d7565b5050565b601f82111562000a485762000a1281620008bc565b62000a1d84620008d1565b8101602085101562000a2d578190505b62000a4562000a3c85620008d1565b830182620009d6565b50505b505050565b600082821c905092915050565b600062000a6d6000198460080262000a4d565b1980831691505092915050565b600062000a88838362000a5a565b9150826002028217905092915050565b62000aa3826200081e565b67ffffffffffffffff81111562000abf5762000abe62000829565b5b62000acb825462000887565b62000ad8828285620009fd565b600060209050601f83116001811462000b10576000841562000afb578287015190505b62000b07858262000a7a565b86555062000b77565b601f19841662000b2086620008bc565b60005b8281101562000b4a5784890151825560018201915060208501945060208101905062000b23565b8683101562000b6a578489015162000b66601f89168262000a5a565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bac8262000b7f565b9050919050565b62000bbe8162000b9f565b82525050565b600060208201905062000bdb600083018462000bb3565b92915050565b62000bec8162000944565b82525050565b600060208201905062000c09600083018462000be1565b92915050565b615f4c8062000c1f6000396000f3fe6080604052600436106102085760003560e01c80634ea272c111610118578063a9059cbb116100a0578063dc13b31c1161006f578063dc13b31c1461076d578063dd62ed3e14610798578063e9ac0e59146107d5578063f2fde38b146107ec578063fe188184146108155761020f565b8063a9059cbb1461069f578063a91bdfc1146106dc578063c9567bf914610719578063d5cc1042146107305761020f565b80638da5cb5b116100e75780638da5cb5b146105a4578063953d1408146105cf57806395d89b411461060c5780639f26198014610637578063a457c2d7146106625761020f565b80634ea272c1146104fc57806362fa83571461052757806370a0823114610550578063715018a61461058d5761020f565b80632996f9721161019b57806341ec3a521161016a57806341ec3a521461042957806342966c6814610454578063441d801f1461047d57806348fad638146104a657806349bd5a5e146104d15761020f565b80632996f9721461036d5780632bfbd9cf14610398578063313ce567146103c157806339509351146103ec5761020f565b806318160ddd116101d757806318160ddd146102c55780632175c2a0146102f057806323b872dd146103195780632743b3cb146103565761020f565b8063025164a31461021457806306fdde031461024657806308003f7814610271578063095ea7b3146102885761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610841565b60405161023d989796959493929190614628565b60405180910390f35b34801561025257600080fd5b5061025b610884565b6040516102689190614736565b60405180910390f35b34801561027d57600080fd5b50610286610916565b005b34801561029457600080fd5b506102af60048036038101906102aa91906147f6565b6109b8565b6040516102bc9190614836565b60405180910390f35b3480156102d157600080fd5b506102da6109d6565b6040516102e79190614851565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906148d1565b6109e0565b005b34801561032557600080fd5b50610340600480360381019061033b919061491e565b610acb565b60405161034d9190614836565b60405180910390f35b34801561036257600080fd5b5061036b610ba4565b005b34801561037957600080fd5b50610382610df4565b60405161038f91906149d0565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906149eb565b610e1a565b005b3480156103cd57600080fd5b506103d6610efd565b6040516103e39190614a34565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906147f6565b610f14565b6040516104209190614836565b60405180910390f35b34801561043557600080fd5b5061043e610fc7565b60405161044b9190614851565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906149eb565b610fcd565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614a7b565b610fda565b005b3480156104b257600080fd5b506104bb61107f565b6040516104c89190614851565b60405180910390f35b3480156104dd57600080fd5b506104e6611085565b6040516104f39190614aea565b60405180910390f35b34801561050857600080fd5b506105116110ab565b60405161051e9190614851565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614b27565b611143565b005b34801561055c57600080fd5b5061057760048036038101906105729190614bf2565b611284565b6040516105849190614851565b60405180910390f35b34801561059957600080fd5b506105a26112cd565b005b3480156105b057600080fd5b506105b9611420565b6040516105c69190614aea565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906149eb565b611449565b6040516106039190614851565b60405180910390f35b34801561061857600080fd5b5061062161148c565b60405161062e9190614736565b60405180910390f35b34801561064357600080fd5b5061064c61151e565b6040516106599190614851565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906147f6565b611524565b6040516106969190614836565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906147f6565b6115f1565b6040516106d39190614836565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190614d77565b61160f565b6040516107109190614851565b60405180910390f35b34801561072557600080fd5b5061072e611647565b005b34801561073c57600080fd5b5061075760048036038101906107529190614bf2565b611b37565b6040516107649190614836565b60405180910390f35b34801561077957600080fd5b50610782611bdc565b60405161078f9190614851565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614da4565b611be2565b6040516107cc9190614851565b60405180910390f35b3480156107e157600080fd5b506107ea611c69565b005b3480156107f857600080fd5b50610813600480360381019061080e9190614bf2565b611d54565b005b34801561082157600080fd5b5061082a611f15565b604051610838929190614de4565b60405180910390f35b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154908060090160009054906101000a900460ff16905088565b60606006805461089390614e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546108bf90614e3c565b801561090c5780601f106108e15761010080835404028352916020019161090c565b820191906000526020600020905b8154815290600101906020018083116108ef57829003601f168201915b5050505050905090565b600e5442101561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290614edf565b60405180910390fd5b601360090160009054906101000a900460ff16156109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590614f71565b60405180910390fd5b6109b6611f47565b565b60006109cc6109c56122a3565b84846122ab565b6001905092915050565b6000600954905090565b6109e86122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90614fdd565b60405180910390fd5b60005b82829050811015610ac657610ab3838383818110610a9957610a98614ffd565b5b9050602002016020810190610aae9190614bf2565b612474565b8080610abe9061505b565b915050610a78565b505050565b6000610ad8848484612652565b610b9984610ae46122a3565b610b9485604051806060016040528060288152602001615eca60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4a6122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce49092919063ffffffff16565b6122ab565b600190509392505050565b610bac6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614fdd565b60405180910390fd5b42600d5410610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906150ef565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cda9190614aea565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190615124565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610d9c929190614de4565b6020604051808303816000875af1158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf9190615166565b50610df181610dec611420565b612d48565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e226122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690614fdd565b60405180910390fd5b600d548111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90615205565b60405180910390fd5b80600d8190555050565b6000600860009054906101000a900460ff16905090565b6000610fbd610f216122a3565b84610fb88560046000610f326122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b6122ab565b6001905092915050565b600c5481565b610fd73382612ee6565b50565b610fe26122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690614fdd565b60405180910390fd5b61107a83838361306f565b505050565b600e5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190615124565b905090565b61114b6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614fdd565b60405180910390fd5b633b9aca00896111e89190615225565b60136000018190555087601360010181905550866013600201819055508560136003018190555084601360040181905550633b9aca00846112299190615225565b60136006018190555082601360070190600361124692919061453a565b5081601360080190600361125b92919061453a565b5080601360090160006101000a81548160ff021916908315150217905550505050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d56122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080824260405160200161145e9190615288565b6040516020818303038152906040528051906020012060001c61148191906152d2565b905080915050919050565b60606007805461149b90614e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546114c790614e3c565b80156115145780601f106114e957610100808354040283529160200191611514565b820191906000526020600020905b8154815290600101906020018083116114f757829003601f168201915b5050505050905090565b600d5481565b60006115e76115316122a3565b846115e285604051806060016040528060258152602001615ef2602591396004600061155b6122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce49092919063ffffffff16565b6122ab565b6001905092915050565b60006116056115fe6122a3565b8484612652565b6001905092915050565b60008060039050600061162182611449565b905083816003811061163657611635614ffd565b5b602002015160ff1692505050919050565b61164f6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490615375565b60405180910390fd5b61179c30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546122ab565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d91906153aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da91906153aa565b6040518363ffffffff1660e01b81526004016118f79291906153d7565b6020604051808303816000875af1158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a91906153aa565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306119c330611284565b60008030426040518863ffffffff1660e01b81526004016119e99695949392919061543b565b60606040518083038185885af1158015611a07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a2c919061549c565b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ace929190614de4565b6020604051808303816000875af1158015611aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b119190615166565b5042600e81905550611b2f6203f48042612e8890919063ffffffff16565b600d81905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd413329836040518263ffffffff1660e01b8152600401611b949190614aea565b602060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd59190615166565b9050919050565b600b5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c716122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614fdd565b60405180910390fd5b6000479050611d0b611420565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d50573d6000803e3d6000fd5b5050565b611d5c6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90615561565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60118060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6001600a60146101000a81548160ff0219169083151502179055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fbf9190614aea565b602060405180830381865afa158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120009190615124565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612081929190614de4565b6020604051808303816000875af11580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190615166565b5060006120df6013600501548361311a90919063ffffffff16565b905061210d81600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d48565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663acdf4f186040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b5050505060006121bc600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611284565b9050600081111561227b576121f3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612ee6565b61220881600b54612e8890919063ffffffff16565b600b8190555061223961222a603c60136004015461316490919063ffffffff16565b42612e8890919063ffffffff16565b600e819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81600e54604051612272929190615581565b60405180910390a15b6122836131de565b5050506000600a60146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361231a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123119061561c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906156ae565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124679190614851565b60405180910390a3505050565b61247d816132f6565b15801561252a5750601360060154601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016124e69190614aea565b602060405180830381865afa158015612503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125279190615124565b10155b156125c157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a3b0a4f826040518263ffffffff1660e01b815260040161258a9190614aea565b600060405180830381600087803b1580156125a457600080fd5b505af11580156125b8573d6000803e3d6000fd5b5050505061264f565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161261c9190614aea565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b890615740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612727906157d2565b60405180910390fd5b60008111612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90615864565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128195750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128585750612828611420565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128975750612867611420565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905060006128a3611420565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561291157506128e1611420565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561294957503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156129a35750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156129fd5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612cd0576000612a1f84612a1187611284565b612e8890919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ae357601360000154811115612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab5906158f6565b60405180910390fd5b6000612ace601360020154613341565b9050808210612ae157612ae086612474565b5b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612b8f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612bdd57601360000154811115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906158f6565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c885750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612cce5760019150600e544210158015612cb25750601360090160009054906101000a900460ff165b15612cc457612cbf611f47565b612ccd565b612ccc613584565b5b5b505b612cdd85858585856135dd565b5050505050565b6000838311158290612d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d239190614736565b60405180910390fd5b5060008385612d3b9190615916565b9050809150509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663baa2abde600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1791906153aa565b308560018087426040518863ffffffff1660e01b8152600401612e409796959493929190615985565b60408051808303816000875af1158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8291906159f4565b50505050565b6000808284612e979190615a34565b905083811015612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390615ab4565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90615b46565b60405180910390fd5b612f6a8160095461394690919063ffffffff16565b600981905550612fc281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461394690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130639190614851565b60405180910390a35050565b60005b8383905081101561311457600084848381811061309257613091614ffd565b5b90506020020160208101906130a79190614bf2565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061310c9061505b565b915050613072565b50505050565b600061315c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613990565b905092915050565b600080830361317657600090506131d8565b600082846131849190615225565b90508284826131939190615b66565b146131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ca90615c09565b60405180910390fd5b809150505b92915050565b600047905060008111156132f357600061320260028361311a90919063ffffffff16565b905061320d816139f3565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161326a9190614aea565b602060405180830381865afa158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190615124565b90506132b78282613c2a565b7f90496a8349529047c3ffa17bd6e613362f7c50c3ad59f2f1bf7da5766cf242fa82826040516132e8929190615581565b60405180910390a150505b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561333857506000801b8214155b92505050919050565b600080600267ffffffffffffffff81111561335f5761335e614c1f565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342191906153aa565b8160008151811061343557613434614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061348457613483614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161351b929190615ce7565b600060405180830381865afa158015613538573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906135619190615dda565b60018151811061357457613573614ffd565b5b6020026020010151915050919050565b600061358f30611284565b905060008111156135da5760006135aa601360010154613341565b90508082101580156135c95750600a60149054906101000a900460ff16155b156135d8576135d781613ded565b5b505b50565b600081613658576136536013600701600380602002604051908101604052809291908260038015613649576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116136125790505b505050505061160f565b6136c8565b6136c760136008016003806020026040519081016040528092919082600380156136bd576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116136865790505b505050505061160f565b5b90506000836136d85760006136ff565b6136fe60646136f0848861316490919063ffffffff16565b61311a90919063ffffffff16565b5b90506000613716828761394690919063ffffffff16565b905061376a86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461394690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ff81600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389482600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139349190614851565b60405180910390a35050505050505050565b600061398883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ce4565b905092915050565b600080831182906139d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ce9190614736565b60405180910390fd5b50600083856139e69190615b66565b9050809150509392505050565b6000600267ffffffffffffffff811115613a1057613a0f614c1f565b5b604051908082528060200260200182016040528015613a3e5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad291906153aa565b81600081518110613ae657613ae5614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613b5757613b56614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401613bf49493929190615e23565b6000604051808303818588803b158015613c0d57600080fd5b505af1158015613c21573d6000803e3d6000fd5b50505050505050565b613c5730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122ab565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613cd6929190614de4565b6020604051808303816000875af1158015613cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d199190615166565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460008030426040518863ffffffff1660e01b8152600401613da39695949392919061543b565b60606040518083038185885af1158015613dc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613de6919061549c565b5050505050565b6000600267ffffffffffffffff811115613e0a57613e09614c1f565b5b604051908082528060200260200182016040528015613e385781602001602082028036833780820191505090505b5090503081600081518110613e5057613e4f614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1b91906153aa565b81600181518110613f2f57613f2e614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f9630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122ab565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ffa959493929190615e6f565b600060405180830381600087803b15801561401457600080fd5b505af1158015614028573d6000803e3d6000fd5b505050506000479050600061405e60646140506013600301548561316490919063ffffffff16565b61311a90919063ffffffff16565b90506000614075828461394690919063ffffffff16565b90506000614081614293565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614232578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156140fd573d6000803e3d6000fd5b5080601160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160116001018190555061416182600c54612e8890919063ffffffff16565b600c81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016141c29190614aea565b600060405180830381600087803b1580156141dc57600080fd5b505af11580156141f0573d6000803e3d6000fd5b505050507f7e2ca3905e2a3f4806a624223ea6cdcd30dad54d82e68b44481a5e00f322efc78183604051614225929190614de4565b60405180910390a1614283565b6000601160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006011600101819055505b61428b6131de565b505050505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143279190615124565b9050600181111561453157600061433d82611449565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b815260040161439c9190614851565b602060405180830381865afa1580156143b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143dd91906153aa565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161443c9190614aea565b602060405180830381865afa158015614459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061447d9190615124565b905060136006015481106144975781945050505050614537565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016144f29190614aea565b600060405180830381600087803b15801561450c57600080fd5b505af1158015614520573d6000803e3d6000fd5b505050506000945050505050614537565b60009150505b90565b826003601f016020900481019282156145c65791602002820160005b8382111561459757833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302614556565b80156145c45782816101000a81549060ff0219169055600101602081600001049283019260010302614597565b505b5090506145d391906145d7565b5090565b5b808211156145f05760008160009055506001016145d8565b5090565b6000819050919050565b614607816145f4565b82525050565b60008115159050919050565b6146228161460d565b82525050565b60006101008201905061463e600083018b6145fe565b61464b602083018a6145fe565b61465860408301896145fe565b61466560608301886145fe565b61467260808301876145fe565b61467f60a08301866145fe565b61468c60c08301856145fe565b61469960e0830184614619565b9998505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146e05780820151818401526020810190506146c5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614708826146a6565b61471281856146b1565b93506147228185602086016146c2565b61472b816146ec565b840191505092915050565b6000602082019050818103600083015261475081846146fd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147978261476c565b9050919050565b6147a78161478c565b81146147b257600080fd5b50565b6000813590506147c48161479e565b92915050565b6147d3816145f4565b81146147de57600080fd5b50565b6000813590506147f0816147ca565b92915050565b6000806040838503121561480d5761480c614762565b5b600061481b858286016147b5565b925050602061482c858286016147e1565b9150509250929050565b600060208201905061484b6000830184614619565b92915050565b600060208201905061486660008301846145fe565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126148915761489061486c565b5b8235905067ffffffffffffffff8111156148ae576148ad614871565b5b6020830191508360208202830111156148ca576148c9614876565b5b9250929050565b600080602083850312156148e8576148e7614762565b5b600083013567ffffffffffffffff81111561490657614905614767565b5b6149128582860161487b565b92509250509250929050565b60008060006060848603121561493757614936614762565b5b6000614945868287016147b5565b9350506020614956868287016147b5565b9250506040614967868287016147e1565b9150509250925092565b6000819050919050565b600061499661499161498c8461476c565b614971565b61476c565b9050919050565b60006149a88261497b565b9050919050565b60006149ba8261499d565b9050919050565b6149ca816149af565b82525050565b60006020820190506149e560008301846149c1565b92915050565b600060208284031215614a0157614a00614762565b5b6000614a0f848285016147e1565b91505092915050565b600060ff82169050919050565b614a2e81614a18565b82525050565b6000602082019050614a496000830184614a25565b92915050565b614a588161460d565b8114614a6357600080fd5b50565b600081359050614a7581614a4f565b92915050565b600080600060408486031215614a9457614a93614762565b5b600084013567ffffffffffffffff811115614ab257614ab1614767565b5b614abe8682870161487b565b93509350506020614ad186828701614a66565b9150509250925092565b614ae48161478c565b82525050565b6000602082019050614aff6000830184614adb565b92915050565b600081905082602060030282011115614b2157614b20614876565b5b92915050565b60008060008060008060008060006101a08a8c031215614b4a57614b49614762565b5b6000614b588c828d016147e1565b9950506020614b698c828d016147e1565b9850506040614b7a8c828d016147e1565b9750506060614b8b8c828d016147e1565b9650506080614b9c8c828d016147e1565b95505060a0614bad8c828d016147e1565b94505060c0614bbe8c828d01614b05565b935050610120614bd08c828d01614b05565b925050610180614be28c828d01614a66565b9150509295985092959850929598565b600060208284031215614c0857614c07614762565b5b6000614c16848285016147b5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614c57826146ec565b810181811067ffffffffffffffff82111715614c7657614c75614c1f565b5b80604052505050565b6000614c89614758565b9050614c958282614c4e565b919050565b600067ffffffffffffffff821115614cb557614cb4614c1f565b5b602082029050919050565b614cc981614a18565b8114614cd457600080fd5b50565b600081359050614ce681614cc0565b92915050565b6000614cff614cfa84614c9a565b614c7f565b90508060208402830185811115614d1957614d18614876565b5b835b81811015614d425780614d2e8882614cd7565b845260208401935050602081019050614d1b565b5050509392505050565b600082601f830112614d6157614d6061486c565b5b6003614d6e848285614cec565b91505092915050565b600060608284031215614d8d57614d8c614762565b5b6000614d9b84828501614d4c565b91505092915050565b60008060408385031215614dbb57614dba614762565b5b6000614dc9858286016147b5565b9250506020614dda858286016147b5565b9150509250929050565b6000604082019050614df96000830185614adb565b614e0660208301846145fe565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e5457607f821691505b602082108103614e6757614e66614e0d565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614ec96029836146b1565b9150614ed482614e6d565b604082019050919050565b60006020820190508181036000830152614ef881614ebc565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614f5b6024836146b1565b9150614f6682614eff565b604082019050919050565b60006020820190508181036000830152614f8a81614f4e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc76020836146b1565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615066826145f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150985761509761502c565b5b600182019050919050565b7f4c69717569646974792069732063757272656e746c79206c6f636b6564000000600082015250565b60006150d9601d836146b1565b91506150e4826150a3565b602082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b60008151905061511e816147ca565b92915050565b60006020828403121561513a57615139614762565b5b60006151488482850161510f565b91505092915050565b60008151905061516081614a4f565b92915050565b60006020828403121561517c5761517b614762565b5b600061518a84828501615151565b91505092915050565b7f4e6577206c6f636b2064617465206d757374206265206772656174657220746860008201527f616e206578697374696e67206c6f636b20646174650000000000000000000000602082015250565b60006151ef6035836146b1565b91506151fa82615193565b604082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b6000615230826145f4565b915061523b836145f4565b9250828202615249816145f4565b915082820484148315176152605761525f61502c565b5b5092915050565b6000819050919050565b61528261527d826145f4565b615267565b82525050565b60006152948284615271565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152dd826145f4565b91506152e8836145f4565b9250826152f8576152f76152a3565b5b828206905092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061535f6022836146b1565b915061536a82615303565b604082019050919050565b6000602082019050818103600083015261538e81615352565b9050919050565b6000815190506153a48161479e565b92915050565b6000602082840312156153c0576153bf614762565b5b60006153ce84828501615395565b91505092915050565b60006040820190506153ec6000830185614adb565b6153f96020830184614adb565b9392505050565b6000819050919050565b600061542561542061541b84615400565b614971565b6145f4565b9050919050565b6154358161540a565b82525050565b600060c0820190506154506000830189614adb565b61545d60208301886145fe565b61546a604083018761542c565b615477606083018661542c565b6154846080830185614adb565b61549160a08301846145fe565b979650505050505050565b6000806000606084860312156154b5576154b4614762565b5b60006154c38682870161510f565b93505060206154d48682870161510f565b92505060406154e58682870161510f565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061554b6026836146b1565b9150615556826154ef565b604082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b600060408201905061559660008301856145fe565b6155a360208301846145fe565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156066024836146b1565b9150615611826155aa565b604082019050919050565b60006020820190508181036000830152615635816155f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156986022836146b1565b91506156a38261563c565b604082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061572a6025836146b1565b9150615735826156ce565b604082019050919050565b600060208201905081810360008301526157598161571d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157bc6023836146b1565b91506157c782615760565b604082019050919050565b600060208201905081810360008301526157eb816157af565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061584e6029836146b1565b9150615859826157f2565b604082019050919050565b6000602082019050818103600083015261587d81615841565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006158e06025836146b1565b91506158eb82615884565b604082019050919050565b6000602082019050818103600083015261590f816158d3565b9050919050565b6000615921826145f4565b915061592c836145f4565b92508282039050818111156159445761594361502c565b5b92915050565b6000819050919050565b600061596f61596a6159658461594a565b614971565b6145f4565b9050919050565b61597f81615954565b82525050565b600060e08201905061599a600083018a614adb565b6159a76020830189614adb565b6159b460408301886145fe565b6159c16060830187615976565b6159ce6080830186615976565b6159db60a0830185614adb565b6159e860c08301846145fe565b98975050505050505050565b60008060408385031215615a0b57615a0a614762565b5b6000615a198582860161510f565b9250506020615a2a8582860161510f565b9150509250929050565b6000615a3f826145f4565b9150615a4a836145f4565b9250828201905080821115615a6257615a6161502c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a9e601b836146b1565b9150615aa982615a68565b602082019050919050565b60006020820190508181036000830152615acd81615a91565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b306021836146b1565b9150615b3b82615ad4565b604082019050919050565b60006020820190508181036000830152615b5f81615b23565b9050919050565b6000615b71826145f4565b9150615b7c836145f4565b925082615b8c57615b8b6152a3565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615bf36021836146b1565b9150615bfe82615b97565b604082019050919050565b60006020820190508181036000830152615c2281615be6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c5e8161478c565b82525050565b6000615c708383615c55565b60208301905092915050565b6000602082019050919050565b6000615c9482615c29565b615c9e8185615c34565b9350615ca983615c45565b8060005b83811015615cda578151615cc18882615c64565b9750615ccc83615c7c565b925050600181019050615cad565b5085935050505092915050565b6000604082019050615cfc60008301856145fe565b8181036020830152615d0e8184615c89565b90509392505050565b600067ffffffffffffffff821115615d3257615d31614c1f565b5b602082029050602081019050919050565b6000615d56615d5184615d17565b614c7f565b90508083825260208201905060208402830185811115615d7957615d78614876565b5b835b81811015615da25780615d8e888261510f565b845260208401935050602081019050615d7b565b5050509392505050565b600082601f830112615dc157615dc061486c565b5b8151615dd1848260208601615d43565b91505092915050565b600060208284031215615df057615def614762565b5b600082015167ffffffffffffffff811115615e0e57615e0d614767565b5b615e1a84828501615dac565b91505092915050565b6000608082019050615e38600083018761542c565b8181036020830152615e4a8186615c89565b9050615e596040830185614adb565b615e6660608301846145fe565b95945050505050565b600060a082019050615e8460008301886145fe565b615e91602083018761542c565b8181036040830152615ea38186615c89565b9050615eb26060830185614adb565b615ebf60808301846145fe565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f7ac2050fd0ff4225e2d27de2e8f3e3e0426c0fd81284c5567974fee1a83ff864736f6c63430008110033608060405234801561001057600080fd5b50610937806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630a3b0a4f1461006757806329092d0e14610083578063564c8d111461009f578063663037ac146100cf578063949d225d146100ff578063cd4133291461011d575b600080fd5b610081600480360381019061007c91906106f2565b61014d565b005b61009d600480360381019061009891906106f2565b6102b3565b005b6100b960048036038101906100b491906106f2565b610539565b6040516100c69190610738565b60405180910390f35b6100e960048036038101906100e49190610789565b610601565b6040516100f691906107c5565b60405180910390f35b61010761064b565b60405161011491906107ef565b60405180910390f35b610137600480360381019061013291906106f2565b61065a565b6040516101449190610825565b60405180910390f35b600060020160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166102b0576001600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000800180549050600060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600060020160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561053657600060020160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905560008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506103b6919061086f565b905060008060000182815481106103d0576103cf6108a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106104a1576104a06108a3565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600080018054806104fd576104fc6108d2565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b60008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166105b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506105fc565b600060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b6000806000018281548110610619576106186108a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61068683610539565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106bf82610694565b9050919050565b6106cf816106b4565b81146106da57600080fd5b50565b6000813590506106ec816106c6565b92915050565b6000602082840312156107085761070761068f565b5b6000610716848285016106dd565b91505092915050565b6000819050919050565b6107328161071f565b82525050565b600060208201905061074d6000830184610729565b92915050565b6000819050919050565b61076681610753565b811461077157600080fd5b50565b6000813590506107838161075d565b92915050565b60006020828403121561079f5761079e61068f565b5b60006107ad84828501610774565b91505092915050565b6107bf816106b4565b82525050565b60006020820190506107da60008301846107b6565b92915050565b6107e981610753565b82525050565b600060208201905061080460008301846107e0565b92915050565b60008115159050919050565b61081f8161080a565b82525050565b600060208201905061083a6000830184610816565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061087a82610753565b915061088583610753565b925082820390508181111561089d5761089c610840565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220fdad359d3bae5dc8ffc8ec546f12c10f60c86abd9656bffd143dae52bd3be05d64736f6c634300081100336080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ed9190620002ca565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013a57600080fd5b50604051620014ac380380620014ac8339818101604052810190620001609190620002ca565b6000620001726200025860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002fc565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002928262000265565b9050919050565b620002a48162000285565b8114620002b057600080fd5b50565b600081519050620002c48162000299565b92915050565b600060208284031215620002e357620002e262000260565b5b6000620002f384828501620002b3565b91505092915050565b6111a0806200030c6000396000f3fe6080604052600436106100595760003560e01c8063715018a61461006557806382edaf941461007c5780638da5cb5b146100a7578063acdf4f18146100d2578063bcdb446b146100e9578063f2fde38b1461010057610060565b3661006057005b600080fd5b34801561007157600080fd5b5061007a610129565b005b34801561008857600080fd5b5061009161027c565b60405161009e9190610bed565b60405180910390f35b3480156100b357600080fd5b506100bc6102a2565b6040516100c99190610c29565b60405180910390f35b3480156100de57600080fd5b506100e76102cb565b005b3480156100f557600080fd5b506100fe6103ca565b005b34801561010c57600080fd5b5061012760048036038101906101229190610c75565b6104b5565b005b610131610676565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101b590610cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102d361067e565b600047905060006102ee60028361088a90919063ffffffff16565b90506102f9816108d4565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161034190610d50565b60006040518083038185875af1925050503d806000811461037e576040519150601f19603f3d011682016040523d82523d6000602084013e610383565b606091505b5050905080156103c5577fbd6b7fcdc3b7037df6526f424ae069d2dd2f20342f1827cb691d2b545e1515f2826040516103bc9190610d7e565b60405180910390a15b505050565b6103d2610676565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461045f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045690610cff565b60405180910390fd5b600047905061046c6102a2565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156104b1573d6000803e3d6000fd5b5050565b6104bd610676565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461054a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054190610cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b090610e0b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107119190610e40565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107499190610c29565b602060405180830381865afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190610e99565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190610e40565b73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016108559190610d7e565b600060405180830381600087803b15801561086f57600080fd5b505af1158015610883573d6000803e3d6000fd5b5050505050565b60006108cc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610b0b565b905092915050565b6000600267ffffffffffffffff8111156108f1576108f0610ec6565b5b60405190808252806020026020018201604052801561091f5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190610e40565b816000815181106109c7576109c6610ef5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a3857610a37610ef5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401610ad5949392919061101d565b6000604051808303818588803b158015610aee57600080fd5b505af1158015610b02573d6000803e3d6000fd5b50505050505050565b60008083118290610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4991906110e8565b60405180910390fd5b5060008385610b619190611139565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610bb3610bae610ba984610b6e565b610b8e565b610b6e565b9050919050565b6000610bc582610b98565b9050919050565b6000610bd782610bba565b9050919050565b610be781610bcc565b82525050565b6000602082019050610c026000830184610bde565b92915050565b6000610c1382610b6e565b9050919050565b610c2381610c08565b82525050565b6000602082019050610c3e6000830184610c1a565b92915050565b600080fd5b610c5281610c08565b8114610c5d57600080fd5b50565b600081359050610c6f81610c49565b92915050565b600060208284031215610c8b57610c8a610c44565b5b6000610c9984828501610c60565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610ce9602083610ca2565b9150610cf482610cb3565b602082019050919050565b60006020820190508181036000830152610d1881610cdc565b9050919050565b600081905092915050565b50565b6000610d3a600083610d1f565b9150610d4582610d2a565b600082019050919050565b6000610d5b82610d2d565b9150819050919050565b6000819050919050565b610d7881610d65565b82525050565b6000602082019050610d936000830184610d6f565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610df5602683610ca2565b9150610e0082610d99565b604082019050919050565b60006020820190508181036000830152610e2481610de8565b9050919050565b600081519050610e3a81610c49565b92915050565b600060208284031215610e5657610e55610c44565b5b6000610e6484828501610e2b565b91505092915050565b610e7681610d65565b8114610e8157600080fd5b50565b600081519050610e9381610e6d565b92915050565b600060208284031215610eaf57610eae610c44565b5b6000610ebd84828501610e84565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000610f49610f44610f3f84610f24565b610b8e565b610d65565b9050919050565b610f5981610f2e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610f9481610c08565b82525050565b6000610fa68383610f8b565b60208301905092915050565b6000602082019050919050565b6000610fca82610f5f565b610fd48185610f6a565b9350610fdf83610f7b565b8060005b83811015611010578151610ff78882610f9a565b975061100283610fb2565b925050600181019050610fe3565b5085935050505092915050565b60006080820190506110326000830187610f50565b81810360208301526110448186610fbf565b90506110536040830185610c1a565b6110606060830184610d6f565b95945050505050565b600081519050919050565b60005b83811015611092578082015181840152602081019050611077565b60008484015250505050565b6000601f19601f8301169050919050565b60006110ba82611069565b6110c48185610ca2565b93506110d4818560208601611074565b6110dd8161109e565b840191505092915050565b6000602082019050818103600083015261110281846110af565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061114482610d65565b915061114f83610d65565b92508261115f5761115e61110a565b5b82820490509291505056fea264697066735822122036563ff1ce8387e48d92950974a21adad6f872cc72daa2652c88445f86aca70e64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80634ea272c111610118578063a9059cbb116100a0578063dc13b31c1161006f578063dc13b31c1461076d578063dd62ed3e14610798578063e9ac0e59146107d5578063f2fde38b146107ec578063fe188184146108155761020f565b8063a9059cbb1461069f578063a91bdfc1146106dc578063c9567bf914610719578063d5cc1042146107305761020f565b80638da5cb5b116100e75780638da5cb5b146105a4578063953d1408146105cf57806395d89b411461060c5780639f26198014610637578063a457c2d7146106625761020f565b80634ea272c1146104fc57806362fa83571461052757806370a0823114610550578063715018a61461058d5761020f565b80632996f9721161019b57806341ec3a521161016a57806341ec3a521461042957806342966c6814610454578063441d801f1461047d57806348fad638146104a657806349bd5a5e146104d15761020f565b80632996f9721461036d5780632bfbd9cf14610398578063313ce567146103c157806339509351146103ec5761020f565b806318160ddd116101d757806318160ddd146102c55780632175c2a0146102f057806323b872dd146103195780632743b3cb146103565761020f565b8063025164a31461021457806306fdde031461024657806308003f7814610271578063095ea7b3146102885761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610841565b60405161023d989796959493929190614628565b60405180910390f35b34801561025257600080fd5b5061025b610884565b6040516102689190614736565b60405180910390f35b34801561027d57600080fd5b50610286610916565b005b34801561029457600080fd5b506102af60048036038101906102aa91906147f6565b6109b8565b6040516102bc9190614836565b60405180910390f35b3480156102d157600080fd5b506102da6109d6565b6040516102e79190614851565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906148d1565b6109e0565b005b34801561032557600080fd5b50610340600480360381019061033b919061491e565b610acb565b60405161034d9190614836565b60405180910390f35b34801561036257600080fd5b5061036b610ba4565b005b34801561037957600080fd5b50610382610df4565b60405161038f91906149d0565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906149eb565b610e1a565b005b3480156103cd57600080fd5b506103d6610efd565b6040516103e39190614a34565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906147f6565b610f14565b6040516104209190614836565b60405180910390f35b34801561043557600080fd5b5061043e610fc7565b60405161044b9190614851565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906149eb565b610fcd565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614a7b565b610fda565b005b3480156104b257600080fd5b506104bb61107f565b6040516104c89190614851565b60405180910390f35b3480156104dd57600080fd5b506104e6611085565b6040516104f39190614aea565b60405180910390f35b34801561050857600080fd5b506105116110ab565b60405161051e9190614851565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190614b27565b611143565b005b34801561055c57600080fd5b5061057760048036038101906105729190614bf2565b611284565b6040516105849190614851565b60405180910390f35b34801561059957600080fd5b506105a26112cd565b005b3480156105b057600080fd5b506105b9611420565b6040516105c69190614aea565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f191906149eb565b611449565b6040516106039190614851565b60405180910390f35b34801561061857600080fd5b5061062161148c565b60405161062e9190614736565b60405180910390f35b34801561064357600080fd5b5061064c61151e565b6040516106599190614851565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906147f6565b611524565b6040516106969190614836565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c191906147f6565b6115f1565b6040516106d39190614836565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190614d77565b61160f565b6040516107109190614851565b60405180910390f35b34801561072557600080fd5b5061072e611647565b005b34801561073c57600080fd5b5061075760048036038101906107529190614bf2565b611b37565b6040516107649190614836565b60405180910390f35b34801561077957600080fd5b50610782611bdc565b60405161078f9190614851565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614da4565b611be2565b6040516107cc9190614851565b60405180910390f35b3480156107e157600080fd5b506107ea611c69565b005b3480156107f857600080fd5b50610813600480360381019061080e9190614bf2565b611d54565b005b34801561082157600080fd5b5061082a611f15565b604051610838929190614de4565b60405180910390f35b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154908060090160009054906101000a900460ff16905088565b60606006805461089390614e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546108bf90614e3c565b801561090c5780601f106108e15761010080835404028352916020019161090c565b820191906000526020600020905b8154815290600101906020018083116108ef57829003601f168201915b5050505050905090565b600e5442101561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290614edf565b60405180910390fd5b601360090160009054906101000a900460ff16156109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590614f71565b60405180910390fd5b6109b6611f47565b565b60006109cc6109c56122a3565b84846122ab565b6001905092915050565b6000600954905090565b6109e86122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90614fdd565b60405180910390fd5b60005b82829050811015610ac657610ab3838383818110610a9957610a98614ffd565b5b9050602002016020810190610aae9190614bf2565b612474565b8080610abe9061505b565b915050610a78565b505050565b6000610ad8848484612652565b610b9984610ae46122a3565b610b9485604051806060016040528060288152602001615eca60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4a6122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce49092919063ffffffff16565b6122ab565b600190509392505050565b610bac6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090614fdd565b60405180910390fd5b42600d5410610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906150ef565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cda9190614aea565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190615124565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610d9c929190614de4565b6020604051808303816000875af1158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf9190615166565b50610df181610dec611420565b612d48565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e226122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690614fdd565b60405180910390fd5b600d548111610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90615205565b60405180910390fd5b80600d8190555050565b6000600860009054906101000a900460ff16905090565b6000610fbd610f216122a3565b84610fb88560046000610f326122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b6122ab565b6001905092915050565b600c5481565b610fd73382612ee6565b50565b610fe26122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690614fdd565b60405180910390fd5b61107a83838361306f565b505050565b600e5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190615124565b905090565b61114b6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90614fdd565b60405180910390fd5b633b9aca00896111e89190615225565b60136000018190555087601360010181905550866013600201819055508560136003018190555084601360040181905550633b9aca00846112299190615225565b60136006018190555082601360070190600361124692919061453a565b5081601360080190600361125b92919061453a565b5080601360090160006101000a81548160ff021916908315150217905550505050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112d56122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080824260405160200161145e9190615288565b6040516020818303038152906040528051906020012060001c61148191906152d2565b905080915050919050565b60606007805461149b90614e3c565b80601f01602080910402602001604051908101604052809291908181526020018280546114c790614e3c565b80156115145780601f106114e957610100808354040283529160200191611514565b820191906000526020600020905b8154815290600101906020018083116114f757829003601f168201915b5050505050905090565b600d5481565b60006115e76115316122a3565b846115e285604051806060016040528060258152602001615ef2602591396004600061155b6122a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ce49092919063ffffffff16565b6122ab565b6001905092915050565b60006116056115fe6122a3565b8484612652565b6001905092915050565b60008060039050600061162182611449565b905083816003811061163657611635614ffd565b5b602002015160ff1692505050919050565b61164f6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490615375565b60405180910390fd5b61179c30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546122ab565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d91906153aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da91906153aa565b6040518363ffffffff1660e01b81526004016118f79291906153d7565b6020604051808303816000875af1158015611916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193a91906153aa565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306119c330611284565b60008030426040518863ffffffff1660e01b81526004016119e99695949392919061543b565b60606040518083038185885af1158015611a07573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a2c919061549c565b505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ace929190614de4565b6020604051808303816000875af1158015611aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b119190615166565b5042600e81905550611b2f6203f48042612e8890919063ffffffff16565b600d81905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd413329836040518263ffffffff1660e01b8152600401611b949190614aea565b602060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd59190615166565b9050919050565b600b5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c716122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614fdd565b60405180910390fd5b6000479050611d0b611420565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d50573d6000803e3d6000fd5b5050565b611d5c6122a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90615561565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60118060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6001600a60146101000a81548160ff0219169083151502179055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fbf9190614aea565b602060405180830381865afa158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120009190615124565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612081929190614de4565b6020604051808303816000875af11580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190615166565b5060006120df6013600501548361311a90919063ffffffff16565b905061210d81600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612d48565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663acdf4f186040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561217757600080fd5b505af115801561218b573d6000803e3d6000fd5b5050505060006121bc600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611284565b9050600081111561227b576121f3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612ee6565b61220881600b54612e8890919063ffffffff16565b600b8190555061223961222a603c60136004015461316490919063ffffffff16565b42612e8890919063ffffffff16565b600e819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81600e54604051612272929190615581565b60405180910390a15b6122836131de565b5050506000600a60146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361231a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123119061561c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612380906156ae565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124679190614851565b60405180910390a3505050565b61247d816132f6565b15801561252a5750601360060154601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016124e69190614aea565b602060405180830381865afa158015612503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125279190615124565b10155b156125c157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a3b0a4f826040518263ffffffff1660e01b815260040161258a9190614aea565b600060405180830381600087803b1580156125a457600080fd5b505af11580156125b8573d6000803e3d6000fd5b5050505061264f565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161261c9190614aea565b600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b505050505b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b890615740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612727906157d2565b60405180910390fd5b60008111612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90615864565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128195750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128585750612828611420565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128975750612867611420565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905060006128a3611420565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561291157506128e1611420565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561294957503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156129a35750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156129fd5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612cd0576000612a1f84612a1187611284565b612e8890919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ae357601360000154811115612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab5906158f6565b60405180910390fd5b6000612ace601360020154613341565b9050808210612ae157612ae086612474565b5b505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612b8f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612bdd57601360000154811115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906158f6565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c885750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612cce5760019150600e544210158015612cb25750601360090160009054906101000a900460ff165b15612cc457612cbf611f47565b612ccd565b612ccc613584565b5b5b505b612cdd85858585856135dd565b5050505050565b6000838311158290612d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d239190614736565b60405180910390fd5b5060008385612d3b9190615916565b9050809150509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663baa2abde600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1791906153aa565b308560018087426040518863ffffffff1660e01b8152600401612e409796959493929190615985565b60408051808303816000875af1158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8291906159f4565b50505050565b6000808284612e979190615a34565b905083811015612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed390615ab4565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c90615b46565b60405180910390fd5b612f6a8160095461394690919063ffffffff16565b600981905550612fc281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461394690919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130639190614851565b60405180910390a35050565b60005b8383905081101561311457600084848381811061309257613091614ffd565b5b90506020020160208101906130a79190614bf2565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061310c9061505b565b915050613072565b50505050565b600061315c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613990565b905092915050565b600080830361317657600090506131d8565b600082846131849190615225565b90508284826131939190615b66565b146131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ca90615c09565b60405180910390fd5b809150505b92915050565b600047905060008111156132f357600061320260028361311a90919063ffffffff16565b905061320d816139f3565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161326a9190614aea565b602060405180830381865afa158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190615124565b90506132b78282613c2a565b7f90496a8349529047c3ffa17bd6e613362f7c50c3ad59f2f1bf7da5766cf242fa82826040516132e8929190615581565b60405180910390a150505b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561333857506000801b8214155b92505050919050565b600080600267ffffffffffffffff81111561335f5761335e614c1f565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342191906153aa565b8160008151811061343557613434614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061348457613483614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b815260040161351b929190615ce7565b600060405180830381865afa158015613538573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906135619190615dda565b60018151811061357457613573614ffd565b5b6020026020010151915050919050565b600061358f30611284565b905060008111156135da5760006135aa601360010154613341565b90508082101580156135c95750600a60149054906101000a900460ff16155b156135d8576135d781613ded565b5b505b50565b600081613658576136536013600701600380602002604051908101604052809291908260038015613649576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116136125790505b505050505061160f565b6136c8565b6136c760136008016003806020026040519081016040528092919082600380156136bd576020028201916000905b82829054906101000a900460ff1660ff16815260200190600101906020826000010492830192600103820291508084116136865790505b505050505061160f565b5b90506000836136d85760006136ff565b6136fe60646136f0848861316490919063ffffffff16565b61311a90919063ffffffff16565b5b90506000613716828761394690919063ffffffff16565b905061376a86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461394690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ff81600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061389482600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e8890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139349190614851565b60405180910390a35050505050505050565b600061398883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ce4565b905092915050565b600080831182906139d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ce9190614736565b60405180910390fd5b50600083856139e69190615b66565b9050809150509392505050565b6000600267ffffffffffffffff811115613a1057613a0f614c1f565b5b604051908082528060200260200182016040528015613a3e5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad291906153aa565b81600081518110613ae657613ae5614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613b5757613b56614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401613bf49493929190615e23565b6000604051808303818588803b158015613c0d57600080fd5b505af1158015613c21573d6000803e3d6000fd5b50505050505050565b613c5730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122ab565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613cd6929190614de4565b6020604051808303816000875af1158015613cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d199190615166565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460008030426040518863ffffffff1660e01b8152600401613da39695949392919061543b565b60606040518083038185885af1158015613dc1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613de6919061549c565b5050505050565b6000600267ffffffffffffffff811115613e0a57613e09614c1f565b5b604051908082528060200260200182016040528015613e385781602001602082028036833780820191505090505b5090503081600081518110613e5057613e4f614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1b91906153aa565b81600181518110613f2f57613f2e614ffd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f9630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122ab565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ffa959493929190615e6f565b600060405180830381600087803b15801561401457600080fd5b505af1158015614028573d6000803e3d6000fd5b505050506000479050600061405e60646140506013600301548561316490919063ffffffff16565b61311a90919063ffffffff16565b90506000614075828461394690919063ffffffff16565b90506000614081614293565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614232578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156140fd573d6000803e3d6000fd5b5080601160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160116001018190555061416182600c54612e8890919063ffffffff16565b600c81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b81526004016141c29190614aea565b600060405180830381600087803b1580156141dc57600080fd5b505af11580156141f0573d6000803e3d6000fd5b505050507f7e2ca3905e2a3f4806a624223ea6cdcd30dad54d82e68b44481a5e00f322efc78183604051614225929190614de4565b60405180910390a1614283565b6000601160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006011600101819055505b61428b6131de565b505050505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143279190615124565b9050600181111561453157600061433d82611449565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b815260040161439c9190614851565b602060405180830381865afa1580156143b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143dd91906153aa565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161443c9190614aea565b602060405180830381865afa158015614459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061447d9190615124565b905060136006015481106144975781945050505050614537565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016144f29190614aea565b600060405180830381600087803b15801561450c57600080fd5b505af1158015614520573d6000803e3d6000fd5b505050506000945050505050614537565b60009150505b90565b826003601f016020900481019282156145c65791602002820160005b8382111561459757833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302614556565b80156145c45782816101000a81549060ff0219169055600101602081600001049283019260010302614597565b505b5090506145d391906145d7565b5090565b5b808211156145f05760008160009055506001016145d8565b5090565b6000819050919050565b614607816145f4565b82525050565b60008115159050919050565b6146228161460d565b82525050565b60006101008201905061463e600083018b6145fe565b61464b602083018a6145fe565b61465860408301896145fe565b61466560608301886145fe565b61467260808301876145fe565b61467f60a08301866145fe565b61468c60c08301856145fe565b61469960e0830184614619565b9998505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146e05780820151818401526020810190506146c5565b60008484015250505050565b6000601f19601f8301169050919050565b6000614708826146a6565b61471281856146b1565b93506147228185602086016146c2565b61472b816146ec565b840191505092915050565b6000602082019050818103600083015261475081846146fd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147978261476c565b9050919050565b6147a78161478c565b81146147b257600080fd5b50565b6000813590506147c48161479e565b92915050565b6147d3816145f4565b81146147de57600080fd5b50565b6000813590506147f0816147ca565b92915050565b6000806040838503121561480d5761480c614762565b5b600061481b858286016147b5565b925050602061482c858286016147e1565b9150509250929050565b600060208201905061484b6000830184614619565b92915050565b600060208201905061486660008301846145fe565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126148915761489061486c565b5b8235905067ffffffffffffffff8111156148ae576148ad614871565b5b6020830191508360208202830111156148ca576148c9614876565b5b9250929050565b600080602083850312156148e8576148e7614762565b5b600083013567ffffffffffffffff81111561490657614905614767565b5b6149128582860161487b565b92509250509250929050565b60008060006060848603121561493757614936614762565b5b6000614945868287016147b5565b9350506020614956868287016147b5565b9250506040614967868287016147e1565b9150509250925092565b6000819050919050565b600061499661499161498c8461476c565b614971565b61476c565b9050919050565b60006149a88261497b565b9050919050565b60006149ba8261499d565b9050919050565b6149ca816149af565b82525050565b60006020820190506149e560008301846149c1565b92915050565b600060208284031215614a0157614a00614762565b5b6000614a0f848285016147e1565b91505092915050565b600060ff82169050919050565b614a2e81614a18565b82525050565b6000602082019050614a496000830184614a25565b92915050565b614a588161460d565b8114614a6357600080fd5b50565b600081359050614a7581614a4f565b92915050565b600080600060408486031215614a9457614a93614762565b5b600084013567ffffffffffffffff811115614ab257614ab1614767565b5b614abe8682870161487b565b93509350506020614ad186828701614a66565b9150509250925092565b614ae48161478c565b82525050565b6000602082019050614aff6000830184614adb565b92915050565b600081905082602060030282011115614b2157614b20614876565b5b92915050565b60008060008060008060008060006101a08a8c031215614b4a57614b49614762565b5b6000614b588c828d016147e1565b9950506020614b698c828d016147e1565b9850506040614b7a8c828d016147e1565b9750506060614b8b8c828d016147e1565b9650506080614b9c8c828d016147e1565b95505060a0614bad8c828d016147e1565b94505060c0614bbe8c828d01614b05565b935050610120614bd08c828d01614b05565b925050610180614be28c828d01614a66565b9150509295985092959850929598565b600060208284031215614c0857614c07614762565b5b6000614c16848285016147b5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614c57826146ec565b810181811067ffffffffffffffff82111715614c7657614c75614c1f565b5b80604052505050565b6000614c89614758565b9050614c958282614c4e565b919050565b600067ffffffffffffffff821115614cb557614cb4614c1f565b5b602082029050919050565b614cc981614a18565b8114614cd457600080fd5b50565b600081359050614ce681614cc0565b92915050565b6000614cff614cfa84614c9a565b614c7f565b90508060208402830185811115614d1957614d18614876565b5b835b81811015614d425780614d2e8882614cd7565b845260208401935050602081019050614d1b565b5050509392505050565b600082601f830112614d6157614d6061486c565b5b6003614d6e848285614cec565b91505092915050565b600060608284031215614d8d57614d8c614762565b5b6000614d9b84828501614d4c565b91505092915050565b60008060408385031215614dbb57614dba614762565b5b6000614dc9858286016147b5565b9250506020614dda858286016147b5565b9150509250929050565b6000604082019050614df96000830185614adb565b614e0660208301846145fe565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e5457607f821691505b602082108103614e6757614e66614e0d565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614ec96029836146b1565b9150614ed482614e6d565b604082019050919050565b60006020820190508181036000830152614ef881614ebc565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614f5b6024836146b1565b9150614f6682614eff565b604082019050919050565b60006020820190508181036000830152614f8a81614f4e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc76020836146b1565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615066826145f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150985761509761502c565b5b600182019050919050565b7f4c69717569646974792069732063757272656e746c79206c6f636b6564000000600082015250565b60006150d9601d836146b1565b91506150e4826150a3565b602082019050919050565b60006020820190508181036000830152615108816150cc565b9050919050565b60008151905061511e816147ca565b92915050565b60006020828403121561513a57615139614762565b5b60006151488482850161510f565b91505092915050565b60008151905061516081614a4f565b92915050565b60006020828403121561517c5761517b614762565b5b600061518a84828501615151565b91505092915050565b7f4e6577206c6f636b2064617465206d757374206265206772656174657220746860008201527f616e206578697374696e67206c6f636b20646174650000000000000000000000602082015250565b60006151ef6035836146b1565b91506151fa82615193565b604082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b6000615230826145f4565b915061523b836145f4565b9250828202615249816145f4565b915082820484148315176152605761525f61502c565b5b5092915050565b6000819050919050565b61528261527d826145f4565b615267565b82525050565b60006152948284615271565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152dd826145f4565b91506152e8836145f4565b9250826152f8576152f76152a3565b5b828206905092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061535f6022836146b1565b915061536a82615303565b604082019050919050565b6000602082019050818103600083015261538e81615352565b9050919050565b6000815190506153a48161479e565b92915050565b6000602082840312156153c0576153bf614762565b5b60006153ce84828501615395565b91505092915050565b60006040820190506153ec6000830185614adb565b6153f96020830184614adb565b9392505050565b6000819050919050565b600061542561542061541b84615400565b614971565b6145f4565b9050919050565b6154358161540a565b82525050565b600060c0820190506154506000830189614adb565b61545d60208301886145fe565b61546a604083018761542c565b615477606083018661542c565b6154846080830185614adb565b61549160a08301846145fe565b979650505050505050565b6000806000606084860312156154b5576154b4614762565b5b60006154c38682870161510f565b93505060206154d48682870161510f565b92505060406154e58682870161510f565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061554b6026836146b1565b9150615556826154ef565b604082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b600060408201905061559660008301856145fe565b6155a360208301846145fe565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156066024836146b1565b9150615611826155aa565b604082019050919050565b60006020820190508181036000830152615635816155f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156986022836146b1565b91506156a38261563c565b604082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061572a6025836146b1565b9150615735826156ce565b604082019050919050565b600060208201905081810360008301526157598161571d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157bc6023836146b1565b91506157c782615760565b604082019050919050565b600060208201905081810360008301526157eb816157af565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061584e6029836146b1565b9150615859826157f2565b604082019050919050565b6000602082019050818103600083015261587d81615841565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006158e06025836146b1565b91506158eb82615884565b604082019050919050565b6000602082019050818103600083015261590f816158d3565b9050919050565b6000615921826145f4565b915061592c836145f4565b92508282039050818111156159445761594361502c565b5b92915050565b6000819050919050565b600061596f61596a6159658461594a565b614971565b6145f4565b9050919050565b61597f81615954565b82525050565b600060e08201905061599a600083018a614adb565b6159a76020830189614adb565b6159b460408301886145fe565b6159c16060830187615976565b6159ce6080830186615976565b6159db60a0830185614adb565b6159e860c08301846145fe565b98975050505050505050565b60008060408385031215615a0b57615a0a614762565b5b6000615a198582860161510f565b9250506020615a2a8582860161510f565b9150509250929050565b6000615a3f826145f4565b9150615a4a836145f4565b9250828201905080821115615a6257615a6161502c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a9e601b836146b1565b9150615aa982615a68565b602082019050919050565b60006020820190508181036000830152615acd81615a91565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615b306021836146b1565b9150615b3b82615ad4565b604082019050919050565b60006020820190508181036000830152615b5f81615b23565b9050919050565b6000615b71826145f4565b9150615b7c836145f4565b925082615b8c57615b8b6152a3565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615bf36021836146b1565b9150615bfe82615b97565b604082019050919050565b60006020820190508181036000830152615c2281615be6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c5e8161478c565b82525050565b6000615c708383615c55565b60208301905092915050565b6000602082019050919050565b6000615c9482615c29565b615c9e8185615c34565b9350615ca983615c45565b8060005b83811015615cda578151615cc18882615c64565b9750615ccc83615c7c565b925050600181019050615cad565b5085935050505092915050565b6000604082019050615cfc60008301856145fe565b8181036020830152615d0e8184615c89565b90509392505050565b600067ffffffffffffffff821115615d3257615d31614c1f565b5b602082029050602081019050919050565b6000615d56615d5184615d17565b614c7f565b90508083825260208201905060208402830185811115615d7957615d78614876565b5b835b81811015615da25780615d8e888261510f565b845260208401935050602081019050615d7b565b5050509392505050565b600082601f830112615dc157615dc061486c565b5b8151615dd1848260208601615d43565b91505092915050565b600060208284031215615df057615def614762565b5b600082015167ffffffffffffffff811115615e0e57615e0d614767565b5b615e1a84828501615dac565b91505092915050565b6000608082019050615e38600083018761542c565b8181036020830152615e4a8186615c89565b9050615e596040830185614adb565b615e6660608301846145fe565b95945050505050565b600060a082019050615e8460008301886145fe565b615e91602083018761542c565b8181036040830152615ea38186615c89565b9050615eb26060830185614adb565b615ebf60808301846145fe565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f7ac2050fd0ff4225e2d27de2e8f3e3e0426c0fd81284c5567974fee1a83ff864736f6c63430008110033

Deployed Bytecode Sourcemap

8882:18192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10764:760;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11825:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16771:277;;;;;;;;;;;;;:::i;:::-;;12658:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12102:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22067:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12827:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18255:344;;;;;;;;;;;;;:::i;:::-;;10533:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17056:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12011:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13148:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10394:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15533:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14547:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10485:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9840:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15411:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13651:888;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12205:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:148;;;;;;;;;;;;;:::i;:::-;;6292:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16562:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11916:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10443:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13374:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12332:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16349:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17289:785;;;;;;;;;;;;;:::i;:::-;;15266:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10349:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12507:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26909:160;;;;;;;;;;;;;:::i;:::-;;6662:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10701:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10764:760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11825:83::-;11862:13;11895:5;11888:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11825:83;:::o;16771:277::-;16840:26;;16821:15;:45;;16813:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;16932:13;:27;;;;;;;;;;;;16931:28;16923:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;17011:29;:27;:29::i;:::-;16771:277::o;12658:161::-;12733:4;12750:39;12759:12;:10;:12::i;:::-;12773:7;12782:6;12750:8;:39::i;:::-;12807:4;12800:11;;12658:161;;;;:::o;12102:95::-;12155:7;12182;;12175:14;;12102:95;:::o;22067:207::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22168:9:::1;22164:103;22186:7;;:14;;22182:1;:18;22164:103;;;22222:34;22245:7;;22253:1;22245:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22222:22;:34::i;:::-;22202:3;;;;;:::i;:::-;;;;22164:103;;;;22067:207:::0;;:::o;12827:313::-;12925:4;12942:36;12952:6;12960:9;12971:6;12942:9;:36::i;:::-;12989:121;12998:6;13006:12;:10;:12::i;:::-;13020:89;13058:6;13020:89;;;;;;;;;;;;;;;;;:11;:19;13032:6;13020:19;;;;;;;;;;;;;;;:33;13040:12;:10;:12::i;:::-;13020:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12989:8;:121::i;:::-;13128:4;13121:11;;12827:313;;;;;:::o;18255:344::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18345:15:::1;18323:19;;:37;18315:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18405:14;18429:13;;;;;;;;;;;18422:31;;;18462:4;18422:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18405:63;;18486:13;;;;;;;;;;;18479:29;;;18517:15;;;;;;;;;;;18535:9;18479:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18556:35;18572:9;18583:7;:5;:7::i;:::-;18556:15;:35::i;:::-;18304:295;18255:344::o:0;10533:63::-;;;;;;;;;;;;;:::o;17056:225::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17152:19:::1;;17138:11;:33;17130:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;17262:11;17240:19;:33;;;;17056:225:::0;:::o;12011:83::-;12052:5;12077:9;;;;;;;;;;;12070:16;;12011:83;:::o;13148:218::-;13236:4;13253:83;13262:12;:10;:12::i;:::-;13276:7;13285:50;13324:10;13285:11;:25;13297:12;:10;:12::i;:::-;13285:25;;;;;;;;;;;;;;;:34;13311:7;13285:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;13253:8;:83::i;:::-;13354:4;13347:11;;13148:218;;;;:::o;10394:42::-;;;;:::o;15533:81::-;15581:25;15587:10;15599:6;15581:5;:25::i;:::-;15533:81;:::o;14547:161::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14659:41:::1;14672:9;;14683:16;14659:12;:41::i;:::-;14547:161:::0;;;:::o;10485:38::-;;;;:::o;9840:41::-;;;;;;;;;;;;;:::o;15411:114::-;15466:7;15493:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15486:31;;15411:114;:::o;13651:888::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14042:7:::1;14024:15;:25;;;;:::i;:::-;13992:13;:29;;:57;;;;14091:14;14060:13;:28;;:45;;;;14151:18;14116:13;:32;;:53;;;;14220:23;14180:13;:37;;:63;;;;14292:21;14254:13;:35;;:59;;;;14384:7;14361:20;:30;;;;:::i;:::-;14324:13;:34;;:67;;;;14426:7;14402:13;:21;;:31;;;;;;;:::i;:::-;;14469:8;14444:13;:22;;:33;;;;;;;:::i;:::-;;14518:13;14488;:27;;;:43;;;;;;;;;;;;;;;;;;13651:888:::0;;;;;;;;;:::o;12205:119::-;12271:7;12298:9;:18;12308:7;12298:18;;;;;;;;;;;;;;;;12291:25;;12205:119;;;:::o;6506:148::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6613:1:::1;6576:40;;6597:6;::::0;::::1;;;;;;;;6576:40;;;;;;;;;;;;6644:1;6627:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6506:148::o:0;6292:79::-;6330:7;6357:6;;;;;;;;;;;6350:13;;6292:79;:::o;16562:201::-;16630:4;16647:17;16720:5;16699:15;16682:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;16672:44;;;;;;16667:50;;:58;;;;:::i;:::-;16647:78;;16743:12;16736:19;;;16562:201;;;:::o;11916:87::-;11955:13;11988:7;11981:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11916:87;:::o;10443:31::-;;;;:::o;13374:269::-;13467:4;13484:129;13493:12;:10;:12::i;:::-;13507:7;13516:96;13555:15;13516:96;;;;;;;;;;;;;;;;;:11;:25;13528:12;:10;:12::i;:::-;13516:25;;;;;;;;;;;;;;;:34;13542:7;13516:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13484:8;:129::i;:::-;13631:4;13624:11;;13374:269;;;;:::o;12332:167::-;12410:4;12427:42;12437:12;:10;:12::i;:::-;12451:9;12462:6;12427:9;:42::i;:::-;12487:4;12480:11;;12332:167;;;;:::o;16349:205::-;16413:7;16433:13;16449:11;16433:27;;16471:13;16487:30;16511:5;16487:23;:30::i;:::-;16471:46;;16535:4;16540:5;16535:11;;;;;;;:::i;:::-;;;;;;16528:18;;;;;;16349:205;;;:::o;17289:785::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17377:1:::1;17352:27;;:13;;;;;;;;;;;:27;;;17344:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17428:58;17445:4;17460:15;;;;;;;;;;;17478:7;;17428:8;:58::i;:::-;17531:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17513:55;;;17577:4;17584:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17513:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17497:13;;:110;;;;;;;;;;;;;;;;;;17618:15;;;;;;;;;;;:31;;;17657:21;17702:4;17722:24;17740:4;17722:9;:24::i;:::-;17761:1;17777::::0;17801:4:::1;17821:15;17618:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17855:13;;;;;;;;;;;17848:29;;;17886:15;;;;;;;;;;;17904:14;17848:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17959:15;17930:26;:44;;;;18007:27;18027:6;18007:15;:19;;:27;;;;:::i;:::-;17985:19;:49;;;;17289:785::o:0;15266:137::-;15336:4;15360:17;;;;;;;;;;;:27;;;15388:6;15360:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15353:42;;15266:137;;;:::o;10349:38::-;;;;:::o;12507:143::-;12588:7;12615:11;:18;12627:5;12615:18;;;;;;;;;;;;;;;:27;12634:7;12615:27;;;;;;;;;;;;;;;;12608:34;;12507:143;;;;:::o;26909:160::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:18:::1;26992:21;26971:42;;27032:7;:5;:7::i;:::-;27024:25;;:37;27050:10;27024:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26960:109;26909:160::o:0;6662:244::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1:::1;6751:22;;:8;:22;;::::0;6743:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6861:8;6832:38;;6853:6;::::0;::::1;;;;;;;;6832:38;;;;;;;;;;;;6890:8;6881:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6662:244:::0;:::o;10701:56::-;;;;;;;;;;;;;;;;;;;;;;;:::o;18608:1115::-;9047:4;9028:16;;:23;;;;;;;;;;;;;;;;;;18678:14:::1;18702:13;;;;;;;;;;;18695:31;;;18735:4;18695:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18678:63;;18759:13;;;;;;;;;;;18752:29;;;18790:15;;;;;;;;;;;18808:9;18752:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18829:17;18849:49;18863:13;:34;;;18849:9;:13;;:49;;;;:::i;:::-;18829:69;;18909:51;18925:12;18947:11;;;;;;;;;;;18909:15;:51::i;:::-;19024:11;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19162:23;19188:31;19206:11;;;;;;;;;;;19188:9;:31::i;:::-;19162:57;;19252:1;19234:15;:19;19231:435;;;19340:44;19354:11;;;;;;;;;;;19368:15;19340:5;:44::i;:::-;19425;19453:15;19425:23;;:27;;:44;;;;:::i;:::-;19399:23;:70;;;;19513:64;19533:43;19573:2;19533:13;:35;;;:39;;:43;;;;:::i;:::-;19513:15;:19;;:64;;;;:::i;:::-;19484:26;:93;;;;19597:57;19610:15;19627:26;;19597:57;;;;;;;:::i;:::-;;;;;;;;19231:435;19676:39;:37;:39::i;:::-;18667:1056;;;9093:5:::0;9074:16;;:24;;;;;;;;;;;;;;;;;;18608:1115::o;2634:98::-;2687:7;2714:10;2707:17;;2634:98;:::o;20051:335::-;20161:1;20144:19;;:5;:19;;;20136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20242:1;20223:21;;:7;:21;;;20215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20324:6;20294:11;:18;20306:5;20294:18;;;;;;;;;;;;;;;:27;20313:7;20294:27;;;;;;;;;;;;;;;:36;;;;20362:7;20346:32;;20355:5;20346:32;;;20371:6;20346:32;;;;;;:::i;:::-;;;;;;;;20051:335;;;:::o;22877:299::-;22948:26;22967:6;22948:18;:26::i;:::-;22947:27;:99;;;;;23012:13;:34;;;22978:12;;;;;;;;;;;:22;;;23001:6;22978:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;22947:99;22944:225;;;23063:17;;;;;;;;;;;:21;;;23085:6;23063:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22944:225;;;23125:17;;;;;;;;;;;:24;;;23150:6;23125:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22944:225;22877:299;:::o;20394:1665::-;20498:1;20482:18;;:4;:18;;;20474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20575:1;20561:16;;:2;:16;;;20553:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20645:1;20636:6;:10;20628:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20703:13;20720:18;:24;20739:4;20720:24;;;;;;;;;;;;;;;;;;;;;;;;;20719:25;:52;;;;;20749:18;:22;20768:2;20749:22;;;;;;;;;;;;;;;;;;;;;;;;;20748:23;20719:52;:71;;;;;20783:7;:5;:7::i;:::-;20775:15;;:4;:15;;;;20719:71;:88;;;;;20800:7;:5;:7::i;:::-;20794:13;;:2;:13;;;;20719:88;20703:104;;20818:11;20859:7;:5;:7::i;:::-;20851:15;;:4;:15;;;;:32;;;;;20876:7;:5;:7::i;:::-;20870:13;;:2;:13;;;;20851:32;:57;;;;;20903:4;20887:21;;:4;:21;;;;20851:57;:101;;;;;20940:11;;;;;;;;;;;20924:28;;:4;:28;;;;20851:101;:131;;;;;20970:11;;;;;;;;;;;20956:26;;:2;:26;;;;20851:131;20848:1144;;;20999:21;21023:25;21041:6;21023:13;21033:2;21023:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;20999:49;;21075:13;;;;;;;;;;;21067:21;;:4;:21;;;21063:377;;21134:13;:29;;;21117:13;:46;;21109:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21224:19;21246:58;21271:13;:32;;;21246:24;:58::i;:::-;21224:80;;21343:11;21326:13;:28;21323:102;;21379:26;21402:2;21379:22;:26::i;:::-;21323:102;21090:350;21063:377;21466:13;;;;;;;;;;;21458:21;;:4;:21;;;;:44;;;;;21489:13;;;;;;;;;;;21483:19;;:2;:19;;;;21458:44;21454:181;;;21548:13;:29;;;21531:13;:46;;21523:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21454:181;21661:13;;;;;;;;;;;21653:21;;:4;:21;;;;:44;;;;;21684:13;;;;;;;;;;;21678:19;;:2;:19;;;21653:44;21649:330;;;21727:4;21718:13;;21772:26;;21753:15;:45;;:76;;;;;21802:13;:27;;;;;;;;;;;;21753:76;21750:214;;;21854:29;:27;:29::i;:::-;21750:214;;;21932:12;:10;:12::i;:::-;21750:214;21649:330;20984:1008;20848:1144;22002:49;22016:4;22022:2;22026:6;22034:8;22044:6;22002:13;:49::i;:::-;20463:1596;;20394:1665;;;:::o;1106:192::-;1192:7;1225:1;1220;:6;;1228:12;1212:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1252:9;1268:1;1264;:5;;;;:::i;:::-;1252:17;;1289:1;1282:8;;;1106:192;;;;;:::o;19731:312::-;19816:15;;;;;;;;;;;:31;;;19862:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19907:4;19927:11;19953:1;19969;19985:9;20009:15;19816:219;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19731:312;;:::o;773:181::-;831:7;851:9;867:1;863;:5;;;;:::i;:::-;851:17;;892:1;887;:6;;879:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;945:1;938:8;;;773:181;;;;:::o;14716:294::-;14810:1;14791:21;;:7;:21;;;14783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14871:18;14883:5;14871:7;;:11;;:18;;;;:::i;:::-;14861:7;:28;;;;14921:29;14944:5;14921:9;:18;14931:7;14921:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;14900:9;:18;14910:7;14900:18;;;;;;;;;;;;;;;:50;;;;14992:1;14966:36;;14975:7;14966:36;;;14996:5;14966:36;;;;;;:::i;:::-;;;;;;;;14716:294;;:::o;15022:236::-;15109:9;15104:147;15128:9;;:16;;15124:1;:20;15104:147;;;15166:12;15181:9;;15191:1;15181:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15166:27;;15235:4;15208:18;:24;15227:4;15208:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;15151:100;15146:3;;;;;:::i;:::-;;;;15104:147;;;;15022:236;;;:::o;1785:132::-;1843:7;1870:39;1874:1;1877;1870:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1863:46;;1785:132;;;;:::o;1306:471::-;1364:7;1614:1;1609;:6;1605:47;;1639:1;1632:8;;;;1605:47;1664:9;1680:1;1676;:5;;;;:::i;:::-;1664:17;;1709:1;1704;1700;:5;;;;:::i;:::-;:10;1692:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1768:1;1761:8;;;1306:471;;;;;:::o;25170:459::-;25238:18;25259:21;25238:42;;25307:1;25294:10;:14;25291:331;;;25325:19;25347:17;25362:1;25347:10;:14;;:17;;;;:::i;:::-;25325:39;;25379:30;25397:11;25379:17;:30::i;:::-;25424:19;25446:12;;;;;;;;;;;:22;;;25477:4;25446:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25424:59;;25498:45;25518:11;25531;25498:19;:45::i;:::-;25563:47;25585:11;25598;25563:47;;;;;;;:::i;:::-;;;;;;;;25310:312;;25291:331;25227:402;25170:459::o;3014:617::-;3074:4;3336:16;3363:19;3385:66;3363:88;;;;3553:7;3541:20;3529:32;;3592:11;3580:8;:23;;:42;;;;;3619:3;3607:15;;:8;:15;;3580:42;3572:51;;;;3014:617;;;:::o;26579:285::-;26651:7;26672:21;26710:1;26696:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26672:40;;26733:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26723:4;26728:1;26723:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26784:4;26766;26771:1;26766:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26807:15;;;;;;;;;;;:29;;;26837:9;26848:4;26807:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26854:1;26807:49;;;;;;;;:::i;:::-;;;;;;;;26800:56;;;26579:285;;;:::o;23184:387::-;23225:28;23256:24;23274:4;23256:9;:24::i;:::-;23225:55;;23318:1;23295:20;:24;23291:273;;;23336:19;23358:54;23383:13;:28;;;23358:24;:54::i;:::-;23336:76;;23455:11;23431:20;:35;;:56;;;;;23471:16;;;;;;;;;;;23470:17;23431:56;23427:126;;;23508:29;23525:11;23508:16;:29::i;:::-;23427:126;23321:243;23291:273;23214:357;23184:387::o;22282:587::-;22394:14;22411:6;:83;;22459:35;22472:13;:21;;22459:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;22411:83;;;22420:36;22433:13;:22;;22420:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:36::i;:::-;22411:83;22394:100;;22505:17;22525:8;:42;;22566:1;22525:42;;;22536:27;22559:3;22536:18;22547:6;22536;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;22525:42;22505:62;;22580:22;22605:21;22616:9;22605:6;:10;;:21;;;;:::i;:::-;22580:46;;22655:27;22675:6;22655:9;:15;22665:4;22655:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;22637:9;:15;22647:4;22637:15;;;;;;;;;;;;;;;:45;;;;22709:33;22727:14;22709:9;:13;22719:2;22709:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;22693:9;:13;22703:2;22693:13;;;;;;;;;;;;;;;:49;;;;22780:39;22809:9;22780;:24;22798:4;22780:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22753:9;:24;22771:4;22753:24;;;;;;;;;;;;;;;:66;;;;22850:2;22835:26;;22844:4;22835:26;;;22854:6;22835:26;;;;;;:::i;:::-;;;;;;;;22383:486;;;22282:587;;;;;:::o;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1040:50;;962:136;;;;:::o;1925:278::-;2011:7;2043:1;2039;:5;2046:12;2031:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2070:9;2086:1;2082;:5;;;;:::i;:::-;2070:17;;2194:1;2187:8;;;1925:278;;;;;:::o;26193:378::-;26255:21;26293:1;26279:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26255:40;;26316:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26306:4;26311:1;26306:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26367:12;;;;;;;;;;;26349:4;26354:1;26349:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;26391:15;;;;;;;;;;;:66;;;26475:9;26496:1;26508:4;26531;26547:15;26391:172;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26244:327;26193:378;:::o;25637:548::-;25792:62;25809:4;25824:15;;;;;;;;;;;25842:11;25792:8;:62::i;:::-;25865:12;;;;;;;;;;;:20;;;25894:15;;;;;;;;;;;25912:11;25865:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25965:15;;;;;;;;;;;:31;;;26004:9;26037:12;;;;;;;;;;;26065:11;26091:1;26107;26131:4;26151:15;25965:212;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25637:548;;:::o;23579:1583::-;23705:21;23743:1;23729:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23705:40;;23774:4;23756;23761:1;23756:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23800:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23790:4;23795:1;23790:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23833:62;23850:4;23865:15;;;;;;;;;;;23883:11;23833:8;:62::i;:::-;23906:15;;;;;;;;;;;:66;;;23987:11;24013:1;24029:4;24056;24076:15;23906:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24119:18;24140:21;24119:42;;24172:15;24190:62;24248:3;24190:53;24205:13;:37;;;24190:10;:14;;:53;;;;:::i;:::-;:57;;:62;;;;:::i;:::-;24172:80;;24263:16;24282:23;24297:7;24282:10;:14;;:23;;;;:::i;:::-;24263:42;;24316:20;24339;:18;:20::i;:::-;24316:43;;24644:1;24620:26;;:12;:26;;;24617:488;;24671:12;24663:30;;:40;24694:8;24663:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24738:12;24718:10;:17;;;:32;;;;;;;;;;;;;;;;;;24788:8;24765:10;:20;;:31;;;;24841:41;24873:8;24841:27;;:31;;:41;;;;:::i;:::-;24811:27;:71;;;;24897:17;;;;;;;;;;;:24;;;24922:12;24897:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24955:36;24968:12;24982:8;24955:36;;;;;;;:::i;:::-;;;;;;;;24617:488;;;25052:1;25024:10;:17;;;:30;;;;;;;;;;;;;;;;;;25092:1;25069:10;:20;;:24;;;;24617:488;25115:39;:37;:39::i;:::-;23634:1528;;;;;23579:1583;:::o;15622:715::-;15668:7;15688:20;15711:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15688:47;;15851:1;15836:12;:16;15833:468;;;15870:19;15892:37;15916:12;15892:23;:37::i;:::-;15870:59;;15944:14;15961:17;;;;;;;;;;;:31;;;15993:11;15961:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15944:61;;16020:15;16038:12;;;;;;;;;;;:22;;;16061:6;16038:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16020:48;;16097:13;:34;;;16086:7;:45;16083:207;;16159:6;16152:13;;;;;;;;16083:207;16206:17;;;;;;;;;;;:24;;;16231:6;16206:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16272:1;16257:17;;;;;;;;15833:468;16327:1;16312:17;;;15622:715;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:90::-;248:7;291:5;284:13;277:21;266:32;;214:90;;;:::o;310:109::-;391:21;406:5;391:21;:::i;:::-;386:3;379:34;310:109;;:::o;425:985::-;708:4;746:3;735:9;731:19;723:27;;760:71;828:1;817:9;813:17;804:6;760:71;:::i;:::-;841:72;909:2;898:9;894:18;885:6;841:72;:::i;:::-;923;991:2;980:9;976:18;967:6;923:72;:::i;:::-;1005;1073:2;1062:9;1058:18;1049:6;1005:72;:::i;:::-;1087:73;1155:3;1144:9;1140:19;1131:6;1087:73;:::i;:::-;1170;1238:3;1227:9;1223:19;1214:6;1170:73;:::i;:::-;1253;1321:3;1310:9;1306:19;1297:6;1253:73;:::i;:::-;1336:67;1398:3;1387:9;1383:19;1374:6;1336:67;:::i;:::-;425:985;;;;;;;;;;;:::o;1416:99::-;1468:6;1502:5;1496:12;1486:22;;1416:99;;;:::o;1521:169::-;1605:11;1639:6;1634:3;1627:19;1679:4;1674:3;1670:14;1655:29;;1521:169;;;;:::o;1696:246::-;1777:1;1787:113;1801:6;1798:1;1795:13;1787:113;;;1886:1;1881:3;1877:11;1871:18;1867:1;1862:3;1858:11;1851:39;1823:2;1820:1;1816:10;1811:15;;1787:113;;;1934:1;1925:6;1920:3;1916:16;1909:27;1758:184;1696:246;;;:::o;1948:102::-;1989:6;2040:2;2036:7;2031:2;2024:5;2020:14;2016:28;2006:38;;1948:102;;;:::o;2056:377::-;2144:3;2172:39;2205:5;2172:39;:::i;:::-;2227:71;2291:6;2286:3;2227:71;:::i;:::-;2220:78;;2307:65;2365:6;2360:3;2353:4;2346:5;2342:16;2307:65;:::i;:::-;2397:29;2419:6;2397:29;:::i;:::-;2392:3;2388:39;2381:46;;2148:285;2056:377;;;;:::o;2439:313::-;2552:4;2590:2;2579:9;2575:18;2567:26;;2639:9;2633:4;2629:20;2625:1;2614:9;2610:17;2603:47;2667:78;2740:4;2731:6;2667:78;:::i;:::-;2659:86;;2439:313;;;;:::o;2758:75::-;2791:6;2824:2;2818:9;2808:19;;2758:75;:::o;2839:117::-;2948:1;2945;2938:12;2962:117;3071:1;3068;3061:12;3085:126;3122:7;3162:42;3155:5;3151:54;3140:65;;3085:126;;;:::o;3217:96::-;3254:7;3283:24;3301:5;3283:24;:::i;:::-;3272:35;;3217:96;;;:::o;3319:122::-;3392:24;3410:5;3392:24;:::i;:::-;3385:5;3382:35;3372:63;;3431:1;3428;3421:12;3372:63;3319:122;:::o;3447:139::-;3493:5;3531:6;3518:20;3509:29;;3547:33;3574:5;3547:33;:::i;:::-;3447:139;;;;:::o;3592:122::-;3665:24;3683:5;3665:24;:::i;:::-;3658:5;3655:35;3645:63;;3704:1;3701;3694:12;3645:63;3592:122;:::o;3720:139::-;3766:5;3804:6;3791:20;3782:29;;3820:33;3847:5;3820:33;:::i;:::-;3720:139;;;;:::o;3865:474::-;3933:6;3941;3990:2;3978:9;3969:7;3965:23;3961:32;3958:119;;;3996:79;;:::i;:::-;3958:119;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4243:2;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4214:118;3865:474;;;;;:::o;4345:210::-;4432:4;4470:2;4459:9;4455:18;4447:26;;4483:65;4545:1;4534:9;4530:17;4521:6;4483:65;:::i;:::-;4345:210;;;;:::o;4561:222::-;4654:4;4692:2;4681:9;4677:18;4669:26;;4705:71;4773:1;4762:9;4758:17;4749:6;4705:71;:::i;:::-;4561:222;;;;:::o;4789:117::-;4898:1;4895;4888:12;4912:117;5021:1;5018;5011:12;5035:117;5144:1;5141;5134:12;5175:568;5248:8;5258:6;5308:3;5301:4;5293:6;5289:17;5285:27;5275:122;;5316:79;;:::i;:::-;5275:122;5429:6;5416:20;5406:30;;5459:18;5451:6;5448:30;5445:117;;;5481:79;;:::i;:::-;5445:117;5595:4;5587:6;5583:17;5571:29;;5649:3;5641:4;5633:6;5629:17;5619:8;5615:32;5612:41;5609:128;;;5656:79;;:::i;:::-;5609:128;5175:568;;;;;:::o;5749:559::-;5835:6;5843;5892:2;5880:9;5871:7;5867:23;5863:32;5860:119;;;5898:79;;:::i;:::-;5860:119;6046:1;6035:9;6031:17;6018:31;6076:18;6068:6;6065:30;6062:117;;;6098:79;;:::i;:::-;6062:117;6211:80;6283:7;6274:6;6263:9;6259:22;6211:80;:::i;:::-;6193:98;;;;5989:312;5749:559;;;;;:::o;6314:619::-;6391:6;6399;6407;6456:2;6444:9;6435:7;6431:23;6427:32;6424:119;;;6462:79;;:::i;:::-;6424:119;6582:1;6607:53;6652:7;6643:6;6632:9;6628:22;6607:53;:::i;:::-;6597:63;;6553:117;6709:2;6735:53;6780:7;6771:6;6760:9;6756:22;6735:53;:::i;:::-;6725:63;;6680:118;6837:2;6863:53;6908:7;6899:6;6888:9;6884:22;6863:53;:::i;:::-;6853:63;;6808:118;6314:619;;;;;:::o;6939:60::-;6967:3;6988:5;6981:12;;6939:60;;;:::o;7005:142::-;7055:9;7088:53;7106:34;7115:24;7133:5;7115:24;:::i;:::-;7106:34;:::i;:::-;7088:53;:::i;:::-;7075:66;;7005:142;;;:::o;7153:134::-;7211:9;7244:37;7275:5;7244:37;:::i;:::-;7231:50;;7153:134;;;:::o;7293:162::-;7371:9;7404:45;7443:5;7404:45;:::i;:::-;7391:58;;7293:162;;;:::o;7461:187::-;7576:65;7635:5;7576:65;:::i;:::-;7571:3;7564:78;7461:187;;:::o;7654:278::-;7775:4;7813:2;7802:9;7798:18;7790:26;;7826:99;7922:1;7911:9;7907:17;7898:6;7826:99;:::i;:::-;7654:278;;;;:::o;7938:329::-;7997:6;8046:2;8034:9;8025:7;8021:23;8017:32;8014:119;;;8052:79;;:::i;:::-;8014:119;8172:1;8197:53;8242:7;8233:6;8222:9;8218:22;8197:53;:::i;:::-;8187:63;;8143:117;7938:329;;;;:::o;8273:86::-;8308:7;8348:4;8341:5;8337:16;8326:27;;8273:86;;;:::o;8365:112::-;8448:22;8464:5;8448:22;:::i;:::-;8443:3;8436:35;8365:112;;:::o;8483:214::-;8572:4;8610:2;8599:9;8595:18;8587:26;;8623:67;8687:1;8676:9;8672:17;8663:6;8623:67;:::i;:::-;8483:214;;;;:::o;8703:116::-;8773:21;8788:5;8773:21;:::i;:::-;8766:5;8763:32;8753:60;;8809:1;8806;8799:12;8753:60;8703:116;:::o;8825:133::-;8868:5;8906:6;8893:20;8884:29;;8922:30;8946:5;8922:30;:::i;:::-;8825:133;;;;:::o;8964:698::-;9056:6;9064;9072;9121:2;9109:9;9100:7;9096:23;9092:32;9089:119;;;9127:79;;:::i;:::-;9089:119;9275:1;9264:9;9260:17;9247:31;9305:18;9297:6;9294:30;9291:117;;;9327:79;;:::i;:::-;9291:117;9440:80;9512:7;9503:6;9492:9;9488:22;9440:80;:::i;:::-;9422:98;;;;9218:312;9569:2;9595:50;9637:7;9628:6;9617:9;9613:22;9595:50;:::i;:::-;9585:60;;9540:115;8964:698;;;;;:::o;9668:118::-;9755:24;9773:5;9755:24;:::i;:::-;9750:3;9743:37;9668:118;;:::o;9792:222::-;9885:4;9923:2;9912:9;9908:18;9900:26;;9936:71;10004:1;9993:9;9989:17;9980:6;9936:71;:::i;:::-;9792:222;;;;:::o;10036:247::-;10105:8;10136:6;10124:18;;10189:3;10181:4;10175;10171:15;10161:8;10157:30;10154:39;10151:126;;;10196:79;;:::i;:::-;10151:126;10036:247;;;;:::o;10289:1581::-;10463:6;10471;10479;10487;10495;10503;10511;10519;10527;10576:3;10564:9;10555:7;10551:23;10547:33;10544:120;;;10583:79;;:::i;:::-;10544:120;10703:1;10728:53;10773:7;10764:6;10753:9;10749:22;10728:53;:::i;:::-;10718:63;;10674:117;10830:2;10856:53;10901:7;10892:6;10881:9;10877:22;10856:53;:::i;:::-;10846:63;;10801:118;10958:2;10984:53;11029:7;11020:6;11009:9;11005:22;10984:53;:::i;:::-;10974:63;;10929:118;11086:2;11112:53;11157:7;11148:6;11137:9;11133:22;11112:53;:::i;:::-;11102:63;;11057:118;11214:3;11241:53;11286:7;11277:6;11266:9;11262:22;11241:53;:::i;:::-;11231:63;;11185:119;11343:3;11370:53;11415:7;11406:6;11395:9;11391:22;11370:53;:::i;:::-;11360:63;;11314:119;11472:3;11499:76;11567:7;11558:6;11547:9;11543:22;11499:76;:::i;:::-;11489:86;;11443:142;11624:3;11651:76;11719:7;11710:6;11699:9;11695:22;11651:76;:::i;:::-;11641:86;;11595:142;11776:3;11803:50;11845:7;11836:6;11825:9;11821:22;11803:50;:::i;:::-;11793:60;;11747:116;10289:1581;;;;;;;;;;;:::o;11876:329::-;11935:6;11984:2;11972:9;11963:7;11959:23;11955:32;11952:119;;;11990:79;;:::i;:::-;11952:119;12110:1;12135:53;12180:7;12171:6;12160:9;12156:22;12135:53;:::i;:::-;12125:63;;12081:117;11876:329;;;;:::o;12211:180::-;12259:77;12256:1;12249:88;12356:4;12353:1;12346:15;12380:4;12377:1;12370:15;12397:281;12480:27;12502:4;12480:27;:::i;:::-;12472:6;12468:40;12610:6;12598:10;12595:22;12574:18;12562:10;12559:34;12556:62;12553:88;;;12621:18;;:::i;:::-;12553:88;12661:10;12657:2;12650:22;12440:238;12397:281;;:::o;12684:129::-;12718:6;12745:20;;:::i;:::-;12735:30;;12774:33;12802:4;12794:6;12774:33;:::i;:::-;12684:129;;;:::o;12819:247::-;12892:4;12982:18;12974:6;12971:30;12968:56;;;13004:18;;:::i;:::-;12968:56;13054:4;13046:6;13042:17;13034:25;;12819:247;;;:::o;13072:118::-;13143:22;13159:5;13143:22;:::i;:::-;13136:5;13133:33;13123:61;;13180:1;13177;13170:12;13123:61;13072:118;:::o;13196:135::-;13240:5;13278:6;13265:20;13256:29;;13294:31;13319:5;13294:31;:::i;:::-;13196:135;;;;:::o;13353:637::-;13445:5;13470:77;13486:60;13539:6;13486:60;:::i;:::-;13470:77;:::i;:::-;13461:86;;13567:5;13620:4;13612:6;13608:17;13600:6;13596:30;13649:3;13641:6;13638:15;13635:122;;;13668:79;;:::i;:::-;13635:122;13783:6;13766:218;13800:6;13795:3;13792:15;13766:218;;;13875:3;13904:35;13935:3;13923:10;13904:35;:::i;:::-;13899:3;13892:48;13969:4;13964:3;13960:14;13953:21;;13842:142;13826:4;13821:3;13817:14;13810:21;;13766:218;;;13770:21;13451:539;;13353:637;;;;;:::o;14012:335::-;14079:5;14128:3;14121:4;14113:6;14109:17;14105:27;14095:122;;14136:79;;:::i;:::-;14095:122;14240:4;14262:79;14337:3;14329:6;14321;14262:79;:::i;:::-;14253:88;;14085:262;14012:335;;;;:::o;14353:371::-;14433:6;14482:2;14470:9;14461:7;14457:23;14453:32;14450:119;;;14488:79;;:::i;:::-;14450:119;14608:1;14633:74;14699:7;14690:6;14679:9;14675:22;14633:74;:::i;:::-;14623:84;;14579:138;14353:371;;;;:::o;14730:474::-;14798:6;14806;14855:2;14843:9;14834:7;14830:23;14826:32;14823:119;;;14861:79;;:::i;:::-;14823:119;14981:1;15006:53;15051:7;15042:6;15031:9;15027:22;15006:53;:::i;:::-;14996:63;;14952:117;15108:2;15134:53;15179:7;15170:6;15159:9;15155:22;15134:53;:::i;:::-;15124:63;;15079:118;14730:474;;;;;:::o;15210:332::-;15331:4;15369:2;15358:9;15354:18;15346:26;;15382:71;15450:1;15439:9;15435:17;15426:6;15382:71;:::i;:::-;15463:72;15531:2;15520:9;15516:18;15507:6;15463:72;:::i;:::-;15210:332;;;;;:::o;15548:180::-;15596:77;15593:1;15586:88;15693:4;15690:1;15683:15;15717:4;15714:1;15707:15;15734:320;15778:6;15815:1;15809:4;15805:12;15795:22;;15862:1;15856:4;15852:12;15883:18;15873:81;;15939:4;15931:6;15927:17;15917:27;;15873:81;16001:2;15993:6;15990:14;15970:18;15967:38;15964:84;;16020:18;;:::i;:::-;15964:84;15785:269;15734:320;;;:::o;16060:228::-;16200:34;16196:1;16188:6;16184:14;16177:58;16269:11;16264:2;16256:6;16252:15;16245:36;16060:228;:::o;16294:366::-;16436:3;16457:67;16521:2;16516:3;16457:67;:::i;:::-;16450:74;;16533:93;16622:3;16533:93;:::i;:::-;16651:2;16646:3;16642:12;16635:19;;16294:366;;;:::o;16666:419::-;16832:4;16870:2;16859:9;16855:18;16847:26;;16919:9;16913:4;16909:20;16905:1;16894:9;16890:17;16883:47;16947:131;17073:4;16947:131;:::i;:::-;16939:139;;16666:419;;;:::o;17091:223::-;17231:34;17227:1;17219:6;17215:14;17208:58;17300:6;17295:2;17287:6;17283:15;17276:31;17091:223;:::o;17320:366::-;17462:3;17483:67;17547:2;17542:3;17483:67;:::i;:::-;17476:74;;17559:93;17648:3;17559:93;:::i;:::-;17677:2;17672:3;17668:12;17661:19;;17320:366;;;:::o;17692:419::-;17858:4;17896:2;17885:9;17881:18;17873:26;;17945:9;17939:4;17935:20;17931:1;17920:9;17916:17;17909:47;17973:131;18099:4;17973:131;:::i;:::-;17965:139;;17692:419;;;:::o;18117:182::-;18257:34;18253:1;18245:6;18241:14;18234:58;18117:182;:::o;18305:366::-;18447:3;18468:67;18532:2;18527:3;18468:67;:::i;:::-;18461:74;;18544:93;18633:3;18544:93;:::i;:::-;18662:2;18657:3;18653:12;18646:19;;18305:366;;;:::o;18677:419::-;18843:4;18881:2;18870:9;18866:18;18858:26;;18930:9;18924:4;18920:20;18916:1;18905:9;18901:17;18894:47;18958:131;19084:4;18958:131;:::i;:::-;18950:139;;18677:419;;;:::o;19102:180::-;19150:77;19147:1;19140:88;19247:4;19244:1;19237:15;19271:4;19268:1;19261:15;19288:180;19336:77;19333:1;19326:88;19433:4;19430:1;19423:15;19457:4;19454:1;19447:15;19474:233;19513:3;19536:24;19554:5;19536:24;:::i;:::-;19527:33;;19582:66;19575:5;19572:77;19569:103;;19652:18;;:::i;:::-;19569:103;19699:1;19692:5;19688:13;19681:20;;19474:233;;;:::o;19713:179::-;19853:31;19849:1;19841:6;19837:14;19830:55;19713:179;:::o;19898:366::-;20040:3;20061:67;20125:2;20120:3;20061:67;:::i;:::-;20054:74;;20137:93;20226:3;20137:93;:::i;:::-;20255:2;20250:3;20246:12;20239:19;;19898:366;;;:::o;20270:419::-;20436:4;20474:2;20463:9;20459:18;20451:26;;20523:9;20517:4;20513:20;20509:1;20498:9;20494:17;20487:47;20551:131;20677:4;20551:131;:::i;:::-;20543:139;;20270:419;;;:::o;20695:143::-;20752:5;20783:6;20777:13;20768:22;;20799:33;20826:5;20799:33;:::i;:::-;20695:143;;;;:::o;20844:351::-;20914:6;20963:2;20951:9;20942:7;20938:23;20934:32;20931:119;;;20969:79;;:::i;:::-;20931:119;21089:1;21114:64;21170:7;21161:6;21150:9;21146:22;21114:64;:::i;:::-;21104:74;;21060:128;20844:351;;;;:::o;21201:137::-;21255:5;21286:6;21280:13;21271:22;;21302:30;21326:5;21302:30;:::i;:::-;21201:137;;;;:::o;21344:345::-;21411:6;21460:2;21448:9;21439:7;21435:23;21431:32;21428:119;;;21466:79;;:::i;:::-;21428:119;21586:1;21611:61;21664:7;21655:6;21644:9;21640:22;21611:61;:::i;:::-;21601:71;;21557:125;21344:345;;;;:::o;21695:240::-;21835:34;21831:1;21823:6;21819:14;21812:58;21904:23;21899:2;21891:6;21887:15;21880:48;21695:240;:::o;21941:366::-;22083:3;22104:67;22168:2;22163:3;22104:67;:::i;:::-;22097:74;;22180:93;22269:3;22180:93;:::i;:::-;22298:2;22293:3;22289:12;22282:19;;21941:366;;;:::o;22313:419::-;22479:4;22517:2;22506:9;22502:18;22494:26;;22566:9;22560:4;22556:20;22552:1;22541:9;22537:17;22530:47;22594:131;22720:4;22594:131;:::i;:::-;22586:139;;22313:419;;;:::o;22738:410::-;22778:7;22801:20;22819:1;22801:20;:::i;:::-;22796:25;;22835:20;22853:1;22835:20;:::i;:::-;22830:25;;22890:1;22887;22883:9;22912:30;22930:11;22912:30;:::i;:::-;22901:41;;23091:1;23082:7;23078:15;23075:1;23072:22;23052:1;23045:9;23025:83;23002:139;;23121:18;;:::i;:::-;23002:139;22786:362;22738:410;;;;:::o;23154:79::-;23193:7;23222:5;23211:16;;23154:79;;;:::o;23239:157::-;23344:45;23364:24;23382:5;23364:24;:::i;:::-;23344:45;:::i;:::-;23339:3;23332:58;23239:157;;:::o;23402:256::-;23514:3;23529:75;23600:3;23591:6;23529:75;:::i;:::-;23629:2;23624:3;23620:12;23613:19;;23649:3;23642:10;;23402:256;;;;:::o;23664:180::-;23712:77;23709:1;23702:88;23809:4;23806:1;23799:15;23833:4;23830:1;23823:15;23850:176;23882:1;23899:20;23917:1;23899:20;:::i;:::-;23894:25;;23933:20;23951:1;23933:20;:::i;:::-;23928:25;;23972:1;23962:35;;23977:18;;:::i;:::-;23962:35;24018:1;24015;24011:9;24006:14;;23850:176;;;;:::o;24032:221::-;24172:34;24168:1;24160:6;24156:14;24149:58;24241:4;24236:2;24228:6;24224:15;24217:29;24032:221;:::o;24259:366::-;24401:3;24422:67;24486:2;24481:3;24422:67;:::i;:::-;24415:74;;24498:93;24587:3;24498:93;:::i;:::-;24616:2;24611:3;24607:12;24600:19;;24259:366;;;:::o;24631:419::-;24797:4;24835:2;24824:9;24820:18;24812:26;;24884:9;24878:4;24874:20;24870:1;24859:9;24855:17;24848:47;24912:131;25038:4;24912:131;:::i;:::-;24904:139;;24631:419;;;:::o;25056:143::-;25113:5;25144:6;25138:13;25129:22;;25160:33;25187:5;25160:33;:::i;:::-;25056:143;;;;:::o;25205:351::-;25275:6;25324:2;25312:9;25303:7;25299:23;25295:32;25292:119;;;25330:79;;:::i;:::-;25292:119;25450:1;25475:64;25531:7;25522:6;25511:9;25507:22;25475:64;:::i;:::-;25465:74;;25421:128;25205:351;;;;:::o;25562:332::-;25683:4;25721:2;25710:9;25706:18;25698:26;;25734:71;25802:1;25791:9;25787:17;25778:6;25734:71;:::i;:::-;25815:72;25883:2;25872:9;25868:18;25859:6;25815:72;:::i;:::-;25562:332;;;;;:::o;25900:85::-;25945:7;25974:5;25963:16;;25900:85;;;:::o;25991:158::-;26049:9;26082:61;26100:42;26109:32;26135:5;26109:32;:::i;:::-;26100:42;:::i;:::-;26082:61;:::i;:::-;26069:74;;25991:158;;;:::o;26155:147::-;26250:45;26289:5;26250:45;:::i;:::-;26245:3;26238:58;26155:147;;:::o;26308:807::-;26557:4;26595:3;26584:9;26580:19;26572:27;;26609:71;26677:1;26666:9;26662:17;26653:6;26609:71;:::i;:::-;26690:72;26758:2;26747:9;26743:18;26734:6;26690:72;:::i;:::-;26772:80;26848:2;26837:9;26833:18;26824:6;26772:80;:::i;:::-;26862;26938:2;26927:9;26923:18;26914:6;26862:80;:::i;:::-;26952:73;27020:3;27009:9;27005:19;26996:6;26952:73;:::i;:::-;27035;27103:3;27092:9;27088:19;27079:6;27035:73;:::i;:::-;26308:807;;;;;;;;;:::o;27121:663::-;27209:6;27217;27225;27274:2;27262:9;27253:7;27249:23;27245:32;27242:119;;;27280:79;;:::i;:::-;27242:119;27400:1;27425:64;27481:7;27472:6;27461:9;27457:22;27425:64;:::i;:::-;27415:74;;27371:128;27538:2;27564:64;27620:7;27611:6;27600:9;27596:22;27564:64;:::i;:::-;27554:74;;27509:129;27677:2;27703:64;27759:7;27750:6;27739:9;27735:22;27703:64;:::i;:::-;27693:74;;27648:129;27121:663;;;;;:::o;27790:225::-;27930:34;27926:1;27918:6;27914:14;27907:58;27999:8;27994:2;27986:6;27982:15;27975:33;27790:225;:::o;28021:366::-;28163:3;28184:67;28248:2;28243:3;28184:67;:::i;:::-;28177:74;;28260:93;28349:3;28260:93;:::i;:::-;28378:2;28373:3;28369:12;28362:19;;28021:366;;;:::o;28393:419::-;28559:4;28597:2;28586:9;28582:18;28574:26;;28646:9;28640:4;28636:20;28632:1;28621:9;28617:17;28610:47;28674:131;28800:4;28674:131;:::i;:::-;28666:139;;28393:419;;;:::o;28818:332::-;28939:4;28977:2;28966:9;28962:18;28954:26;;28990:71;29058:1;29047:9;29043:17;29034:6;28990:71;:::i;:::-;29071:72;29139:2;29128:9;29124:18;29115:6;29071:72;:::i;:::-;28818:332;;;;;:::o;29156:223::-;29296:34;29292:1;29284:6;29280:14;29273:58;29365:6;29360:2;29352:6;29348:15;29341:31;29156:223;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:221::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:4;30386:2;30378:6;30374:15;30367:29;30182:221;:::o;30409:366::-;30551:3;30572:67;30636:2;30631:3;30572:67;:::i;:::-;30565:74;;30648:93;30737:3;30648:93;:::i;:::-;30766:2;30761:3;30757:12;30750:19;;30409:366;;;:::o;30781:419::-;30947:4;30985:2;30974:9;30970:18;30962:26;;31034:9;31028:4;31024:20;31020:1;31009:9;31005:17;30998:47;31062:131;31188:4;31062:131;:::i;:::-;31054:139;;30781:419;;;:::o;31206:224::-;31346:34;31342:1;31334:6;31330:14;31323:58;31415:7;31410:2;31402:6;31398:15;31391:32;31206:224;:::o;31436:366::-;31578:3;31599:67;31663:2;31658:3;31599:67;:::i;:::-;31592:74;;31675:93;31764:3;31675:93;:::i;:::-;31793:2;31788:3;31784:12;31777:19;;31436:366;;;:::o;31808:419::-;31974:4;32012:2;32001:9;31997:18;31989:26;;32061:9;32055:4;32051:20;32047:1;32036:9;32032:17;32025:47;32089:131;32215:4;32089:131;:::i;:::-;32081:139;;31808:419;;;:::o;32233:222::-;32373:34;32369:1;32361:6;32357:14;32350:58;32442:5;32437:2;32429:6;32425:15;32418:30;32233:222;:::o;32461:366::-;32603:3;32624:67;32688:2;32683:3;32624:67;:::i;:::-;32617:74;;32700:93;32789:3;32700:93;:::i;:::-;32818:2;32813:3;32809:12;32802:19;;32461:366;;;:::o;32833:419::-;32999:4;33037:2;33026:9;33022:18;33014:26;;33086:9;33080:4;33076:20;33072:1;33061:9;33057:17;33050:47;33114:131;33240:4;33114:131;:::i;:::-;33106:139;;32833:419;;;:::o;33258:228::-;33398:34;33394:1;33386:6;33382:14;33375:58;33467:11;33462:2;33454:6;33450:15;33443:36;33258:228;:::o;33492:366::-;33634:3;33655:67;33719:2;33714:3;33655:67;:::i;:::-;33648:74;;33731:93;33820:3;33731:93;:::i;:::-;33849:2;33844:3;33840:12;33833:19;;33492:366;;;:::o;33864:419::-;34030:4;34068:2;34057:9;34053:18;34045:26;;34117:9;34111:4;34107:20;34103:1;34092:9;34088:17;34081:47;34145:131;34271:4;34145:131;:::i;:::-;34137:139;;33864:419;;;:::o;34289:224::-;34429:34;34425:1;34417:6;34413:14;34406:58;34498:7;34493:2;34485:6;34481:15;34474:32;34289:224;:::o;34519:366::-;34661:3;34682:67;34746:2;34741:3;34682:67;:::i;:::-;34675:74;;34758:93;34847:3;34758:93;:::i;:::-;34876:2;34871:3;34867:12;34860:19;;34519:366;;;:::o;34891:419::-;35057:4;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;34891:419;;;:::o;35316:194::-;35356:4;35376:20;35394:1;35376:20;:::i;:::-;35371:25;;35410:20;35428:1;35410:20;:::i;:::-;35405:25;;35454:1;35451;35447:9;35439:17;;35478:1;35472:4;35469:11;35466:37;;;35483:18;;:::i;:::-;35466:37;35316:194;;;;:::o;35516:85::-;35561:7;35590:5;35579:16;;35516:85;;;:::o;35607:158::-;35665:9;35698:61;35716:42;35725:32;35751:5;35725:32;:::i;:::-;35716:42;:::i;:::-;35698:61;:::i;:::-;35685:74;;35607:158;;;:::o;35771:147::-;35866:45;35905:5;35866:45;:::i;:::-;35861:3;35854:58;35771:147;;:::o;35924:918::-;36201:4;36239:3;36228:9;36224:19;36216:27;;36253:71;36321:1;36310:9;36306:17;36297:6;36253:71;:::i;:::-;36334:72;36402:2;36391:9;36387:18;36378:6;36334:72;:::i;:::-;36416;36484:2;36473:9;36469:18;36460:6;36416:72;:::i;:::-;36498:80;36574:2;36563:9;36559:18;36550:6;36498:80;:::i;:::-;36588:81;36664:3;36653:9;36649:19;36640:6;36588:81;:::i;:::-;36679:73;36747:3;36736:9;36732:19;36723:6;36679:73;:::i;:::-;36762;36830:3;36819:9;36815:19;36806:6;36762:73;:::i;:::-;35924:918;;;;;;;;;;:::o;36848:507::-;36927:6;36935;36984:2;36972:9;36963:7;36959:23;36955:32;36952:119;;;36990:79;;:::i;:::-;36952:119;37110:1;37135:64;37191:7;37182:6;37171:9;37167:22;37135:64;:::i;:::-;37125:74;;37081:128;37248:2;37274:64;37330:7;37321:6;37310:9;37306:22;37274:64;:::i;:::-;37264:74;;37219:129;36848:507;;;;;:::o;37361:191::-;37401:3;37420:20;37438:1;37420:20;:::i;:::-;37415:25;;37454:20;37472:1;37454:20;:::i;:::-;37449:25;;37497:1;37494;37490:9;37483:16;;37518:3;37515:1;37512:10;37509:36;;;37525:18;;:::i;:::-;37509:36;37361:191;;;;:::o;37558:177::-;37698:29;37694:1;37686:6;37682:14;37675:53;37558:177;:::o;37741:366::-;37883:3;37904:67;37968:2;37963:3;37904:67;:::i;:::-;37897:74;;37980:93;38069:3;37980:93;:::i;:::-;38098:2;38093:3;38089:12;38082:19;;37741:366;;;:::o;38113:419::-;38279:4;38317:2;38306:9;38302:18;38294:26;;38366:9;38360:4;38356:20;38352:1;38341:9;38337:17;38330:47;38394:131;38520:4;38394:131;:::i;:::-;38386:139;;38113:419;;;:::o;38538:220::-;38678:34;38674:1;38666:6;38662:14;38655:58;38747:3;38742:2;38734:6;38730:15;38723:28;38538:220;:::o;38764:366::-;38906:3;38927:67;38991:2;38986:3;38927:67;:::i;:::-;38920:74;;39003:93;39092:3;39003:93;:::i;:::-;39121:2;39116:3;39112:12;39105:19;;38764:366;;;:::o;39136:419::-;39302:4;39340:2;39329:9;39325:18;39317:26;;39389:9;39383:4;39379:20;39375:1;39364:9;39360:17;39353:47;39417:131;39543:4;39417:131;:::i;:::-;39409:139;;39136:419;;;:::o;39561:185::-;39601:1;39618:20;39636:1;39618:20;:::i;:::-;39613:25;;39652:20;39670:1;39652:20;:::i;:::-;39647:25;;39691:1;39681:35;;39696:18;;:::i;:::-;39681:35;39738:1;39735;39731:9;39726:14;;39561:185;;;;:::o;39752:220::-;39892:34;39888:1;39880:6;39876:14;39869:58;39961:3;39956:2;39948:6;39944:15;39937:28;39752:220;:::o;39978:366::-;40120:3;40141:67;40205:2;40200:3;40141:67;:::i;:::-;40134:74;;40217:93;40306:3;40217:93;:::i;:::-;40335:2;40330:3;40326:12;40319:19;;39978:366;;;:::o;40350:419::-;40516:4;40554:2;40543:9;40539:18;40531:26;;40603:9;40597:4;40593:20;40589:1;40578:9;40574:17;40567:47;40631:131;40757:4;40631:131;:::i;:::-;40623:139;;40350:419;;;:::o;40775:114::-;40842:6;40876:5;40870:12;40860:22;;40775:114;;;:::o;40895:184::-;40994:11;41028:6;41023:3;41016:19;41068:4;41063:3;41059:14;41044:29;;40895:184;;;;:::o;41085:132::-;41152:4;41175:3;41167:11;;41205:4;41200:3;41196:14;41188:22;;41085:132;;;:::o;41223:108::-;41300:24;41318:5;41300:24;:::i;:::-;41295:3;41288:37;41223:108;;:::o;41337:179::-;41406:10;41427:46;41469:3;41461:6;41427:46;:::i;:::-;41505:4;41500:3;41496:14;41482:28;;41337:179;;;;:::o;41522:113::-;41592:4;41624;41619:3;41615:14;41607:22;;41522:113;;;:::o;41671:732::-;41790:3;41819:54;41867:5;41819:54;:::i;:::-;41889:86;41968:6;41963:3;41889:86;:::i;:::-;41882:93;;41999:56;42049:5;41999:56;:::i;:::-;42078:7;42109:1;42094:284;42119:6;42116:1;42113:13;42094:284;;;42195:6;42189:13;42222:63;42281:3;42266:13;42222:63;:::i;:::-;42215:70;;42308:60;42361:6;42308:60;:::i;:::-;42298:70;;42154:224;42141:1;42138;42134:9;42129:14;;42094:284;;;42098:14;42394:3;42387:10;;41795:608;;;41671:732;;;;:::o;42409:483::-;42580:4;42618:2;42607:9;42603:18;42595:26;;42631:71;42699:1;42688:9;42684:17;42675:6;42631:71;:::i;:::-;42749:9;42743:4;42739:20;42734:2;42723:9;42719:18;42712:48;42777:108;42880:4;42871:6;42777:108;:::i;:::-;42769:116;;42409:483;;;;;:::o;42898:311::-;42975:4;43065:18;43057:6;43054:30;43051:56;;;43087:18;;:::i;:::-;43051:56;43137:4;43129:6;43125:17;43117:25;;43197:4;43191;43187:15;43179:23;;42898:311;;;:::o;43232:732::-;43339:5;43364:81;43380:64;43437:6;43380:64;:::i;:::-;43364:81;:::i;:::-;43355:90;;43465:5;43494:6;43487:5;43480:21;43528:4;43521:5;43517:16;43510:23;;43581:4;43573:6;43569:17;43561:6;43557:30;43610:3;43602:6;43599:15;43596:122;;;43629:79;;:::i;:::-;43596:122;43744:6;43727:231;43761:6;43756:3;43753:15;43727:231;;;43836:3;43865:48;43909:3;43897:10;43865:48;:::i;:::-;43860:3;43853:61;43943:4;43938:3;43934:14;43927:21;;43803:155;43787:4;43782:3;43778:14;43771:21;;43727:231;;;43731:21;43345:619;;43232:732;;;;;:::o;43987:385::-;44069:5;44118:3;44111:4;44103:6;44099:17;44095:27;44085:122;;44126:79;;:::i;:::-;44085:122;44236:6;44230:13;44261:105;44362:3;44354:6;44347:4;44339:6;44335:17;44261:105;:::i;:::-;44252:114;;44075:297;43987:385;;;;:::o;44378:554::-;44473:6;44522:2;44510:9;44501:7;44497:23;44493:32;44490:119;;;44528:79;;:::i;:::-;44490:119;44669:1;44658:9;44654:17;44648:24;44699:18;44691:6;44688:30;44685:117;;;44721:79;;:::i;:::-;44685:117;44826:89;44907:7;44898:6;44887:9;44883:22;44826:89;:::i;:::-;44816:99;;44619:306;44378:554;;;;:::o;44938:720::-;45173:4;45211:3;45200:9;45196:19;45188:27;;45225:79;45301:1;45290:9;45286:17;45277:6;45225:79;:::i;:::-;45351:9;45345:4;45341:20;45336:2;45325:9;45321:18;45314:48;45379:108;45482:4;45473:6;45379:108;:::i;:::-;45371:116;;45497:72;45565:2;45554:9;45550:18;45541:6;45497:72;:::i;:::-;45579;45647:2;45636:9;45632:18;45623:6;45579:72;:::i;:::-;44938:720;;;;;;;:::o;45664:831::-;45927:4;45965:3;45954:9;45950:19;45942:27;;45979:71;46047:1;46036:9;46032:17;46023:6;45979:71;:::i;:::-;46060:80;46136:2;46125:9;46121:18;46112:6;46060:80;:::i;:::-;46187:9;46181:4;46177:20;46172:2;46161:9;46157:18;46150:48;46215:108;46318:4;46309:6;46215:108;:::i;:::-;46207:116;;46333:72;46401:2;46390:9;46386:18;46377:6;46333:72;:::i;:::-;46415:73;46483:3;46472:9;46468:19;46459:6;46415:73;:::i;:::-;45664:831;;;;;;;;:::o

Swarm Source

ipfs://36563ff1ce8387e48d92950974a21adad6f872cc72daa2652c88445f86aca70e
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.