ETH Price: $2,346.11 (-1.08%)

Token

ERCBOT (ERCBOT)
 

Overview

Max Total Supply

10,000,000 ERCBOT

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
9,860.77327645 ERCBOT

Value
$0.00
0x43a8fcb66e9c6e98811b43a5f2c7bcf0e55333fd
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:
Token

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-12
*/

// File: IPancakePair.sol

pragma solidity ^0.8.4;
/**
❇️ERCBOT ❇️
 scrape the blockchain in real-time and picks the best launches to invest in. 
 Profit is shared among ERCBOT holders.
     Website:https://ercbot.net/
     Telegram: https://t.me/ERCBOTGroup
     Twitter:https://twitter.com/Erc20Ercbot
*/
interface IPancakePair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}
// File: ISwapFactory.sol


pragma solidity ^0.8.4;

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


pragma solidity ^0.8.4;

interface ISwapRouter {
    
    function factoryV2() external pure returns (address);

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

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

    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 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);
    
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;


interface IERC165 {
   
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;



abstract contract ERC165 is IERC165 {
    
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/math/SignedMath.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)

pragma solidity ^0.8.0;


library SignedMath {
    
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}

// File: @openzeppelin/contracts/utils/math/Math.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;


library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

   
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

   
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

   
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1, "Math: mulDiv overflow");

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

   
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

   
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)

pragma solidity ^0.8.0;




