ETH Price: $3,113.90 (+0.53%)
Gas: 4 Gwei

Token

BlackJesus (BlackCoin)
 

Overview

Max Total Supply

100,000,000 BlackCoin

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
291,735.689065274692302406 BlackCoin

Value
$0.00
0xb1c96ae71917b2e0470a51ec7377c00e6b68497c
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:
BlackJesus

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-31
*/

/**
 *Submitted for verification at Etherscan.io on 2023-05-03
*/

/**
Black Jesus 


TG: https://t.me/Black_Jesus_Telegram

Twitter:
https://twitter.com/BlackJesusToken

Website: https://blackjesuserc20.com/

Missed Jesus? Do not miss Black Jesus
 
Trending / CMC / CG
*/

// SPDX-License-Identifier: Unlicensed

    pragma solidity ^0.8.0;

    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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                uint256 c = a + b;
                if (c < a) return (false, 0);
                return (true, c);
            }
        }
        
        function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b > a) return (false, 0);
                return (true, a - b);
            }
        }
        
        function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
                // benefit is lost if 'b' is also tested.
                // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
                if (a == 0) return (true, 0);
                uint256 c = a * b;
                if (c / a != b) return (false, 0);
                return (true, c);
            }
        }
        
        function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a / b);
            }
        }
        
        function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a % b);
            }
        }

        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            return a + b;
        }


        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return a - b;
        }


        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            return a * b;
        }
        
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return a / b;
        }


        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return a % b;
        }
        
        function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b <= a, errorMessage);
                return a - b;
            }
        }
        
        function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a / b;
            }
        }
        
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a % b;
            }
        }
    }

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

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

    library Address {
        
        function isContract(address account) internal view returns (bool) {
            uint256 size;
            assembly { size := extcodesize(account) }
            return size > 0;
        }

        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");
        }
        
        function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        }
        
        function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            return functionCallWithValue(target, data, 0, errorMessage);
        }
        
        function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
            return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
        }
        
        function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
            require(address(this).balance >= value, "Address: insufficient balance for call");
            require(isContract(target), "Address: call to non-contract");
            (bool success, bytes memory returndata) = target.call{ value: value }(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }
        
        function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
            return functionStaticCall(target, data, "Address: low-level static call failed");
        }
        
        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);
        }


        function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
            return functionDelegateCall(target, data, "Address: low-level delegate call failed");
        }
        
        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);
        }

        function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
            if (success) {
                return returndata;
            } else {
                if (returndata.length > 0) {
                    assembly {
                        let returndata_size := mload(returndata)
                        revert(add(32, returndata), returndata_size)
                    }
                } else {
                    revert(errorMessage);
                }
            }
        }
    }

    abstract contract Ownable is Context {
        address internal _owner;
        address private _previousOwner;

        event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
        constructor () {
            _owner = _msgSender();
            emit OwnershipTransferred(address(0), _owner);
        }
        
        function owner() public view virtual returns (address) {
            return _owner;
        }
        
        modifier onlyOwner() {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
            _;
        }
        
        function renounceOwnership() public virtual onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = address(0);
        }


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

    interface IERC20Metadata is IERC20 {
        /**
        * @dev Returns the name of the token.
        */
        function name() external view returns (string memory);

        /**
        * @dev Returns the symbol of the token.
        */
        function symbol() external view returns (string memory);

        /**
        * @dev Returns the decimals places of the token.
        */
        function decimals() external view returns (uint8);
    }
    contract ERC20 is Context,Ownable, IERC20, IERC20Metadata {
        using SafeMath for uint256;

        mapping(address => uint256) private _balances;

        mapping(address => mapping(address => uint256)) private _allowances;

        uint256 private _totalSupply;

        string private _name;
        string private _symbol;

        /**
        * @dev Sets the values for {name} and {symbol}.
        *
        * The default value of {decimals} is 18. To select a different value for
        * {decimals} you should overload it.
        *
        * All two of these values are immutable: they can only be set once during
        * construction.
        */
        constructor(string memory name_, string memory symbol_) {
            _name = name_;
            _symbol = symbol_;
        }

        /**
        * @dev Returns the name of the token.
        */
        function name() public view virtual override returns (string memory) {
            return _name;
        }

        /**
        * @dev Returns the symbol of the token, usually a shorter version of the
        * name.
        */
        function symbol() public view virtual override returns (string memory) {
            return _symbol;
        }

        /**
        * @dev Returns the number of decimals used to get its user representation.
        * For example, if `decimals` equals `2`, a balance of `505` tokens should
        * be displayed to a user as `5,05` (`505 / 10 ** 2`).
        *
        * Tokens usually opt for a value of 18, imitating the relationship between
        * Ether and Wei. This is the value {ERC20} uses, unless this function is
        * overridden;
        *
        * NOTE: This information is only used for _display_ purposes: it in
        * no way affects any of the arithmetic of the contract, including
        * {IERC20-balanceOf} and {IERC20-transfer}.
        */
        function decimals() public view virtual override returns (uint8) {
            return 18;
        }

        /**
        * @dev See {IERC20-totalSupply}.
        */
        function totalSupply() public view virtual override returns (uint256) {
            return _totalSupply;
        }

        /**
        * @dev See {IERC20-balanceOf}.
        */
        function balanceOf(address account) public view virtual override returns (uint256) {
            return _balances[account];
        }

        /**
        * @dev See {IERC20-transfer}.
        *
        * Requirements:
        *
        * - `recipient` cannot be the zero address.
        * - the caller must have a balance of at least `amount`.
        */
        function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }

        /**
        * @dev See {IERC20-allowance}.
        */
        function allowance(address owner, address spender) public view virtual override returns (uint256) {
            return _allowances[owner][spender];
        }

        /**
        * @dev See {IERC20-approve}.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        */
        function approve(address spender, uint256 amount) public virtual override returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }

        /**
        * @dev See {IERC20-transferFrom}.
        *
        * Emits an {Approval} event indicating the updated allowance. This is not
        * required by the EIP. See the note at the beginning of {ERC20}.
        *
        * Requirements:
        *
        * - `sender` and `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        * - the caller must have allowance for ``sender``'s tokens of at least
        * `amount`.
        */
        function transferFrom(
            address sender,
            address recipient,
            uint256 amount
        ) public virtual override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

        /**
        * @dev Atomically increases the allowance granted to `spender` by the caller.
        *
        * This is an alternative to {approve} that can be used as a mitigation for
        * problems described in {IERC20-approve}.
        *
        * Emits an {Approval} event indicating the updated allowance.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        */
        function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
            return true;
        }

        /**
        * @dev Atomically decreases the allowance granted to `spender` by the caller.
        *
        * This is an alternative to {approve} that can be used as a mitigation for
        * problems described in {IERC20-approve}.
        *
        * Emits an {Approval} event indicating the updated allowance.
        *
        * Requirements:
        *
        * - `spender` cannot be the zero address.
        * - `spender` must have allowance for the caller of at least
        * `subtractedValue`.
        */
        function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
            return true;
        }

        /**
        * @dev Moves tokens `amount` from `sender` to `recipient`.
        *
        * This is internal function is equivalent to {transfer}, and can be used to
        * e.g. implement automatic token fees, slashing mechanisms, etc.
        *
        * Emits a {Transfer} event.
        *
        * Requirements:
        *
        * - `sender` cannot be the zero address.
        * - `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        */
        function _transfer(
            address sender,
            address recipient,
            uint256 amount
        ) internal virtual {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");

            _beforeTokenTransfer(sender, recipient, amount);

            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }

        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
        * the total supply.
        *
        * Emits a {Transfer} event with `from` set to the zero address.
        *
        * Requirements:
        *
        * - `account` cannot be the zero address.
        */
        function _mint(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: mint to the zero address");

            _beforeTokenTransfer(address(0), account, amount);

            _totalSupply = _totalSupply.add(amount);
            _balances[account] = _balances[account].add(amount);
            emit Transfer(address(0), account, amount);
        }

        /**
        * @dev Destroys `amount` tokens from `account`, reducing the
        * total supply.
        *
        * Emits a {Transfer} event with `to` set to the zero address.
        *
        * Requirements:
        *
        * - `account` cannot be the zero address.
        * - `account` must have at least `amount` tokens.
        */
        function _burn(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: burn from the zero address");

            _beforeTokenTransfer(account, address(0), amount);

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

        /**
        * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
        *
        * This internal function is equivalent to `approve`, and can be used to
        * e.g. set automatic allowances for certain subsystems, etc.
        *
        * Emits an {Approval} event.
        *
        * Requirements:
        *
        * - `owner` cannot be the zero address.
        * - `spender` cannot be the zero address.
        */
        function _approve(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            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);
        }

        /**
        * @dev Hook that is called before any transfer of tokens. This includes
        * minting and burning.
        *
        * Calling conditions:
        *
        * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
        * will be to transferred to `to`.
        * - when `from` is zero, `amount` tokens will be minted for `to`.
        * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
        * - `from` and `to` are never both zero.
        *
        * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
        */
        function _beforeTokenTransfer(
            address from,
            address to,
            uint256 amount
        ) internal virtual {}
    }


    interface IUniswapV2Factory {
        event PairCreated(address indexed token0, address indexed token1, address pair, uint);
        function feeTo() external view returns (address);
        function feeToSetter() external view returns (address);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
        function allPairs(uint) external view returns (address pair);
        function allPairsLength() external view returns (uint);
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function setFeeTo(address) external;
        function setFeeToSetter(address) external;
    }

    interface IUniswapV2Pair {
        event Approval(address indexed owner, address indexed spender, uint value);
        event Transfer(address indexed from, address indexed to, uint value);
        function name() external pure returns (string memory);
        function symbol() external pure returns (string memory);
        function decimals() external pure returns (uint8);
        function totalSupply() external view returns (uint);
        function balanceOf(address owner) external view returns (uint);
        function allowance(address owner, address spender) external view returns (uint);
        function approve(address spender, uint value) external returns (bool);
        function transfer(address to, uint value) external returns (bool);
        function transferFrom(address from, address to, uint value) external returns (bool);
        function DOMAIN_SEPARATOR() external view returns (bytes32);
        function PERMIT_TYPEHASH() external pure returns (bytes32);
        function nonces(address owner) external view returns (uint);
        function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
        event Mint(address indexed sender, uint amount0, uint amount1);
        event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
        event Swap(
            address indexed sender,
            uint amount0In,
            uint amount1In,
            uint amount0Out,
            uint amount1Out,
            address indexed to
        );
        event Sync(uint112 reserve0, uint112 reserve1);
        function MINIMUM_LIQUIDITY() external pure returns (uint);
        function factory() external view returns (address);
        function token0() external view returns (address);
        function token1() external view returns (address);
        function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
        function price0CumulativeLast() external view returns (uint);
        function price1CumulativeLast() external view returns (uint);
        function kLast() external view returns (uint);
        function mint(address to) external returns (uint liquidity);
        function burn(address to) external returns (uint amount0, uint amount1);
        function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
        function skim(address to) external;
        function sync() external;
        function initialize(address, address) external;
    }

    interface IUniswapV2Router01 {
        function factory() external pure returns (address);
        function WETH() external pure returns (address);
        function addLiquidity(
            address tokenA,
            address tokenB,
            uint amountADesired,
            uint amountBDesired,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB, uint liquidity);
        function addLiquidityETH(
            address token,
            uint amountTokenDesired,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
        function removeLiquidity(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline
        ) external returns (uint amountA, uint amountB);
        function removeLiquidityETH(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountToken, uint amountETH);
        function removeLiquidityWithPermit(
            address tokenA,
            address tokenB,
            uint liquidity,
            uint amountAMin,
            uint amountBMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountA, uint amountB);
        function removeLiquidityETHWithPermit(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountToken, uint amountETH);
        function swapExactTokensForTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);
        function swapTokensForExactTokens(
            uint amountOut,
            uint amountInMax,
            address[] calldata path,
            address to,
            uint deadline
        ) external returns (uint[] memory amounts);
        function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
            external
            payable
            returns (uint[] memory amounts);
        function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
            external
            returns (uint[] memory amounts);
        function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
            external
            returns (uint[] memory amounts);
        function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
            external
            payable
            returns (uint[] memory amounts);

        function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
        function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
        function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
        function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
        function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    }

    interface IUniswapV2Router02 is IUniswapV2Router01 {
        function removeLiquidityETHSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline
        ) external returns (uint amountETH);
        function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
            address token,
            uint liquidity,
            uint amountTokenMin,
            uint amountETHMin,
            address to,
            uint deadline,
            bool approveMax, uint8 v, bytes32 r, bytes32 s
        ) external returns (uint amountETH);

        function swapExactTokensForTokensSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;
        function swapExactETHForTokensSupportingFeeOnTransferTokens(
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external payable;
        function swapExactTokensForETHSupportingFeeOnTransferTokens(
            uint amountIn,
            uint amountOutMin,
            address[] calldata path,
            address to,
            uint deadline
        ) external;
    }

    contract BlackJesus is ERC20 {
        using SafeMath for uint256;
        using Address for address;

        mapping (address => bool) private _isExcludedFromFee;
        mapping(address => bool) private _isExcludedFromMaxWallet;
        mapping(address => bool) private _isExcludedFromMaxTnxLimit;

        address public _devWalletAddress;    

        uint256 public _buyDevFee = 10;  
        uint256 public _sellDevFee = 10; 

        IUniswapV2Router02 public uniswapV2Router;
        address public uniswapV2Pair;
        bool inSwapAndLiquify;
        bool public swapAndSendFeeEnabled = true;
        uint256 public _maxWalletBalance;
        uint256 public _maxTxAmount;
        uint256 public numTokensSellToSendEthToDev;
        event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
        event swapAndSendFeeEnabledUpdated(bool enabled);
        event SwapAndLiquify(
            uint256 tokensSwapped,
            uint256 ethReceived,
            uint256 tokensIntoLiqudity
        );
        
        modifier lockTheSwap {
            inSwapAndLiquify = true;
            _;
            inSwapAndLiquify = false;
        }
        
        constructor () ERC20("BlackJesus", "BlackCoin"){

            numTokensSellToSendEthToDev = 2000000 * 10 ** decimals();
            _devWalletAddress = 0xC8Cc4990CD8d39837709973Fe3c154C0c82DAAca;
            
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            // Create a uniswap pair for this new token
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());

            // set the rest of the contract variables
            uniswapV2Router = _uniswapV2Router;
            
            //exclude owner and this contract from fee
            _isExcludedFromFee[_msgSender()] = true;
            _isExcludedFromFee[address(this)] = true;
            _isExcludedFromFee[_devWalletAddress] = true;

            // exclude from the Max wallet balance 
            _isExcludedFromMaxWallet[owner()] = true;
            _isExcludedFromMaxWallet[address(this)] = true;
            _isExcludedFromMaxWallet[_devWalletAddress] = true;

            // exclude from the max tnx limit 
            _isExcludedFromMaxTnxLimit[owner()] = true;
            _isExcludedFromMaxTnxLimit[address(this)] = true;
            _isExcludedFromMaxTnxLimit[_devWalletAddress] = true;


            /*
                _mint is an internal function in ERC20.sol that is only called here,
                and CANNOT be called ever again
            */
            _mint(owner(), 100000000 * 10 ** decimals());		
            _maxWalletBalance = (totalSupply() * 2 ) / 100;
            _maxTxAmount = (totalSupply() * 2 ) / 100;

            
        }

        function includeAndExcludeInWhitelist(address account, bool value) public onlyOwner {
            _isExcludedFromFee[account] = value;
        }

        function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner {
            _isExcludedFromMaxWallet[account] = value;
        }

        function includeAndExcludedFromMaxTnxLimit(address account, bool value) public onlyOwner {
            _isExcludedFromMaxTnxLimit[account] = value;
        }

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

        function isExcludedFromMaxWallet(address account) public view returns(bool){
            return _isExcludedFromMaxWallet[account];
        }

        function isExcludedFromMaxTnxLimit(address account) public view returns(bool) {
            return _isExcludedFromMaxTnxLimit[account];
        }

        function setMaxWalletBalance(uint256 maxBalancePercent) external onlyOwner {
        _maxWalletBalance = maxBalancePercent * 10** decimals();
        }

        function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount * 10** decimals();
       }


        function setSellDevFess(
            uint256 dFee
        ) external onlyOwner {
            _sellDevFee = dFee;
        }

        function setBuyDevFees(
            uint256 dFee
        ) external onlyOwner {
            _buyDevFee = dFee;
        }
        function setDevWalletAddress(address _addr) external onlyOwner {
            _devWalletAddress = _addr;
        }  
        
        function setnumTokensSellToSendEthToDev(uint256 amount) external onlyOwner {
            numTokensSellToSendEthToDev = amount * 10 ** decimals();
        }

        function setRouterAddress(address newRouter) external onlyOwner {
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
            uniswapV2Router = _uniswapV2Router;
        }

        function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner {
            swapAndSendFeeEnabled = _enabled;
            emit swapAndSendFeeEnabledUpdated(_enabled);
        }
        
        //to recieve ETH from uniswapV2Router when swaping
        receive() external payable {}

        // to withdraw stucked ETH 
        function withdrawStuckedETH(uint amount) external onlyOwner{
            // This is the current recommended method to use.
            (bool sent,) = _owner.call{value: amount}("");
            require(sent, "Failed to send ETH");    
            }

           // Withdraw stuked tokens 
        function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
        }
    
        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            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");
        
        if (from != owner() && to != owner())
            require( _isExcludedFromMaxTnxLimit[from] || _isExcludedFromMaxTnxLimit[to] || 
                amount <= _maxTxAmount,
                "ERC20: Transfer amount exceeds the maxTxAmount."
            );
        
        
        if (
            from != owner() &&
            to != address(this) &&
            to != uniswapV2Pair ) 
        {
            uint256 currentBalance = balanceOf(to);
            require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance),
                    "ERC20: Reached max wallet holding");
        }
      
            uint256 contractTokenBalance = balanceOf(address(this)); 
            bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendEthToDev;
            if (
                overMinTokenBalance &&
                !inSwapAndLiquify &&
                from != uniswapV2Pair &&
                swapAndSendFeeEnabled
            ) {
                contractTokenBalance = numTokensSellToSendEthToDev;
                swapTokensForFees(contractTokenBalance);
            }

            bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            super._transfer(from, to, amount);
            takeFee = false;
        } else {

            if (from == uniswapV2Pair) {
                // Buy
                uint256 DevTokens = amount.mul(_buyDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);

            } else if (to == uniswapV2Pair) {
                // Sell
                uint256 DevTokens = amount.mul(_sellDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);
            } else {
                // Transfer
                super._transfer(from, to, amount);
            }
        
        }

        }

        function swapTokensForFees(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, // accept any amount of ETH
                path,
                _devWalletAddress,
                block.timestamp
            );
        }
    }

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludeInWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxTnxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTnxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToSendEthToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dFee","type":"uint256"}],"name":"setBuyDevFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dFee","type":"uint256"}],"name":"setSellDevFess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setnumTokensSellToSendEthToDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a600b55600a600c556001600e60156101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600a81526020017f426c61636b4a65737573000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f426c61636b436f696e0000000000000000000000000000000000000000000000815250620000b36200088060201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600590816200017e919062000d0b565b50806006908162000190919062000d0b565b505050620001a36200088860201b60201c565b600a620001b1919062000f82565b621e8480620001c1919062000fd3565b60118190555073c8cc4990cd8d39837709973fe3c154c0c82daaca600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062001088565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000335919062001088565b6040518363ffffffff1660e01b815260040162000354929190620010cb565b6020604051808303816000875af115801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a919062001088565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620004316200088060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200056a6200089160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620006a36200089160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000815620007da6200089160201b60201c565b620007ea6200088860201b60201c565b600a620007f8919062000f82565b6305f5e10062000809919062000fd3565b620008ba60201b60201c565b606460026200082962000a6a60201b60201c565b62000835919062000fd3565b62000841919062001127565b600f81905550606460026200085b62000a6a60201b60201c565b62000867919062000fd3565b62000873919062001127565b601081905550506200124b565b600033905090565b60006012905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200092c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092390620011c0565b60405180910390fd5b620009406000838362000a7460201b60201c565b6200095c8160045462000a7960201b62001e6f1790919060201c565b600481905550620009bb81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7960201b62001e6f1790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a5e9190620011f3565b60405180910390a35050565b6000600454905090565b505050565b6000818362000a89919062001210565b905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b1357607f821691505b60208210810362000b295762000b2862000acb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b54565b62000b9f868362000b54565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bec62000be662000be08462000bb7565b62000bc1565b62000bb7565b9050919050565b6000819050919050565b62000c088362000bcb565b62000c2062000c178262000bf3565b84845462000b61565b825550505050565b600090565b62000c3762000c28565b62000c4481848462000bfd565b505050565b5b8181101562000c6c5762000c6060008262000c2d565b60018101905062000c4a565b5050565b601f82111562000cbb5762000c858162000b2f565b62000c908462000b44565b8101602085101562000ca0578190505b62000cb862000caf8562000b44565b83018262000c49565b50505b505050565b600082821c905092915050565b600062000ce06000198460080262000cc0565b1980831691505092915050565b600062000cfb838362000ccd565b9150826002028217905092915050565b62000d168262000a91565b67ffffffffffffffff81111562000d325762000d3162000a9c565b5b62000d3e825462000afa565b62000d4b82828562000c70565b600060209050601f83116001811462000d83576000841562000d6e578287015190505b62000d7a858262000ced565b86555062000dea565b601f19841662000d938662000b2f565b60005b8281101562000dbd5784890151825560018201915060208501945060208101905062000d96565b8683101562000ddd578489015162000dd9601f89168262000ccd565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e805780860481111562000e585762000e5762000df2565b5b600185161562000e685780820291505b808102905062000e788562000e21565b945062000e38565b94509492505050565b60008262000e9b576001905062000f6e565b8162000eab576000905062000f6e565b816001811462000ec4576002811462000ecf5762000f05565b600191505062000f6e565b60ff84111562000ee45762000ee362000df2565b5b8360020a91508482111562000efe5762000efd62000df2565b5b5062000f6e565b5060208310610133831016604e8410600b841016171562000f3f5782820a90508381111562000f395762000f3862000df2565b5b62000f6e565b62000f4e848484600162000e2e565b9250905081840481111562000f685762000f6762000df2565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f8f8262000bb7565b915062000f9c8362000f75565b925062000fcb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e89565b905092915050565b600062000fe08262000bb7565b915062000fed8362000bb7565b925082820262000ffd8162000bb7565b9150828204841483151762001017576200101662000df2565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010508262001023565b9050919050565b620010628162001043565b81146200106e57600080fd5b50565b600081519050620010828162001057565b92915050565b600060208284031215620010a157620010a06200101e565b5b6000620010b18482850162001071565b91505092915050565b620010c58162001043565b82525050565b6000604082019050620010e26000830185620010ba565b620010f16020830184620010ba565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011348262000bb7565b9150620011418362000bb7565b925082620011545762001153620010f8565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011a8601f836200115f565b9150620011b58262001170565b602082019050919050565b60006020820190508181036000830152620011db8162001199565b9050919050565b620011ed8162000bb7565b82525050565b60006020820190506200120a6000830184620011e2565b92915050565b60006200121d8262000bb7565b91506200122a8362000bb7565b925082820190508082111562001245576200124462000df2565b5b92915050565b613d61806200125b6000396000f3fe6080604052600436106102345760003560e01c806368d71cbe1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af8414610882578063dd62ed3e146108ad578063ea50cf4e146108ea578063ec28438a14610913578063f2fde38b1461093c5761023b565b8063a457c2d714610789578063a9059cbb146107c6578063b425bac314610803578063c9cf77891461082e578063ca14a523146108595761023b565b80638da5cb5b116100f25780638da5cb5b146106b85780638e4d62af146106e35780639063d77d1461070c57806395d89b41146107355780639904a1c3146107605761023b565b806368d71cbe146105d35780636dd3d39f146105fc57806370a0823114610639578063715018a6146106765780637d1db4a51461068d5761023b565b80633d0dbec0116101bc57806349bd5a5e1161018057806349bd5a5e146104c65780635342acb4146104f157806355874a791461052e5780635d729d8c1461056b57806362015852146105a85761023b565b80633d0dbec0146103f557806341cb87fc14610420578063456b10a51461044957806347de4c5d1461047257806348eb61b61461049d5761023b565b806318160ddd1161020357806318160ddd146102fc57806323b872dd14610327578063313ce56714610364578063395093511461038f5780633a9e00de146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b578063120a0612146102a85780631694505e146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610965565b6040516102629190612db0565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190612e6b565b6109f7565b60405161029f9190612ec6565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612ee1565b610a15565b005b3480156102dd57600080fd5b506102e6610ad5565b6040516102f39190612f6d565b60405180910390f35b34801561030857600080fd5b50610311610afb565b60405161031e9190612f97565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612fb2565b610b05565b60405161035b9190612ec6565b60405180910390f35b34801561037057600080fd5b50610379610bde565b6040516103869190613021565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612e6b565b610be7565b6040516103c39190612ec6565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061303c565b610c9a565b005b34801561040157600080fd5b5061040a610d3e565b6040516104179190612ec6565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190612ee1565b610d51565b005b34801561045557600080fd5b50610470600480360381019061046b919061303c565b610fb1565b005b34801561047e57600080fd5b506104876110fe565b6040516104949190612f97565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613095565b611104565b005b3480156104d257600080fd5b506104db6111db565b6040516104e891906130e4565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612ee1565b611201565b6040516105259190612ec6565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612ee1565b611257565b6040516105629190612ec6565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e6b565b6112ad565b60405161059f9190612ec6565b60405180910390f35b3480156105b457600080fd5b506105bd6113b1565b6040516105ca9190612f97565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f5919061303c565b6113b7565b005b34801561060857600080fd5b50610623600480360381019061061e9190612ee1565b61143d565b6040516106309190612ec6565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612ee1565b611493565b60405161066d9190612f97565b60405180910390f35b34801561068257600080fd5b5061068b6114dc565b005b34801561069957600080fd5b506106a2611616565b6040516106af9190612f97565b60405180910390f35b3480156106c457600080fd5b506106cd61161c565b6040516106da91906130e4565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613095565b611645565b005b34801561071857600080fd5b50610733600480360381019061072e919061303c565b61171c565b005b34801561074157600080fd5b5061074a6117c0565b6040516107579190612db0565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613095565b611852565b005b34801561079557600080fd5b506107b060048036038101906107ab9190612e6b565b611929565b6040516107bd9190612ec6565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190612e6b565b6119f6565b6040516107fa9190612ec6565b60405180910390f35b34801561080f57600080fd5b50610818611a14565b60405161082591906130e4565b60405180910390f35b34801561083a57600080fd5b50610843611a3a565b6040516108509190612f97565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b919061303c565b611a40565b005b34801561088e57600080fd5b50610897611ac6565b6040516108a49190612f97565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906130ff565b611acc565b6040516108e19190612f97565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061313f565b611b53565b005b34801561091f57600080fd5b5061093a6004803603810190610935919061303c565b611c23565b005b34801561094857600080fd5b50610963600480360381019061095e9190612ee1565b611cc7565b005b6060600580546109749061319b565b80601f01602080910402602001604051908101604052809291908181526020018280546109a09061319b565b80156109ed5780601f106109c2576101008083540402835291602001916109ed565b820191906000526020600020905b8154815290600101906020018083116109d057829003601f168201915b5050505050905090565b6000610a0b610a04611e85565b8484611e8d565b6001905092915050565b610a1d611e85565b73ffffffffffffffffffffffffffffffffffffffff16610a3b61161c565b73ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613218565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610b12848484612056565b610bd384610b1e611e85565b610bce85604051806060016040528060288152602001613cdf60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b84611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b611e8d565b600190509392505050565b60006012905090565b6000610c90610bf4611e85565b84610c8b8560036000610c05611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6f90919063ffffffff16565b611e8d565b6001905092915050565b610ca2611e85565b73ffffffffffffffffffffffffffffffffffffffff16610cc061161c565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613218565b60405180910390fd5b610d1e610bde565b600a610d2a919061339a565b81610d3591906133e5565b600f8190555050565b600e60159054906101000a900460ff1681565b610d59611e85565b73ffffffffffffffffffffffffffffffffffffffff16610d7761161c565b73ffffffffffffffffffffffffffffffffffffffff1614610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613218565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e41919061343c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc919061343c565b6040518363ffffffff1660e01b8152600401610ee9929190613469565b6020604051808303816000875af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c919061343c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610fb9611e85565b73ffffffffffffffffffffffffffffffffffffffff16610fd761161c565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613218565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611074906134c3565b60006040518083038185875af1925050503d80600081146110b1576040519150601f19603f3d011682016040523d82523d6000602084013e6110b6565b606091505b50509050806110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190613524565b60405180910390fd5b5050565b60115481565b61110c611e85565b73ffffffffffffffffffffffffffffffffffffffff1661112a61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613218565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006112b7611e85565b73ffffffffffffffffffffffffffffffffffffffff166112d561161c565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613218565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611366929190613544565b6020604051808303816000875af1158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190613582565b905092915050565b600b5481565b6113bf611e85565b73ffffffffffffffffffffffffffffffffffffffff166113dd61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613218565b60405180910390fd5b80600c8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e4611e85565b73ffffffffffffffffffffffffffffffffffffffff1661150261161c565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613218565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61164d611e85565b73ffffffffffffffffffffffffffffffffffffffff1661166b61161c565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613218565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611724611e85565b73ffffffffffffffffffffffffffffffffffffffff1661174261161c565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613218565b60405180910390fd5b6117a0610bde565b600a6117ac919061339a565b816117b791906133e5565b60118190555050565b6060600680546117cf9061319b565b80601f01602080910402602001604051908101604052809291908181526020018280546117fb9061319b565b80156118485780601f1061181d57610100808354040283529160200191611848565b820191906000526020600020905b81548152906001019060200180831161182b57829003601f168201915b5050505050905090565b61185a611e85565b73ffffffffffffffffffffffffffffffffffffffff1661187861161c565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613218565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006119ec611936611e85565b846119e785604051806060016040528060258152602001613d076025913960036000611960611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b611e8d565b6001905092915050565b6000611a0a611a03611e85565b8484612056565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611a48611e85565b73ffffffffffffffffffffffffffffffffffffffff16611a6661161c565b73ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613218565b60405180910390fd5b80600b8190555050565b600f5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b5b611e85565b73ffffffffffffffffffffffffffffffffffffffff16611b7961161c565b73ffffffffffffffffffffffffffffffffffffffff1614611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613218565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611c189190612ec6565b60405180910390a150565b611c2b611e85565b73ffffffffffffffffffffffffffffffffffffffff16611c4961161c565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613218565b60405180910390fd5b611ca7610bde565b600a611cb3919061339a565b81611cbe91906133e5565b60108190555050565b611ccf611e85565b73ffffffffffffffffffffffffffffffffffffffff16611ced61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613218565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990613621565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611e7d9190613641565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef3906136e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613779565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120499190612f97565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc9061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b9061389d565b60405180910390fd5b60008111612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e9061392f565b60405180910390fd5b61217f61161c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121ed57506121bd61161c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122e057600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122935750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122a057506010548111155b6122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906139c1565b60405180910390fd5b5b6122e861161c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234f57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a95750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124615760006123b983611493565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124205750600f54828261241d9190613641565b11155b61245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613a53565b60405180910390fd5b505b600061246c30611493565b9050600060115482101590508080156124925750600e60149054906101000a900460ff16155b80156124ec5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125045750600e60159054906101000a900460ff165b15612518576011549150612517826127a7565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125bf5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125d8576125cf868686612a42565b6000905061274a565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361268a5760006126576064612649600b5488612cd990919063ffffffff16565b612cef90919063ffffffff16565b905061266c8186612d0590919063ffffffff16565b9450612679873083612a42565b612684878787612a42565b50612749565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361273c57600061270960646126fb600c5488612cd990919063ffffffff16565b612cef90919063ffffffff16565b905061271e8186612d0590919063ffffffff16565b945061272b873083612a42565b612736878787612a42565b50612748565b612747868686612a42565b5b5b5b505050505050565b600083831115829061279a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127919190612db0565b60405180910390fd5b5082840390509392505050565b6001600e60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156127df576127de613a73565b5b60405190808252806020026020018201604052801561280d5781602001602082028036833780820191505090505b509050308160008151811061282557612824613aa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f0919061343c565b8160018151811061290457612903613aa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061296b30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e8d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129f1959493929190613bca565b600060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b50505050506000600e60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa89061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b179061389d565b60405180910390fd5b612b2b838383612d1b565b612b9781604051806060016040528060268152602001613cb960269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c2c81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ccc9190612f97565b60405180910390a3505050565b60008183612ce791906133e5565b905092915050565b60008183612cfd9190613c53565b905092915050565b60008183612d139190613c84565b905092915050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d5a578082015181840152602081019050612d3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d8282612d20565b612d8c8185612d2b565b9350612d9c818560208601612d3c565b612da581612d66565b840191505092915050565b60006020820190508181036000830152612dca8184612d77565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e0282612dd7565b9050919050565b612e1281612df7565b8114612e1d57600080fd5b50565b600081359050612e2f81612e09565b92915050565b6000819050919050565b612e4881612e35565b8114612e5357600080fd5b50565b600081359050612e6581612e3f565b92915050565b60008060408385031215612e8257612e81612dd2565b5b6000612e9085828601612e20565b9250506020612ea185828601612e56565b9150509250929050565b60008115159050919050565b612ec081612eab565b82525050565b6000602082019050612edb6000830184612eb7565b92915050565b600060208284031215612ef757612ef6612dd2565b5b6000612f0584828501612e20565b91505092915050565b6000819050919050565b6000612f33612f2e612f2984612dd7565b612f0e565b612dd7565b9050919050565b6000612f4582612f18565b9050919050565b6000612f5782612f3a565b9050919050565b612f6781612f4c565b82525050565b6000602082019050612f826000830184612f5e565b92915050565b612f9181612e35565b82525050565b6000602082019050612fac6000830184612f88565b92915050565b600080600060608486031215612fcb57612fca612dd2565b5b6000612fd986828701612e20565b9350506020612fea86828701612e20565b9250506040612ffb86828701612e56565b9150509250925092565b600060ff82169050919050565b61301b81613005565b82525050565b60006020820190506130366000830184613012565b92915050565b60006020828403121561305257613051612dd2565b5b600061306084828501612e56565b91505092915050565b61307281612eab565b811461307d57600080fd5b50565b60008135905061308f81613069565b92915050565b600080604083850312156130ac576130ab612dd2565b5b60006130ba85828601612e20565b92505060206130cb85828601613080565b9150509250929050565b6130de81612df7565b82525050565b60006020820190506130f960008301846130d5565b92915050565b6000806040838503121561311657613115612dd2565b5b600061312485828601612e20565b925050602061313585828601612e20565b9150509250929050565b60006020828403121561315557613154612dd2565b5b600061316384828501613080565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131b357607f821691505b6020821081036131c6576131c561316c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613202602083612d2b565b915061320d826131cc565b602082019050919050565b60006020820190508181036000830152613231816131f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156132be5780860481111561329a57613299613238565b5b60018516156132a95780820291505b80810290506132b785613267565b945061327e565b94509492505050565b6000826132d75760019050613393565b816132e55760009050613393565b81600181146132fb576002811461330557613334565b6001915050613393565b60ff84111561331757613316613238565b5b8360020a91508482111561332e5761332d613238565b5b50613393565b5060208310610133831016604e8410600b84101617156133695782820a90508381111561336457613363613238565b5b613393565b6133768484846001613274565b9250905081840481111561338d5761338c613238565b5b81810290505b9392505050565b60006133a582612e35565b91506133b083613005565b92506133dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846132c7565b905092915050565b60006133f082612e35565b91506133fb83612e35565b925082820261340981612e35565b915082820484148315176134205761341f613238565b5b5092915050565b60008151905061343681612e09565b92915050565b60006020828403121561345257613451612dd2565b5b600061346084828501613427565b91505092915050565b600060408201905061347e60008301856130d5565b61348b60208301846130d5565b9392505050565b600081905092915050565b50565b60006134ad600083613492565b91506134b88261349d565b600082019050919050565b60006134ce826134a0565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061350e601283612d2b565b9150613519826134d8565b602082019050919050565b6000602082019050818103600083015261353d81613501565b9050919050565b600060408201905061355960008301856130d5565b6135666020830184612f88565b9392505050565b60008151905061357c81613069565b92915050565b60006020828403121561359857613597612dd2565b5b60006135a68482850161356d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061360b602683612d2b565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b600061364c82612e35565b915061365783612e35565b925082820190508082111561366f5761366e613238565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136d1602483612d2b565b91506136dc82613675565b604082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613763602283612d2b565b915061376e82613707565b604082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137f5602583612d2b565b915061380082613799565b604082019050919050565b60006020820190508181036000830152613824816137e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613887602383612d2b565b91506138928261382b565b604082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613919602983612d2b565b9150613924826138bd565b604082019050919050565b600060208201905081810360008301526139488161390c565b9050919050565b7f45524332303a205472616e7366657220616d6f756e742065786365656473207460008201527f6865206d61785478416d6f756e742e0000000000000000000000000000000000602082015250565b60006139ab602f83612d2b565b91506139b68261394f565b604082019050919050565b600060208201905081810360008301526139da8161399e565b9050919050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a3d602183612d2b565b9150613a48826139e1565b604082019050919050565b60006020820190508181036000830152613a6c81613a30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613af6613af1613aec84613ad1565b612f0e565b612e35565b9050919050565b613b0681613adb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4181612df7565b82525050565b6000613b538383613b38565b60208301905092915050565b6000602082019050919050565b6000613b7782613b0c565b613b818185613b17565b9350613b8c83613b28565b8060005b83811015613bbd578151613ba48882613b47565b9750613baf83613b5f565b925050600181019050613b90565b5085935050505092915050565b600060a082019050613bdf6000830188612f88565b613bec6020830187613afd565b8181036040830152613bfe8186613b6c565b9050613c0d60608301856130d5565b613c1a6080830184612f88565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c5e82612e35565b9150613c6983612e35565b925082613c7957613c78613c24565b5b828204905092915050565b6000613c8f82612e35565b9150613c9a83612e35565b9250828203905081811115613cb257613cb1613238565b5b9291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbc04adb75d3959b474ca60922c3c283f1c6c1883200f2bc16eb7d64cfbe035964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806368d71cbe1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af8414610882578063dd62ed3e146108ad578063ea50cf4e146108ea578063ec28438a14610913578063f2fde38b1461093c5761023b565b8063a457c2d714610789578063a9059cbb146107c6578063b425bac314610803578063c9cf77891461082e578063ca14a523146108595761023b565b80638da5cb5b116100f25780638da5cb5b146106b85780638e4d62af146106e35780639063d77d1461070c57806395d89b41146107355780639904a1c3146107605761023b565b806368d71cbe146105d35780636dd3d39f146105fc57806370a0823114610639578063715018a6146106765780637d1db4a51461068d5761023b565b80633d0dbec0116101bc57806349bd5a5e1161018057806349bd5a5e146104c65780635342acb4146104f157806355874a791461052e5780635d729d8c1461056b57806362015852146105a85761023b565b80633d0dbec0146103f557806341cb87fc14610420578063456b10a51461044957806347de4c5d1461047257806348eb61b61461049d5761023b565b806318160ddd1161020357806318160ddd146102fc57806323b872dd14610327578063313ce56714610364578063395093511461038f5780633a9e00de146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b578063120a0612146102a85780631694505e146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610965565b6040516102629190612db0565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190612e6b565b6109f7565b60405161029f9190612ec6565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612ee1565b610a15565b005b3480156102dd57600080fd5b506102e6610ad5565b6040516102f39190612f6d565b60405180910390f35b34801561030857600080fd5b50610311610afb565b60405161031e9190612f97565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612fb2565b610b05565b60405161035b9190612ec6565b60405180910390f35b34801561037057600080fd5b50610379610bde565b6040516103869190613021565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612e6b565b610be7565b6040516103c39190612ec6565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee919061303c565b610c9a565b005b34801561040157600080fd5b5061040a610d3e565b6040516104179190612ec6565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190612ee1565b610d51565b005b34801561045557600080fd5b50610470600480360381019061046b919061303c565b610fb1565b005b34801561047e57600080fd5b506104876110fe565b6040516104949190612f97565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190613095565b611104565b005b3480156104d257600080fd5b506104db6111db565b6040516104e891906130e4565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190612ee1565b611201565b6040516105259190612ec6565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612ee1565b611257565b6040516105629190612ec6565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e6b565b6112ad565b60405161059f9190612ec6565b60405180910390f35b3480156105b457600080fd5b506105bd6113b1565b6040516105ca9190612f97565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f5919061303c565b6113b7565b005b34801561060857600080fd5b50610623600480360381019061061e9190612ee1565b61143d565b6040516106309190612ec6565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612ee1565b611493565b60405161066d9190612f97565b60405180910390f35b34801561068257600080fd5b5061068b6114dc565b005b34801561069957600080fd5b506106a2611616565b6040516106af9190612f97565b60405180910390f35b3480156106c457600080fd5b506106cd61161c565b6040516106da91906130e4565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613095565b611645565b005b34801561071857600080fd5b50610733600480360381019061072e919061303c565b61171c565b005b34801561074157600080fd5b5061074a6117c0565b6040516107579190612db0565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613095565b611852565b005b34801561079557600080fd5b506107b060048036038101906107ab9190612e6b565b611929565b6040516107bd9190612ec6565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190612e6b565b6119f6565b6040516107fa9190612ec6565b60405180910390f35b34801561080f57600080fd5b50610818611a14565b60405161082591906130e4565b60405180910390f35b34801561083a57600080fd5b50610843611a3a565b6040516108509190612f97565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b919061303c565b611a40565b005b34801561088e57600080fd5b50610897611ac6565b6040516108a49190612f97565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906130ff565b611acc565b6040516108e19190612f97565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061313f565b611b53565b005b34801561091f57600080fd5b5061093a6004803603810190610935919061303c565b611c23565b005b34801561094857600080fd5b50610963600480360381019061095e9190612ee1565b611cc7565b005b6060600580546109749061319b565b80601f01602080910402602001604051908101604052809291908181526020018280546109a09061319b565b80156109ed5780601f106109c2576101008083540402835291602001916109ed565b820191906000526020600020905b8154815290600101906020018083116109d057829003601f168201915b5050505050905090565b6000610a0b610a04611e85565b8484611e8d565b6001905092915050565b610a1d611e85565b73ffffffffffffffffffffffffffffffffffffffff16610a3b61161c565b73ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613218565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b6000610b12848484612056565b610bd384610b1e611e85565b610bce85604051806060016040528060288152602001613cdf60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b84611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b611e8d565b600190509392505050565b60006012905090565b6000610c90610bf4611e85565b84610c8b8560036000610c05611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6f90919063ffffffff16565b611e8d565b6001905092915050565b610ca2611e85565b73ffffffffffffffffffffffffffffffffffffffff16610cc061161c565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613218565b60405180910390fd5b610d1e610bde565b600a610d2a919061339a565b81610d3591906133e5565b600f8190555050565b600e60159054906101000a900460ff1681565b610d59611e85565b73ffffffffffffffffffffffffffffffffffffffff16610d7761161c565b73ffffffffffffffffffffffffffffffffffffffff1614610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613218565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e41919061343c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc919061343c565b6040518363ffffffff1660e01b8152600401610ee9929190613469565b6020604051808303816000875af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c919061343c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610fb9611e85565b73ffffffffffffffffffffffffffffffffffffffff16610fd761161c565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613218565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611074906134c3565b60006040518083038185875af1925050503d80600081146110b1576040519150601f19603f3d011682016040523d82523d6000602084013e6110b6565b606091505b50509050806110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190613524565b60405180910390fd5b5050565b60115481565b61110c611e85565b73ffffffffffffffffffffffffffffffffffffffff1661112a61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613218565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006112b7611e85565b73ffffffffffffffffffffffffffffffffffffffff166112d561161c565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613218565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611366929190613544565b6020604051808303816000875af1158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190613582565b905092915050565b600b5481565b6113bf611e85565b73ffffffffffffffffffffffffffffffffffffffff166113dd61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613218565b60405180910390fd5b80600c8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e4611e85565b73ffffffffffffffffffffffffffffffffffffffff1661150261161c565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613218565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61164d611e85565b73ffffffffffffffffffffffffffffffffffffffff1661166b61161c565b73ffffffffffffffffffffffffffffffffffffffff16146116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b890613218565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611724611e85565b73ffffffffffffffffffffffffffffffffffffffff1661174261161c565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613218565b60405180910390fd5b6117a0610bde565b600a6117ac919061339a565b816117b791906133e5565b60118190555050565b6060600680546117cf9061319b565b80601f01602080910402602001604051908101604052809291908181526020018280546117fb9061319b565b80156118485780601f1061181d57610100808354040283529160200191611848565b820191906000526020600020905b81548152906001019060200180831161182b57829003601f168201915b5050505050905090565b61185a611e85565b73ffffffffffffffffffffffffffffffffffffffff1661187861161c565b73ffffffffffffffffffffffffffffffffffffffff16146118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613218565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006119ec611936611e85565b846119e785604051806060016040528060258152602001613d076025913960036000611960611e85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b611e8d565b6001905092915050565b6000611a0a611a03611e85565b8484612056565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b611a48611e85565b73ffffffffffffffffffffffffffffffffffffffff16611a6661161c565b73ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390613218565b60405180910390fd5b80600b8190555050565b600f5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b5b611e85565b73ffffffffffffffffffffffffffffffffffffffff16611b7961161c565b73ffffffffffffffffffffffffffffffffffffffff1614611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613218565b60405180910390fd5b80600e60156101000a81548160ff0219169083151502179055507f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea81604051611c189190612ec6565b60405180910390a150565b611c2b611e85565b73ffffffffffffffffffffffffffffffffffffffff16611c4961161c565b73ffffffffffffffffffffffffffffffffffffffff1614611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613218565b60405180910390fd5b611ca7610bde565b600a611cb3919061339a565b81611cbe91906133e5565b60108190555050565b611ccf611e85565b73ffffffffffffffffffffffffffffffffffffffff16611ced61161c565b73ffffffffffffffffffffffffffffffffffffffff1614611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90613218565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da990613621565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611e7d9190613641565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef3906136e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613779565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120499190612f97565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc9061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b9061389d565b60405180910390fd5b60008111612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e9061392f565b60405180910390fd5b61217f61161c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121ed57506121bd61161c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122e057600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122935750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122a057506010548111155b6122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906139c1565b60405180910390fd5b5b6122e861161c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234f57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a95750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124615760006123b983611493565b9050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124205750600f54828261241d9190613641565b11155b61245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690613a53565b60405180910390fd5b505b600061246c30611493565b9050600060115482101590508080156124925750600e60149054906101000a900460ff16155b80156124ec5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125045750600e60159054906101000a900460ff165b15612518576011549150612517826127a7565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125bf5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125d8576125cf868686612a42565b6000905061274a565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361268a5760006126576064612649600b5488612cd990919063ffffffff16565b612cef90919063ffffffff16565b905061266c8186612d0590919063ffffffff16565b9450612679873083612a42565b612684878787612a42565b50612749565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361273c57600061270960646126fb600c5488612cd990919063ffffffff16565b612cef90919063ffffffff16565b905061271e8186612d0590919063ffffffff16565b945061272b873083612a42565b612736878787612a42565b50612748565b612747868686612a42565b5b5b5b505050505050565b600083831115829061279a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127919190612db0565b60405180910390fd5b5082840390509392505050565b6001600e60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156127df576127de613a73565b5b60405190808252806020026020018201604052801561280d5781602001602082028036833780820191505090505b509050308160008151811061282557612824613aa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f0919061343c565b8160018151811061290457612903613aa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061296b30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e8d565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016129f1959493929190613bca565b600060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b50505050506000600e60146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa89061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b179061389d565b60405180910390fd5b612b2b838383612d1b565b612b9781604051806060016040528060268152602001613cb960269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127529092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c2c81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6f90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ccc9190612f97565b60405180910390a3505050565b60008183612ce791906133e5565b905092915050565b60008183612cfd9190613c53565b905092915050565b60008183612d139190613c84565b905092915050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d5a578082015181840152602081019050612d3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d8282612d20565b612d8c8185612d2b565b9350612d9c818560208601612d3c565b612da581612d66565b840191505092915050565b60006020820190508181036000830152612dca8184612d77565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e0282612dd7565b9050919050565b612e1281612df7565b8114612e1d57600080fd5b50565b600081359050612e2f81612e09565b92915050565b6000819050919050565b612e4881612e35565b8114612e5357600080fd5b50565b600081359050612e6581612e3f565b92915050565b60008060408385031215612e8257612e81612dd2565b5b6000612e9085828601612e20565b9250506020612ea185828601612e56565b9150509250929050565b60008115159050919050565b612ec081612eab565b82525050565b6000602082019050612edb6000830184612eb7565b92915050565b600060208284031215612ef757612ef6612dd2565b5b6000612f0584828501612e20565b91505092915050565b6000819050919050565b6000612f33612f2e612f2984612dd7565b612f0e565b612dd7565b9050919050565b6000612f4582612f18565b9050919050565b6000612f5782612f3a565b9050919050565b612f6781612f4c565b82525050565b6000602082019050612f826000830184612f5e565b92915050565b612f9181612e35565b82525050565b6000602082019050612fac6000830184612f88565b92915050565b600080600060608486031215612fcb57612fca612dd2565b5b6000612fd986828701612e20565b9350506020612fea86828701612e20565b9250506040612ffb86828701612e56565b9150509250925092565b600060ff82169050919050565b61301b81613005565b82525050565b60006020820190506130366000830184613012565b92915050565b60006020828403121561305257613051612dd2565b5b600061306084828501612e56565b91505092915050565b61307281612eab565b811461307d57600080fd5b50565b60008135905061308f81613069565b92915050565b600080604083850312156130ac576130ab612dd2565b5b60006130ba85828601612e20565b92505060206130cb85828601613080565b9150509250929050565b6130de81612df7565b82525050565b60006020820190506130f960008301846130d5565b92915050565b6000806040838503121561311657613115612dd2565b5b600061312485828601612e20565b925050602061313585828601612e20565b9150509250929050565b60006020828403121561315557613154612dd2565b5b600061316384828501613080565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131b357607f821691505b6020821081036131c6576131c561316c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613202602083612d2b565b915061320d826131cc565b602082019050919050565b60006020820190508181036000830152613231816131f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156132be5780860481111561329a57613299613238565b5b60018516156132a95780820291505b80810290506132b785613267565b945061327e565b94509492505050565b6000826132d75760019050613393565b816132e55760009050613393565b81600181146132fb576002811461330557613334565b6001915050613393565b60ff84111561331757613316613238565b5b8360020a91508482111561332e5761332d613238565b5b50613393565b5060208310610133831016604e8410600b84101617156133695782820a90508381111561336457613363613238565b5b613393565b6133768484846001613274565b9250905081840481111561338d5761338c613238565b5b81810290505b9392505050565b60006133a582612e35565b91506133b083613005565b92506133dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846132c7565b905092915050565b60006133f082612e35565b91506133fb83612e35565b925082820261340981612e35565b915082820484148315176134205761341f613238565b5b5092915050565b60008151905061343681612e09565b92915050565b60006020828403121561345257613451612dd2565b5b600061346084828501613427565b91505092915050565b600060408201905061347e60008301856130d5565b61348b60208301846130d5565b9392505050565b600081905092915050565b50565b60006134ad600083613492565b91506134b88261349d565b600082019050919050565b60006134ce826134a0565b9150819050919050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061350e601283612d2b565b9150613519826134d8565b602082019050919050565b6000602082019050818103600083015261353d81613501565b9050919050565b600060408201905061355960008301856130d5565b6135666020830184612f88565b9392505050565b60008151905061357c81613069565b92915050565b60006020828403121561359857613597612dd2565b5b60006135a68482850161356d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061360b602683612d2b565b9150613616826135af565b604082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b600061364c82612e35565b915061365783612e35565b925082820190508082111561366f5761366e613238565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136d1602483612d2b565b91506136dc82613675565b604082019050919050565b60006020820190508181036000830152613700816136c4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613763602283612d2b565b915061376e82613707565b604082019050919050565b6000602082019050818103600083015261379281613756565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137f5602583612d2b565b915061380082613799565b604082019050919050565b60006020820190508181036000830152613824816137e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613887602383612d2b565b91506138928261382b565b604082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613919602983612d2b565b9150613924826138bd565b604082019050919050565b600060208201905081810360008301526139488161390c565b9050919050565b7f45524332303a205472616e7366657220616d6f756e742065786365656473207460008201527f6865206d61785478416d6f756e742e0000000000000000000000000000000000602082015250565b60006139ab602f83612d2b565b91506139b68261394f565b604082019050919050565b600060208201905081810360008301526139da8161399e565b9050919050565b7f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a3d602183612d2b565b9150613a48826139e1565b604082019050919050565b60006020820190508181036000830152613a6c81613a30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613af6613af1613aec84613ad1565b612f0e565b612e35565b9050919050565b613b0681613adb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4181612df7565b82525050565b6000613b538383613b38565b60208301905092915050565b6000602082019050919050565b6000613b7782613b0c565b613b818185613b17565b9350613b8c83613b28565b8060005b83811015613bbd578151613ba48882613b47565b9750613baf83613b5f565b925050600181019050613b90565b5085935050505092915050565b600060a082019050613bdf6000830188612f88565b613bec6020830187613afd565b8181036040830152613bfe8186613b6c565b9050613c0d60608301856130d5565b613c1a6080830184612f88565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c5e82612e35565b9150613c6983612e35565b925082613c7957613c78613c24565b5b828204905092915050565b6000613c8f82612e35565b9150613c9a83612e35565b9250828203905081811115613cb257613cb1613238565b5b9291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dbc04adb75d3959b474ca60922c3c283f1c6c1883200f2bc16eb7d64cfbe035964736f6c63430008120033

