ETH Price: $2,439.66 (+4.69%)

Token

XSHIB (XS)
 

Overview

Max Total Supply

1,000,000,000 XS

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
39,011,309.900238290197709565 XS

Value
$0.00
0x30c8ebbe2f8759eb817fa2e20d2dd83a51039de3
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:
XSHIB

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

Secure your investments using XSHIB!

Web:   https://XSHIB.IO 
Chat:  https://t.me/XSHIB

░█▀▀▀█ ░█▀▀▀ ░█▀▀█ ░█─░█ ░█▀▀█ ░█▀▀▀   ░█──░█ ░█▀▀▀█ ░█─░█ ░█▀▀█   ▀█▀ ░█▄─░█ ░█──░█ ░█▀▀▀ ░█▀▀▀█ ▀▀█▀▀ ░█▀▄▀█ ░█▀▀▀ ░█▄─░█ ▀▀█▀▀ ░█▀▀▀█ 
─▀▀▀▄▄ ░█▀▀▀ ░█─── ░█─░█ ░█▄▄▀ ░█▀▀▀   ░█▄▄▄█ ░█──░█ ░█─░█ ░█▄▄▀   ░█─ ░█░█░█ ─░█░█─ ░█▀▀▀ ─▀▀▀▄▄ ─░█── ░█░█░█ ░█▀▀▀ ░█░█░█ ─░█── ─▀▀▀▄▄ 
░█▄▄▄█ ░█▄▄▄ ░█▄▄█ ─▀▄▄▀ ░█─░█ ░█▄▄▄   ──░█── ░█▄▄▄█ ─▀▄▄▀ ░█─░█   ▄█▄ ░█──▀█ ──▀▄▀─ ░█▄▄▄ ░█▄▄▄█ ─░█── ░█──░█ ░█▄▄▄ ░█──▀█ ─░█── ░█▄▄▄█

MMMMMMW0c'',,,;cdONWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXkl:,,,,',oXWMMMMMMM
MMMMMW0;.cxxxdl:,';oONWMMMMMMMMMMMMMMMWWNNXXKK00000000KKXXNWWWMMMMMMMMMMMMMMWXkc,,;codxxd;.oNMMMMMMM
MMMMMNo.;xkkkkkkxdc,':dKWMMMMMMWWNK0kxdolc::;;;,,,,,,;;;::clodxk0KNWWMMMMMN0o,';lxkkkkkkko''OWMMMMMM
MMMMMX:.ckkkdodxkkkxo:',l0NWNKOdoc;,,'',''','''''''',,,''''','',,;codkKNXk:',cdkkkxooodxkx;.dWMMMMMM
MMMMM0;.okkdcllllodkkkdc,':lc;,',,''''',''',,,,',''''''''',,''''',,'',;:,';lxkkxollloolokk:.lNMMMMMM
MMMMM0,'okxllddddlllodkkxl,..'''''',,'''''','',,''''''''''',,,,'',,'''..;okkxolcloddooloxkc.cNMMMMMM
MMMMM0,'okdooollloddllloxkxl,..'','','',,''''''''''''''''''',,,,,,''..:dkxdllloddlclooooxkc.lNMMMMMM
MMMMMK;.okxddddolccldxdlloxkxl,..'''......'''''''''''''''.......''..;okxdoloxxocclodddddxk:.oNMMMMMM
MMMMMX:.lkxxddddddlccoxxdoodxkxc..'',;:cllooddddddddddddoolcc:;,'.'lxkxoodxxdlcloddddddxkx;.dWMMMMMM
MMMMMNl.:kkxddddddddlcldxxxdoooolloxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdoooooldxxxdlloddddddddxkd,'kWMMMMMM
MMMMMWx.,xkxdddddddddolodooooddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdooloooodddddddddxxkl.;KMMMMMMM
MMMMMW0,.okxxdddddddddollodxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdollldddddddddxkk:.lNMMMMMMM
MMMMMMNl.:xkxdddddddollodxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdolldddddddxkd'.lXWMMMMMM
MMMMMWKc.'okkxddddolldxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdoloddddxkkc..,oKWMMMMM
MMMMW0c,..:xkxdddoloxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdllodxxkd,.',,c0WMMMM
MMMWOc,''.'okkxdlldxxxxxxxxxkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkxxxxxxxxxoloxkkc..'',,cOWMMM
MMW0c,,''..;xkdloxxxxxxxxk0KNNNNXKOkxxxxxxxxxxxxxxxxxxxxxxxxxxxxk0KNNNNXKOxxxxxxxxdloxo'.''',',c0WMM
MWKl,''','..cdloxxxxxxxxxk0XWWMMMMWKOxxxxxxxxxxxxxxxxxxxxxxxxxk0XWMMMMWNKOkxxxxxxxxdol,..,'','',lKWM
MXo,'''',,'..:oxxxxxxxxxxxxkOXWMMMMWNKOkxxxxxxxxxxxxxxxxxxxkkOXWMMMMWN0kxxxxxxxxxxxxxc..',,',,'',oXM
Wk;,,'',,''.'lxxxxxxxxxxdodxxkOXWMMMMWN0xxxxxxxxxxxxxxxxxxxkXWMMMMWNKkxxdooxxxxxxxxxxd:..'','''',;kW
Kl,,,'''''..lxxxxxxxxxxxc..';ldxOKNWWNKkxxxxxxxxxxxxxxxxxxxx0XWWNX0kxoc,..'oxxxxxxxxxxd;..'''''',,lK
k;',,,,''..cxxxxxxxxxxxd;     .':oxOOkxxxxxxxxxxxxxxxxxxxxxxxkOOkdc;..    .lxxxxxxxxxxxd,..'''',,';x
l,,'',,'..:dxxxxxxxxxxxxc.        .:dxxxxxxxxxxxxxxxxxxxxxxxxxxo;.       .,oxxxxxxxxxxxxo'.'''',',,l
:','''''.,oxxxxxxxxxxxxxxdc,..      .cdxxxxxxxxxxxxxxxxxxxxxdo;.      .';ldxxxxxxxxxxxxxxc..''',',,:
;'''','..cxxxxxxxxxxxxxxxxxxdolc:;,'',ldxddddolcc::cclodxddxd:'',;::lldxxxxxxxxxxxxxxxxxxd;..,''''';
,,''','.;dxxxxxxxxxxxxxxxxxxxxxxxxxxxddkOkl;..'cooddoc,':dOOxddxxxxxxxxxxxxxxxxxxxxxxxxxxxl..',,',',
,,'','..cdxxkkkkkxxddxxxxxxxxxxxxxdxk0XWNl    .,:ccc:,   'OWNKOxdxxxxxxxxxxxxxxddxxkkkkkxxo,..,,''',
,,,','.,kKXNWWWWWNXK0OkxdxxxxxxxdxOKWMMMNo               .OMMMMN0kdxxxxxxxxdxkO0XXNWWWWNNXKo..',,'',
,',,,..oWMMMMMWWWMMMMMWX0OxdxxxdkKWMMMMMMNx,           .;OWMMMMMMN0xdxxxdxOKNWMMMMMMMMMMMMMK;.',',,,
;',,'..kMMMWWXxlddxxOKWMMWX0xddkNMMMMMMMMMMNOo;..  ..:oONMMMMMMMMMWKxddx0NWMMMMWNXK0OkOXWMMNc..'',';
c,'''.'OMMNOOd;ck0OkocOXkodddccxNMMMMMMMMMMMMMWXOc,dXWMMMMMMMMMMMMMWOoxKX0kkxxdddddxxxdckWMWo..,'',c
d,','.,0MWkxk:''dNMMXlcl:x00Od;.l0NWWWWMMMMMMMMWXo;xNWWWWMMMMMWWWWN0doo:,cdkO0KXNWMMMMNolXMWo..'',,d
O:'''.'OMNOkl...;0WWWx'.oNWWNx'.lxdxk0KXXXXK0kdc,...;cdkOKXXXXK0kddkKN0:.lKWWWXOxkKWWWNocXMWl..'',:O
Nd,,'..oNWW0;....lKXXO;;OKKKx,.,xKOo:cc;'''... .:lol:'. .',;;;:c::kKKXO;.:OXXXk,..lKKKKlcKM0;.',',dX
W0c,,'..dNMNo....'dOOkddOOOd,..'oOOkdxx'    ...:kOOOOd'  'cllcd0l:xOOOx,.:kOOOd' .:kOOOccKK:..',,c0W
MNk:'''..lKW0,   .:xkkkkkkd,....lkkkxxo;'''....:kkOkOx:''lkkkxxo';xkkkd,.;xkkkd:',lkkkx:cd,..''';kNM
MMNx;','..,xXo.  .:xkkkkkko'   .cxkkOkkO0000o..lKKKKKK0000KKK0k,.:0000k;.:OOOOOkkkkkkko,...''',;dNMM
MMWXd;,''...:l'  ,dkkkkkOOOl. ....''';o0NXXXk'.dXXXXXKo;lOXKKX0;.cKKKX0;.cKXXX0ocok000Oo...'',;dXMMM
MMMWXd;,''..... .lO00Ox0NNWK:.        'kWWWWk'.dWWWWWK; .xNNNWK; lXNNNK;.lXNNN0;..dXNNNk'..'';dXWMMM
MMMMMXx;,''... .cKNWWk;xWMMMO'  ,looddkNMMMMx..xMMMMMK; .xWMWMK; lNMMMX; lNWWMK:..lNWWW0,...,xXWMMMM
MMMMMMNk:,'''. ;0MMMK:.cXMMMWd. cXWWNNXKK0Oo' .oOkkkko. .o0O00x' lXNWWK; lNMMMWKOkKWMMM0,..'lNMMMMMM
MMMMMMMW0o;'. .xWMMWd. .dK0Oxl..,lc:;,,....  ........  .''.......;;;:c;..lkkO0KNWWMMMMMO'.:cdWMMMMMM
MMMMMMMMWXx,..:0KOko'  .,'...  .'.. .;:.     ..    .  ...  .:, ...  .  .;,....',:cldxxd;.,kxd0XMMMMM
MMMMMMMMNKx' .;,...    ..      ..    :0o....      .        ck,        ..         ....  .c0XkoxKMMMMM
MMMMMMW0kk;....   .         .    ..,;:ONOk0xllddl::lo:'':lo0x'',.  .               . .;kNMNKKXWMMMMM
MMMMMM0dOo. .     ...  ............cOdcdkOOOOXWMWWWWWNXXNXkocxXx'.....             .'dXWMMWWMMMMMMMM
MMMMMXxOXl.   ..';c:,.......''',''..oK0xxxdolldxkxooodxxxxxONW0;.'''''..........',:oKWMMMMMMMMMMMMMM
MMMMMXKWWXkodxkkkOOkl,',''',,',,,''..:x0NWMMWNKOxkk0XXKKKNWXOl,.'''','',''...,cxKXWWMMMMMMMMMMMMMMMM
MMMMMWWMMMMMMMWXXNWNK0K0ko:;,'','',''..';:loddxkkkkkxxdolc:,..'''''','',;:oxxkkO0NWMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMWX0xoc:,',,,,''''...............''',,',,',,;cox0XWMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKOxdlc:;,,''''',,,,',,,'''',,,;:cldxOKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNX0kxoc:;;,,,,,,,,,,;;:codk0XNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

 */
// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
 
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;
    }
}

 
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 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 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 IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
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, 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 {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
  
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 XSHIB is ERC20, Ownable {
    
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet=0xB70E950419B8Db8a5F96985b437CE45f71bFb86e;
    address private nftWallet=0x9B1DBc05aF0457417Aa09B9dc9a8C10DceB9335E;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletAmount;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
   
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = false;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buynftFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellnftFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensFornft;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event nftWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("XSHIB", "XS") { 
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 39;
        uint256 _buyLiquidityFee = 0;
        uint256 _buynftFee = 1;

        uint256 _sellMarketingFee = 59;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellnftFee = 1;
 
        uint256 totalSupply = 1 * 10 ** 9 * 10 ** decimals(); 
 
        maxTransactionAmount = 3 * 10 ** 7 * 10 ** decimals(); 
        maxWalletAmount = 3 * 10 ** 7 * 10 ** decimals(); 
        swapTokensAtAmount = 1 * 10 ** 7 * 10 ** decimals(); 
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buynftFee = _buynftFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buynftFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellnftFee = _sellnftFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellnftFee;
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    function SetTrading(bool EnableTrade, bool _swap) external onlyOwner {
        tradingActive = EnableTrade;
        swapEnabled = _swap;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWalletAmount lower than 0.5%");
        maxWalletAmount = newNum;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
   
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _nftFee_) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellnftFee = _nftFee_;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellnftFee;
        require(sellTotalFees <= 90, "Must keep fees at 90% or less");
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _nftFee_) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buynftFee = _nftFee_;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buynftFee;
        require(sellTotalFees <= 90, "Must keep fees at 90% or less");
    }


    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

        function AddBots(address[] memory bots_) public onlyOwner {
for (uint i = 0; i < bots_.length; i++) {
            _blacklist[bots_[i]] = true;
        
}
    }

function Remove(address[] memory notbot) public onlyOwner {
      for (uint i = 0; i < notbot.length; i++) {
          _blacklist[notbot[i]] = false;
      }
    }

    function check(address wallet) public view returns (bool){
      return _blacklist[wallet];
    }



 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updatenftWallet(address newWallet) external onlyOwner {
        emit nftWalletUpdated(newWallet, nftWallet);
        nftWallet = newWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }



  function Airdrop(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 2000, "Wallets list length must be <= 2000");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }

 
 
    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(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 0) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = false;
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensFornft += fees * sellnftFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensFornft += fees * buynftFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensFornft;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethFornft = ethBalance.mul(tokensFornft).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethFornft;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensFornft = 0;
 
        (success,) = address(nftWallet).call{value: ethFornft}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"tokensIntoLiquidity","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"nftWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"AddBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"Remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"EnableTrade","type":"bool"},{"internalType":"bool","name":"_swap","type":"bool"}],"name":"SetTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buynftFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellnftFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensFornft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_nftFee_","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_nftFee_","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatenftWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273b70e950419b8db8a5f96985b437ce45f71bfb86e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739b1dbc05af0457417aa09b9dc9a8c10dceb9335e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055503480156200012757600080fd5b506040518060400160405280600581526020017f58534849420000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f58530000000000000000000000000000000000000000000000000000000000008152508160039081620001a5919062000e5a565b508060049081620001b7919062000e5a565b5050506000620001cc620006a460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000297816001620006ac60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000fab565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062000fab565b6040518363ffffffff1660e01b8152600401620003ea92919062000fee565b6020604051808303816000875af11580156200040a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000430919062000fab565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200047860a0516001620006ac60201b60201c565b6200048d60a0516001620007a960201b60201c565b600060279050600080600190506000603b9050600080600190506000620004b96200084a60201b60201c565b600a620004c79190620011ab565b633b9aca00620004d89190620011fc565b9050620004ea6200084a60201b60201c565b600a620004f89190620011ab565b6301c9c380620005099190620011fc565b6008819055506200051f6200084a60201b60201c565b600a6200052d9190620011ab565b6301c9c3806200053e9190620011fc565b600a81905550620005546200084a60201b60201c565b600a620005629190620011ab565b62989680620005729190620011fc565b600981905550866010819055508560118190555084601281905550601254601154601054620005a2919062001247565b620005ae919062001247565b600f81905550836014819055508260158190555081601681905550601654601554601454620005de919062001247565b620005ea919062001247565b60138190555062000612620006046200085360201b60201c565b60016200087d60201b60201c565b620006253060016200087d60201b60201c565b6200063a61dead60016200087d60201b60201c565b6200065c6200064e6200085360201b60201c565b6001620006ac60201b60201c565b6200066f306001620006ac60201b60201c565b6200068461dead6001620006ac60201b60201c565b620006963382620009ca60201b60201c565b505050505050505062001451565b600033905090565b620006bc620006a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200074e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074590620012e3565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200088d620006a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091690620012e3565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009be919062001322565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a33906200138f565b60405180910390fd5b62000a506000838362000b7860201b60201c565b62000a6c8160025462000b7d60201b620028e21790919060201c565b60028190555062000aca816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7d60201b620028e21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b6c9190620013c2565b60405180910390a35050565b505050565b600080828462000b8e919062001247565b90508381101562000bd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bcd906200142f565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c6257607f821691505b60208210810362000c785762000c7762000c1a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ce27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ca3565b62000cee868362000ca3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d3b62000d3562000d2f8462000d06565b62000d10565b62000d06565b9050919050565b6000819050919050565b62000d578362000d1a565b62000d6f62000d668262000d42565b84845462000cb0565b825550505050565b600090565b62000d8662000d77565b62000d9381848462000d4c565b505050565b5b8181101562000dbb5762000daf60008262000d7c565b60018101905062000d99565b5050565b601f82111562000e0a5762000dd48162000c7e565b62000ddf8462000c93565b8101602085101562000def578190505b62000e0762000dfe8562000c93565b83018262000d98565b50505b505050565b600082821c905092915050565b600062000e2f6000198460080262000e0f565b1980831691505092915050565b600062000e4a838362000e1c565b9150826002028217905092915050565b62000e658262000be0565b67ffffffffffffffff81111562000e815762000e8062000beb565b5b62000e8d825462000c49565b62000e9a82828562000dbf565b600060209050601f83116001811462000ed2576000841562000ebd578287015190505b62000ec9858262000e3c565b86555062000f39565b601f19841662000ee28662000c7e565b60005b8281101562000f0c5784890151825560018201915060208501945060208101905062000ee5565b8683101562000f2c578489015162000f28601f89168262000e1c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f738262000f46565b9050919050565b62000f858162000f66565b811462000f9157600080fd5b50565b60008151905062000fa58162000f7a565b92915050565b60006020828403121562000fc45762000fc362000f41565b5b600062000fd48482850162000f94565b91505092915050565b62000fe88162000f66565b82525050565b600060408201905062001005600083018562000fdd565b62001014602083018462000fdd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010a9578086048111156200108157620010806200101b565b5b6001851615620010915780820291505b8081029050620010a1856200104a565b945062001061565b94509492505050565b600082620010c4576001905062001197565b81620010d4576000905062001197565b8160018114620010ed5760028114620010f8576200112e565b600191505062001197565b60ff8411156200110d576200110c6200101b565b5b8360020a9150848211156200112757620011266200101b565b5b5062001197565b5060208310610133831016604e8410600b8410161715620011685782820a9050838111156200116257620011616200101b565b5b62001197565b62001177848484600162001057565b925090508184048111156200119157620011906200101b565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011b88262000d06565b9150620011c5836200119e565b9250620011f47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010b2565b905092915050565b6000620012098262000d06565b9150620012168362000d06565b9250828202620012268162000d06565b9150828204841483151762001240576200123f6200101b565b5b5092915050565b6000620012548262000d06565b9150620012618362000d06565b92508282019050808211156200127c576200127b6200101b565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012cb60208362001282565b9150620012d88262001293565b602082019050919050565b60006020820190508181036000830152620012fe81620012bc565b9050919050565b60008115159050919050565b6200131c8162001305565b82525050565b600060208201905062001339600083018462001311565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001377601f8362001282565b915062001384826200133f565b602082019050919050565b60006020820190508181036000830152620013aa8162001368565b9050919050565b620013bc8162000d06565b82525050565b6000602082019050620013d96000830184620013b1565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001417601b8362001282565b91506200142482620013df565b602082019050919050565b600060208201905081810360008301526200144a8162001408565b9050919050565b60805160a051615d9a620014b66000396000818161131b0152818161198701528181612fa901526133c9015260008181610f0301528181612f51015281816141d0015281816142b1015281816142d801528181614374015261439b0152615d9a6000f3fe6080604052600436106103395760003560e01c806392136913116101ab578063c18bc195116100f7578063dd62ed3e11610095578063ed09924f1161006f578063ed09924f14610c57578063f11a24d314610c80578063f2fde38b14610cab578063f637434214610cd457610340565b8063dd62ed3e14610bc4578063e2f4560514610c01578063e884f26014610c2c57610340565b8063c876d0b9116100d1578063c876d0b914610b06578063c8c8ebe414610b31578063d257b34f14610b5c578063d85ba06314610b9957610340565b8063c18bc19514610a77578063c23697a814610aa0578063c558ae6b14610add57610340565b8063a9059cbb11610164578063b62496f51161013e578063b62496f5146109bd578063bbc0c742146109fa578063c024666814610a25578063c17b5b8c14610a4e57610340565b8063a9059cbb1461092c578063aa4bde2814610969578063aacebbe31461099457610340565b8063921369131461081c57806395d89b41146108475780639a7a23d614610872578063a1623df31461089b578063a2e5b086146108c6578063a457c2d7146108ef57610340565b806339d729aa1161028557806370a08231116102235780637571336a116101fd5780637571336a146107745780637bce5a041461079d5780638095d564146107c85780638da5cb5b146107f157610340565b806370a08231146106f5578063715018a614610732578063751039fc1461074957610340565b80634a62bb651161025f5780634a62bb65146106375780634fbee193146106625780636a486a8e1461069f5780636ddd1713146106ca57610340565b806339d729aa146105b857806341332dcb146105e357806349bd5a5e1461060c57610340565b806318160ddd116102f2578063203e727e116102cc578063203e727e146104ea57806323b872dd14610513578063313ce56714610550578063395093511461057b57610340565b806318160ddd146104695780631a8145bb146104945780631f3fed8f146104bf57610340565b806306fdde0314610345578063095ea7b3146103705780630d38770a146103ad57806310d5de53146103d8578063146368c8146104155780631694505e1461043e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cff565b604051610367919061453b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614605565b610d91565b6040516103a49190614660565b60405180910390f35b3480156103b957600080fd5b506103c2610daf565b6040516103cf919061468a565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906146a5565b610db5565b60405161040c9190614660565b60405180910390f35b34801561042157600080fd5b5061043c6004803603810190610437919061481a565b610dd5565b005b34801561044a57600080fd5b50610453610f01565b60405161046091906148c2565b60405180910390f35b34801561047557600080fd5b5061047e610f25565b60405161048b919061468a565b60405180910390f35b3480156104a057600080fd5b506104a9610f2f565b6040516104b6919061468a565b60405180910390f35b3480156104cb57600080fd5b506104d4610f35565b6040516104e1919061468a565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c91906148dd565b610f3b565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061490a565b611052565b6040516105479190614660565b60405180910390f35b34801561055c57600080fd5b5061056561112b565b6040516105729190614979565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614605565b611134565b6040516105af9190614660565b60405180910390f35b3480156105c457600080fd5b506105cd6111e7565b6040516105da919061468a565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061481a565b6111ed565b005b34801561061857600080fd5b50610621611319565b60405161062e91906149a3565b60405180910390f35b34801561064357600080fd5b5061064c61133d565b6040516106599190614660565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906146a5565b611350565b6040516106969190614660565b60405180910390f35b3480156106ab57600080fd5b506106b46113a6565b6040516106c1919061468a565b60405180910390f35b3480156106d657600080fd5b506106df6113ac565b6040516106ec9190614660565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906146a5565b6113bf565b604051610729919061468a565b60405180910390f35b34801561073e57600080fd5b50610747611407565b005b34801561075557600080fd5b5061075e61155f565b60405161076b9190614660565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906149ea565b61161a565b005b3480156107a957600080fd5b506107b261170c565b6040516107bf919061468a565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190614a2a565b611712565b005b3480156107fd57600080fd5b5061080661182c565b60405161081391906149a3565b60405180910390f35b34801561082857600080fd5b50610831611856565b60405161083e919061468a565b60405180910390f35b34801561085357600080fd5b5061085c61185c565b604051610869919061453b565b60405180910390f35b34801561087e57600080fd5b50610899600480360381019061089491906149ea565b6118ee565b005b3480156108a757600080fd5b506108b0611a21565b6040516108bd919061468a565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906146a5565b611a27565b005b3480156108fb57600080fd5b5061091660048036038101906109119190614605565b611b7e565b6040516109239190614660565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614605565b611c4b565b6040516109609190614660565b60405180910390f35b34801561097557600080fd5b5061097e611c69565b60405161098b919061468a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906146a5565b611c6f565b005b3480156109c957600080fd5b506109e460048036038101906109df91906146a5565b611dc6565b6040516109f19190614660565b60405180910390f35b348015610a0657600080fd5b50610a0f611de6565b604051610a1c9190614660565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a4791906149ea565b611df9565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614a2a565b611f39565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906148dd565b612053565b005b348015610aac57600080fd5b50610ac76004803603810190610ac291906146a5565b61216a565b604051610ad49190614660565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614b40565b6121c0565b005b348015610b1257600080fd5b50610b1b612363565b604051610b289190614660565b60405180910390f35b348015610b3d57600080fd5b50610b46612376565b604051610b53919061468a565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e91906148dd565b61237c565b604051610b909190614660565b60405180910390f35b348015610ba557600080fd5b50610bae6124ec565b604051610bbb919061468a565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614bb8565b6124f2565b604051610bf8919061468a565b60405180910390f35b348015610c0d57600080fd5b50610c16612579565b604051610c23919061468a565b60405180910390f35b348015610c3857600080fd5b50610c4161257f565b604051610c4e9190614660565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190614bf8565b61263a565b005b348015610c8c57600080fd5b50610c95612710565b604051610ca2919061468a565b60405180910390f35b348015610cb757600080fd5b50610cd26004803603810190610ccd91906146a5565b612716565b005b348015610ce057600080fd5b50610ce96128dc565b604051610cf6919061468a565b60405180910390f35b606060038054610d0e90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614c67565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612940565b8484612948565b6001905092915050565b60165481565b601c6020528060005260406000206000915054906101000a900460ff1681565b610ddd612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614ce4565b60405180910390fd5b60005b8151811015610efd576001600d6000848481518110610e9157610e90614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ef590614d62565b915050610e6f565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60175481565b610f43612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614ce4565b60405180910390fd5b670de0b6b3a76400006103e86001610fe8610f25565b610ff29190614daa565b610ffc9190614e1b565b6110069190614e1b565b811015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614ebe565b60405180910390fd5b8060088190555050565b600061105f848484612b11565b6111208461106b612940565b61111b85604051806060016040528060288152602001615d1860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110d1612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b600190509392505050565b60006012905090565b60006111dd611141612940565b846111d88560016000611152612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b612948565b6001905092915050565b60195481565b6111f5612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614ce4565b60405180910390fd5b60005b8151811015611315576000600d60008484815181106112a9576112a8614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061130d90614d62565b915050611287565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149590614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611569612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90614ce4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611622612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614ce4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61171a612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614ce4565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546117d19190614ede565b6117db9190614ede565b600f81905550605a6013541115611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614f5e565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b60606004805461186b90614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461189790614c67565b80156118e45780601f106118b9576101008083540402835291602001916118e4565b820191906000526020600020905b8154815290600101906020018083116118c757829003601f168201915b5050505050905090565b6118f6612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614ce4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90614ff0565b60405180910390fd5b611a1d8282613a03565b5050565b60125481565b611a2f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590614ce4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb13885728eb5fa3d424f250340554614ac8610239d676186903cf079d12ec75160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c41611b8b612940565b84611c3c85604051806060016040528060258152602001615d406025913960016000611bb5612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b6001905092915050565b6000611c5f611c58612940565b8484612b11565b6001905092915050565b600a5481565b611c77612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90614ce4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e01612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614ce4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2d9190614660565b60405180910390a25050565b611f41612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614ce4565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611ff89190614ede565b6120029190614ede565b601381905550605a601354111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614f5e565b60405180910390fd5b505050565b61205b612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e190614ce4565b60405180910390fd5b670de0b6b3a76400006103e86005612100610f25565b61210a9190614daa565b6121149190614e1b565b61211e9190614e1b565b811015612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790615082565b60405180910390fd5b80600a8190555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6121c8612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ce4565b60405180910390fd5b805182511461229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906150ee565b60405180910390fd5b6107d0825111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890615180565b60405180910390fd5b60005b825181101561235e57600083828151811061230257612301614d04565b5b602002602001015190506000670de0b6b3a764000084848151811061232a57612329614d04565b5b602002602001015161233c9190614daa565b9050612349338383613aa4565b5050808061235690614d62565b9150506122e4565b505050565b600e60009054906101000a900460ff1681565b60085481565b6000612386612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614ce4565b60405180910390fd5b620186a06001612423610f25565b61242d9190614daa565b6124379190614e1b565b821015612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090615212565b60405180910390fd5b6103e86005612486610f25565b6124909190614daa565b61249a9190614e1b565b8211156124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906152a4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612589612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f90614ce4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b612642612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614ce4565b60405180910390fd5b81600b60016101000a81548160ff02191690831515021790555080600b60026101000a81548160ff02191690831515021790555043601a819055505050565b60115481565b61271e612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60008082846128f19190614ede565b905083811015612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d906153a2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90615434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d906154c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b04919061468a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be6906155ea565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c935750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc99061567c565b60405180910390fd5b60008103612ceb57612ce683836000613aa4565b61399a565b600b60009054906101000a900460ff16156133ae57612d0861182c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d765750612d4661182c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612daf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e025750600560149054906101000a900460ff16155b156133ad57600b60019054906101000a900460ff16612efc57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ebc5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906156e8565b60405180910390fd5b5b600e60009054906101000a900460ff16156130c457612f1961182c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fa057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130c35743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061307e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613075906157a0565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131675750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576008548111156131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a890615832565b60405180910390fd5b600a546131bd836113bf565b826131c89190614ede565b1115613209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132009061589e565b60405180910390fd5b6133ac565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613300576008548111156132fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f290615930565b60405180910390fd5b6133ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133aa57600a5461335d836113bf565b826133689190614ede565b11156133a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a09061589e565b60405180910390fd5b5b5b5b5b5b6000601a546133bd9190614ede565b431115801561341857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134645750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c2576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006134cd306113bf565b9050600060095482101590508080156134f25750600b60029054906101000a900460ff165b801561350b5750600560149054906101000a900460ff16155b80156135615750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561360d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613651576001600560146101000a81548160ff021916908315150217905550613635613d37565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137075750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371157600090505b6000811561398a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377457506000601354115b15613841576137a160646137936013548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050601354601554826137b49190614daa565b6137be9190614e1b565b601860008282546137cf9190614ede565b92505081905550601354601654826137e79190614daa565b6137f19190614e1b565b601960008282546138029190614ede565b925050819055506013546014548261381a9190614daa565b6138249190614e1b565b601760008282546138359190614ede565b92505081905550613966565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389c57506000600f54115b15613965576138c960646138bb600f548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050600f54601154826138dc9190614daa565b6138e69190614e1b565b601860008282546138f79190614ede565b92505081905550600f546012548261390f9190614daa565b6139199190614e1b565b6019600082825461392a9190614ede565b92505081905550600f54601054826139429190614daa565b61394c9190614e1b565b6017600082825461395d9190614ede565b925050819055505b5b600081111561397b5761397a873083613aa4565b5b80856139879190615950565b94505b613995878787613aa4565b505050505b505050565b60008383111582906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de919061453b565b60405180910390fd5b50600083856139f69190615950565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0a90615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b79906155ea565b60405180910390fd5b613b8d8383836140e2565b613bf881604051806060016040528060268152602001615cf2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d2a919061468a565b60405180910390a3505050565b6000613d42306113bf565b90506000601954601754601854613d599190614ede565b613d639190614ede565b9050600080831480613d755750600082145b15613d825750505061401c565b6014600954613d919190614daa565b831115613daa576014600954613da79190614daa565b92505b600060028360185486613dbd9190614daa565b613dc79190614e1b565b613dd19190614e1b565b90506000613de882866140e790919063ffffffff16565b90506000479050613df882614131565b6000613e0d82476140e790919063ffffffff16565b90506000613e3887613e2a6017548561401e90919063ffffffff16565b61409890919063ffffffff16565b90506000613e6388613e556019548661401e90919063ffffffff16565b61409890919063ffffffff16565b90506000818385613e749190615950565b613e7e9190615950565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ede906159b5565b60006040518083038185875af1925050503d8060008114613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b505080985050600087118015613f365750600081115b15613f8357613f45878261436e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613f7a939291906159ca565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fc9906159b5565b60006040518083038185875af1925050503d8060008114614006576040519150601f19603f3d011682016040523d82523d6000602084013e61400b565b606091505b505080985050505050505050505050505b565b60008083036140305760009050614092565b6000828461403e9190614daa565b905082848261404d9190614e1b565b1461408d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408490615a73565b60405180910390fd5b809150505b92915050565b60006140da83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b905092915050565b505050565b600061412983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061399f565b905092915050565b6000600267ffffffffffffffff81111561414e5761414d6146d7565b5b60405190808252806020026020018201604052801561417c5781602001602082028036833780820191505090505b509050308160008151811061419457614193614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425d9190615aa8565b8160018151811061427157614270614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142d6307f000000000000000000000000000000000000000000000000000000000000000084612948565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614338959493929190615bce565b600060405180830381600087803b15801561435257600080fd5b505af1158015614366573d6000803e3d6000fd5b505050505050565b614399307f000000000000000000000000000000000000000000000000000000000000000084612948565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143fe96959493929190615c28565b60606040518083038185885af115801561441c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144419190615c9e565b5050505050565b6000808311829061448f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614486919061453b565b60405180910390fd5b506000838561449e9190614e1b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e55780820151818401526020810190506144ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061450d826144ab565b61451781856144b6565b93506145278185602086016144c7565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459c82614571565b9050919050565b6145ac81614591565b81146145b757600080fd5b50565b6000813590506145c9816145a3565b92915050565b6000819050919050565b6145e2816145cf565b81146145ed57600080fd5b50565b6000813590506145ff816145d9565b92915050565b6000806040838503121561461c5761461b614567565b5b600061462a858286016145ba565b925050602061463b858286016145f0565b9150509250929050565b60008115159050919050565b61465a81614645565b82525050565b60006020820190506146756000830184614651565b92915050565b614684816145cf565b82525050565b600060208201905061469f600083018461467b565b92915050565b6000602082840312156146bb576146ba614567565b5b60006146c9848285016145ba565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470f826144f1565b810181811067ffffffffffffffff8211171561472e5761472d6146d7565b5b80604052505050565b600061474161455d565b905061474d8282614706565b919050565b600067ffffffffffffffff82111561476d5761476c6146d7565b5b602082029050602081019050919050565b600080fd5b600061479661479184614752565b614737565b905080838252602082019050602084028301858111156147b9576147b861477e565b5b835b818110156147e257806147ce88826145ba565b8452602084019350506020810190506147bb565b5050509392505050565b600082601f830112614801576148006146d2565b5b8135614811848260208601614783565b91505092915050565b6000602082840312156148305761482f614567565b5b600082013567ffffffffffffffff81111561484e5761484d61456c565b5b61485a848285016147ec565b91505092915050565b6000819050919050565b600061488861488361487e84614571565b614863565b614571565b9050919050565b600061489a8261486d565b9050919050565b60006148ac8261488f565b9050919050565b6148bc816148a1565b82525050565b60006020820190506148d760008301846148b3565b92915050565b6000602082840312156148f3576148f2614567565b5b6000614901848285016145f0565b91505092915050565b60008060006060848603121561492357614922614567565b5b6000614931868287016145ba565b9350506020614942868287016145ba565b9250506040614953868287016145f0565b9150509250925092565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d81614591565b82525050565b60006020820190506149b86000830184614994565b92915050565b6149c781614645565b81146149d257600080fd5b50565b6000813590506149e4816149be565b92915050565b60008060408385031215614a0157614a00614567565b5b6000614a0f858286016145ba565b9250506020614a20858286016149d5565b9150509250929050565b600080600060608486031215614a4357614a42614567565b5b6000614a51868287016145f0565b9350506020614a62868287016145f0565b9250506040614a73868287016145f0565b9150509250925092565b600067ffffffffffffffff821115614a9857614a976146d7565b5b602082029050602081019050919050565b6000614abc614ab784614a7d565b614737565b90508083825260208201905060208402830185811115614adf57614ade61477e565b5b835b81811015614b085780614af488826145f0565b845260208401935050602081019050614ae1565b5050509392505050565b600082601f830112614b2757614b266146d2565b5b8135614b37848260208601614aa9565b91505092915050565b60008060408385031215614b5757614b56614567565b5b600083013567ffffffffffffffff811115614b7557614b7461456c565b5b614b81858286016147ec565b925050602083013567ffffffffffffffff811115614ba257614ba161456c565b5b614bae85828601614b12565b9150509250929050565b60008060408385031215614bcf57614bce614567565b5b6000614bdd858286016145ba565b9250506020614bee858286016145ba565b9150509250929050565b60008060408385031215614c0f57614c0e614567565b5b6000614c1d858286016149d5565b9250506020614c2e858286016149d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b602082108103614c9257614c91614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cce6020836144b6565b9150614cd982614c98565b602082019050919050565b60006020820190508181036000830152614cfd81614cc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6d826145cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9f57614d9e614d33565b5b600182019050919050565b6000614db5826145cf565b9150614dc0836145cf565b9250828202614dce816145cf565b91508282048414831517614de557614de4614d33565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e26826145cf565b9150614e31836145cf565b925082614e4157614e40614dec565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ea8602f836144b6565b9150614eb382614e4c565b604082019050919050565b60006020820190508181036000830152614ed781614e9b565b9050919050565b6000614ee9826145cf565b9150614ef4836145cf565b9250828201905080821115614f0c57614f0b614d33565b5b92915050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b6000614f48601d836144b6565b9150614f5382614f12565b602082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fda6039836144b6565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e20302e352500000000000000000000000000000000000000000000602082015250565b600061506c602a836144b6565b915061507782615010565b604082019050919050565b6000602082019050818103600083015261509b8161505f565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006150d8601e836144b6565b91506150e3826150a2565b602082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b600061516a6023836144b6565b91506151758261510e565b604082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151fc6035836144b6565b9150615207826151a0565b604082019050919050565b6000602082019050818103600083015261522b816151ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061528e6034836144b6565b915061529982615232565b604082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153206026836144b6565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061538c601b836144b6565b915061539782615356565b602082019050919050565b600060208201905081810360008301526153bb8161537f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061541e6024836144b6565b9150615429826153c2565b604082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154b06022836144b6565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155426025836144b6565b915061554d826154e6565b604082019050919050565b6000602082019050818103600083015261557181615535565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155d46023836144b6565b91506155df82615578565b604082019050919050565b60006020820190508181036000830152615603816155c7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006156666031836144b6565b91506156718261560a565b604082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156d26016836144b6565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144b6565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144b6565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006158886013836144b6565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144b6565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826145cf565b9150615966836145cf565b925082820390508181111561597e5761597d614d33565b5b92915050565b600081905092915050565b50565b600061599f600083615984565b91506159aa8261598f565b600082019050919050565b60006159c082615992565b9150819050919050565b60006060820190506159df600083018661467b565b6159ec602083018561467b565b6159f9604083018461467b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a5d6021836144b6565b9150615a6882615a01565b604082019050919050565b60006020820190508181036000830152615a8c81615a50565b9050919050565b600081519050615aa2816145a3565b92915050565b600060208284031215615abe57615abd614567565b5b6000615acc84828501615a93565b91505092915050565b6000819050919050565b6000615afa615af5615af084615ad5565b614863565b6145cf565b9050919050565b615b0a81615adf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4581614591565b82525050565b6000615b578383615b3c565b60208301905092915050565b6000602082019050919050565b6000615b7b82615b10565b615b858185615b1b565b9350615b9083615b2c565b8060005b83811015615bc1578151615ba88882615b4b565b9750615bb383615b63565b925050600181019050615b94565b5085935050505092915050565b600060a082019050615be3600083018861467b565b615bf06020830187615b01565b8181036040830152615c028186615b70565b9050615c116060830185614994565b615c1e608083018461467b565b9695505050505050565b600060c082019050615c3d6000830189614994565b615c4a602083018861467b565b615c576040830187615b01565b615c646060830186615b01565b615c716080830185614994565b615c7e60a083018461467b565b979650505050505050565b600081519050615c98816145d9565b92915050565b600080600060608486031215615cb757615cb6614567565b5b6000615cc586828701615c89565b9350506020615cd686828701615c89565b9250506040615ce786828701615c89565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201fba4af577e326f9df239c58df1957d505916c1b95bb9f9e5bb2e43097e51b3b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806392136913116101ab578063c18bc195116100f7578063dd62ed3e11610095578063ed09924f1161006f578063ed09924f14610c57578063f11a24d314610c80578063f2fde38b14610cab578063f637434214610cd457610340565b8063dd62ed3e14610bc4578063e2f4560514610c01578063e884f26014610c2c57610340565b8063c876d0b9116100d1578063c876d0b914610b06578063c8c8ebe414610b31578063d257b34f14610b5c578063d85ba06314610b9957610340565b8063c18bc19514610a77578063c23697a814610aa0578063c558ae6b14610add57610340565b8063a9059cbb11610164578063b62496f51161013e578063b62496f5146109bd578063bbc0c742146109fa578063c024666814610a25578063c17b5b8c14610a4e57610340565b8063a9059cbb1461092c578063aa4bde2814610969578063aacebbe31461099457610340565b8063921369131461081c57806395d89b41146108475780639a7a23d614610872578063a1623df31461089b578063a2e5b086146108c6578063a457c2d7146108ef57610340565b806339d729aa1161028557806370a08231116102235780637571336a116101fd5780637571336a146107745780637bce5a041461079d5780638095d564146107c85780638da5cb5b146107f157610340565b806370a08231146106f5578063715018a614610732578063751039fc1461074957610340565b80634a62bb651161025f5780634a62bb65146106375780634fbee193146106625780636a486a8e1461069f5780636ddd1713146106ca57610340565b806339d729aa146105b857806341332dcb146105e357806349bd5a5e1461060c57610340565b806318160ddd116102f2578063203e727e116102cc578063203e727e146104ea57806323b872dd14610513578063313ce56714610550578063395093511461057b57610340565b806318160ddd146104695780631a8145bb146104945780631f3fed8f146104bf57610340565b806306fdde0314610345578063095ea7b3146103705780630d38770a146103ad57806310d5de53146103d8578063146368c8146104155780631694505e1461043e57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cff565b604051610367919061453b565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190614605565b610d91565b6040516103a49190614660565b60405180910390f35b3480156103b957600080fd5b506103c2610daf565b6040516103cf919061468a565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906146a5565b610db5565b60405161040c9190614660565b60405180910390f35b34801561042157600080fd5b5061043c6004803603810190610437919061481a565b610dd5565b005b34801561044a57600080fd5b50610453610f01565b60405161046091906148c2565b60405180910390f35b34801561047557600080fd5b5061047e610f25565b60405161048b919061468a565b60405180910390f35b3480156104a057600080fd5b506104a9610f2f565b6040516104b6919061468a565b60405180910390f35b3480156104cb57600080fd5b506104d4610f35565b6040516104e1919061468a565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c91906148dd565b610f3b565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061490a565b611052565b6040516105479190614660565b60405180910390f35b34801561055c57600080fd5b5061056561112b565b6040516105729190614979565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190614605565b611134565b6040516105af9190614660565b60405180910390f35b3480156105c457600080fd5b506105cd6111e7565b6040516105da919061468a565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061481a565b6111ed565b005b34801561061857600080fd5b50610621611319565b60405161062e91906149a3565b60405180910390f35b34801561064357600080fd5b5061064c61133d565b6040516106599190614660565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906146a5565b611350565b6040516106969190614660565b60405180910390f35b3480156106ab57600080fd5b506106b46113a6565b6040516106c1919061468a565b60405180910390f35b3480156106d657600080fd5b506106df6113ac565b6040516106ec9190614660565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906146a5565b6113bf565b604051610729919061468a565b60405180910390f35b34801561073e57600080fd5b50610747611407565b005b34801561075557600080fd5b5061075e61155f565b60405161076b9190614660565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906149ea565b61161a565b005b3480156107a957600080fd5b506107b261170c565b6040516107bf919061468a565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190614a2a565b611712565b005b3480156107fd57600080fd5b5061080661182c565b60405161081391906149a3565b60405180910390f35b34801561082857600080fd5b50610831611856565b60405161083e919061468a565b60405180910390f35b34801561085357600080fd5b5061085c61185c565b604051610869919061453b565b60405180910390f35b34801561087e57600080fd5b50610899600480360381019061089491906149ea565b6118ee565b005b3480156108a757600080fd5b506108b0611a21565b6040516108bd919061468a565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906146a5565b611a27565b005b3480156108fb57600080fd5b5061091660048036038101906109119190614605565b611b7e565b6040516109239190614660565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614605565b611c4b565b6040516109609190614660565b60405180910390f35b34801561097557600080fd5b5061097e611c69565b60405161098b919061468a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906146a5565b611c6f565b005b3480156109c957600080fd5b506109e460048036038101906109df91906146a5565b611dc6565b6040516109f19190614660565b60405180910390f35b348015610a0657600080fd5b50610a0f611de6565b604051610a1c9190614660565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a4791906149ea565b611df9565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614a2a565b611f39565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906148dd565b612053565b005b348015610aac57600080fd5b50610ac76004803603810190610ac291906146a5565b61216a565b604051610ad49190614660565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff9190614b40565b6121c0565b005b348015610b1257600080fd5b50610b1b612363565b604051610b289190614660565b60405180910390f35b348015610b3d57600080fd5b50610b46612376565b604051610b53919061468a565b60405180910390f35b348015610b6857600080fd5b50610b836004803603810190610b7e91906148dd565b61237c565b604051610b909190614660565b60405180910390f35b348015610ba557600080fd5b50610bae6124ec565b604051610bbb919061468a565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614bb8565b6124f2565b604051610bf8919061468a565b60405180910390f35b348015610c0d57600080fd5b50610c16612579565b604051610c23919061468a565b60405180910390f35b348015610c3857600080fd5b50610c4161257f565b604051610c4e9190614660565b60405180910390f35b348015610c6357600080fd5b50610c7e6004803603810190610c799190614bf8565b61263a565b005b348015610c8c57600080fd5b50610c95612710565b604051610ca2919061468a565b60405180910390f35b348015610cb757600080fd5b50610cd26004803603810190610ccd91906146a5565b612716565b005b348015610ce057600080fd5b50610ce96128dc565b604051610cf6919061468a565b60405180910390f35b606060038054610d0e90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90614c67565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e612940565b8484612948565b6001905092915050565b60165481565b601c6020528060005260406000206000915054906101000a900460ff1681565b610ddd612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390614ce4565b60405180910390fd5b60005b8151811015610efd576001600d6000848481518110610e9157610e90614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ef590614d62565b915050610e6f565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60175481565b610f43612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990614ce4565b60405180910390fd5b670de0b6b3a76400006103e86001610fe8610f25565b610ff29190614daa565b610ffc9190614e1b565b6110069190614e1b565b811015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614ebe565b60405180910390fd5b8060088190555050565b600061105f848484612b11565b6111208461106b612940565b61111b85604051806060016040528060288152602001615d1860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110d1612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b600190509392505050565b60006012905090565b60006111dd611141612940565b846111d88560016000611152612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b612948565b6001905092915050565b60195481565b6111f5612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614ce4565b60405180910390fd5b60005b8151811015611315576000600d60008484815181106112a9576112a8614d04565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061130d90614d62565b915050611287565b5050565b7f000000000000000000000000ef80ab38aa5f7b4433222585ef3f4777a3e05c4381565b600b60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149590614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611569612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90614ce4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611622612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614ce4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b61171a612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614ce4565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546117d19190614ede565b6117db9190614ede565b600f81905550605a6013541115611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614f5e565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b60606004805461186b90614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461189790614c67565b80156118e45780601f106118b9576101008083540402835291602001916118e4565b820191906000526020600020905b8154815290600101906020018083116118c757829003601f168201915b5050505050905090565b6118f6612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c90614ce4565b60405180910390fd5b7f000000000000000000000000ef80ab38aa5f7b4433222585ef3f4777a3e05c4373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90614ff0565b60405180910390fd5b611a1d8282613a03565b5050565b60125481565b611a2f612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590614ce4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb13885728eb5fa3d424f250340554614ac8610239d676186903cf079d12ec75160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c41611b8b612940565b84611c3c85604051806060016040528060258152602001615d406025913960016000611bb5612940565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b612948565b6001905092915050565b6000611c5f611c58612940565b8484612b11565b6001905092915050565b600a5481565b611c77612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd90614ce4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611e01612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614ce4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2d9190614660565b60405180910390a25050565b611f41612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790614ce4565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611ff89190614ede565b6120029190614ede565b601381905550605a601354111561204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590614f5e565b60405180910390fd5b505050565b61205b612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e190614ce4565b60405180910390fd5b670de0b6b3a76400006103e86005612100610f25565b61210a9190614daa565b6121149190614e1b565b61211e9190614e1b565b811015612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790615082565b60405180910390fd5b80600a8190555050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6121c8612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614ce4565b60405180910390fd5b805182511461229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906150ee565b60405180910390fd5b6107d0825111156122e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d890615180565b60405180910390fd5b60005b825181101561235e57600083828151811061230257612301614d04565b5b602002602001015190506000670de0b6b3a764000084848151811061232a57612329614d04565b5b602002602001015161233c9190614daa565b9050612349338383613aa4565b5050808061235690614d62565b9150506122e4565b505050565b600e60009054906101000a900460ff1681565b60085481565b6000612386612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614ce4565b60405180910390fd5b620186a06001612423610f25565b61242d9190614daa565b6124379190614e1b565b821015612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090615212565b60405180910390fd5b6103e86005612486610f25565b6124909190614daa565b61249a9190614e1b565b8211156124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d3906152a4565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612589612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260f90614ce4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b612642612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614ce4565b60405180910390fd5b81600b60016101000a81548160ff02191690831515021790555080600b60026101000a81548160ff02191690831515021790555043601a819055505050565b60115481565b61271e612940565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490614ce4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60008082846128f19190614ede565b905083811015612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d906153a2565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90615434565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d906154c6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b04919061468a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be6906155ea565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c935750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc99061567c565b60405180910390fd5b60008103612ceb57612ce683836000613aa4565b61399a565b600b60009054906101000a900460ff16156133ae57612d0861182c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d765750612d4661182c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612daf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e025750600560149054906101000a900460ff16155b156133ad57600b60019054906101000a900460ff16612efc57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ebc5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906156e8565b60405180910390fd5b5b600e60009054906101000a900460ff16156130c457612f1961182c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fa057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ff857507f000000000000000000000000ef80ab38aa5f7b4433222585ef3f4777a3e05c4373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130c35743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061307e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613075906157a0565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131675750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561320e576008548111156131b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a890615832565b60405180910390fd5b600a546131bd836113bf565b826131c89190614ede565b1115613209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132009061589e565b60405180910390fd5b6133ac565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b15750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613300576008548111156132fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f290615930565b60405180910390fd5b6133ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133aa57600a5461335d836113bf565b826133689190614ede565b11156133a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a09061589e565b60405180910390fd5b5b5b5b5b5b6000601a546133bd9190614ede565b431115801561341857507f000000000000000000000000ef80ab38aa5f7b4433222585ef3f4777a3e05c4373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156134645750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c2576000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006134cd306113bf565b9050600060095482101590508080156134f25750600b60029054906101000a900460ff165b801561350b5750600560149054906101000a900460ff16155b80156135615750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b75750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561360d5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613651576001600560146101000a81548160ff021916908315150217905550613635613d37565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137075750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371157600090505b6000811561398a57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377457506000601354115b15613841576137a160646137936013548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050601354601554826137b49190614daa565b6137be9190614e1b565b601860008282546137cf9190614ede565b92505081905550601354601654826137e79190614daa565b6137f19190614e1b565b601960008282546138029190614ede565b925050819055506013546014548261381a9190614daa565b6138249190614e1b565b601760008282546138359190614ede565b92505081905550613966565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389c57506000600f54115b15613965576138c960646138bb600f548861401e90919063ffffffff16565b61409890919063ffffffff16565b9050600f54601154826138dc9190614daa565b6138e69190614e1b565b601860008282546138f79190614ede565b92505081905550600f546012548261390f9190614daa565b6139199190614e1b565b6019600082825461392a9190614ede565b92505081905550600f54601054826139429190614daa565b61394c9190614e1b565b6017600082825461395d9190614ede565b925050819055505b5b600081111561397b5761397a873083613aa4565b5b80856139879190615950565b94505b613995878787613aa4565b505050505b505050565b60008383111582906139e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139de919061453b565b60405180910390fd5b50600083856139f69190615950565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0a90615558565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b79906155ea565b60405180910390fd5b613b8d8383836140e2565b613bf881604051806060016040528060268152602001615cf2602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d2a919061468a565b60405180910390a3505050565b6000613d42306113bf565b90506000601954601754601854613d599190614ede565b613d639190614ede565b9050600080831480613d755750600082145b15613d825750505061401c565b6014600954613d919190614daa565b831115613daa576014600954613da79190614daa565b92505b600060028360185486613dbd9190614daa565b613dc79190614e1b565b613dd19190614e1b565b90506000613de882866140e790919063ffffffff16565b90506000479050613df882614131565b6000613e0d82476140e790919063ffffffff16565b90506000613e3887613e2a6017548561401e90919063ffffffff16565b61409890919063ffffffff16565b90506000613e6388613e556019548661401e90919063ffffffff16565b61409890919063ffffffff16565b90506000818385613e749190615950565b613e7e9190615950565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ede906159b5565b60006040518083038185875af1925050503d8060008114613f1b576040519150601f19603f3d011682016040523d82523d6000602084013e613f20565b606091505b505080985050600087118015613f365750600081115b15613f8357613f45878261436e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613f7a939291906159ca565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fc9906159b5565b60006040518083038185875af1925050503d8060008114614006576040519150601f19603f3d011682016040523d82523d6000602084013e61400b565b606091505b505080985050505050505050505050505b565b60008083036140305760009050614092565b6000828461403e9190614daa565b905082848261404d9190614e1b565b1461408d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408490615a73565b60405180910390fd5b809150505b92915050565b60006140da83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b905092915050565b505050565b600061412983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061399f565b905092915050565b6000600267ffffffffffffffff81111561414e5761414d6146d7565b5b60405190808252806020026020018201604052801561417c5781602001602082028036833780820191505090505b509050308160008151811061419457614193614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425d9190615aa8565b8160018151811061427157614270614d04565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142d6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612948565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614338959493929190615bce565b600060405180830381600087803b15801561435257600080fd5b505af1158015614366573d6000803e3d6000fd5b505050505050565b614399307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612948565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016143fe96959493929190615c28565b60606040518083038185885af115801561441c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144419190615c9e565b5050505050565b6000808311829061448f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614486919061453b565b60405180910390fd5b506000838561449e9190614e1b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144e55780820151818401526020810190506144ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061450d826144ab565b61451781856144b6565b93506145278185602086016144c7565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459c82614571565b9050919050565b6145ac81614591565b81146145b757600080fd5b50565b6000813590506145c9816145a3565b92915050565b6000819050919050565b6145e2816145cf565b81146145ed57600080fd5b50565b6000813590506145ff816145d9565b92915050565b6000806040838503121561461c5761461b614567565b5b600061462a858286016145ba565b925050602061463b858286016145f0565b9150509250929050565b60008115159050919050565b61465a81614645565b82525050565b60006020820190506146756000830184614651565b92915050565b614684816145cf565b82525050565b600060208201905061469f600083018461467b565b92915050565b6000602082840312156146bb576146ba614567565b5b60006146c9848285016145ba565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470f826144f1565b810181811067ffffffffffffffff8211171561472e5761472d6146d7565b5b80604052505050565b600061474161455d565b905061474d8282614706565b919050565b600067ffffffffffffffff82111561476d5761476c6146d7565b5b602082029050602081019050919050565b600080fd5b600061479661479184614752565b614737565b905080838252602082019050602084028301858111156147b9576147b861477e565b5b835b818110156147e257806147ce88826145ba565b8452602084019350506020810190506147bb565b5050509392505050565b600082601f830112614801576148006146d2565b5b8135614811848260208601614783565b91505092915050565b6000602082840312156148305761482f614567565b5b600082013567ffffffffffffffff81111561484e5761484d61456c565b5b61485a848285016147ec565b91505092915050565b6000819050919050565b600061488861488361487e84614571565b614863565b614571565b9050919050565b600061489a8261486d565b9050919050565b60006148ac8261488f565b9050919050565b6148bc816148a1565b82525050565b60006020820190506148d760008301846148b3565b92915050565b6000602082840312156148f3576148f2614567565b5b6000614901848285016145f0565b91505092915050565b60008060006060848603121561492357614922614567565b5b6000614931868287016145ba565b9350506020614942868287016145ba565b9250506040614953868287016145f0565b9150509250925092565b600060ff82169050919050565b6149738161495d565b82525050565b600060208201905061498e600083018461496a565b92915050565b61499d81614591565b82525050565b60006020820190506149b86000830184614994565b92915050565b6149c781614645565b81146149d257600080fd5b50565b6000813590506149e4816149be565b92915050565b60008060408385031215614a0157614a00614567565b5b6000614a0f858286016145ba565b9250506020614a20858286016149d5565b9150509250929050565b600080600060608486031215614a4357614a42614567565b5b6000614a51868287016145f0565b9350506020614a62868287016145f0565b9250506040614a73868287016145f0565b9150509250925092565b600067ffffffffffffffff821115614a9857614a976146d7565b5b602082029050602081019050919050565b6000614abc614ab784614a7d565b614737565b90508083825260208201905060208402830185811115614adf57614ade61477e565b5b835b81811015614b085780614af488826145f0565b845260208401935050602081019050614ae1565b5050509392505050565b600082601f830112614b2757614b266146d2565b5b8135614b37848260208601614aa9565b91505092915050565b60008060408385031215614b5757614b56614567565b5b600083013567ffffffffffffffff811115614b7557614b7461456c565b5b614b81858286016147ec565b925050602083013567ffffffffffffffff811115614ba257614ba161456c565b5b614bae85828601614b12565b9150509250929050565b60008060408385031215614bcf57614bce614567565b5b6000614bdd858286016145ba565b9250506020614bee858286016145ba565b9150509250929050565b60008060408385031215614c0f57614c0e614567565b5b6000614c1d858286016149d5565b9250506020614c2e858286016149d5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b602082108103614c9257614c91614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cce6020836144b6565b9150614cd982614c98565b602082019050919050565b60006020820190508181036000830152614cfd81614cc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6d826145cf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d9f57614d9e614d33565b5b600182019050919050565b6000614db5826145cf565b9150614dc0836145cf565b9250828202614dce816145cf565b91508282048414831517614de557614de4614d33565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e26826145cf565b9150614e31836145cf565b925082614e4157614e40614dec565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ea8602f836144b6565b9150614eb382614e4c565b604082019050919050565b60006020820190508181036000830152614ed781614e9b565b9050919050565b6000614ee9826145cf565b9150614ef4836145cf565b9250828201905080821115614f0c57614f0b614d33565b5b92915050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b6000614f48601d836144b6565b9150614f5382614f12565b602082019050919050565b60006020820190508181036000830152614f7781614f3b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fda6039836144b6565b9150614fe582614f7e565b604082019050919050565b6000602082019050818103600083015261500981614fcd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574416d6f756e74206c6f77657260008201527f207468616e20302e352500000000000000000000000000000000000000000000602082015250565b600061506c602a836144b6565b915061507782615010565b604082019050919050565b6000602082019050818103600083015261509b8161505f565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006150d8601e836144b6565b91506150e3826150a2565b602082019050919050565b60006020820190508181036000830152615107816150cb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b600061516a6023836144b6565b91506151758261510e565b604082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151fc6035836144b6565b9150615207826151a0565b604082019050919050565b6000602082019050818103600083015261522b816151ef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061528e6034836144b6565b915061529982615232565b604082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153206026836144b6565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061538c601b836144b6565b915061539782615356565b602082019050919050565b600060208201905081810360008301526153bb8161537f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061541e6024836144b6565b9150615429826153c2565b604082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154b06022836144b6565b91506154bb82615454565b604082019050919050565b600060208201905081810360008301526154df816154a3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155426025836144b6565b915061554d826154e6565b604082019050919050565b6000602082019050818103600083015261557181615535565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155d46023836144b6565b91506155df82615578565b604082019050919050565b60006020820190508181036000830152615603816155c7565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006156666031836144b6565b91506156718261560a565b604082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156d26016836144b6565b91506156dd8261569c565b602082019050919050565b60006020820190508181036000830152615701816156c5565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061578a6049836144b6565b915061579582615708565b606082019050919050565b600060208201905081810360008301526157b98161577d565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061581c6035836144b6565b9150615827826157c0565b604082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006158886013836144b6565b915061589382615852565b602082019050919050565b600060208201905081810360008301526158b78161587b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061591a6036836144b6565b9150615925826158be565b604082019050919050565b600060208201905081810360008301526159498161590d565b9050919050565b600061595b826145cf565b9150615966836145cf565b925082820390508181111561597e5761597d614d33565b5b92915050565b600081905092915050565b50565b600061599f600083615984565b91506159aa8261598f565b600082019050919050565b60006159c082615992565b9150819050919050565b60006060820190506159df600083018661467b565b6159ec602083018561467b565b6159f9604083018461467b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a5d6021836144b6565b9150615a6882615a01565b604082019050919050565b60006020820190508181036000830152615a8c81615a50565b9050919050565b600081519050615aa2816145a3565b92915050565b600060208284031215615abe57615abd614567565b5b6000615acc84828501615a93565b91505092915050565b6000819050919050565b6000615afa615af5615af084615ad5565b614863565b6145cf565b9050919050565b615b0a81615adf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4581614591565b82525050565b6000615b578383615b3c565b60208301905092915050565b6000602082019050919050565b6000615b7b82615b10565b615b858185615b1b565b9350615b9083615b2c565b8060005b83811015615bc1578151615ba88882615b4b565b9750615bb383615b63565b925050600181019050615b94565b5085935050505092915050565b600060a082019050615be3600083018861467b565b615bf06020830187615b01565b8181036040830152615c028186615b70565b9050615c116060830185614994565b615c1e608083018461467b565b9695505050505050565b600060c082019050615c3d6000830189614994565b615c4a602083018861467b565b615c576040830187615b01565b615c646060830186615b01565b615c716080830185614994565b615c7e60a083018461467b565b979650505050505050565b600081519050615c98816145d9565b92915050565b600080600060608486031215615cb757615cb6614567565b5b6000615cc586828701615c89565b9350506020615cd686828701615c89565b9250506040615ce786828701615c89565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201fba4af577e326f9df239c58df1957d505916c1b95bb9f9e5bb2e43097e51b3b64736f6c63430008110033