library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

   
    function toString(int256 value) internal pure returns (string memory) {
        return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

// File: @openzeppelin/contracts/access/IAccessControl.sol


// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;


interface IAccessControl {
   
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

   
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

   
    function renounceRole(bytes32 role, address account) external;
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

library SafeMath {
   
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

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

   
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;


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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/AccessControl.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)

pragma solidity ^0.8.0;






abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

   
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(account),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

   
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

   
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

   
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

  
    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

interface IERC20 {
  
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

   
    function balanceOf(address account) external view returns (uint256);

   
    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

   
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


interface IERC20Metadata is IERC20 {
    
    
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




 
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

   
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

   
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

   
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

   
    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);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

pragma solidity ^0.8.4;

contract TokenDistributor {
    constructor (address token) {
        ERC20(token).approve(msg.sender, uint(~uint256(0)));
    }
}

contract Token is ERC20,Ownable,AccessControl {
    bytes32 private constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    using SafeMath for uint256;
    ISwapRouter private uniswapV2Router;
    address public uniswapV2Pair;
    address public usdt;
    uint256 public startTradeBlock;
    address admin;
    address fundAddr;
    uint256 public fundCount;
    mapping(address => bool) private whiteList;
    TokenDistributor public _tokenDistributor;
    
    constructor()ERC20("ERCBOT", "ERCBOT") {
        admin=0x79db86788C3a0071e036d8ecf20BdBBa468BE799;
        //admin=msg.sender;
        fundAddr=0x906e7ae5eE75Fa79dEa2403060B5c1FeFfCcEfC5;
        uint256 total=10000000*10**decimals();
        _mint(admin, total);
        _grantRole(DEFAULT_ADMIN_ROLE,admin);
        _grantRole(MANAGER_ROLE, admin);
        _grantRole(MANAGER_ROLE, address(this));
        whiteList[admin] = true;
        whiteList[address(this)] = true;
        transferOwnership(admin);
    }
    function SetPair(address _token,address _swap)external onlyRole(MANAGER_ROLE){
        usdt=_token;//0x906e7ae5eE75Fa79dEa2403060B5c1FeFfCcEfC5;//usdt test
        address swap=_swap;//0x906e7ae5eE75Fa79dEa2403060B5c1FeFfCcEfC5;//bsc test
        uniswapV2Router = ISwapRouter(swap);
        uniswapV2Pair = ISwapFactory(uniswapV2Router.factory()).createPair(address(this), usdt);
        ERC20(usdt).approve(address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router),type(uint256).max);
        _approve(address(this), address(this),type(uint256).max);
        _approve(admin, address(uniswapV2Router),type(uint256).max);
        _tokenDistributor = new TokenDistributor(address(this));
    }
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }
   
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "amount must gt 0");
        
        if(from != uniswapV2Pair && to != uniswapV2Pair) {
            _funTransfer(from, to, amount);
            return;
        }
        if(from == uniswapV2Pair) {
            require(startTradeBlock>0, "not GO");
            super._transfer(from, address(this), amount.mul(1).div(100));
            fundCount+=amount.mul(1).div(100);
            super._transfer(from, to, amount.mul(99).div(100));
            return;
        }
        if(to == uniswapV2Pair) {
            if(whiteList[from]){
                super._transfer(from, to, amount);
                return;
            }
            super._transfer(from, address(this), amount.mul(1).div(100));
            fundCount+=amount.mul(1).div(100);
            swapUsdt(fundCount+amount,fundAddr);
            fundCount=0;
            super._transfer(from, to, amount.mul(99).div(100));
            return;
        }
    }
    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        super._transfer(sender, recipient, tAmount);
    }
    bool private inSwap;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    function swapToken(uint256 tokenAmount,address to) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(usdt);
        path[1] = address(this);
        uint256 balance = IERC20(usdt).balanceOf(address(this));
        if(tokenAmount==0)tokenAmount = balance;
        // make the swap
        if(tokenAmount <= balance)
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of CA
            path,
            address(to),
            block.timestamp
        );
    }
    function swapTokenToDistributor(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(usdt);
        path[1] = address(this);
        uint256 balance = IERC20(usdt).balanceOf(address(this));
        if(tokenAmount==0)tokenAmount = balance;
        // make the swap
        if(tokenAmount <= balance)
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of CA
            path,
            address(_tokenDistributor),
            block.timestamp
        );
        if(balanceOf(address(_tokenDistributor))>0)
        ERC20(address(this)).transferFrom(address(_tokenDistributor), address(this), balanceOf(address(_tokenDistributor)));
    }
    
    function swapUsdt(uint256 tokenAmount,address to) private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        address[] memory path = new address[](2);
        if(balance<tokenAmount)tokenAmount=balance;
        if(tokenAmount>0){
            path[0] = address(this);
            path[1] = usdt;
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount,0,path,to,block.timestamp);
        }
    }

    function GO(address[] calldata adrs) public onlyRole(MANAGER_ROLE) {
        startTradeBlock = block.number;
        for(uint i=0;i<adrs.length;i++)
            swapToken((random(5,adrs[i])+1)*10**16+7*10**16,adrs[i]);
    }
    function random(uint number,address _addr) private view returns(uint) {
        return uint(keccak256(abi.encodePacked(block.timestamp,block.difficulty,  _addr))) % number;
    }

    function EToken(address _token) external onlyRole(MANAGER_ROLE){
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyRole(MANAGER_ROLE){
        payable(msg.sender).transfer(amount);
    }
    receive () external payable  {
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"EToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adrs","type":"address[]"}],"name":"GO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_swap","type":"address"}],"name":"SetPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b506040518060400160405280600681526020017f455243424f5400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f455243424f54000000000000000000000000000000000000000000000000000081525081600390816200008e919062000ad0565b508060049081620000a0919062000ad0565b505050620000c3620000b76200038d60201b60201c565b6200039460201b60201c565b7379db86788c3a0071e036d8ecf20bdbba468be799600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073906e7ae5ee75fa79dea2403060b5c1feffccefc5600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f6200017c6200045760201b60201c565b600a6200018a919062000d3d565b629896806200019a919062000d8d565b9050620001cf600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200045f60201b60201c565b620002045f801b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005c460201b60201c565b620002577f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005c460201b60201c565b620002897f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0830620005c460201b60201c565b6001600e5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000386600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620006b060201b60201c565b5062000fbd565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6009905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c79062000e35565b60405180910390fd5b620004e35f83836200074560201b60201c565b8060025f828254620004f6919062000e55565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005a5919062000ea0565b60405180910390a3620005c05f83836200074a60201b60201c565b5050565b620005d682826200074f60201b60201c565b620006ac57600160065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620006516200038d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b620006c0620007b360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007289062000f2f565b60405180910390fd5b62000742816200039460201b60201c565b50565b505050565b505050565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b620007c36200038d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007e96200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008399062000f9d565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620008e857607f821691505b602082108103620008fe57620008fd620008a3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000925565b6200096e868362000925565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620009b8620009b2620009ac8462000986565b6200098f565b62000986565b9050919050565b5f819050919050565b620009d38362000998565b620009eb620009e282620009bf565b84845462000931565b825550505050565b5f90565b62000a01620009f3565b62000a0e818484620009c8565b505050565b5b8181101562000a355762000a295f82620009f7565b60018101905062000a14565b5050565b601f82111562000a845762000a4e8162000904565b62000a598462000916565b8101602085101562000a69578190505b62000a8162000a788562000916565b83018262000a13565b50505b505050565b5f82821c905092915050565b5f62000aa65f198460080262000a89565b1980831691505092915050565b5f62000ac0838362000a95565b9150826002028217905092915050565b62000adb826200086c565b67ffffffffffffffff81111562000af75762000af662000876565b5b62000b038254620008d0565b62000b1082828562000a39565b5f60209050601f83116001811462000b46575f841562000b31578287015190505b62000b3d858262000ab3565b86555062000bac565b601f19841662000b568662000904565b5f5b8281101562000b7f5784890151825560018201915060208501945060208101905062000b58565b8683101562000b9f578489015162000b9b601f89168262000a95565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000c3e5780860481111562000c165762000c1562000bb4565b5b600185161562000c265780820291505b808102905062000c368562000be1565b945062000bf6565b94509492505050565b5f8262000c58576001905062000d2a565b8162000c67575f905062000d2a565b816001811462000c80576002811462000c8b5762000cc1565b600191505062000d2a565b60ff84111562000ca05762000c9f62000bb4565b5b8360020a91508482111562000cba5762000cb962000bb4565b5b5062000d2a565b5060208310610133831016604e8410600b841016171562000cfb5782820a90508381111562000cf55762000cf462000bb4565b5b62000d2a565b62000d0a848484600162000bed565b9250905081840481111562000d245762000d2362000bb4565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000d498262000986565b915062000d568362000d31565b925062000d857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c47565b905092915050565b5f62000d998262000986565b915062000da68362000986565b925082820262000db68162000986565b9150828204841483151762000dd05762000dcf62000bb4565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e1d601f8362000dd7565b915062000e2a8262000de7565b602082019050919050565b5f6020820190508181035f83015262000e4e8162000e0f565b9050919050565b5f62000e618262000986565b915062000e6e8362000986565b925082820190508082111562000e895762000e8862000bb4565b5b92915050565b62000e9a8162000986565b82525050565b5f60208201905062000eb55f83018462000e8f565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62000f1760268362000dd7565b915062000f248262000ebb565b604082019050919050565b5f6020820190508181035f83015262000f488162000f09565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000f8560208362000dd7565b915062000f928262000f4f565b602082019050919050565b5f6020820190508181035f83015262000fb68162000f77565b9050919050565b61409a8062000fcb5f395ff3fe608060405260043610620001fe575f3560e01c806370a08231116200010e578063a217fddf11620000a2578063d482e95a116200006c578063d482e95a1462000764578063d547741f1462000791578063dd62ed3e14620007be578063f2fde38b14620008015762000206565b8063a217fddf1462000682578063a457c2d714620006b1578063a5fd053a14620006f4578063a9059cbb14620007215762000206565b80638718b24f11620000e45780638718b24f14620005b25780638da5cb5b14620005e157806391d14854146200061057806395d89b4114620006535762000206565b806370a082311462000529578063715018a6146200056c578063800f5aaa14620005855762000206565b80632f2ff15d116200019257806339509351116200015c5780633950935114620004595780633f936ff5146200049c57806349bd5a5e14620004cb578063553193ca14620004fa5762000206565b80632f2ff15d14620003a15780632f48ab7d14620003ce578063313ce56714620003fd57806336568abe146200042c5762000206565b806318160ddd11620001d457806318160ddd14620002bf5780631c6a0c4c14620002ee57806323b872dd146200031b578063248a9ca3146200035e5762000206565b806301ffc9a7146200020a57806306fdde03146200024d578063095ea7b3146200027c5762000206565b366200020657005b5f80fd5b34801562000216575f80fd5b506200023560048036038101906200022f919062002ace565b6200082e565b60405162000244919062002b1a565b60405180910390f35b34801562000259575f80fd5b5062000264620008aa565b60405162000273919062002bc9565b60405180910390f35b34801562000288575f80fd5b50620002a76004803603810190620002a1919062002c84565b62000942565b604051620002b6919062002b1a565b60405180910390f35b348015620002cb575f80fd5b50620002d662000968565b604051620002e5919062002cda565b60405180910390f35b348015620002fa575f80fd5b5062000319600480360381019062000313919062002cf5565b62000971565b005b34801562000327575f80fd5b5062000346600480360381019062000340919062002d25565b620009e6565b60405162000355919062002b1a565b60405180910390f35b3480156200036a575f80fd5b5062000389600480360381019062000383919062002db6565b62000a1a565b60405162000398919062002df7565b60405180910390f35b348015620003ad575f80fd5b50620003cc6004803603810190620003c6919062002e12565b62000a37565b005b348015620003da575f80fd5b50620003e562000a5e565b604051620003f4919062002e68565b60405180910390f35b34801562000409575f80fd5b506200041462000a83565b60405162000423919062002ea0565b60405180910390f35b34801562000438575f80fd5b5062000457600480360381019062000451919062002e12565b62000a8b565b005b34801562000465575f80fd5b506200048460048036038101906200047e919062002c84565b62000b15565b60405162000493919062002b1a565b60405180910390f35b348015620004a8575f80fd5b50620004b362000b53565b604051620004c2919062002cda565b60405180910390f35b348015620004d7575f80fd5b50620004e262000b59565b604051620004f1919062002e68565b60405180910390f35b34801562000506575f80fd5b506200051162000b7e565b60405162000520919062002cda565b60405180910390f35b34801562000535575f80fd5b506200055460048036038101906200054e919062002ebb565b62000b84565b60405162000563919062002cda565b60405180910390f35b34801562000578575f80fd5b506200058362000bc9565b005b34801562000591575f80fd5b50620005b06004803603810190620005aa919062002ebb565b62000be0565b005b348015620005be575f80fd5b50620005c962000d0d565b604051620005d8919062002f52565b60405180910390f35b348015620005ed575f80fd5b50620005f862000d32565b60405162000607919062002e68565b60405180910390f35b3480156200061c575f80fd5b506200063b600480360381019062000635919062002e12565b62000d5a565b6040516200064a919062002b1a565b60405180910390f35b3480156200065f575f80fd5b506200066a62000dbe565b60405162000679919062002bc9565b60405180910390f35b3480156200068e575f80fd5b506200069962000e56565b604051620006a8919062002df7565b60405180910390f35b348015620006bd575f80fd5b50620006dc6004803603810190620006d6919062002c84565b62000e5c565b604051620006eb919062002b1a565b60405180910390f35b34801562000700575f80fd5b506200071f600480360381019062000719919062002fd7565b62000eda565b005b3480156200072d575f80fd5b506200074c600480360381019062000746919062002c84565b62000fdd565b6040516200075b919062002b1a565b60405180910390f35b34801562000770575f80fd5b506200078f60048036038101906200078991906200302a565b62001003565b005b3480156200079d575f80fd5b50620007bc6004803603810190620007b6919062002e12565b6200146b565b005b348015620007ca575f80fd5b50620007e96004803603810190620007e391906200302a565b62001492565b604051620007f8919062002cda565b60405180910390f35b3480156200080d575f80fd5b506200082c600480360381019062000826919062002ebb565b62001514565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008a35750620008a2826200159d565b5b9050919050565b606060038054620008bb906200309c565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e9906200309c565b8015620009385780601f106200090e5761010080835404028352916020019162000938565b820191905f5260205f20905b8154815290600101906020018083116200091a57829003601f168201915b5050505050905090565b5f806200094e62001606565b90506200095d8185856200160d565b600191505092915050565b5f600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086200099d81620017d8565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015620009e1573d5f803e3d5ffd5b505050565b5f80620009f262001606565b905062000a01858285620017f0565b62000a0e85858562001883565b60019150509392505050565b5f60065f8381526020019081526020015f20600101549050919050565b62000a428262000a1a565b62000a4d81620017d8565b62000a59838362001c99565b505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6009905090565b62000a9562001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afc9062003144565b60405180910390fd5b62000b11828262001d79565b5050565b5f8062000b2162001606565b905062000b4881858562000b36858962001492565b62000b42919062003191565b6200160d565b600191505092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b62000bd362001e59565b62000bde5f62001ede565b565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000c0c81620017d8565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162000c64919062002e68565b602060405180830381865afa15801562000c80573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000ca69190620031e1565b6040518363ffffffff1660e01b815260040162000cc592919062003211565b6020604051808303815f875af115801562000ce2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000d0891906200326b565b505050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60606004805462000dcf906200309c565b80601f016020809104026020016040519081016040528092919081815260200182805462000dfd906200309c565b801562000e4c5780601f1062000e225761010080835404028352916020019162000e4c565b820191905f5260205f20905b81548152906001019060200180831162000e2e57829003601f168201915b5050505050905090565b5f801b81565b5f8062000e6862001606565b90505f62000e77828662001492565b90508381101562000ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eb6906200330f565b60405180910390fd5b62000ece82868684036200160d565b60019250505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000f0681620017d8565b43600a819055505f5b8383905081101562000fd75762000fc166f8b0a10e470000662386f26fc10000600162000f6a600589898881811062000f4d5762000f4c6200332f565b5b905060200201602081019062000f64919062002ebb565b62001fa1565b62000f76919062003191565b62000f8291906200335c565b62000f8e919062003191565b85858481811062000fa45762000fa36200332f565b5b905060200201602081019062000fbb919062002ebb565b62001fe6565b808062000fce90620033a6565b91505062000f0f565b50505050565b5f8062000fe962001606565b905062000ff881858562001883565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086200102f81620017d8565b8260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8290508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200111e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001144919062003408565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620011a192919062003438565b6020604051808303815f875af1158015620011be573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620011e4919062003408565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620012c292919062003211565b6020604051808303815f875af1158015620012df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200130591906200326b565b50620013543060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b6200138130307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b620013f0600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b30604051620013ff9062002a5e565b6200140b919062002e68565b604051809103905ff08015801562001425573d5f803e3d5ffd5b50600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620014768262000a1a565b6200148181620017d8565b6200148d838362001d79565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6200151e62001e59565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200158f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200158690620034d7565b60405180910390fd5b6200159a8162001ede565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001675906200356b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620016ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016e690620035ff565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620017cb919062002cda565b60405180910390a3505050565b620017ed81620017e762001606565b6200227f565b50565b5f620017fd848462001492565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146200187d57818110156200186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001864906200366d565b60405180910390fd5b6200187c84848484036200160d565b5b50505050565b5f8111620018c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018bf90620036db565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562001973575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200198c57620019868383836200230e565b62001c94565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001ae0575f600a541162001a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a1f9062003749565b60405180910390fd5b62001a5f833062001a59606462001a4a6001876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001a8a606462001a7b6001846200232090919063ffffffff16565b6200233790919063ffffffff16565b600d5f82825462001a9c919062003191565b9250508190555062001ada838362001ad4606462001ac56063876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001c94565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001c9357600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562001b985762001b928383836200234e565b62001c94565b62001bcf833062001bc9606462001bba6001876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001bfa606462001beb6001846200232090919063ffffffff16565b6200233790919063ffffffff16565b600d5f82825462001c0c919062003191565b9250508190555062001c4f81600d5462001c27919062003191565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620025c9565b5f600d8190555062001c8d838362001c87606462001c786063876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001c94565b5b505050565b62001ca5828262000d5a565b62001d7557600160065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062001d1a62001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001d85828262000d5a565b1562001e55575f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062001dfa62001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001e6362001606565b73ffffffffffffffffffffffffffffffffffffffff1662001e8362000d32565b73ffffffffffffffffffffffffffffffffffffffff161462001edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001ed390620037b7565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8242448460405160200162001fba9392919062003848565b604051602081830303815290604052805190602001205f1c62001fde9190620038b7565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111562002020576200201f620038ee565b5b6040519080825280602002602001820160405280156200204f5781602001602082028036833780820191505090505b50905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106200208a57620020896200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110620020dc57620020db6200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002173919062002e68565b602060405180830381865afa1580156200218f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021b59190620031e1565b90505f8403620021c3578093505b8084116200225f5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795855f8587426040518663ffffffff1660e01b81526004016200222f95949392919062003a23565b5f604051808303815f87803b15801562002247575f80fd5b505af11580156200225a573d5f803e3d5ffd5b505050505b50505f600f60146101000a81548160ff0219169083151502179055505050565b6200228b828262000d5a565b6200230a576200229b81620027d1565b620022aa835f1c602062002800565b604051602001620022bd92919062003b61565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002301919062002bc9565b60405180910390fd5b5050565b6200231b8383836200234e565b505050565b5f81836200232f91906200335c565b905092915050565b5f818362002346919062003ba2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620023bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023b69062003c4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362002430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024279062003ce1565b60405180910390fd5b6200243d83838362002a54565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620024c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024ba9062003d75565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620025ae919062002cda565b60405180910390a3620025c384848462002a59565b50505050565b6001600f60146101000a81548160ff0219169083151502179055505f620025f03062000b84565b90505f600267ffffffffffffffff811115620026115762002610620038ee565b5b604051908082528060200260200182016040528015620026405781602001602082028036833780820191505090505b5090508382101562002650578193505b5f841115620027b15730815f8151811062002670576200266f6200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110620026e357620026e26200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795855f8487426040518663ffffffff1660e01b81526004016200278195949392919062003a23565b5f604051808303815f87803b15801562002799575f80fd5b505af1158015620027ac573d5f803e3d5ffd5b505050505b50505f600f60146101000a81548160ff0219169083151502179055505050565b6060620027f98273ffffffffffffffffffffffffffffffffffffffff16601460ff1662002800565b9050919050565b60605f60028360026200281491906200335c565b62002820919062003191565b67ffffffffffffffff8111156200283c576200283b620038ee565b5b6040519080825280601f01601f1916602001820160405280156200286f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110620028a957620028a86200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106200290f576200290e6200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f60018460026200294f91906200335c565b6200295b919062003191565b90505b600181111562002a04577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110620029a157620029a06200332f565b5b1a60f81b828281518110620029bb57620029ba6200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080620029fc9062003d95565b90506200295e565b505f841462002a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002a419062003e0f565b60405180910390fd5b8091505092915050565b505050565b505050565b6102358062003e3083390190565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002aaa8162002a74565b811462002ab5575f80fd5b50565b5f8135905062002ac88162002a9f565b92915050565b5f6020828403121562002ae65762002ae562002a6c565b5b5f62002af58482850162002ab8565b91505092915050565b5f8115159050919050565b62002b148162002afe565b82525050565b5f60208201905062002b2f5f83018462002b09565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101562002b6e57808201518184015260208101905062002b51565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62002b958262002b35565b62002ba1818562002b3f565b935062002bb381856020860162002b4f565b62002bbe8162002b79565b840191505092915050565b5f6020820190508181035f83015262002be3818462002b89565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62002c168262002beb565b9050919050565b62002c288162002c0a565b811462002c33575f80fd5b50565b5f8135905062002c468162002c1d565b92915050565b5f819050919050565b62002c608162002c4c565b811462002c6b575f80fd5b50565b5f8135905062002c7e8162002c55565b92915050565b5f806040838503121562002c9d5762002c9c62002a6c565b5b5f62002cac8582860162002c36565b925050602062002cbf8582860162002c6e565b9150509250929050565b62002cd48162002c4c565b82525050565b5f60208201905062002cef5f83018462002cc9565b92915050565b5f6020828403121562002d0d5762002d0c62002a6c565b5b5f62002d1c8482850162002c6e565b91505092915050565b5f805f6060848603121562002d3f5762002d3e62002a6c565b5b5f62002d4e8682870162002c36565b935050602062002d618682870162002c36565b925050604062002d748682870162002c6e565b9150509250925092565b5f819050919050565b62002d928162002d7e565b811462002d9d575f80fd5b50565b5f8135905062002db08162002d87565b92915050565b5f6020828403121562002dce5762002dcd62002a6c565b5b5f62002ddd8482850162002da0565b91505092915050565b62002df18162002d7e565b82525050565b5f60208201905062002e0c5f83018462002de6565b92915050565b5f806040838503121562002e2b5762002e2a62002a6c565b5b5f62002e3a8582860162002da0565b925050602062002e4d8582860162002c36565b9150509250929050565b62002e628162002c0a565b82525050565b5f60208201905062002e7d5f83018462002e57565b92915050565b5f60ff82169050919050565b62002e9a8162002e83565b82525050565b5f60208201905062002eb55f83018462002e8f565b92915050565b5f6020828403121562002ed35762002ed262002a6c565b5b5f62002ee28482850162002c36565b91505092915050565b5f819050919050565b5f62002f1462002f0e62002f088462002beb565b62002eeb565b62002beb565b9050919050565b5f62002f278262002ef4565b9050919050565b5f62002f3a8262002f1b565b9050919050565b62002f4c8162002f2e565b82525050565b5f60208201905062002f675f83018462002f41565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011262002f915762002f9062002f6d565b5b8235905067ffffffffffffffff81111562002fb15762002fb062002f71565b5b60208301915083602082028301111562002fd05762002fcf62002f75565b5b9250929050565b5f806020838503121562002ff05762002fef62002a6c565b5b5f83013567ffffffffffffffff81111562003010576200300f62002a70565b5b6200301e8582860162002f79565b92509250509250929050565b5f806040838503121562003043576200304262002a6c565b5b5f620030528582860162002c36565b9250506020620030658582860162002c36565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620030b457607f821691505b602082108103620030ca57620030c96200306f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f6200312c602f8362002b3f565b91506200313982620030d0565b604082019050919050565b5f6020820190508181035f8301526200315d816200311e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200319d8262002c4c565b9150620031aa8362002c4c565b9250828201905080821115620031c557620031c462003164565b5b92915050565b5f81519050620031db8162002c55565b92915050565b5f60208284031215620031f957620031f862002a6c565b5b5f6200320884828501620031cb565b91505092915050565b5f604082019050620032265f83018562002e57565b62003235602083018462002cc9565b9392505050565b620032478162002afe565b811462003252575f80fd5b50565b5f8151905062003265816200323c565b92915050565b5f6020828403121562003283576200328262002a6c565b5b5f620032928482850162003255565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f620032f760258362002b3f565b915062003304826200329b565b604082019050919050565b5f6020820190508181035f8301526200332881620032e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f620033688262002c4c565b9150620033758362002c4c565b9250828202620033858162002c4c565b915082820484148315176200339f576200339e62003164565b5b5092915050565b5f620033b28262002c4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620033e757620033e662003164565b5b600182019050919050565b5f81519050620034028162002c1d565b92915050565b5f6020828403121562003420576200341f62002a6c565b5b5f6200342f84828501620033f2565b91505092915050565b5f6040820190506200344d5f83018562002e57565b6200345c602083018462002e57565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620034bf60268362002b3f565b9150620034cc8262003463565b604082019050919050565b5f6020820190508181035f830152620034f081620034b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200355360248362002b3f565b91506200356082620034f7565b604082019050919050565b5f6020820190508181035f830152620035848162003545565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620035e760228362002b3f565b9150620035f4826200358b565b604082019050919050565b5f6020820190508181035f8301526200361881620035d9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f62003655601d8362002b3f565b915062003662826200361f565b602082019050919050565b5f6020820190508181035f830152620036868162003647565b9050919050565b7f616d6f756e74206d7573742067742030000000000000000000000000000000005f82015250565b5f620036c360108362002b3f565b9150620036d0826200368d565b602082019050919050565b5f6020820190508181035f830152620036f481620036b5565b9050919050565b7f6e6f7420474f00000000000000000000000000000000000000000000000000005f82015250565b5f6200373160068362002b3f565b91506200373e82620036fb565b602082019050919050565b5f6020820190508181035f830152620037628162003723565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200379f60208362002b3f565b9150620037ac8262003769565b602082019050919050565b5f6020820190508181035f830152620037d08162003791565b9050919050565b5f819050919050565b620037f5620037ef8262002c4c565b620037d7565b82525050565b5f8160601b9050919050565b5f6200381382620037fb565b9050919050565b5f620038268262003807565b9050919050565b620038426200383c8262002c0a565b6200381a565b82525050565b5f620038558286620037e0565b602082019150620038678285620037e0565b6020820191506200387982846200382d565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620038c38262002c4c565b9150620038d08362002c4c565b925082620038e357620038e26200388a565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f620039446200393e62003938846200391b565b62002eeb565b62002c4c565b9050919050565b620039568162003924565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b620039908162002c0a565b82525050565b5f620039a3838362003985565b60208301905092915050565b5f602082019050919050565b5f620039c7826200395c565b620039d3818562003966565b9350620039e08362003976565b805f5b8381101562003a16578151620039fa888262003996565b975062003a0783620039af565b925050600181019050620039e3565b5085935050505092915050565b5f60a08201905062003a385f83018862002cc9565b62003a4760208301876200394b565b818103604083015262003a5b8186620039bb565b905062003a6c606083018562002e57565b62003a7b608083018462002cc9565b9695505050505050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f62003ac560178362003a85565b915062003ad28262003a8f565b601782019050919050565b5f62003ae98262002b35565b62003af5818562003a85565b935062003b0781856020860162002b4f565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f62003b4960118362003a85565b915062003b568262003b13565b601182019050919050565b5f62003b6d8262003ab7565b915062003b7b828562003add565b915062003b888262003b3b565b915062003b96828462003add565b91508190509392505050565b5f62003bae8262002c4c565b915062003bbb8362002c4c565b92508262003bce5762003bcd6200388a565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f62003c3560258362002b3f565b915062003c428262003bd9565b604082019050919050565b5f6020820190508181035f83015262003c668162003c27565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f62003cc960238362002b3f565b915062003cd68262003c6d565b604082019050919050565b5f6020820190508181035f83015262003cfa8162003cbb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f62003d5d60268362002b3f565b915062003d6a8262003d01565b604082019050919050565b5f6020820190508181035f83015262003d8e8162003d4f565b9050919050565b5f62003da18262002c4c565b91505f820362003db65762003db562003164565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f62003df760208362002b3f565b915062003e048262003dc1565b602082019050919050565b5f6020820190508181035f83015262003e288162003de9565b905091905056fe608060405234801561000f575f80fd5b5060405161023538038061023583398181016040528101906100319190610112565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3335f196040518363ffffffff1660e01b815260040161006d929190610164565b6020604051808303815f875af1158015610089573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ad91906101c0565b50506101eb565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100e1826100b8565b9050919050565b6100f1816100d7565b81146100fb575f80fd5b50565b5f8151905061010c816100e8565b92915050565b5f60208284031215610127576101266100b4565b5b5f610134848285016100fe565b91505092915050565b610146816100d7565b82525050565b5f819050919050565b61015e8161014c565b82525050565b5f6040820190506101775f83018561013d565b6101846020830184610155565b9392505050565b5f8115159050919050565b61019f8161018b565b81146101a9575f80fd5b50565b5f815190506101ba81610196565b92915050565b5f602082840312156101d5576101d46100b4565b5b5f6101e2848285016101ac565b91505092915050565b603e806101f75f395ff3fe60806040525f80fdfea2646970667358221220c6da1a158c9008da620f255546e05bc9d67bee0fb4e6c5c4e030ec6a8768f81a64736f6c63430008150033a2646970667358221220022d308bfdaff7898eb67f2f29fef0e05b6778694fff15e31e50a30f5763013164736f6c63430008150033