Deployed Bytecode Sourcemap

28537:9052:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10484:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12869:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33007:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28992:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11703:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13576:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11523:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14413:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32426:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29115:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33313:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34002:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29247:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31632:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29044:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31970:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32267:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34305:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28904:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32735:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32113:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11896:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8652:160;;;;;;;;;;;;;:::i;:::-;;29209:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8385:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31474:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33144:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10728:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31799:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15193:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12273:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28855:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28947:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32873:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29166:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12537:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33659:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32591:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8826:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10484:108;10538:13;10575:5;10568:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10484:108;:::o;12869:181::-;12952:4;12973:39;12982:12;:10;:12::i;:::-;12996:7;13005:6;12973:8;:39::i;:::-;13034:4;13027:11;;12869:181;;;;:::o;33007:115::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33105:5:::1;33085:17;;:25;;;;;;;;;;;;;;;;;;33007:115:::0;:::o;28992:41::-;;;;;;;;;;;;;:::o;11703:116::-;11764:7;11795:12;;11788:19;;11703:116;:::o;13576:387::-;13732:4;13753:36;13763:6;13771:9;13782:6;13753:9;:36::i;:::-;13804:121;13813:6;13821:12;:10;:12::i;:::-;13835:89;13873:6;13835:89;;;;;;;;;;;;;;;;;:11;:19;13847:6;13835:19;;;;;;;;;;;;;;;:33;13855:12;:10;:12::i;:::-;13835:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13804:8;:121::i;:::-;13947:4;13940:11;;13576:387;;;;;:::o;11523:101::-;11581:5;11610:2;11603:9;;11523:101;:::o;14413:230::-;14501:4;14522:83;14531:12;:10;:12::i;:::-;14545:7;14554:50;14593:10;14554:11;:25;14566:12;:10;:12::i;:::-;14554:25;;;;;;;;;;;;;;;:34;14580:7;14554:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14522:8;:83::i;:::-;14627:4;14620:11;;14413:230;;;;:::o;32426:153::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32557:10:::1;:8;:10::i;:::-;32552:2;:15;;;;:::i;:::-;32532:17;:35;;;;:::i;:::-;32512:17;:55;;;;32426:153:::0;:::o;29115:40::-;;;;;;;;;;;;;:::o;33313:334::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33392:35:::1;33449:9;33392:67;;33508:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33490:56;;;33555:4;33562:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33490:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33474:13;;:112;;;;;;;;;;;;;;;;;;33619:16;33601:15;;:34;;;;;;;;;;;;;;;;;;33377:270;33313:334:::0;:::o;34002:252::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34140:9:::1;34154:6:::0;::::1;;;;;;;;;;:11;;34173:6;34154:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34139:45;;;34207:4;34199:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;34061:193;34002:252:::0;:::o;29247:42::-;;;;:::o;31632:155::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31770:5:::1;31734:24;:33;31759:7;31734:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;31632:155:::0;;:::o;29044:28::-;;;;;;;;;;;;;:::o;31970:131::-;32034:4;32062:18;:27;32081:7;32062:27;;;;;;;;;;;;;;;;;;;;;;;;;32055:34;;31970:131;;;:::o;32267:147::-;32339:4;32367:26;:35;32394:7;32367:35;;;;;;;;;;;;;;;;;;;;;;;;;32360:42;;32267:147;;;:::o;34305:189::-;34402:12;8555;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34440:12:::1;34433:29;;;34463:10;34475:6;34433:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34426:56;;34305:189:::0;;;;:::o;28904:30::-;;;;:::o;32735:126::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32845:4:::1;32831:11;:18;;;;32735:126:::0;:::o;32113:142::-;32183:4;32210:24;:33;32235:7;32210:33;;;;;;;;;;;;;;;;;;;;;;;;;32203:40;;32113:142;;;:::o;11896:135::-;11970:7;12001:9;:18;12011:7;12001:18;;;;;;;;;;;;;;;;11994:25;;11896:135;;;:::o;8652:160::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8763:1:::1;8726:40;;8747:6;::::0;::::1;;;;;;;;8726:40;;;;;;;;;;;;8798:1;8781:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8652:160::o:0;29209:27::-;;;;:::o;8385:95::-;8431:7;8462:6;;;;;;;;;;;8455:13;;8385:95;:::o;31474:146::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31603:5:::1;31573:18;:27;31592:7;31573:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31474:146:::0;;:::o;33144:157::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33279:10:::1;:8;:10::i;:::-;33273:2;:16;;;;:::i;:::-;33264:6;:25;;;;:::i;:::-;33234:27;:55;;;;33144:157:::0;:::o;10728:112::-;10784:13;10821:7;10814:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10728:112;:::o;31799:159::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31941:5:::1;31903:26;:35;31930:7;31903:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;31799:159:::0;;:::o;15193:281::-;15286:4;15307:129;15316:12;:10;:12::i;:::-;15330:7;15339:96;15378:15;15339:96;;;;;;;;;;;;;;;;;:11;:25;15351:12;:10;:12::i;:::-;15339:25;;;;;;;;;;;;;;;:34;15365:7;15339:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15307:8;:129::i;:::-;15458:4;15451:11;;15193:281;;;;:::o;12273:187::-;12359:4;12380:42;12390:12;:10;:12::i;:::-;12404:9;12415:6;12380:9;:42::i;:::-;12444:4;12437:11;;12273:187;;;;:::o;28855:32::-;;;;;;;;;;;;;:::o;28947:31::-;;;;:::o;32873:124::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32981:4:::1;32968:10;:17;;;;32873:124:::0;:::o;29166:32::-;;;;:::o;12537:159::-;12626:7;12657:11;:18;12669:5;12657:18;;;;;;;;;;;;;;;:27;12676:7;12657:27;;;;;;;;;;;;;;;;12650:34;;12537:159;;;;:::o;33659:185::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33766:8:::1;33742:21;;:32;;;;;;;;;;;;;;;;;;33794:38;33823:8;33794:38;;;;;;:::i;:::-;;;;;;;;33659:185:::0;:::o;32591:130::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32700:10:::1;:8;:10::i;:::-;32695:2;:15;;;;:::i;:::-;32681:11;:29;;;;:::i;:::-;32666:12;:44;;;;32591:130:::0;:::o;8826:260::-;8555:12;:10;:12::i;:::-;8544:23;;:7;:5;:7::i;:::-;:23;;;8536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8939:1:::1;8919:22;;:8;:22;;::::0;8911:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9033:8;9004:38;;9025:6;::::0;::::1;;;;;;;;9004:38;;;;;;;;;;;;9066:8;9057:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8826:260:::0;:::o;2671:106::-;2729:7;2764:1;2760;:5;;;;:::i;:::-;2753:12;;2671:106;;;;:::o;4051:::-;4104:7;4135:10;4128:17;;4051:106;:::o;18644:416::-;18817:1;18800:19;;:5;:19;;;18792:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18902:1;18883:21;;:7;:21;;;18875:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18990:6;18960:11;:18;18972:5;18960:18;;;;;;;;;;;;;;;:27;18979:7;18960:27;;;;;;;;;;;;;;;:36;;;;19032:7;19016:32;;19025:5;19016:32;;;19041:6;19016:32;;;;;;:::i;:::-;;;;;;;;18644:416;;;:::o;34510:2496::-;34678:1;34662:18;;:4;:18;;;34654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:1;34745:16;;:2;:16;;;34737:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34833:1;34824:6;:10;34816:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34913:7;:5;:7::i;:::-;34905:15;;:4;:15;;;;:32;;;;;34930:7;:5;:7::i;:::-;34924:13;;:2;:13;;;;34905:32;34901:253;;;34961:26;:32;34988:4;34961:32;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;34997:26;:30;35024:2;34997:30;;;;;;;;;;;;;;;;;;;;;;;;;34961:66;:110;;;;35059:12;;35049:6;:22;;34961:110;34952:202;;;;;;;;;;;;:::i;:::-;;;;;;;;;34901:253;35211:7;:5;:7::i;:::-;35203:15;;:4;:15;;;;:51;;;;;35249:4;35235:19;;:2;:19;;;;35203:51;:87;;;;;35277:13;;;;;;;;;;;35271:19;;:2;:19;;;;35203:87;35185:343;;;35318:22;35343:13;35353:2;35343:9;:13::i;:::-;35318:38;;35379:24;:28;35404:2;35379:28;;;;;;;;;;;;;;;;;;;;;;;;;:78;;;;35439:17;;35429:6;35412:14;:23;;;;:::i;:::-;:44;;35379:78;35371:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;35303:225;35185:343;35550:28;35581:24;35599:4;35581:9;:24::i;:::-;35550:55;;35621:24;35672:27;;35648:20;:51;;35621:78;;35736:19;:57;;;;;35777:16;;;;;;;;;;;35776:17;35736:57;:99;;;;;35822:13;;;;;;;;;;;35814:21;;:4;:21;;;;35736:99;:141;;;;;35856:21;;;;;;;;;;;35736:141;35714:322;;;35935:27;;35912:50;;35981:39;35999:20;35981:17;:39::i;:::-;35714:322;36052:12;36067:4;36052:19;;36086:18;:24;36105:4;36086:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;36114:18;:22;36133:2;36114:22;;;;;;;;;;;;;;;;;;;;;;;;;36086:50;36082:911;;;36153:33;36169:4;36175:2;36179:6;36153:15;:33::i;:::-;36211:5;36201:15;;36082:911;;;36263:13;;;;;;;;;;;36255:21;;:4;:21;;;36251:721;;36321:17;36341:31;36368:3;36341:22;36352:10;;36341:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;36321:51;;36401:21;36412:9;36401:6;:10;;:21;;;;:::i;:::-;36393:29;;36441:47;36457:4;36471;36478:9;36441:15;:47::i;:::-;36507:33;36523:4;36529:2;36533:6;36507:15;:33::i;:::-;36278:280;36251:721;;;36574:13;;;;;;;;;;;36568:19;;:2;:19;;;36564:408;;36633:17;36653:32;36681:3;36653:23;36664:11;;36653:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;36633:52;;36714:21;36725:9;36714:6;:10;;:21;;;;:::i;:::-;36706:29;;36754:47;36770:4;36784;36791:9;36754:15;:47::i;:::-;36820:33;36836:4;36842:2;36846:6;36820:15;:33::i;:::-;36589:280;36564:408;;;36923:33;36939:4;36945:2;36949:6;36923:15;:33::i;:::-;36564:408;36251:721;36082:911;34639:2367;;;34510:2496;;;:::o;3283:226::-;3369:7;3435:1;3430;:6;;3438:12;3422:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3481:1;3477;:5;3470:12;;3283:226;;;;;:::o;37018:564::-;29649:4;29630:16;;:23;;;;;;;;;;;;;;;;;;37101:21:::1;37139:1;37125:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37101:40;;37174:4;37156;37161:1;37156:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37204:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37194:4;37199:1;37194:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;37241:62;37258:4;37273:15;;;;;;;;;;;37291:11;37241:8;:62::i;:::-;37318:15;;;;;;;;;;;:66;;;37403:11;37433:1;37481:4;37504:17;;;;;;;;;;;37540:15;37318:252;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37086:496;29703:5:::0;29684:16;;:24;;;;;;;;;;;;;;;;;;37018:564;:::o;16011:617::-;16189:1;16171:20;;:6;:20;;;16163:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16277:1;16256:23;;:9;:23;;;16248:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16336:47;16357:6;16365:9;16376:6;16336:20;:47::i;:::-;16420:71;16442:6;16420:71;;;;;;;;;;;;;;;;;:9;:17;16430:6;16420:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;16400:9;:17;16410:6;16400:17;;;;;;;;;;;;;;;:91;;;;16529:32;16554:6;16529:9;:20;16539:9;16529:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;16506:9;:20;16516:9;16506:20;;;;;;;;;;;;;;;:55;;;;16598:9;16581:35;;16590:6;16581:35;;;16609:6;16581:35;;;;;;:::i;:::-;;;;;;;;16011:617;;;:::o;2911:106::-;2969:7;3004:1;3000;:5;;;;:::i;:::-;2993:12;;2911:106;;;;:::o;3037:::-;3095:7;3130:1;3126;:5;;;;:::i;:::-;3119:12;;3037:106;;;;:::o;2791:::-;2849:7;2884:1;2880;:5;;;;:::i;:::-;2873:12;;2791:106;;;;:::o;19710:141::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:116::-;6571:21;6586:5;6571:21;:::i;:::-;6564:5;6561:32;6551:60;;6607:1;6604;6597:12;6551:60;6501:116;:::o;6623:133::-;6666:5;6704:6;6691:20;6682:29;;6720:30;6744:5;6720:30;:::i;:::-;6623:133;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:320;8627:6;8664:1;8658:4;8654:12;8644:22;;8711:1;8705:4;8701:12;8732:18;8722:81;;8788:4;8780:6;8776:17;8766:27;;8722:81;8850:2;8842:6;8839:14;8819:18;8816:38;8813:84;;8869:18;;:::i;:::-;8813:84;8634:269;8583:320;;;:::o;8909:182::-;9049:34;9045:1;9037:6;9033:14;9026:58;8909:182;:::o;9097:366::-;9239:3;9260:67;9324:2;9319:3;9260:67;:::i;:::-;9253:74;;9336:93;9425:3;9336:93;:::i;:::-;9454:2;9449:3;9445:12;9438:19;;9097:366;;;:::o;9469:419::-;9635:4;9673:2;9662:9;9658:18;9650:26;;9722:9;9716:4;9712:20;9708:1;9697:9;9693:17;9686:47;9750:131;9876:4;9750:131;:::i;:::-;9742:139;;9469:419;;;:::o;9894:180::-;9942:77;9939:1;9932:88;10039:4;10036:1;10029:15;10063:4;10060:1;10053:15;10080:102;10122:8;10169:5;10166:1;10162:13;10141:34;;10080:102;;;:::o;10188:848::-;10249:5;10256:4;10280:6;10271:15;;10304:5;10295:14;;10318:712;10339:1;10329:8;10326:15;10318:712;;;10434:4;10429:3;10425:14;10419:4;10416:24;10413:50;;;10443:18;;:::i;:::-;10413:50;10493:1;10483:8;10479:16;10476:451;;;10908:4;10901:5;10897:16;10888:25;;10476:451;10958:4;10952;10948:15;10940:23;;10988:32;11011:8;10988:32;:::i;:::-;10976:44;;10318:712;;;10188:848;;;;;;;:::o;11042:1073::-;11096:5;11287:8;11277:40;;11308:1;11299:10;;11310:5;;11277:40;11336:4;11326:36;;11353:1;11344:10;;11355:5;;11326:36;11422:4;11470:1;11465:27;;;;11506:1;11501:191;;;;11415:277;;11465:27;11483:1;11474:10;;11485:5;;;11501:191;11546:3;11536:8;11533:17;11530:43;;;11553:18;;:::i;:::-;11530:43;11602:8;11599:1;11595:16;11586:25;;11637:3;11630:5;11627:14;11624:40;;;11644:18;;:::i;:::-;11624:40;11677:5;;;11415:277;;11801:2;11791:8;11788:16;11782:3;11776:4;11773:13;11769:36;11751:2;11741:8;11738:16;11733:2;11727:4;11724:12;11720:35;11704:111;11701:246;;;11857:8;11851:4;11847:19;11838:28;;11892:3;11885:5;11882:14;11879:40;;;11899:18;;:::i;:::-;11879:40;11932:5;;11701:246;11972:42;12010:3;12000:8;11994:4;11991:1;11972:42;:::i;:::-;11957:57;;;;12046:4;12041:3;12037:14;12030:5;12027:25;12024:51;;;12055:18;;:::i;:::-;12024:51;12104:4;12097:5;12093:16;12084:25;;11042:1073;;;;;;:::o;12121:281::-;12179:5;12203:23;12221:4;12203:23;:::i;:::-;12195:31;;12247:25;12263:8;12247:25;:::i;:::-;12235:37;;12291:104;12328:66;12318:8;12312:4;12291:104;:::i;:::-;12282:113;;12121:281;;;;:::o;12408:410::-;12448:7;12471:20;12489:1;12471:20;:::i;:::-;12466:25;;12505:20;12523:1;12505:20;:::i;:::-;12500:25;;12560:1;12557;12553:9;12582:30;12600:11;12582:30;:::i;:::-;12571:41;;12761:1;12752:7;12748:15;12745:1;12742:22;12722:1;12715:9;12695:83;12672:139;;12791:18;;:::i;:::-;12672:139;12456:362;12408:410;;;;:::o;12824:143::-;12881:5;12912:6;12906:13;12897:22;;12928:33;12955:5;12928:33;:::i;:::-;12824:143;;;;:::o;12973:351::-;13043:6;13092:2;13080:9;13071:7;13067:23;13063:32;13060:119;;;13098:79;;:::i;:::-;13060:119;13218:1;13243:64;13299:7;13290:6;13279:9;13275:22;13243:64;:::i;:::-;13233:74;;13189:128;12973:351;;;;:::o;13330:332::-;13451:4;13489:2;13478:9;13474:18;13466:26;;13502:71;13570:1;13559:9;13555:17;13546:6;13502:71;:::i;:::-;13583:72;13651:2;13640:9;13636:18;13627:6;13583:72;:::i;:::-;13330:332;;;;;:::o;13668:147::-;13769:11;13806:3;13791:18;;13668:147;;;;:::o;13821:114::-;;:::o;13941:398::-;14100:3;14121:83;14202:1;14197:3;14121:83;:::i;:::-;14114:90;;14213:93;14302:3;14213:93;:::i;:::-;14331:1;14326:3;14322:11;14315:18;;13941:398;;;:::o;14345:379::-;14529:3;14551:147;14694:3;14551:147;:::i;:::-;14544:154;;14715:3;14708:10;;14345:379;;;:::o;14730:168::-;14870:20;14866:1;14858:6;14854:14;14847:44;14730:168;:::o;14904:366::-;15046:3;15067:67;15131:2;15126:3;15067:67;:::i;:::-;15060:74;;15143:93;15232:3;15143:93;:::i;:::-;15261:2;15256:3;15252:12;15245:19;;14904:366;;;:::o;15276:419::-;15442:4;15480:2;15469:9;15465:18;15457:26;;15529:9;15523:4;15519:20;15515:1;15504:9;15500:17;15493:47;15557:131;15683:4;15557:131;:::i;:::-;15549:139;;15276:419;;;:::o;15701:332::-;15822:4;15860:2;15849:9;15845:18;15837:26;;15873:71;15941:1;15930:9;15926:17;15917:6;15873:71;:::i;:::-;15954:72;16022:2;16011:9;16007:18;15998:6;15954:72;:::i;:::-;15701:332;;;;;:::o;16039:137::-;16093:5;16124:6;16118:13;16109:22;;16140:30;16164:5;16140:30;:::i;:::-;16039:137;;;;:::o;16182:345::-;16249:6;16298:2;16286:9;16277:7;16273:23;16269:32;16266:119;;;16304:79;;:::i;:::-;16266:119;16424:1;16449:61;16502:7;16493:6;16482:9;16478:22;16449:61;:::i;:::-;16439:71;;16395:125;16182:345;;;;:::o;16533:225::-;16673:34;16669:1;16661:6;16657:14;16650:58;16742:8;16737:2;16729:6;16725:15;16718:33;16533:225;:::o;16764:366::-;16906:3;16927:67;16991:2;16986:3;16927:67;:::i;:::-;16920:74;;17003:93;17092:3;17003:93;:::i;:::-;17121:2;17116:3;17112:12;17105:19;;16764:366;;;:::o;17136:419::-;17302:4;17340:2;17329:9;17325:18;17317:26;;17389:9;17383:4;17379:20;17375:1;17364:9;17360:17;17353:47;17417:131;17543:4;17417:131;:::i;:::-;17409:139;;17136:419;;;:::o;17561:191::-;17601:3;17620:20;17638:1;17620:20;:::i;:::-;17615:25;;17654:20;17672:1;17654:20;:::i;:::-;17649:25;;17697:1;17694;17690:9;17683:16;;17718:3;17715:1;17712:10;17709:36;;;17725:18;;:::i;:::-;17709:36;17561:191;;;;:::o;17758:223::-;17898:34;17894:1;17886:6;17882:14;17875:58;17967:6;17962:2;17954:6;17950:15;17943:31;17758:223;:::o;17987:366::-;18129:3;18150:67;18214:2;18209:3;18150:67;:::i;:::-;18143:74;;18226:93;18315:3;18226:93;:::i;:::-;18344:2;18339:3;18335:12;18328:19;;17987:366;;;:::o;18359:419::-;18525:4;18563:2;18552:9;18548:18;18540:26;;18612:9;18606:4;18602:20;18598:1;18587:9;18583:17;18576:47;18640:131;18766:4;18640:131;:::i;:::-;18632:139;;18359:419;;;:::o;18784:221::-;18924:34;18920:1;18912:6;18908:14;18901:58;18993:4;18988:2;18980:6;18976:15;18969:29;18784:221;:::o;19011:366::-;19153:3;19174:67;19238:2;19233:3;19174:67;:::i;:::-;19167:74;;19250:93;19339:3;19250:93;:::i;:::-;19368:2;19363:3;19359:12;19352:19;;19011:366;;;:::o;19383:419::-;19549:4;19587:2;19576:9;19572:18;19564:26;;19636:9;19630:4;19626:20;19622:1;19611:9;19607:17;19600:47;19664:131;19790:4;19664:131;:::i;:::-;19656:139;;19383:419;;;:::o;19808:224::-;19948:34;19944:1;19936:6;19932:14;19925:58;20017:7;20012:2;20004:6;20000:15;19993:32;19808:224;:::o;20038:366::-;20180:3;20201:67;20265:2;20260:3;20201:67;:::i;:::-;20194:74;;20277:93;20366:3;20277:93;:::i;:::-;20395:2;20390:3;20386:12;20379:19;;20038:366;;;:::o;20410:419::-;20576:4;20614:2;20603:9;20599:18;20591:26;;20663:9;20657:4;20653:20;20649:1;20638:9;20634:17;20627:47;20691:131;20817:4;20691:131;:::i;:::-;20683:139;;20410:419;;;:::o;20835:222::-;20975:34;20971:1;20963:6;20959:14;20952:58;21044:5;21039:2;21031:6;21027:15;21020:30;20835:222;:::o;21063:366::-;21205:3;21226:67;21290:2;21285:3;21226:67;:::i;:::-;21219:74;;21302:93;21391:3;21302:93;:::i;:::-;21420:2;21415:3;21411:12;21404:19;;21063:366;;;:::o;21435:419::-;21601:4;21639:2;21628:9;21624:18;21616:26;;21688:9;21682:4;21678:20;21674:1;21663:9;21659:17;21652:47;21716:131;21842:4;21716:131;:::i;:::-;21708:139;;21435:419;;;:::o;21860:228::-;22000:34;21996:1;21988:6;21984:14;21977:58;22069:11;22064:2;22056:6;22052:15;22045:36;21860:228;:::o;22094:366::-;22236:3;22257:67;22321:2;22316:3;22257:67;:::i;:::-;22250:74;;22333:93;22422:3;22333:93;:::i;:::-;22451:2;22446:3;22442:12;22435:19;;22094:366;;;:::o;22466:419::-;22632:4;22670:2;22659:9;22655:18;22647:26;;22719:9;22713:4;22709:20;22705:1;22694:9;22690:17;22683:47;22747:131;22873:4;22747:131;:::i;:::-;22739:139;;22466:419;;;:::o;22891:234::-;23031:34;23027:1;23019:6;23015:14;23008:58;23100:17;23095:2;23087:6;23083:15;23076:42;22891:234;:::o;23131:366::-;23273:3;23294:67;23358:2;23353:3;23294:67;:::i;:::-;23287:74;;23370:93;23459:3;23370:93;:::i;:::-;23488:2;23483:3;23479:12;23472:19;;23131:366;;;:::o;23503:419::-;23669:4;23707:2;23696:9;23692:18;23684:26;;23756:9;23750:4;23746:20;23742:1;23731:9;23727:17;23720:47;23784:131;23910:4;23784:131;:::i;:::-;23776:139;;23503:419;;;:::o;23928:220::-;24068:34;24064:1;24056:6;24052:14;24045:58;24137:3;24132:2;24124:6;24120:15;24113:28;23928:220;:::o;24154:366::-;24296:3;24317:67;24381:2;24376:3;24317:67;:::i;:::-;24310:74;;24393:93;24482:3;24393:93;:::i;:::-;24511:2;24506:3;24502:12;24495:19;;24154:366;;;:::o;24526:419::-;24692:4;24730:2;24719:9;24715:18;24707:26;;24779:9;24773:4;24769:20;24765:1;24754:9;24750:17;24743:47;24807:131;24933:4;24807:131;:::i;:::-;24799:139;;24526:419;;;:::o;24951:180::-;24999:77;24996:1;24989:88;25096:4;25093:1;25086:15;25120:4;25117:1;25110:15;25137:180;25185:77;25182:1;25175:88;25282:4;25279:1;25272:15;25306:4;25303:1;25296:15;25323:85;25368:7;25397:5;25386:16;;25323:85;;;:::o;25414:158::-;25472:9;25505:61;25523:42;25532:32;25558:5;25532:32;:::i;:::-;25523:42;:::i;:::-;25505:61;:::i;:::-;25492:74;;25414:158;;;:::o;25578:147::-;25673:45;25712:5;25673:45;:::i;:::-;25668:3;25661:58;25578:147;;:::o;25731:114::-;25798:6;25832:5;25826:12;25816:22;;25731:114;;;:::o;25851:184::-;25950:11;25984:6;25979:3;25972:19;26024:4;26019:3;26015:14;26000:29;;25851:184;;;;:::o;26041:132::-;26108:4;26131:3;26123:11;;26161:4;26156:3;26152:14;26144:22;;26041:132;;;:::o;26179:108::-;26256:24;26274:5;26256:24;:::i;:::-;26251:3;26244:37;26179:108;;:::o;26293:179::-;26362:10;26383:46;26425:3;26417:6;26383:46;:::i;:::-;26461:4;26456:3;26452:14;26438:28;;26293:179;;;;:::o;26478:113::-;26548:4;26580;26575:3;26571:14;26563:22;;26478:113;;;:::o;26627:732::-;26746:3;26775:54;26823:5;26775:54;:::i;:::-;26845:86;26924:6;26919:3;26845:86;:::i;:::-;26838:93;;26955:56;27005:5;26955:56;:::i;:::-;27034:7;27065:1;27050:284;27075:6;27072:1;27069:13;27050:284;;;27151:6;27145:13;27178:63;27237:3;27222:13;27178:63;:::i;:::-;27171:70;;27264:60;27317:6;27264:60;:::i;:::-;27254:70;;27110:224;27097:1;27094;27090:9;27085:14;;27050:284;;;27054:14;27350:3;27343:10;;26751:608;;;26627:732;;;;:::o;27365:831::-;27628:4;27666:3;27655:9;27651:19;27643:27;;27680:71;27748:1;27737:9;27733:17;27724:6;27680:71;:::i;:::-;27761:80;27837:2;27826:9;27822:18;27813:6;27761:80;:::i;:::-;27888:9;27882:4;27878:20;27873:2;27862:9;27858:18;27851:48;27916:108;28019:4;28010:6;27916:108;:::i;:::-;27908:116;;28034:72;28102:2;28091:9;28087:18;28078:6;28034:72;:::i;:::-;28116:73;28184:3;28173:9;28169:19;28160:6;28116:73;:::i;:::-;27365:831;;;;;;;;:::o;28202:180::-;28250:77;28247:1;28240:88;28347:4;28344:1;28337:15;28371:4;28368:1;28361:15;28388:185;28428:1;28445:20;28463:1;28445:20;:::i;:::-;28440:25;;28479:20;28497:1;28479:20;:::i;:::-;28474:25;;28518:1;28508:35;;28523:18;;:::i;:::-;28508:35;28565:1;28562;28558:9;28553:14;;28388:185;;;;:::o;28579:194::-;28619:4;28639:20;28657:1;28639:20;:::i;:::-;28634:25;;28673:20;28691:1;28673:20;:::i;:::-;28668:25;;28717:1;28714;28710:9;28702:17;;28741:1;28735:4;28732:11;28729:37;;;28746:18;;:::i;:::-;28729:37;28579:194;;;;:::o

Swarm Source

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