Deployed Bytecode Sourcemap

35815:16211:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13919:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16093:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37001:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37362:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43339:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35897:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15042:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37076:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37036;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41307:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16745:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14883:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17510:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37116:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43507:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35955:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36315:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44179:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36890:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36395:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15214:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28423:148;;;;;;;;;;;;;:::i;:::-;;40524:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41764:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36782:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42311:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27779:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36925:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14139:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42884:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36856:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44013:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18232:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15555:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36275:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43796:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37585:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36355:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42693:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41922:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41539:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43682:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44314:554;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36698:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36193:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40912:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36748:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15794:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36235:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40706:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40290:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36819:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28727:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36963:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13919:100;13973:13;14006:5;13999:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13919:100;:::o;16093:169::-;16176:4;16193:39;16202:12;:10;:12::i;:::-;16216:7;16225:6;16193:8;:39::i;:::-;16250:4;16243:11;;16093:169;;;;:::o;37001:25::-;;;;:::o;37362:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;43339:164::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43405:6:::1;43400:96;43421:5;:12;43417:1;:16;43400:96;;;43478:4;43455:10;:20;43466:5;43472:1;43466:8;;;;;;;;:::i;:::-;;;;;;;;43455:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;43435:3;;;;;:::i;:::-;;;;43400:96;;;;43339:164:::0;:::o;35897:51::-;;;:::o;15042:108::-;15103:7;15130:12;;15123:19;;15042:108;:::o;37076:33::-;;;;:::o;37036:::-;;;;:::o;41307:223::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41426:4:::1;41420;41416:1;41400:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;41399:31;;;;:::i;:::-;41389:6;:41;;41381:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;41516:6;41493:20;:29;;;;41307:223:::0;:::o;16745:355::-;16885:4;16902:36;16912:6;16920:9;16931:6;16902:9;:36::i;:::-;16949:121;16958:6;16966:12;:10;:12::i;:::-;16980:89;17018:6;16980:89;;;;;;;;;;;;;;;;;:11;:19;16992:6;16980:19;;;;;;;;;;;;;;;:33;17000:12;:10;:12::i;:::-;16980:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16949:8;:121::i;:::-;17088:4;17081:11;;16745:355;;;;;:::o;14883:93::-;14941:5;14966:2;14959:9;;14883:93;:::o;17510:218::-;17598:4;17615:83;17624:12;:10;:12::i;:::-;17638:7;17647:50;17686:10;17647:11;:25;17659:12;:10;:12::i;:::-;17647:25;;;;;;;;;;;;;;;:34;17673:7;17647:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17615:8;:83::i;:::-;17716:4;17709:11;;17510:218;;;;:::o;37116:27::-;;;;:::o;43507:167::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43579:6:::1;43574:93;43595:6;:13;43591:1;:17;43574:93;;;43652:5;43628:10;:21;43639:6;43646:1;43639:9;;;;;;;;:::i;:::-;;;;;;;;43628:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43610:3;;;;;:::i;:::-;;;;43574:93;;;;43507:167:::0;:::o;35955:38::-;;;:::o;36315:33::-;;;;;;;;;;;;;:::o;44179:125::-;44244:4;44268:19;:28;44288:7;44268:28;;;;;;;;;;;;;;;;;;;;;;;;;44261:35;;44179:125;;;:::o;36890:28::-;;;;:::o;36395:30::-;;;;;;;;;;;;;:::o;15214:127::-;15288:7;15315:9;:18;15325:7;15315:18;;;;;;;;;;;;;;;;15308:25;;15214:127;;;:::o;28423:148::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28530:1:::1;28493:40;;28514:6;;;;;;;;;;;28493:40;;;;;;;;;;;;28561:1;28544:6;;:19;;;;;;;;;;;;;;;;;;28423:148::o:0;40524:120::-;40576:4;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40609:5:::1;40592:14;;:22;;;;;;;;;;;;;;;;;;40632:4;40625:11;;40524:120:::0;:::o;41764:144::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41896:4:::1;41854:31;:39;41886:6;41854:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41764:144:::0;;:::o;36782:30::-;;;;:::o;42311:372::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42446:13:::1;42428:15;:31;;;;42488:13;42470:15;:31;;;;42524:8;42512:9;:20;;;;42594:9;;42576:15;;42558;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;42543:12;:60;;;;42639:2;42622:13;;:19;;42614:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42311:372:::0;;;:::o;27779:79::-;27817:7;27844:6;;;;;;;;;;;27837:13;;27779:79;:::o;36925:31::-;;;;:::o;14139:104::-;14195:13;14228:7;14221:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14139:104;:::o;42884:245::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42991:13:::1;42983:21;;:4;:21;;::::0;42975:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43080:41;43109:4;43115:5;43080:28;:41::i;:::-;42884:245:::0;;:::o;36856:24::-;;;;:::o;44013:157::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44120:9:::1;;;;;;;;;;;44092:38;;44109:9;44092:38;;;;;;;;;;;;44153:9;44141;;:21;;;;;;;;;;;;;;;;;;44013:157:::0;:::o;18232:269::-;18325:4;18342:129;18351:12;:10;:12::i;:::-;18365:7;18374:96;18413:15;18374:96;;;;;;;;;;;;;;;;;:11;:25;18386:12;:10;:12::i;:::-;18374:25;;;;;;;;;;;;;;;:34;18400:7;18374:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18342:8;:129::i;:::-;18489:4;18482:11;;18232:269;;;;:::o;15555:175::-;15641:4;15658:42;15668:12;:10;:12::i;:::-;15682:9;15693:6;15658:9;:42::i;:::-;15718:4;15711:11;;15555:175;;;;:::o;36275:30::-;;;;:::o;43796:208::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43933:15:::1;;;;;;;;;;;43890:59;;43913:18;43890:59;;;;;;;;;;;;43978:18;43960:15;;:36;;;;;;;;;;;;;;;;;;43796:208:::0;:::o;37585:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;36355:33::-;;;;;;;;;;;;;:::o;42693:182::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42809:8:::1;42778:19;:28;42798:7;42778:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42849:7;42833:34;;;42858:8;42833:34;;;;;;:::i;:::-;;;;;;;;42693:182:::0;;:::o;41922:380::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42059:13:::1;42040:16;:32;;;;42102:13;42083:16;:32;;;;42139:8;42126:10;:21;;;;42212:10;;42193:16;;42174;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42158:13;:64;;;;42258:2;42241:13;;:19;;42233:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41922:380:::0;;;:::o;41539:216::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41661:4:::1;41655;41651:1;41635:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;41634:31;;;;:::i;:::-;41624:6;:41;;41616:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41741:6;41723:15;:24;;;;41539:216:::0;:::o;43682:99::-;43734:4;43755:10;:18;43766:6;43755:18;;;;;;;;;;;;;;;;;;;;;;;;;43748:25;;43682:99;;;:::o;44314:554::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44477:6:::1;:13;44452:14;:21;:38;44444:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44569:4;44544:14;:21;:29;;44536:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44629:9;44624:237;44648:14;:21;44644:1;:25;44624:237;;;44691:14;44708;44723:1;44708:17;;;;;;;;:::i;:::-;;;;;;;;44691:34;;44740:21;44777:6;44764;44771:1;44764:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;44740:44;;44799:50;44815:10;44827:6;44835:13;44799:15;:50::i;:::-;44676:185;;44671:3;;;;;:::i;:::-;;;;44624:237;;;;44314:554:::0;;:::o;36698:40::-;;;;;;;;;;;;;:::o;36193:35::-;;;;:::o;40912:386::-;40993:4;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41050:6:::1;41046:1;41030:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;41017:9;:39;;41009:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;41166:4;41162:1;41146:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;41133:9;:37;;41125:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41259:9;41238:18;:30;;;;41286:4;41279:11;;40912:386:::0;;;:::o;36748:27::-;;;;:::o;15794:151::-;15883:7;15910:11;:18;15922:5;15910:18;;;;;;;;;;;;;;;:27;15929:7;15910:27;;;;;;;;;;;;;;;;15903:34;;15794:151;;;;:::o;36235:33::-;;;;:::o;40706:134::-;40766:4;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40805:5:::1;40782:20;;:28;;;;;;;;;;;;;;;;;;40828:4;40821:11;;40706:134:::0;:::o;40290:181::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40386:11:::1;40370:13;;:27;;;;;;;;;;;;;;;;;;40422:5;40408:11;;:19;;;;;;;;;;;;;;;;;;40451:12;40438:10;:25;;;;40290:181:::0;;:::o;36819:30::-;;;;:::o;28727:244::-;28002:12;:10;:12::i;:::-;27992:22;;:6;;;;;;;;;;;:22;;;27984:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28836:1:::1;28816:22;;:8;:22;;::::0;28808:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28926:8;28897:38;;28918:6;;;;;;;;;;;28897:38;;;;;;;;;;;;28955:8;28946:6;;:17;;;;;;;;;;;;;;;;;;28727:244:::0;:::o;36963:31::-;;;;:::o;22809:182::-;22867:7;22887:9;22903:1;22899;:5;;;;:::i;:::-;22887:17;;22928:1;22923;:6;;22915:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22982:1;22975:8;;;22809:182;;;;:::o;6611:98::-;6664:7;6691:10;6684:17;;6611:98;:::o;21428:381::-;21581:1;21564:19;;:5;:19;;;21556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21662:1;21643:21;;:7;:21;;;21635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21747:6;21717:11;:18;21729:5;21717:18;;;;;;;;;;;;;;;:27;21736:7;21717:27;;;;;;;;;;;;;;;:36;;;;21785:7;21769:32;;21778:5;21769:32;;;21794:6;21769:32;;;;;;:::i;:::-;;;;;;;;21428:381;;;:::o;44882:4419::-;45030:1;45014:18;;:4;:18;;;45006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45107:1;45093:16;;:2;:16;;;45085:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45169:10;:14;45180:2;45169:14;;;;;;;;;;;;;;;;;;;;;;;;;45168:15;:36;;;;;45188:10;:16;45199:4;45188:16;;;;;;;;;;;;;;;;;;;;;;;;;45187:17;45168:36;45160:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45283:1;45273:6;:11;45270:92;;45301:28;45317:4;45323:2;45327:1;45301:15;:28::i;:::-;45344:7;;45270:92;45378:14;;;;;;;;;;;45375:1823;;;45438:7;:5;:7::i;:::-;45430:15;;:4;:15;;;;:49;;;;;45472:7;:5;:7::i;:::-;45466:13;;:2;:13;;;;45430:49;:86;;;;;45514:1;45500:16;;:2;:16;;;;45430:86;:128;;;;;45551:6;45537:21;;:2;:21;;;;45430:128;:158;;;;;45580:8;;;;;;;;;;;45579:9;45430:158;45408:1779;;;45626:13;;;;;;;;;;;45622:148;;45671:19;:25;45691:4;45671:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45700:19;:23;45720:2;45700:23;;;;;;;;;;;;;;;;;;;;;;;;;45671:52;45663:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45622:148;45929:20;;;;;;;;;;;45925:423;;;45983:7;:5;:7::i;:::-;45977:13;;:2;:13;;;;:47;;;;;46008:15;45994:30;;:2;:30;;;;45977:47;:79;;;;;46042:13;46028:28;;:2;:28;;;;45977:79;45973:356;;;46134:12;46092:28;:39;46121:9;46092:39;;;;;;;;;;;;;;;;:54;46084:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46293:12;46251:28;:39;46280:9;46251:39;;;;;;;;;;;;;;;:54;;;;45973:356;45925:423;46401:25;:31;46427:4;46401:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;46437:31;:35;46469:2;46437:35;;;;;;;;;;;;;;;;;;;;;;;;;46436:36;46401:71;46397:775;;;46519:20;;46509:6;:30;;46501:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;46658:15;;46641:13;46651:2;46641:9;:13::i;:::-;46632:6;:22;;;;:::i;:::-;:41;;46624:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46397:775;;;46776:25;:29;46802:2;46776:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;46810:31;:37;46842:4;46810:37;;;;;;;;;;;;;;;;;;;;;;;;;46809:38;46776:71;46772:400;;;46894:20;;46884:6;:30;;46876:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46772:400;;;47020:31;:35;47052:2;47020:35;;;;;;;;;;;;;;;;;;;;;;;;;47016:156;;47113:15;;47096:13;47106:2;47096:9;:13::i;:::-;47087:6;:22;;;;:::i;:::-;:41;;47079:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47016:156;46772:400;46397:775;45408:1779;45375:1823;47272:1;47259:10;;:14;;;;:::i;:::-;47242:12;:32;;:73;;;;;47302:13;47296:19;;:2;:19;;;;47242:73;:152;;;;;47351:42;47337:57;;:2;:57;;;;47242:152;47238:222;;;47443:5;47426:10;:14;47437:2;47426:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;47238:222;47473:28;47504:24;47522:4;47504:9;:24::i;:::-;47473:55;;47542:12;47581:18;;47557:20;:42;;47542:57;;47631:7;:35;;;;;47655:11;;;;;;;;;;;47631:35;:61;;;;;47684:8;;;;;;;;;;;47683:9;47631:61;:110;;;;;47710:25;:31;47736:4;47710:31;;;;;;;;;;;;;;;;;;;;;;;;;47709:32;47631:110;:153;;;;;47759:19;:25;47779:4;47759:25;;;;;;;;;;;;;;;;;;;;;;;;;47758:26;47631:153;:194;;;;;47802:19;:23;47822:2;47802:23;;;;;;;;;;;;;;;;;;;;;;;;;47801:24;47631:194;47613:328;;;47863:4;47852:8;;:15;;;;;;;;;;;;;;;;;;47885:10;:8;:10::i;:::-;47924:5;47913:8;;:16;;;;;;;;;;;;;;;;;;47613:328;47954:12;47970:8;;;;;;;;;;;47969:9;47954:24;;48080:19;:25;48100:4;48080:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48109:19;:23;48129:2;48109:23;;;;;;;;;;;;;;;;;;;;;;;;;48080:52;48077:99;;;48159:5;48149:15;;48077:99;48189:12;48293:7;48290:957;;;48344:25;:29;48370:2;48344:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;48393:1;48377:13;;:17;48344:50;48340:754;;;48421:34;48451:3;48421:25;48432:13;;48421:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;48414:41;;48522:13;;48503:16;;48496:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;48474:18;;:61;;;;;;;:::i;:::-;;;;;;;;48590:13;;48577:10;;48570:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;48554:12;;:49;;;;;;;:::i;:::-;;;;;;;;48670:13;;48651:16;;48644:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;48622:18;;:61;;;;;;;:::i;:::-;;;;;;;;48340:754;;;48744:25;:31;48770:4;48744:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;48794:1;48779:12;;:16;48744:51;48741:353;;;48823:33;48852:3;48823:24;48834:12;;48823:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;48816:40;;48922:12;;48904:15;;48897:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;48875:18;;:59;;;;;;;:::i;:::-;;;;;;;;48988:12;;48976:9;;48969:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;48953:12;;:47;;;;;;;:::i;:::-;;;;;;;;49066:12;;49048:15;;49041:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;49019:18;;:59;;;;;;;:::i;:::-;;;;;;;;48741:353;48340:754;49121:1;49114:4;:8;49111:93;;;49146:42;49162:4;49176;49183;49146:15;:42::i;:::-;49111:93;49231:4;49221:14;;;;;:::i;:::-;;;48290:957;49260:33;49276:4;49282:2;49286:6;49260:15;:33::i;:::-;44995:4306;;;;44882:4419;;;;:::o;23715:193::-;23801:7;23834:1;23829;:6;;23837:12;23821:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23861:9;23877:1;23873;:5;;;;:::i;:::-;23861:17;;23899:1;23892:8;;;23715:193;;;;;:::o;43138:189::-;43255:5;43221:25;:31;43247:4;43221:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43313:5;43279:40;;43307:4;43279:40;;;;;;;;;;;;43138:189;;:::o;18992:575::-;19150:1;19132:20;;:6;:20;;;19124:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19234:1;19213:23;;:9;:23;;;19205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19290:47;19311:6;19319:9;19330:6;19290:20;:47::i;:::-;19371:71;19393:6;19371:71;;;;;;;;;;;;;;;;;:9;:17;19381:6;19371:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;19351:9;:17;19361:6;19351:17;;;;;;;;;;;;;;;:91;;;;19476:32;19501:6;19476:9;:20;19486:9;19476:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19453:9;:20;19463:9;19453:20;;;;;;;;;;;;;;;:55;;;;19541:9;19524:35;;19533:6;19524:35;;;19552:6;19524:35;;;;;;:::i;:::-;;;;;;;;18992:575;;;:::o;50445:1568::-;50484:23;50510:24;50528:4;50510:9;:24::i;:::-;50484:50;;50545:25;50615:12;;50594:18;;50573;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;50545:82;;50638:12;50686:1;50667:15;:20;:46;;;;50712:1;50691:17;:22;50667:46;50664:60;;;50716:7;;;;;50664:60;50779:2;50758:18;;:23;;;;:::i;:::-;50740:15;:41;50737:111;;;50834:2;50813:18;;:23;;;;:::i;:::-;50795:41;;50737:111;50910:23;50995:1;50975:17;50954:18;;50936:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;50910:86;;51007:26;51036:36;51056:15;51036;:19;;:36;;;;:::i;:::-;51007:65;;51086:25;51114:21;51086:49;;51149:36;51166:18;51149:16;:36::i;:::-;51200:18;51221:44;51247:17;51221:21;:25;;:44;;;;:::i;:::-;51200:65;;51279:23;51305:57;51344:17;51305:34;51320:18;;51305:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;51279:83;;51373:17;51393:51;51426:17;51393:28;51408:12;;51393:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;51373:71;;51455:23;51512:9;51494:15;51481:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;51455:66;;51559:1;51538:18;:22;;;;51592:1;51571:18;:22;;;;51619:1;51604:12;:16;;;;51655:9;;;;;;;;;;;51647:23;;51678:9;51647:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51634:58;;;;;51727:1;51709:15;:19;:42;;;;;51750:1;51732:15;:19;51709:42;51706:210;;;51767:46;51780:15;51797;51767:12;:46::i;:::-;51833:71;51848:18;51868:15;51885:18;;51833:71;;;;;;;;:::i;:::-;;;;;;;;51706:210;51950:15;;;;;;;;;;;51942:29;;51979:21;51942:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51929:76;;;;;50473:1540;;;;;;;;;;50445:1568;:::o;24168:473::-;24226:7;24476:1;24471;:6;24467:47;;24501:1;24494:8;;;;24467:47;24527:9;24543:1;24539;:5;;;;:::i;:::-;24527:17;;24572:1;24567;24563;:5;;;;:::i;:::-;:10;24555:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24632:1;24625:8;;;24168:473;;;;;:::o;25118:132::-;25176:7;25203:39;25207:1;25210;25203:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;25196:46;;25118:132;;;;:::o;22413:125::-;;;;:::o;23275:136::-;23333:7;23360:43;23364:1;23367;23360:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;23353:50;;23275:136;;;;:::o;49310:597::-;49439:21;49477:1;49463:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49439:40;;49508:4;49490;49495:1;49490:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;49534:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49524:4;49529:1;49524:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;49570:62;49587:4;49602:15;49620:11;49570:8;:62::i;:::-;49672:15;:66;;;49753:11;49779:1;49823:4;49850;49870:15;49672:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49365:542;49310:597;:::o;49916:520::-;50064:62;50081:4;50096:15;50114:11;50064:8;:62::i;:::-;50170:15;:31;;;50209:9;50242:4;50262:11;50288:1;50331;50382:4;50402:15;50170:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49916:520;;:::o;25747:279::-;25833:7;25865:1;25861;:5;25868:12;25853:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25892:9;25908:1;25904;:5;;;;:::i;:::-;25892:17;;26017:1;26010:8;;;25747:279;;;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652: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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:180;4304:77;4301:1;4294:88;4401:4;4398:1;4391:15;4425:4;4422:1;4415:15;4442:281;4525:27;4547:4;4525:27;:::i;:::-;4517:6;4513:40;4655:6;4643:10;4640:22;4619:18;4607:10;4604:34;4601:62;4598:88;;;4666:18;;:::i;:::-;4598:88;4706:10;4702:2;4695:22;4485:238;4442:281;;:::o;4729:129::-;4763:6;4790:20;;:::i;:::-;4780:30;;4819:33;4847:4;4839:6;4819:33;:::i;:::-;4729:129;;;:::o;4864:311::-;4941:4;5031:18;5023:6;5020:30;5017:56;;;5053:18;;:::i;:::-;5017:56;5103:4;5095:6;5091:17;5083:25;;5163:4;5157;5153:15;5145:23;;4864:311;;;:::o;5181:117::-;5290:1;5287;5280:12;5321:710;5417:5;5442:81;5458:64;5515:6;5458:64;:::i;:::-;5442:81;:::i;:::-;5433:90;;5543:5;5572:6;5565:5;5558:21;5606:4;5599:5;5595:16;5588:23;;5659:4;5651:6;5647:17;5639:6;5635:30;5688:3;5680:6;5677:15;5674:122;;;5707:79;;:::i;:::-;5674:122;5822:6;5805:220;5839:6;5834:3;5831:15;5805:220;;;5914:3;5943:37;5976:3;5964:10;5943:37;:::i;:::-;5938:3;5931:50;6010:4;6005:3;6001:14;5994:21;;5881:144;5865:4;5860:3;5856:14;5849:21;;5805:220;;;5809:21;5423:608;;5321:710;;;;;:::o;6054:370::-;6125:5;6174:3;6167:4;6159:6;6155:17;6151:27;6141:122;;6182:79;;:::i;:::-;6141:122;6299:6;6286:20;6324:94;6414:3;6406:6;6399:4;6391:6;6387:17;6324:94;:::i;:::-;6315:103;;6131:293;6054:370;;;;:::o;6430:539::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6717:1;6706:9;6702:17;6689:31;6747:18;6739:6;6736:30;6733:117;;;6769:79;;:::i;:::-;6733:117;6874:78;6944:7;6935:6;6924:9;6920:22;6874:78;:::i;:::-;6864:88;;6660:302;6430:539;;;;:::o;6975:60::-;7003:3;7024:5;7017:12;;6975:60;;;:::o;7041:142::-;7091:9;7124:53;7142:34;7151:24;7169:5;7151:24;:::i;:::-;7142:34;:::i;:::-;7124:53;:::i;:::-;7111:66;;7041:142;;;:::o;7189:126::-;7239:9;7272:37;7303:5;7272:37;:::i;:::-;7259:50;;7189:126;;;:::o;7321:153::-;7398:9;7431:37;7462:5;7431:37;:::i;:::-;7418:50;;7321:153;;;:::o;7480:185::-;7594:64;7652:5;7594:64;:::i;:::-;7589:3;7582:77;7480:185;;:::o;7671:276::-;7791:4;7829:2;7818:9;7814:18;7806:26;;7842:98;7937:1;7926:9;7922:17;7913:6;7842:98;:::i;:::-;7671:276;;;;:::o;7953:329::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8158:117;7953:329;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:86::-;8948:7;8988:4;8981:5;8977:16;8966:27;;8913:86;;;:::o;9005:112::-;9088:22;9104:5;9088:22;:::i;:::-;9083:3;9076:35;9005:112;;:::o;9123:214::-;9212:4;9250:2;9239:9;9235:18;9227:26;;9263:67;9327:1;9316:9;9312:17;9303:6;9263:67;:::i;:::-;9123:214;;;;:::o;9343:118::-;9430:24;9448:5;9430:24;:::i;:::-;9425:3;9418:37;9343:118;;:::o;9467:222::-;9560:4;9598:2;9587:9;9583:18;9575:26;;9611:71;9679:1;9668:9;9664:17;9655:6;9611:71;:::i;:::-;9467:222;;;;:::o;9695:116::-;9765:21;9780:5;9765:21;:::i;:::-;9758:5;9755:32;9745:60;;9801:1;9798;9791:12;9745:60;9695:116;:::o;9817:133::-;9860:5;9898:6;9885:20;9876:29;;9914:30;9938:5;9914:30;:::i;:::-;9817:133;;;;:::o;9956:468::-;10021:6;10029;10078:2;10066:9;10057:7;10053:23;10049:32;10046:119;;;10084:79;;:::i;:::-;10046:119;10204:1;10229:53;10274:7;10265:6;10254:9;10250:22;10229:53;:::i;:::-;10219:63;;10175:117;10331:2;10357:50;10399:7;10390:6;10379:9;10375:22;10357:50;:::i;:::-;10347:60;;10302:115;9956:468;;;;;:::o;10430:619::-;10507:6;10515;10523;10572:2;10560:9;10551:7;10547:23;10543:32;10540:119;;;10578:79;;:::i;:::-;10540:119;10698:1;10723:53;10768:7;10759:6;10748:9;10744:22;10723:53;:::i;:::-;10713:63;;10669:117;10825:2;10851:53;10896:7;10887:6;10876:9;10872:22;10851:53;:::i;:::-;10841:63;;10796:118;10953:2;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10924:118;10430:619;;;;;:::o;11055:311::-;11132:4;11222:18;11214:6;11211:30;11208:56;;;11244:18;;:::i;:::-;11208:56;11294:4;11286:6;11282:17;11274:25;;11354:4;11348;11344:15;11336:23;;11055:311;;;:::o;11389:710::-;11485:5;11510:81;11526:64;11583:6;11526:64;:::i;:::-;11510:81;:::i;:::-;11501:90;;11611:5;11640:6;11633:5;11626:21;11674:4;11667:5;11663:16;11656:23;;11727:4;11719:6;11715:17;11707:6;11703:30;11756:3;11748:6;11745:15;11742:122;;;11775:79;;:::i;:::-;11742:122;11890:6;11873:220;11907:6;11902:3;11899:15;11873:220;;;11982:3;12011:37;12044:3;12032:10;12011:37;:::i;:::-;12006:3;11999:50;12078:4;12073:3;12069:14;12062:21;;11949:144;11933:4;11928:3;11924:14;11917:21;;11873:220;;;11877:21;11491:608;;11389:710;;;;;:::o;12122:370::-;12193:5;12242:3;12235:4;12227:6;12223:17;12219:27;12209:122;;12250:79;;:::i;:::-;12209:122;12367:6;12354:20;12392:94;12482:3;12474:6;12467:4;12459:6;12455:17;12392:94;:::i;:::-;12383:103;;12199:293;12122:370;;;;:::o;12498:894::-;12616:6;12624;12673:2;12661:9;12652:7;12648:23;12644:32;12641:119;;;12679:79;;:::i;:::-;12641:119;12827:1;12816:9;12812:17;12799:31;12857:18;12849:6;12846:30;12843:117;;;12879:79;;:::i;:::-;12843:117;12984:78;13054:7;13045:6;13034:9;13030:22;12984:78;:::i;:::-;12974:88;;12770:302;13139:2;13128:9;13124:18;13111:32;13170:18;13162:6;13159:30;13156:117;;;13192:79;;:::i;:::-;13156:117;13297:78;13367:7;13358:6;13347:9;13343:22;13297:78;:::i;:::-;13287:88;;13082:303;12498:894;;;;;:::o;13398:474::-;13466:6;13474;13523:2;13511:9;13502:7;13498:23;13494:32;13491:119;;;13529:79;;:::i;:::-;13491:119;13649:1;13674:53;13719:7;13710:6;13699:9;13695:22;13674:53;:::i;:::-;13664:63;;13620:117;13776:2;13802:53;13847:7;13838:6;13827:9;13823:22;13802:53;:::i;:::-;13792:63;;13747:118;13398:474;;;;;:::o;13878:462::-;13940:6;13948;13997:2;13985:9;13976:7;13972:23;13968:32;13965:119;;;14003:79;;:::i;:::-;13965:119;14123:1;14148:50;14190:7;14181:6;14170:9;14166:22;14148:50;:::i;:::-;14138:60;;14094:114;14247:2;14273:50;14315:7;14306:6;14295:9;14291:22;14273:50;:::i;:::-;14263:60;;14218:115;13878:462;;;;;:::o;14346:180::-;14394:77;14391:1;14384:88;14491:4;14488:1;14481:15;14515:4;14512:1;14505:15;14532:320;14576:6;14613:1;14607:4;14603:12;14593:22;;14660:1;14654:4;14650:12;14681:18;14671:81;;14737:4;14729:6;14725:17;14715:27;;14671:81;14799:2;14791:6;14788:14;14768:18;14765:38;14762:84;;14818:18;;:::i;:::-;14762:84;14583:269;14532:320;;;:::o;14858:182::-;14998:34;14994:1;14986:6;14982:14;14975:58;14858:182;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:180::-;15891:77;15888:1;15881:88;15988:4;15985:1;15978:15;16012:4;16009:1;16002:15;16029:180;16077:77;16074:1;16067:88;16174:4;16171:1;16164:15;16198:4;16195:1;16188:15;16215:233;16254:3;16277:24;16295:5;16277:24;:::i;:::-;16268:33;;16323:66;16316:5;16313:77;16310:103;;16393:18;;:::i;:::-;16310:103;16440:1;16433:5;16429:13;16422:20;;16215:233;;;:::o;16454:410::-;16494:7;16517:20;16535:1;16517:20;:::i;:::-;16512:25;;16551:20;16569:1;16551:20;:::i;:::-;16546:25;;16606:1;16603;16599:9;16628:30;16646:11;16628:30;:::i;:::-;16617:41;;16807:1;16798:7;16794:15;16791:1;16788:22;16768:1;16761:9;16741:83;16718:139;;16837:18;;:::i;:::-;16718:139;16502:362;16454:410;;;;:::o;16870:180::-;16918:77;16915:1;16908:88;17015:4;17012:1;17005:15;17039:4;17036:1;17029:15;17056:185;17096:1;17113:20;17131:1;17113:20;:::i;:::-;17108:25;;17147:20;17165:1;17147:20;:::i;:::-;17142:25;;17186:1;17176:35;;17191:18;;:::i;:::-;17176:35;17233:1;17230;17226:9;17221:14;;17056:185;;;;:::o;17247:234::-;17387:34;17383:1;17375:6;17371:14;17364:58;17456:17;17451:2;17443:6;17439:15;17432:42;17247:234;:::o;17487:366::-;17629:3;17650:67;17714:2;17709:3;17650:67;:::i;:::-;17643:74;;17726:93;17815:3;17726:93;:::i;:::-;17844:2;17839:3;17835:12;17828:19;;17487:366;;;:::o;17859:419::-;18025:4;18063:2;18052:9;18048:18;18040:26;;18112:9;18106:4;18102:20;18098:1;18087:9;18083:17;18076:47;18140:131;18266:4;18140:131;:::i;:::-;18132:139;;17859:419;;;:::o;18284:191::-;18324:3;18343:20;18361:1;18343:20;:::i;:::-;18338:25;;18377:20;18395:1;18377:20;:::i;:::-;18372:25;;18420:1;18417;18413:9;18406:16;;18441:3;18438:1;18435:10;18432:36;;;18448:18;;:::i;:::-;18432:36;18284:191;;;;:::o;18481:179::-;18621:31;18617:1;18609:6;18605:14;18598:55;18481:179;:::o;18666:366::-;18808:3;18829:67;18893:2;18888:3;18829:67;:::i;:::-;18822:74;;18905:93;18994:3;18905:93;:::i;:::-;19023:2;19018:3;19014:12;19007:19;;18666:366;;;:::o;19038:419::-;19204:4;19242:2;19231:9;19227:18;19219:26;;19291:9;19285:4;19281:20;19277:1;19266:9;19262:17;19255:47;19319:131;19445:4;19319:131;:::i;:::-;19311:139;;19038:419;;;:::o;19463:244::-;19603:34;19599:1;19591:6;19587:14;19580:58;19672:27;19667:2;19659:6;19655:15;19648:52;19463:244;:::o;19713:366::-;19855:3;19876:67;19940:2;19935:3;19876:67;:::i;:::-;19869:74;;19952:93;20041:3;19952:93;:::i;:::-;20070:2;20065:3;20061:12;20054:19;;19713:366;;;:::o;20085:419::-;20251:4;20289:2;20278:9;20274:18;20266:26;;20338:9;20332:4;20328:20;20324:1;20313:9;20309:17;20302:47;20366:131;20492:4;20366:131;:::i;:::-;20358:139;;20085:419;;;:::o;20510:229::-;20650:34;20646:1;20638:6;20634:14;20627:58;20719:12;20714:2;20706:6;20702:15;20695:37;20510:229;:::o;20745:366::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:419::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21370:9;21364:4;21360:20;21356:1;21345:9;21341:17;21334:47;21398:131;21524:4;21398:131;:::i;:::-;21390:139;;21117:419;;;:::o;21542:180::-;21682:32;21678:1;21670:6;21666:14;21659:56;21542:180;:::o;21728:366::-;21870:3;21891:67;21955:2;21950:3;21891:67;:::i;:::-;21884:74;;21967:93;22056:3;21967:93;:::i;:::-;22085:2;22080:3;22076:12;22069:19;;21728:366;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:222::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:5;22729:2;22721:6;22717:15;22710:30;22525:222;:::o;22753:366::-;22895:3;22916:67;22980:2;22975:3;22916:67;:::i;:::-;22909:74;;22992:93;23081:3;22992:93;:::i;:::-;23110:2;23105:3;23101:12;23094:19;;22753:366;;;:::o;23125:419::-;23291:4;23329:2;23318:9;23314:18;23306:26;;23378:9;23372:4;23368:20;23364:1;23353:9;23349:17;23342:47;23406:131;23532:4;23406:131;:::i;:::-;23398:139;;23125:419;;;:::o;23550:240::-;23690:34;23686:1;23678:6;23674:14;23667:58;23759:23;23754:2;23746:6;23742:15;23735:48;23550:240;:::o;23796:366::-;23938:3;23959:67;24023:2;24018:3;23959:67;:::i;:::-;23952:74;;24035:93;24124:3;24035:93;:::i;:::-;24153:2;24148:3;24144:12;24137:19;;23796:366;;;:::o;24168:419::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24168:419;;;:::o;24593:239::-;24733:34;24729:1;24721:6;24717:14;24710:58;24802:22;24797:2;24789:6;24785:15;24778:47;24593:239;:::o;24838:366::-;24980:3;25001:67;25065:2;25060:3;25001:67;:::i;:::-;24994:74;;25077:93;25166:3;25077:93;:::i;:::-;25195:2;25190:3;25186:12;25179:19;;24838:366;;;:::o;25210:419::-;25376:4;25414:2;25403:9;25399:18;25391:26;;25463:9;25457:4;25453:20;25449:1;25438:9;25434:17;25427:47;25491:131;25617:4;25491:131;:::i;:::-;25483:139;;25210:419;;;:::o;25635:225::-;25775:34;25771:1;25763:6;25759:14;25752:58;25844:8;25839:2;25831:6;25827:15;25820:33;25635:225;:::o;25866:366::-;26008:3;26029:67;26093:2;26088:3;26029:67;:::i;:::-;26022:74;;26105:93;26194:3;26105:93;:::i;:::-;26223:2;26218:3;26214:12;26207:19;;25866:366;;;:::o;26238:419::-;26404:4;26442:2;26431:9;26427:18;26419:26;;26491:9;26485:4;26481:20;26477:1;26466:9;26462:17;26455:47;26519:131;26645:4;26519:131;:::i;:::-;26511:139;;26238:419;;;:::o;26663:177::-;26803:29;26799:1;26791:6;26787:14;26780:53;26663:177;:::o;26846:366::-;26988:3;27009:67;27073:2;27068:3;27009:67;:::i;:::-;27002:74;;27085:93;27174:3;27085:93;:::i;:::-;27203:2;27198:3;27194:12;27187:19;;26846:366;;;:::o;27218:419::-;27384:4;27422:2;27411:9;27407:18;27399:26;;27471:9;27465:4;27461:20;27457:1;27446:9;27442:17;27435:47;27499:131;27625:4;27499:131;:::i;:::-;27491:139;;27218:419;;;:::o;27643:223::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:6;27847:2;27839:6;27835:15;27828:31;27643:223;:::o;27872:366::-;28014:3;28035:67;28099:2;28094:3;28035:67;:::i;:::-;28028:74;;28111:93;28200:3;28111:93;:::i;:::-;28229:2;28224:3;28220:12;28213:19;;27872:366;;;:::o;28244:419::-;28410:4;28448:2;28437:9;28433:18;28425:26;;28497:9;28491:4;28487:20;28483:1;28472:9;28468:17;28461:47;28525:131;28651:4;28525:131;:::i;:::-;28517:139;;28244:419;;;:::o;28669:221::-;28809:34;28805:1;28797:6;28793:14;28786:58;28878:4;28873:2;28865:6;28861:15;28854:29;28669:221;:::o;28896:366::-;29038:3;29059:67;29123:2;29118:3;29059:67;:::i;:::-;29052:74;;29135:93;29224:3;29135:93;:::i;:::-;29253:2;29248:3;29244:12;29237:19;;28896:366;;;:::o;29268:419::-;29434:4;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29268:419;;;:::o;29693:224::-;29833:34;29829:1;29821:6;29817:14;29810:58;29902:7;29897:2;29889:6;29885:15;29878:32;29693:224;:::o;29923:366::-;30065:3;30086:67;30150:2;30145:3;30086:67;:::i;:::-;30079:74;;30162:93;30251:3;30162:93;:::i;:::-;30280:2;30275:3;30271:12;30264:19;;29923:366;;;:::o;30295:419::-;30461:4;30499:2;30488:9;30484:18;30476:26;;30548:9;30542:4;30538:20;30534:1;30523:9;30519:17;30512:47;30576:131;30702:4;30576:131;:::i;:::-;30568:139;;30295:419;;;:::o;30720:222::-;30860:34;30856:1;30848:6;30844:14;30837:58;30929:5;30924:2;30916:6;30912:15;30905:30;30720:222;:::o;30948:366::-;31090:3;31111:67;31175:2;31170:3;31111:67;:::i;:::-;31104:74;;31187:93;31276:3;31187:93;:::i;:::-;31305:2;31300:3;31296:12;31289:19;;30948:366;;;:::o;31320:419::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:236::-;31885:34;31881:1;31873:6;31869:14;31862:58;31954:19;31949:2;31941:6;31937:15;31930:44;31745:236;:::o;31987:366::-;32129:3;32150:67;32214:2;32209:3;32150:67;:::i;:::-;32143:74;;32226:93;32315:3;32226:93;:::i;:::-;32344:2;32339:3;32335:12;32328:19;;31987:366;;;:::o;32359:419::-;32525:4;32563:2;32552:9;32548:18;32540:26;;32612:9;32606:4;32602:20;32598:1;32587:9;32583:17;32576:47;32640:131;32766:4;32640:131;:::i;:::-;32632:139;;32359:419;;;:::o;32784:172::-;32924:24;32920:1;32912:6;32908:14;32901:48;32784:172;:::o;32962:366::-;33104:3;33125:67;33189:2;33184:3;33125:67;:::i;:::-;33118:74;;33201:93;33290:3;33201:93;:::i;:::-;33319:2;33314:3;33310:12;33303:19;;32962:366;;;:::o;33334:419::-;33500:4;33538:2;33527:9;33523:18;33515:26;;33587:9;33581:4;33577:20;33573:1;33562:9;33558:17;33551:47;33615:131;33741:4;33615:131;:::i;:::-;33607:139;;33334:419;;;:::o;33759:297::-;33899:34;33895:1;33887:6;33883:14;33876:58;33968:34;33963:2;33955:6;33951:15;33944:59;34037:11;34032:2;34024:6;34020:15;34013:36;33759:297;:::o;34062:366::-;34204:3;34225:67;34289:2;34284:3;34225:67;:::i;:::-;34218:74;;34301:93;34390:3;34301:93;:::i;:::-;34419:2;34414:3;34410:12;34403:19;;34062:366;;;:::o;34434:419::-;34600:4;34638:2;34627:9;34623:18;34615:26;;34687:9;34681:4;34677:20;34673:1;34662:9;34658:17;34651:47;34715:131;34841:4;34715:131;:::i;:::-;34707:139;;34434:419;;;:::o;34859:240::-;34999:34;34995:1;34987:6;34983:14;34976:58;35068:23;35063:2;35055:6;35051:15;35044:48;34859:240;:::o;35105:366::-;35247:3;35268:67;35332:2;35327:3;35268:67;:::i;:::-;35261:74;;35344:93;35433:3;35344:93;:::i;:::-;35462:2;35457:3;35453:12;35446:19;;35105:366;;;:::o;35477:419::-;35643:4;35681:2;35670:9;35666:18;35658:26;;35730:9;35724:4;35720:20;35716:1;35705:9;35701:17;35694:47;35758:131;35884:4;35758:131;:::i;:::-;35750:139;;35477:419;;;:::o;35902:169::-;36042:21;36038:1;36030:6;36026:14;36019:45;35902:169;:::o;36077:366::-;36219:3;36240:67;36304:2;36299:3;36240:67;:::i;:::-;36233:74;;36316:93;36405:3;36316:93;:::i;:::-;36434:2;36429:3;36425:12;36418:19;;36077:366;;;:::o;36449:419::-;36615:4;36653:2;36642:9;36638:18;36630:26;;36702:9;36696:4;36692:20;36688:1;36677:9;36673:17;36666:47;36730:131;36856:4;36730:131;:::i;:::-;36722:139;;36449:419;;;:::o;36874:241::-;37014:34;37010:1;37002:6;36998:14;36991:58;37083:24;37078:2;37070:6;37066:15;37059:49;36874:241;:::o;37121:366::-;37263:3;37284:67;37348:2;37343:3;37284:67;:::i;:::-;37277:74;;37360:93;37449:3;37360:93;:::i;:::-;37478:2;37473:3;37469:12;37462:19;;37121:366;;;:::o;37493:419::-;37659:4;37697:2;37686:9;37682:18;37674:26;;37746:9;37740:4;37736:20;37732:1;37721:9;37717:17;37710:47;37774:131;37900:4;37774:131;:::i;:::-;37766:139;;37493:419;;;:::o;37918:194::-;37958:4;37978:20;37996:1;37978:20;:::i;:::-;37973:25;;38012:20;38030:1;38012:20;:::i;:::-;38007:25;;38056:1;38053;38049:9;38041:17;;38080:1;38074:4;38071:11;38068:37;;;38085:18;;:::i;:::-;38068:37;37918:194;;;;:::o;38118:147::-;38219:11;38256:3;38241:18;;38118:147;;;;:::o;38271:114::-;;:::o;38391:398::-;38550:3;38571:83;38652:1;38647:3;38571:83;:::i;:::-;38564:90;;38663:93;38752:3;38663:93;:::i;:::-;38781:1;38776:3;38772:11;38765:18;;38391:398;;;:::o;38795:379::-;38979:3;39001:147;39144:3;39001:147;:::i;:::-;38994:154;;39165:3;39158:10;;38795:379;;;:::o;39180:442::-;39329:4;39367:2;39356:9;39352:18;39344:26;;39380:71;39448:1;39437:9;39433:17;39424:6;39380:71;:::i;:::-;39461:72;39529:2;39518:9;39514:18;39505:6;39461:72;:::i;:::-;39543;39611:2;39600:9;39596:18;39587:6;39543:72;:::i;:::-;39180:442;;;;;;:::o;39628:220::-;39768:34;39764:1;39756:6;39752:14;39745:58;39837:3;39832:2;39824:6;39820:15;39813:28;39628:220;:::o;39854:366::-;39996:3;40017:67;40081:2;40076:3;40017:67;:::i;:::-;40010:74;;40093:93;40182:3;40093:93;:::i;:::-;40211:2;40206:3;40202:12;40195:19;;39854:366;;;:::o;40226:419::-;40392:4;40430:2;40419:9;40415:18;40407:26;;40479:9;40473:4;40469:20;40465:1;40454:9;40450:17;40443:47;40507:131;40633:4;40507:131;:::i;:::-;40499:139;;40226:419;;;:::o;40651:143::-;40708:5;40739:6;40733:13;40724:22;;40755:33;40782:5;40755:33;:::i;:::-;40651:143;;;;:::o;40800:351::-;40870:6;40919:2;40907:9;40898:7;40894:23;40890:32;40887:119;;;40925:79;;:::i;:::-;40887:119;41045:1;41070:64;41126:7;41117:6;41106:9;41102:22;41070:64;:::i;:::-;41060:74;;41016:128;40800:351;;;;:::o;41157:85::-;41202:7;41231:5;41220:16;;41157:85;;;:::o;41248:158::-;41306:9;41339:61;41357:42;41366:32;41392:5;41366:32;:::i;:::-;41357:42;:::i;:::-;41339:61;:::i;:::-;41326:74;;41248:158;;;:::o;41412:147::-;41507:45;41546:5;41507:45;:::i;:::-;41502:3;41495:58;41412:147;;:::o;41565:114::-;41632:6;41666:5;41660:12;41650:22;;41565:114;;;:::o;41685:184::-;41784:11;41818:6;41813:3;41806:19;41858:4;41853:3;41849:14;41834:29;;41685:184;;;;:::o;41875:132::-;41942:4;41965:3;41957:11;;41995:4;41990:3;41986:14;41978:22;;41875:132;;;:::o;42013:108::-;42090:24;42108:5;42090:24;:::i;:::-;42085:3;42078:37;42013:108;;:::o;42127:179::-;42196:10;42217:46;42259:3;42251:6;42217:46;:::i;:::-;42295:4;42290:3;42286:14;42272:28;;42127:179;;;;:::o;42312:113::-;42382:4;42414;42409:3;42405:14;42397:22;;42312:113;;;:::o;42461:732::-;42580:3;42609:54;42657:5;42609:54;:::i;:::-;42679:86;42758:6;42753:3;42679:86;:::i;:::-;42672:93;;42789:56;42839:5;42789:56;:::i;:::-;42868:7;42899:1;42884:284;42909:6;42906:1;42903:13;42884:284;;;42985:6;42979:13;43012:63;43071:3;43056:13;43012:63;:::i;:::-;43005:70;;43098:60;43151:6;43098:60;:::i;:::-;43088:70;;42944:224;42931:1;42928;42924:9;42919:14;;42884:284;;;42888:14;43184:3;43177:10;;42585:608;;;42461:732;;;;:::o;43199:831::-;43462:4;43500:3;43489:9;43485:19;43477:27;;43514:71;43582:1;43571:9;43567:17;43558:6;43514:71;:::i;:::-;43595:80;43671:2;43660:9;43656:18;43647:6;43595:80;:::i;:::-;43722:9;43716:4;43712:20;43707:2;43696:9;43692:18;43685:48;43750:108;43853:4;43844:6;43750:108;:::i;:::-;43742:116;;43868:72;43936:2;43925:9;43921:18;43912:6;43868:72;:::i;:::-;43950:73;44018:3;44007:9;44003:19;43994:6;43950:73;:::i;:::-;43199:831;;;;;;;;:::o;44036:807::-;44285:4;44323:3;44312:9;44308:19;44300:27;;44337:71;44405:1;44394:9;44390:17;44381:6;44337:71;:::i;:::-;44418:72;44486:2;44475:9;44471:18;44462:6;44418:72;:::i;:::-;44500:80;44576:2;44565:9;44561:18;44552:6;44500:80;:::i;:::-;44590;44666:2;44655:9;44651:18;44642:6;44590:80;:::i;:::-;44680:73;44748:3;44737:9;44733:19;44724:6;44680:73;:::i;:::-;44763;44831:3;44820:9;44816:19;44807:6;44763:73;:::i;:::-;44036:807;;;;;;;;;:::o;44849:143::-;44906:5;44937:6;44931:13;44922:22;;44953:33;44980:5;44953:33;:::i;:::-;44849:143;;;;:::o;44998:663::-;45086:6;45094;45102;45151:2;45139:9;45130:7;45126:23;45122:32;45119:119;;;45157:79;;:::i;:::-;45119:119;45277:1;45302:64;45358:7;45349:6;45338:9;45334:22;45302:64;:::i;:::-;45292:74;;45248:128;45415:2;45441:64;45497:7;45488:6;45477:9;45473:22;45441:64;:::i;:::-;45431:74;;45386:129;45554:2;45580:64;45636:7;45627:6;45616:9;45612:22;45580:64;:::i;:::-;45570:74;;45525:129;44998:663;;;;;:::o

Swarm Source

ipfs://1fba4af577e326f9df239c58df1957d505916c1b95bb9f9e5bb2e43097e51b3b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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