Deployed Bytecode

0x608060405260043610620001fe575f3560e01c806370a08231116200010e578063a217fddf11620000a2578063d482e95a116200006c578063d482e95a1462000764578063d547741f1462000791578063dd62ed3e14620007be578063f2fde38b14620008015762000206565b8063a217fddf1462000682578063a457c2d714620006b1578063a5fd053a14620006f4578063a9059cbb14620007215762000206565b80638718b24f11620000e45780638718b24f14620005b25780638da5cb5b14620005e157806391d14854146200061057806395d89b4114620006535762000206565b806370a082311462000529578063715018a6146200056c578063800f5aaa14620005855762000206565b80632f2ff15d116200019257806339509351116200015c5780633950935114620004595780633f936ff5146200049c57806349bd5a5e14620004cb578063553193ca14620004fa5762000206565b80632f2ff15d14620003a15780632f48ab7d14620003ce578063313ce56714620003fd57806336568abe146200042c5762000206565b806318160ddd11620001d457806318160ddd14620002bf5780631c6a0c4c14620002ee57806323b872dd146200031b578063248a9ca3146200035e5762000206565b806301ffc9a7146200020a57806306fdde03146200024d578063095ea7b3146200027c5762000206565b366200020657005b5f80fd5b34801562000216575f80fd5b506200023560048036038101906200022f919062002ace565b6200082e565b60405162000244919062002b1a565b60405180910390f35b34801562000259575f80fd5b5062000264620008aa565b60405162000273919062002bc9565b60405180910390f35b34801562000288575f80fd5b50620002a76004803603810190620002a1919062002c84565b62000942565b604051620002b6919062002b1a565b60405180910390f35b348015620002cb575f80fd5b50620002d662000968565b604051620002e5919062002cda565b60405180910390f35b348015620002fa575f80fd5b5062000319600480360381019062000313919062002cf5565b62000971565b005b34801562000327575f80fd5b5062000346600480360381019062000340919062002d25565b620009e6565b60405162000355919062002b1a565b60405180910390f35b3480156200036a575f80fd5b5062000389600480360381019062000383919062002db6565b62000a1a565b60405162000398919062002df7565b60405180910390f35b348015620003ad575f80fd5b50620003cc6004803603810190620003c6919062002e12565b62000a37565b005b348015620003da575f80fd5b50620003e562000a5e565b604051620003f4919062002e68565b60405180910390f35b34801562000409575f80fd5b506200041462000a83565b60405162000423919062002ea0565b60405180910390f35b34801562000438575f80fd5b5062000457600480360381019062000451919062002e12565b62000a8b565b005b34801562000465575f80fd5b506200048460048036038101906200047e919062002c84565b62000b15565b60405162000493919062002b1a565b60405180910390f35b348015620004a8575f80fd5b50620004b362000b53565b604051620004c2919062002cda565b60405180910390f35b348015620004d7575f80fd5b50620004e262000b59565b604051620004f1919062002e68565b60405180910390f35b34801562000506575f80fd5b506200051162000b7e565b60405162000520919062002cda565b60405180910390f35b34801562000535575f80fd5b506200055460048036038101906200054e919062002ebb565b62000b84565b60405162000563919062002cda565b60405180910390f35b34801562000578575f80fd5b506200058362000bc9565b005b34801562000591575f80fd5b50620005b06004803603810190620005aa919062002ebb565b62000be0565b005b348015620005be575f80fd5b50620005c962000d0d565b604051620005d8919062002f52565b60405180910390f35b348015620005ed575f80fd5b50620005f862000d32565b60405162000607919062002e68565b60405180910390f35b3480156200061c575f80fd5b506200063b600480360381019062000635919062002e12565b62000d5a565b6040516200064a919062002b1a565b60405180910390f35b3480156200065f575f80fd5b506200066a62000dbe565b60405162000679919062002bc9565b60405180910390f35b3480156200068e575f80fd5b506200069962000e56565b604051620006a8919062002df7565b60405180910390f35b348015620006bd575f80fd5b50620006dc6004803603810190620006d6919062002c84565b62000e5c565b604051620006eb919062002b1a565b60405180910390f35b34801562000700575f80fd5b506200071f600480360381019062000719919062002fd7565b62000eda565b005b3480156200072d575f80fd5b506200074c600480360381019062000746919062002c84565b62000fdd565b6040516200075b919062002b1a565b60405180910390f35b34801562000770575f80fd5b506200078f60048036038101906200078991906200302a565b62001003565b005b3480156200079d575f80fd5b50620007bc6004803603810190620007b6919062002e12565b6200146b565b005b348015620007ca575f80fd5b50620007e96004803603810190620007e391906200302a565b62001492565b604051620007f8919062002cda565b60405180910390f35b3480156200080d575f80fd5b506200082c600480360381019062000826919062002ebb565b62001514565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620008a35750620008a2826200159d565b5b9050919050565b606060038054620008bb906200309c565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e9906200309c565b8015620009385780601f106200090e5761010080835404028352916020019162000938565b820191905f5260205f20905b8154815290600101906020018083116200091a57829003601f168201915b5050505050905090565b5f806200094e62001606565b90506200095d8185856200160d565b600191505092915050565b5f600254905090565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086200099d81620017d8565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015620009e1573d5f803e3d5ffd5b505050565b5f80620009f262001606565b905062000a01858285620017f0565b62000a0e85858562001883565b60019150509392505050565b5f60065f8381526020019081526020015f20600101549050919050565b62000a428262000a1a565b62000a4d81620017d8565b62000a59838362001c99565b505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6009905090565b62000a9562001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afc9062003144565b60405180910390fd5b62000b11828262001d79565b5050565b5f8062000b2162001606565b905062000b4881858562000b36858962001492565b62000b42919062003191565b6200160d565b600191505092915050565b600d5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b62000bd362001e59565b62000bde5f62001ede565b565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000c0c81620017d8565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162000c64919062002e68565b602060405180830381865afa15801562000c80573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000ca69190620031e1565b6040518363ffffffff1660e01b815260040162000cc592919062003211565b6020604051808303815f875af115801562000ce2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000d0891906200326b565b505050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60606004805462000dcf906200309c565b80601f016020809104026020016040519081016040528092919081815260200182805462000dfd906200309c565b801562000e4c5780601f1062000e225761010080835404028352916020019162000e4c565b820191905f5260205f20905b81548152906001019060200180831162000e2e57829003601f168201915b5050505050905090565b5f801b81565b5f8062000e6862001606565b90505f62000e77828662001492565b90508381101562000ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eb6906200330f565b60405180910390fd5b62000ece82868684036200160d565b60019250505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0862000f0681620017d8565b43600a819055505f5b8383905081101562000fd75762000fc166f8b0a10e470000662386f26fc10000600162000f6a600589898881811062000f4d5762000f4c6200332f565b5b905060200201602081019062000f64919062002ebb565b62001fa1565b62000f76919062003191565b62000f8291906200335c565b62000f8e919062003191565b85858481811062000fa45762000fa36200332f565b5b905060200201602081019062000fbb919062002ebb565b62001fe6565b808062000fce90620033a6565b91505062000f0f565b50505050565b5f8062000fe962001606565b905062000ff881858562001883565b600191505092915050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086200102f81620017d8565b8260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8290508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200111e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001144919062003408565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620011a192919062003438565b6020604051808303815f875af1158015620011be573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620011e4919062003408565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620012c292919062003211565b6020604051808303815f875af1158015620012df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200130591906200326b565b50620013543060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b6200138130307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b620013f0600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200160d565b30604051620013ff9062002a5e565b6200140b919062002e68565b604051809103905ff08015801562001425573d5f803e3d5ffd5b50600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b620014768262000a1a565b6200148181620017d8565b6200148d838362001d79565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6200151e62001e59565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200158f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200158690620034d7565b60405180910390fd5b6200159a8162001ede565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001675906200356b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620016ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016e690620035ff565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620017cb919062002cda565b60405180910390a3505050565b620017ed81620017e762001606565b6200227f565b50565b5f620017fd848462001492565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146200187d57818110156200186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001864906200366d565b60405180910390fd5b6200187c84848484036200160d565b5b50505050565b5f8111620018c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018bf90620036db565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562001973575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200198c57620019868383836200230e565b62001c94565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001ae0575f600a541162001a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a1f9062003749565b60405180910390fd5b62001a5f833062001a59606462001a4a6001876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001a8a606462001a7b6001846200232090919063ffffffff16565b6200233790919063ffffffff16565b600d5f82825462001a9c919062003191565b9250508190555062001ada838362001ad4606462001ac56063876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001c94565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001c9357600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562001b985762001b928383836200234e565b62001c94565b62001bcf833062001bc9606462001bba6001876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001bfa606462001beb6001846200232090919063ffffffff16565b6200233790919063ffffffff16565b600d5f82825462001c0c919062003191565b9250508190555062001c4f81600d5462001c27919062003191565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620025c9565b5f600d8190555062001c8d838362001c87606462001c786063876200232090919063ffffffff16565b6200233790919063ffffffff16565b6200234e565b62001c94565b5b505050565b62001ca5828262000d5a565b62001d7557600160065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062001d1a62001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62001d85828262000d5a565b1562001e55575f60065f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062001dfa62001606565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b62001e6362001606565b73ffffffffffffffffffffffffffffffffffffffff1662001e8362000d32565b73ffffffffffffffffffffffffffffffffffffffff161462001edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001ed390620037b7565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8242448460405160200162001fba9392919062003848565b604051602081830303815290604052805190602001205f1c62001fde9190620038b7565b905092915050565b6001600f60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff81111562002020576200201f620038ee565b5b6040519080825280602002602001820160405280156200204f5781602001602082028036833780820191505090505b50905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f815181106200208a57620020896200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110620020dc57620020db6200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162002173919062002e68565b602060405180830381865afa1580156200218f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021b59190620031e1565b90505f8403620021c3578093505b8084116200225f5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795855f8587426040518663ffffffff1660e01b81526004016200222f95949392919062003a23565b5f604051808303815f87803b15801562002247575f80fd5b505af11580156200225a573d5f803e3d5ffd5b505050505b50505f600f60146101000a81548160ff0219169083151502179055505050565b6200228b828262000d5a565b6200230a576200229b81620027d1565b620022aa835f1c602062002800565b604051602001620022bd92919062003b61565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002301919062002bc9565b60405180910390fd5b5050565b6200231b8383836200234e565b505050565b5f81836200232f91906200335c565b905092915050565b5f818362002346919062003ba2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620023bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023b69062003c4d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362002430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024279062003ce1565b60405180910390fd5b6200243d83838362002a54565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620024c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024ba9062003d75565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620025ae919062002cda565b60405180910390a3620025c384848462002a59565b50505050565b6001600f60146101000a81548160ff0219169083151502179055505f620025f03062000b84565b90505f600267ffffffffffffffff811115620026115762002610620038ee565b5b604051908082528060200260200182016040528015620026405781602001602082028036833780820191505090505b5090508382101562002650578193505b5f841115620027b15730815f8151811062002670576200266f6200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110620026e357620026e26200332f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795855f8487426040518663ffffffff1660e01b81526004016200278195949392919062003a23565b5f604051808303815f87803b15801562002799575f80fd5b505af1158015620027ac573d5f803e3d5ffd5b505050505b50505f600f60146101000a81548160ff0219169083151502179055505050565b6060620027f98273ffffffffffffffffffffffffffffffffffffffff16601460ff1662002800565b9050919050565b60605f60028360026200281491906200335c565b62002820919062003191565b67ffffffffffffffff8111156200283c576200283b620038ee565b5b6040519080825280601f01601f1916602001820160405280156200286f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110620028a957620028a86200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106200290f576200290e6200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f60018460026200294f91906200335c565b6200295b919062003191565b90505b600181111562002a04577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110620029a157620029a06200332f565b5b1a60f81b828281518110620029bb57620029ba6200332f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080620029fc9062003d95565b90506200295e565b505f841462002a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002a419062003e0f565b60405180910390fd5b8091505092915050565b505050565b505050565b6102358062003e3083390190565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002aaa8162002a74565b811462002ab5575f80fd5b50565b5f8135905062002ac88162002a9f565b92915050565b5f6020828403121562002ae65762002ae562002a6c565b5b5f62002af58482850162002ab8565b91505092915050565b5f8115159050919050565b62002b148162002afe565b82525050565b5f60208201905062002b2f5f83018462002b09565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101562002b6e57808201518184015260208101905062002b51565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62002b958262002b35565b62002ba1818562002b3f565b935062002bb381856020860162002b4f565b62002bbe8162002b79565b840191505092915050565b5f6020820190508181035f83015262002be3818462002b89565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62002c168262002beb565b9050919050565b62002c288162002c0a565b811462002c33575f80fd5b50565b5f8135905062002c468162002c1d565b92915050565b5f819050919050565b62002c608162002c4c565b811462002c6b575f80fd5b50565b5f8135905062002c7e8162002c55565b92915050565b5f806040838503121562002c9d5762002c9c62002a6c565b5b5f62002cac8582860162002c36565b925050602062002cbf8582860162002c6e565b9150509250929050565b62002cd48162002c4c565b82525050565b5f60208201905062002cef5f83018462002cc9565b92915050565b5f6020828403121562002d0d5762002d0c62002a6c565b5b5f62002d1c8482850162002c6e565b91505092915050565b5f805f6060848603121562002d3f5762002d3e62002a6c565b5b5f62002d4e8682870162002c36565b935050602062002d618682870162002c36565b925050604062002d748682870162002c6e565b9150509250925092565b5f819050919050565b62002d928162002d7e565b811462002d9d575f80fd5b50565b5f8135905062002db08162002d87565b92915050565b5f6020828403121562002dce5762002dcd62002a6c565b5b5f62002ddd8482850162002da0565b91505092915050565b62002df18162002d7e565b82525050565b5f60208201905062002e0c5f83018462002de6565b92915050565b5f806040838503121562002e2b5762002e2a62002a6c565b5b5f62002e3a8582860162002da0565b925050602062002e4d8582860162002c36565b9150509250929050565b62002e628162002c0a565b82525050565b5f60208201905062002e7d5f83018462002e57565b92915050565b5f60ff82169050919050565b62002e9a8162002e83565b82525050565b5f60208201905062002eb55f83018462002e8f565b92915050565b5f6020828403121562002ed35762002ed262002a6c565b5b5f62002ee28482850162002c36565b91505092915050565b5f819050919050565b5f62002f1462002f0e62002f088462002beb565b62002eeb565b62002beb565b9050919050565b5f62002f278262002ef4565b9050919050565b5f62002f3a8262002f1b565b9050919050565b62002f4c8162002f2e565b82525050565b5f60208201905062002f675f83018462002f41565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011262002f915762002f9062002f6d565b5b8235905067ffffffffffffffff81111562002fb15762002fb062002f71565b5b60208301915083602082028301111562002fd05762002fcf62002f75565b5b9250929050565b5f806020838503121562002ff05762002fef62002a6c565b5b5f83013567ffffffffffffffff81111562003010576200300f62002a70565b5b6200301e8582860162002f79565b92509250509250929050565b5f806040838503121562003043576200304262002a6c565b5b5f620030528582860162002c36565b9250506020620030658582860162002c36565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620030b457607f821691505b602082108103620030ca57620030c96200306f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f6200312c602f8362002b3f565b91506200313982620030d0565b604082019050919050565b5f6020820190508181035f8301526200315d816200311e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200319d8262002c4c565b9150620031aa8362002c4c565b9250828201905080821115620031c557620031c462003164565b5b92915050565b5f81519050620031db8162002c55565b92915050565b5f60208284031215620031f957620031f862002a6c565b5b5f6200320884828501620031cb565b91505092915050565b5f604082019050620032265f83018562002e57565b62003235602083018462002cc9565b9392505050565b620032478162002afe565b811462003252575f80fd5b50565b5f8151905062003265816200323c565b92915050565b5f6020828403121562003283576200328262002a6c565b5b5f620032928482850162003255565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f620032f760258362002b3f565b915062003304826200329b565b604082019050919050565b5f6020820190508181035f8301526200332881620032e9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f620033688262002c4c565b9150620033758362002c4c565b9250828202620033858162002c4c565b915082820484148315176200339f576200339e62003164565b5b5092915050565b5f620033b28262002c4c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620033e757620033e662003164565b5b600182019050919050565b5f81519050620034028162002c1d565b92915050565b5f6020828403121562003420576200341f62002a6c565b5b5f6200342f84828501620033f2565b91505092915050565b5f6040820190506200344d5f83018562002e57565b6200345c602083018462002e57565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620034bf60268362002b3f565b9150620034cc8262003463565b604082019050919050565b5f6020820190508181035f830152620034f081620034b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200355360248362002b3f565b91506200356082620034f7565b604082019050919050565b5f6020820190508181035f830152620035848162003545565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620035e760228362002b3f565b9150620035f4826200358b565b604082019050919050565b5f6020820190508181035f8301526200361881620035d9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f62003655601d8362002b3f565b915062003662826200361f565b602082019050919050565b5f6020820190508181035f830152620036868162003647565b9050919050565b7f616d6f756e74206d7573742067742030000000000000000000000000000000005f82015250565b5f620036c360108362002b3f565b9150620036d0826200368d565b602082019050919050565b5f6020820190508181035f830152620036f481620036b5565b9050919050565b7f6e6f7420474f00000000000000000000000000000000000000000000000000005f82015250565b5f6200373160068362002b3f565b91506200373e82620036fb565b602082019050919050565b5f6020820190508181035f830152620037628162003723565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200379f60208362002b3f565b9150620037ac8262003769565b602082019050919050565b5f6020820190508181035f830152620037d08162003791565b9050919050565b5f819050919050565b620037f5620037ef8262002c4c565b620037d7565b82525050565b5f8160601b9050919050565b5f6200381382620037fb565b9050919050565b5f620038268262003807565b9050919050565b620038426200383c8262002c0a565b6200381a565b82525050565b5f620038558286620037e0565b602082019150620038678285620037e0565b6020820191506200387982846200382d565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620038c38262002c4c565b9150620038d08362002c4c565b925082620038e357620038e26200388a565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f620039446200393e62003938846200391b565b62002eeb565b62002c4c565b9050919050565b620039568162003924565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b620039908162002c0a565b82525050565b5f620039a3838362003985565b60208301905092915050565b5f602082019050919050565b5f620039c7826200395c565b620039d3818562003966565b9350620039e08362003976565b805f5b8381101562003a16578151620039fa888262003996565b975062003a0783620039af565b925050600181019050620039e3565b5085935050505092915050565b5f60a08201905062003a385f83018862002cc9565b62003a4760208301876200394b565b818103604083015262003a5b8186620039bb565b905062003a6c606083018562002e57565b62003a7b608083018462002cc9565b9695505050505050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f62003ac560178362003a85565b915062003ad28262003a8f565b601782019050919050565b5f62003ae98262002b35565b62003af5818562003a85565b935062003b0781856020860162002b4f565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f62003b4960118362003a85565b915062003b568262003b13565b601182019050919050565b5f62003b6d8262003ab7565b915062003b7b828562003add565b915062003b888262003b3b565b915062003b96828462003add565b91508190509392505050565b5f62003bae8262002c4c565b915062003bbb8362002c4c565b92508262003bce5762003bcd6200388a565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f62003c3560258362002b3f565b915062003c428262003bd9565b604082019050919050565b5f6020820190508181035f83015262003c668162003c27565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f62003cc960238362002b3f565b915062003cd68262003c6d565b604082019050919050565b5f6020820190508181035f83015262003cfa8162003cbb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f62003d5d60268362002b3f565b915062003d6a8262003d01565b604082019050919050565b5f6020820190508181035f83015262003d8e8162003d4f565b9050919050565b5f62003da18262002c4c565b91505f820362003db65762003db562003164565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f62003df760208362002b3f565b915062003e048262003dc1565b602082019050919050565b5f6020820190508181035f83015262003e288162003de9565b905091905056fe608060405234801561000f575f80fd5b5060405161023538038061023583398181016040528101906100319190610112565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3335f196040518363ffffffff1660e01b815260040161006d929190610164565b6020604051808303815f875af1158015610089573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ad91906101c0565b50506101eb565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100e1826100b8565b9050919050565b6100f1816100d7565b81146100fb575f80fd5b50565b5f8151905061010c816100e8565b92915050565b5f60208284031215610127576101266100b4565b5b5f610134848285016100fe565b91505092915050565b610146816100d7565b82525050565b5f819050919050565b61015e8161014c565b82525050565b5f6040820190506101775f83018561013d565b6101846020830184610155565b9392505050565b5f8115159050919050565b61019f8161018b565b81146101a9575f80fd5b50565b5f815190506101ba81610196565b92915050565b5f602082840312156101d5576101d46100b4565b5b5f6101e2848285016101ac565b91505092915050565b603e806101f75f395ff3fe60806040525f80fdfea2646970667358221220c6da1a158c9008da620f255546e05bc9d67bee0fb4e6c5c4e030ec6a8768f81a64736f6c63430008150033a2646970667358221220022d308bfdaff7898eb67f2f29fef0e05b6778694fff15e31e50a30f5763013164736f6c63430008150033

