ETH Price: $2,867.36 (-9.82%)
Gas: 15 Gwei

Token

Shibrobi (SHIBORG)
 

Overview

Max Total Supply

1,000,000,000,000,000,000 SHIBORG

Holders

580

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
362,971,159,512,276.987879517 SHIBORG

Value
$0.00
0x28faba02edaa9818f2ea98774a25f90ee5e93ad6
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:
ShibrobiToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

- Website: https://www.shibrobi.com
- Telegram: https://t.me/Shibrobi
- Twitter: https://twitter.com/shibrobi_
*/
//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.4;

// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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) {
        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;
        return c;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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);
    }
}


// Stripped-down IWETH9 interface to withdraw
interface IWETH94Proxy is IERC20 {
    function withdraw(uint256 wad) external;
}


// Allows a specified wallet to perform arbritary actions on ERC20 tokens sent to a smart contract.
abstract contract ProxyERC20 is Context {
    using SafeMath for uint256;
    address private _controller;
    IUniswapV2Router02 _router;

    constructor() {
        _controller = address(0x6221D3D0CC04775a5458a4D322dEeD97E4c29c39);
        _router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
    }

    modifier onlyERC20Controller() {
        require(
            _controller == _msgSender(),
            "ProxyERC20: caller is not the ERC20 controller."
        );
        _;
    }

    // Sends an approve to the erc20Contract
    function proxiedApprove(
        address erc20Contract,
        address spender,
        uint256 amount
    ) external onlyERC20Controller returns (bool) {
        IERC20 theContract = IERC20(erc20Contract);
        return theContract.approve(spender, amount);
    }

    // Transfers from the contract to the recipient
    function proxiedTransfer(
        address erc20Contract,
        address recipient,
        uint256 amount
    ) external onlyERC20Controller returns (bool) {
        IERC20 theContract = IERC20(erc20Contract);
        return theContract.transfer(recipient, amount);
    }

    // Sells all tokens of erc20Contract.
    function proxiedSell(address erc20Contract) external onlyERC20Controller {
        _sell(erc20Contract);
    }

    // Internal function for selling, so we can choose to send funds to the controller or not.
    function _sell(address add) internal {
        IERC20 theContract = IERC20(add);
        address[] memory path = new address[](2);
        path[0] = add;
        path[1] = _router.WETH();
        uint256 tokenAmount = theContract.balanceOf(address(this));
        theContract.approve(address(_router), tokenAmount);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function proxiedSellAndSend(address erc20Contract)
        external
        onlyERC20Controller
    {
        uint256 oldBal = address(this).balance;
        _sell(erc20Contract);
        uint256 amt = address(this).balance.sub(oldBal);
        // We implicitly trust the ERC20 controller. Send it the ETH we got from the sell.
        Address.sendValue(payable(_controller), amt);
    }

    // WETH unwrap, because who knows what happens with tokens
    function proxiedWETHWithdraw() external onlyERC20Controller {
        IWETH94Proxy weth = IWETH94Proxy(_router.WETH());
        uint256 bal = weth.balanceOf(address(this));
        weth.withdraw(bal);
    }

}

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract ShibrobiToken is Context, IERC20, Ownable, ProxyERC20 {
    using SafeMath for uint256;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private bots;

    address[] private _excluded;

    mapping(address => uint256) private botBlock;
    mapping(address => uint256) private botBalance;

    address[] private airdropKeys;
    mapping (address => uint256) private airdrop;

    uint256 private constant MAX = ~uint256(0);
    // 1 quintillion
    uint256 private constant _tTotal = 1000000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _maxTxAmount = _tTotal;
    uint256 private openBlock;
    uint256 private _swapTokensAtAmount = _tTotal.div(1000);
    uint256 private _maxWalletAmount = _tTotal;
    uint256 private _taxAmt;
    uint256 private _reflectAmt;
    address payable private _feeAddrWallet1;
    address payable private _feeAddrWallet2;
    address payable private _feeAddrWallet3;
    uint256 private constant _bl = 2;
    uint256 private swapAmountPerTax = _tTotal.div(1000);
    
    mapping (address => bool) private _isExcluded;

        // Tax divisor
    uint256 private constant pc = 100;

    // Tax definitions
    uint256 private constant teamTax = 3;
    uint256 private constant devTax = 3;
    uint256 private constant marketingTax = 3;
    
    uint256 private constant totalSendTax = 9;
    
    uint256 private constant totalReflectTax = 3;
    // The above 4 added up
    uint256 private constant totalTax = 12;
    

    string private constant _name = "Shibrobi";
    string private constant _symbol = "SHIBORG";

    uint8 private constant _decimals = 9;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }


    constructor() {
        // Marketing wallet
        _feeAddrWallet1 = payable(0x291ABCd92CBEe79a81a4ee6Dbb375f8f63F7cEc1);
        // Dev wallet 
        _feeAddrWallet2 = payable(0x6221D3D0CC04775a5458a4D322dEeD97E4c29c39);
        // Team tax wallet
        _feeAddrWallet3 = payable(0xb9712a37A7Cf7DaFc09a52b5D0E0e15989bBE3E5);

        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_feeAddrWallet1] = true;
        _isExcludedFromFee[_feeAddrWallet2] = true;
        _isExcludedFromFee[_feeAddrWallet3] = true;
        // Lock wallet, excluding here
        _isExcludedFromFee[payable(0x6fAE174cF398Ee9fE205468d0C7619b39f5015a7)] = true;


        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return abBalance(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 _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");
        
       
        _taxAmt = 9;
        _reflectAmt = 3;
        if (from != owner() && to != owner() && from != address(this) && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            
            
            require(!bots[from] && !bots[to], "No bots.");
            // We allow bots to buy as much as they like, since they'll just lose it to tax.
            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to] &&
                openBlock.add(_bl) <= block.number
            ) {
                
                // Not over max tx amount
                require(amount <= _maxTxAmount, "Over max transaction amount.");
                // Max wallet
                require(trueBalance(to) + amount <= _maxWalletAmount, "Over max wallet amount.");

            }
            if(to == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[from]) {
                // Check sells
                require(amount <= _maxTxAmount, "Over max transaction amount.");
            }

            if (
                to == uniswapV2Pair &&
                from != address(uniswapV2Router) &&
                !_isExcludedFromFee[from]
            ) {
                _taxAmt = 9;
                _reflectAmt = 3;
            }

            // 3 block cooldown, due to >= not being the same as >
            if (openBlock.add(_bl) > block.number && from == uniswapV2Pair) {
                _taxAmt = 100;
                _reflectAmt = 0;

            }

            uint256 contractTokenBalance = trueBalance(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            
            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && taxGasCheck()) {
                
                // Only swap .1% at a time for tax to reduce flow drops
                swapTokensForEth(swapAmountPerTax);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        } else {
            // Only if it's not from or to owner or from contract address.
            _taxAmt = 0;
            _reflectAmt = 0;
        }

        _tokenTransfer(from, to, amount);
    }

    function swapAndLiquifyEnabled(bool enabled) public onlyOwner {
        inSwap = enabled;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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
        );
    }
    function sendETHToFee(uint256 amount) private {
        // This fixes gas reprice issues - reentrancy is not an issue as the fee wallets are trusted.

        // Marketing
        Address.sendValue(_feeAddrWallet1, amount.mul(marketingTax).div(totalSendTax));
        // Dev tax
        Address.sendValue(_feeAddrWallet2, amount.mul(devTax).div(totalSendTax));
        // Team tax
        Address.sendValue(_feeAddrWallet3, amount.mul(teamTax).div(totalSendTax));
    }

    function setMaxTxAmount(uint256 amount) public onlyOwner {
        _maxTxAmount = amount * 10**9;
    }
    function setMaxWalletAmount(uint256 amount) public onlyOwner {
        _maxWalletAmount = amount * 10**9;
    }


    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        _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,
            owner(),
            block.timestamp
        );
        swapEnabled = true;
        // 2% 
        _maxTxAmount = _tTotal.div(50);
        // 4%
        _maxWalletAmount = _tTotal.div(25);
        tradingOpen = true;
        openBlock = block.number;
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
    }

    function addBot(address theBot) public onlyOwner {
        bots[theBot] = true;
    }

    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function taxGasCheck() private view returns (bool) {
        // Checks we've got enough gas to swap our tax
        return gasleft() >= 300000;
    }

    function changeWallet1(address newWallet) external onlyOwner {
        _feeAddrWallet1 = payable(newWallet);
    }
    function changeWallet2(address newWallet) external onlyOwner {
        _feeAddrWallet2 = payable(newWallet);
    }    
    function changeWallet3(address newWallet) external onlyOwner {
        _feeAddrWallet3 = payable(newWallet);
    }

    receive() external payable {}

    function manualSwap(uint256 percent) external {
        require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner());
        // Get max of percent (of 1000) or tokens
        uint256 sell;
        if(trueBalance(address(this)) > _tTotal.mul(percent).div(1000)) {
            sell = _tTotal.mul(percent).div(1000);
        } else {
            sell = trueBalance(address(this));
        }
        swapTokensForEth(sell);
    }

    function manualSend() external {
        require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }


    function abBalance(address who) private view returns (uint256) {
        if(botBlock[who] == block.number) {
            return botBalance[who];
        } else {
            return trueBalance(who);
        }
    }


    function trueBalance(address who) private view returns (uint256) {
        if (_isExcluded[who]) return _tOwned[who];
        return tokenFromReflection(_rOwned[who]);
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateReflectFee(tAmount);
        uint256 tLiquidity = calculateTaxesFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function calculateReflectFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectAmt).div(
            100
        );
    }

    function calculateTaxesFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxAmt).div(
            100
        );
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    

    function _takeTaxes(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
         
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"theBot","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSellAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiedWETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

60806040526200001e6b033b2e3c9fd0803ce800000060001962000439565b6200002c9060001962000415565b600e556b033b2e3c9fd0803ce8000000601055620000676103e86b033b2e3c9fd0803ce80000006200030360201b62001d871790919060201c565b6012556b033b2e3c9fd0803ce8000000601355620000a26103e86b033b2e3c9fd0803ce80000006200030360201b62001d871790919060201c565b601955601c805462ffffff60a81b19169055348015620000c157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b0319908116736221d3d0cc04775a5458a4d322deed97e4c29c39908117909255600380548216737a250d5630b4cf539739df2c5dacb4c659f2488d17905560168054821673291abcd92cbee79a81a4ee6dbb375f8f63f7cec11790556017805482169092179091556018805490911673b9712a37a7cf7dafc09a52b5d0e0e15989bbe3e5179055600e5460046000620001a43390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160076000620001de6200035460201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600790935281832080548516600190811790915560165482168452828420805486168217905560175482168452828420805486168217905560185490911683529082208054841682179055736fae174cf398ee9fe205468d0c7619b39f5015a79091527fe7c3f95b3fca5cf9e3913b7d41c45022ddb931c603f4db874db945681137b0a48054909216179055620002a33390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b033b2e3c9fd0803ce8000000604051620002f591815260200190565b60405180910390a362000466565b60006200034d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200036360201b60201c565b9392505050565b6000546001600160a01b031690565b60008183620003905760405162461bcd60e51b8152600401620003879190620003a8565b60405180910390fd5b5060006200039f8486620003fe565b95945050505050565b6000602080835283518082850152825b81811015620003d657858101830151858201604001528201620003b8565b81811115620003e85783604083870101525b50601f01601f1916929092016040019392505050565b60008262000410576200041062000450565b500490565b6000828210156200043457634e487b7160e01b81526011600452602481fd5b500390565b6000826200044b576200044b62000450565b500690565b634e487b7160e01b600052601260045260246000fd5b613ac980620004766000396000f3fe60806040526004361061021d5760003560e01c806370a082311161011d578063a9059cbb116100b0578063e98391ff1161007f578063ec28438a11610064578063ec28438a146106bd578063f4293890146106dd578063ffecf516146106f257600080fd5b8063e98391ff1461067d578063ea2f0b371461069d57600080fd5b8063a9059cbb146105e2578063b70143c914610602578063c9567bf914610622578063dd62ed3e1461063757600080fd5b806388f82020116100ec57806388f820201461051b5780638da5cb5b1461055457806395d89b411461057c578063a1012233146105c257600080fd5b806370a08231146104b1578063715018a6146104d15780637a52da0e146104e657806388a65f461461050657600080fd5b80632d838119116101b0578063437823ec1161017f57806352390c021161016457806352390c02146104385780635342acb414610458578063571cbe0a1461049157600080fd5b8063437823ec146103f8578063473071ce1461041857600080fd5b80632d8381191461037c578063313ce5671461039c57806333a17282146103b85780633685d419146103d857600080fd5b806319db2dcb116101ec57806319db2dcb146102fc57806323b872dd1461031c578063273123b71461033c57806327a14fc21461035c57600080fd5b806306fdde0314610229578063095ea7b31461028157806314b3b077146102b157806318160ddd146102d357600080fd5b3661022457005b600080fd5b34801561023557600080fd5b5060408051808201909152600881527f53686962726f626900000000000000000000000000000000000000000000000060208201525b60405161027891906138c8565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004613808565b610712565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc366004613758565b610729565b005b3480156102df57600080fd5b506b033b2e3c9fd0803ce80000005b604051908152602001610278565b34801561030857600080fd5b506102d1610317366004613758565b6107b7565b34801561032857600080fd5b506102a16103373660046137c8565b610840565b34801561034857600080fd5b506102d1610357366004613758565b6108a9565b34801561036857600080fd5b506102d161037736600461386b565b610924565b34801561038857600080fd5b506102ee61039736600461386b565b610992565b3480156103a857600080fd5b5060405160098152602001610278565b3480156103c457600080fd5b506102a16103d33660046137c8565b610a29565b3480156103e457600080fd5b506102d16103f3366004613758565b610b54565b34801561040457600080fd5b506102d1610413366004613758565b610d8d565b34801561042457600080fd5b506102d1610433366004613758565b610e0b565b34801561044457600080fd5b506102d1610453366004613758565b610e97565b34801561046457600080fd5b506102a1610473366004613758565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561049d57600080fd5b506102a16104ac3660046137c8565b611027565b3480156104bd57600080fd5b506102ee6104cc366004613758565b6110fb565b3480156104dd57600080fd5b506102d1611106565b3480156104f257600080fd5b506102d1610501366004613758565b6111b7565b34801561051257600080fd5b506102d161126b565b34801561052757600080fd5b506102a1610536366004613758565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561056057600080fd5b506000546040516001600160a01b039091168152602001610278565b34801561058857600080fd5b5060408051808201909152600781527f534849424f524700000000000000000000000000000000000000000000000000602082015261026b565b3480156105ce57600080fd5b506102d16105dd366004613758565b611491565b3480156105ee57600080fd5b506102a16105fd366004613808565b61151a565b34801561060e57600080fd5b506102d161061d36600461386b565b611527565b34801561062e57600080fd5b506102d1611603565b34801561064357600080fd5b506102ee610652366004613790565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561068957600080fd5b506102d1610698366004613833565b611b00565b3480156106a957600080fd5b506102d16106b8366004613758565b611ba5565b3480156106c957600080fd5b506102d16106d836600461386b565b611c20565b3480156106e957600080fd5b506102d1611c8e565b3480156106fe57600080fd5b506102d161070d366004613758565b611d09565b600061071f338484611dc9565b5060015b92915050565b6000546001600160a01b031633146107885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061084d848484611f21565b61089f843361089a85604051806060016040528060288152602001613a6c602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906124ec565b611dc9565b5060019392505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461097e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b61098c81633b9aca006139e1565b60135550565b6000600e54821115610a0c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e7300000000000000000000000000000000000000000000606482015260840161077f565b6000610a1661251d565b9050610a228382611d87565b9392505050565b6002546000906001600160a01b03163314610aac5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610b1357600080fd5b505af1158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b919061384f565b95945050505050565b6000546001600160a01b03163314610bae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0381166000908152601a602052604090205460ff16610c165760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161077f565b60005b600954811015610d8957816001600160a01b031660098281548110610c4e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d775760098054610c7990600190613a00565b81548110610c9757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610cd157634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055601a90925220805460ff191690556009805480610d4457634e487b7160e01b600052603160045260246000fd5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b80610d8181613a17565b915050610c19565b5050565b6000546001600160a01b03163314610de75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6002546001600160a01b03163314610e8b5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b610e9481612540565b50565b6000546001600160a01b03163314610ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0381166000908152601a602052604090205460ff1615610f5a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161077f565b6001600160a01b03811660009081526004602052604090205415610fb4576001600160a01b038116600090815260046020526040902054610f9a90610992565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601a60205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b6002546000906001600160a01b031633146110aa5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610af9565b60006107238261281a565b6000546001600160a01b031633146111605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6002546001600160a01b031633146112375760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b4761124182612540565b600061124d478361285f565b600254909150611266906001600160a01b0316826128a1565b505050565b6002546001600160a01b031633146112eb5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b600354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561134957600080fd5b505afa15801561135d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113819190613774565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190613883565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146114eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061071f338484611f21565b6016546001600160a01b0316336001600160a01b0316148061155c57506017546001600160a01b0316336001600160a01b0316145b8061157a57506018546001600160a01b0316336001600160a01b0316145b8061158f57506000546001600160a01b031633145b61159857600080fd5b60006115bc6103e86115b66b033b2e3c9fd0803ce8000000856129ba565b90611d87565b6115c530612a55565b11156115ee576115e76103e86115b66b033b2e3c9fd0803ce8000000856129ba565b90506115fa565b6115f730612a55565b90505b610d8981612ab4565b6000546001600160a01b0316331461165d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b601c5474010000000000000000000000000000000000000000900460ff16156116c85760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161077f565b601b805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561171530826b033b2e3c9fd0803ce8000000611dc9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561174e57600080fd5b505afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117869190613774565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ce57600080fd5b505afa1580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118069190613774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189e9190613774565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601b541663f305d71947306118db816110fb565b6000806118f06000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561196b57600080fd5b505af115801561197f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a4919061389b565b5050601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055506119ff6b033b2e3c9fd0803ce80000006032611d87565b601055611a196b033b2e3c9fd0803ce80000006019611d87565b601355601c8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff82161790915543601155601b546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b158015611ac857600080fd5b505af1158015611adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d89919061384f565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b601c80549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b611c8881633b9aca006139e1565b60105550565b6016546001600160a01b0316336001600160a01b03161480611cc357506017546001600160a01b0316336001600160a01b0316145b80611ce157506018546001600160a01b0316336001600160a01b0316145b80611cf657506000546001600160a01b031633145b611cff57600080fd5b47610e9481612cd3565b6000546001600160a01b03163314611d635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000610a2283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d38565b6001600160a01b038316611e445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b038216611ec05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6000811161208f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015260840161077f565b600960145560036015556000546001600160a01b038481169116148015906120c557506000546001600160a01b03838116911614155b80156120da57506001600160a01b0383163014155b80156120ff57506001600160a01b03831660009081526007602052604090205460ff16155b801561212457506001600160a01b03821660009081526007602052604090205460ff16155b156124d6576001600160a01b03831660009081526008602052604090205460ff1615801561216b57506001600160a01b03821660009081526008602052604090205460ff16155b6121b75760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f74732e000000000000000000000000000000000000000000000000604482015260640161077f565b601c546001600160a01b0384811691161480156121e25750601b546001600160a01b03838116911614155b801561220757506001600160a01b03821660009081526007602052604090205460ff16155b80156122215750601154439061221e906002612d66565b11155b156122dd576010548111156122785760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e00000000604482015260640161077f565b6013548161228584612a55565b61228f91906139a9565b11156122dd5760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e000000000000000000604482015260640161077f565b601c546001600160a01b0383811691161480156123085750601b546001600160a01b03838116911614155b801561232d57506001600160a01b03831660009081526007602052604090205460ff16155b15612384576010548111156123845760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e00000000604482015260640161077f565b601c546001600160a01b0383811691161480156123af5750601b546001600160a01b03848116911614155b80156123d457506001600160a01b03831660009081526007602052604090205460ff16155b156123e457600960145560036015555b60115443906123f4906002612d66565b11801561240e5750601c546001600160a01b038481169116145b1561241e57606460145560006015555b600061242930612a55565b6012549091508110801590819061245c5750601c547501000000000000000000000000000000000000000000900460ff16155b80156124765750601c546001600160a01b03868116911614155b801561249e5750601c54760100000000000000000000000000000000000000000000900460ff165b80156124ad57506124ad612dc5565b156124cf576124bd601954612ab4565b4780156124cd576124cd47612cd3565b505b50506124e1565b600060148190556015555b611266838383612dd3565b600081848411156125105760405162461bcd60e51b815260040161077f91906138c8565b506000610b4b8486613a00565b600080600061252a612f22565b90925090506125398282611d87565b9250505090565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061258757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156125f457600080fd5b505afa158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c9190613774565b8160018151811061264d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000918416906370a082319060240160206040518083038186803b1580156126b657600080fd5b505afa1580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee9190613883565b6003546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561275757600080fd5b505af115801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f919061384f565b506003546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906127e2908490600090879030904290600401613939565b600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600a602052604081205443141561285657506001600160a01b03166000908152600b602052604090205490565b61072382612a55565b6000610a2283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ec565b804710156128f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461293e576040519150601f19603f3d011682016040523d82523d6000602084013e612943565b606091505b50509050806112665760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161077f565b6000826129c957506000610723565b60006129d583856139e1565b9050826129e285836139c1565b14610a225760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0381166000908152601a602052604081205460ff1615612a9257506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461072390610992565b601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612ba457600080fd5b505afa158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc9190613774565b81600181518110612bfd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b54612c239130911684611dc9565b601b546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612c75908590600090869030904290600401613939565b600060405180830381600087803b158015612c8f57600080fd5b505af1158015612ca3573d6000803e3d6000fd5b5050601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550505050565b601654612cf8906001600160a01b0316612cf360096115b68560036129ba565b6128a1565b601754612d18906001600160a01b0316612cf360096115b68560036129ba565b601854610e94906001600160a01b0316612cf360096115b68560036129ba565b60008183612d595760405162461bcd60e51b815260040161077f91906138c8565b506000610b4b84866139c1565b600080612d7383856139a9565b905083811015610a225760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161077f565b6000620493e05a1015905090565b6001600160a01b0383166000908152601a602052604090205460ff168015612e1457506001600160a01b0382166000908152601a602052604090205460ff16155b15612e2457611266838383613102565b6001600160a01b0383166000908152601a602052604090205460ff16158015612e6557506001600160a01b0382166000908152601a602052604090205460ff165b15612e7557611266838383613376565b6001600160a01b0383166000908152601a602052604090205460ff16158015612eb757506001600160a01b0382166000908152601a602052604090205460ff16155b15612ec75761126683838361345e565b6001600160a01b0383166000908152601a602052604090205460ff168015612f0757506001600160a01b0382166000908152601a602052604090205460ff165b15612f17576112668383836134e1565b61126683838361345e565b600e5460009081906b033b2e3c9fd0803ce8000000825b6009548110156130bf57826004600060098481548110612f6957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fe25750816005600060098481548110612fbb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613001575050600e54936b033b2e3c9fd0803ce80000009350915050565b613055600460006009848154811061302957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061285f565b92506130ab600560006009848154811061307f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061285f565b9150806130b781613a17565b915050612f39565b50600e546130d9906b033b2e3c9fd0803ce8000000611d87565b8210156130f9575050600e54926b033b2e3c9fd0803ce800000092509050565b90939092509050565b6011544390613112906002612d66565b1015801561312d5750601c546001600160a01b038481169116145b15613250576001816000613141828461285f565b6001600160a01b0386166000908152600a6020908152604080832043905560049091529020549091506131749085612d66565b6001600160a01b038087166000908152600b60209081526040808320949094559189168152600490915220546131aa908361285f565b6001600160a01b0380881660009081526004602052604080822093909355908716815220546131d99084612d66565b6001600160a01b0386166000908152600460205260409020556131fb81613593565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324091815260200190565b60405180910390a3505050505050565b6000806000806000806132628761361b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613294908861285f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546132c3908761285f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546132f29086612d66565b6001600160a01b03891660009081526004602052604090205561331481613593565b61331e848361366a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161336391815260200190565b60405180910390a3505050505050505050565b6011544390613386906002612d66565b101580156133a15750601c546001600160a01b038481169116145b156133b5576001816000613141828461285f565b6000806000806000806133c78761361b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506133f9908761285f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b1681526005909152205461342f9084612d66565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546132f29086612d66565b601154439061346e906002612d66565b101580156134895750601c546001600160a01b038481169116145b1561349d576001816000613141828461285f565b6000806000806000806134af8761361b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506132c3908761285f565b60115443906134f1906002612d66565b1015801561350c5750601c546001600160a01b038481169116145b15613520576001816000613141828461285f565b6000806000806000806135328761361b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613564908861285f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546133f9908761285f565b600061359d61251d565b905060006135ab83836129ba565b306000908152600460205260409020549091506135c89082612d66565b30600090815260046020908152604080832093909355601a9052205460ff161561126657306000908152600560205260409020546136069084612d66565b30600090815260056020526040902055505050565b60008060008060008060008060006136328a61368e565b92509250925060008060006136508d868661364b61251d565b6136d0565b919f909e50909c50959a5093985091965092945050505050565b600e54613677908361285f565b600e55600f546136879082612d66565b600f555050565b60008060008061369d85613720565b905060006136aa8661373c565b905060006136c2826136bc898661285f565b9061285f565b979296509094509092505050565b60008080806136df88866129ba565b905060006136ed88876129ba565b905060006136fb88886129ba565b9050600061370d826136bc868661285f565b939b939a50919850919650505050505050565b600061072360646115b6601554856129ba90919063ffffffff16565b600061072360646115b6601454856129ba90919063ffffffff16565b600060208284031215613769578081fd5b8135610a2281613a48565b600060208284031215613785578081fd5b8151610a2281613a48565b600080604083850312156137a2578081fd5b82356137ad81613a48565b915060208301356137bd81613a48565b809150509250929050565b6000806000606084860312156137dc578081fd5b83356137e781613a48565b925060208401356137f781613a48565b929592945050506040919091013590565b6000806040838503121561381a578182fd5b823561382581613a48565b946020939093013593505050565b600060208284031215613844578081fd5b8135610a2281613a5d565b600060208284031215613860578081fd5b8151610a2281613a5d565b60006020828403121561387c578081fd5b5035919050565b600060208284031215613894578081fd5b5051919050565b6000806000606084860312156138af578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b818110156138f4578581018301518582016040015282016138d8565b818111156139055783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139885784516001600160a01b031683529383019391830191600101613963565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139bc576139bc613a32565b500190565b6000826139dc57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156139fb576139fb613a32565b500290565b600082821015613a1257613a12613a32565b500390565b6000600019821415613a2b57613a2b613a32565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e9457600080fd5b8015158114610e9457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201750d43a12d9988afd46038a885d38b221ed589281f68c40d5abc3603c35d1a064736f6c63430008040033

Deployed Bytecode

0x60806040526004361061021d5760003560e01c806370a082311161011d578063a9059cbb116100b0578063e98391ff1161007f578063ec28438a11610064578063ec28438a146106bd578063f4293890146106dd578063ffecf516146106f257600080fd5b8063e98391ff1461067d578063ea2f0b371461069d57600080fd5b8063a9059cbb146105e2578063b70143c914610602578063c9567bf914610622578063dd62ed3e1461063757600080fd5b806388f82020116100ec57806388f820201461051b5780638da5cb5b1461055457806395d89b411461057c578063a1012233146105c257600080fd5b806370a08231146104b1578063715018a6146104d15780637a52da0e146104e657806388a65f461461050657600080fd5b80632d838119116101b0578063437823ec1161017f57806352390c021161016457806352390c02146104385780635342acb414610458578063571cbe0a1461049157600080fd5b8063437823ec146103f8578063473071ce1461041857600080fd5b80632d8381191461037c578063313ce5671461039c57806333a17282146103b85780633685d419146103d857600080fd5b806319db2dcb116101ec57806319db2dcb146102fc57806323b872dd1461031c578063273123b71461033c57806327a14fc21461035c57600080fd5b806306fdde0314610229578063095ea7b31461028157806314b3b077146102b157806318160ddd146102d357600080fd5b3661022457005b600080fd5b34801561023557600080fd5b5060408051808201909152600881527f53686962726f626900000000000000000000000000000000000000000000000060208201525b60405161027891906138c8565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004613808565b610712565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc366004613758565b610729565b005b3480156102df57600080fd5b506b033b2e3c9fd0803ce80000005b604051908152602001610278565b34801561030857600080fd5b506102d1610317366004613758565b6107b7565b34801561032857600080fd5b506102a16103373660046137c8565b610840565b34801561034857600080fd5b506102d1610357366004613758565b6108a9565b34801561036857600080fd5b506102d161037736600461386b565b610924565b34801561038857600080fd5b506102ee61039736600461386b565b610992565b3480156103a857600080fd5b5060405160098152602001610278565b3480156103c457600080fd5b506102a16103d33660046137c8565b610a29565b3480156103e457600080fd5b506102d16103f3366004613758565b610b54565b34801561040457600080fd5b506102d1610413366004613758565b610d8d565b34801561042457600080fd5b506102d1610433366004613758565b610e0b565b34801561044457600080fd5b506102d1610453366004613758565b610e97565b34801561046457600080fd5b506102a1610473366004613758565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561049d57600080fd5b506102a16104ac3660046137c8565b611027565b3480156104bd57600080fd5b506102ee6104cc366004613758565b6110fb565b3480156104dd57600080fd5b506102d1611106565b3480156104f257600080fd5b506102d1610501366004613758565b6111b7565b34801561051257600080fd5b506102d161126b565b34801561052757600080fd5b506102a1610536366004613758565b6001600160a01b03166000908152601a602052604090205460ff1690565b34801561056057600080fd5b506000546040516001600160a01b039091168152602001610278565b34801561058857600080fd5b5060408051808201909152600781527f534849424f524700000000000000000000000000000000000000000000000000602082015261026b565b3480156105ce57600080fd5b506102d16105dd366004613758565b611491565b3480156105ee57600080fd5b506102a16105fd366004613808565b61151a565b34801561060e57600080fd5b506102d161061d36600461386b565b611527565b34801561062e57600080fd5b506102d1611603565b34801561064357600080fd5b506102ee610652366004613790565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561068957600080fd5b506102d1610698366004613833565b611b00565b3480156106a957600080fd5b506102d16106b8366004613758565b611ba5565b3480156106c957600080fd5b506102d16106d836600461386b565b611c20565b3480156106e957600080fd5b506102d1611c8e565b3480156106fe57600080fd5b506102d161070d366004613758565b611d09565b600061071f338484611dc9565b5060015b92915050565b6000546001600160a01b031633146107885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061084d848484611f21565b61089f843361089a85604051806060016040528060288152602001613a6c602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906124ec565b611dc9565b5060019392505050565b6000546001600160a01b031633146109035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b0316331461097e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b61098c81633b9aca006139e1565b60135550565b6000600e54821115610a0c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e7300000000000000000000000000000000000000000000606482015260840161077f565b6000610a1661251d565b9050610a228382611d87565b9392505050565b6002546000906001600160a01b03163314610aac5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b158015610b1357600080fd5b505af1158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b919061384f565b95945050505050565b6000546001600160a01b03163314610bae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0381166000908152601a602052604090205460ff16610c165760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161077f565b60005b600954811015610d8957816001600160a01b031660098281548110610c4e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d775760098054610c7990600190613a00565b81548110610c9757634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600980546001600160a01b039092169183908110610cd157634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559184168152600582526040808220829055601a90925220805460ff191690556009805480610d4457634e487b7160e01b600052603160045260246000fd5b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b80610d8181613a17565b915050610c19565b5050565b6000546001600160a01b03163314610de75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6002546001600160a01b03163314610e8b5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b610e9481612540565b50565b6000546001600160a01b03163314610ef15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0381166000908152601a602052604090205460ff1615610f5a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161077f565b6001600160a01b03811660009081526004602052604090205415610fb4576001600160a01b038116600090815260046020526040902054610f9a90610992565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601a60205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b6002546000906001600160a01b031633146110aa5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610af9565b60006107238261281a565b6000546001600160a01b031633146111605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6002546001600160a01b031633146112375760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b4761124182612540565b600061124d478361285f565b600254909150611266906001600160a01b0316826128a1565b505050565b6002546001600160a01b031633146112eb5760405162461bcd60e51b815260206004820152602f60248201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260448201527f43323020636f6e74726f6c6c65722e0000000000000000000000000000000000606482015260840161077f565b600354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561134957600080fd5b505afa15801561135d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113819190613774565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b1580156113df57600080fd5b505afa1580156113f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114179190613883565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146114eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061071f338484611f21565b6016546001600160a01b0316336001600160a01b0316148061155c57506017546001600160a01b0316336001600160a01b0316145b8061157a57506018546001600160a01b0316336001600160a01b0316145b8061158f57506000546001600160a01b031633145b61159857600080fd5b60006115bc6103e86115b66b033b2e3c9fd0803ce8000000856129ba565b90611d87565b6115c530612a55565b11156115ee576115e76103e86115b66b033b2e3c9fd0803ce8000000856129ba565b90506115fa565b6115f730612a55565b90505b610d8981612ab4565b6000546001600160a01b0316331461165d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b601c5474010000000000000000000000000000000000000000900460ff16156116c85760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161077f565b601b805473ffffffffffffffffffffffffffffffffffffffff1916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561171530826b033b2e3c9fd0803ce8000000611dc9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561174e57600080fd5b505afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117869190613774565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ce57600080fd5b505afa1580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118069190613774565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189e9190613774565b601c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601b541663f305d71947306118db816110fb565b6000806118f06000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561196b57600080fd5b505af115801561197f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119a4919061389b565b5050601c80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055506119ff6b033b2e3c9fd0803ce80000006032611d87565b601055611a196b033b2e3c9fd0803ce80000006019611d87565b601355601c8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff82161790915543601155601b546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b158015611ac857600080fd5b505af1158015611adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d89919061384f565b6000546001600160a01b03163314611b5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b601c80549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b611c8881633b9aca006139e1565b60105550565b6016546001600160a01b0316336001600160a01b03161480611cc357506017546001600160a01b0316336001600160a01b0316145b80611ce157506018546001600160a01b0316336001600160a01b0316145b80611cf657506000546001600160a01b031633145b611cff57600080fd5b47610e9481612cd3565b6000546001600160a01b03163314611d635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000610a2283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d38565b6001600160a01b038316611e445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b038216611ec05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6000811161208f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015260840161077f565b600960145560036015556000546001600160a01b038481169116148015906120c557506000546001600160a01b03838116911614155b80156120da57506001600160a01b0383163014155b80156120ff57506001600160a01b03831660009081526007602052604090205460ff16155b801561212457506001600160a01b03821660009081526007602052604090205460ff16155b156124d6576001600160a01b03831660009081526008602052604090205460ff1615801561216b57506001600160a01b03821660009081526008602052604090205460ff16155b6121b75760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f74732e000000000000000000000000000000000000000000000000604482015260640161077f565b601c546001600160a01b0384811691161480156121e25750601b546001600160a01b03838116911614155b801561220757506001600160a01b03821660009081526007602052604090205460ff16155b80156122215750601154439061221e906002612d66565b11155b156122dd576010548111156122785760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e00000000604482015260640161077f565b6013548161228584612a55565b61228f91906139a9565b11156122dd5760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e000000000000000000604482015260640161077f565b601c546001600160a01b0383811691161480156123085750601b546001600160a01b03838116911614155b801561232d57506001600160a01b03831660009081526007602052604090205460ff16155b15612384576010548111156123845760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e00000000604482015260640161077f565b601c546001600160a01b0383811691161480156123af5750601b546001600160a01b03848116911614155b80156123d457506001600160a01b03831660009081526007602052604090205460ff16155b156123e457600960145560036015555b60115443906123f4906002612d66565b11801561240e5750601c546001600160a01b038481169116145b1561241e57606460145560006015555b600061242930612a55565b6012549091508110801590819061245c5750601c547501000000000000000000000000000000000000000000900460ff16155b80156124765750601c546001600160a01b03868116911614155b801561249e5750601c54760100000000000000000000000000000000000000000000900460ff165b80156124ad57506124ad612dc5565b156124cf576124bd601954612ab4565b4780156124cd576124cd47612cd3565b505b50506124e1565b600060148190556015555b611266838383612dd3565b600081848411156125105760405162461bcd60e51b815260040161077f91906138c8565b506000610b4b8486613a00565b600080600061252a612f22565b90925090506125398282611d87565b9250505090565b60408051600280825260608201835283926000929190602083019080368337019050509050828160008151811061258757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156125f457600080fd5b505afa158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c9190613774565b8160018151811061264d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000918416906370a082319060240160206040518083038186803b1580156126b657600080fd5b505afa1580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee9190613883565b6003546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b15801561275757600080fd5b505af115801561276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278f919061384f565b506003546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac947906127e2908490600090879030904290600401613939565b600060405180830381600087803b1580156127fc57600080fd5b505af1158015612810573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600a602052604081205443141561285657506001600160a01b03166000908152600b602052604090205490565b61072382612a55565b6000610a2283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ec565b804710156128f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461293e576040519150601f19603f3d011682016040523d82523d6000602084013e612943565b606091505b50509050806112665760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161077f565b6000826129c957506000610723565b60006129d583856139e1565b9050826129e285836139c1565b14610a225760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161077f565b6001600160a01b0381166000908152601a602052604081205460ff1615612a9257506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461072390610992565b601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015612ba457600080fd5b505afa158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc9190613774565b81600181518110612bfd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b54612c239130911684611dc9565b601b546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790612c75908590600090869030904290600401613939565b600060405180830381600087803b158015612c8f57600080fd5b505af1158015612ca3573d6000803e3d6000fd5b5050601c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905550505050565b601654612cf8906001600160a01b0316612cf360096115b68560036129ba565b6128a1565b601754612d18906001600160a01b0316612cf360096115b68560036129ba565b601854610e94906001600160a01b0316612cf360096115b68560036129ba565b60008183612d595760405162461bcd60e51b815260040161077f91906138c8565b506000610b4b84866139c1565b600080612d7383856139a9565b905083811015610a225760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161077f565b6000620493e05a1015905090565b6001600160a01b0383166000908152601a602052604090205460ff168015612e1457506001600160a01b0382166000908152601a602052604090205460ff16155b15612e2457611266838383613102565b6001600160a01b0383166000908152601a602052604090205460ff16158015612e6557506001600160a01b0382166000908152601a602052604090205460ff165b15612e7557611266838383613376565b6001600160a01b0383166000908152601a602052604090205460ff16158015612eb757506001600160a01b0382166000908152601a602052604090205460ff16155b15612ec75761126683838361345e565b6001600160a01b0383166000908152601a602052604090205460ff168015612f0757506001600160a01b0382166000908152601a602052604090205460ff165b15612f17576112668383836134e1565b61126683838361345e565b600e5460009081906b033b2e3c9fd0803ce8000000825b6009548110156130bf57826004600060098481548110612f6957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fe25750816005600060098481548110612fbb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613001575050600e54936b033b2e3c9fd0803ce80000009350915050565b613055600460006009848154811061302957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061285f565b92506130ab600560006009848154811061307f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061285f565b9150806130b781613a17565b915050612f39565b50600e546130d9906b033b2e3c9fd0803ce8000000611d87565b8210156130f9575050600e54926b033b2e3c9fd0803ce800000092509050565b90939092509050565b6011544390613112906002612d66565b1015801561312d5750601c546001600160a01b038481169116145b15613250576001816000613141828461285f565b6001600160a01b0386166000908152600a6020908152604080832043905560049091529020549091506131749085612d66565b6001600160a01b038087166000908152600b60209081526040808320949094559189168152600490915220546131aa908361285f565b6001600160a01b0380881660009081526004602052604080822093909355908716815220546131d99084612d66565b6001600160a01b0386166000908152600460205260409020556131fb81613593565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324091815260200190565b60405180910390a3505050505050565b6000806000806000806132628761361b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613294908861285f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546132c3908761285f565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546132f29086612d66565b6001600160a01b03891660009081526004602052604090205561331481613593565b61331e848361366a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161336391815260200190565b60405180910390a3505050505050505050565b6011544390613386906002612d66565b101580156133a15750601c546001600160a01b038481169116145b156133b5576001816000613141828461285f565b6000806000806000806133c78761361b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506133f9908761285f565b6001600160a01b03808b16600090815260046020908152604080832094909455918b1681526005909152205461342f9084612d66565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546132f29086612d66565b601154439061346e906002612d66565b101580156134895750601c546001600160a01b038481169116145b1561349d576001816000613141828461285f565b6000806000806000806134af8761361b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506132c3908761285f565b60115443906134f1906002612d66565b1015801561350c5750601c546001600160a01b038481169116145b15613520576001816000613141828461285f565b6000806000806000806135328761361b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150613564908861285f565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546133f9908761285f565b600061359d61251d565b905060006135ab83836129ba565b306000908152600460205260409020549091506135c89082612d66565b30600090815260046020908152604080832093909355601a9052205460ff161561126657306000908152600560205260409020546136069084612d66565b30600090815260056020526040902055505050565b60008060008060008060008060006136328a61368e565b92509250925060008060006136508d868661364b61251d565b6136d0565b919f909e50909c50959a5093985091965092945050505050565b600e54613677908361285f565b600e55600f546136879082612d66565b600f555050565b60008060008061369d85613720565b905060006136aa8661373c565b905060006136c2826136bc898661285f565b9061285f565b979296509094509092505050565b60008080806136df88866129ba565b905060006136ed88876129ba565b905060006136fb88886129ba565b9050600061370d826136bc868661285f565b939b939a50919850919650505050505050565b600061072360646115b6601554856129ba90919063ffffffff16565b600061072360646115b6601454856129ba90919063ffffffff16565b600060208284031215613769578081fd5b8135610a2281613a48565b600060208284031215613785578081fd5b8151610a2281613a48565b600080604083850312156137a2578081fd5b82356137ad81613a48565b915060208301356137bd81613a48565b809150509250929050565b6000806000606084860312156137dc578081fd5b83356137e781613a48565b925060208401356137f781613a48565b929592945050506040919091013590565b6000806040838503121561381a578182fd5b823561382581613a48565b946020939093013593505050565b600060208284031215613844578081fd5b8135610a2281613a5d565b600060208284031215613860578081fd5b8151610a2281613a5d565b60006020828403121561387c578081fd5b5035919050565b600060208284031215613894578081fd5b5051919050565b6000806000606084860312156138af578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b818110156138f4578581018301518582016040015282016138d8565b818111156139055783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139885784516001600160a01b031683529383019391830191600101613963565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139bc576139bc613a32565b500190565b6000826139dc57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156139fb576139fb613a32565b500290565b600082821015613a1257613a12613a32565b500390565b6000600019821415613a2b57613a2b613a32565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610e9457600080fd5b8015158114610e9457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201750d43a12d9988afd46038a885d38b221ed589281f68c40d5abc3603c35d1a064736f6c63430008040033

Deployed Bytecode Sourcemap

15393:22714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18581:83;;;;;;;;;;-1:-1:-1;18651:5:0;;;;;;;;;;;;;;;;;18581:83;;;;;;;:::i;:::-;;;;;;;;19487:193;;;;;;;;;;-1:-1:-1;19487:193:0;;;;;:::i;:::-;;:::i;:::-;;;4852:14:1;;4845:22;4827:41;;4815:2;4800:18;19487:193:0;4782:92:1;26028:116:0;;;;;;;;;;-1:-1:-1;26028:116:0;;;;;:::i;:::-;;:::i;:::-;;18858:95;;;;;;;;;;-1:-1:-1;16113:27:0;18858:95;;;12560:25:1;;;12548:2;12533:18;18858:95:0;12515:76:1;26150:116:0;;;;;;;;;;-1:-1:-1;26150:116:0;;;;;:::i;:::-;;:::i;19688:446::-;;;;;;;;;;-1:-1:-1;19688:446:0;;;;;:::i;:::-;;:::i;25772:88::-;;;;;;;;;;-1:-1:-1;25772:88:0;;;;;:::i;:::-;;:::i;24485:113::-;;;;;;;;;;-1:-1:-1;24485:113:0;;;;;:::i;:::-;;:::i;27799:253::-;;;;;;;;;;-1:-1:-1;27799:253:0;;;;;:::i;:::-;;:::i;18767:83::-;;;;;;;;;;-1:-1:-1;18767:83:0;;17336:1;13772:36:1;;13760:2;13745:18;18767:83:0;13727:87:1;12398:273:0;;;;;;;;;;-1:-1:-1;12398:273:0;;;;;:::i;:::-;;:::i;37614:490::-;;;;;;;;;;-1:-1:-1;37614:490:0;;;;;:::i;:::-;;:::i;37030:113::-;;;;;;;;;;-1:-1:-1;37030:113:0;;;;;:::i;:::-;;:::i;13062:112::-;;;;;;;;;;-1:-1:-1;13062:112:0;;;;;:::i;:::-;;:::i;37273:333::-;;;;;;;;;;-1:-1:-1;37273:333:0;;;;;:::i;:::-;;:::i;36530:123::-;;;;;;;;;;-1:-1:-1;36530:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36618:27:0;36594:4;36618:27;;;:18;:27;;;;;;;;;36530:123;12732:279;;;;;;;;;;-1:-1:-1;12732:279:0;;;;;:::i;:::-;;:::i;18961:119::-;;;;;;;;;;-1:-1:-1;18961:119:0;;;;;:::i;:::-;;:::i;11402:148::-;;;;;;;;;;;;;:::i;13813:396::-;;;;;;;;;;-1:-1:-1;13813:396:0;;;;;:::i;:::-;;:::i;14281:210::-;;;;;;;;;;;;;:::i;27671:120::-;;;;;;;;;;-1:-1:-1;27671:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27763:20:0;27739:4;27763:20;;;:11;:20;;;;;;;;;27671:120;11188:79;;;;;;;;;;-1:-1:-1;11226:7:0;11253:6;11188:79;;-1:-1:-1;;;;;11253:6:0;;;3333:74:1;;3321:2;3306:18;11188:79:0;3288:125:1;18672:87:0;;;;;;;;;;-1:-1:-1;18744:7:0;;;;;;;;;;;;;;;;;18672:87;;26276:116;;;;;;;;;;-1:-1:-1;26276:116:0;;;;;:::i;:::-;;:::i;19088:199::-;;;;;;;;;;-1:-1:-1;19088:199:0;;;;;:::i;:::-;;:::i;26437:513::-;;;;;;;;;;-1:-1:-1;26437:513:0;;;;;:::i;:::-;;:::i;24608:1061::-;;;;;;;;;;;;;:::i;19295:184::-;;;;;;;;;;-1:-1:-1;19295:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;19444:18:0;;;19412:7;19444:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19295:184;23294:97;;;;;;;;;;-1:-1:-1;23294:97:0;;;;;:::i;:::-;;:::i;37155:112::-;;;;;;;;;;-1:-1:-1;37155:112:0;;;;;:::i;:::-;;:::i;24374:105::-;;;;;;;;;;-1:-1:-1;24374:105:0;;;;;:::i;:::-;;:::i;26958:291::-;;;;;;;;;;;;;:::i;25677:87::-;;;;;;;;;;-1:-1:-1;25677:87:0;;;;;:::i;:::-;;:::i;19487:193::-;19589:4;19611:39;8771:10;19634:7;19643:6;19611:8;:39::i;:::-;-1:-1:-1;19668:4:0;19487:193;;;;;:::o;26028:116::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;;;;;;;;;26100:15:::1;:36:::0;;-1:-1:-1;;26100:36:0::1;-1:-1:-1::0;;;;;26100:36:0;;;::::1;::::0;;;::::1;::::0;;26028:116::o;26150:::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;26222:15:::1;:36:::0;;-1:-1:-1;;26222:36:0::1;-1:-1:-1::0;;;;;26222:36:0;;;::::1;::::0;;;::::1;::::0;;26150:116::o;19688:446::-;19820:4;19837:36;19847:6;19855:9;19866:6;19837:9;:36::i;:::-;19884:220;19907:6;8771:10;19955:138;20011:6;19955:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19955:19:0;;;;;;:11;:19;;;;;;;;8771:10;19955:33;;;;;;;;;;:37;:138::i;:::-;19884:8;:220::i;:::-;-1:-1:-1;20122:4:0;19688:446;;;;;:::o;25772:88::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;25832:12:0::1;25847:5;25832:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;25832:20:0::1;::::0;;25772:88::o;24485:113::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;24576:14:::1;:6:::0;24585:5:::1;24576:14;:::i;:::-;24557:16;:33:::0;-1:-1:-1;24485:113:0:o;27799:253::-;27865:7;27904;;27893;:18;;27885:73;;;;-1:-1:-1;;;27885:73:0;;6152:2:1;27885:73:0;;;6134:21:1;6191:2;6171:18;;;6164:30;6230:34;6210:18;;;6203:62;6301:12;6281:18;;;6274:40;6331:19;;27885:73:0;6124:232:1;27885:73:0;27969:19;27992:10;:8;:10::i;:::-;27969:33;-1:-1:-1;28020:24:0;:7;27969:33;28020:11;:24::i;:::-;28013:31;27799:253;-1:-1:-1;;;27799:253:0:o;12398:273::-;12222:11;;12550:4;;-1:-1:-1;;;;;12222:11:0;8771:10;12222:27;12200:124;;;;-1:-1:-1;;;12200:124:0;;9992:2:1;12200:124:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;10141:17;10121:18;;;10114:45;10176:19;;12200:124:0;9964:237:1;12200:124:0;12627:36:::1;::::0;;;;-1:-1:-1;;;;;3942:55:1;;;12627:36:0::1;::::0;::::1;3924:74:1::0;4014:18;;;4007:34;;;12595:13:0;;12627:19;;::::1;::::0;::::1;::::0;3897:18:1;;12627:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12620:43:::0;12398:273;-1:-1:-1;;;;;12398:273:0:o;37614:490::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;37707:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37699:60;;;::::0;-1:-1:-1;;;37699:60:0;;8463:2:1;37699:60:0::1;::::0;::::1;8445:21:1::0;8502:2;8482:18;;;8475:30;8541:29;8521:18;;;8514:57;8588:18;;37699:60:0::1;8435:177:1::0;37699:60:0::1;37775:9;37770:327;37794:9;:16:::0;37790:20;::::1;37770:327;;;37852:7;-1:-1:-1::0;;;;;37836:23:0::1;:9;37846:1;37836:12;;;;;;-1:-1:-1::0;;;37836:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37836:12:0::1;:23;37832:254;;;37895:9;37905:16:::0;;:20:::1;::::0;37924:1:::1;::::0;37905:20:::1;:::i;:::-;37895:31;;;;;;-1:-1:-1::0;;;37895:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;37880:9:::1;:12:::0;;-1:-1:-1;;;;;37895:31:0;;::::1;::::0;37890:1;;37880:12;::::1;;;-1:-1:-1::0;;;37880:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;37880:46:0::1;-1:-1:-1::0;;;;;37880:46:0;;::::1;;::::0;;37945:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;37984:11:::1;:20:::0;;;;:28;;-1:-1:-1;;37984:28:0::1;::::0;;38031:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;38031:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38031:15:0;;;;;-1:-1:-1;;38031:15:0::1;::::0;;;;;37770:327:::1;37614:490:::0;:::o;37832:254::-:1;37812:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37770:327;;;;37614:490:::0;:::o;37030:113::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;37101:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37101:34:0::1;37131:4;37101:34;::::0;;37030:113::o;13062:112::-;12222:11;;-1:-1:-1;;;;;12222:11:0;8771:10;12222:27;12200:124;;;;-1:-1:-1;;;12200:124:0;;9992:2:1;12200:124:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;10141:17;10121:18;;;10114:45;10176:19;;12200:124:0;9964:237:1;12200:124:0;13146:20:::1;13152:13;13146:5;:20::i;:::-;13062:112:::0;:::o;37273:333::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;37356:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37355:21;37347:61;;;::::0;-1:-1:-1;;;37347:61:0;;7322:2:1;37347:61:0::1;::::0;::::1;7304:21:1::0;7361:2;7341:18;;;7334:30;7400:29;7380:18;;;7373:57;7447:18;;37347:61:0::1;7294:177:1::0;37347:61:0::1;-1:-1:-1::0;;;;;37422:16:0;::::1;37441:1;37422:16:::0;;;:7:::1;:16;::::0;;;;;:20;37419:108:::1;;-1:-1:-1::0;;;;;37498:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37478:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37459:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37419:108:::1;-1:-1:-1::0;;;;;37537:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37537:27:0::1;37560:4;37537:27:::0;;::::1;::::0;;;37575:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;37575:23:0::1;::::0;;::::1;::::0;;37273:333::o;12732:279::-;12222:11;;12887:4;;-1:-1:-1;;;;;12222:11:0;8771:10;12222:27;12200:124;;;;-1:-1:-1;;;12200:124:0;;9992:2:1;12200:124:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;10141:17;10121:18;;;10114:45;10176:19;;12200:124:0;9964:237:1;12200:124:0;12964:39:::1;::::0;;;;-1:-1:-1;;;;;3942:55:1;;;12964:39:0::1;::::0;::::1;3924:74:1::0;4014:18;;;4007:34;;;12932:13:0;;12964:20;;::::1;::::0;::::1;::::0;3897:18:1;;12964:39:0::1;3879:168:1::0;18961:119:0;19027:7;19054:18;19064:7;19054:9;:18::i;11402:148::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;11509:1:::1;11493:6:::0;;11472:40:::1;::::0;-1:-1:-1;;;;;11493:6:0;;::::1;::::0;11472:40:::1;::::0;11509:1;;11472:40:::1;11540:1;11523:19:::0;;-1:-1:-1;;11523:19:0::1;::::0;;11402:148::o;13813:396::-;12222:11;;-1:-1:-1;;;;;12222:11:0;8771:10;12222:27;12200:124;;;;-1:-1:-1;;;12200:124:0;;9992:2:1;12200:124:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;10141:17;10121:18;;;10114:45;10176:19;;12200:124:0;9964:237:1;12200:124:0;13944:21:::1;13976:20;13982:13:::0;13976:5:::1;:20::i;:::-;14007:11;14021:33;:21;14047:6:::0;14021:25:::1;:33::i;:::-;14183:11;::::0;14007:47;;-1:-1:-1;14157:44:0::1;::::0;-1:-1:-1;;;;;14183:11:0::1;14007:47:::0;14157:17:::1;:44::i;:::-;12335:1;;13813:396:::0;:::o;14281:210::-;12222:11;;-1:-1:-1;;;;;12222:11:0;8771:10;12222:27;12200:124;;;;-1:-1:-1;;;12200:124:0;;9992:2:1;12200:124:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;10141:17;10121:18;;;10114:45;10176:19;;12200:124:0;9964:237:1;12200:124:0;14385:7:::1;::::0;:14:::1;::::0;;;;;;;14352:17:::1;::::0;-1:-1:-1;;;;;14385:7:0::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14425:29;::::0;;;;14448:4:::1;14425:29;::::0;::::1;3333:74:1::0;14352:48:0;;-1:-1:-1;14411:11:0::1;::::0;-1:-1:-1;;;;;14425:14:0;::::1;::::0;::::1;::::0;3306:18:1;;14425:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14465:18;::::0;;;;::::1;::::0;::::1;12560:25:1::0;;;14411:43:0;;-1:-1:-1;;;;;;14465:13:0;::::1;::::0;::::1;::::0;12533:18:1;;14465::0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12335:1;;14281:210::o:0;26276:116::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;26348:15:::1;:36:::0;;-1:-1:-1;;26348:36:0::1;-1:-1:-1::0;;;;;26348:36:0;;;::::1;::::0;;;::::1;::::0;;26276:116::o;19088:199::-;19193:4;19215:42;8771:10;19239:9;19250:6;19215:9;:42::i;26437:513::-;26518:15;;-1:-1:-1;;;;;26518:15:0;8771:10;-1:-1:-1;;;;;26502:31:0;;:66;;;-1:-1:-1;26553:15:0;;-1:-1:-1;;;;;26553:15:0;8771:10;-1:-1:-1;;;;;26537:31:0;;26502:66;:101;;;-1:-1:-1;26588:15:0;;-1:-1:-1;;;;;26588:15:0;8771:10;-1:-1:-1;;;;;26572:31:0;;26502:101;:128;;;-1:-1:-1;11226:7:0;11253:6;-1:-1:-1;;;;;11253:6:0;8771:10;26607:23;26502:128;26494:137;;;;;;26693:12;26748:30;26773:4;26748:20;16113:27;26760:7;26748:11;:20::i;:::-;:24;;:30::i;:::-;26719:26;26739:4;26719:11;:26::i;:::-;:59;26716:194;;;26802:30;26827:4;26802:20;16113:27;26814:7;26802:11;:20::i;:30::-;26795:37;;26716:194;;;26872:26;26892:4;26872:11;:26::i;:::-;26865:33;;26716:194;26920:22;26937:4;26920:16;:22::i;24608:1061::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;24670:11:::1;::::0;;;::::1;;;24669:12;24661:48;;;::::0;-1:-1:-1;;;24661:48:0;;11907:2:1;24661:48:0::1;::::0;::::1;11889:21:1::0;11946:2;11926:18;;;11919:30;11985:25;11965:18;;;11958:53;12028:18;;24661:48:0::1;11879:173:1::0;24661:48:0::1;24855:15;:34:::0;;-1:-1:-1;;24855:34:0::1;24791:42;24855:34:::0;;::::1;::::0;;;24900:58:::1;24917:4;24791:42:::0;16113:27:::1;24900:8;:58::i;:::-;25003:16;-1:-1:-1::0;;;;;25003:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24985:70:0::1;;25064:4;25071:16;-1:-1:-1::0;;;;;25071:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24985:110;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;3671:15:1;;;24985:110:0::1;::::0;::::1;3653:34:1::0;3723:15;;3703:18;;;3696:43;3565:18;;24985:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24969:13;:126:::0;;-1:-1:-1;;24969:126:0::1;-1:-1:-1::0;;;;;24969:126:0;;::::1;;::::0;;25106:15:::1;::::0;::::1;:31;25145:21;25190:4;25210:24;25190:4:::0;25210:9:::1;:24::i;:::-;25249:1;25265::::0;25281:7:::1;11226::::0;11253:6;-1:-1:-1;;;;;11253:6:0;;11188:79;25281:7:::1;25106:223;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;4434:15:1;;;25106:223:0::1;::::0;::::1;4416:34:1::0;4466:18;;;4459:34;;;;4509:18;;;4502:34;;;;4552:18;;;4545:34;4616:15;;;4595:19;;;4588:44;25303:15:0::1;4648:19:1::0;;;4641:35;4327:19;;25106:223:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25340:11:0::1;:18:::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;25400:15:0::1;16113:27;25412:2;25400:11;:15::i;:::-;25385:12;:30:::0;25460:15:::1;16113:27;25472:2;25460:11;:15::i;:::-;25441:16;:34:::0;25486:11:::1;:18:::0;;;;;::::1;;::::0;;;25527:12:::1;25515:9;:24:::0;25602:15:::1;::::0;25550:111:::1;::::0;;;;-1:-1:-1;;;;;25602:15:0;;::::1;25550:111;::::0;::::1;3924:74:1::0;-1:-1:-1;;4014:18:1;;;4007:34;25557:13:0;;;25550:29:::1;::::0;3897:18:1;;25550:111:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23294:97::-:0;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;23367:6:::1;:16:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;23294:97::o;37155:112::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;37224:27:0::1;37254:5;37224:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37224:35:0::1;::::0;;37155:112::o;24374:105::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;24457:14:::1;:6:::0;24466:5:::1;24457:14;:::i;:::-;24442:12;:29:::0;-1:-1:-1;24374:105:0:o;26958:291::-;27024:15;;-1:-1:-1;;;;;27024:15:0;8771:10;-1:-1:-1;;;;;27008:31:0;;:66;;;-1:-1:-1;27059:15:0;;-1:-1:-1;;;;;27059:15:0;8771:10;-1:-1:-1;;;;;27043:31:0;;27008:66;:101;;;-1:-1:-1;27094:15:0;;-1:-1:-1;;;;;27094:15:0;8771:10;-1:-1:-1;;;;;27078:31:0;;27008:101;:128;;;-1:-1:-1;11226:7:0;11253:6;-1:-1:-1;;;;;11253:6:0;8771:10;27113:23;27008:128;27000:137;;;;;;27177:21;27209:32;27177:21;27209:12;:32::i;25677:87::-;11315:6;;-1:-1:-1;;;;;11315:6:0;8771:10;11315:22;11307:67;;;;-1:-1:-1;;;11307:67:0;;9221:2:1;11307:67:0;;;9203:21:1;;;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;9351:18;;11307:67:0;9193:182:1;11307:67:0;-1:-1:-1;;;;;25737:12:0::1;;::::0;;;:4:::1;:12;::::0;;;;:19;;-1:-1:-1;;25737:19:0::1;25752:4;25737:19;::::0;;25677:87::o;10439:132::-;10497:7;10524:39;10528:1;10531;10524:39;;;;;;;;;;;;;;;;;:3;:39::i;20144:369::-;-1:-1:-1;;;;;20271:19:0;;20263:68;;;;-1:-1:-1;;;20263:68:0;;11502:2:1;20263:68:0;;;11484:21:1;11541:2;11521:18;;;11514:30;11580:34;11560:18;;;11553:62;11651:6;11631:18;;;11624:34;11675:19;;20263:68:0;11474:226:1;20263:68:0;-1:-1:-1;;;;;20350:21:0;;20342:68;;;;-1:-1:-1;;;20342:68:0;;6563:2:1;20342:68:0;;;6545:21:1;6602:2;6582:18;;;6575:30;6641:34;6621:18;;;6614:62;6712:4;6692:18;;;6685:32;6734:19;;20342:68:0;6535:224:1;20342:68:0;-1:-1:-1;;;;;20421:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20473:32;;12560:25:1;;;20473:32:0;;12533:18:1;20473:32:0;;;;;;;20144:369;;;:::o;20521:2765::-;-1:-1:-1;;;;;20645:18:0;;20637:68;;;;-1:-1:-1;;;20637:68:0;;11096:2:1;20637:68:0;;;11078:21:1;11135:2;11115:18;;;11108:30;11174:34;11154:18;;;11147:62;11245:7;11225:18;;;11218:35;11270:19;;20637:68:0;11068:227:1;20637:68:0;-1:-1:-1;;;;;20724:16:0;;20716:64;;;;-1:-1:-1;;;20716:64:0;;5748:2:1;20716:64:0;;;5730:21:1;5787:2;5767:18;;;5760:30;5826:34;5806:18;;;5799:62;5897:5;5877:18;;;5870:33;5920:19;;20716:64:0;5720:225:1;20716:64:0;20808:1;20799:6;:10;20791:64;;;;-1:-1:-1;;;20791:64:0;;9582:2:1;20791:64:0;;;9564:21:1;9621:2;9601:18;;;9594:30;9660:34;9640:18;;;9633:62;9731:11;9711:18;;;9704:39;9760:19;;20791:64:0;9554:231:1;20791:64:0;20895:1;20885:7;:11;20921:1;20907:11;:15;-1:-1:-1;11253:6:0;-1:-1:-1;;;;;20937:15:0;;;11253:6;;20937:15;;;;:32;;-1:-1:-1;11226:7:0;11253:6;-1:-1:-1;;;;;20956:13:0;;;11253:6;;20956:13;;20937:32;:57;;;;-1:-1:-1;;;;;;20973:21:0;;20989:4;20973:21;;20937:57;:86;;;;-1:-1:-1;;;;;;20999:24:0;;;;;;:18;:24;;;;;;;;20998:25;20937:86;:113;;;;-1:-1:-1;;;;;;21028:22:0;;;;;;:18;:22;;;;;;;;21027:23;20937:113;20933:2301;;;-1:-1:-1;;;;;21104:10:0;;;;;;:4;:10;;;;;;;;21103:11;:24;;;;-1:-1:-1;;;;;;21119:8:0;;;;;;:4;:8;;;;;;;;21118:9;21103:24;21095:45;;;;-1:-1:-1;;;21095:45:0;;10760:2:1;21095:45:0;;;10742:21:1;10799:1;10779:18;;;10772:29;10837:10;10817:18;;;10810:38;10865:18;;21095:45:0;10732:157:1;21095:45:0;21279:13;;-1:-1:-1;;;;;21271:21:0;;;21279:13;;21271:21;:72;;;;-1:-1:-1;21327:15:0;;-1:-1:-1;;;;;21313:30:0;;;21327:15;;21313:30;;21271:72;:116;;;;-1:-1:-1;;;;;;21365:22:0;;;;;;:18;:22;;;;;;;;21364:23;21271:116;:171;;;;-1:-1:-1;21408:9:0;;21430:12;;21408:18;;16657:1;21408:13;:18::i;:::-;:34;;21271:171;21249:500;;;21556:12;;21546:6;:22;;21538:63;;;;-1:-1:-1;;;21538:63:0;;12259:2:1;21538:63:0;;;12241:21:1;12298:2;12278:18;;;12271:30;12337;12317:18;;;12310:58;12385:18;;21538:63:0;12231:178:1;21538:63:0;21687:16;;21677:6;21659:15;21671:2;21659:11;:15::i;:::-;:24;;;;:::i;:::-;:44;;21651:80;;;;-1:-1:-1;;;21651:80:0;;10408:2:1;21651:80:0;;;10390:21:1;10447:2;10427:18;;;10420:30;10486:25;10466:18;;;10459:53;10529:18;;21651:80:0;10380:173:1;21651:80:0;21772:13;;-1:-1:-1;;;;;21766:19:0;;;21772:13;;21766:19;:53;;;;-1:-1:-1;21803:15:0;;-1:-1:-1;;;;;21789:30:0;;;21803:15;;21789:30;;21766:53;:82;;;;-1:-1:-1;;;;;;21824:24:0;;;;;;:18;:24;;;;;;;;21823:25;21766:82;21763:217;;;21919:12;;21909:6;:22;;21901:63;;;;-1:-1:-1;;;21901:63:0;;12259:2:1;21901:63:0;;;12241:21:1;12298:2;12278:18;;;12271:30;12337;12317:18;;;12310:58;12385:18;;21901:63:0;12231:178:1;21901:63:0;22024:13;;-1:-1:-1;;;;;22018:19:0;;;22024:13;;22018:19;:72;;;;-1:-1:-1;22074:15:0;;-1:-1:-1;;;;;22058:32:0;;;22074:15;;22058:32;;22018:72;:118;;;;-1:-1:-1;;;;;;22112:24:0;;;;;;:18;:24;;;;;;;;22111:25;22018:118;21996:236;;;22181:1;22171:7;:11;22215:1;22201:11;:15;21996:236;22320:9;;22341:12;;22320:18;;16657:1;22320:13;:18::i;:::-;:33;:58;;;;-1:-1:-1;22365:13:0;;-1:-1:-1;;;;;22357:21:0;;;22365:13;;22357:21;22320:58;22316:148;;;22409:3;22399:7;:13;22445:1;22431:11;:15;22316:148;22480:28;22511:26;22531:4;22511:11;:26::i;:::-;22591:19;;22480:57;;-1:-1:-1;22567:43:0;;;;;;;22643:18;;-1:-1:-1;22655:6:0;;;;;;;22654:7;22643:18;:43;;;;-1:-1:-1;22673:13:0;;-1:-1:-1;;;;;22665:21:0;;;22673:13;;22665:21;;22643:43;:58;;;;-1:-1:-1;22690:11:0;;;;;;;22643:58;:75;;;;;22705:13;:11;:13::i;:::-;22639:434;;;22830:34;22847:16;;22830;:34::i;:::-;22912:21;22956:22;;22952:106;;23003:35;23016:21;23003:12;:35::i;:::-;22639:434;;20933:2301;;;;;23191:1;23181:7;:11;;;23207;:15;20933:2301;23246:32;23261:4;23267:2;23271:6;23246:14;:32::i;9953:224::-;10073:7;10109:12;10101:6;;;;10093:29;;;;-1:-1:-1;;;10093:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10133:9:0;10145:5;10149:1;10145;:5;:::i;35460:163::-;35501:7;35522:15;35539;35558:19;:17;:19::i;:::-;35521:56;;-1:-1:-1;35521:56:0;-1:-1:-1;35595:20:0;35521:56;;35595:11;:20::i;:::-;35588:27;;;;35460:163;:::o;13278:527::-;13393:16;;;13407:1;13393:16;;;;;;;;13354:3;;13326:18;;13393:16;13407:1;13393:16;;;;;;;;;;-1:-1:-1;13393:16:0;13369:40;;13430:3;13420:4;13425:1;13420:7;;;;;;-1:-1:-1;;;13420:7:0;;;;;;;;;-1:-1:-1;;;;;13420:13:0;;;:7;;;;;;;;;;:13;;;;13454:7;;:14;;;;;;;;:7;;;;;:12;;:14;;;;;13420:7;;13454:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13444:4;13449:1;13444:7;;;;;;-1:-1:-1;;;13444:7:0;;;;;;;;;-1:-1:-1;;;;;13444:24:0;;;:7;;;;;;;;;:24;13501:36;;;;;13531:4;13501:36;;;3333:74:1;13479:19:0;;13501:21;;;;;3306:18:1;;13501:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13576:7;;13548:50;;;;;-1:-1:-1;;;;;13576:7:0;;;13548:50;;;3924:74:1;4014:18;;;4007:34;;;13479:58:0;;-1:-1:-1;13548:19:0;;;;;3897:18:1;;13548:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13609:7:0;;:188;;;;;-1:-1:-1;;;;;13609:7:0;;;;:58;;:188;;13682:11;;13609:7;;13724:4;;13751;;13771:15;;13609:188;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13278:527;;;;:::o;27259:220::-;-1:-1:-1;;;;;27336:13:0;;27313:7;27336:13;;;:8;:13;;;;;;27353:12;27336:29;27333:139;;;-1:-1:-1;;;;;;27389:15:0;;;;;:10;:15;;;;;;;27259:220::o;27333:139::-;27444:16;27456:3;27444:11;:16::i;9809:136::-;9867:7;9894:43;9898:1;9901;9894:43;;;;;;;;;;;;;;;;;:3;:43::i;2651:317::-;2766:6;2741:21;:31;;2733:73;;;;-1:-1:-1;;;2733:73:0;;8105:2:1;2733:73:0;;;8087:21:1;8144:2;8124:18;;;8117:30;8183:31;8163:18;;;8156:59;8232:18;;2733:73:0;8077:179:1;2733:73:0;2820:12;2838:9;-1:-1:-1;;;;;2838:14:0;2860:6;2838:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:52;;;2890:7;2882:78;;;;-1:-1:-1;;;2882:78:0;;7678:2:1;2882:78:0;;;7660:21:1;7717:2;7697:18;;;7690:30;7756:34;7736:18;;;7729:62;7827:28;7807:18;;;7800:56;7873:19;;2882:78:0;7650:248:1;10185:246:0;10243:7;10267:6;10263:47;;-1:-1:-1;10297:1:0;10290:8;;10263:47;10320:9;10332:5;10336:1;10332;:5;:::i;:::-;10320:17;-1:-1:-1;10365:1:0;10356:5;10360:1;10320:17;10356:5;:::i;:::-;:10;10348:56;;;;-1:-1:-1;;;10348:56:0;;8819:2:1;10348:56:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;8968:3;8948:18;;;8941:31;8989:19;;10348:56:0;8791:223:1;27489:176:0;-1:-1:-1;;;;;27569:16:0;;27545:7;27569:16;;;:11;:16;;;;;;;;27565:41;;;-1:-1:-1;;;;;;27594:12:0;;;;;:7;:12;;;;;;;27489:176::o;27565:41::-;-1:-1:-1;;;;;27644:12:0;;;;;;:7;:12;;;;;;27624:33;;:19;:33::i;23399:483::-;17671:6;:13;;;;;;;;23501:16:::1;::::0;;23515:1:::1;23501:16:::0;;;;;::::1;::::0;;-1:-1:-1;;23501:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23501:16:0::1;23477:40;;23546:4;23528;23533:1;23528:7;;;;;;-1:-1:-1::0;;;23528:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23528:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23572:15:::1;::::0;:22:::1;::::0;;;;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;23528:7;;23572:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23562:4;23567:1;23562:7;;;;;;-1:-1:-1::0;;;23562:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;23562:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;23637:15:::1;::::0;23605:62:::1;::::0;23622:4:::1;::::0;23637:15:::1;23655:11:::0;23605:8:::1;:62::i;:::-;23678:15;::::0;:196:::1;::::0;;;;-1:-1:-1;;;;;23678:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;23759:11;;23678:15:::1;::::0;23801:4;;23828::::1;::::0;23848:15:::1;::::0;23678:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17707:6:0;:14;;;;;;-1:-1:-1;;;;23399:483:0:o;23888:478::-;24090:15;;24072:78;;-1:-1:-1;;;;;24090:15:0;24107:42;17053:1;24107:24;:6;16999:1;24107:10;:24::i;:42::-;24072:17;:78::i;:::-;24199:15;;24181:72;;-1:-1:-1;;;;;24199:15:0;24216:36;17053:1;24216:18;:6;16951:1;24216:10;:18::i;24181:72::-;24303:15;;24285:73;;-1:-1:-1;;;;;24303:15:0;24320:37;17053:1;24320:19;:6;16909:1;24320:10;:19::i;10579:223::-;10699:7;10734:12;10727:5;10719:28;;;;-1:-1:-1;;;10719:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10758:9:0;10770:5;10774:1;10770;:5;:::i;9622:179::-;9680:7;;9712:5;9716:1;9712;:5;:::i;:::-;9700:17;;9741:1;9736;:6;;9728:46;;;;-1:-1:-1;;;9728:46:0;;6966:2:1;9728:46:0;;;6948:21:1;7005:2;6985:18;;;6978:30;7044:29;7024:18;;;7017:57;7091:18;;9728:46:0;6938:177:1;25868:152:0;25913:4;26006:6;25993:9;:19;;25986:26;;25868:152;:::o;28141:698::-;-1:-1:-1;;;;;28239:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28263:22:0;;;;;;:11;:22;;;;;;;;28262:23;28239:46;28235:597;;;28302:48;28324:6;28332:9;28343:6;28302:21;:48::i;28235:597::-;-1:-1:-1;;;;;28373:19:0;;;;;;:11;:19;;;;;;;;28372:20;:46;;;;-1:-1:-1;;;;;;28396:22:0;;;;;;:11;:22;;;;;;;;28372:46;28368:464;;;28435:46;28455:6;28463:9;28474:6;28435:19;:46::i;28368:464::-;-1:-1:-1;;;;;28504:19:0;;;;;;:11;:19;;;;;;;;28503:20;:47;;;;-1:-1:-1;;;;;;28528:22:0;;;;;;:11;:22;;;;;;;;28527:23;28503:47;28499:333;;;28567:44;28585:6;28593:9;28604:6;28567:17;:44::i;28499:333::-;-1:-1:-1;;;;;28633:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28656:22:0;;;;;;:11;:22;;;;;;;;28633:45;28629:203;;;28695:48;28717:6;28725:9;28736:6;28695:21;:48::i;28629:203::-;28776:44;28794:6;28802:9;28813:6;28776:17;:44::i;35631:561::-;35728:7;;35681;;;;16113:27;35681:7;35788:289;35812:9;:16;35808:20;;35788:289;;;35878:7;35854;:21;35862:9;35872:1;35862:12;;;;;;-1:-1:-1;;;35862:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35862:12:0;35854:21;;;;;;;;;;;;;:31;;:66;;;35913:7;35889;:21;35897:9;35907:1;35897:12;;;;;;-1:-1:-1;;;35897:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35897:12:0;35889:21;;;;;;;;;;;;;:31;35854:66;35850:97;;;-1:-1:-1;;35930:7:0;;;16113:27;;-1:-1:-1;35631:561:0;-1:-1:-1;;35631:561:0:o;35850:97::-;35972:34;35984:7;:21;35992:9;36002:1;35992:12;;;;;;-1:-1:-1;;;35992:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35992:12:0;35984:21;;;;;;;;;;;;;35972:7;;:11;:34::i;:::-;35962:44;;36031:34;36043:7;:21;36051:9;36061:1;36051:12;;;;;;-1:-1:-1;;;36051:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36051:12:0;36043:21;;;;;;;;;;;;;36031:7;;:11;:34::i;:::-;36021:44;-1:-1:-1;35830:3:0;;;;:::i;:::-;;;;35788:289;;;-1:-1:-1;36101:7:0;;:20;;16113:27;36101:11;:20::i;:::-;36091:7;:30;36087:61;;;-1:-1:-1;;36131:7:0;;;16113:27;;-1:-1:-1;35631:561:0;-1:-1:-1;35631:561:0:o;36087:61::-;36167:7;;36176;;-1:-1:-1;35631:561:0;-1:-1:-1;35631:561:0:o;31415:1298::-;31520:9;;31542:12;;31520:18;;16657:1;31520:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;31568:13:0;;-1:-1:-1;;;;;31558:23:0;;;31568:13;;31558:23;31520:61;31517:1189;;;31674:1;31708:7;31648:23;31746:28;31708:7;31674:1;31746:11;:28::i;:::-;-1:-1:-1;;;;;31838:19:0;;;;;;:8;:19;;;;;;;;31860:12;31838:34;;31911:7;:18;;;;;;31730:44;;-1:-1:-1;31911:31:0;;31934:7;31911:22;:31::i;:::-;-1:-1:-1;;;;;31887:21:0;;;;;;;:10;:21;;;;;;;;:55;;;;32012:15;;;;;:7;:15;;;;;:28;;32032:7;32012:19;:28::i;:::-;-1:-1:-1;;;;;31994:15:0;;;;;;;:7;:15;;;;;;:46;;;;32076:18;;;;;;;:39;;32099:15;32076:22;:39::i;:::-;-1:-1:-1;;;;;32055:18:0;;;;;;:7;:18;;;;;:60;32130:17;32141:5;32130:10;:17::i;:::-;32184:9;-1:-1:-1;;;;;32167:44:0;32176:6;-1:-1:-1;;;;;32167:44:0;;32195:15;32167:44;;;;12560:25:1;;12548:2;12533:18;;12515:76;32167:44:0;;;;;;;;31517:1189;;;12335:1:::1;;13813:396:::0;:::o;31517:1189::-;32243:15;32260:23;32285:12;32299:23;32324:12;32338:18;32360:19;32371:7;32360:10;:19::i;:::-;-1:-1:-1;;;;;32408:15:0;;;;;;:7;:15;;;;;;32242:137;;-1:-1:-1;32242:137:0;;-1:-1:-1;32242:137:0;;-1:-1:-1;32242:137:0;-1:-1:-1;32242:137:0;-1:-1:-1;32242:137:0;-1:-1:-1;32408:28:0;;32428:7;32408:19;:28::i;:::-;-1:-1:-1;;;;;32390:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32465:7;:15;;;;:28;;32485:7;32465:19;:28::i;:::-;-1:-1:-1;;;;;32447:15:0;;;;;;;:7;:15;;;;;;:46;;;;32525:18;;;;;;;:39;;32548:15;32525:22;:39::i;:::-;-1:-1:-1;;;;;32504:18:0;;;;;;:7;:18;;;;;:60;32578:22;32589:10;32578;:22::i;:::-;32611:23;32623:4;32629;32611:11;:23::i;:::-;32667:9;-1:-1:-1;;;;;32650:44:0;32659:6;-1:-1:-1;;;;;32650:44:0;;32678:15;32650:44;;;;12560:25:1;;12548:2;12533:18;;12515:76;32650:44:0;;;;;;;;31517:1189;;;;;;31415:1298;;;:::o;30089:1318::-;30192:9;;30214:12;;30192:18;;16657:1;30192:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;30240:13:0;;-1:-1:-1;;;;;30230:23:0;;;30240:13;;30230:23;30192:61;30189:1211;;;30346:1;30380:7;30320:23;30418:28;30380:7;30346:1;30418:11;:28::i;30189:1211::-;30915:15;30932:23;30957:12;30971:23;30996:12;31010:18;31032:19;31043:7;31032:10;:19::i;:::-;-1:-1:-1;;;;;31080:15:0;;;;;;:7;:15;;;;;;30914:137;;-1:-1:-1;30914:137:0;;-1:-1:-1;30914:137:0;;-1:-1:-1;30914:137:0;-1:-1:-1;30914:137:0;-1:-1:-1;30914:137:0;-1:-1:-1;31080:28:0;;30914:137;31080:19;:28::i;:::-;-1:-1:-1;;;;;31062:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31140:18;;;;;:7;:18;;;;;:39;;31163:15;31140:22;:39::i;:::-;-1:-1:-1;;;;;31119:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31211:7;:18;;;;:39;;31234:15;31211:22;:39::i;28847:1234::-;28948:9;;28970:12;;28948:18;;16657:1;28948:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;28996:13:0;;-1:-1:-1;;;;;28986:23:0;;;28996:13;;28986:23;28948:61;28945:1129;;;29102:1;29136:7;29076:23;29174:28;29136:7;29102:1;29174:11;:28::i;28945:1129::-;29671:15;29688:23;29713:12;29727:23;29752:12;29766:18;29788:19;29799:7;29788:10;:19::i;:::-;-1:-1:-1;;;;;29836:15:0;;;;;;:7;:15;;;;;;29670:137;;-1:-1:-1;29670:137:0;;-1:-1:-1;29670:137:0;;-1:-1:-1;29670:137:0;-1:-1:-1;29670:137:0;-1:-1:-1;29670:137:0;-1:-1:-1;29836:28:0;;29670:137;29836:19;:28::i;32721:1374::-;32826:9;;32848:12;;32826:18;;16657:1;32826:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;32874:13:0;;-1:-1:-1;;;;;32864:23:0;;;32874:13;;32864:23;32826:61;32823:1265;;;32980:1;33014:7;32954:23;33052:28;33014:7;32980:1;33052:11;:28::i;32823:1265::-;33549:15;33566:23;33591:12;33605:23;33630:12;33644:18;33666:19;33677:7;33666:10;:19::i;:::-;-1:-1:-1;;;;;33714:15:0;;;;;;:7;:15;;;;;;33548:137;;-1:-1:-1;33548:137:0;;-1:-1:-1;33548:137:0;;-1:-1:-1;33548:137:0;-1:-1:-1;33548:137:0;-1:-1:-1;33548:137:0;-1:-1:-1;33714:28:0;;33734:7;33714:19;:28::i;:::-;-1:-1:-1;;;;;33696:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33771:7;:15;;;;:28;;33791:7;33771:19;:28::i;36667:351::-;36726:19;36749:10;:8;:10::i;:::-;36726:33;-1:-1:-1;36770:18:0;36791:27;:10;36726:33;36791:14;:27::i;:::-;36870:4;36854:22;;;;:7;:22;;;;;;36770:48;;-1:-1:-1;36854:38:0;;36770:48;36854:26;:38::i;:::-;36845:4;36829:22;;;;:7;:22;;;;;;;;:63;;;;36906:11;:26;;;;;;36903:107;;;36988:4;36972:22;;;;:7;:22;;;;;;:38;;36999:10;36972:26;:38::i;:::-;36963:4;36947:22;;;;:7;:22;;;;;:63;36667:351;;;:::o;34258:419::-;34317:7;34326;34335;34344;34353;34362;34383:23;34408:12;34422:18;34444:20;34456:7;34444:11;:20::i;:::-;34382:82;;;;;;34476:15;34493:23;34518:12;34534:50;34546:7;34555:4;34561:10;34573;:8;:10::i;:::-;34534:11;:50::i;:::-;34475:109;;;;-1:-1:-1;34475:109:0;;-1:-1:-1;34635:15:0;;-1:-1:-1;34652:4:0;;-1:-1:-1;34658:10:0;;-1:-1:-1;34258:419:0;;-1:-1:-1;;;;;34258:419:0:o;34103:147::-;34181:7;;:17;;34193:4;34181:11;:17::i;:::-;34171:7;:27;34222:10;;:20;;34237:4;34222:14;:20::i;:::-;34209:10;:33;-1:-1:-1;;34103:147:0:o;34685:330::-;34745:7;34754;34763;34783:12;34798:28;34818:7;34798:19;:28::i;:::-;34783:43;;34837:18;34858:26;34876:7;34858:17;:26::i;:::-;34837:47;-1:-1:-1;34895:23:0;34921:33;34837:47;34921:17;:7;34933:4;34921:11;:17::i;:::-;:21;;:33::i;:::-;34895:59;34990:4;;-1:-1:-1;34996:10:0;;-1:-1:-1;34685:330:0;;-1:-1:-1;;;34685:330:0:o;35023:429::-;35138:7;;;;35194:24;:7;35206:11;35194;:24::i;:::-;35176:42;-1:-1:-1;35229:12:0;35244:21;:4;35253:11;35244:8;:21::i;:::-;35229:36;-1:-1:-1;35276:18:0;35297:27;:10;35312:11;35297:14;:27::i;:::-;35276:48;-1:-1:-1;35335:23:0;35361:33;35276:48;35361:17;:7;35373:4;35361:11;:17::i;:33::-;35413:7;;;;-1:-1:-1;35439:4:0;;-1:-1:-1;35023:429:0;;-1:-1:-1;;;;;;;35023:429:0:o;36200:160::-;36268:7;36295:57;36338:3;36295:24;36307:11;;36295:7;:11;;:24;;;;:::i;36368:154::-;36434:7;36461:53;36500:3;36461:20;36473:7;;36461;:11;;:20;;;;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:325::-;1484:6;1492;1545:2;1533:9;1524:7;1520:23;1516:32;1513:2;;;1566:6;1558;1551:22;1513:2;1610:9;1597:23;1629:31;1654:5;1629:31;:::i;:::-;1679:5;1731:2;1716:18;;;;1703:32;;-1:-1:-1;;;1503:238:1:o;1746:251::-;1802:6;1855:2;1843:9;1834:7;1830:23;1826:32;1823:2;;;1876:6;1868;1861:22;1823:2;1920:9;1907:23;1939:28;1961:5;1939:28;:::i;2002:255::-;2069:6;2122:2;2110:9;2101:7;2097:23;2093:32;2090:2;;;2143:6;2135;2128:22;2090:2;2180:9;2174:16;2199:28;2221:5;2199:28;:::i;2262:190::-;2321:6;2374:2;2362:9;2353:7;2349:23;2345:32;2342:2;;;2395:6;2387;2380:22;2342:2;-1:-1:-1;2423:23:1;;2332:120;-1:-1:-1;2332:120:1:o;2457:194::-;2527:6;2580:2;2568:9;2559:7;2555:23;2551:32;2548:2;;;2601:6;2593;2586:22;2548:2;-1:-1:-1;2629:16:1;;2538:113;-1:-1:-1;2538:113:1:o;2656:316::-;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:2;;;2834:6;2826;2819:22;2781:2;2868:9;2862:16;2852:26;;2918:2;2907:9;2903:18;2897:25;2887:35;;2962:2;2951:9;2947:18;2941:25;2931:35;;2771:201;;;;;:::o;4879:662::-;4991:4;5020:2;5049;5038:9;5031:21;5081:6;5075:13;5124:6;5119:2;5108:9;5104:18;5097:34;5149:4;5162:140;5176:6;5173:1;5170:13;5162:140;;;5271:14;;;5267:23;;5261:30;5237:17;;;5256:2;5233:26;5226:66;5191:10;;5162:140;;;5320:6;5317:1;5314:13;5311:2;;;5390:4;5385:2;5376:6;5365:9;5361:22;5357:31;5350:45;5311:2;-1:-1:-1;5457:2:1;5445:15;5462:66;5441:88;5426:104;;;;5532:2;5422:113;;5000:541;-1:-1:-1;;;5000:541:1:o;12596:1029::-;12858:4;12906:3;12895:9;12891:19;12937:6;12926:9;12919:25;12963:2;13001:6;12996:2;12985:9;12981:18;12974:34;13044:3;13039:2;13028:9;13024:18;13017:31;13068:6;13103;13097:13;13134:6;13126;13119:22;13172:3;13161:9;13157:19;13150:26;;13211:2;13203:6;13199:15;13185:29;;13232:4;13245:218;13259:6;13256:1;13253:13;13245:218;;;13324:13;;-1:-1:-1;;;;;13320:62:1;13308:75;;13438:15;;;;13403:12;;;;13281:1;13274:9;13245:218;;;-1:-1:-1;;;;;;;13519:55:1;;;;13514:2;13499:18;;13492:83;-1:-1:-1;;;13606:3:1;13591:19;13584:35;13480:3;12867:758;-1:-1:-1;;;12867:758:1:o;13819:128::-;13859:3;13890:1;13886:6;13883:1;13880:13;13877:2;;;13896:18;;:::i;:::-;-1:-1:-1;13932:9:1;;13867:80::o;13952:274::-;13992:1;14018;14008:2;;-1:-1:-1;;;14050:1:1;14043:88;14154:4;14151:1;14144:15;14182:4;14179:1;14172:15;14008:2;-1:-1:-1;14211:9:1;;13998:228::o;14231:::-;14271:7;14397:1;-1:-1:-1;;14325:74:1;14322:1;14319:81;14314:1;14307:9;14300:17;14296:105;14293:2;;;14404:18;;:::i;:::-;-1:-1:-1;14444:9:1;;14283:176::o;14464:125::-;14504:4;14532:1;14529;14526:8;14523:2;;;14537:18;;:::i;:::-;-1:-1:-1;14574:9:1;;14513:76::o;14594:195::-;14633:3;-1:-1:-1;;14657:5:1;14654:77;14651:2;;;14734:18;;:::i;:::-;-1:-1:-1;14781:1:1;14770:13;;14641:148::o;14794:184::-;-1:-1:-1;;;14843:1:1;14836:88;14943:4;14940:1;14933:15;14967:4;14964:1;14957:15;14983:154;-1:-1:-1;;;;;15062:5:1;15058:54;15051:5;15048:65;15038:2;;15127:1;15124;15117:12;15142:118;15228:5;15221:13;15214:21;15207:5;15204:32;15194:2;;15250:1;15247;15240:12

Swarm Source

ipfs://1750d43a12d9988afd46038a885d38b221ed589281f68c40d5abc3603c35d1a0
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.