diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 5fd60ab..0000000 --- a/.flake8 +++ /dev/null @@ -1,3 +0,0 @@ -[flake8] -ignore = E203 E501 W503 W504 -exclude = .eggs,docs,.venv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 54ed9c2..60e9daf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,34 @@ repos: - - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 hooks: + - id: check-added-large-files + - id: check-executables-have-shebangs + - id: check-shebang-scripts-are-executable + - id: check-toml + - id: check-yaml - id: end-of-file-fixer - exclude: .*\.txt - rev: v4.5.0 + - id: mixed-line-ending + args: [ --fix=no ] + - id: name-tests-test + args: [ --pytest-test-first ] + files: ^tests/integration/.*\.py|tests/unit/.*\.py$ + - id: sort-simple-yaml + files: ^(\.github/workflows/.*\.ya?ml|\.readthedocs.ya?ml)$ + - id: trailing-whitespace + + - repo: https://github.com/pappasam/toml-sort + rev: v0.23.1 + hooks: + - id: toml-sort-fix + files: ^(.*\.toml)$ + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.0.290 + hooks: + - id: ruff + args: [ --exit-non-zero-on-fix, --fix ] + files: ^(asyncprawcore/.*.py)$ - repo: https://github.com/psf/black hooks: @@ -14,28 +38,5 @@ repos: - repo: https://github.com/LilSpazJoekp/docstrfmt hooks: - id: docstrfmt + require_serial: true rev: v1.5.1 - - - repo: https://github.com/pycqa/flake8 - hooks: - - id: flake8 - rev: 6.1.0 - - - repo: https://github.com/ikamensh/flynt/ - hooks: - - id: flynt - args: - - '-ll' - - '1000' - rev: '1.0.1' - - - repo: https://github.com/pycqa/isort - hooks: - - id: isort - rev: 5.12.0 - - - repo: https://github.com/pycqa/pydocstyle - hooks: - - id: pydocstyle - files: asyncprawcore/.* - rev: 6.3.0 diff --git a/asyncprawcore/__init__.py b/asyncprawcore/__init__.py index b7adfdf..c5960e0 100644 --- a/asyncprawcore/__init__.py +++ b/asyncprawcore/__init__.py @@ -1,8 +1,8 @@ -"""asyncprawcore: Low-level asynchronous communication layer for Async PRAW 7+.""" +"""Low-level asynchronous communication layer for Async PRAW 7+.""" import logging -from .auth import ( # noqa +from .auth import ( Authorizer, DeviceIDAuthorizer, ImplicitAuthorizer, @@ -11,9 +11,9 @@ TrustedAuthenticator, UntrustedAuthenticator, ) -from .const import __version__ # noqa -from .exceptions import * # noqa -from .requestor import Requestor # noqa -from .sessions import Session, session # noqa +from .const import __version__ +from .exceptions import * # noqa: F403 +from .requestor import Requestor +from .sessions import Session, session logging.getLogger(__package__).addHandler(logging.NullHandler()) diff --git a/asyncprawcore/auth.py b/asyncprawcore/auth.py index e6b9725..0a4b1bb 100644 --- a/asyncprawcore/auth.py +++ b/asyncprawcore/auth.py @@ -1,20 +1,12 @@ """Provides Authentication and Authorization classes.""" +from __future__ import annotations + import inspect import time from abc import ABC, abstractmethod -from typing import ( - TYPE_CHECKING, - Awaitable, - Callable, - List, - Optional, - Set, - Tuple, - Type, - Union, -) - -from aiohttp import ClientRequest, ClientResponse +from typing import TYPE_CHECKING, Any, Awaitable, Callable + +from aiohttp import ClientRequest from aiohttp.helpers import BasicAuth from yarl import URL @@ -23,6 +15,8 @@ from .exceptions import InvalidInvocation, OAuthException, ResponseException if TYPE_CHECKING: + from aiohttp import ClientResponse + from asyncprawcore.requestor import Requestor @@ -30,12 +24,15 @@ class BaseAuthenticator(ABC): """Provide the base authenticator object that stores OAuth2 credentials.""" @abstractmethod - def _auth(self): + def _auth(self) -> BasicAuth: pass def __init__( - self, requestor: "Requestor", client_id: str, redirect_uri: Optional[str] = None - ) -> None: + self, + requestor: Requestor, + client_id: str, + redirect_uri: str | None = None, + ): """Represent a single authentication to Reddit's API. :param requestor: An instance of :class:`.Requestor`. @@ -52,7 +49,7 @@ def __init__( self.redirect_uri = redirect_uri async def _post( - self, url: str, success_status: int = codes["ok"], **data + self, url: str, success_status: int = codes["ok"], **data: Any ) -> ClientResponse: response = await self._requestor.request( "POST", @@ -66,7 +63,7 @@ async def _post( return response def authorize_url( - self, duration: str, scopes: List[str], state: str, implicit: bool = False + self, duration: str, scopes: list[str], state: str, implicit: bool = False ) -> str: """Return the URL used out-of-band to grant access to your application. @@ -92,16 +89,16 @@ def authorize_url( """ if self.redirect_uri is None: - raise InvalidInvocation("redirect URI not provided") + msg = "redirect URI not provided" + raise InvalidInvocation(msg) if implicit and not isinstance(self, UntrustedAuthenticator): - raise InvalidInvocation( - "Only UntrustedAuthenticator instances can " - "use the implicit grant flow." + msg = ( + "Only UntrustedAuthenticator instances can use the implicit grant flow." ) + raise InvalidInvocation(msg) if implicit and duration != "temporary": - raise InvalidInvocation( - "The implicit grant flow only supports temporary access tokens." - ) + msg = "The implicit grant flow only supports temporary access tokens." + raise InvalidInvocation(msg) params = { "client_id": self.client_id, @@ -115,7 +112,7 @@ def authorize_url( request = ClientRequest("GET", URL(url), params=params) return str(request.url) - async def revoke_token(self, token: str, token_type: Optional[str] = None) -> None: + async def revoke_token(self, token: str, token_type: str | None = None): """Ask Reddit to revoke the provided token. :param token: The access or refresh token to revoke. @@ -134,9 +131,9 @@ async def revoke_token(self, token: str, token_type: Optional[str] = None) -> No class BaseAuthorizer(ABC): """Superclass for OAuth2 authorization tokens and scopes.""" - AUTHENTICATOR_CLASS: Union[Tuple, Type] = BaseAuthenticator + AUTHENTICATOR_CLASS: tuple | type = BaseAuthenticator - def __init__(self, authenticator: BaseAuthenticator) -> None: + def __init__(self, authenticator: BaseAuthenticator): """Represent a single authorization to Reddit's API. :param authenticator: An instance of :class:`.BaseAuthenticator`. @@ -146,12 +143,12 @@ def __init__(self, authenticator: BaseAuthenticator) -> None: self._clear_access_token() self._validate_authenticator() - def _clear_access_token(self) -> None: + def _clear_access_token(self): self._expiration_timestamp: float - self.access_token: Optional[str] = None - self.scopes: Optional[Set[str]] = None + self.access_token: str | None = None + self.scopes: set[str] | None = None - async def _request_token(self, **data) -> None: + async def _request_token(self, **data: Any): url = self._authenticator._requestor.reddit_url + const.ACCESS_TOKEN_PATH pre_request_time = time.time() response = await self._authenticator._post(url=url, **data) @@ -167,7 +164,7 @@ async def _request_token(self, **data) -> None: self.refresh_token = payload["refresh_token"] self.scopes = set(payload["scope"].split(" ")) - def _validate_authenticator(self) -> None: + def _validate_authenticator(self): if not isinstance(self._authenticator, self.AUTHENTICATOR_CLASS): msg = "Must use an authenticator of type" if isinstance(self.AUTHENTICATOR_CLASS, type): @@ -189,10 +186,11 @@ def is_valid(self) -> bool: self.access_token is not None and time.time() < self._expiration_timestamp ) - async def revoke(self) -> None: + async def revoke(self): """Revoke the current Authorization.""" if self.access_token is None: - raise InvalidInvocation("no token available to revoke") + msg = "no token available to revoke" + raise InvalidInvocation(msg) await self._authenticator.revoke_token(self.access_token, "access_token") self._clear_access_token() @@ -205,11 +203,11 @@ class TrustedAuthenticator(BaseAuthenticator): def __init__( self, - requestor: "Requestor", + requestor: Requestor, client_id: str, client_secret: str, - redirect_uri: Optional[str] = None, - ) -> None: + redirect_uri: str | None = None, + ): """Represent a single authentication to Reddit's API. :param requestor: An instance of :class:`.Requestor`. @@ -222,7 +220,7 @@ def __init__( (default: ``None``). """ - super(TrustedAuthenticator, self).__init__(requestor, client_id, redirect_uri) + super().__init__(requestor, client_id, redirect_uri) self.client_secret = client_secret def _auth(self) -> BasicAuth: @@ -243,20 +241,14 @@ def __init__( self, authenticator: BaseAuthenticator, *, - post_refresh_callback: Optional[ - Union[ - Callable[["Authorizer"], Awaitable[None]], - Callable[["Authorizer"], None], - ] - ] = None, - pre_refresh_callback: Optional[ - Union[ - Callable[["Authorizer"], Awaitable[None]], - Callable[["Authorizer"], None], - ] - ] = None, - refresh_token: Optional[str] = None, - ) -> None: + post_refresh_callback: Callable[[Authorizer], Awaitable[None]] + | Callable[[Authorizer], None] + | None = None, + pre_refresh_callback: Callable[[Authorizer], Awaitable[None]] + | Callable[[Authorizer], None] + | None = None, + refresh_token: str | None = None, + ): """Represent a single authorization to Reddit's API. :param authenticator: An instance of a subclass of :class:`.BaseAuthenticator`. @@ -273,12 +265,12 @@ def __init__( :param refresh_token: Enables the ability to refresh the authorization. """ - super(Authorizer, self).__init__(authenticator) + super().__init__(authenticator) self._post_refresh_callback = post_refresh_callback self._pre_refresh_callback = pre_refresh_callback self.refresh_token = refresh_token - async def authorize(self, code: str) -> None: + async def authorize(self, code: str): """Obtain and set authorization tokens based on ``code``. :param code: The code obtained by an out-of-band authorization request to @@ -286,14 +278,15 @@ async def authorize(self, code: str) -> None: """ if self._authenticator.redirect_uri is None: - raise InvalidInvocation("redirect URI not provided") + msg = "redirect URI not provided" + raise InvalidInvocation(msg) await self._request_token( code=code, grant_type="authorization_code", redirect_uri=self._authenticator.redirect_uri, ) - async def refresh(self) -> None: + async def refresh(self): """Obtain a new access token from the refresh_token.""" if self._pre_refresh_callback: if inspect.iscoroutinefunction(self._pre_refresh_callback): @@ -301,7 +294,8 @@ async def refresh(self) -> None: else: self._pre_refresh_callback(self) if self.refresh_token is None: - raise InvalidInvocation("refresh token not provided") + msg = "refresh token not provided" + raise InvalidInvocation(msg) await self._request_token( grant_type="refresh_token", refresh_token=self.refresh_token ) @@ -311,7 +305,7 @@ async def refresh(self) -> None: else: self._post_refresh_callback(self) - async def revoke(self, only_access: bool = False) -> None: + async def revoke(self, only_access: bool = False): """Revoke the current Authorization. :param only_access: When explicitly set to ``True``, do not evict the refresh @@ -322,7 +316,7 @@ async def revoke(self, only_access: bool = False) -> None: """ if only_access or self.refresh_token is None: - await super(Authorizer, self).revoke() + await super().revoke() else: await self._authenticator.revoke_token(self.refresh_token, "refresh_token") self._clear_access_token() @@ -340,7 +334,7 @@ def __init__( access_token: str, expires_in: int, scope: str, - ) -> None: + ): """Represent a single implicit authorization to Reddit's API. :param authenticator: An instance of :class:`.UntrustedAuthenticator`. @@ -355,7 +349,7 @@ def __init__( from Reddit in the callback to the authenticator's redirect uri. """ - super(ImplicitAuthorizer, self).__init__(authenticator) + super().__init__(authenticator) self._expiration_timestamp = time.time() + expires_in self.access_token = access_token self.scopes = set(scope.split(" ")) @@ -374,8 +368,8 @@ class ReadOnlyAuthorizer(Authorizer): def __init__( self, authenticator: BaseAuthenticator, - scopes: Optional[List[str]] = None, - ) -> None: + scopes: list[str] | None = None, + ): """Represent a ReadOnly authorization to Reddit's API. :param scopes: A list of OAuth scopes to request authorization for (default: @@ -385,7 +379,7 @@ def __init__( super().__init__(authenticator) self._scopes = scopes - async def refresh(self) -> None: + async def refresh(self): """Obtain a new ReadOnly access token.""" additional_kwargs = {} if self._scopes: @@ -406,11 +400,11 @@ class ScriptAuthorizer(Authorizer): def __init__( self, authenticator: BaseAuthenticator, - username: Optional[str], - password: Optional[str], - two_factor_callback: Optional[Callable[[], Union[Awaitable[str], str]]] = None, - scopes: Optional[List[str]] = None, - ) -> None: + username: str | None, + password: str | None, + two_factor_callback: Callable | None = None, + scopes: list[str] | None = None, + ): """Represent a single personal-use authorization to Reddit's API. :param authenticator: An instance of :class:`.TrustedAuthenticator`. @@ -423,24 +417,24 @@ def __init__( ``None``). The scope ``"*"`` is requested when the default argument is used. """ - super(ScriptAuthorizer, self).__init__(authenticator) + super().__init__(authenticator) self._password = password self._scopes = scopes self._two_factor_callback = two_factor_callback self._username = username - async def refresh(self) -> None: + async def refresh(self): """Obtain a new personal-use script type access token.""" additional_kwargs = {} if self._scopes: additional_kwargs["scope"] = " ".join(self._scopes) if self._two_factor_callback: if inspect.iscoroutinefunction(self._two_factor_callback): - otp = await self._two_factor_callback() + two_factor_code = await self._two_factor_callback() else: - otp = self._two_factor_callback() - if otp: - additional_kwargs["otp"] = otp + two_factor_code = self._two_factor_callback() + if two_factor_code: + additional_kwargs["otp"] = two_factor_code await self._request_token( grant_type="password", username=self._username, @@ -462,9 +456,9 @@ class DeviceIDAuthorizer(BaseAuthorizer): def __init__( self, authenticator: BaseAuthenticator, - device_id: Optional[str] = None, - scopes: Optional[List[str]] = None, - ) -> None: + device_id: str | None = None, + scopes: list[str] | None = None, + ): """Represent an app-only OAuth2 authorization for 'installed' apps. :param authenticator: An instance of :class:`.UntrustedAuthenticator` or @@ -483,7 +477,7 @@ def __init__( self._device_id = device_id self._scopes = scopes - async def refresh(self) -> None: + async def refresh(self): """Obtain a new access token.""" additional_kwargs = {} if self._scopes: diff --git a/asyncprawcore/codes.py b/asyncprawcore/codes.py index 49e4ffb..8ddcd1e 100644 --- a/asyncprawcore/codes.py +++ b/asyncprawcore/codes.py @@ -1,8 +1,8 @@ """Use our own codes instead of importing them.""" -from typing import Dict, Tuple +from __future__ import annotations -def _make_into_dict(tupledict: Dict[int, Tuple[str, ...]]) -> Dict[str, int]: +def _make_into_dict(tupledict: dict[int, tuple[str, ...]]) -> dict[str, int]: """Transform a ``value, keys`` tupledict.""" newdict = {} for value, keys in tupledict.items(): diff --git a/asyncprawcore/const.py b/asyncprawcore/const.py index 2320277..2d9003c 100644 --- a/asyncprawcore/const.py +++ b/asyncprawcore/const.py @@ -3,8 +3,12 @@ __version__ = "2.3.1.dev0" -ACCESS_TOKEN_PATH = "/api/v1/access_token" -AUTHORIZATION_PATH = "/api/v1/authorize" -REVOKE_TOKEN_PATH = "/api/v1/revoke_token" -TIMEOUT = float(os.environ.get("prawcore_timeout", 16)) +ACCESS_TOKEN_PATH = "/api/v1/access_token" # noqa: S105 +AUTHORIZATION_PATH = "/api/v1/authorize" # noqa: S105 +REVOKE_TOKEN_PATH = "/api/v1/revoke_token" # noqa: S105 +TIMEOUT = float( + os.environ.get( + "PRAWCORE_TIMEOUT", os.environ.get("prawcore_timeout", 16) # noqa: SIM112 + ) +) WINDOW_SIZE = 600 diff --git a/asyncprawcore/exceptions.py b/asyncprawcore/exceptions.py index 51ae9e1..72cddb6 100644 --- a/asyncprawcore/exceptions.py +++ b/asyncprawcore/exceptions.py @@ -1,13 +1,14 @@ """Provide exception classes for the asyncprawcore package.""" +from __future__ import annotations -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Any from urllib.parse import urlparse if TYPE_CHECKING: from aiohttp import ClientResponse -class AsyncPrawcoreException(Exception): +class AsyncPrawcoreException(Exception): # noqa: N818 """Base exception class for exceptions that occur within this package.""" @@ -19,11 +20,11 @@ class OAuthException(AsyncPrawcoreException): """Indicate that there was an OAuth2 related error with the request.""" def __init__( - self, response: "ClientResponse", error: str, description: Optional[str] - ) -> None: - """Intialize a OAuthException instance. + self, response: ClientResponse, error: str, description: str | None = None + ): + """Initialize a OAuthException instance. - :param response: The response returned from an aiohttp request. + :param response: A ``aiohttp.ClientResponse`` instance. :param error: The error type returned by Reddit. :param description: A description of the error when provided. @@ -43,11 +44,11 @@ class RequestException(AsyncPrawcoreException): def __init__( self, original_exception: Exception, - request_args: Tuple[Any, ...], - request_kwargs: Dict[ - str, Optional[Union[bool, Dict[str, int], Dict[str, str], str]] + request_args: tuple[Any, ...], + request_kwargs: dict[ + str, bool | (dict[str, int] | (dict[str, str] | str)) | None ], - ) -> None: + ): """Initialize a RequestException instance. :param original_exception: The original exception that occurred. @@ -58,24 +59,20 @@ def __init__( self.original_exception = original_exception self.request_args = request_args self.request_kwargs = request_kwargs - super(RequestException, self).__init__( - f"error with request {original_exception}" - ) + super().__init__(f"error with request {original_exception}") class ResponseException(AsyncPrawcoreException): """Indicate that there was an error with the completed HTTP request.""" - def __init__(self, response: "ClientResponse") -> None: + def __init__(self, response: ClientResponse): """Initialize a ResponseException instance. - :param response: The response returned from an aiohttp request. + :param response: A ``aiohttp.ClientResponse`` instance. """ self.response = response - super(ResponseException, self).__init__( - f"received {response.status} HTTP response" - ) + super().__init__(f"received {response.status} HTTP response") class BadJSON(ResponseException): @@ -114,10 +111,10 @@ class Redirect(ResponseException): """ - def __init__(self, response: "ClientResponse") -> None: + def __init__(self, response: ClientResponse): """Initialize a Redirect exception instance. - :param response: The response returned from an aiohttp request. + :param response: A ``aiohttp.ClientResponse`` instance. """ path: str = urlparse(response.headers.get("location")).path @@ -140,12 +137,11 @@ class ServerError(ResponseException): class SpecialError(ResponseException): """Indicate syntax or spam-prevention issues.""" - def __init__( - self, response: "ClientResponse", resp_dict: Dict[str, Union[List[str], str]] - ) -> None: + def __init__(self, response: ClientResponse, resp_dict: dict[str, Any]): """Initialize a SpecialError exception instance. - :param response: The response returned from an aiohttp request. + :param response: A ``aiohttp.ClientResponse`` instance containing a message and + a list of special errors. """ self.response = response @@ -163,7 +159,7 @@ class TooLarge(ResponseException): class TooManyRequests(ResponseException): """Indicate that the user has sent too many requests in a given amount of time.""" - def __init__(self, response: "ClientResponse") -> None: + def __init__(self, response: ClientResponse): """Initialize a TooManyRequests exception instance. :param response: A ``aiohttp.ClientResponse`` instance that may contain a diff --git a/asyncprawcore/rate_limit.py b/asyncprawcore/rate_limit.py index 5cbfa0b..18280c5 100644 --- a/asyncprawcore/rate_limit.py +++ b/asyncprawcore/rate_limit.py @@ -1,8 +1,10 @@ """Provide the RateLimiter class.""" +from __future__ import annotations + import asyncio import logging import time -from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, Mapping, Optional +from typing import TYPE_CHECKING, Any, Awaitable, Callable, Mapping if TYPE_CHECKING: from aiohttp import ClientResponse @@ -10,28 +12,31 @@ log = logging.getLogger(__package__) -class RateLimiter(object): +class RateLimiter: """Facilitates the rate limiting of requests to Reddit. Rate limits are controlled based on feedback from requests to Reddit. """ - def __init__(self, *, window_size: int) -> None: + def __init__(self, *, window_size: int): """Create an instance of the RateLimit class.""" - self.remaining: Optional[float] = None - self.next_request_timestamp: Optional[float] = None - self.reset_timestamp: Optional[float] = None - self.used: Optional[int] = None + self.remaining: float | None = None + self.next_request_timestamp: float | None = None + self.reset_timestamp: float | None = None + self.used: int | None = None self.window_size: int = window_size async def call( self, - request_function: Callable[[Any], Awaitable["ClientResponse"]], - set_header_callback: Callable[[], Awaitable[Dict[str, str]]], - *args, - **kwargs, - ) -> "ClientResponse": + request_function: Callable[ + [Any], + Awaitable[ClientResponse], + ], + set_header_callback: Callable[[], Awaitable[dict[str, str]]], + *args: Any, + **kwargs: Any, + ) -> ClientResponse: """Rate limit the call to ``request_function``. :param request_function: A function call that returns an HTTP response object. @@ -47,7 +52,7 @@ async def call( self.update(response.headers) return response - async def delay(self) -> None: + async def delay(self): """Sleep for an amount of time to remain under the rate limit.""" if self.next_request_timestamp is None: return @@ -58,7 +63,7 @@ async def delay(self) -> None: log.debug(message) await asyncio.sleep(sleep_seconds) - def update(self, response_headers: Mapping[str, str]) -> None: + def update(self, response_headers: Mapping[str, str]): """Update the state of the rate limiter based on the response headers. This method should only be called following an HTTP request to Reddit. diff --git a/asyncprawcore/requestor.py b/asyncprawcore/requestor.py index 8d7bca9..a5830da 100644 --- a/asyncprawcore/requestor.py +++ b/asyncprawcore/requestor.py @@ -1,8 +1,11 @@ """Provides the HTTP request handling interface.""" +from __future__ import annotations + import asyncio -from typing import TYPE_CHECKING, Any, Dict, Optional, Union +from typing import TYPE_CHECKING, Any import aiohttp +from aiohttp import ClientSession from .const import TIMEOUT, __version__ from .exceptions import InvalidInvocation, RequestException @@ -10,10 +13,10 @@ if TYPE_CHECKING: from asyncio import AbstractEventLoop - from .sessions import Session + from aiohttp import ClientResponse -class Requestor(object): +class Requestor: """Requestor provides an interface to HTTP requests.""" def __getattr__(self, attribute: str) -> Any: # pragma: no cover @@ -27,10 +30,10 @@ def __init__( user_agent: str, oauth_url: str = "https://oauth.reddit.com", reddit_url: str = "https://www.reddit.com", - session: Optional["Session"] = None, - loop: Optional["AbstractEventLoop"] = None, + session: ClientSession | None = None, + loop: AbstractEventLoop = None, timeout: float = TIMEOUT, - ) -> None: + ): """Create an instance of the Requestor class. :param user_agent: The user-agent for your application. Please follow Reddit's @@ -39,14 +42,15 @@ def __init__( (default: ``"https://oauth.reddit.com"``). :param reddit_url: The URL used when obtaining access tokens (default: ``"https://www.reddit.com"``). - :param session: A session to handle requests, compatible with + :param session: A session instance to handle requests, compatible with ``aiohttp.ClientSession()`` (default: ``None``). :param timeout: How many seconds to wait for the server to send data before giving up (default: ``asyncprawcore.const.TIMEOUT``). """ if user_agent is None or len(user_agent) < 7: - raise InvalidInvocation("user_agent is not descriptive") + msg = "user_agent is not descriptive" + raise InvalidInvocation(msg) self.loop = loop or asyncio.get_event_loop() self._http = session or aiohttp.ClientSession( @@ -60,17 +64,17 @@ def __init__( self.reddit_url = reddit_url self.timeout = timeout - async def close(self) -> None: + async def close(self): """Call close on the underlying session.""" - return await self._http.close() + await self._http.close() async def request( - self, *args, timeout: Optional[float] = None, **kwargs - ) -> Union[Dict[str, Any], str, None]: + self, *args: Any, timeout: float | None = None, **kwargs: Any + ) -> ClientResponse: """Issue the HTTP request capturing any errors that may occur.""" try: return await self._http.request( *args, timeout=timeout or self.timeout, **kwargs ) - except Exception as exc: - raise RequestException(exc, args, kwargs) + except Exception as exc: # noqa: BLE001 + raise RequestException(exc, args, kwargs) from None diff --git a/asyncprawcore/sessions.py b/asyncprawcore/sessions.py index 0e0ab17..d90633d 100644 --- a/asyncprawcore/sessions.py +++ b/asyncprawcore/sessions.py @@ -1,11 +1,14 @@ """asyncprawcore.sessions: Provides asyncprawcore.Session and asyncprawcore.session.""" +from __future__ import annotations + import asyncio import logging import random import time from abc import ABC, abstractmethod from copy import deepcopy -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union +from pprint import pformat +from typing import TYPE_CHECKING, Any, BinaryIO, TextIO from urllib.parse import urljoin from aiohttp.web import HTTPRequestTimeout @@ -32,9 +35,6 @@ from .util import authorization_error_class if TYPE_CHECKING: - from io import BufferedReader - - from aiofiles.threadpool.binary import AsyncBufferedReader from aiohttp import ClientResponse from .auth import Authorizer @@ -53,10 +53,10 @@ class RetryStrategy(ABC): """ @abstractmethod - def _sleep_seconds(self) -> Optional[float]: + def _sleep_seconds(self) -> float | None: pass - async def sleep(self) -> None: + async def sleep(self): """Sleep until we are ready to attempt the request.""" sleep_seconds = self._sleep_seconds() if sleep_seconds is not None: @@ -65,7 +65,7 @@ async def sleep(self) -> None: await asyncio.sleep(sleep_seconds) -class Session(object): +class Session: """The low-level connection interface to Reddit's API.""" RETRY_EXCEPTIONS = (ConnectionError, HTTPRequestTimeout) @@ -104,17 +104,17 @@ class Session(object): @staticmethod def _log_request( - data: Optional[List[Tuple[str, str]]], + data: list[tuple[str, str]] | None, method: str, - params: Dict[str, int], + params: dict[str, int], url: str, ): - log.debug(f"Fetching: {method} {url} at {time.time()}") - log.debug(f"Data: {data}") - log.debug(f"Params: {params}") + log.debug("Fetching: %s %s at %s", method, url, time.time()) + log.debug("Data: %s", pformat(data)) + log.debug("Params: %s", pformat(params)) @staticmethod - def _preprocess_dict(data: Dict[str, Any]) -> Dict[str, str]: + def _preprocess_dict(data: dict[str, Any]) -> dict[str, str]: new_data = {} for key, value in data.items(): if isinstance(value, bool): @@ -124,22 +124,22 @@ def _preprocess_dict(data: Dict[str, Any]) -> Dict[str, str]: return new_data @property - def _requestor(self) -> "Requestor": + def _requestor(self) -> Requestor: return self._authorizer._authenticator._requestor - async def __aenter__(self) -> "Session": + async def __aenter__(self) -> Session: # noqa: PYI034 """Allow this object to be used as a context manager.""" return self - async def __aexit__(self, *_args) -> None: + async def __aexit__(self, *_args): """Allow this object to be used as a context manager.""" await self.close() def __init__( self, - authorizer: Optional[BaseAuthorizer], + authorizer: BaseAuthorizer | None, window_size: int = WINDOW_SIZE, - ) -> None: + ): """Prepare the connection to Reddit's API. :param authorizer: An instance of :class:`.Authorizer`. @@ -147,28 +147,26 @@ def __init__( """ if not isinstance(authorizer, BaseAuthorizer): - raise InvalidInvocation(f"invalid Authorizer: {authorizer}") + msg = f"invalid Authorizer: {authorizer}" + raise InvalidInvocation(msg) self._authorizer = authorizer self._rate_limiter = RateLimiter(window_size=window_size) self._retry_strategy_class = FiniteRetryStrategy async def _do_retry( self, - data: List[Tuple[str, Any]], - json: Dict[str, Any], + data: list[tuple[str, Any]], + json: dict[str, Any], method: str, - params: Dict[str, int], - response: Optional["ClientResponse"], - retry_strategy_state: "FiniteRetryStrategy", - saved_exception: Optional[Exception], + params: dict[str, int], + response: ClientResponse | None, + retry_strategy_state: FiniteRetryStrategy, + saved_exception: Exception | None, timeout: float, url: str, - ) -> Optional[Union[Dict[str, Any], str]]: - if saved_exception: - status = repr(saved_exception) - else: - status = response.status - log.warning(f"Retrying due to {status} status: {method} {url}") + ) -> dict[str, Any] | str | None: + status = repr(saved_exception) if saved_exception else response.status + log.warning("Retrying due to %s status: %s %s", status, method, url) return await self._request_with_retries( data=data, json=json, @@ -182,14 +180,14 @@ async def _do_retry( async def _make_request( self, - data: List[Tuple[str, Any]], - json: Dict[str, Any], + data: list[tuple[str, Any]], + json: dict[str, Any], method: str, - params: Dict[str, Any], - retry_strategy_state: "FiniteRetryStrategy", + params: dict[str, Any], + retry_strategy_state: FiniteRetryStrategy, timeout: float, url: str, - ) -> Union[Tuple["ClientResponse", None], Tuple[None, Exception]]: + ) -> tuple[ClientResponse, None] | tuple[None, Exception]: try: response = await self._rate_limiter.call( self._requestor.request, @@ -203,11 +201,13 @@ async def _make_request( timeout=timeout, ) log.debug( - f"Response: {response.status}" - f" ({response.headers.get('content-length')} bytes)" - f" (rst-{response.headers.get('x-ratelimit-reset')}:" - f"rem-{response.headers.get('x-ratelimit-remaining')}:" - f"used-{response.headers.get('x-ratelimit-used')} ratelimit) at {time.time()}" + "Response: %s (%s bytes) (rst-%s:rem-%s:used-%s ratelimit) at %s", + response.status, + response.headers.get("content-length"), + response.headers.get("x-ratelimit-reset"), + response.headers.get("x-ratelimit-remaining"), + response.headers.get("x-ratelimit-used"), + time.time(), ) return response, None except RequestException as exception: @@ -222,9 +222,9 @@ async def _make_request( def _preprocess_data( self, - data: Dict[str, Any], - files: Optional[Dict[str, Union["AsyncBufferedReader", "BufferedReader"]]], - ) -> Optional[Dict[str, str]]: + data: dict[str, Any], + files: dict[str, BinaryIO | TextIO] | None, + ) -> dict[str, str] | None: """Preprocess data and files before request. This is to convert requests that are formatted for the ``requests`` package to @@ -246,11 +246,11 @@ def _preprocess_data( if isinstance(data, dict): data = self._preprocess_dict(data) if files is not None: - data: Dict[str, Union[str, "AsyncBufferedReader", "BufferedReader"]] + data: dict[str, str | BinaryIO | TextIO] data.update(files) return data - def _preprocess_params(self, params: Dict[str, int]) -> Dict[str, str]: + def _preprocess_params(self, params: dict[str, int]) -> dict[str, str]: """Preprocess params before request. This is to convert requests that are formatted for the ``requests`` package to @@ -270,14 +270,14 @@ def _preprocess_params(self, params: Dict[str, int]) -> Dict[str, str]: async def _request_with_retries( self, - data: List[Union[Tuple[str, Any]]], - json: Dict[str, Any], + data: list[tuple[str, Any]], + json: dict[str, Any], method: str, - params: Dict[str, Any], + params: dict[str, Any], timeout: float, url: str, - retry_strategy_state: Optional["FiniteRetryStrategy"] = None, - ) -> Optional[Union[Dict[str, Any], str]]: + retry_strategy_state: FiniteRetryStrategy | None = None, + ) -> dict[str, Any] | str | None: if retry_strategy_state is None: retry_strategy_state = self._retry_strategy_class() @@ -313,16 +313,15 @@ async def _request_with_retries( timeout, url, ) - elif response.status in self.STATUS_EXCEPTIONS: + if response.status in self.STATUS_EXCEPTIONS: if response.status == codes["media_type"]: # since exception class needs response.json raise self.STATUS_EXCEPTIONS[response.status]( response, await response.json() ) - else: - raise self.STATUS_EXCEPTIONS[response.status](response) - elif response.status == codes["no_content"]: - return + raise self.STATUS_EXCEPTIONS[response.status](response) + if response.status == codes["no_content"]: + return None assert ( response.status in self.SUCCESS_STATUSES ), f"Unexpected status code: {response.status}" @@ -331,14 +330,14 @@ async def _request_with_retries( try: return await response.json() except ValueError: - raise BadJSON(response) + raise BadJSON(response) from None - async def _set_header_callback(self) -> Dict[str, str]: + async def _set_header_callback(self) -> dict[str, str]: if not self._authorizer.is_valid() and hasattr(self._authorizer, "refresh"): await self._authorizer.refresh() return {"Authorization": f"bearer {self._authorizer.access_token}"} - async def close(self) -> None: + async def close(self): """Close the session and perform any clean up.""" await self._requestor.close() @@ -346,14 +345,12 @@ async def request( self, method: str, path: str, - data: Optional[Dict[str, Any]] = None, - files: Optional[ - Dict[str, Union["AsyncBufferedReader", "BufferedReader"]] - ] = None, - json: Optional[Dict[str, Any]] = None, - params: Optional[Dict[str, Any]] = None, + data: dict[str, Any] | None = None, + files: dict[str, BinaryIO | TextIO] | None = None, + json: dict[str, Any] | None = None, + params: dict[str, Any] | None = None, timeout: float = TIMEOUT, - ) -> Optional[Union[Dict[str, Any], str]]: + ) -> dict[str, Any] | str | None: """Return the json content from the resource at ``path``. :param method: The request verb. E.g., ``"GET"``, ``"POST"``, ``"PUT"``. @@ -394,7 +391,7 @@ async def request( def session( - authorizer: "Authorizer" = None, + authorizer: Authorizer = None, window_size: int = WINDOW_SIZE, ) -> Session: """Return a :class:`.Session` instance. @@ -409,7 +406,7 @@ def session( class FiniteRetryStrategy(RetryStrategy): """A ``RetryStrategy`` that retries requests a finite number of times.""" - def __init__(self, retries: int = 3) -> None: + def __init__(self, retries: int = 3): """Initialize the strategy. :param retries: Number of times to attempt a request (default: ``3``). @@ -417,13 +414,13 @@ def __init__(self, retries: int = 3) -> None: """ self._retries = retries - def _sleep_seconds(self) -> Optional[float]: + def _sleep_seconds(self) -> float | None: if self._retries < 3: base = 0 if self._retries == 2 else 2 - return base + 2 * random.random() + return base + 2 * random.random() # noqa: S311 return None - def consume_available_retry(self) -> "FiniteRetryStrategy": + def consume_available_retry(self) -> FiniteRetryStrategy: """Allow one fewer retry.""" return type(self)(self._retries - 1) diff --git a/asyncprawcore/util.py b/asyncprawcore/util.py index 9938b82..61bb77a 100644 --- a/asyncprawcore/util.py +++ b/asyncprawcore/util.py @@ -1,5 +1,7 @@ """Provide utility for the asyncprawcore package.""" -from typing import TYPE_CHECKING, Union +from __future__ import annotations + +from typing import TYPE_CHECKING from .exceptions import Forbidden, InsufficientScope, InvalidToken @@ -14,16 +16,14 @@ def authorization_error_class( - response: "ClientResponse", -) -> Union[InvalidToken, Forbidden, InsufficientScope]: + response: ClientResponse, +) -> InvalidToken | (Forbidden | InsufficientScope): """Return an exception instance that maps to the OAuth Error. :param response: The HTTP response containing a www-authenticate error. """ message = response.headers.get("www-authenticate") - if message: - error = message.replace('"', "").rsplit("=", 1)[1] - else: - error = response.status + error: int | str + error = message.replace('"', "").rsplit("=", 1)[1] if message else response.status return _auth_error_mapping[error](response) diff --git a/examples/caching_requestor.py b/examples/caching_requestor.py old mode 100644 new mode 100755 diff --git a/pyproject.toml b/pyproject.toml index a710831..3e8bece 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,60 @@ +[build-system] +build-backend = "flit_core.buildapi" +requires = ["flit_core >=3.4,<4"] + +[project] +authors = [{name = "Joel Payne", email = "lilspazjoekp@gmail.com"}] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Natural Language :: English", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" +] +dependencies = [ + "aiohttp <4", + "yarl" +] +dynamic = ["version", "description"] +keywords = ["praw", "reddit", "api", "async", "asynchronous", "asyncpraw"] +license = {file = "LICENSE.txt"} +maintainers = [ + {name = "Joel Payne", email = "lilspazjoekp@gmail.com"} +] +name = "asyncprawcore" +readme = "README.rst" +requires-python = "~=3.8" + +[project.optional-dependencies] +ci = ["coveralls"] +dev = [ + "packaging", + "asyncprawcore[lint]", + "asyncprawcore[test]" +] +lint = [ + "pre-commit", + "ruff ==0.1.*" +] +test = [ + "mock ==4.*", + "pytest ==7.*", + "pytest-asyncio ==0.18.*", + "pytest-vcr ==1.*", + "urllib3 ==1.*", + "vcrpy ==4.2.1" +] + +[project.urls] +"Issue Tracker" = "https://github.com/praw-dev/asyncprawcore/issues" +"Source Code" = "https://github.com/praw-dev/asyncprawcore" + [tool.black] extend_exclude = '/(\.venv.*)/' line-length = 88 @@ -10,3 +67,73 @@ skip_glob = '.venv*' asyncio_mode = "auto" filterwarnings = "ignore::DeprecationWarning" testpaths = "tests" + +[tool.ruff] +target-version = "py38" +include = [ + "asyncprawcore/*.py" +] +ignore = [ + "A002", # shadowing built-in + "ANN101", # missing type annotation for self in method + "ANN102", # missing type annotation for cls in classmethod + "ANN202", # missing return type for private method + "ANN401", # typing.Any usage + "D203", # 1 blank line required before class docstring + "D213", # Multi-line docstring summary should start at the second line + "E501", # line-length + "PLR0913", # too many arguments + "PLR2004", # Magic value used in comparison, + "S101" # use of assert +] +select = [ + "A", # flake8-builtins + "ANN", # flake8-annotations + "ASYNC", # flake8-async + "ARG", # flake8-unused-arguments + "B", # flake8-bugbear + "BLE", # flake8-blind-except + "C4", # flake8-comprehensions + "D", # pydocstyle + "DTZ", # flake8-datetimez + "E", # pycodestyle errors + "EM", # flake8-errmsg + "ERA", # eradicate + "EXE", # flake8-executable + "F", # pyflakes + "FA", # flake8-future-annotations + "FIX", # flake8-fix me + "FLY", # flynt + "G", # flake8-logging-format + "I", # isort + "INP", # flake8-no-pep420 + "ISC", # flake8-implicit-str-concat + "N", # pep8-naming + "PIE", # flake8-pie + "PGH", # pygrep-hooks + "PL", # Pylint + "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib + "PYI", # flake8-pyi + "Q", # flake8-quotes + "RET", # flake8-return + "RSE", # flake8-raise + "S", # bandit + "SIM", # flake8-simplify + "T10", # flake8-debugger + "T20", # flake8-print + "TCH", # flake8-type-checking + "TD", # flake8-todos + "W", # pycodestyle warnings + "UP" # pyupgrade +] +ignore-init-module-imports = true + +[tool.ruff.flake8-annotations] +allow-star-arg-any = true +mypy-init-return = true +suppress-dummy-args = true +suppress-none-returning = true + +[tool.ruff.per-file-ignores] +"__init__.py" = ["F401"] diff --git a/setup.py b/setup.py deleted file mode 100644 index 40068e5..0000000 --- a/setup.py +++ /dev/null @@ -1,63 +0,0 @@ -"""asyncprawcore setup.py.""" - -from codecs import open -from os import path - -from setuptools import setup - -PACKAGE_NAME = "asyncprawcore" -HERE = path.abspath(path.dirname(__file__)) -with open(path.join(HERE, "README.rst"), encoding="utf-8") as fp: - README = fp.read() -with open(path.join(HERE, PACKAGE_NAME, "const.py"), encoding="utf-8") as fp: - VERSION_LINE = next(line for line in fp.readlines() if "__version__" in line) - VERSION = VERSION_LINE.split("=")[-1].strip().replace('"', "") - -extras = { - "ci": ["coveralls"], - "lint": ["black", "flake8", "isort", "pre-commit", "pydocstyle", "flynt"], - "test": [ - "aiofiles ==23.*", - "mock ==4.*", - "pytest ==7.*", - "pytest-asyncio ==0.18.*", - "pytest-vcr ==1.*", - "urllib3 ==1.*", - "vcrpy ==4.2.1", - "urllib3 ==1.26.*, <2", - ], -} -extras["dev"] = extras["lint"] + extras["test"] - -setup( - name=PACKAGE_NAME, - author="LilSpazJoekp,vikramaditya91", - author_email="lilspazjoekp@gmail.com,vikramaditya91@gmail.com", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Natural Language :: English", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - ], - description="Low-level asynchronous communication layer for Async PRAW 7+.", - extras_require=extras, - install_requires=[ - "aiohttp <4; python_version < '3.12'", - "aiohttp==3.9.0b0; python_version == '3.12'", - "yarl", - ], - python_requires=">=3.8", - keywords="praw reddit api async", - license="Simplified BSD License", - long_description=README, - packages=[PACKAGE_NAME], - url="https://github.com/praw-dev/asyncprawcore", - version=VERSION, -) diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index 368908b..c5868e7 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -4,7 +4,7 @@ import pytest from vcr import VCR -from .utils import ( +from ..utils import ( CustomPersister, CustomSerializer, ensure_environment_variables, diff --git a/tests/integration/files/comment_ids.txt b/tests/integration/files/comment_ids.txt index 9509ed7..4703d31 100644 --- a/tests/integration/files/comment_ids.txt +++ b/tests/integration/files/comment_ids.txt @@ -1 +1 @@ -gxf43y8,gxfq8eb,gxfmdc4,gxfc01r,gxfkyrq,gxfh1lj,gxfnxps,gxf8ob6,gxfdlau,gxfobx5,gxfn2mw,gxf7sp0,gxfd2ce,gxesisg,gxfqxpe,gxf6y58,gxf97ai,gxfowzs,gxfhzci,gxfrzn7,gxfha2d,gxfh3qu,gxfrzym,gxfscal,gxfdxz2,gxfbu4f,gxf4gn4,gxfte82,gxfradg,gxfpphi,gxfrznr,gxffcjt,gxfsl9d,gxfom0d,gxfpphy,gxfnyaf,gxfiic8,gxf7sri,gxfe4bj,gxfezxd,gxfif0w,gxfetda,gxfg1uv,gxfrjdh,gxf9207,gxekg31,gxffiwh,gxfhzea,gxf8upg,gxfjkai,gxfcprv,gxfmq2m,gxf7utc,gxfp091,gxf911i,gxfhzez,gxf7g5o,gxf38gd,gxf8pd9,gxftea9,gxfk39v,gxfns0l,gxf6x7a,gxfq8ig,gxem10c,gxfomk1,gxf7mhr,gxfht41,gxfbu79,gxfnjht,gxf8271,gxf8ofl,gxetr5g,gxfql6e,gxfnyd5,gxf3xrx,gxf9135,gxfa9c2,gxfb9zq,gxfp6mj,gxfmwgd,gxfq28e,gxfn2rz,gxfjqoi,gxfj7pv,gxf7g7p,gxfk9ng,gxfsvdq,gxf85i7,gxft80y,gxfn2sn,gxfnyeg,gxfq8kp,gxf2pkb,gxftecy,gxfl59v,gxerh11,gxfted4,gxfbu9o,gxffpbx,gxfqbl7,gxfnls4,gxf7sw5,gxfetqh,gxfp2af,gxfoy2q,gxfdlhv,gxfob32,gxfm78g,gxfeymw,gxfn2ud,gxfnyga,gxfjeyv,gxfgxf6,gxfk3e6,gxfd3a6,gxfeh4h,gxfppob,gxftef0,gxfgenx,gxf681u,gxf6edf,gxf681w,gxfqqch,gxffcqy,gxfr49b,gxfs1r7,gxflbo6,gxfrn8j,gxfs67d,gxf85m2,gxf8bxq,gxfiv73,gxf8bxv,gxfksqc,gxfk3g5,gxfo4ty,gxfm7ax,gxfk3gb,gxfb533,gxfeni8,gxftegx,gxfont1,gxfli12,gxfs688,gxfl0x8,gxfoiag,gxfje6v,gxe7a8p,gxeu3yy,gxfq2e4,gxfpyyt,gxfnfl1,gxfhacm,gxfq2eh,gxfn2y2,gxfq5af,gxf919p,gxfrnam,gxfngda,gxfd8za,gxfnc5l,gxfetvf,gxfsvk0,gxfc729,gxfp6tf,gxfgero,gxfmqbp,gxf8ibv,gxfk9u4,gxfam6l,gxfiimm,gxf6xg2,gxfioyb,gxfm11w,gxftkuv,gxfbuft,gxfp0ii,gxftkv0,gxfnfml,gxfqfty,gxfcq20,gxfgt8c,gxf686k,gxf6xgu,gxfnlyp,gxfg8he,gxf8icz,gxfqlfb,gxf73sq,gxfmqd7,gxfbvia,gxfpji7,gxfmwow,gxf7zep,gxfqf42,gxfohl3,gxf3fsc,gxf8idm,gxf7zf2,gxfmwpd,gxf5p8y,gxfe4nn,gxf93qo,gxfmwpl,gxfpzlw,gxf1hjz,gxfkg80,gxfi61v,gxf73tx,gxfmqef,gxenm7e,gxf3lez,gxfp0ks,gxf9kbx,gxf6r77,gxfqf5k,gxfrtq2,gxfpw70,gxfjxa5,gxfppvj,gxfam9t,gxf56bm,gxfli6b,gxfq8uc,gxfsqqu,gxfiipy,gxfa9mw,gxfqrt5,gxfn6wn,gxfama4,gxffcy9,gxf91ea,gxfsvab,gxf9e1o,gxewqxv,gxfba4x,gxf7t60,gxf9x0s,gxfgl7z,gxfnype,gxfrx3o,gxfqfh4,gxfr4hl,gxftkzg,gxfr4hr,gxfs60b,gxfq8w5,gxfqf7r,gxfdfgq,gxfpogn,gxf7mvh,gxfovtw,gxfhtht,gxf85ua,gxfsj2s,gxf8v4n,gxficgx,gxfd95u,gxffl0b,gxfq2lg,gxfka05,gxfrtt4,gxf1uay,gxey5kb,gxfn35a,gxfn35c,gxfboab,gxfmwtw,gxfteph,gxesjaw,gxfaz0b,gxfrtto,gxf7mwx,gxeuzt1,gxfrnii,gxfqf9p,gxfcjww,gxf44ib,gxewedw,gxf8ij9,gxfhzvd,gxfhtju,gxfeb4v,gxfqccr,gxevbzv,gxftl2h,gxfn9ij,gxfmwvl,gxfnm5z,gxfnm63,gxfs070,gxfmwvz,gxfaz29,gxfehhe,gxfo8uu,gxfq2o6,gxfohs7,gxfn9jd,gxeru30,gxfqgx9,gxfnfv6,gxfrq83,gxevvh0,gxf9e6v,gxfmdy2,gxfentn,gxfq90g,gxfp737,gxfoxq8,gxfpq1x,gxfbodi,gxffw2v,gxfnsj3,gxei6gg,gxfnyup,gxfm1bn,gxfq088,gxflp7j,gxfr4n0,gxfnsjh,gxftetd,gxfmkav,gxea4v6,gxfenv4,gxfo579,gxfo57b,gxf8va5,gxfa9um,gxfg2fz,gxfip9e,gxfqfdy,gxfm7oo,gxfm7op,gxfnywa,gxfmkbx,gxfrzln,gxf8oz5,gxfqetv,gxfbbsl,gxelvau,gxfk3uh,gxfqgxr,gxfbu6t,gxft280,gxf5cw1,gxfmkcm,gxfq93e,gxfq93h,gxf7zpr,gxftevk,gxf68ib,gxfi6ca,gxfq2sb,gxfqffi,gxfg8te,gxf6xt0,gxf6xt2,gxfqcgh,gxfmvd3,gxfnfzi,gxfpjua,gxfrb1x,gxfj1yu,gxfq273,gxf9362,gxfn3cw,gxfn3d1,gxfn3d4,gxf745m,gxfs97m,gxfp782,gxfrnpw,gxfeuag,gxec65k,gxf8cf4,gxfmqqq,gxf7tgk,gxffd9h,gxfq2ue,gxf8vss,gxfpjvu,gxfjran,gxf7n5e,gxeaghh,gxfi03e,gxfp0xq,gxfij27,gxfpdkw,gxflv5v,gxfliis,gxfc7ig,gxfnmdl,gxfopqv,gxfbuvg,gxfehou,gxf4fo8,gxfipeb,gxf7n6d,gxf8655,gxfpmen,gxfsjdp,gxfk3z5,gxfp7aa,gxfqgyj,gxfmkh1,gxfrn3l,gxfme5p,gxf50dq,gxfn3g0,gxfproe,gxf3ltm,gxfow2n,gxflvka,gxfipfi,gxfrq9h,gxf0mdc,gxfs74b,gxfeo1w,gxfm1jb,gxfn3go,gxf7n7u,gxfouob,gxfpdn0,gxficst,gxfc7kg,gxfrnte,gxfsyih,gxfq2xn,gxfq0vw,gxfkmzk,gxfq2xt,gxf9fty,gxftf1l,gxfojfr,gxf5d2l,gxfn3hv,gxfmqut,gxfm7w6,gxfi06w,gxfr2sn,gxfsw3m,gxfi0qm,gxf6rnv,gxftf2l,gxfpzmh,gxfmx75,gxfn9ue,gxfi07u,gxftlek,gxf5jfj,gxfpqcg,gxfjeso,gxfmqwa,gxf91va,gxf91vb,gxfs0jh,gxfhaym,gxfazeo,gxfhtxg,gxfmea6,gxftknh,gxfeo5u,gxfipjn,gxf5jh4,gxevc27,gxeoc0s,gxf7tni,gxfbc2n,gxfp7fk,gxf9yt7,gxfrbac,gxfr4z0,gxfr33x,gxf7zzl,gxftjqt,gxfckcc,gxfn3lv,gxfqsck,gxfox5i,gxftf5z,gxfk45k,gxfeo7d,gxfpqff,gxfmxam,gxfss7s,gxfrbbo,gxftb6i,gxec1lq,gxflcf3,gxflvdu,gxf8pb7,gxfscff,gxfpqg5,gxfivxj,gxfamug,gxfp161,gxfijai,gxf6y41,gxfcqpe,gxfmed0,gxfn3n9,gxffdiu,gxfq33u,gxf8qkq,gxfkzsu,gxf1ohu,gxffq6c,gxfkthq,gxfp2fh,gxfe5h4,gxfpwsz,gxfq9g5,gxfn3o7,gxf8vo9,gxf802k,gxfi0d9,gxfeula,gxfeo9t,gxfspya,gxffwiv,gxf39ex,gxeprwy,gxfm6lv,gxfrtgo,gxfq9gy,gxfmxdf,gxfoi9g,gxf82cp,gxfehz2,gxfeoao,gxf216q,gxftkob,gxflvgm,gxfjxxj,gxfklkg,gxfdz0z,gxfm1sl,gxfo5nc,gxftfa2,gxfbouz,gxffdlo,gxfrpig,gxfk49q,gxfpe11,gxfkgwz,gxfnzc5,gxfobza,gxfbc87,gxfmp3w,gxff0yz,gxfg2wc,gxfh4tp,gxfouy6,gxf7nhs,gxfnzci,gxft8g5,gxfnmph,gxf922h,gxf5pyy,gxfpqkd,gxffjy6,gxfamyq,gxfipqg,gxf4bex,gxf74ju,gxfq9y2,gxfp1at,gxfq9jq,gxf4bfc,gxfr55m,gxfeuou,gxfn4x1,gxesjxo,gxfrugd,gxfjrou,gxfjjc8,gxfp1bn,gxfoiy0,gxfbcae,gxf5ddj,gxfl69o,gxfnnvu,gxfpwxq,gxfmr5x,gxf5de2,gxfmxhn,gxf8phr,gxfl36g,gxf6yah,gxforfm,gxfnt49,gxfp1d9,gxfknce,gxfd9v3,gxfk4dt,gxfmr76,gxfjy2g,gxfiptm,gxfgfng,gxfg30d,gxf8mpw,gxf9xrz,gxfn3up,gxfr2s9,gxf8pj9,gxf339i,gxfm896,gxfijij,gxfn3v6,gxfs0us,gxfnzh2,gxfhu8n,gxfqfyx,gxfkla2,gxfijj2,gxfjrs2,gxfr35n,gxfq9no,gxf7nmt,gxf8pk7,gxfpe24,gxf5dgt,gxf80a6,gxfmxkh,gxfq9o5,gxfpe2g,gxf83cu,gxfan3w,gxfjrsu,gxfn3wf,gxf8pkz,gxfnimu,gxfgm12,gxf8j9m,gxf7rcy,gxf86mm,gxf7tyl,gxf98k3,gxfp1g4,gxfg32u,gxfp1g7,gxfmkyg,gxf4xnz,gxfsrtr,gxf8vxg,gxfefb3,gxfngks,gxevd7x,gxfnt7y,gxfi6ya,gxfnzjp,gxfnmwo,gxfqasz,gxfp1bw,gxftfg5,gxfnmwx,gxfow5n,gxfd9z9,gxfqmdj,gxfgm2y,gxfd9zg,gxfn3ym,gxfpe4w,gxfnmxh,gxfi6zb,gxfjsun,gxfidb3,gxfqg2v,gxf4bmw,gxfatii,gxfn3zf,gxftgny,gxfr0cv,gxf6ygr,gxfq9rw,gxftfk2,gxf6xbf,gxfdgck,gxfqb7t,gxfiyb0,gxfijnw,gxf85kd,gxfan80,gxfgm0z,gxfov84,gxft832,gxfda1n,gxf697g,gxf33fi,gxfrodb,gxfeom8,gxfbp5y,gxfow64,gxfcr3g,gxfp7vy,gxfqg4v,gxfqi43,gxf3mes,gxfntqb,gxfmrek,gxfnmve,gxfml32,gxfmtdh,gxf8w1t,gxfiq0y,gxf6yiu,gxfeuyw,gxf698p,gxf4bpo,gxevdcd,gxfngpa,gxf6yj3,gxfq3ip,gxfi72s,gxfo5zp,gxfnn12,gxffdy1,gxfpnkf,gxfkvui,gxfqcuo,gxfl6jm,gxfra5q,gxfovad,gxfbckm,gxfl087,gxfknl4,gxfmxrd,gxfn42y,gxfp0e5,gxf6s8g,gxf4bqq,gxf6yk7,gxffwxk,gxffwxm,gxfoinw,gxf2x6l,gxfp1mn,gxfp1mp,gxe8waq,gxfqg78,gxf6fly,gxfn43u,gxfqmiz,gxfohfm,gxf45g7,gxfn4xh,gxf8psq,gxf45gc,gxf8h68,gxeq3s2,gxf6s9x,gxfpx9i,gxfpilg,gxfq3l8,gxfktyo,gxfl6lt,gxfn44z,gxfoipg,gxfazzq,gxf69bv,gxfsqch,gxft9ds,gxfmri9,gxfhbk4,gxftfph,gxfml6v,gxfmrij,gxfqg9a,gxf6lzl,gxf8puf,gxf7hll,gxfpxay,gxfp80r,gxfbpb1,gxfl0bi,gxfckwv,gxfngtd,gxfk4pu,gxfmrjb,gxftfqg,gxfngtl,gxfgjy5,gxf48fc,gxez8jf,gxf5ds5,gxffkee,gxfo7yv,gxfpxcc,gxfq9zl,gxfcxlg,gxfq9zp,gxfq1ac,gxftfrv,gxf9li7,gxfq5i3,gxftfs6,gxfskxz,gxfda98,gxfml9q,gxf92jz,gxeo6cw,gxfdt87,gxfswu0,gxfbj22,gxfh74v,gxfnaki,gxfqa10,gxfqa11,gxfp1s9,gxfjyh6,gxfknrk,gxetyzd,gxfm8nv,gxfovh8,gxftftq,gxf69gf,gxfovhc,gxfsqjl,gxfg3fp,gxfqk9d,gxfidm5,gxfpqrh,gxfovhy,gxf8jne,gxf8dbv,gxfpqe0,gxfovi7,gxfb05i,gxfev7v,gxfnn9t,gxfrono,gxfeowl,gxfop7a,gxfmi7d,gxff7vj,gxfdgo1,gxfjfl0,gxfmrol,gxfrpcs,gxfmf1m,gxfjyjv,gxfngz7,gxfn4c4,gxfb1x0,gxf6wbj,gxfth3j,gxfqf05,gxfiwn4,gxf8q0y,gxfop8j,gxfn4ck,gxf3t1i,gxfngzr,gxf80qw,gxfkngs,gxf9fbe,gxfn4cr,gxfngzw,gxfjyku,gxfsqmp,gxfqa50,gxf8jpx,gxfnnbq,gxfhgmx,gxff1lm,gxfjs9o,gxfqggt,gxfoixv,gxfnzza,gxfnnc8,gxfqa5n,gxfnzzg,gxf80rx,gxfqbul,gxei7ld,gxfhi44,gxfqt4n,gxffzys,gxfl0jm,gxf8wed,gxftfyf,gxfk4y2,gxfn4ek,gxf6fx4,gxfk4yh,gxfn4ey,gxfqb0q,gxfp1y5,gxfl0ki,gxfn4fb,gxf5wyw,gxfovmx,gxesqwa,gxfs7qj,gxfsugi,gxfp2k3,gxfh5iu,gxf4c3b,gxeau60,gxfc27v,gxfqgjg,gxfkldh,gxfc282,gxf3zgj,gxfqa85,gxfta5m,gxfk500,gxff80h,gxff80u,gxf92sh,gxfmf6r,gxfnask,gxfqmw5,gxfo02u,gxfmrtz,gxf759l,gxfbvxq,gxf9vst,gxel0ts,gxfn4hh,gxf8whk,gxf877g,gxf3mv1,gxfpxmn,gxfpxmq,gxfrwpx,gxfqaa3,gxfmy6l,gxfnwq5,gxf8jv4,gxfpeoh,gxfptjx,gxfn51f,gxfn4if,gxfprbt,gxfbd0a,gxfj9gb,gxfo6fx,gxfj9gf,gxfnaua,gxfk52f,gxfk52g,gxf57sa,gxfesl6,gxfpepb,gxf7hyp,gxfh5ma,gxfp1k6,gxfab3t,gxft9s0,gxfqabl,gxfn4jp,gxewfre,gxf92vi,gxf51hr,gxfp236,gxflpzn,gxfk53p,gxfqac7,gxf7bo9,gxfqf1h,gxfthqj,gxfr5yc,gxfrili,gxftg4n,gxfeqp3,gxffxf0,gxfo3te,gxfh5ny,gxfoj5d,gxfmrxy,gxfmry4,gxf4v7k,gxfn4li,gxfdgxz,gxfp8gk,gxfbpqn,gxf7uog,gxfq429,gxf6xht,gxfeu2b,gxfskk7,gxfdna2,gxfoj6j,gxfo6jj,gxf69sw,gxfidyc,gxf8jz9,gxf8jzb,gxfpesq,gxfpn16,gxfn4mr,gxfinvi,gxfiqly,gxf4hzd,gxfqaey,gxfl73w,gxf8qbi,gxftjr2,gxfjsjt,gxfms0a,gxfrj36,gxfs45p,gxfsqxf,gxfnnmd,gxfhc2f,gxfg3tk,gxfnhax,gxfo09m,gxfqafw,gxfo09t,gxfie03,gxf4vag,gxf8qcp,gxfn4ob,gxfqagc,gxfpxtg,gxfpmm6,gxfmlpz,gxf8dq3,gxf6z5q,gxflwfz,gxfn4ox,gxfsqyq,gxfkuiw,gxfowa4,gxf8g7r,gxfd4ek,gxfpril,gxfqb1d,gxfdtoz,gxfm93v,gxft9ya,gxfk59h,gxfmyef,gxfeizt,gxfmyej,gxf9ynh,gxfoye5,gxex583,gxfjsmt,gxf462e,gxfp275,gxfg3wb,gxfnnp9,gxfrp33,gxfnhds,gxfjrxc,gxf8k3m,gxfmls3,gxfjyyt,gxfk5ae,gxffr9n,gxfms3x,gxfn4r4,gxfojbl,gxfie36,gxfluq6,gxf8qfq,gxf9yon,gxfn4rc,gxfe02j,gxfskpp,gxfmyfz,gxf8k4g,gxfskpu,gxftgbn,gxfn4ro,gxf8qg5,gxfqn6y,gxfhr8n,gxffxm4,gxfbpwu,gxfjyzz,gxf8z6w,gxfod16,gxfms58,gxfr6gw,gxf8wso,gxfrci1,gxfmyh7,gxfqakv,gxfoxco,gxf9yqb,gxfmyhh,gxfie52,gxfgaai,gxfkbob,gxfms69,gxfiqsl,gxfow12,gxf465j,gxfdh63,gxfk7qq,gxfr8kz,gxfk6ou,gxf7uwo,gxf8d2s,gxfrp6i,gxf7uwr,gxfnb5o,gxfq9th,gxeyq83,gxef8li,gxf8qiy,gxfms7h,gxf6zbi,gxfqbhu,gxfn7ov,gxfq1cp,gxfms7r,gxfqamx,gxfp2e3,gxfkod8,gxfp8pp,gxftgf2,gxfj4rp,gxfki1s,gxel7j9,gxfnhie,gxfn4vb,gxfqnak,gxfq4bz,gxfrap4,gxfikj6,gxf7oms,gxfljzp,gxffxq0,gxeu5x7,gxfauf0,gxfldoe,gxfnb7n,gxfkoed,gxfjmh3,gxfrncc,gxf4cju,gxfngoy,gxf2xzm,gxfp2fr,gxf3gym,gxfo0in,gxf8qlc,gxeqtut,gxflwo6,gxfja1o,gxf8ka2,gxfmsa7,gxeuv8w,gxfmsad,gxf8pqh,gxfn4xm,gxfpy2j,gxfsnnf,gxf6a4f,gxfq4e9,gxey7cz,gxf7v0m,gxfmfns,gxfmsaz,gxfg43z,gxf9yvk,gxfmymp,gxfnhli,gxfk5i1,gxfqaqj,gxfd4nw,gxfj9we,gxfnhlu,gxf0nvo,gxf5r6t,gxfs1ye,gxfp2i0,gxfmsbw,gxff8j4,gxfn4za,gxfqarc,gxf7u50,gxfbdh7,gxfk5j1,gxfp2iq,gxf8x4b,gxfskxx,gxf7v2f,gxfplhk,gxfojk9,gxfqh3e,gxf7v2j,gxfiebw,gxfmyof,gxfo6xc,gxfk5jn,gxeu61g,gxf8qol,gxfnhna,gxf7c4c,gxfprtr,gxf70nb,gxfnhnw,gxfq9ul,gxf7v3n,gxf4vn8,gxfsrav,gxfqmw6,gxeuznu,gxfmse6,gxf6zi9,gxfl16r,gxfh64m,gxfqh53,gxfk5l4,gxfp2l1,gxfqawp,gxfmja5,gxekv36,gxfcq35,gxfl7je,gxfp4rr,gxf75v0,gxf8kfl,gxfrqj7,gxfgn79,gxemsmu,gxfmyrc,gxf4j21,gxfl18a,gxfe6po,gxfpf99,gxf93em,gxftabj,gxf6zk0,gxfnbet,gxf7tak,gxfsl35,gxfswlo,gxet47e,gxfclu3,gxffez0,gxfn53k,gxfqavn,gxfnbfa,gxf7t3t,gxf6zkp,gxf8qsa,gxfbdlo,gxevee6,gxfsxpb,gxfswog,gxflqjn,gxf8r6j,gxfr06d,gxfe6qv,gxflqjv,gxfjlo2,gxfm9im,gxfr7kt,gxf5epe,gxfmshi,gxfnbg7,gxfir3s,gxfkomx,gxf2gbj,gxfsm6m,gxf81j2,gxfnbgf,gxfd4u9,gxftgoz,gxfs24l,gxfnbgo,gxf6wgc,gxfgun6,gxfmsi7,gxfsl3m,gxfhter,gxfn55h,gxfmsie,gxfrvtb,gxfa5ek,gxfq4m9,gxf6aco,gxffrox,gxff8pf,gxf7v90,gxft666,gxfganr,gxf7im3,gxfcyke,gxfqnlr,gxf9n6d,gxfqayq,gxfbqbn,gxekikn,gxfoweg,gxfs26i,gxf5wn6,gxfi1w1,gxf8qvn,gxez9js,gxf6zoj,gxfowf8,gxf93j9,gxfowfh,gxfl1da,gxf4j73,gxfnuia,gxfd4xk,gxfjt4q,gxfn58d,gxfpzcl,gxfo0ue,gxfsmg7,gxfsz03,gxf4cwe,gxfr3dv,gxffrro,gxf7vbt,gxfoyhb,gxfqd7o,gxfk5sv,gxfepuo,gxfo76p,gxfsxuq,gxfsl7p,gxf7p0n,gxf8x9m,gxfp2sr,gxfjgj0,gxfrvxq,gxfn67x,gxfnblc,gxfnhwx,gxf8kmr,gxftgty,gxfepvb,gxf7ce4,gxfl7r1,gxf8ti3,gxfps3q,gxfepvv,gxfscoy,gxfg4gf,gxfnbma,gxfn5aw,gxf8qzd,gxf5evu,gxf57dm,gxfjt7l,gxfn5b7,gxfbuiu,gxelx9i,gxfl7s7,gxfnhyg,gxfcsdn,gxfn5bh,gxf3b1r,gxf6aia,gxf8xbo,gxfirav,gxfmsoo,gxft48p,gxfff7i,gxffrun,gxfb7i9,gxfo0xu,gxfrarv,gxfpoty,gxfjt8m,gxfnbnr,gxfmz0p,gxfslai,gxffrv0,gxfojwt,gxfejm6,gxf4vyo,gxfqc97,gxfkv6d,gxf5rko,gxfhvq4,gxfpluq,gxfp2w4,gxfirc6,gxf4jc8,gxelecs,gxfedbj,gxfbk6r,gxfnuno,gxfircl,gxf5xx5,gxfn5dp,gxfs2de,gxf4w04,gxfqb5x,gxfo0zq,gxfpjwf,gxfni15,gxfni18,gxfps7h,gxfk5xr,gxfsl4z,gxfq1si,gxfqc0q,gxfowm7,gxfojz5,gxfpyjm,gxfgtus,gxfpyjs,gxevl0r,gxfqd2q,gxfmz3k,gxfjzn5,gxfowms,gxfmz3v,gxfp2yk,gxf8egt,gxfoyid,gxfeq0x,gxfhyq3,gxfp7hf,gxfa5os,gxf93ri,gxf6xk3,gxfn5gd,gxf40gx,gxfqb8k,gxfp2zq,gxf34vb,gxfslf1,gxferwd,gxfq6mv,gxfqf6w,gxf1wcz,gxfiet0,gxfosjh,gxfn5h5,gxfrf0f,gxfok1t,gxfg4n9,gxfqg8x,gxfg4nc,gxfs2ha,gxfn8cd,gxfmz6c,gxfni52,gxf8u1l,gxfp314,gxfl6mc,gxf7zhr,gxfo7fi,gxfnusg,gxfrpuq,gxfpouz,gxf8xie,gxfkp0p,gxfgtyi,gxfmmjw,gxfmsvh,gxfp9da,gxf9ghb,gxf93uc,gxfoqey,gxfmg8v,gxfr0le,gxf57ez,gxfni6c,gxfqu9y,gxfpyo7,gxfqnyg,gxfhcy1,gxfsf65,gxeqo5r,gxf8r81,gxf4pua,gxfj45w,gxfr5ji,gxfoqft,gxfni6y,gxfn5jv,gxf64f3,gxfowrm,gxf8h3v,gxf8gcx,gxfslrz,gxfsy5o,gxfnuul,gxfnoj6,gxfrpx4,gxf9gje,gxfjn5n,gxflr0c,gxfnojh,gxfeuxs,gxfixvm,gxfn5l0,gxf8r9l,gxfmz9p,gxf7026,gxfeq6n,gxfso3d,gxfghec,gxfmmmt,gxf8ra1,gxfmmn0,gxf6h3x,gxffyg0,gxfnbxd,gxfnuw3,gxfk65g,gxf7j1j,gxfi8mh,gxfslka,gxfdulr,gxfowtz,gxf64hl,gxfqhq3,gxf703n,gxfpobu,gxfok7a,gxerv1d,gxfqc24,gxfq53h,gxfjn7z,gxfq53k,gxf34mw,gxffs5v,gxflr2s,gxfhqby,gxfkp5p,gxfn5ni,gxf6au7,gxfq545,gxfk9zl,gxeb81a,gxf7cs4,gxfeq9i,gxfqprd,gxfmmpl,gxfowvu,gxfk2m7,gxf822k,gxfqbgg,gxfmvr4,gxf5lky,gxfpfut,gxfnc06,gxflr47,gxfp37t,gxfi2dm,gxffyj4,gxf9ac1,gxfpytu,gxfqbgz,gxfo7mc,gxfbqtx,gxfo1av,gxfth94,gxf9zmi,gxfbe71,gxfh6sg,gxfoxi3,gxfma3p,gxfslnt,gxfiy0i,gxf941h,gxf4ddi,gxfif21,gxftha2,gxfewn1,gxfrdfi,gxfmt33,gxfcz41,gxf7vsz,gxfhps4,gxf2w81,gxf3556,gxf8rf0,gxf29ji,gxf8rf4,gxfgb82,gxerhcz,gxfkp92,gxfr74o,gxfohtd,gxfjy9t,gxfrq3m,gxfc3j7,gxf6nl0,gxfaoyu,gxfqbjb,gxfn5rd,gxfpskr,gxf9431,gxfqf2b,gxfjnvs,gxfn5rn,gxekph3,gxfg4es,gxf4q2i,gxfflyz,gxf473w,gxfowzi,gxf7pj3,gxf3bic,gxf8rgo,gxfnoqy,gxf88ib,gxfap08,gxfnift,gxfqafs,gxfqbks,gxf8rh9,gxfsye7,gxfslr5,gxfplt4,gxfslrf,gxfqble,gxfnos3,gxfd5iw,gxfrdix,gxfjtq2,gxf7pks,gxfbqym,gxf40u7,gxftb28,gxfpxcb,gxfk6dh,gxfmctd,gxfo1ft,gxfnv4a,gxfqo6c,gxfn8f7,gxfqana,gxfek49,gxfoe3h,gxfq5b4,gxfniht,gxf946a,gxfoqqt,gxf7vxi,gxfbkob,gxfk031,gxf8l7z,gxf3blc,gxell6d,gxfpg1j,gxffbzw,gxf594t,gxfjssy,gxfr445,gxfma9u,gxfniir,gxf8xvo,gxfoe4o,gxfpz0p,gxfpg22,gxfp3ez,gxfnij0,gxfi8wi,gxf7vyt,gxfqbod,gxfoe5a,gxfjtsv,gxfo1i8,gxfbwq8,gxf88ma,gxfb1rb,gxf6u20,gxfll0r,gxfthgs,gxfsnbx,gxfpjph,gxf7vzp,gxfqa0n,gxfn5x6,gxftgq9,gxfap4s,gxfpz2c,gxff9hj,gxfjtu1,gxfe0fi,gxfmmz4,gxfaci9,gxfp4wz,gxfoe6t,gxfslw6,gxf82c8,gxfavh6,gxf2z18,gxfmtb2,gxfo1k2,gxfs2xv,gxfp9t0,gxfslwl,gxfrdnq,gxfe6ws,gxf7ppo,gxfhwbx,gxfb84v,gxfjtv6,gxfqbqs,gxfox6d,gxfp3hy,gxfmtp0,gxfk6im,gxfrwn3,gxf47b5,gxfavia,gxfqoeb,gxft8xz,gxfnime,gxfifbd,gxfiryk,gxf76rx,gxfo1la,gxeqolt,gxfnimq,gxf4g3n,gxfmzo6,gxfca3d,gxfspga,gxf9zxd,gxftb8l,gxfjay4,gxeifji,gxekjeb,gxf8f1x,gxf2z3q,gxf70hm,gxfravz,gxfpz5s,gxfpyff,gxfifd0,gxfox8m,gxfoj33,gxfmn2h,gxf4wnf,gxfk6ku,gxfifdf,gxfoqxg,gxfslzq,gxf8rpz,gxfk6l5,gxfflhr,gxfo7z3,gxfn61x,gxf4dpi,gxfmzqi,gxfpzad,gxfqbu8,gxfhq41,gxejb77,gxf8y2c,gxf8rqt,gxf8rr1,gxfoxa7,gxfnvcw,gxfpjor,gxfleva,gxf4wp5,gxfoqyy,gxfqoi4,gxftgbb,gxfmtg0,gxfqbv5,gxfrwr6,gxf8lg7,gxfo1p5,gxfqbvi,gxfsm1s,gxfsm1t,gxf64yv,gxf669z,gxfthnx,gxf94fk,gxfrk4y,gxfmzsj,gxfgblg,gxffyye,gxfsypk,gxfavnd,gxfrj2f,gxfp9z2,gxfo1qb,gxfm3dt,gxfqi89,gxfk0ct,gxfsm33,gxfju1e,gxf6bbn,gxf1xas,gxfmzti,gxfnvfb,gxfl8m0,gxfi95l,gxfbemy,gxf7w7x,gxf7w7y,gxf82jj,gxeqhly,gxf650m,gxfnch3,gxfbrag,gxfmnek,gxfs358,gxftk9m,gxf82jz,gxf47ht,gxfqfye,gxfmtiv,gxfokqg,gxfq2nz,gxfsyrg,gxf9h4w,gxfsyrm,gxfovpz,gxfdc7a,gxfgoav,gxf7w97,gxfqbym,gxf35lb,gxfs0se,gxfnitt,gxfdc7n,gxfoefo,gxf8b72,gxfnity,gxf88wq,gxf47j1,gxfo84e,gxfniu7,gxf534y,gxfitej,gxfniuc,gxfapew,gxfthrd,gxfrqjx,gxfsm5q,gxfhq9c,gxfniut,gxf70os,gxfjb5p,gxepmwu,gxfmam7,gxfjhhc,gxfo85d,gxflxza,gxfncjs,gxf653d,gxfoq7r,gxftizm,gxfnivi,gxfthsi,gxfor4k,gxf2zbt,gxfh10a,gxfppm1,gxfhwm5,gxfapgi,gxf8y8z,gxfrrho,gxfrdye,gxf94pd,gxf4wvj,gxewnsg,gxfkou6,gxf8rxy,gxfsm81,gxf6hs2,gxfb24j,gxf59na,gxf9gap,gxfbers,gxfs39l,gxfrpt3,gxfjhjg,gxfrg76,gxfn6a6,gxfo87j,gxf8ln7,gxftbit,gxfoxhy,gxf8ryw,gxfqie1,gxfk6u3,gxflqrq,gxfs9lz,gxfbeso,gxfowon,gxfo88f,gxfkptf,gxfoxit,gxfkw55,gxf8rzx,gxftbjy,gxfniyr,gxfmaq1,gxf3op7,gxfqc3w,gxfqb4d,gxfrkcx,gxf7wes,gxfncnr,gxf7q3e,gxfrx0c,gxf7q3h,gxf70td,gxfqge3,gxfnco5,gxftcos,gxfczqi,gxfbbqf,gxf5skv,gxfqos1,gxf71xa,gxfkpvb,gxevym2,gxf8s1n,gxfncos,gxfpmv2,gxf70u7,gxft12m,gxfp6vt,gxfeebr,gxfqz70,gxfg5jf,gxeu7f5,gxfsmc2,gxfqc5w,gxfpa8l,gxfncpi,gxfpmvt,gxe9hjv,gxfqiho,gxfd63i,gxfs3dt,gxfn6ec,gxfqgee,gxf9x69,gxfqc6h,gxfifqk,gxfmnfx,gxfmqlv,gxfqe17,gxfpzjy,gxft0bu,gxf5sn6,gxfbrk6,gxf65af,gxfhwso,gxfmatm,gxfqx6r,gxfoxn4,gxfgi8h,gxfqc7n,gxfo8d0,gxfbrkq,gxfbrkr,gxfbrks,gxfoeot,gxf7win,gxfo21y,gxf8s4p,gxeoocd,gxfkpyr,gxfbl9z,gxf59q0,gxfim4a,gxfbrlq,gxe6mc5,gxfmtts,gxfmttw,gxfkwaz,gxfn6h8,gxfnj4e,gxfqc9i,gxf6bo9,gxekir3,gxfswjj,gxfk71a,gxfs3hb,gxf2zkz,gxfkdd1,gxf41if,gxfti22,gxfe84r,gxf70z1,gxflrxr,gxfn06o,gxf8lv7,gxfqcac,gxfqjku,gxfi37d,gxfqgf3,gxfsmgu,gxfkdds,gxf7wle,gxfkjpi,gxfoxqf,gxfqimj,gxfft1o,gxf7jyp,gxfr1le,gxfjbh0,gxfl90a,gxfoxr4,gxfgc0y,gxfowsb,gxfnj6z,gxerxf1,gxfcnam,gxf9hin,gxf5g4w,gxfiyuu,gxf6upj,gxfgv09,gxedcsc,gxfjo5d,gxfnj7q,gxfqa90,gxfqvbe,gxfisjv,gxforgx,gxf4e8k,gxf7120,gxfk74s,gxfrx9a,gxfq1ol,gxf8s9v,gxf94x0,gxf65gl,gxfs56m,gxfncx9,gxewxgd,gxfoxtd,gxfeyes,gxfoxtp,gxfer7m,gxfqcei,gxfbyyg,gxetidy,gxfmtzr,gxfqvdk,gxfism1,gxfsml7,gxfp464,gxfb8t9,gxfqcf3,gxfqcf4,gxfmu04,gxfncyv,gxf3620,gxfpug4,gxfmu0d,gxfncz6,gxfq4zo,gxfiyye,gxfi3co,gxfsanp,gxfn3ai,gxfkdj6,gxfiyyu,gxf8scn,gxf4808,gxfn6o9,gxe9570,gxfteul,gxfl95d,gxfmhea,gxf8sd0,gxfctqt,gxf6fus,gxf8sd7,gxfhx2b,gxfo2av,gxfpn6w,gxfe8bt,gxfn6pb,gxf7qgg,gxfqa4o,gxfbf76,gxfcng5,gxfnjcm,gxforlk,gxfn6pm,gxfisoz,gxferb9,gxefah6,gxfcngt,gxfi9qm,gxfqci7,gxfo2c3,gxf5dxq,gxf2we1,gxfnw0t,gxf8sf4,gxf6vo0,gxf717q,gxfg5wo,gxf835a,gxfq67l,gxfo2d1,gxf835j,gxfnvr3,gxfs8kh,gxfqp6m,gxf5a0v,gxf7q80,gxf8sg3,gxfb8xz,gxfp4ax,gxfolem,gxflpsn,gxf4efg,gxeolji,gxfhsml,gxfk103,gxfo2dz,gxel950,gxf9zux,gxfi122,gxf9o2m,gxf9540,gxf81tc,gxfp05u,gxfqw9n,gxf4961,gxfawbs,gxfadd6,gxftict,gxfnw33,gxf484z,gxf4xf8,gxfimgl,gxfnnji,gxftid6,gxfoqhb,gxfmm2r,gxfqikr,gxfn6tg,gxeys7b,gxeisng,gxfnjgr,gxf7dxp,gxfjuq7,gxfctw1,gxf4ksy,gxfmnv8,gxfqixi,gxfimhj,gxfi3ix,gxfctwe,gxfmb8m,gxfmu7i,gxfsmsw,gxfnw4x,gxf5zea,gxf7b1g,gxfawdw,gxflsai,gxf486z,gxfe8ho,gxfk7el,gxfbfcu,gxffn2a,gxfq33q,gxfjurs,gxf4uzw,gxfowsp,gxf3ix9,gxfc25p,gxf8sk1,gxfsllz,gxf8t7y,gxfnpue,gxelquw,gxfnw66,gxfcnms,gxerrfp,gxf83ae,gxftig8,gxfrvau,gxfr8a6,gxf8skz,gxf89md,gxf6v1z,gxfp1x0,gxfr1z2,gxf958l,gxfqdbr,gxfjxk2,gxfqb7y,gxf8yxi,gxf5i0w,gxftihq,gxfp411,gxf60pr,gxfmnz5,gxf6v36,gxfptr8,gxfnd9n,gxfo3yp,gxfqcq9,gxf8smq,gxfrjgz,gxf6igo,gxfbs3e,gxfptrv,gxfrxml,gxf71fi,gxfgx1x,gxforuu,gxfqmw4,gxfqvpm,gxftij1,gxfoxpp,gxfmuca,gxf6v4r,gxfr21o,gxfdn2d,gxf7x2d,gxforvv,gxfslel,gxf8som,gxf8z0j,gxfb2v9,gxfo8xz,gxfk1sc,gxfptu9,gxfigcy,gxfhr2w,gxfermh,gxfnwbh,gxft7vu,gxfbs67,gxf6c82,gxf95d0,gxft8z9,gxf8sq3,gxfnjov,gxf7e5v,gxfmhro,gxfptvb,gxfq0pg,gxf305a,gxfit1c,gxfgiv5,gxfl37n,gxfqcue,gxf8sqv,gxfqvt7,gxezo26,gxfgp73,gxfsm1d,gxf7kia,gxf8sr7,gxfoyac,gxfqvtp,gxf8g4g,gxf9odf,gxewomg,gxf6v8t,gxfqcvi,gxft6hp,gxftinl,gxfaqb9,gxfrrga,gxfqdcv,gxfc4w2,gxf65z9,gxfk1c7,gxf8sso,gxfnwej,gxf8sss,gxfnwel,gxfn74e,gxekki7,gxf65zo,gxfn74p,gxftcd7,gxf3cv0,gxfpadt,gxf48h4,gxfe2g9,gxfd6uk,gxfqcxc,gxfdd6a,gxfndh0,gxfieef,gxfnwfw,gxfmbk2,gxf5zpf,gxfn761,gxfk1e2,gxfcnwt,gxfn768,gxfnwgh,gxfrnit,gxfra0z,gxf7eae,gxfo93r,gxff4ex,gxfo2sc,gxfo93x,gxfo2se,gxfk404,gxfqplu,gxf96yu,gxfs0ny,gxfa7fr,gxfo0lr,gxfsn56,gxfey3v,gxfphd8,gxfjv3j,gxflsmq,gxfqcz7,gxfsn5h,gxfq0c7,gxfpu0q,gxfqczf,gxe8a4f,gxfbscj,gxfn77o,gxf45e5,gxfq71z,gxfn3du,gxfertd,gxfg6e7,gxfp1yz,gxfdjl2,gxf71pj,gxfrrl7,gxfbsdo,gxfbm25,gxfsh8d,gxfr8mo,gxfey5v,gxev3wa,gxfoltn,gxfmbni,gxfndkv,gxfit8m,gxfpu2v,gxft66g,gxf6vex,gxfg7tj,gxfnjwt,gxfr1m5,gxer60z,gxfmbo9,gxfrkkv,gxf7ee4,gxfoe2t,gxfo97m,gxf9bxf,gxfo2w4,gxfnjxl,gxfek9e,gxfohyq,gxfsn8x,gxfchpu,gxffaut,gxeigtz,gxf4rlm,gxf7r25,gxfr2da,gxf6667,gxfq4yo,gxfr2de,gxfs6n6,gxfoxrq,gxfndmu,gxfndmx,gxf4xxm,gxfmuoc,gxfnjym,gxf4rm9,gxf95n8,gxf4ezb,gxexmuy,gxf6672,gxfitb3,gxfoyjk,gxf8t0k,gxf7krp,gxforgc,gxfn10q,gxfoyjw,gxf6p6d,gxf95o9,gxfcwsf,gxfm0fe,gxfhyz9,gxfbm67,gxf24u9,gxfpl0o,gxfnqbo,gxfkqva,gxfrqwx,gxft7e6,gxf48p8,gxfbnhq,gxfn7do,gxe6pel,gxfol8p,gxfjoyo,gxfpnvm,gxfqd5v,gxfoylr,gxf8a40,gxfkkl0,gxfnk1i,gxfc25o,gxfrrr0,gxf7ku6,gxftcn7,gxfnash,gxfosay,gxft6bv,gxfrpsx,gxfqhfn,gxfsndb,gxfrf4h,gxfndqt,gxf6qih,gxffty0,gxfn7fd,gxfqpui,gxfk1nf,gxfr2hr,gxffhb6,gxftgmx,gxerrz8,gxfc292,gxfbm99,gxfrrsg,gxfn7g1,gxfigs5,gxfqjr1,gxfb9mh,gxfq0l6,gxfeyd7,gxflsvw,gxf9ytu,gxf8ghs,gxf9v2a,gxfiah1,gxfpnyf,gxex1mx,gxf95sf,gxfnk42,gxfqhmr,gxfopda,gxf2nx5,gxevzq4,gxftcpq,gxfnng0,gxfpwkb,gxfndt3,gxfe87w,gxf7r8x,gxf8t6a,gxfjvec,gxevzqt,gxfqpx2,gxf6s7h,gxfnws9,gxf83wd,gxf5h36,gxf8t6v,gxfn16w,gxf6cp7,gxf36x9,gxf3pw0,gxfqw9e,gxfqdas,gxfh8lx,gxfr2l5,gxevahm,gxf6vob,gxfbg0t,gxf7200,gxf6voi,gxfth3l,gxfa1ks,gxfpucs,gxfk1rh,gxfnk6m,gxf5awt,gxft6gg,gxfmi9e,gxfndv7,gxfpud3,gxfp52w,gxf7kzd,gxfbz0c,gxfoyrh,gxfqpz2,gxfmuww,gxelzi9,gxflzb6,gxeo9oj,gxfqdc4,gxfr2mh,gxfjvgr,gxfnwuk,gxfqdcd,gxfq2wd,gxfbspg,gxf7pl5,gxfsniv,gxf8gm2,gxfb9qz,gxfnwv1,gxfmuxr,gxfoexh,gxflayd,gxfnzrx,gxem5uz,gxemc6n,gxfhlbo,gxfialx,gxfdjxz,gxfpii1,gxf8myl,gxewp4y,gxf7xoj,gxfoyti,gxer96v,gxfigy4,gxf6vro,gxfl3rq,gxf3713,gxfq0rd,gxfn7mi,gxf7xp7,gxf66hp,gxfcuou,gxf8780,gxfnwx0,gxf5h7x,gxfsnlc,gxezib5,gxfmv04,gxfobpa,gxfla47,gxfndyx,gxfpphj,gxeo9rw,gxf4lml,gxfrybm,gxfsnm1,gxf7xqj,gxfd7d9,gxf7vn1,gxfqjrk,gxf4901,gxf3wd3,gxfmqtg,gxfo9lm,gxf4fbu,gxf6vtq,gxf4yaq,gxfne03,gxfr2qs,gxfqdgm,gxfqdgr,gxfcbsf,gxf8zp0,gxft6m0,gxf8gqj,gxfr2ri,gxf7ldr,gxfoanq,gxf42py,gxfnqo8,gxfqq4p,gxfhy2y,gxf7yt4,gxfq76c,gxfspuj,gxf4fdk,gxf8aft,gxf8tei,gxerdh6,gxfp59a,gxfs4ps,gxfnkdf,gxfphwk,gxfesbq,gxfne1z,gxfryeh,gxf8n3e,gxf8tf0,gxffnxq,gxfdgvc,gxfg0ky,gxfbz7d,gxfg0l6,gxfth4v,gxfk1z0,gxf8tfh,gxfr94v,gxfbsw1,gxfombm,gxf7xtw,gxffnyf,gxffhmx,gxfsnpn,gxfmih8,gxflzim,gxft85t,gxfbswh,gxfr95e,gxfn7rn,gxetpuc,gxft6ol,gxfefpz,gxfkemw,gxfn7ru,gxfk4fz,gxf7xul,gxffnz4,gxfnx2a,gxft8pn,gxfih48,gxf66ne,gxfhy5p,gxfkkz3,gxft6w3,gxfrs51,gxfnojt,gxfla9k,gxfl3y4,gxflt8f,gxfsfqx,gxfp45z,gxfsnrf,gxfddu6,gxfk21b,gxfn7tc,gxfd175,gxeu2ja,gxfiqih,gxftjdl,gxfdsa2,gxfl1qn,gxf6vz1,gxf8gv6,gxf30sb,gxfqq91,gxf8ajt,gxf7xwq,gxf378u,gxfpoc0,gxfhrw3,gxfsnsk,gxfbszb,gxfr2wp,gxffuda,gxfl404,gxfk8ee,gxf8493,gxfn7uw,gxfjpft,gxfar2i,gxfn1jf,gxftd3g,gxfiavi,gxfn3hp,gxfmv80,gxf7ezc,gxft6sc,gxf8tk1,gxf9cis,gxfgjoq,gxfqcfm,gxevnhr,gxffhrl,gxf33y1,gxe903d,gxf8tkq,gxfi06t,gxfbmps,gxfhry9,gxfq7d6,gxfd7m6,gxf44u0,gxfthmd,gxfqdp3,gxf0kig,gxfpoey,gxf9ivv,gxfpuqk,gxf72e5,gxfa2p1,gxfhfc1,gxf9iw3,gxf7ld0,gxe6pyf,gxf6d48,gxft73p,gxfd5bb,gxf84r5,gxf6w33,gxfl439,gxf6wx5,gxfdwxl,gxfn7y5,gxf5q8w,gxeq7lt,gxfr9c2,gxf386j,gxfmvb8,gxfqdqm,gxfbmjc,gxfl4xa,gxf726x,gxfr9ct,gxfkxsw,gxfg74z,gxfoz6s,gxftd7p,gxfq7fq,gxfn1nr,gxfpoh4,gxfpusq,gxfs3nr,gxf7lf5,gxfcc3b,gxfn7zs,gxfde0p,gxfde0q,gxfovrz,gxfrfp9,gxfagqk,gxfpw83,gxfmipv,gxfbt52,gxfk8jr,gxftjkh,gxf6pub,gxfgdhw,gxfkejz,gxfhydy,gxflzrs,gxf49cr,gxexl5o,gxfnqzk,gxfo4e3,gxeufdw,gxf7f51,gxfmnpt,gxf5hm2,gxf3753,gxfr33h,gxfdkdr,gxfb3w4,gxf7lh1,gxfr9fb,gxfar96,gxfpuju,gxfp5ku,gxf6w73,gxfk8li,gxez62v,gxfm3dv,gxfnkpe,gxftdas,gxf3k45,gxfnxco,gxfbmvv,gxfbgkc,gxfbc0q,gxfqduo,gxfq7j5,gxfnr1g,gxfq17q,gxfln6w,gxf8h49,gxfsbe3,gxfnkq4,gxfqk6l,gxfjvzl,gxe9cxg,gxfqdvb,gxfnxdm,gxfpwnz,gxfsoqy,gxf7y67,gxfr9hd,gxfnef7,gxfnefb,gxfr362,gxfhyhh,gxfqdw6,gxfihg8,gxfjd25,gxfmvhe,gxfd7ty,gxfozc7,gxfp5a4,gxfbzl8,gxfbmy6,gxfmvhs,gxfrb8o,gxfniab,gxf8rbo,gxfg0zh,gxfnksf,gxfa8e8,gxf37k4,gxfqk93,gxfbabu,gxf4m4t,gxfm68g,gxe6jv5,gxfr382,gxfbac9,gxfi9pr,gxfnxge,gxetjxb,gxfsbhf,gxfnxgo,gxf72nd,gxfskjr,gxfqdyn,gxevnsh,gxfiu5u,gxfnom6,gxfneig,gxfneij,gxf6wcd,gxe796m,gxfmvk4,gxfqkat,gxfehtj,gxfmvkc,gxfsorm,gxfa24v,gxfpopc,gxfqkb5,gxfk8r6,gxflnbr,gxfos6y,gxetwm2,gxfnr6m,gxfn887,gxf84mh,gxf8twr,gxf84ml,gxfsbjk,gxf3wxd,gxfsuib,gxfcozb,gxfcozd,gxfqe0t,gxfihku,gxexf2g,gxfomc7,gxeon0t,gxfnxji,gxf8txt,gxfqchv,gxeww44,gxe8oeu,gxfbaft,gxfisp1,gxf4skk,gxf84o5,gxfemjq,gxfi4z0,gxfihm9,gxf83x9,gxfozhy,gxfa27v,gxflars,gxfposp,gxfjrb3,gxfr9ox,gxf8tzo,gxfij7y,gxfslmh,gxf8no9,gxfp9on,gxfbtgd,gxfkf6n,gxfcvwb,gxft78l,gxfk2jr,gxfqx2g,gxfma2k,gxfryzv,gxfrnwy,gxfa29a,gxf9iqw,gxfot82,gxf5hwz,gxfnenp,gxfhm2e,gxfs5br,gxepipk,gxfsum4,gxfeyp6,gxfomwu,gxfgv6d,gxf7s3m,gxfbn5v,gxf8u12,gxf677t,gxf5tmm,gxfnxn2,gxfr9qn,gxfnxn5,gxesoih,gxfjpy3,gxfo3z3,gxf7s4g,gxf5hy9,gxfbtia,gxfltsz,gxf6dk7,gxfp2j3,gxfnl0s,gxf7ygf,gxfn80o,gxff5rl,gxe6rxa,gxfjds9,gxfsoca,gxfbn7g,gxf679b,gxfhyrk,gxf8b42,gxfh9hf,gxf8u2t,gxfm05i,gxf60xz,gxfp8hj,gxemqme,gxfq7v3,gxfqe6r,gxf3e54,gxfn8ex,gxf67a2,gxfneqm,gxfqmip,gxeklsx,gxfnxpf,gxfhysk,gxfra8h,gxfomzw,gxfner2,gxfner4,gxfomau,gxfon06,gxfogop,gxfn8fw,gxfs2ol,gxf8u4g,gxftdoh,gxf8hhe,gxfnxqb,gxfnl39,gxfet1p,gxf7lw3,gxfs0m5,gxfotco,gxf8u55,gxfnl3v,gxfp5zx,gxfh38f,gxfoo0d,gxfay07,gxf7yjy,gxelhh1,gxf6qba,gxftk1k,gxetwvt,gxfd4cq,gxf6ywo,gxftaxs,gxfnete,gxfg7nr,gxfnxs8,gxfi572,gxevyz2,gxfii1f,gxfnl5g,gxfqead,gxfmvvd,gxfl4nv,gxf67do,gxfm6lf,gxf8u7d,gxf8hkc,gxf6wod,gxf6woh,gxf612r,gxffoqf,gxevbi5,gxfp62p,gxfd891,gxfgkcp,gxfqcwc,gxf3wif,gxfbaq4,gxfd1kt,gxfk2ry,gxfjq4x,gxfpp1v,gxfth8l,gxfk93u,gxfa8t9,gxfq80u,gxffv35,gxfefrv,gxfr3mu,gxfn0g7,gxeyhbg,gxfa2i5,gxfnxv2,gxf7egr,gxfnewg,gxfdelv,gxf9jjp,gxflu0n,gxfn5px,gxfam8a,gxfrr4b,gxfrvc1,gxfalhm,gxfg1g0,gxf9e8n,gxf6y32,gxf5bvi,gxfsokj,gxf7sdi,gxfiulo,gxfrsz1,gxesos2,gxfn8mr,gxfk2us,gxfqeet,gxfhsom,gxfl1in,gxffo16,gxfdkzj,gxfo0a3,gxfib82,gxehg92,gxfb4hz,gxfk2vd,gxfp0fn,gxezd01,gxealqq,gxfkyhf,gxf6wt0,gxf836h,gxfg4w4,gxfqxek,gxfsom7,gxfq1sx,gxet7s4,gxfoxhl,gxfk2wa,gxf1tik,gxf6wtq,gxfmntp,gxfrzcg,gxfoh54,gxf6wtu,gxfioc3,gxfqvku,gxfszdq,gxf6dvc,gxf9709,gxftk8r,gxfp39m,gxf90ow,gxfnlc2,gxf5byb,gxfdepw,gxfsnom,gxf5t0h,gxfoqmk,gxfjqa3,gxf6wup,gxfdfz7,gxfnf13,gxfbavu,gxfotln,gxf5om5,gxfn8pq,gxeb4rm,gxfm0h1,gxf5rja,gxfqei4,gxfsouq,gxf7tpk,gxf79iu,gxfmu5d,gxfc06w,gxf5ibe,gxftgtn,gxfjewa,gxfpr6d,gxf3r45,gxfo6m9,gxf7ytn,gxfegpb,gxf972s,gxfo52r,gxfi5g8,gxf6wws,gxffo1y,gxfqypd,gxf90rt,gxfinif,gxeh3qm,gxfgx81,gxf4mr9,gxf6wxj,gxfpqgk,gxfii4a,gxfny2j,gxfn3m1,gxfdrgg,gxfi5hf,gxfiog5,gxfn2h3,gxfra6g,gxfqc7v,gxf7gzy,gxf8o5v,gxfd26t,gxf79lj,gxf7fx5,gxf8uhm,gxfoopb,gxfqelf,gxezw4n,gxf8ui0,gxf8bjl,gxf67oz,gxeh3sk,gxfetfa,gxeuprd,gxf79mh,gxfbb0b,gxfpj0d,gxf5if3,gxfqem9,gxf7ma1,gxfrt6y,gxfr3wv,gxfk9e9,gxfr1vn,gxfmw7q,gxfonff,gxfr3xd,gxfnf6u,gxf6uyv,gxfii7g,gxfk9f1,gxfqxm6,gxfocbs,gxfp6eo,gxfg4xf,gxfsotw,gxflho9,gxfi5kw,gxf8o94,gxf8ukq,gxfayff,gxfny6k,gxf7sni,gxfs5w1,gxfnf82,gxfte51,gxflhp6,gxfcd0d,gxfdrkw,gxf7yzn,gxf73dy,gxfrwfw,gxfl52y,gxfhmnv,gxfnf9b \ No newline at end of file +gxf43y8,gxfq8eb,gxfmdc4,gxfc01r,gxfkyrq,gxfh1lj,gxfnxps,gxf8ob6,gxfdlau,gxfobx5,gxfn2mw,gxf7sp0,gxfd2ce,gxesisg,gxfqxpe,gxf6y58,gxf97ai,gxfowzs,gxfhzci,gxfrzn7,gxfha2d,gxfh3qu,gxfrzym,gxfscal,gxfdxz2,gxfbu4f,gxf4gn4,gxfte82,gxfradg,gxfpphi,gxfrznr,gxffcjt,gxfsl9d,gxfom0d,gxfpphy,gxfnyaf,gxfiic8,gxf7sri,gxfe4bj,gxfezxd,gxfif0w,gxfetda,gxfg1uv,gxfrjdh,gxf9207,gxekg31,gxffiwh,gxfhzea,gxf8upg,gxfjkai,gxfcprv,gxfmq2m,gxf7utc,gxfp091,gxf911i,gxfhzez,gxf7g5o,gxf38gd,gxf8pd9,gxftea9,gxfk39v,gxfns0l,gxf6x7a,gxfq8ig,gxem10c,gxfomk1,gxf7mhr,gxfht41,gxfbu79,gxfnjht,gxf8271,gxf8ofl,gxetr5g,gxfql6e,gxfnyd5,gxf3xrx,gxf9135,gxfa9c2,gxfb9zq,gxfp6mj,gxfmwgd,gxfq28e,gxfn2rz,gxfjqoi,gxfj7pv,gxf7g7p,gxfk9ng,gxfsvdq,gxf85i7,gxft80y,gxfn2sn,gxfnyeg,gxfq8kp,gxf2pkb,gxftecy,gxfl59v,gxerh11,gxfted4,gxfbu9o,gxffpbx,gxfqbl7,gxfnls4,gxf7sw5,gxfetqh,gxfp2af,gxfoy2q,gxfdlhv,gxfob32,gxfm78g,gxfeymw,gxfn2ud,gxfnyga,gxfjeyv,gxfgxf6,gxfk3e6,gxfd3a6,gxfeh4h,gxfppob,gxftef0,gxfgenx,gxf681u,gxf6edf,gxf681w,gxfqqch,gxffcqy,gxfr49b,gxfs1r7,gxflbo6,gxfrn8j,gxfs67d,gxf85m2,gxf8bxq,gxfiv73,gxf8bxv,gxfksqc,gxfk3g5,gxfo4ty,gxfm7ax,gxfk3gb,gxfb533,gxfeni8,gxftegx,gxfont1,gxfli12,gxfs688,gxfl0x8,gxfoiag,gxfje6v,gxe7a8p,gxeu3yy,gxfq2e4,gxfpyyt,gxfnfl1,gxfhacm,gxfq2eh,gxfn2y2,gxfq5af,gxf919p,gxfrnam,gxfngda,gxfd8za,gxfnc5l,gxfetvf,gxfsvk0,gxfc729,gxfp6tf,gxfgero,gxfmqbp,gxf8ibv,gxfk9u4,gxfam6l,gxfiimm,gxf6xg2,gxfioyb,gxfm11w,gxftkuv,gxfbuft,gxfp0ii,gxftkv0,gxfnfml,gxfqfty,gxfcq20,gxfgt8c,gxf686k,gxf6xgu,gxfnlyp,gxfg8he,gxf8icz,gxfqlfb,gxf73sq,gxfmqd7,gxfbvia,gxfpji7,gxfmwow,gxf7zep,gxfqf42,gxfohl3,gxf3fsc,gxf8idm,gxf7zf2,gxfmwpd,gxf5p8y,gxfe4nn,gxf93qo,gxfmwpl,gxfpzlw,gxf1hjz,gxfkg80,gxfi61v,gxf73tx,gxfmqef,gxenm7e,gxf3lez,gxfp0ks,gxf9kbx,gxf6r77,gxfqf5k,gxfrtq2,gxfpw70,gxfjxa5,gxfppvj,gxfam9t,gxf56bm,gxfli6b,gxfq8uc,gxfsqqu,gxfiipy,gxfa9mw,gxfqrt5,gxfn6wn,gxfama4,gxffcy9,gxf91ea,gxfsvab,gxf9e1o,gxewqxv,gxfba4x,gxf7t60,gxf9x0s,gxfgl7z,gxfnype,gxfrx3o,gxfqfh4,gxfr4hl,gxftkzg,gxfr4hr,gxfs60b,gxfq8w5,gxfqf7r,gxfdfgq,gxfpogn,gxf7mvh,gxfovtw,gxfhtht,gxf85ua,gxfsj2s,gxf8v4n,gxficgx,gxfd95u,gxffl0b,gxfq2lg,gxfka05,gxfrtt4,gxf1uay,gxey5kb,gxfn35a,gxfn35c,gxfboab,gxfmwtw,gxfteph,gxesjaw,gxfaz0b,gxfrtto,gxf7mwx,gxeuzt1,gxfrnii,gxfqf9p,gxfcjww,gxf44ib,gxewedw,gxf8ij9,gxfhzvd,gxfhtju,gxfeb4v,gxfqccr,gxevbzv,gxftl2h,gxfn9ij,gxfmwvl,gxfnm5z,gxfnm63,gxfs070,gxfmwvz,gxfaz29,gxfehhe,gxfo8uu,gxfq2o6,gxfohs7,gxfn9jd,gxeru30,gxfqgx9,gxfnfv6,gxfrq83,gxevvh0,gxf9e6v,gxfmdy2,gxfentn,gxfq90g,gxfp737,gxfoxq8,gxfpq1x,gxfbodi,gxffw2v,gxfnsj3,gxei6gg,gxfnyup,gxfm1bn,gxfq088,gxflp7j,gxfr4n0,gxfnsjh,gxftetd,gxfmkav,gxea4v6,gxfenv4,gxfo579,gxfo57b,gxf8va5,gxfa9um,gxfg2fz,gxfip9e,gxfqfdy,gxfm7oo,gxfm7op,gxfnywa,gxfmkbx,gxfrzln,gxf8oz5,gxfqetv,gxfbbsl,gxelvau,gxfk3uh,gxfqgxr,gxfbu6t,gxft280,gxf5cw1,gxfmkcm,gxfq93e,gxfq93h,gxf7zpr,gxftevk,gxf68ib,gxfi6ca,gxfq2sb,gxfqffi,gxfg8te,gxf6xt0,gxf6xt2,gxfqcgh,gxfmvd3,gxfnfzi,gxfpjua,gxfrb1x,gxfj1yu,gxfq273,gxf9362,gxfn3cw,gxfn3d1,gxfn3d4,gxf745m,gxfs97m,gxfp782,gxfrnpw,gxfeuag,gxec65k,gxf8cf4,gxfmqqq,gxf7tgk,gxffd9h,gxfq2ue,gxf8vss,gxfpjvu,gxfjran,gxf7n5e,gxeaghh,gxfi03e,gxfp0xq,gxfij27,gxfpdkw,gxflv5v,gxfliis,gxfc7ig,gxfnmdl,gxfopqv,gxfbuvg,gxfehou,gxf4fo8,gxfipeb,gxf7n6d,gxf8655,gxfpmen,gxfsjdp,gxfk3z5,gxfp7aa,gxfqgyj,gxfmkh1,gxfrn3l,gxfme5p,gxf50dq,gxfn3g0,gxfproe,gxf3ltm,gxfow2n,gxflvka,gxfipfi,gxfrq9h,gxf0mdc,gxfs74b,gxfeo1w,gxfm1jb,gxfn3go,gxf7n7u,gxfouob,gxfpdn0,gxficst,gxfc7kg,gxfrnte,gxfsyih,gxfq2xn,gxfq0vw,gxfkmzk,gxfq2xt,gxf9fty,gxftf1l,gxfojfr,gxf5d2l,gxfn3hv,gxfmqut,gxfm7w6,gxfi06w,gxfr2sn,gxfsw3m,gxfi0qm,gxf6rnv,gxftf2l,gxfpzmh,gxfmx75,gxfn9ue,gxfi07u,gxftlek,gxf5jfj,gxfpqcg,gxfjeso,gxfmqwa,gxf91va,gxf91vb,gxfs0jh,gxfhaym,gxfazeo,gxfhtxg,gxfmea6,gxftknh,gxfeo5u,gxfipjn,gxf5jh4,gxevc27,gxeoc0s,gxf7tni,gxfbc2n,gxfp7fk,gxf9yt7,gxfrbac,gxfr4z0,gxfr33x,gxf7zzl,gxftjqt,gxfckcc,gxfn3lv,gxfqsck,gxfox5i,gxftf5z,gxfk45k,gxfeo7d,gxfpqff,gxfmxam,gxfss7s,gxfrbbo,gxftb6i,gxec1lq,gxflcf3,gxflvdu,gxf8pb7,gxfscff,gxfpqg5,gxfivxj,gxfamug,gxfp161,gxfijai,gxf6y41,gxfcqpe,gxfmed0,gxfn3n9,gxffdiu,gxfq33u,gxf8qkq,gxfkzsu,gxf1ohu,gxffq6c,gxfkthq,gxfp2fh,gxfe5h4,gxfpwsz,gxfq9g5,gxfn3o7,gxf8vo9,gxf802k,gxfi0d9,gxfeula,gxfeo9t,gxfspya,gxffwiv,gxf39ex,gxeprwy,gxfm6lv,gxfrtgo,gxfq9gy,gxfmxdf,gxfoi9g,gxf82cp,gxfehz2,gxfeoao,gxf216q,gxftkob,gxflvgm,gxfjxxj,gxfklkg,gxfdz0z,gxfm1sl,gxfo5nc,gxftfa2,gxfbouz,gxffdlo,gxfrpig,gxfk49q,gxfpe11,gxfkgwz,gxfnzc5,gxfobza,gxfbc87,gxfmp3w,gxff0yz,gxfg2wc,gxfh4tp,gxfouy6,gxf7nhs,gxfnzci,gxft8g5,gxfnmph,gxf922h,gxf5pyy,gxfpqkd,gxffjy6,gxfamyq,gxfipqg,gxf4bex,gxf74ju,gxfq9y2,gxfp1at,gxfq9jq,gxf4bfc,gxfr55m,gxfeuou,gxfn4x1,gxesjxo,gxfrugd,gxfjrou,gxfjjc8,gxfp1bn,gxfoiy0,gxfbcae,gxf5ddj,gxfl69o,gxfnnvu,gxfpwxq,gxfmr5x,gxf5de2,gxfmxhn,gxf8phr,gxfl36g,gxf6yah,gxforfm,gxfnt49,gxfp1d9,gxfknce,gxfd9v3,gxfk4dt,gxfmr76,gxfjy2g,gxfiptm,gxfgfng,gxfg30d,gxf8mpw,gxf9xrz,gxfn3up,gxfr2s9,gxf8pj9,gxf339i,gxfm896,gxfijij,gxfn3v6,gxfs0us,gxfnzh2,gxfhu8n,gxfqfyx,gxfkla2,gxfijj2,gxfjrs2,gxfr35n,gxfq9no,gxf7nmt,gxf8pk7,gxfpe24,gxf5dgt,gxf80a6,gxfmxkh,gxfq9o5,gxfpe2g,gxf83cu,gxfan3w,gxfjrsu,gxfn3wf,gxf8pkz,gxfnimu,gxfgm12,gxf8j9m,gxf7rcy,gxf86mm,gxf7tyl,gxf98k3,gxfp1g4,gxfg32u,gxfp1g7,gxfmkyg,gxf4xnz,gxfsrtr,gxf8vxg,gxfefb3,gxfngks,gxevd7x,gxfnt7y,gxfi6ya,gxfnzjp,gxfnmwo,gxfqasz,gxfp1bw,gxftfg5,gxfnmwx,gxfow5n,gxfd9z9,gxfqmdj,gxfgm2y,gxfd9zg,gxfn3ym,gxfpe4w,gxfnmxh,gxfi6zb,gxfjsun,gxfidb3,gxfqg2v,gxf4bmw,gxfatii,gxfn3zf,gxftgny,gxfr0cv,gxf6ygr,gxfq9rw,gxftfk2,gxf6xbf,gxfdgck,gxfqb7t,gxfiyb0,gxfijnw,gxf85kd,gxfan80,gxfgm0z,gxfov84,gxft832,gxfda1n,gxf697g,gxf33fi,gxfrodb,gxfeom8,gxfbp5y,gxfow64,gxfcr3g,gxfp7vy,gxfqg4v,gxfqi43,gxf3mes,gxfntqb,gxfmrek,gxfnmve,gxfml32,gxfmtdh,gxf8w1t,gxfiq0y,gxf6yiu,gxfeuyw,gxf698p,gxf4bpo,gxevdcd,gxfngpa,gxf6yj3,gxfq3ip,gxfi72s,gxfo5zp,gxfnn12,gxffdy1,gxfpnkf,gxfkvui,gxfqcuo,gxfl6jm,gxfra5q,gxfovad,gxfbckm,gxfl087,gxfknl4,gxfmxrd,gxfn42y,gxfp0e5,gxf6s8g,gxf4bqq,gxf6yk7,gxffwxk,gxffwxm,gxfoinw,gxf2x6l,gxfp1mn,gxfp1mp,gxe8waq,gxfqg78,gxf6fly,gxfn43u,gxfqmiz,gxfohfm,gxf45g7,gxfn4xh,gxf8psq,gxf45gc,gxf8h68,gxeq3s2,gxf6s9x,gxfpx9i,gxfpilg,gxfq3l8,gxfktyo,gxfl6lt,gxfn44z,gxfoipg,gxfazzq,gxf69bv,gxfsqch,gxft9ds,gxfmri9,gxfhbk4,gxftfph,gxfml6v,gxfmrij,gxfqg9a,gxf6lzl,gxf8puf,gxf7hll,gxfpxay,gxfp80r,gxfbpb1,gxfl0bi,gxfckwv,gxfngtd,gxfk4pu,gxfmrjb,gxftfqg,gxfngtl,gxfgjy5,gxf48fc,gxez8jf,gxf5ds5,gxffkee,gxfo7yv,gxfpxcc,gxfq9zl,gxfcxlg,gxfq9zp,gxfq1ac,gxftfrv,gxf9li7,gxfq5i3,gxftfs6,gxfskxz,gxfda98,gxfml9q,gxf92jz,gxeo6cw,gxfdt87,gxfswu0,gxfbj22,gxfh74v,gxfnaki,gxfqa10,gxfqa11,gxfp1s9,gxfjyh6,gxfknrk,gxetyzd,gxfm8nv,gxfovh8,gxftftq,gxf69gf,gxfovhc,gxfsqjl,gxfg3fp,gxfqk9d,gxfidm5,gxfpqrh,gxfovhy,gxf8jne,gxf8dbv,gxfpqe0,gxfovi7,gxfb05i,gxfev7v,gxfnn9t,gxfrono,gxfeowl,gxfop7a,gxfmi7d,gxff7vj,gxfdgo1,gxfjfl0,gxfmrol,gxfrpcs,gxfmf1m,gxfjyjv,gxfngz7,gxfn4c4,gxfb1x0,gxf6wbj,gxfth3j,gxfqf05,gxfiwn4,gxf8q0y,gxfop8j,gxfn4ck,gxf3t1i,gxfngzr,gxf80qw,gxfkngs,gxf9fbe,gxfn4cr,gxfngzw,gxfjyku,gxfsqmp,gxfqa50,gxf8jpx,gxfnnbq,gxfhgmx,gxff1lm,gxfjs9o,gxfqggt,gxfoixv,gxfnzza,gxfnnc8,gxfqa5n,gxfnzzg,gxf80rx,gxfqbul,gxei7ld,gxfhi44,gxfqt4n,gxffzys,gxfl0jm,gxf8wed,gxftfyf,gxfk4y2,gxfn4ek,gxf6fx4,gxfk4yh,gxfn4ey,gxfqb0q,gxfp1y5,gxfl0ki,gxfn4fb,gxf5wyw,gxfovmx,gxesqwa,gxfs7qj,gxfsugi,gxfp2k3,gxfh5iu,gxf4c3b,gxeau60,gxfc27v,gxfqgjg,gxfkldh,gxfc282,gxf3zgj,gxfqa85,gxfta5m,gxfk500,gxff80h,gxff80u,gxf92sh,gxfmf6r,gxfnask,gxfqmw5,gxfo02u,gxfmrtz,gxf759l,gxfbvxq,gxf9vst,gxel0ts,gxfn4hh,gxf8whk,gxf877g,gxf3mv1,gxfpxmn,gxfpxmq,gxfrwpx,gxfqaa3,gxfmy6l,gxfnwq5,gxf8jv4,gxfpeoh,gxfptjx,gxfn51f,gxfn4if,gxfprbt,gxfbd0a,gxfj9gb,gxfo6fx,gxfj9gf,gxfnaua,gxfk52f,gxfk52g,gxf57sa,gxfesl6,gxfpepb,gxf7hyp,gxfh5ma,gxfp1k6,gxfab3t,gxft9s0,gxfqabl,gxfn4jp,gxewfre,gxf92vi,gxf51hr,gxfp236,gxflpzn,gxfk53p,gxfqac7,gxf7bo9,gxfqf1h,gxfthqj,gxfr5yc,gxfrili,gxftg4n,gxfeqp3,gxffxf0,gxfo3te,gxfh5ny,gxfoj5d,gxfmrxy,gxfmry4,gxf4v7k,gxfn4li,gxfdgxz,gxfp8gk,gxfbpqn,gxf7uog,gxfq429,gxf6xht,gxfeu2b,gxfskk7,gxfdna2,gxfoj6j,gxfo6jj,gxf69sw,gxfidyc,gxf8jz9,gxf8jzb,gxfpesq,gxfpn16,gxfn4mr,gxfinvi,gxfiqly,gxf4hzd,gxfqaey,gxfl73w,gxf8qbi,gxftjr2,gxfjsjt,gxfms0a,gxfrj36,gxfs45p,gxfsqxf,gxfnnmd,gxfhc2f,gxfg3tk,gxfnhax,gxfo09m,gxfqafw,gxfo09t,gxfie03,gxf4vag,gxf8qcp,gxfn4ob,gxfqagc,gxfpxtg,gxfpmm6,gxfmlpz,gxf8dq3,gxf6z5q,gxflwfz,gxfn4ox,gxfsqyq,gxfkuiw,gxfowa4,gxf8g7r,gxfd4ek,gxfpril,gxfqb1d,gxfdtoz,gxfm93v,gxft9ya,gxfk59h,gxfmyef,gxfeizt,gxfmyej,gxf9ynh,gxfoye5,gxex583,gxfjsmt,gxf462e,gxfp275,gxfg3wb,gxfnnp9,gxfrp33,gxfnhds,gxfjrxc,gxf8k3m,gxfmls3,gxfjyyt,gxfk5ae,gxffr9n,gxfms3x,gxfn4r4,gxfojbl,gxfie36,gxfluq6,gxf8qfq,gxf9yon,gxfn4rc,gxfe02j,gxfskpp,gxfmyfz,gxf8k4g,gxfskpu,gxftgbn,gxfn4ro,gxf8qg5,gxfqn6y,gxfhr8n,gxffxm4,gxfbpwu,gxfjyzz,gxf8z6w,gxfod16,gxfms58,gxfr6gw,gxf8wso,gxfrci1,gxfmyh7,gxfqakv,gxfoxco,gxf9yqb,gxfmyhh,gxfie52,gxfgaai,gxfkbob,gxfms69,gxfiqsl,gxfow12,gxf465j,gxfdh63,gxfk7qq,gxfr8kz,gxfk6ou,gxf7uwo,gxf8d2s,gxfrp6i,gxf7uwr,gxfnb5o,gxfq9th,gxeyq83,gxef8li,gxf8qiy,gxfms7h,gxf6zbi,gxfqbhu,gxfn7ov,gxfq1cp,gxfms7r,gxfqamx,gxfp2e3,gxfkod8,gxfp8pp,gxftgf2,gxfj4rp,gxfki1s,gxel7j9,gxfnhie,gxfn4vb,gxfqnak,gxfq4bz,gxfrap4,gxfikj6,gxf7oms,gxfljzp,gxffxq0,gxeu5x7,gxfauf0,gxfldoe,gxfnb7n,gxfkoed,gxfjmh3,gxfrncc,gxf4cju,gxfngoy,gxf2xzm,gxfp2fr,gxf3gym,gxfo0in,gxf8qlc,gxeqtut,gxflwo6,gxfja1o,gxf8ka2,gxfmsa7,gxeuv8w,gxfmsad,gxf8pqh,gxfn4xm,gxfpy2j,gxfsnnf,gxf6a4f,gxfq4e9,gxey7cz,gxf7v0m,gxfmfns,gxfmsaz,gxfg43z,gxf9yvk,gxfmymp,gxfnhli,gxfk5i1,gxfqaqj,gxfd4nw,gxfj9we,gxfnhlu,gxf0nvo,gxf5r6t,gxfs1ye,gxfp2i0,gxfmsbw,gxff8j4,gxfn4za,gxfqarc,gxf7u50,gxfbdh7,gxfk5j1,gxfp2iq,gxf8x4b,gxfskxx,gxf7v2f,gxfplhk,gxfojk9,gxfqh3e,gxf7v2j,gxfiebw,gxfmyof,gxfo6xc,gxfk5jn,gxeu61g,gxf8qol,gxfnhna,gxf7c4c,gxfprtr,gxf70nb,gxfnhnw,gxfq9ul,gxf7v3n,gxf4vn8,gxfsrav,gxfqmw6,gxeuznu,gxfmse6,gxf6zi9,gxfl16r,gxfh64m,gxfqh53,gxfk5l4,gxfp2l1,gxfqawp,gxfmja5,gxekv36,gxfcq35,gxfl7je,gxfp4rr,gxf75v0,gxf8kfl,gxfrqj7,gxfgn79,gxemsmu,gxfmyrc,gxf4j21,gxfl18a,gxfe6po,gxfpf99,gxf93em,gxftabj,gxf6zk0,gxfnbet,gxf7tak,gxfsl35,gxfswlo,gxet47e,gxfclu3,gxffez0,gxfn53k,gxfqavn,gxfnbfa,gxf7t3t,gxf6zkp,gxf8qsa,gxfbdlo,gxevee6,gxfsxpb,gxfswog,gxflqjn,gxf8r6j,gxfr06d,gxfe6qv,gxflqjv,gxfjlo2,gxfm9im,gxfr7kt,gxf5epe,gxfmshi,gxfnbg7,gxfir3s,gxfkomx,gxf2gbj,gxfsm6m,gxf81j2,gxfnbgf,gxfd4u9,gxftgoz,gxfs24l,gxfnbgo,gxf6wgc,gxfgun6,gxfmsi7,gxfsl3m,gxfhter,gxfn55h,gxfmsie,gxfrvtb,gxfa5ek,gxfq4m9,gxf6aco,gxffrox,gxff8pf,gxf7v90,gxft666,gxfganr,gxf7im3,gxfcyke,gxfqnlr,gxf9n6d,gxfqayq,gxfbqbn,gxekikn,gxfoweg,gxfs26i,gxf5wn6,gxfi1w1,gxf8qvn,gxez9js,gxf6zoj,gxfowf8,gxf93j9,gxfowfh,gxfl1da,gxf4j73,gxfnuia,gxfd4xk,gxfjt4q,gxfn58d,gxfpzcl,gxfo0ue,gxfsmg7,gxfsz03,gxf4cwe,gxfr3dv,gxffrro,gxf7vbt,gxfoyhb,gxfqd7o,gxfk5sv,gxfepuo,gxfo76p,gxfsxuq,gxfsl7p,gxf7p0n,gxf8x9m,gxfp2sr,gxfjgj0,gxfrvxq,gxfn67x,gxfnblc,gxfnhwx,gxf8kmr,gxftgty,gxfepvb,gxf7ce4,gxfl7r1,gxf8ti3,gxfps3q,gxfepvv,gxfscoy,gxfg4gf,gxfnbma,gxfn5aw,gxf8qzd,gxf5evu,gxf57dm,gxfjt7l,gxfn5b7,gxfbuiu,gxelx9i,gxfl7s7,gxfnhyg,gxfcsdn,gxfn5bh,gxf3b1r,gxf6aia,gxf8xbo,gxfirav,gxfmsoo,gxft48p,gxfff7i,gxffrun,gxfb7i9,gxfo0xu,gxfrarv,gxfpoty,gxfjt8m,gxfnbnr,gxfmz0p,gxfslai,gxffrv0,gxfojwt,gxfejm6,gxf4vyo,gxfqc97,gxfkv6d,gxf5rko,gxfhvq4,gxfpluq,gxfp2w4,gxfirc6,gxf4jc8,gxelecs,gxfedbj,gxfbk6r,gxfnuno,gxfircl,gxf5xx5,gxfn5dp,gxfs2de,gxf4w04,gxfqb5x,gxfo0zq,gxfpjwf,gxfni15,gxfni18,gxfps7h,gxfk5xr,gxfsl4z,gxfq1si,gxfqc0q,gxfowm7,gxfojz5,gxfpyjm,gxfgtus,gxfpyjs,gxevl0r,gxfqd2q,gxfmz3k,gxfjzn5,gxfowms,gxfmz3v,gxfp2yk,gxf8egt,gxfoyid,gxfeq0x,gxfhyq3,gxfp7hf,gxfa5os,gxf93ri,gxf6xk3,gxfn5gd,gxf40gx,gxfqb8k,gxfp2zq,gxf34vb,gxfslf1,gxferwd,gxfq6mv,gxfqf6w,gxf1wcz,gxfiet0,gxfosjh,gxfn5h5,gxfrf0f,gxfok1t,gxfg4n9,gxfqg8x,gxfg4nc,gxfs2ha,gxfn8cd,gxfmz6c,gxfni52,gxf8u1l,gxfp314,gxfl6mc,gxf7zhr,gxfo7fi,gxfnusg,gxfrpuq,gxfpouz,gxf8xie,gxfkp0p,gxfgtyi,gxfmmjw,gxfmsvh,gxfp9da,gxf9ghb,gxf93uc,gxfoqey,gxfmg8v,gxfr0le,gxf57ez,gxfni6c,gxfqu9y,gxfpyo7,gxfqnyg,gxfhcy1,gxfsf65,gxeqo5r,gxf8r81,gxf4pua,gxfj45w,gxfr5ji,gxfoqft,gxfni6y,gxfn5jv,gxf64f3,gxfowrm,gxf8h3v,gxf8gcx,gxfslrz,gxfsy5o,gxfnuul,gxfnoj6,gxfrpx4,gxf9gje,gxfjn5n,gxflr0c,gxfnojh,gxfeuxs,gxfixvm,gxfn5l0,gxf8r9l,gxfmz9p,gxf7026,gxfeq6n,gxfso3d,gxfghec,gxfmmmt,gxf8ra1,gxfmmn0,gxf6h3x,gxffyg0,gxfnbxd,gxfnuw3,gxfk65g,gxf7j1j,gxfi8mh,gxfslka,gxfdulr,gxfowtz,gxf64hl,gxfqhq3,gxf703n,gxfpobu,gxfok7a,gxerv1d,gxfqc24,gxfq53h,gxfjn7z,gxfq53k,gxf34mw,gxffs5v,gxflr2s,gxfhqby,gxfkp5p,gxfn5ni,gxf6au7,gxfq545,gxfk9zl,gxeb81a,gxf7cs4,gxfeq9i,gxfqprd,gxfmmpl,gxfowvu,gxfk2m7,gxf822k,gxfqbgg,gxfmvr4,gxf5lky,gxfpfut,gxfnc06,gxflr47,gxfp37t,gxfi2dm,gxffyj4,gxf9ac1,gxfpytu,gxfqbgz,gxfo7mc,gxfbqtx,gxfo1av,gxfth94,gxf9zmi,gxfbe71,gxfh6sg,gxfoxi3,gxfma3p,gxfslnt,gxfiy0i,gxf941h,gxf4ddi,gxfif21,gxftha2,gxfewn1,gxfrdfi,gxfmt33,gxfcz41,gxf7vsz,gxfhps4,gxf2w81,gxf3556,gxf8rf0,gxf29ji,gxf8rf4,gxfgb82,gxerhcz,gxfkp92,gxfr74o,gxfohtd,gxfjy9t,gxfrq3m,gxfc3j7,gxf6nl0,gxfaoyu,gxfqbjb,gxfn5rd,gxfpskr,gxf9431,gxfqf2b,gxfjnvs,gxfn5rn,gxekph3,gxfg4es,gxf4q2i,gxfflyz,gxf473w,gxfowzi,gxf7pj3,gxf3bic,gxf8rgo,gxfnoqy,gxf88ib,gxfap08,gxfnift,gxfqafs,gxfqbks,gxf8rh9,gxfsye7,gxfslr5,gxfplt4,gxfslrf,gxfqble,gxfnos3,gxfd5iw,gxfrdix,gxfjtq2,gxf7pks,gxfbqym,gxf40u7,gxftb28,gxfpxcb,gxfk6dh,gxfmctd,gxfo1ft,gxfnv4a,gxfqo6c,gxfn8f7,gxfqana,gxfek49,gxfoe3h,gxfq5b4,gxfniht,gxf946a,gxfoqqt,gxf7vxi,gxfbkob,gxfk031,gxf8l7z,gxf3blc,gxell6d,gxfpg1j,gxffbzw,gxf594t,gxfjssy,gxfr445,gxfma9u,gxfniir,gxf8xvo,gxfoe4o,gxfpz0p,gxfpg22,gxfp3ez,gxfnij0,gxfi8wi,gxf7vyt,gxfqbod,gxfoe5a,gxfjtsv,gxfo1i8,gxfbwq8,gxf88ma,gxfb1rb,gxf6u20,gxfll0r,gxfthgs,gxfsnbx,gxfpjph,gxf7vzp,gxfqa0n,gxfn5x6,gxftgq9,gxfap4s,gxfpz2c,gxff9hj,gxfjtu1,gxfe0fi,gxfmmz4,gxfaci9,gxfp4wz,gxfoe6t,gxfslw6,gxf82c8,gxfavh6,gxf2z18,gxfmtb2,gxfo1k2,gxfs2xv,gxfp9t0,gxfslwl,gxfrdnq,gxfe6ws,gxf7ppo,gxfhwbx,gxfb84v,gxfjtv6,gxfqbqs,gxfox6d,gxfp3hy,gxfmtp0,gxfk6im,gxfrwn3,gxf47b5,gxfavia,gxfqoeb,gxft8xz,gxfnime,gxfifbd,gxfiryk,gxf76rx,gxfo1la,gxeqolt,gxfnimq,gxf4g3n,gxfmzo6,gxfca3d,gxfspga,gxf9zxd,gxftb8l,gxfjay4,gxeifji,gxekjeb,gxf8f1x,gxf2z3q,gxf70hm,gxfravz,gxfpz5s,gxfpyff,gxfifd0,gxfox8m,gxfoj33,gxfmn2h,gxf4wnf,gxfk6ku,gxfifdf,gxfoqxg,gxfslzq,gxf8rpz,gxfk6l5,gxfflhr,gxfo7z3,gxfn61x,gxf4dpi,gxfmzqi,gxfpzad,gxfqbu8,gxfhq41,gxejb77,gxf8y2c,gxf8rqt,gxf8rr1,gxfoxa7,gxfnvcw,gxfpjor,gxfleva,gxf4wp5,gxfoqyy,gxfqoi4,gxftgbb,gxfmtg0,gxfqbv5,gxfrwr6,gxf8lg7,gxfo1p5,gxfqbvi,gxfsm1s,gxfsm1t,gxf64yv,gxf669z,gxfthnx,gxf94fk,gxfrk4y,gxfmzsj,gxfgblg,gxffyye,gxfsypk,gxfavnd,gxfrj2f,gxfp9z2,gxfo1qb,gxfm3dt,gxfqi89,gxfk0ct,gxfsm33,gxfju1e,gxf6bbn,gxf1xas,gxfmzti,gxfnvfb,gxfl8m0,gxfi95l,gxfbemy,gxf7w7x,gxf7w7y,gxf82jj,gxeqhly,gxf650m,gxfnch3,gxfbrag,gxfmnek,gxfs358,gxftk9m,gxf82jz,gxf47ht,gxfqfye,gxfmtiv,gxfokqg,gxfq2nz,gxfsyrg,gxf9h4w,gxfsyrm,gxfovpz,gxfdc7a,gxfgoav,gxf7w97,gxfqbym,gxf35lb,gxfs0se,gxfnitt,gxfdc7n,gxfoefo,gxf8b72,gxfnity,gxf88wq,gxf47j1,gxfo84e,gxfniu7,gxf534y,gxfitej,gxfniuc,gxfapew,gxfthrd,gxfrqjx,gxfsm5q,gxfhq9c,gxfniut,gxf70os,gxfjb5p,gxepmwu,gxfmam7,gxfjhhc,gxfo85d,gxflxza,gxfncjs,gxf653d,gxfoq7r,gxftizm,gxfnivi,gxfthsi,gxfor4k,gxf2zbt,gxfh10a,gxfppm1,gxfhwm5,gxfapgi,gxf8y8z,gxfrrho,gxfrdye,gxf94pd,gxf4wvj,gxewnsg,gxfkou6,gxf8rxy,gxfsm81,gxf6hs2,gxfb24j,gxf59na,gxf9gap,gxfbers,gxfs39l,gxfrpt3,gxfjhjg,gxfrg76,gxfn6a6,gxfo87j,gxf8ln7,gxftbit,gxfoxhy,gxf8ryw,gxfqie1,gxfk6u3,gxflqrq,gxfs9lz,gxfbeso,gxfowon,gxfo88f,gxfkptf,gxfoxit,gxfkw55,gxf8rzx,gxftbjy,gxfniyr,gxfmaq1,gxf3op7,gxfqc3w,gxfqb4d,gxfrkcx,gxf7wes,gxfncnr,gxf7q3e,gxfrx0c,gxf7q3h,gxf70td,gxfqge3,gxfnco5,gxftcos,gxfczqi,gxfbbqf,gxf5skv,gxfqos1,gxf71xa,gxfkpvb,gxevym2,gxf8s1n,gxfncos,gxfpmv2,gxf70u7,gxft12m,gxfp6vt,gxfeebr,gxfqz70,gxfg5jf,gxeu7f5,gxfsmc2,gxfqc5w,gxfpa8l,gxfncpi,gxfpmvt,gxe9hjv,gxfqiho,gxfd63i,gxfs3dt,gxfn6ec,gxfqgee,gxf9x69,gxfqc6h,gxfifqk,gxfmnfx,gxfmqlv,gxfqe17,gxfpzjy,gxft0bu,gxf5sn6,gxfbrk6,gxf65af,gxfhwso,gxfmatm,gxfqx6r,gxfoxn4,gxfgi8h,gxfqc7n,gxfo8d0,gxfbrkq,gxfbrkr,gxfbrks,gxfoeot,gxf7win,gxfo21y,gxf8s4p,gxeoocd,gxfkpyr,gxfbl9z,gxf59q0,gxfim4a,gxfbrlq,gxe6mc5,gxfmtts,gxfmttw,gxfkwaz,gxfn6h8,gxfnj4e,gxfqc9i,gxf6bo9,gxekir3,gxfswjj,gxfk71a,gxfs3hb,gxf2zkz,gxfkdd1,gxf41if,gxfti22,gxfe84r,gxf70z1,gxflrxr,gxfn06o,gxf8lv7,gxfqcac,gxfqjku,gxfi37d,gxfqgf3,gxfsmgu,gxfkdds,gxf7wle,gxfkjpi,gxfoxqf,gxfqimj,gxfft1o,gxf7jyp,gxfr1le,gxfjbh0,gxfl90a,gxfoxr4,gxfgc0y,gxfowsb,gxfnj6z,gxerxf1,gxfcnam,gxf9hin,gxf5g4w,gxfiyuu,gxf6upj,gxfgv09,gxedcsc,gxfjo5d,gxfnj7q,gxfqa90,gxfqvbe,gxfisjv,gxforgx,gxf4e8k,gxf7120,gxfk74s,gxfrx9a,gxfq1ol,gxf8s9v,gxf94x0,gxf65gl,gxfs56m,gxfncx9,gxewxgd,gxfoxtd,gxfeyes,gxfoxtp,gxfer7m,gxfqcei,gxfbyyg,gxetidy,gxfmtzr,gxfqvdk,gxfism1,gxfsml7,gxfp464,gxfb8t9,gxfqcf3,gxfqcf4,gxfmu04,gxfncyv,gxf3620,gxfpug4,gxfmu0d,gxfncz6,gxfq4zo,gxfiyye,gxfi3co,gxfsanp,gxfn3ai,gxfkdj6,gxfiyyu,gxf8scn,gxf4808,gxfn6o9,gxe9570,gxfteul,gxfl95d,gxfmhea,gxf8sd0,gxfctqt,gxf6fus,gxf8sd7,gxfhx2b,gxfo2av,gxfpn6w,gxfe8bt,gxfn6pb,gxf7qgg,gxfqa4o,gxfbf76,gxfcng5,gxfnjcm,gxforlk,gxfn6pm,gxfisoz,gxferb9,gxefah6,gxfcngt,gxfi9qm,gxfqci7,gxfo2c3,gxf5dxq,gxf2we1,gxfnw0t,gxf8sf4,gxf6vo0,gxf717q,gxfg5wo,gxf835a,gxfq67l,gxfo2d1,gxf835j,gxfnvr3,gxfs8kh,gxfqp6m,gxf5a0v,gxf7q80,gxf8sg3,gxfb8xz,gxfp4ax,gxfolem,gxflpsn,gxf4efg,gxeolji,gxfhsml,gxfk103,gxfo2dz,gxel950,gxf9zux,gxfi122,gxf9o2m,gxf9540,gxf81tc,gxfp05u,gxfqw9n,gxf4961,gxfawbs,gxfadd6,gxftict,gxfnw33,gxf484z,gxf4xf8,gxfimgl,gxfnnji,gxftid6,gxfoqhb,gxfmm2r,gxfqikr,gxfn6tg,gxeys7b,gxeisng,gxfnjgr,gxf7dxp,gxfjuq7,gxfctw1,gxf4ksy,gxfmnv8,gxfqixi,gxfimhj,gxfi3ix,gxfctwe,gxfmb8m,gxfmu7i,gxfsmsw,gxfnw4x,gxf5zea,gxf7b1g,gxfawdw,gxflsai,gxf486z,gxfe8ho,gxfk7el,gxfbfcu,gxffn2a,gxfq33q,gxfjurs,gxf4uzw,gxfowsp,gxf3ix9,gxfc25p,gxf8sk1,gxfsllz,gxf8t7y,gxfnpue,gxelquw,gxfnw66,gxfcnms,gxerrfp,gxf83ae,gxftig8,gxfrvau,gxfr8a6,gxf8skz,gxf89md,gxf6v1z,gxfp1x0,gxfr1z2,gxf958l,gxfqdbr,gxfjxk2,gxfqb7y,gxf8yxi,gxf5i0w,gxftihq,gxfp411,gxf60pr,gxfmnz5,gxf6v36,gxfptr8,gxfnd9n,gxfo3yp,gxfqcq9,gxf8smq,gxfrjgz,gxf6igo,gxfbs3e,gxfptrv,gxfrxml,gxf71fi,gxfgx1x,gxforuu,gxfqmw4,gxfqvpm,gxftij1,gxfoxpp,gxfmuca,gxf6v4r,gxfr21o,gxfdn2d,gxf7x2d,gxforvv,gxfslel,gxf8som,gxf8z0j,gxfb2v9,gxfo8xz,gxfk1sc,gxfptu9,gxfigcy,gxfhr2w,gxfermh,gxfnwbh,gxft7vu,gxfbs67,gxf6c82,gxf95d0,gxft8z9,gxf8sq3,gxfnjov,gxf7e5v,gxfmhro,gxfptvb,gxfq0pg,gxf305a,gxfit1c,gxfgiv5,gxfl37n,gxfqcue,gxf8sqv,gxfqvt7,gxezo26,gxfgp73,gxfsm1d,gxf7kia,gxf8sr7,gxfoyac,gxfqvtp,gxf8g4g,gxf9odf,gxewomg,gxf6v8t,gxfqcvi,gxft6hp,gxftinl,gxfaqb9,gxfrrga,gxfqdcv,gxfc4w2,gxf65z9,gxfk1c7,gxf8sso,gxfnwej,gxf8sss,gxfnwel,gxfn74e,gxekki7,gxf65zo,gxfn74p,gxftcd7,gxf3cv0,gxfpadt,gxf48h4,gxfe2g9,gxfd6uk,gxfqcxc,gxfdd6a,gxfndh0,gxfieef,gxfnwfw,gxfmbk2,gxf5zpf,gxfn761,gxfk1e2,gxfcnwt,gxfn768,gxfnwgh,gxfrnit,gxfra0z,gxf7eae,gxfo93r,gxff4ex,gxfo2sc,gxfo93x,gxfo2se,gxfk404,gxfqplu,gxf96yu,gxfs0ny,gxfa7fr,gxfo0lr,gxfsn56,gxfey3v,gxfphd8,gxfjv3j,gxflsmq,gxfqcz7,gxfsn5h,gxfq0c7,gxfpu0q,gxfqczf,gxe8a4f,gxfbscj,gxfn77o,gxf45e5,gxfq71z,gxfn3du,gxfertd,gxfg6e7,gxfp1yz,gxfdjl2,gxf71pj,gxfrrl7,gxfbsdo,gxfbm25,gxfsh8d,gxfr8mo,gxfey5v,gxev3wa,gxfoltn,gxfmbni,gxfndkv,gxfit8m,gxfpu2v,gxft66g,gxf6vex,gxfg7tj,gxfnjwt,gxfr1m5,gxer60z,gxfmbo9,gxfrkkv,gxf7ee4,gxfoe2t,gxfo97m,gxf9bxf,gxfo2w4,gxfnjxl,gxfek9e,gxfohyq,gxfsn8x,gxfchpu,gxffaut,gxeigtz,gxf4rlm,gxf7r25,gxfr2da,gxf6667,gxfq4yo,gxfr2de,gxfs6n6,gxfoxrq,gxfndmu,gxfndmx,gxf4xxm,gxfmuoc,gxfnjym,gxf4rm9,gxf95n8,gxf4ezb,gxexmuy,gxf6672,gxfitb3,gxfoyjk,gxf8t0k,gxf7krp,gxforgc,gxfn10q,gxfoyjw,gxf6p6d,gxf95o9,gxfcwsf,gxfm0fe,gxfhyz9,gxfbm67,gxf24u9,gxfpl0o,gxfnqbo,gxfkqva,gxfrqwx,gxft7e6,gxf48p8,gxfbnhq,gxfn7do,gxe6pel,gxfol8p,gxfjoyo,gxfpnvm,gxfqd5v,gxfoylr,gxf8a40,gxfkkl0,gxfnk1i,gxfc25o,gxfrrr0,gxf7ku6,gxftcn7,gxfnash,gxfosay,gxft6bv,gxfrpsx,gxfqhfn,gxfsndb,gxfrf4h,gxfndqt,gxf6qih,gxffty0,gxfn7fd,gxfqpui,gxfk1nf,gxfr2hr,gxffhb6,gxftgmx,gxerrz8,gxfc292,gxfbm99,gxfrrsg,gxfn7g1,gxfigs5,gxfqjr1,gxfb9mh,gxfq0l6,gxfeyd7,gxflsvw,gxf9ytu,gxf8ghs,gxf9v2a,gxfiah1,gxfpnyf,gxex1mx,gxf95sf,gxfnk42,gxfqhmr,gxfopda,gxf2nx5,gxevzq4,gxftcpq,gxfnng0,gxfpwkb,gxfndt3,gxfe87w,gxf7r8x,gxf8t6a,gxfjvec,gxevzqt,gxfqpx2,gxf6s7h,gxfnws9,gxf83wd,gxf5h36,gxf8t6v,gxfn16w,gxf6cp7,gxf36x9,gxf3pw0,gxfqw9e,gxfqdas,gxfh8lx,gxfr2l5,gxevahm,gxf6vob,gxfbg0t,gxf7200,gxf6voi,gxfth3l,gxfa1ks,gxfpucs,gxfk1rh,gxfnk6m,gxf5awt,gxft6gg,gxfmi9e,gxfndv7,gxfpud3,gxfp52w,gxf7kzd,gxfbz0c,gxfoyrh,gxfqpz2,gxfmuww,gxelzi9,gxflzb6,gxeo9oj,gxfqdc4,gxfr2mh,gxfjvgr,gxfnwuk,gxfqdcd,gxfq2wd,gxfbspg,gxf7pl5,gxfsniv,gxf8gm2,gxfb9qz,gxfnwv1,gxfmuxr,gxfoexh,gxflayd,gxfnzrx,gxem5uz,gxemc6n,gxfhlbo,gxfialx,gxfdjxz,gxfpii1,gxf8myl,gxewp4y,gxf7xoj,gxfoyti,gxer96v,gxfigy4,gxf6vro,gxfl3rq,gxf3713,gxfq0rd,gxfn7mi,gxf7xp7,gxf66hp,gxfcuou,gxf8780,gxfnwx0,gxf5h7x,gxfsnlc,gxezib5,gxfmv04,gxfobpa,gxfla47,gxfndyx,gxfpphj,gxeo9rw,gxf4lml,gxfrybm,gxfsnm1,gxf7xqj,gxfd7d9,gxf7vn1,gxfqjrk,gxf4901,gxf3wd3,gxfmqtg,gxfo9lm,gxf4fbu,gxf6vtq,gxf4yaq,gxfne03,gxfr2qs,gxfqdgm,gxfqdgr,gxfcbsf,gxf8zp0,gxft6m0,gxf8gqj,gxfr2ri,gxf7ldr,gxfoanq,gxf42py,gxfnqo8,gxfqq4p,gxfhy2y,gxf7yt4,gxfq76c,gxfspuj,gxf4fdk,gxf8aft,gxf8tei,gxerdh6,gxfp59a,gxfs4ps,gxfnkdf,gxfphwk,gxfesbq,gxfne1z,gxfryeh,gxf8n3e,gxf8tf0,gxffnxq,gxfdgvc,gxfg0ky,gxfbz7d,gxfg0l6,gxfth4v,gxfk1z0,gxf8tfh,gxfr94v,gxfbsw1,gxfombm,gxf7xtw,gxffnyf,gxffhmx,gxfsnpn,gxfmih8,gxflzim,gxft85t,gxfbswh,gxfr95e,gxfn7rn,gxetpuc,gxft6ol,gxfefpz,gxfkemw,gxfn7ru,gxfk4fz,gxf7xul,gxffnz4,gxfnx2a,gxft8pn,gxfih48,gxf66ne,gxfhy5p,gxfkkz3,gxft6w3,gxfrs51,gxfnojt,gxfla9k,gxfl3y4,gxflt8f,gxfsfqx,gxfp45z,gxfsnrf,gxfddu6,gxfk21b,gxfn7tc,gxfd175,gxeu2ja,gxfiqih,gxftjdl,gxfdsa2,gxfl1qn,gxf6vz1,gxf8gv6,gxf30sb,gxfqq91,gxf8ajt,gxf7xwq,gxf378u,gxfpoc0,gxfhrw3,gxfsnsk,gxfbszb,gxfr2wp,gxffuda,gxfl404,gxfk8ee,gxf8493,gxfn7uw,gxfjpft,gxfar2i,gxfn1jf,gxftd3g,gxfiavi,gxfn3hp,gxfmv80,gxf7ezc,gxft6sc,gxf8tk1,gxf9cis,gxfgjoq,gxfqcfm,gxevnhr,gxffhrl,gxf33y1,gxe903d,gxf8tkq,gxfi06t,gxfbmps,gxfhry9,gxfq7d6,gxfd7m6,gxf44u0,gxfthmd,gxfqdp3,gxf0kig,gxfpoey,gxf9ivv,gxfpuqk,gxf72e5,gxfa2p1,gxfhfc1,gxf9iw3,gxf7ld0,gxe6pyf,gxf6d48,gxft73p,gxfd5bb,gxf84r5,gxf6w33,gxfl439,gxf6wx5,gxfdwxl,gxfn7y5,gxf5q8w,gxeq7lt,gxfr9c2,gxf386j,gxfmvb8,gxfqdqm,gxfbmjc,gxfl4xa,gxf726x,gxfr9ct,gxfkxsw,gxfg74z,gxfoz6s,gxftd7p,gxfq7fq,gxfn1nr,gxfpoh4,gxfpusq,gxfs3nr,gxf7lf5,gxfcc3b,gxfn7zs,gxfde0p,gxfde0q,gxfovrz,gxfrfp9,gxfagqk,gxfpw83,gxfmipv,gxfbt52,gxfk8jr,gxftjkh,gxf6pub,gxfgdhw,gxfkejz,gxfhydy,gxflzrs,gxf49cr,gxexl5o,gxfnqzk,gxfo4e3,gxeufdw,gxf7f51,gxfmnpt,gxf5hm2,gxf3753,gxfr33h,gxfdkdr,gxfb3w4,gxf7lh1,gxfr9fb,gxfar96,gxfpuju,gxfp5ku,gxf6w73,gxfk8li,gxez62v,gxfm3dv,gxfnkpe,gxftdas,gxf3k45,gxfnxco,gxfbmvv,gxfbgkc,gxfbc0q,gxfqduo,gxfq7j5,gxfnr1g,gxfq17q,gxfln6w,gxf8h49,gxfsbe3,gxfnkq4,gxfqk6l,gxfjvzl,gxe9cxg,gxfqdvb,gxfnxdm,gxfpwnz,gxfsoqy,gxf7y67,gxfr9hd,gxfnef7,gxfnefb,gxfr362,gxfhyhh,gxfqdw6,gxfihg8,gxfjd25,gxfmvhe,gxfd7ty,gxfozc7,gxfp5a4,gxfbzl8,gxfbmy6,gxfmvhs,gxfrb8o,gxfniab,gxf8rbo,gxfg0zh,gxfnksf,gxfa8e8,gxf37k4,gxfqk93,gxfbabu,gxf4m4t,gxfm68g,gxe6jv5,gxfr382,gxfbac9,gxfi9pr,gxfnxge,gxetjxb,gxfsbhf,gxfnxgo,gxf72nd,gxfskjr,gxfqdyn,gxevnsh,gxfiu5u,gxfnom6,gxfneig,gxfneij,gxf6wcd,gxe796m,gxfmvk4,gxfqkat,gxfehtj,gxfmvkc,gxfsorm,gxfa24v,gxfpopc,gxfqkb5,gxfk8r6,gxflnbr,gxfos6y,gxetwm2,gxfnr6m,gxfn887,gxf84mh,gxf8twr,gxf84ml,gxfsbjk,gxf3wxd,gxfsuib,gxfcozb,gxfcozd,gxfqe0t,gxfihku,gxexf2g,gxfomc7,gxeon0t,gxfnxji,gxf8txt,gxfqchv,gxeww44,gxe8oeu,gxfbaft,gxfisp1,gxf4skk,gxf84o5,gxfemjq,gxfi4z0,gxfihm9,gxf83x9,gxfozhy,gxfa27v,gxflars,gxfposp,gxfjrb3,gxfr9ox,gxf8tzo,gxfij7y,gxfslmh,gxf8no9,gxfp9on,gxfbtgd,gxfkf6n,gxfcvwb,gxft78l,gxfk2jr,gxfqx2g,gxfma2k,gxfryzv,gxfrnwy,gxfa29a,gxf9iqw,gxfot82,gxf5hwz,gxfnenp,gxfhm2e,gxfs5br,gxepipk,gxfsum4,gxfeyp6,gxfomwu,gxfgv6d,gxf7s3m,gxfbn5v,gxf8u12,gxf677t,gxf5tmm,gxfnxn2,gxfr9qn,gxfnxn5,gxesoih,gxfjpy3,gxfo3z3,gxf7s4g,gxf5hy9,gxfbtia,gxfltsz,gxf6dk7,gxfp2j3,gxfnl0s,gxf7ygf,gxfn80o,gxff5rl,gxe6rxa,gxfjds9,gxfsoca,gxfbn7g,gxf679b,gxfhyrk,gxf8b42,gxfh9hf,gxf8u2t,gxfm05i,gxf60xz,gxfp8hj,gxemqme,gxfq7v3,gxfqe6r,gxf3e54,gxfn8ex,gxf67a2,gxfneqm,gxfqmip,gxeklsx,gxfnxpf,gxfhysk,gxfra8h,gxfomzw,gxfner2,gxfner4,gxfomau,gxfon06,gxfogop,gxfn8fw,gxfs2ol,gxf8u4g,gxftdoh,gxf8hhe,gxfnxqb,gxfnl39,gxfet1p,gxf7lw3,gxfs0m5,gxfotco,gxf8u55,gxfnl3v,gxfp5zx,gxfh38f,gxfoo0d,gxfay07,gxf7yjy,gxelhh1,gxf6qba,gxftk1k,gxetwvt,gxfd4cq,gxf6ywo,gxftaxs,gxfnete,gxfg7nr,gxfnxs8,gxfi572,gxevyz2,gxfii1f,gxfnl5g,gxfqead,gxfmvvd,gxfl4nv,gxf67do,gxfm6lf,gxf8u7d,gxf8hkc,gxf6wod,gxf6woh,gxf612r,gxffoqf,gxevbi5,gxfp62p,gxfd891,gxfgkcp,gxfqcwc,gxf3wif,gxfbaq4,gxfd1kt,gxfk2ry,gxfjq4x,gxfpp1v,gxfth8l,gxfk93u,gxfa8t9,gxfq80u,gxffv35,gxfefrv,gxfr3mu,gxfn0g7,gxeyhbg,gxfa2i5,gxfnxv2,gxf7egr,gxfnewg,gxfdelv,gxf9jjp,gxflu0n,gxfn5px,gxfam8a,gxfrr4b,gxfrvc1,gxfalhm,gxfg1g0,gxf9e8n,gxf6y32,gxf5bvi,gxfsokj,gxf7sdi,gxfiulo,gxfrsz1,gxesos2,gxfn8mr,gxfk2us,gxfqeet,gxfhsom,gxfl1in,gxffo16,gxfdkzj,gxfo0a3,gxfib82,gxehg92,gxfb4hz,gxfk2vd,gxfp0fn,gxezd01,gxealqq,gxfkyhf,gxf6wt0,gxf836h,gxfg4w4,gxfqxek,gxfsom7,gxfq1sx,gxet7s4,gxfoxhl,gxfk2wa,gxf1tik,gxf6wtq,gxfmntp,gxfrzcg,gxfoh54,gxf6wtu,gxfioc3,gxfqvku,gxfszdq,gxf6dvc,gxf9709,gxftk8r,gxfp39m,gxf90ow,gxfnlc2,gxf5byb,gxfdepw,gxfsnom,gxf5t0h,gxfoqmk,gxfjqa3,gxf6wup,gxfdfz7,gxfnf13,gxfbavu,gxfotln,gxf5om5,gxfn8pq,gxeb4rm,gxfm0h1,gxf5rja,gxfqei4,gxfsouq,gxf7tpk,gxf79iu,gxfmu5d,gxfc06w,gxf5ibe,gxftgtn,gxfjewa,gxfpr6d,gxf3r45,gxfo6m9,gxf7ytn,gxfegpb,gxf972s,gxfo52r,gxfi5g8,gxf6wws,gxffo1y,gxfqypd,gxf90rt,gxfinif,gxeh3qm,gxfgx81,gxf4mr9,gxf6wxj,gxfpqgk,gxfii4a,gxfny2j,gxfn3m1,gxfdrgg,gxfi5hf,gxfiog5,gxfn2h3,gxfra6g,gxfqc7v,gxf7gzy,gxf8o5v,gxfd26t,gxf79lj,gxf7fx5,gxf8uhm,gxfoopb,gxfqelf,gxezw4n,gxf8ui0,gxf8bjl,gxf67oz,gxeh3sk,gxfetfa,gxeuprd,gxf79mh,gxfbb0b,gxfpj0d,gxf5if3,gxfqem9,gxf7ma1,gxfrt6y,gxfr3wv,gxfk9e9,gxfr1vn,gxfmw7q,gxfonff,gxfr3xd,gxfnf6u,gxf6uyv,gxfii7g,gxfk9f1,gxfqxm6,gxfocbs,gxfp6eo,gxfg4xf,gxfsotw,gxflho9,gxfi5kw,gxf8o94,gxf8ukq,gxfayff,gxfny6k,gxf7sni,gxfs5w1,gxfnf82,gxfte51,gxflhp6,gxfcd0d,gxfdrkw,gxf7yzn,gxf73dy,gxfrwfw,gxfl52y,gxfhmnv,gxfnf9b diff --git a/tests/integration/test_sessions.py b/tests/integration/test_sessions.py index 284fff8..237fe9f 100644 --- a/tests/integration/test_sessions.py +++ b/tests/integration/test_sessions.py @@ -2,7 +2,6 @@ import logging from json import dumps -import aiofiles import pytest import asyncprawcore @@ -111,7 +110,7 @@ async def test_request__created( self, script_authorizer: asyncprawcore.ScriptAuthorizer ): session = asyncprawcore.Session(script_authorizer) - response = await session.request("PUT", "/api/v1/me/friends/spez", data="{}") + response = await session.request("PUT", "/api/v1/me/friends/spez", data={}) assert "name" in response async def test_request__forbidden( @@ -201,9 +200,7 @@ async def test_request__post__with_files( ): session = asyncprawcore.Session(script_authorizer) data = {"upload_type": "header"} - async with aiofiles.open( - "tests/integration/files/white-square.png", "rb" - ) as fp: + with open("tests/integration/files/white-square.png", "rb") as fp: files = {"file": fp} response = await session.request( "POST", @@ -296,7 +293,7 @@ async def test_request__too_large( ): session = asyncprawcore.Session(script_authorizer) data = {"upload_type": "header"} - async with aiofiles.open("tests/integration/files/too_large.jpg", "rb") as fp: + with open("tests/integration/files/too_large.jpg", "rb") as fp: files = {"file": fp} with pytest.raises(asyncprawcore.TooLarge) as exception_info: await session.request( @@ -334,8 +331,8 @@ async def test_request__uri_too_long( ): session = asyncprawcore.Session(readonly_authorizer) path_start = "/api/morechildren?link_id=t3_n7r3uz&children=" - async with aiofiles.open("tests/integration/files/comment_ids.txt") as fp: - ids = await fp.read() + with open("tests/integration/files/comment_ids.txt") as fp: + ids = fp.read() with pytest.raises(asyncprawcore.URITooLong) as exception_info: await session.request("GET", (path_start + ids)[:9996]) assert exception_info.value.response.status == 414 @@ -347,10 +344,7 @@ async def test_request__with_insufficient_scope(self, trusted_authenticator): await authorizer.refresh() session = asyncprawcore.Session(authorizer) with pytest.raises(asyncprawcore.InsufficientScope): - await session.request( - "GET", - "/api/v1/me", - ) + await session.request("GET", "/api/v1/me") async def test_request__with_invalid_access_token(self, untrusted_authenticator): authorizer = asyncprawcore.ImplicitAuthorizer( diff --git a/tests/integration/utils.py b/tests/utils.py similarity index 99% rename from tests/integration/utils.py rename to tests/utils.py index 4a745ea..aa7fc65 100644 --- a/tests/integration/utils.py +++ b/tests/utils.py @@ -1,5 +1,5 @@ """Pytest utils for integration tests.""" - +from __future__ import annotations import json import os from datetime import datetime