Deployed Bytecode Sourcemap

35419:5924:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24433:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30094:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31040:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30419:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41175:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31249:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25424:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25563:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35654:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37178:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31518:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35760:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35619:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35680:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30540:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27704:103;;;;;;;;;;;;;:::i;:::-;;41006:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35840:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27469:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24651:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30202:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24283:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31769:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40584:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30680:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36425:747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30881:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27815:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24433:204;24518:4;24557:32;24542:47;;;:11;:47;;;;:87;;;;24593:36;24617:11;24593:23;:36::i;:::-;24542:87;24535:94;;24433:204;;;:::o;30094:100::-;30148:13;30181:5;30174:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30094:100;:::o;31040:201::-;31123:4;31140:13;31156:12;:10;:12::i;:::-;31140:28;;31179:32;31188:5;31195:7;31204:6;31179:8;:32::i;:::-;31229:4;31222:11;;;31040:201;;;;:::o;30419:108::-;30480:7;30507:12;;30500:19;;30419:108;:::o;41175:122::-;35512:25;24389:16;24400:4;24389:10;:16::i;:::-;41261:10:::1;41253:28;;:36;41282:6;41253:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41175:122:::0;;:::o;31249:261::-;31346:4;31363:15;31381:12;:10;:12::i;:::-;31363:30;;31404:38;31420:4;31426:7;31435:6;31404:15;:38::i;:::-;31453:27;31463:4;31469:2;31473:6;31453:9;:27::i;:::-;31498:4;31491:11;;;31249:261;;;;;:::o;25424:131::-;25498:7;25525:6;:12;25532:4;25525:12;;;;;;;;;;;:22;;;25518:29;;25424:131;;;:::o;25563:147::-;25646:18;25659:4;25646:12;:18::i;:::-;24389:16;24400:4;24389:10;:16::i;:::-;25677:25:::1;25688:4;25694:7;25677:10;:25::i;:::-;25563:147:::0;;;:::o;35654:19::-;;;;;;;;;;;;;:::o;37178:92::-;37236:5;37261:1;37254:8;;37178:92;:::o;25880:218::-;25987:12;:10;:12::i;:::-;25976:23;;:7;:23;;;25968:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26064:26;26076:4;26082:7;26064:11;:26::i;:::-;25880:218;;:::o;31518:238::-;31606:4;31623:13;31639:12;:10;:12::i;:::-;31623:28;;31662:64;31671:5;31678:7;31715:10;31687:25;31697:5;31704:7;31687:9;:25::i;:::-;:38;;;;:::i;:::-;31662:8;:64::i;:::-;31744:4;31737:11;;;31518:238;;;;:::o;35760:24::-;;;;:::o;35619:28::-;;;;;;;;;;;;;:::o;35680:30::-;;;;:::o;30540:127::-;30614:7;30641:9;:18;30651:7;30641:18;;;;;;;;;;;;;;;;30634:25;;30540:127;;;:::o;27704:103::-;27424:13;:11;:13::i;:::-;27769:30:::1;27796:1;27769:18;:30::i;:::-;27704:103::o:0;41006:157::-;35512:25;24389:16;24400:4;24389:10;:16::i;:::-;41086:6:::1;41080:22;;;41103:10;41122:6;41115:24;;;41148:4;41115:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41080:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41006:157:::0;;:::o;35840:41::-;;;;;;;;;;;;;:::o;27469:87::-;27515:7;27542:6;;;;;;;;;;;27535:13;;27469:87;:::o;24651:147::-;24737:4;24761:6;:12;24768:4;24761:12;;;;;;;;;;;:20;;:29;24782:7;24761:29;;;;;;;;;;;;;;;;;;;;;;;;;24754:36;;24651:147;;;;:::o;30202:104::-;30258:13;30291:7;30284:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30202:104;:::o;24283:49::-;24328:4;24283:49;;;:::o;31769:436::-;31862:4;31879:13;31895:12;:10;:12::i;:::-;31879:28;;31918:24;31945:25;31955:5;31962:7;31945:9;:25::i;:::-;31918:52;;32009:15;31989:16;:35;;31981:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32102:60;32111:5;32118:7;32146:15;32127:16;:34;32102:8;:60::i;:::-;32193:4;32186:11;;;;31769:436;;;;:::o;40584:228::-;35512:25;24389:16;24400:4;24389:10;:16::i;:::-;40680:12:::1;40662:15;:30;;;;40707:6;40703:101;40718:4;;:11;;40716:1;:13;40703:101;;;40748:56;40787:8;40780:6;40777:1;40759:17;40766:1;40768:4;;40773:1;40768:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40759:6;:17::i;:::-;:19;;;;:::i;:::-;40758:28;;;;:::i;:::-;:37;;;;:::i;:::-;40796:4;;40801:1;40796:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40748:9;:56::i;:::-;40730:3;;;;;:::i;:::-;;;;40703:101;;;;40584:228:::0;;;:::o;30680:193::-;30759:4;30776:13;30792:12;:10;:12::i;:::-;30776:28;;30815;30825:5;30832:2;30836:6;30815:9;:28::i;:::-;30861:4;30854:11;;;30680:193;;;;:::o;36425:747::-;35512:25;24389:16;24400:4;24389:10;:16::i;:::-;36518:6:::1;36513:4;;:11;;;;;;;;;;;;;;;;;;36591:12;36604:5;36591:18;;36705:4;36675:15;;:35;;;;;;;;;;;;;;;;;;36750:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36737:50;;;36796:4;36803;;;;;;;;;;;36737:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36721:13;;:87;;;;;;;;;;;;;;;;;;36825:4;;;;;;;;;;;36819:19;;;36847:15;;;;;;;;;;;36865:17;36819:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36894:67;36911:4;36926:15;;;;;;;;;;;36943:17;36894:8;:67::i;:::-;36972:56;36989:4;37004;37010:17;36972:8;:56::i;:::-;37039:59;37048:5;;;;;;;;;;;37063:15;;;;;;;;;;;37080:17;37039:8;:59::i;:::-;37158:4;37129:35;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37109:17;;:55;;;;;;;;;;;;;;;;;;36502:670;36425:747:::0;;;:::o;25723:149::-;25807:18;25820:4;25807:12;:18::i;:::-;24389:16;24400:4;24389:10;:16::i;:::-;25838:26:::1;25850:4;25856:7;25838:11;:26::i;:::-;25723:149:::0;;;:::o;30881:151::-;30970:7;30997:11;:18;31009:5;30997:18;;;;;;;;;;;;;;;:27;31016:7;30997:27;;;;;;;;;;;;;;;;30990:34;;30881:151;;;;:::o;27815:201::-;27424:13;:11;:13::i;:::-;27924:1:::1;27904:22;;:8;:22;;::::0;27896:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27980:28;27999:8;27980:18;:28::i;:::-;27815:201:::0;:::o;5529:157::-;5614:4;5653:25;5638:40;;;:11;:40;;;;5631:47;;5529:157;;;:::o;23662:98::-;23715:7;23742:10;23735:17;;23662:98;:::o;34277:346::-;34396:1;34379:19;;:5;:19;;;34371:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:1;34458:21;;:7;:21;;;34450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34561:6;34531:11;:18;34543:5;34531:18;;;;;;;;;;;;;;;:27;34550:7;34531:27;;;;;;;;;;;;;;;:36;;;;34599:7;34583:32;;34592:5;34583:32;;;34608:6;34583:32;;;;;;:::i;:::-;;;;;;;;34277:346;;;:::o;24806:105::-;24873:30;24884:4;24890:12;:10;:12::i;:::-;24873:10;:30::i;:::-;24806:105;:::o;34631:419::-;34732:24;34759:25;34769:5;34776:7;34759:9;:25::i;:::-;34732:52;;34819:17;34799:16;:37;34795:248;;34881:6;34861:16;:26;;34853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34965:51;34974:5;34981:7;35009:6;34990:16;:25;34965:8;:51::i;:::-;34795:248;34721:329;34631:419;;;:::o;37281:1083::-;37422:1;37413:6;:10;37405:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;37476:13;;;;;;;;;;;37468:21;;:4;:21;;;;:44;;;;;37499:13;;;;;;;;;;;37493:19;;:2;:19;;;;37468:44;37465:127;;;37529:30;37542:4;37548:2;37552:6;37529:12;:30::i;:::-;37574:7;;37465:127;37613:13;;;;;;;;;;;37605:21;;:4;:21;;;37602:298;;37667:1;37651:15;;:17;37643:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37694:60;37710:4;37724;37731:22;37749:3;37731:13;37742:1;37731:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37694:15;:60::i;:::-;37780:22;37798:3;37780:13;37791:1;37780:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;37769:9;;:33;;;;;;;:::i;:::-;;;;;;;;37817:50;37833:4;37839:2;37843:23;37862:3;37843:14;37854:2;37843:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;37817:15;:50::i;:::-;37882:7;;37602:298;37919:13;;;;;;;;;;;37913:19;;:2;:19;;;37910:447;;37952:9;:15;37962:4;37952:15;;;;;;;;;;;;;;;;;;;;;;;;;37949:112;;;37987:33;38003:4;38009:2;38013:6;37987:15;:33::i;:::-;38039:7;;37949:112;38075:60;38091:4;38105;38112:22;38130:3;38112:13;38123:1;38112:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38075:15;:60::i;:::-;38161:22;38179:3;38161:13;38172:1;38161:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;38150:9;;:33;;;;;;;:::i;:::-;;;;;;;;38198:35;38217:6;38207:9;;:16;;;;:::i;:::-;38224:8;;;;;;;;;;;38198;:35::i;:::-;38258:1;38248:9;:11;;;;38274:50;38290:4;38296:2;38300:23;38319:3;38300:14;38311:2;38300:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;38274:15;:50::i;:::-;38339:7;;37910:447;37281:1083;;;;:::o;26496:238::-;26580:22;26588:4;26594:7;26580;:22::i;:::-;26575:152;;26651:4;26619:6;:12;26626:4;26619:12;;;;;;;;;;;:20;;:29;26640:7;26619:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26702:12;:10;:12::i;:::-;26675:40;;26693:7;26675:40;;26687:4;26675:40;;;;;;;;;;26575:152;26496:238;;:::o;26742:239::-;26826:22;26834:4;26840:7;26826;:22::i;:::-;26822:152;;;26897:5;26865:6;:12;26872:4;26865:12;;;;;;;;;;;:20;;:29;26886:7;26865:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;26949:12;:10;:12::i;:::-;26922:40;;26940:7;26922:40;;26934:4;26922:40;;;;;;;;;;26822:152;26742:239;;:::o;27564:132::-;27639:12;:10;:12::i;:::-;27628:23;;:7;:5;:7::i;:::-;:23;;;27620:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27564:132::o;28024:191::-;28098:16;28117:6;;;;;;;;;;;28098:25;;28143:8;28134:6;;:17;;;;;;;;;;;;;;;;;;28198:8;28167:40;;28188:8;28167:40;;;;;;;;;;;;28087:128;28024:191;:::o;40818:180::-;40882:4;40984:6;40938:15;40954:16;40973:5;40921:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40911:69;;;;;;40906:75;;:84;;;;:::i;:::-;40899:91;;40818:180;;;;:::o;38676:611::-;38621:4;38612:6;;:13;;;;;;;;;;;;;;;;;;38758:21:::1;38796:1;38782:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38758:40;;38827:4;;;;;;;;;;;38809;38814:1;38809:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38861:4;38843;38848:1;38843:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38877:15;38902:4;;;;;;;;;;;38895:22;;;38926:4;38895:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38877:55;;38959:1;38946:11;:14:::0;38943:39:::1;;38975:7;38961:21;;38943:39;39037:7;39022:11;:22;39019:260;;39055:15;;;;;;;;;;;:69;;;39139:11;39165:1;39208:4;39235:2;39253:15;39055:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39019:260;38747:540;;38657:5:::0;38648:6;;:14;;;;;;;;;;;;;;;;;;38676:611;;:::o;24919:492::-;25008:22;25016:4;25022:7;25008;:22::i;:::-;25003:401;;25196:28;25216:7;25196:19;:28::i;:::-;25297:38;25325:4;25317:13;;25332:2;25297:19;:38::i;:::-;25101:257;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25047:345;;;;;;;;;;;:::i;:::-;;;;;;;;25003:401;24919:492;;:::o;38370:178::-;38497:43;38513:6;38521:9;38532:7;38497:15;:43::i;:::-;38370:178;;;:::o;22526:98::-;22584:7;22615:1;22611;:5;;;;:::i;:::-;22604:12;;22526:98;;;;:::o;22632:::-;22690:7;22721:1;22717;:5;;;;:::i;:::-;22710:12;;22632:98;;;;:::o;32213:806::-;32326:1;32310:18;;:4;:18;;;32302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32403:1;32389:16;;:2;:16;;;32381:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32458:38;32479:4;32485:2;32489:6;32458:20;:38::i;:::-;32509:19;32531:9;:15;32541:4;32531:15;;;;;;;;;;;;;;;;32509:37;;32580:6;32565:11;:21;;32557:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32697:6;32683:11;:20;32665:9;:15;32675:4;32665:15;;;;;;;;;;;;;;;:38;;;;32900:6;32883:9;:13;32893:2;32883:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32950:2;32935:26;;32944:4;32935:26;;;32954:6;32935:26;;;;;;:::i;:::-;;;;;;;;32974:37;32994:4;33000:2;33004:6;32974:19;:37::i;:::-;32291:728;32213:806;;;:::o;40112:464::-;38621:4;38612:6;;:13;;;;;;;;;;;;;;;;;;40193:15:::1;40211:24;40229:4;40211:9;:24::i;:::-;40193:42;;40246:21;40284:1;40270:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40246:40;;40308:11;40300:7;:19;40297:42;;;40332:7;40320:19;;40297:42;40365:1;40353:11;:13;40350:219;;;40400:4;40382;40387:1;40382:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;40430:4;;;;;;;;;;;40420;40425:1;40420:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;40449:15;;;;;;;;;;;:69;;;40519:11;40531:1;40533:4;40538:2;40541:15;40449:108;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40350:219;40182:394;;38657:5:::0;38648:6;;:14;;;;;;;;;;;;;;;;;;40112:464;;:::o;19410:151::-;19468:13;19501:52;19529:4;19513:22;;17846:2;19501:52;;:11;:52::i;:::-;19494:59;;19410:151;;;:::o;18955:447::-;19030:13;19056:19;19101:1;19092:6;19088:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19078:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19056:47;;19114:15;:6;19121:1;19114:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19140;:6;19147:1;19140:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;19171:9;19196:1;19187:6;19183:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;19171:26;;19166:131;19203:1;19199;:5;19166:131;;;19238:8;19255:3;19247:5;:11;19238:21;;;;;;;:::i;:::-;;;;;19226:6;19233:1;19226:9;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;19284:1;19274:11;;;;;19206:3;;;;:::i;:::-;;;19166:131;;;;19324:1;19315:5;:10;19307:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19387:6;19373:21;;;18955:447;;;;:::o;35058:91::-;;;;:::o;35157:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:77::-;5552:7;5581:5;5570:16;;5515:77;;;:::o;5598:122::-;5671:24;5689:5;5671:24;:::i;:::-;5664:5;5661:35;5651:63;;5710:1;5707;5700:12;5651:63;5598:122;:::o;5726:139::-;5772:5;5810:6;5797:20;5788:29;;5826:33;5853:5;5826:33;:::i;:::-;5726:139;;;;:::o;5871:329::-;5930:6;5979:2;5967:9;5958:7;5954:23;5950:32;5947:119;;;5985:79;;:::i;:::-;5947:119;6105:1;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6076:117;5871:329;;;;:::o;6206:118::-;6293:24;6311:5;6293:24;:::i;:::-;6288:3;6281:37;6206:118;;:::o;6330:222::-;6423:4;6461:2;6450:9;6446:18;6438:26;;6474:71;6542:1;6531:9;6527:17;6518:6;6474:71;:::i;:::-;6330:222;;;;:::o;6558:474::-;6626:6;6634;6683:2;6671:9;6662:7;6658:23;6654:32;6651:119;;;6689:79;;:::i;:::-;6651:119;6809:1;6834:53;6879:7;6870:6;6859:9;6855:22;6834:53;:::i;:::-;6824:63;;6780:117;6936:2;6962:53;7007:7;6998:6;6987:9;6983:22;6962:53;:::i;:::-;6952:63;;6907:118;6558:474;;;;;:::o;7038:118::-;7125:24;7143:5;7125:24;:::i;:::-;7120:3;7113:37;7038:118;;:::o;7162:222::-;7255:4;7293:2;7282:9;7278:18;7270:26;;7306:71;7374:1;7363:9;7359:17;7350:6;7306:71;:::i;:::-;7162:222;;;;:::o;7390:86::-;7425:7;7465:4;7458:5;7454:16;7443:27;;7390:86;;;:::o;7482:112::-;7565:22;7581:5;7565:22;:::i;:::-;7560:3;7553:35;7482:112;;:::o;7600:214::-;7689:4;7727:2;7716:9;7712:18;7704:26;;7740:67;7804:1;7793:9;7789:17;7780:6;7740:67;:::i;:::-;7600:214;;;;:::o;7820:329::-;7879:6;7928:2;7916:9;7907:7;7903:23;7899:32;7896:119;;;7934:79;;:::i;:::-;7896:119;8054:1;8079:53;8124:7;8115:6;8104:9;8100:22;8079:53;:::i;:::-;8069:63;;8025:117;7820:329;;;;:::o;8155:60::-;8183:3;8204:5;8197:12;;8155:60;;;:::o;8221:142::-;8271:9;8304:53;8322:34;8331:24;8349:5;8331:24;:::i;:::-;8322:34;:::i;:::-;8304:53;:::i;:::-;8291:66;;8221:142;;;:::o;8369:126::-;8419:9;8452:37;8483:5;8452:37;:::i;:::-;8439:50;;8369:126;;;:::o;8501:151::-;8576:9;8609:37;8640:5;8609:37;:::i;:::-;8596:50;;8501:151;;;:::o;8658:181::-;8770:62;8826:5;8770:62;:::i;:::-;8765:3;8758:75;8658:181;;:::o;8845:272::-;8963:4;9001:2;8990:9;8986:18;8978:26;;9014:96;9107:1;9096:9;9092:17;9083:6;9014:96;:::i;:::-;8845:272;;;;:::o;9123:117::-;9232:1;9229;9222:12;9246:117;9355:1;9352;9345:12;9369:117;9478:1;9475;9468:12;9509:568;9582:8;9592:6;9642:3;9635:4;9627:6;9623:17;9619:27;9609:122;;9650:79;;:::i;:::-;9609:122;9763:6;9750:20;9740:30;;9793:18;9785:6;9782:30;9779:117;;;9815:79;;:::i;:::-;9779:117;9929:4;9921:6;9917:17;9905:29;;9983:3;9975:4;9967:6;9963:17;9953:8;9949:32;9946:41;9943:128;;;9990:79;;:::i;:::-;9943:128;9509:568;;;;;:::o;10083:559::-;10169:6;10177;10226:2;10214:9;10205:7;10201:23;10197:32;10194:119;;;10232:79;;:::i;:::-;10194:119;10380:1;10369:9;10365:17;10352:31;10410:18;10402:6;10399:30;10396:117;;;10432:79;;:::i;:::-;10396:117;10545:80;10617:7;10608:6;10597:9;10593:22;10545:80;:::i;:::-;10527:98;;;;10323:312;10083:559;;;;;:::o;10648:474::-;10716:6;10724;10773:2;10761:9;10752:7;10748:23;10744:32;10741:119;;;10779:79;;:::i;:::-;10741:119;10899:1;10924:53;10969:7;10960:6;10949:9;10945:22;10924:53;:::i;:::-;10914:63;;10870:117;11026:2;11052:53;11097:7;11088:6;11077:9;11073:22;11052:53;:::i;:::-;11042:63;;10997:118;10648:474;;;;;:::o;11128:180::-;11176:77;11173:1;11166:88;11273:4;11270:1;11263:15;11297:4;11294:1;11287:15;11314:320;11358:6;11395:1;11389:4;11385:12;11375:22;;11442:1;11436:4;11432:12;11463:18;11453:81;;11519:4;11511:6;11507:17;11497:27;;11453:81;11581:2;11573:6;11570:14;11550:18;11547:38;11544:84;;11600:18;;:::i;:::-;11544:84;11365:269;11314:320;;;:::o;11640:234::-;11780:34;11776:1;11768:6;11764:14;11757:58;11849:17;11844:2;11836:6;11832:15;11825:42;11640:234;:::o;11880:366::-;12022:3;12043:67;12107:2;12102:3;12043:67;:::i;:::-;12036:74;;12119:93;12208:3;12119:93;:::i;:::-;12237:2;12232:3;12228:12;12221:19;;11880:366;;;:::o;12252:419::-;12418:4;12456:2;12445:9;12441:18;12433:26;;12505:9;12499:4;12495:20;12491:1;12480:9;12476:17;12469:47;12533:131;12659:4;12533:131;:::i;:::-;12525:139;;12252:419;;;:::o;12677:180::-;12725:77;12722:1;12715:88;12822:4;12819:1;12812:15;12846:4;12843:1;12836:15;12863:191;12903:3;12922:20;12940:1;12922:20;:::i;:::-;12917:25;;12956:20;12974:1;12956:20;:::i;:::-;12951:25;;12999:1;12996;12992:9;12985:16;;13020:3;13017:1;13014:10;13011:36;;;13027:18;;:::i;:::-;13011:36;12863:191;;;;:::o;13060:143::-;13117:5;13148:6;13142:13;13133:22;;13164:33;13191:5;13164:33;:::i;:::-;13060:143;;;;:::o;13209:351::-;13279:6;13328:2;13316:9;13307:7;13303:23;13299:32;13296:119;;;13334:79;;:::i;:::-;13296:119;13454:1;13479:64;13535:7;13526:6;13515:9;13511:22;13479:64;:::i;:::-;13469:74;;13425:128;13209:351;;;;:::o;13566:332::-;13687:4;13725:2;13714:9;13710:18;13702:26;;13738:71;13806:1;13795:9;13791:17;13782:6;13738:71;:::i;:::-;13819:72;13887:2;13876:9;13872:18;13863:6;13819:72;:::i;:::-;13566:332;;;;;:::o;13904:116::-;13974:21;13989:5;13974:21;:::i;:::-;13967:5;13964:32;13954:60;;14010:1;14007;14000:12;13954:60;13904:116;:::o;14026:137::-;14080:5;14111:6;14105:13;14096:22;;14127:30;14151:5;14127:30;:::i;:::-;14026:137;;;;:::o;14169:345::-;14236:6;14285:2;14273:9;14264:7;14260:23;14256:32;14253:119;;;14291:79;;:::i;:::-;14253:119;14411:1;14436:61;14489:7;14480:6;14469:9;14465:22;14436:61;:::i;:::-;14426:71;;14382:125;14169:345;;;;:::o;14520:224::-;14660:34;14656:1;14648:6;14644:14;14637:58;14729:7;14724:2;14716:6;14712:15;14705:32;14520:224;:::o;14750:366::-;14892:3;14913:67;14977:2;14972:3;14913:67;:::i;:::-;14906:74;;14989:93;15078:3;14989:93;:::i;:::-;15107:2;15102:3;15098:12;15091:19;;14750:366;;;:::o;15122:419::-;15288:4;15326:2;15315:9;15311:18;15303:26;;15375:9;15369:4;15365:20;15361:1;15350:9;15346:17;15339:47;15403:131;15529:4;15403:131;:::i;:::-;15395:139;;15122:419;;;:::o;15547:180::-;15595:77;15592:1;15585:88;15692:4;15689:1;15682:15;15716:4;15713:1;15706:15;15733:410;15773:7;15796:20;15814:1;15796:20;:::i;:::-;15791:25;;15830:20;15848:1;15830:20;:::i;:::-;15825:25;;15885:1;15882;15878:9;15907:30;15925:11;15907:30;:::i;:::-;15896:41;;16086:1;16077:7;16073:15;16070:1;16067:22;16047:1;16040:9;16020:83;15997:139;;16116:18;;:::i;:::-;15997:139;15781:362;15733:410;;;;:::o;16149:233::-;16188:3;16211:24;16229:5;16211:24;:::i;:::-;16202:33;;16257:66;16250:5;16247:77;16244:103;;16327:18;;:::i;:::-;16244:103;16374:1;16367:5;16363:13;16356:20;;16149:233;;;:::o;16388:143::-;16445:5;16476:6;16470:13;16461:22;;16492:33;16519:5;16492:33;:::i;:::-;16388:143;;;;:::o;16537:351::-;16607:6;16656:2;16644:9;16635:7;16631:23;16627:32;16624:119;;;16662:79;;:::i;:::-;16624:119;16782:1;16807:64;16863:7;16854:6;16843:9;16839:22;16807:64;:::i;:::-;16797:74;;16753:128;16537:351;;;;:::o;16894:332::-;17015:4;17053:2;17042:9;17038:18;17030:26;;17066:71;17134:1;17123:9;17119:17;17110:6;17066:71;:::i;:::-;17147:72;17215:2;17204:9;17200:18;17191:6;17147:72;:::i;:::-;16894:332;;;;;:::o;17232:225::-;17372:34;17368:1;17360:6;17356:14;17349:58;17441:8;17436:2;17428:6;17424:15;17417:33;17232:225;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:419::-;18001:4;18039:2;18028:9;18024:18;18016:26;;18088:9;18082:4;18078:20;18074:1;18063:9;18059:17;18052:47;18116:131;18242:4;18116:131;:::i;:::-;18108:139;;17835:419;;;:::o;18260:223::-;18400:34;18396:1;18388:6;18384:14;18377:58;18469:6;18464:2;18456:6;18452:15;18445:31;18260:223;:::o;18489:366::-;18631:3;18652:67;18716:2;18711:3;18652:67;:::i;:::-;18645:74;;18728:93;18817:3;18728:93;:::i;:::-;18846:2;18841:3;18837:12;18830:19;;18489:366;;;:::o;18861:419::-;19027:4;19065:2;19054:9;19050:18;19042:26;;19114:9;19108:4;19104:20;19100:1;19089:9;19085:17;19078:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;18861:419;;;:::o;19286:221::-;19426:34;19422:1;19414:6;19410:14;19403:58;19495:4;19490:2;19482:6;19478:15;19471:29;19286:221;:::o;19513:366::-;19655:3;19676:67;19740:2;19735:3;19676:67;:::i;:::-;19669:74;;19752:93;19841:3;19752:93;:::i;:::-;19870:2;19865:3;19861:12;19854:19;;19513:366;;;:::o;19885:419::-;20051:4;20089:2;20078:9;20074:18;20066:26;;20138:9;20132:4;20128:20;20124:1;20113:9;20109:17;20102:47;20166:131;20292:4;20166:131;:::i;:::-;20158:139;;19885:419;;;:::o;20310:179::-;20450:31;20446:1;20438:6;20434:14;20427:55;20310:179;:::o;20495:366::-;20637:3;20658:67;20722:2;20717:3;20658:67;:::i;:::-;20651:74;;20734:93;20823:3;20734:93;:::i;:::-;20852:2;20847:3;20843:12;20836:19;;20495:366;;;:::o;20867:419::-;21033:4;21071:2;21060:9;21056:18;21048:26;;21120:9;21114:4;21110:20;21106:1;21095:9;21091:17;21084:47;21148:131;21274:4;21148:131;:::i;:::-;21140:139;;20867:419;;;:::o;21292:166::-;21432:18;21428:1;21420:6;21416:14;21409:42;21292:166;:::o;21464:366::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21464:366;;;:::o;21836:419::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:131;22243:4;22117:131;:::i;:::-;22109:139;;21836:419;;;:::o;22261:156::-;22401:8;22397:1;22389:6;22385:14;22378:32;22261:156;:::o;22423:365::-;22565:3;22586:66;22650:1;22645:3;22586:66;:::i;:::-;22579:73;;22661:93;22750:3;22661:93;:::i;:::-;22779:2;22774:3;22770:12;22763:19;;22423:365;;;:::o;22794:419::-;22960:4;22998:2;22987:9;22983:18;22975:26;;23047:9;23041:4;23037:20;23033:1;23022:9;23018:17;23011:47;23075:131;23201:4;23075:131;:::i;:::-;23067:139;;22794:419;;;:::o;23219:182::-;23359:34;23355:1;23347:6;23343:14;23336:58;23219:182;:::o;23407:366::-;23549:3;23570:67;23634:2;23629:3;23570:67;:::i;:::-;23563:74;;23646:93;23735:3;23646:93;:::i;:::-;23764:2;23759:3;23755:12;23748:19;;23407:366;;;:::o;23779:419::-;23945:4;23983:2;23972:9;23968:18;23960:26;;24032:9;24026:4;24022:20;24018:1;24007:9;24003:17;23996:47;24060:131;24186:4;24060:131;:::i;:::-;24052:139;;23779:419;;;:::o;24204:79::-;24243:7;24272:5;24261:16;;24204:79;;;:::o;24289:157::-;24394:45;24414:24;24432:5;24414:24;:::i;:::-;24394:45;:::i;:::-;24389:3;24382:58;24289:157;;:::o;24452:94::-;24485:8;24533:5;24529:2;24525:14;24504:35;;24452:94;;;:::o;24552:::-;24591:7;24620:20;24634:5;24620:20;:::i;:::-;24609:31;;24552:94;;;:::o;24652:100::-;24691:7;24720:26;24740:5;24720:26;:::i;:::-;24709:37;;24652:100;;;:::o;24758:157::-;24863:45;24883:24;24901:5;24883:24;:::i;:::-;24863:45;:::i;:::-;24858:3;24851:58;24758:157;;:::o;24921:538::-;25089:3;25104:75;25175:3;25166:6;25104:75;:::i;:::-;25204:2;25199:3;25195:12;25188:19;;25217:75;25288:3;25279:6;25217:75;:::i;:::-;25317:2;25312:3;25308:12;25301:19;;25330:75;25401:3;25392:6;25330:75;:::i;:::-;25430:2;25425:3;25421:12;25414:19;;25450:3;25443:10;;24921:538;;;;;;:::o;25465:180::-;25513:77;25510:1;25503:88;25610:4;25607:1;25600:15;25634:4;25631:1;25624:15;25651:176;25683:1;25700:20;25718:1;25700:20;:::i;:::-;25695:25;;25734:20;25752:1;25734:20;:::i;:::-;25729:25;;25773:1;25763:35;;25778:18;;:::i;:::-;25763:35;25819:1;25816;25812:9;25807:14;;25651:176;;;;:::o;25833:180::-;25881:77;25878:1;25871:88;25978:4;25975:1;25968:15;26002:4;25999:1;25992:15;26019:85;26064:7;26093:5;26082:16;;26019:85;;;:::o;26110:158::-;26168:9;26201:61;26219:42;26228:32;26254:5;26228:32;:::i;:::-;26219:42;:::i;:::-;26201:61;:::i;:::-;26188:74;;26110:158;;;:::o;26274:147::-;26369:45;26408:5;26369:45;:::i;:::-;26364:3;26357:58;26274:147;;:::o;26427:114::-;26494:6;26528:5;26522:12;26512:22;;26427:114;;;:::o;26547:184::-;26646:11;26680:6;26675:3;26668:19;26720:4;26715:3;26711:14;26696:29;;26547:184;;;;:::o;26737:132::-;26804:4;26827:3;26819:11;;26857:4;26852:3;26848:14;26840:22;;26737:132;;;:::o;26875:108::-;26952:24;26970:5;26952:24;:::i;:::-;26947:3;26940:37;26875:108;;:::o;26989:179::-;27058:10;27079:46;27121:3;27113:6;27079:46;:::i;:::-;27157:4;27152:3;27148:14;27134:28;;26989:179;;;;:::o;27174:113::-;27244:4;27276;27271:3;27267:14;27259:22;;27174:113;;;:::o;27323:732::-;27442:3;27471:54;27519:5;27471:54;:::i;:::-;27541:86;27620:6;27615:3;27541:86;:::i;:::-;27534:93;;27651:56;27701:5;27651:56;:::i;:::-;27730:7;27761:1;27746:284;27771:6;27768:1;27765:13;27746:284;;;27847:6;27841:13;27874:63;27933:3;27918:13;27874:63;:::i;:::-;27867:70;;27960:60;28013:6;27960:60;:::i;:::-;27950:70;;27806:224;27793:1;27790;27786:9;27781:14;;27746:284;;;27750:14;28046:3;28039:10;;27447:608;;;27323:732;;;;:::o;28061:831::-;28324:4;28362:3;28351:9;28347:19;28339:27;;28376:71;28444:1;28433:9;28429:17;28420:6;28376:71;:::i;:::-;28457:80;28533:2;28522:9;28518:18;28509:6;28457:80;:::i;:::-;28584:9;28578:4;28574:20;28569:2;28558:9;28554:18;28547:48;28612:108;28715:4;28706:6;28612:108;:::i;:::-;28604:116;;28730:72;28798:2;28787:9;28783:18;28774:6;28730:72;:::i;:::-;28812:73;28880:3;28869:9;28865:19;28856:6;28812:73;:::i;:::-;28061:831;;;;;;;;:::o;28898:148::-;29000:11;29037:3;29022:18;;28898:148;;;;:::o;29052:173::-;29192:25;29188:1;29180:6;29176:14;29169:49;29052:173;:::o;29231:402::-;29391:3;29412:85;29494:2;29489:3;29412:85;:::i;:::-;29405:92;;29506:93;29595:3;29506:93;:::i;:::-;29624:2;29619:3;29615:12;29608:19;;29231:402;;;:::o;29639:390::-;29745:3;29773:39;29806:5;29773:39;:::i;:::-;29828:89;29910:6;29905:3;29828:89;:::i;:::-;29821:96;;29926:65;29984:6;29979:3;29972:4;29965:5;29961:16;29926:65;:::i;:::-;30016:6;30011:3;30007:16;30000:23;;29749:280;29639:390;;;;:::o;30035:167::-;30175:19;30171:1;30163:6;30159:14;30152:43;30035:167;:::o;30208:402::-;30368:3;30389:85;30471:2;30466:3;30389:85;:::i;:::-;30382:92;;30483:93;30572:3;30483:93;:::i;:::-;30601:2;30596:3;30592:12;30585:19;;30208:402;;;:::o;30616:967::-;30998:3;31020:148;31164:3;31020:148;:::i;:::-;31013:155;;31185:95;31276:3;31267:6;31185:95;:::i;:::-;31178:102;;31297:148;31441:3;31297:148;:::i;:::-;31290:155;;31462:95;31553:3;31544:6;31462:95;:::i;:::-;31455:102;;31574:3;31567:10;;30616:967;;;;;:::o;31589:185::-;31629:1;31646:20;31664:1;31646:20;:::i;:::-;31641:25;;31680:20;31698:1;31680:20;:::i;:::-;31675:25;;31719:1;31709:35;;31724:18;;:::i;:::-;31709:35;31766:1;31763;31759:9;31754:14;;31589:185;;;;:::o;31780:224::-;31920:34;31916:1;31908:6;31904:14;31897:58;31989:7;31984:2;31976:6;31972:15;31965:32;31780:224;:::o;32010:366::-;32152:3;32173:67;32237:2;32232:3;32173:67;:::i;:::-;32166:74;;32249:93;32338:3;32249:93;:::i;:::-;32367:2;32362:3;32358:12;32351:19;;32010:366;;;:::o;32382:419::-;32548:4;32586:2;32575:9;32571:18;32563:26;;32635:9;32629:4;32625:20;32621:1;32610:9;32606:17;32599:47;32663:131;32789:4;32663:131;:::i;:::-;32655:139;;32382:419;;;:::o;32807:222::-;32947:34;32943:1;32935:6;32931:14;32924:58;33016:5;33011:2;33003:6;32999:15;32992:30;32807:222;:::o;33035:366::-;33177:3;33198:67;33262:2;33257:3;33198:67;:::i;:::-;33191:74;;33274:93;33363:3;33274:93;:::i;:::-;33392:2;33387:3;33383:12;33376:19;;33035:366;;;:::o;33407:419::-;33573:4;33611:2;33600:9;33596:18;33588:26;;33660:9;33654:4;33650:20;33646:1;33635:9;33631:17;33624:47;33688:131;33814:4;33688:131;:::i;:::-;33680:139;;33407:419;;;:::o;33832:225::-;33972:34;33968:1;33960:6;33956:14;33949:58;34041:8;34036:2;34028:6;34024:15;34017:33;33832:225;:::o;34063:366::-;34205:3;34226:67;34290:2;34285:3;34226:67;:::i;:::-;34219:74;;34302:93;34391:3;34302:93;:::i;:::-;34420:2;34415:3;34411:12;34404:19;;34063:366;;;:::o;34435:419::-;34601:4;34639:2;34628:9;34624:18;34616:26;;34688:9;34682:4;34678:20;34674:1;34663:9;34659:17;34652:47;34716:131;34842:4;34716:131;:::i;:::-;34708:139;;34435:419;;;:::o;34860:171::-;34899:3;34922:24;34940:5;34922:24;:::i;:::-;34913:33;;34968:4;34961:5;34958:15;34955:41;;34976:18;;:::i;:::-;34955:41;35023:1;35016:5;35012:13;35005:20;;34860:171;;;:::o;35037:182::-;35177:34;35173:1;35165:6;35161:14;35154:58;35037:182;:::o;35225:366::-;35367:3;35388:67;35452:2;35447:3;35388:67;:::i;:::-;35381:74;;35464:93;35553:3;35464:93;:::i;:::-;35582:2;35577:3;35573:12;35566:19;;35225:366;;;:::o;35597:419::-;35763:4;35801:2;35790:9;35786:18;35778:26;;35850:9;35844:4;35840:20;35836:1;35825:9;35821:17;35814:47;35878:131;36004:4;35878:131;:::i;:::-;35870:139;;35597:419;;;:::o

Swarm Source

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