├── .gitignore ├── .travis.yml ├── LICENSE ├── Makefile ├── README.rst ├── backward ├── __init__.py ├── backends │ ├── __init__.py │ ├── base.py │ ├── cookie.py │ └── session.py ├── decorators.py ├── helpers.py ├── middleware.py ├── models.py ├── settings.py ├── tests │ ├── __init__.py │ ├── models.py │ ├── settings.py │ ├── templates │ │ └── registration │ │ │ └── login.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── urls.py ├── utils.py └── views.py ├── docs └── backward.graffle ├── manage.py ├── setup.py └── tox.ini /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.pot 3 | *.pyc 4 | local_settings.py 5 | .coverage 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: 3 | - 2.7 4 | install: pip install tox --use-mirrors 5 | script: tox 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Florent Messa 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | pep8: 2 | flake8 backward --ignore=E501,E127,E128,E124 3 | 4 | test: 5 | coverage run --branch --source=backward manage.py test backward 6 | coverage report --omit=backward/test* 7 | 8 | release: 9 | python setup.py sdist register upload -s 10 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | django-backward 2 | =============== 3 | 4 | .. image:: https://secure.travis-ci.org/thoas/django-backward.png?branch=master 5 | :alt: Build Status 6 | :target: http://travis-ci.org/thoas/django-backward 7 | 8 | A Django application to store your previous history and action using differents 9 | backends. 10 | 11 | With this application you will be able to redirect your users to their previous 12 | location when they tried to access a page where the login is required. 13 | 14 | .. image:: http://cl.ly/image/371E2R0L3n2h/backward_redirect.png 15 | 16 | You will be also able to record previous action which needed login required. 17 | 18 | For example, if your user is not logged in your application and try to execute 19 | an action which required authentication (e.g.: an user clicks on a button to follow another user), 20 | this application will record parameters (even on POST) and execute the last action 21 | when your user will be successfully logged. 22 | 23 | .. image:: http://cl.ly/image/3B2E0H2M0j1C/backward_action.png 24 | 25 | Thanks to `oleiade `_ for the name. 26 | 27 | Installation 28 | ------------ 29 | 30 | 1. Either check out the package from GitHub_ or it pull from a release via PyPI :: 31 | 32 | pip install django-backward 33 | 34 | 35 | 2. Add ``backward.middleware.BackwardMiddleware`` to your ``MIDDLEWARE_CLASSES`` :: 36 | 37 | MIDDLEWARE_CLASSES = ( 38 | 'backward.middleware.BackwardMiddleware', 39 | ) 40 | 41 | 3. Add ``backward.urls`` to your ``urls.py`` :: 42 | 43 | # urls.py 44 | 45 | from django.conf.urls import patterns, url, include 46 | 47 | urlpatterns = patterns( 48 | '', 49 | 50 | url(r'^backward/', include('backward.urls')), 51 | ) 52 | 53 | 4. Set ``settings.LOGIN_REDIRECT_URL`` as mentioned in your ``urls.py`` for example :: 54 | 55 | # settings.py 56 | 57 | LOGIN_REDIRECT_URL = '/backward/login/redirect/' 58 | 59 | 5. Configure your `Session engine `_ if you are using the default backend 60 | 61 | 6. Use the decorator ``backward.decorators.login_required`` if your views need authentication 62 | 63 | 64 | Configuration 65 | ------------- 66 | 67 | ``BACKEND_BACKEND_CLASS`` 68 | ......................... 69 | 70 | The backend used to store information. 71 | 72 | The default backend class is ``backward.backends.session.SessionBackend``. 73 | 74 | ``backwards.backends.session.SessionBackend`` 75 | ............................................. 76 | 77 | Store information in ``request.session`` using your `Session engine `_ 78 | 79 | ``backwards.backends.session.CookieBackend`` 80 | ............................................ 81 | 82 | Store information in ``request.COOKIES``, you can configure a few things: 83 | 84 | - ``BACKWARD_MAX_AGE``: the age used to set an expiration date to the cookie 85 | - ``BACKWARD_COOKIE_DOMAIN``: the domain name used for the cookie 86 | - ``BACKWARD_COOKIE_SECURE``: if this is set to True, the cookie will be marked as **secure**, which means browsers may ensure that the cookie is only sent under an HTTPS connection. 87 | 88 | .. _GitHub: https://github.com/thoas/django-backward 89 | -------------------------------------------------------------------------------- /backward/__init__.py: -------------------------------------------------------------------------------- 1 | version = (0, 3, 6) 2 | 3 | __version__ = '.'.join(map(str, version)) 4 | -------------------------------------------------------------------------------- /backward/backends/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoas/django-backward/8a544d450bce040877d86776ef696e0f76960692/backward/backends/__init__.py -------------------------------------------------------------------------------- /backward/backends/base.py: -------------------------------------------------------------------------------- 1 | class Backend(object): 2 | def get_url_redirect(self, request): 3 | raise NotImplementedError 4 | 5 | def save_url_redirect(self, request, response): 6 | raise NotImplementedError 7 | 8 | def delete_next_action(self, request): 9 | raise NotImplementedError 10 | 11 | def run_next_action(self, request): 12 | raise NotImplementedError 13 | 14 | def get_next_action(self, request): 15 | raise NotImplementedError 16 | 17 | def save_next_action(self, request, data): 18 | raise NotImplementedError 19 | -------------------------------------------------------------------------------- /backward/backends/cookie.py: -------------------------------------------------------------------------------- 1 | try: 2 | import cPickle as pickle 3 | except ImportError: 4 | import pickle 5 | 6 | from .base import Backend 7 | 8 | from datetime import datetime, timedelta 9 | 10 | from backward import settings 11 | 12 | 13 | class CookieBackend(Backend): 14 | def get_url_redirect(self, request): 15 | return request.COOKIES.get(settings.URL_REDIRECT_NAME, None) 16 | 17 | def save_url_redirect(self, request, response, url_redirect): 18 | self.set_cookie(request, response, url_redirect, cookie_name=settings.URL_REDIRECT_NAME) 19 | 20 | def get_next_action(self, request): 21 | if settings.NEXT_ACTION_NAME in request.COOKIES: 22 | return pickle.loads(request.COOKIES[settings.NEXT_ACTION_NAME]) 23 | 24 | return {} 25 | 26 | def save_next_action(self, request, response, data): 27 | self.set_cookie(request, 28 | response, 29 | pickle.dumps(data, pickle.HIGHEST_PROTOCOL), 30 | cookie_name=settings.NEXT_ACTION_NAME) 31 | 32 | def delete_next_action(self, request, response): 33 | response.delete_cookie(settings.NEXT_ACTION_NAME, domain=self.get_cookie_domain(request)) 34 | 35 | def set_cookie(self, request, response, value, cookie_name): 36 | max_age = settings.COOKIE_MAX_AGE 37 | 38 | expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), 39 | "%a, %d-%b-%Y %H:%M:%S GMT") 40 | 41 | try: 42 | response.set_cookie(cookie_name, 43 | value, 44 | max_age=max_age, 45 | expires=expires, 46 | domain=self.get_cookie_domain(request), 47 | secure=settings.COOKIE_SECURE or None) 48 | except UnicodeEncodeError: 49 | return False 50 | 51 | return True 52 | 53 | def get_cookie_domain(self, request): 54 | cookie_domain = settings.COOKIE_DOMAIN 55 | 56 | if cookie_domain and cookie_domain.startswith('.'): 57 | host = '.'.join(request.get_host().split('.')[-2:]) 58 | 59 | cookie_domain = cookie_domain % { 60 | 'host': host 61 | } 62 | 63 | return cookie_domain 64 | -------------------------------------------------------------------------------- /backward/backends/session.py: -------------------------------------------------------------------------------- 1 | try: 2 | import cPickle as pickle 3 | except ImportError: 4 | import pickle 5 | 6 | from .base import Backend 7 | 8 | from backward import settings 9 | 10 | 11 | class SessionBackend(Backend): 12 | def get_url_redirect(self, request): 13 | return request.session.get(settings.URL_REDIRECT_NAME, None) 14 | 15 | def save_url_redirect(self, request, response, url_redirect): 16 | request.session[settings.URL_REDIRECT_NAME] = url_redirect 17 | 18 | def get_next_action(self, request): 19 | if settings.NEXT_ACTION_NAME in request.session: 20 | return pickle.loads(request.session[settings.NEXT_ACTION_NAME]) 21 | 22 | return {} 23 | 24 | def save_next_action(self, request, response, data): 25 | request.session[settings.NEXT_ACTION_NAME] = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) 26 | 27 | def delete_next_action(self, request, response): 28 | try: 29 | del request.session[settings.NEXT_ACTION_NAME] 30 | except KeyError: 31 | return False 32 | 33 | return True 34 | -------------------------------------------------------------------------------- /backward/decorators.py: -------------------------------------------------------------------------------- 1 | from functools import wraps 2 | 3 | from django.contrib import messages 4 | from django.utils.decorators import available_attrs 5 | from django.http import HttpResponseRedirect 6 | 7 | 8 | def user_passes_test(test_func, login_url=None, message=None): 9 | """ 10 | Decorator for views that checks that the user passes the given test, 11 | redirecting to the log-in page if necessary. The test should be a callable 12 | that takes the user object and returns True if the user passes. 13 | """ 14 | if not login_url: 15 | from .utils import get_login_url 16 | login_url = get_login_url() 17 | 18 | def decorator(view_func): 19 | def _wrapped_view(request, *args, **kwargs): 20 | if test_func(request.user): 21 | return view_func(request, *args, **kwargs) 22 | 23 | if message is not None: 24 | messages.info(request, message, fail_silently=True) 25 | 26 | response = HttpResponseRedirect(login_url) 27 | 28 | if request.method != 'GET': 29 | from .helpers import save_next_action 30 | 31 | data = { 32 | 'action': request.META.get('PATH_INFO'), 33 | 'args': args, 34 | 'kwargs': kwargs, 35 | 'method': request.method, 36 | 'parameters': { 37 | 'POST': request.POST.urlencode() if request.POST else None, 38 | } 39 | } 40 | 41 | save_next_action(request, response, data) 42 | 43 | return response 44 | return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view) 45 | return decorator 46 | 47 | 48 | def login_required(function=None, message=None, login_url=None): 49 | """ 50 | Decorator for views that checks that the user is logged in, redirecting 51 | to the log-in page if necessary. 52 | """ 53 | actual_decorator = user_passes_test( 54 | lambda u: u.is_authenticated(), 55 | message=message, 56 | login_url=login_url 57 | ) 58 | 59 | if function: 60 | return actual_decorator(function) 61 | return actual_decorator 62 | -------------------------------------------------------------------------------- /backward/helpers.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | import logging 5 | 6 | from django.http import HttpResponseRedirect, QueryDict 7 | from django.core.urlresolvers import resolve 8 | from django.utils.encoding import smart_str 9 | 10 | from .utils import scheme, load_class 11 | 12 | from . import settings 13 | 14 | logger = logging.getLogger('backward') 15 | 16 | engine = load_class(settings.BACKEND_CLASS)() 17 | 18 | 19 | def get_url_redirect(request): 20 | return engine.get_url_redirect(request) 21 | 22 | 23 | def save_url_redirect(request, response, url_redirect): 24 | engine.save_url_redirect(request, response, url_redirect) 25 | 26 | 27 | def save_next_action(request, response, data): 28 | engine.save_next_action(request, response, data) 29 | 30 | 31 | def get_next_action(request): 32 | return engine.get_next_action(request) 33 | 34 | 35 | def delete_next_action(request, response): 36 | engine.delete_next_action(request, response) 37 | 38 | 39 | def run_next_action(request): 40 | data = None 41 | 42 | try: 43 | data = get_next_action(request) 44 | except Exception as e: 45 | logger.error(e) 46 | 47 | if not data or 'action' not in data: 48 | return False 49 | 50 | try: 51 | view, view_args, view_kwargs = resolve(data['action']) 52 | except Exception as e: 53 | logger.error(e) 54 | 55 | return False 56 | 57 | args = data.get('args', None) or [] 58 | 59 | kwargs = data.get('kwargs', None) or {} 60 | kwargs['data'] = data 61 | 62 | if 'method' in data: 63 | request.method = data['method'] 64 | 65 | parameters = data.get('parameters', None) or {} 66 | 67 | for key, values in parameters.items(): 68 | setattr(request, key, QueryDict(smart_str(values))) 69 | 70 | try: 71 | result = view(request, *args, **kwargs) 72 | except Exception as e: 73 | logger.error(e) 74 | 75 | return False 76 | 77 | delete_next_action(request, result) 78 | 79 | if result and isinstance(result, HttpResponseRedirect): 80 | save_url_redirect(request, result, result['Location']) 81 | 82 | if 'redirect_url' in data: 83 | response = HttpResponseRedirect(data['redirect_url']) 84 | 85 | response = HttpResponseRedirect('%s://%s%s' % (scheme(request), 86 | request.get_host(), 87 | settings.LOGIN_REDIRECT_URL)) 88 | 89 | delete_next_action(request, response) 90 | 91 | return response 92 | 93 | return result 94 | -------------------------------------------------------------------------------- /backward/middleware.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.core.urlresolvers import resolve, Resolver404 3 | 4 | from .helpers import save_url_redirect, run_next_action 5 | from .utils import scheme 6 | from . import settings 7 | 8 | 9 | class BackwardMiddleware(object): 10 | def _is_exempt(self, request): 11 | if request.is_ajax() and settings.IGNORE_AJAX: 12 | return True 13 | 14 | exemptions = settings.IGNORE_VIEWNAMES 15 | 16 | result = False 17 | 18 | path_info = request.META.get('PATH_INFO') 19 | 20 | if exemptions: 21 | try: 22 | match = resolve(path_info) 23 | except Resolver404: 24 | pass 25 | else: 26 | result = match and (match.url_name in exemptions) 27 | 28 | if result is False: 29 | for url in settings.IGNORE_URLS: 30 | if url == path_info: 31 | return True 32 | 33 | result = path_info.startswith(settings.START_IGNORE_URLS) \ 34 | or path_info.endswith(settings.END_IGNORE_URLS) 35 | 36 | return result 37 | 38 | def process_request(self, request): 39 | if request.user and request.user.is_authenticated(): 40 | result = run_next_action(request) 41 | 42 | if result: 43 | return result 44 | 45 | def process_response(self, request, response): 46 | if not self._is_exempt(request): 47 | url_redirect = '%s://%s%s' % (scheme(request), 48 | request.get_host(), 49 | request.path_info) 50 | 51 | save_url_redirect(request, response, url_redirect) 52 | 53 | return response 54 | -------------------------------------------------------------------------------- /backward/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /backward/settings.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | 3 | IGNORE_VIEWNAMES = getattr(settings, 'BACKWARD_IGNORE_VIEWNAMES', ( 4 | )) 5 | 6 | IGNORE_URLS = getattr(settings, 'BACKWARD_IGNORE_URLS', ( 7 | settings.LOGIN_REDIRECT_URL, 8 | settings.LOGIN_URL, 9 | )) 10 | 11 | if not hasattr(settings, 'BACKWARD_START_IGNORE_URLS'): 12 | START_IGNORE_URLS = ( 13 | '/favicon', 14 | '/__debug__/', 15 | ) 16 | 17 | if settings.MEDIA_URL and settings.MEDIA_URL.startswith('/'): 18 | START_IGNORE_URLS += (settings.MEDIA_URL, ) 19 | 20 | if settings.STATIC_URL and settings.STATIC_URL.startswith('/'): 21 | START_IGNORE_URLS += (settings.STATIC_URL, ) 22 | else: 23 | START_IGNORE_URLS = settings.BACKWARD_START_IGNORE_URLS 24 | 25 | END_IGNORE_URLS = getattr(settings, 'BACKWARD_END_IGNORE_URLS', ( 26 | '.xml', 27 | '.html', 28 | )) 29 | 30 | URL_REDIRECT_NAME = getattr(settings, 'BACKWARD_URL_REDIRECT_NAME', 'url_redirect') 31 | 32 | NEXT_ACTION_NAME = getattr(settings, 'BACKWARD_NEXT_ACTION_NAME', 'next_action') 33 | 34 | DEFAULT_REDIRECT_URL = getattr(settings, 35 | 'BACKWARD_DEFAULT_REDIRECT_URL', 36 | '/') 37 | 38 | LOGIN_URL = getattr(settings, 39 | 'BACKWARD_LOGIN_URL', 40 | settings.LOGIN_URL) 41 | 42 | IGNORE_AJAX = getattr(settings, 43 | 'BACKWARD_IGNORE_AJAX', 44 | True) 45 | 46 | LOGIN_REDIRECT_URL = getattr(settings, 47 | 'BACKWARD_LOGIN_REDIRECT_URL', 48 | settings.LOGIN_REDIRECT_URL) 49 | 50 | 51 | BACKEND_CLASS = getattr(settings, 52 | 'BACKWARD_BACKEND_CLASS', 53 | 'backward.backends.session.SessionBackend') 54 | 55 | COOKIE_DOMAIN = getattr(settings, 'BACKWARD_COOKIE_DOMAIN', settings.SESSION_COOKIE_DOMAIN) 56 | 57 | COOKIE_SECURE = getattr(settings, 'BACKWARD_COOKIE_SECURE', settings.SESSION_COOKIE_SECURE) 58 | 59 | COOKIE_MAX_AGE = getattr(settings, 'BACKWARD_COOKIE_MAX_AGE', 3600) 60 | -------------------------------------------------------------------------------- /backward/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoas/django-backward/8a544d450bce040877d86776ef696e0f76960692/backward/tests/__init__.py -------------------------------------------------------------------------------- /backward/tests/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoas/django-backward/8a544d450bce040877d86776ef696e0f76960692/backward/tests/models.py -------------------------------------------------------------------------------- /backward/tests/settings.py: -------------------------------------------------------------------------------- 1 | import django 2 | 3 | DATABASES = { 4 | 'default': { 5 | 'ENGINE': 'django.db.backends.sqlite3', 6 | 'NAME': '', 7 | 'USER': '', 8 | 'PASSWORD': '', 9 | 'HOST': '', 10 | 'PORT': '', 11 | } 12 | } 13 | 14 | SITE_ID = 1 15 | DEBUG = True 16 | 17 | INSTALLED_APPS = [ 18 | 'django.contrib.admin', 19 | 'django.contrib.auth', 20 | 'django.contrib.contenttypes', 21 | 'django.contrib.sessions', 22 | 'django.contrib.sites', 23 | 'backward', 24 | 'backward.tests', 25 | ] 26 | 27 | SECRET_KEY = 'blabla' 28 | 29 | ROOT_URLCONF = 'backward.tests.urls' 30 | 31 | try: 32 | from .temp import * # noqa 33 | except ImportError: 34 | pass 35 | 36 | 37 | if django.VERSION <= (1, 6): 38 | TEST_RUNNER = 'discover_runner.DiscoverRunner' 39 | 40 | 41 | MIDDLEWARE_CLASSES = ( 42 | 'django.contrib.sessions.middleware.SessionMiddleware', 43 | 'django.middleware.common.CommonMiddleware', 44 | 'django.middleware.csrf.CsrfViewMiddleware', 45 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 46 | 'django.contrib.messages.middleware.MessageMiddleware', 47 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 48 | 'backward.middleware.BackwardMiddleware', 49 | ) 50 | 51 | LOGIN_REDIRECT_URL = '/backward/login/redirect/' 52 | 53 | SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' 54 | -------------------------------------------------------------------------------- /backward/tests/templates/registration/login.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thoas/django-backward/8a544d450bce040877d86776ef696e0f76960692/backward/tests/templates/registration/login.html -------------------------------------------------------------------------------- /backward/tests/tests.py: -------------------------------------------------------------------------------- 1 | import mock 2 | 3 | from django.test import TestCase 4 | from django.contrib.auth.models import User 5 | from django.core.urlresolvers import reverse 6 | from django.conf import settings as djsettings 7 | from django.utils.encoding import smart_text 8 | 9 | try: 10 | from importlib import import_module 11 | except ImportError: 12 | from django.utils.importlib import import_module 13 | 14 | from backward import settings 15 | from backward.helpers import engine 16 | 17 | 18 | class BasicTests(TestCase): 19 | def setUp(self): 20 | settings.SESSION_ENGINE = 'django.contrib.sessions.backends.file' 21 | engine = import_module('django.contrib.sessions.backends.file') 22 | store = engine.SessionStore() 23 | store.save() 24 | 25 | self.session = store 26 | self.client.cookies[djsettings.SESSION_COOKIE_NAME] = store.session_key 27 | 28 | def test_ajax_simple(self): 29 | response = self.client.get(reverse('simple'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') 30 | 31 | self.assertEqual(response.status_code, 200) 32 | 33 | self.assertNotIn('url_redirect', self.client.session) 34 | 35 | def test_simple(self): 36 | response = self.client.get(reverse('simple')) 37 | 38 | self.assertEqual(response.status_code, 200) 39 | 40 | self.assertEqual(self.client.session['url_redirect'], u'http://testserver/simple/') 41 | 42 | def test_ignorable(self): 43 | with mock.patch.object(settings, 'IGNORE_VIEWNAMES', ( 44 | 'simple', 45 | )): 46 | response = self.client.get(reverse('simple')) 47 | 48 | self.assertEqual(response.status_code, 200) 49 | 50 | self.assertNotIn('url_redirect', self.client.session) 51 | 52 | with mock.patch.object(settings, 'IGNORE_URLS', ( 53 | '/simple/', 54 | )): 55 | response = self.client.get(reverse('simple')) 56 | 57 | self.assertEqual(response.status_code, 200) 58 | 59 | self.assertNotIn('url_redirect', self.client.session) 60 | 61 | def test_login_redirect(self): 62 | with mock.patch.object(settings, 'START_IGNORE_URLS', ( 63 | '/auth/', 64 | )): 65 | response = self.client.get(reverse('login_simple')) 66 | 67 | self.assertEqual(response.status_code, 302) 68 | 69 | self.assertEqual(self.client.session['url_redirect'], u'http://testserver/login/simple/') 70 | 71 | User.objects.create_user('newbie', 'newbie@example.com', '$ecret') 72 | 73 | response = self.client.post(reverse('login'), data={ 74 | 'username': 'newbie', 75 | 'password': '$ecret' 76 | }) 77 | 78 | self.assertRedirects(response, 79 | '/backward/login/redirect/', 80 | status_code=302, 81 | target_status_code=302) 82 | 83 | response = self.client.get(reverse('backward_login_redirect')) 84 | 85 | self.assertRedirects(response, 86 | 'http://testserver/login/simple/', 87 | status_code=302, 88 | target_status_code=200) 89 | 90 | def test_action_simple(self): 91 | with mock.patch.object(settings, 'START_IGNORE_URLS', ( 92 | '/auth/', 93 | )): 94 | parameters = { 95 | smart_text('key'): 'value' 96 | } 97 | 98 | response = self.client.post(reverse('action_simple'), data=parameters) 99 | 100 | self.assertEqual(response.status_code, 302) 101 | 102 | User.objects.create_user('newbie', 'newbie@example.com', '$ecret') 103 | 104 | data = engine.get_next_action(self.client) 105 | 106 | assert 'parameters' in data 107 | assert 'POST' in data['parameters'] 108 | 109 | response = self.client.post(reverse('login'), data={ 110 | 'username': 'newbie', 111 | 'password': '$ecret' 112 | }) 113 | 114 | response = self.client.get(reverse('backward_login_redirect')) 115 | 116 | assert 'sent' in self.client.session 117 | assert self.client.session['sent'] is True 118 | -------------------------------------------------------------------------------- /backward/tests/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url, include 2 | 3 | from . import views 4 | 5 | 6 | urlpatterns = [ 7 | url(r'^simple/$', 8 | views.simple, 9 | name='simple'), 10 | 11 | url(r'^login/simple/$', 12 | views.login_simple, 13 | name='login_simple'), 14 | 15 | url(r'^action/simple/$', 16 | views.action_simple, 17 | name='action_simple'), 18 | 19 | url(r'^auth/', 20 | include('django.contrib.auth.urls')), 21 | 22 | url(r'^backward/', 23 | include('backward.urls')), 24 | ] 25 | -------------------------------------------------------------------------------- /backward/tests/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | from django.core.urlresolvers import reverse 3 | 4 | from backward.decorators import login_required 5 | 6 | from django.views.decorators.http import require_http_methods 7 | 8 | 9 | def simple(request): 10 | return HttpResponse('Ok') 11 | 12 | 13 | @login_required 14 | def login_simple(request): 15 | return HttpResponse('Ok') 16 | 17 | 18 | @login_required 19 | @require_http_methods(['POST']) 20 | def action_simple(request, *args, **kwargs): 21 | for k, v in request.POST.items(): 22 | request.session[k] = v 23 | 24 | request.session['sent'] = True 25 | 26 | return HttpResponse(reverse('login_simple')) 27 | -------------------------------------------------------------------------------- /backward/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | 3 | from . import views 4 | 5 | 6 | urlpatterns = [ 7 | url(r'^login/redirect/$', 8 | views.LoginRedirectView.as_view(), 9 | name='backward_login_redirect'), 10 | ] 11 | -------------------------------------------------------------------------------- /backward/utils.py: -------------------------------------------------------------------------------- 1 | import six 2 | 3 | from django.core import exceptions 4 | 5 | try: 6 | from importlib import import_module 7 | except ImportError: 8 | from django.utils.importlib import import_module 9 | 10 | from . import settings 11 | 12 | 13 | CLASS_PATH_ERROR = 'backward is unable to interpret settings value for %s. '\ 14 | '%s should be in the form of a tupple: '\ 15 | '(\'path.to.models.Class\', \'app_label\').' 16 | 17 | 18 | def load_class(class_path, setting_name=None): 19 | """ 20 | Loads a class given a class_path. The setting value may be a string or a 21 | tuple. 22 | 23 | The setting_name parameter is only there for pretty error output, and 24 | therefore is optional 25 | """ 26 | if not isinstance(class_path, six.string_types): 27 | try: 28 | class_path, app_label = class_path 29 | except: 30 | if setting_name: 31 | raise exceptions.ImproperlyConfigured(CLASS_PATH_ERROR % ( 32 | setting_name, setting_name)) 33 | else: 34 | raise exceptions.ImproperlyConfigured(CLASS_PATH_ERROR % ( 35 | 'this setting', 'It')) 36 | 37 | try: 38 | class_module, class_name = class_path.rsplit('.', 1) 39 | except ValueError: 40 | if setting_name: 41 | txt = '%s isn\'t a valid module. Check your %s setting' % ( 42 | class_path, setting_name) 43 | else: 44 | txt = '%s isn\'t a valid module.' % class_path 45 | raise exceptions.ImproperlyConfigured(txt) 46 | 47 | try: 48 | mod = import_module(class_module) 49 | except ImportError as e: 50 | if setting_name: 51 | txt = 'Error importing backend %s: "%s". Check your %s setting' % ( 52 | class_module, e, setting_name) 53 | else: 54 | txt = 'Error importing backend %s: "%s".' % (class_module, e) 55 | 56 | raise exceptions.ImproperlyConfigured(txt) 57 | 58 | try: 59 | clazz = getattr(mod, class_name) 60 | except AttributeError: 61 | if setting_name: 62 | txt = ('Backend module "%s" does not define a "%s" class. Check' 63 | ' your %s setting' % (class_module, class_name, 64 | setting_name)) 65 | else: 66 | txt = 'Backend module "%s" does not define a "%s" class.' % ( 67 | class_module, class_name) 68 | raise exceptions.ImproperlyConfigured(txt) 69 | return clazz 70 | 71 | 72 | def scheme(request): 73 | return 'https' if request and request.is_secure() else 'http' 74 | 75 | 76 | def get_login_url(): 77 | login_url = settings.LOGIN_URL 78 | 79 | if login_url.startswith(('/', 'http', 'https')): 80 | return login_url 81 | 82 | if not callable(login_url): 83 | login_url = load_class(login_url) 84 | 85 | return login_url() 86 | -------------------------------------------------------------------------------- /backward/views.py: -------------------------------------------------------------------------------- 1 | from django.views import generic 2 | 3 | from . import settings 4 | from .helpers import get_url_redirect 5 | 6 | 7 | class LoginRedirectView(generic.RedirectView): 8 | permanent = False 9 | 10 | def get_redirect_url(self, **kwargs): 11 | return get_url_redirect(self.request) or settings.DEFAULT_REDIRECT_URL 12 | -------------------------------------------------------------------------------- /docs/backward.graffle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ApplicationVersion 6 | 7 | com.omnigroup.OmniGrafflePro 8 | 138.12.0.121252 9 | 10 | CreationDate 11 | 2014-01-14 10:36:24 +0000 12 | Creator 13 | Flo M 14 | GraphDocumentVersion 15 | 6 16 | GuidesLocked 17 | NO 18 | GuidesVisible 19 | YES 20 | ImageCounter 21 | 1 22 | LinksVisible 23 | NO 24 | MagnetsVisible 25 | NO 26 | MasterSheets 27 | 28 | ModificationDate 29 | 2014-01-14 10:51:30 +0000 30 | Modifier 31 | Flo M 32 | NotesVisible 33 | NO 34 | OriginVisible 35 | NO 36 | PageBreaks 37 | YES 38 | PrintInfo 39 | 40 | NSBottomMargin 41 | 42 | float 43 | 41 44 | 45 | NSLeftMargin 46 | 47 | float 48 | 18 49 | 50 | NSPaperSize 51 | 52 | size 53 | {595.28998, 841.89001} 54 | 55 | NSRightMargin 56 | 57 | float 58 | 18 59 | 60 | NSTopMargin 61 | 62 | float 63 | 18 64 | 65 | 66 | QuickLookPreview 67 | 68 | JVBERi0xLjMKJcTl8uXrp/Og0MTGCjUgMCBvYmoKPDwgL0xlbmd0aCA2IDAgUiAvRmls 69 | dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGdVk2PGzcMvetX8Og9WKvPkaYIArTb 70 | FmjQQ9N10UPQw2Jix07H8a69Sdo/29/SJ82Io/F+dFEsEo8oUaTI90je0Vu6I4U/rXVL 71 | IVo6rul3+kSXVydN3Yl0/jt1tFTSpwP4f59OR6niuO7LWijZqLaN3lE/KNSC7fyODV3+ 72 | sj5269v7zzc9HXdwRGuTnfGRtNPknJHKuyC6PV3+tNf0/SH7Wx1zOkgXneOz9IKz1nip 73 | GuPn917+uu5v7ndf1leH/nDc7df3x12X/NLekGttdgVvN65a9sPSh8FRRCIdHpcIwvZc 74 | e4N4vsG/j0OEr67zgxVdX6X358Uy/SDSyb10nYmtbJ23o21eDrbTY/LuYLtaDrbLcbGn 75 | a0QPeTUpr4qQ08qibgO5gLgg3imG361ISaWUoVVHY1qW+F1aK60zAafFCmlZrRJCVhta 76 | /HZaH+n2ePinX1/Q6iP9sBrMzWHkTBwTNkXUA0wpiYKj3FOR1cGcdOsAT9Lpxo2onpaD 77 | md7EJ0tMEFG2w7LKdgmm6CfdIsvJfezG56Lsgh1fP4Y65RihBrkei3VKbRuVJ0fzWP94 78 | 6PvD1/X7KdB3Yg6e9N6EVKtCAY/TTraJKyzrMyQUAKkAyPOQJd+cac50IJvuUQV6kyxt 79 | JrAm7BdtwRYZhHNUmKaR8DYRK+YC45SpBYj/KBAuNjgB7LPKKNhWovEWlJgn4G6tk2Ew 80 | aMYc6FQGFS3xu2wsh9wM8H5Hi1evri5Spgwt+vKxKx/dn3QBxhixuM+/tDiUrWGDFpvz 81 | Db6FP1jn66AsFkW53Lott7LlUznyuWydQMDBz+Pr1xf0B63egI0ik38ed8avDU0uiTUj 82 | WFYzwgGpqXTWjBhlc0aw9p6mmncOMaBUsA9OAWs2pP7CrGRZ5UNqC/lc5UORwa8Eu1Jj 83 | phtfxErr0dXwuqEAiidYafUTrPz58GH3iW5vPlQF8PzFmVSlCnAtAalYhirmUhSeJ2eO 84 | XNFxyg86uCeqocLY6R4HquQmWckQpXPtsUOU/nTueQrKlBcDmo+5ApVAJ7RgUF9HtA+P 85 | 8tzGoIVTrdTBRPLwQNlWk22NbAL6e0c+OKmSCNDTIUINgmCwZzOgfJPVosKcUQIloNYo 86 | GW3TktVeWt0a8s5j7GgCJFbGVmnySJEPuFpraQJ2uv8sdF6jyVpYUhG3YoDBY00rI+oO 87 | rgEsfJuGGo/2Z/BllZOuNTpj/lx3arVztvnkmk59vIE16zVeiGU/LVHckhGcG762YtKZ 88 | WPQOxcmB1orePyjaOUvQN0HVdrAENdisQbcf7Axf22xz0HmOKSn4OqXPta3M8xOa12w6 89 | QKRMsA5zwtiyLNfPb7lAPShm64tENhTWT6VylSNc5rqbJ7e4akI7FTuRR48Kv3O3B3bP 90 | 3DYYNLUFUDRmmTzVDG4LlP0jV9O74gE/hL2bDqEnjwV3Pv6gP2Pi8higtULinQOBmhiR 91 | pACc+TR2sayfZDZ6mT1DukZdUcmQuEdu3DwOi3LSWmTJIm17wbZZVttug4yNTQhlK3aS 92 | VbaL9oT8R4fMxjfSmgh0g7vKmzJp1ghqMGhnaqARjxPmCyE09rynICQWL4TQgMTSVU+c 93 | 7K4bkSAWp9M3YzPHsSndFeRe8lTfyqZFreJRenro34xpNn8sHt0WGE6g+8JAPBQmsR7P 94 | B0yg7gG52BoHbzAmFnxxuuZ/vxTdAjlFRdfxQU6ZXn/xV8fOF095q6aXePsvRakPuApl 95 | bmRzdHJlYW0KZW5kb2JqCjYgMCBvYmoKMTI5NwplbmRvYmoKMyAwIG9iago8PCAvVHlw 96 | ZSAvUGFnZSAvUGFyZW50IDQgMCBSIC9SZXNvdXJjZXMgNyAwIFIgL0NvbnRlbnRzIDUg 97 | MCBSIC9NZWRpYUJveCBbMCAwIDExMTkgNzgzXQo+PgplbmRvYmoKNyAwIG9iago8PCAv 98 | UHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAvQ29s 99 | b3JTcGFjZSA8PCAvQ3MxIDggMCBSCi9DczIgMTEgMCBSID4+IC9Gb250IDw8IC9UVDMg 100 | MTQgMCBSIC9UVDEgMTIgMCBSIC9UVDIgMTMgMCBSID4+IC9YT2JqZWN0IDw8Ci9JbTEg 101 | OSAwIFIgPj4gPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0xlbmd0aCAxMCAwIFIgL1R5cGUg 102 | L1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAyMjQgL0hlaWdodCAxMTYgL0lu 103 | dGVycG9sYXRlCnRydWUgL0NvbG9yU3BhY2UgMTUgMCBSIC9JbnRlbnQgL1BlcmNlcHR1 104 | YWwgL1NNYXNrIDE2IDAgUiAvQml0c1BlckNvbXBvbmVudAo4IC9GaWx0ZXIgL0ZsYXRl 105 | RGVjb2RlID4+CnN0cmVhbQp4Ae3QgQAAAADDoPlTH+EChVBhwIABAwYMGDBgwIABAwYM 106 | GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB 107 | AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg 108 | wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM 109 | GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB 110 | AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg 111 | wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM 112 | GDBgwIABAwYMGDBgwIABAwb+wAAwjwABCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoK 113 | MzY0CmVuZG9iagoxNiAwIG9iago8PCAvTGVuZ3RoIDE3IDAgUiAvVHlwZSAvWE9iamVj 114 | dCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDIyNCAvSGVpZ2h0IDExNiAvQ29sb3JTcGFj 115 | ZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUgdHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4 116 | IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae2c6U8TWxjGWQqlewulhS62 117 | TIHSllJHigWqtqQNUBYXEK0LBCgai4UKsbER1BKEhgYRFMISqEgEA0iANEiImvuv3XeK 118 | 9xphkHsTg8PkPJ/IfJnzO8/7nJky57wJCUhoBtAMoBlAM/B7ZyDxFOl/kQNX0g8lU1o/ 119 | xpkEw/4PmPtswMRgpJwaMRgwYAL1OMQ43T5aKpOZti8WZfV9gExmKlgBkMcQfqdLSUkF 120 | NBabzeFwuFwuj8KC4cEg2WxWWhrB+GtCAi8ZqhLgAI3L4/MFQqGI4hIKBXw+DyjZgLhP 121 | eESRxvHAO4KOxxeIROkZYnFmpkQipawkksxMsTgjXSQS8HkEIXgIRUoOSLhHmEfQCYFN 122 | Is3KlsnkCoWSslIo5DJZdpZUAozCOCFYSACSLKRxPAgehwt0AAdkSpVanYNpKCwsR61W 123 | KYESEIGQyyFiSA6YSGSPyQLzRBmSLBmwYZq8fG2BTqfXGygpvV6nK9Dm52kwYJRlSTJE 124 | YCGLSawyhw0E+wAvjcMTiMRSmVKN5ebr9IVGkwnH8XMUFQzNZDIW6nX5uZhaKZOKRQIe 125 | OJjCIKlQsA+WFnYcT67C8goMRhNeXHLeUlYOslJQxLjKLOdLinGT0VCQh6nkcUA2LDIk 126 | BiaCfWlsLl8kzpKrNFpDEW62lFkv2uwVDofDSUnBwCrstovWMosZLzJoNSp5lljE57LT 127 | wMCDBbpvHwfwpHJ1rs6Im0uttgpnZbWrtq7+MkVVX1frqq50VtispWbcqMtVEw7yOWQG 128 | EnxQnULAU+XqTMWWC3ZHVU39lYbGphtuyupGU2PDlfqaKof9gqXYpMslSlTIAwMPFSiU 129 | Z2oah58ukak0uiJzuc3pqrt23X2nuaW13ePpoKQ8nvbWluY77uvX6lxOW7m5SKdRySTp 130 | hIGHCjQxCZ4NYF+WEtMai8vtlbVXm241t3ruex/6urr9lFR3l++h976ntflW09XaSnt5 131 | sVGLKbPAQHhGHAwgUZ6QPolMnWfALbbKugb33bZ7Xp+/93HgSZCiehJ43Ov3ee+13XU3 132 | 1FXaLLghTy2TEAmEAv35FSbOJ8iQKrGCIvMFJ+C1eLxdPYFg37PnoQGKKvT8WV8w0NPl 133 | 9bQAoPOCuagAU0ozBKR8qSyuUJytyjXgpXbXVXdLR6c/EHwWGhwKj0QoqpHw0GDoWTDg 134 | 7+xocV912UtxQ64qWyzkslIP+cdIZfGI8sw3mq2O+qa7ns5Hgb7Qy3Dk1evxNxTV+OtX 135 | kfDLUF/gUafnblO9w2o25hMFymPBAnOgPhlMNj9dqsAKTJZLVddutT3wB/oGhiNjE5NT 136 | MzOzlNTMzNTkxFhkeKAv4H/Qduta1SWLqQBTSNP5bCYJH4cP8dPo8bKKmuvN93yAFx4d 137 | n5yem4++W6Sk3kXn56Ynx0fDAOi713y9pqIM12sggHwOCR8sn+LsM3mFxVCe7lZvT/DF 138 | 8OjE1OzC4tKH5RVKavnD0uLC7NTE6PCLYI+31Q0FWlyYdyZbDAvoIf/g8SAQE/EruVh5 139 | 5bbHF+gfjIxPzUXfL39cXVunpNZWPy6/j85NjUcG+wM+z+0rlRdLiACKiQX0YP6ATwh8 140 | WpPFVt3QfN8fDIXHJmejSytr6xubW5TU5sb62spSdHZyLBwK+u83N1TbLCYt8AlJ+bjC 141 | TFkOLC92V2OLt/fpYGRiegHwNra2YxTV9tYGAC5MT0QGn/Z6WxpddlhgcmSZQi6Zf1xR 142 | phzTnS2rqG1q7XzcP/Tq7dzi8urGVmzn8y4l9XkntrWxurw49/bVUP/jztam2oqyszpM 143 | nik6gk+iwHR4uaPuRrsv8Dw8NjW/9PHTZmxnd4+i2t2JbX76uDQ/NRZ+HvC136hzlOM6 144 | TCE5mg8eD8B309P1JDTyejr6YXVjG/C+fKWkvuzt7mxvrH6ITr8eCT3p8twk+PSaY/nq 145 | 3Z7u4EBkYubd8tpm7DPgfaOkvn7Z+xzbXFt+NzMRGQh2e+ABcRQf/DxK44okirh/JHx/ 146 | UVDffs33038oEpNT4PUTXl8M56zOy+4OP/j3ZnZxZX0rtrv39RsF6WBI377u7ca21lcW 147 | Z9+Af/4O92Wn9ZwBXmDgBTQlGfEh//5s3aL6/Pc3IFpf/mwpkt4d1SeqT/R8J43GiVxE 148 | +UP5Q/k7kaiR3gTlD+UP5Y80GidyEeUP5Q/l70SiRnoTlD+UP5Q/0micyEWUP5Q/lL8T 149 | iRrpTVD+UP5Q/kijcSIXUf5Q/lD+TiRqpDdB+fuRP5rv70k4hu+078/6iY/G++vovT+S 150 | 5vtbab4/me77y+l9PoBB8/MdDCbNz+fQ/XwVzc/HJdP8fCNx/pbW51Ppfb6Y7ufD6X++ 151 | n+79GYj2KPTtr5FA8/4owEf3/jb07k9EGEjn/lLAR1QoffuD7QPSt79bAt378+0D0re/ 152 | YkIcMN5Bkp79MeFrxPcOoETrVhr2NyU+t8QJk+janzb+QYnW/YXjhP9gAunp0I9Ro7/Q 153 | DKAZQDOAZuD3zMDfiM7wRwplbmRzdHJlYW0KZW5kb2JqCjE3IDAgb2JqCjE4NzEKZW5k 154 | b2JqCjE4IDAgb2JqCjw8IC9MZW5ndGggMTkgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2 155 | aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYVV32/bVBQ+iW9S 156 | pBY/IFhHh4rFr1VTW7kbGq3GBkmTpe1KFqXp2Cok5Do3iakbB9vptqpPe4E3BvwBQNkD 157 | D0g8IQ0GYnvZ9sC0SVOHKqpJSHvoxA8hJu0FVeG7dmInU8Rc9frLOd855zvnXttEPV9p 158 | tZoZVYiWq66dzySVk6cWlJ5NitKz1EsD1KvpTi2Ry80SLsEV987r4R2KCMvtke7+TvYj 159 | v3qL3NGJIk/AbhUdfRn4DFHM1Gu2SxS/B/v4abcG3PMc8NM2BAKrApd9nBJ40ccnPU4h 160 | PwmO0CrrFa0IvAY8vNhmL7dhXwMYyJPhVW4buiJmkbOtkmFyz+Evj3G3Mf8PLpt19Oxd 161 | g1j7nKW5Y7gPid4r9lS+iT/XtfQc8EuwX6+5SWF/BfiP+tJ8AngfUfSpkn103udHX1+t 162 | FN4G3gV70XCnC037anUxexwYsdH1JeuYyCM413VnErOkF4DvVvi02GPokajIU2ngYeDB 163 | Sn2qmV+acVbmhN3Ls1qZzAIjj2S/p83kgAeAP7StvKgFzdI6NzOiFvJLV2turqlB2q6a 164 | WVEL/TKZO16PyCltu5XClB/LDrp2oRnLFkrG0ekmf61memcR2tgFu54X2pCf3dLsdAYY 165 | edg/vDov5gYc213UUmK2o8BH6EREI04WLWLVqUo7pFCeMpTEvUY2PCUyyISFw8thMSJP 166 | 0hJs3Xk5j+PHhIyyF70tolGlO8evcL/JsVg/U9kB/B9is+wwG2cTpLA32JvsCEvBOsEO 167 | BQpybToVKtN9KPXzvE91VBY6TlDy/EB9KIhRztnvGvrNj/6GmrBLK/QjT9AxNFvtEyAH 168 | E2h1N9I+p2trP+wOPMoGu/jO7b5ra3T8cfON3Yttxzawbsa2wvjYr7Et/G1SAjtgeoqW 169 | ocrwdsIJeCMdPVwB0yUN62/gWdDaUtqxo6Xq+YHQIybBP8g+zNK54dCq/qL+qW6oX6gX 170 | 1N87aoQZO6YkfSp9K/0ofSd9L/1MinRZuiL9JF2VvpEuBTm7772fJdh7r19hE92KXWjV 171 | a581J1NOynvkF+WU/Lz8sjwbsBS5Xx6Tp+S98OwJ9s0M/R29GHQKs2pNtXst8QQYNA8l 172 | Bp0G18ZUxYSrdBZZ25+TplI2yMbY9COndlyc5ZaKeDqeiidIie+LT8TH4jMCt568+F74 173 | JrCmA/X+kxMwOjrgbSxMJcgz4p06cVZF9Ap0m9DNXX4G3w6iSat21jbKFVfZr6qvKQl8 174 | yrgyXdVHhxXNNBXP5Sg2d7i9woujJL6DIo7oQd77vkV23Qxt7ltEh//CO+tWaFuoE33t 175 | EPW/GtqG8E585jOiiwf1ur3i56NI5AaRUzqw3/sd6Uvi3XS30XiA91XPJ0Q7Hzca/643 176 | GjtfIv8W0WXzP1kAcXgKZW5kc3RyZWFtCmVuZG9iagoxOSAwIG9iagoxMDQ3CmVuZG9i 177 | ago4IDAgb2JqClsgL0lDQ0Jhc2VkIDE4IDAgUiBdCmVuZG9iagoyMCAwIG9iago8PCAv 178 | TGVuZ3RoIDIxIDAgUiAvTiAxIC9BbHRlcm5hdGUgL0RldmljZUdyYXkgL0ZpbHRlciAv 179 | RmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBhVVdaBxVFD67Mzt5iUMRbUsrdfCvIaRhUq0m 180 | FrXbTbq7Tdium402VarT2dnudCcz453ZtAl9CoJvWhDEV0V8Ei2I0GrE5MW+tFSoiRSL 181 | ICi0WEEQ+iAKfmd2sjsbkcxwZ7459zvnnvPdexiivmXD9520RjTnhiJfyc4enz2h9X1H 182 | aVKpn3AZZuBny+Upxq7nWvzuve6tU4otN/ZxrN65Lb8yNSswwVrB8GqBOUeU0omUYdMX 183 | IVHf67CPng19xu8DP9CsVnLAnwCrsS8gPZi3XEvYppYXxoJWFl7ddpK5bjXPMba85pwW 184 | 58rXHoz+oDk9ifcgcj5XM8YZPwX8oWlMTAMPAa/74eFKm5NOt5oz2bY9PVQXR2Zi+/FG 185 | q8B4mCi9tNiovgy8Dfiie6p0LOavmEHuBPBjsN9tWEXeD41I2maHxSowfCVdeBXmgyOd 186 | rFnjE8DPAi81vUnOYSfwcjA/zXbmf7/YyJWAsZacPmMcLQNvB77fcvLMRxx5wA/LHHMU 187 | eMp1Srwu6pXftIKoxgHgT8NGtRDz10NRZd9HYP+rbh8pAkOHzEMNUWA78skUfCc6T08D 188 | L4lWhWt/AviSISbywIiZ+clyZ1hDYEWhl1IGWeTRKTxNcukf1B6QTfMR8klgro5vh/Jg 189 | uBgCwwHrNNCvFGKerewfUBM29mVGgGcZQ8T+GtXw1fazMcuII96OfMxN3BziuLRIBnjt 190 | le/EPE/eIevykxgH5Sn5OXlUHiNNfkE+JD8vj8M6Jh+MfAR8FxC1WwGveAdR25HeoFZP 191 | PqvIOYSPQz+D40UZBsjgb0RoRsyEGhd2tQZ8/723l8Rrtnn9nT8S6nBtzbjOrj4JXzqW 192 | VDvSv7ZZ7cwvmduZNTxvZm4lqtEyP2Zu4b7ZU5cXr2ajPhuZbyjL2tvYVa+HvbEDm1lZ 193 | VO5EezKHall93lFWn5VsAYd41mF1aV8y4pXzyzs7vAXS1uRLr97ov3L+fzVhfVhnixKq 194 | 1N0Lu3z/5MespvVW6V6Jlob0i/pd/SP9B/13fU3/AOg36V3pC+lr6bL0pXSVNGlFWpW+ 195 | kb6VPpO+wtfnsK5Kl5Fb8tS1T1nn9CDT9jk04xPG9fApDogVYDbXz9YNpc5grpspn+3N 196 | K7DO3RPdWUs9rO5WH1XH1YfVx9UpdVA9oB5Sd6j7MUbUgroXM7s7KnFPsdY23mW8N/rO 197 | ptlIq/aOcFYNqCeQpYG7mxf3qN2Jhjip+6AzR+tyeI12d9uIosXd66FjDZpBxTadjbQL 198 | 8O3gG7v5H2/uSWSXegUny5b3yCNyMe7BrHwAXTjZ04+j3KXKhDKuZElTBpUxZUQ5yjiq 199 | lTtUU/ZidgzPiWT2iJ7g9CiCv09oncN/iyjn+QvCPt0Itf26/oyWxW/S0oquOTykGY6j 200 | RVOBJqzAEvNWbZj4H8x+RH++GP1bU9uvmi0x37ZRKnWN6F/6uod7CmVuZHN0cmVhbQpl 201 | bmRvYmoKMjEgMCBvYmoKMTA4OAplbmRvYmoKMTEgMCBvYmoKWyAvSUNDQmFzZWQgMjAg 202 | MCBSIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9MZW5ndGggMjMgMCBSIC9OIDMgL0FsdGVy 203 | bmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZ2W 204 | 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 238 | AkL8Q3aFPAk1DF0V+nMYLiw0rCbsebhVeH54dwQtYkVEQ8S7SI/I0shHi40WSxZ3RslH 239 | xUXVR01Fe0WXRUuXWCxZs+RGjFqMIKY9Fh8bFXskdnKp99LdS4fj7OIK4+4uM1yWs+za 240 | crXlqcvPrpBfwVlxKh4bHx3fEP+JE8Kp5Uyu9F+5d+UE15O7h/uS58Yr543xXfhl/JEE 241 | l4SyhNFEl8RdiWNJrkkVSeMCT0G14HWyX/KB5KmUkJSjKTOp0anNaYS0+LTTQiVhirAr 242 | XTM9J70vwzSjMEO6ymnV7lUTokDRkUwoc1lmu5iO/kz1SIwkmyWDWQuzarLeZ0dln8pR 243 | zBHm9OSa5G7LHcnzyft+NWY1d3Vnvnb+hvzBNe5rDq2F1q5c27lOd13BuuH1vuuPbSBt 244 | SNnwy0bLjWUb326K3tRRoFGwvmBos+/mxkK5QlHhvS3OWw5sxWwVbO3dZrOtatuXIl7R 245 | 9WLL4oriTyXckuvfWX1X+d3M9oTtvaX2pft34HYId9zd6brzWJliWV7Z0K7gXa3lzPKi 246 | 8re7V+y+VmFbcWAPaY9kj7QyqLK9Sq9qR9Wn6qTqgRqPmua96nu37Z3ax9vXv99tf9MB 247 | jQPFBz4eFBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/RO1I8ZHPR4VHpcfCj3XVO9TX 248 | N6g3lDbCjZLGseNxx2/94PVDexOr6VAzo7n4BDghOfHix/gf754MPNl5in2q6Sf9n/a2 249 | 0FqKWqHW3NaJtqQ2aXtMe9/pgNOdHc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5n3d+8kLG 250 | hfGLiReHOld0Prq05NKdrrCu3suBl69e8blyqdu9+/xVl6tnrjldO32dfb3thv2N1h67 251 | npZf7H5p6bXvbb3pcLP9luOtjr4Ffef6Xfsv3va6feWO/50bA4sG+u4uvnv/Xtw96X3e 252 | /dEHqQ9eP8x6OP1o/WPs46InCk8qnqo/rf3V+Ndmqb307KDXYM+ziGePhrhDL/+V+a9P 253 | wwXPqc8rRrRG6ketR8+M+YzderH0xfDLjJfT44W/Kf6295XRq59+d/u9Z2LJxPBr0euZ 254 | P0reqL45+tb2bedk6OTTd2nvpqeK3qu+P/aB/aH7Y/THkensT/hPlZ+NP3d8CfzyeCZt 255 | Zubf94Tz+wplbmRzdHJlYW0KZW5kb2JqCjIzIDAgb2JqCjI2MTIKZW5kb2JqCjE1IDAg 256 | b2JqClsgL0lDQ0Jhc2VkIDIyIDAgUiBdCmVuZG9iagoyNSAwIG9iago8PCAvTGVuZ3Ro 257 | IDI2IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHNVk1vGzcQvfNX 258 | zFE6iOb3kkAQIHF7aNBDUi/QQ9GDsZUtBZIVS05/f99wSYry17kwZC1nZ4bDN28e9Ujf 259 | 6JEU/rTWiYZo6bimP+mBrq5PmqYT6fx3mmilpGcH/N+zd5QqlvWuroWSQaUUvaPdHNAb 260 | Npc57ujq6/o4rX88/bzd0XGLQrQ2uRgfySfptQ+GnPMyJWPEtKer3/aafjnkojtfa0Nz 261 | o/fdrEnwEOdEV3+sd7dP23/X14fd4bjdr5+O24mrGXDeuYAUcgF87DAbyVXbTpxteMmF 262 | 4ujn2LNt01lr9J7uAO8XfL5nwMX1TT6/optrhiMvVvzFncHJWmITg1RqiH1RzYZ+lEKF 263 | NWb264rqbF1RLXpPNwAY/Tfcf0XofVeK1j7jQm6IrS+fRyqdW+F7ZZTURqtEjkY0bRyZ 264 | ROMd/UWLr7dLZoGhxf2S8ve6GmgpbJCRFp+W9DeNX+jXca7jkofWDWf49+Rst9zNywK6 265 | 2FF27nvwLPquP1pDmZ06OLCFaMt5iw5Cdu6Wm7xnc38JpujAtAn8Ljhye1/iaJ2K8HkT 266 | R/EajjOwn3sYu03bMStJyCqXSSL2ZC0PeDWAyswFBYoqUPS1JBbj2QWUDMKkofKupNS6 267 | GhiiZ0GFcZed1tHJwQ9ReGUkmsDCY43ONmo2NLnaXFKzHwagxIIqzbZp1j4jZOgNqhtv 268 | 571cggTx/qVFrJeKVhqfwHA5MdPcNJp/+PDpZ+X1UyH6phoa4x+qpbpsl2IejqmNyflV 269 | mZtDDWrRVDY4tsSPs49YtCK2Ners9E81ffzYM+WF8GeCRwVy8KzZqMCK/ORY5fPb/DQz 270 | n9/3svYKZwTHOGXhx3n4qQyuTSWjy09zxtnzPU3iMbIh3xCYICColDI0TheiZDXkKip0 271 | 63KYFr8f7rcP9OP2HvCN37Pq9DPaxiXvUuUUTORNI24plPzekPC9ledcafjyc2pxNmJ0 272 | Sg4cltWgeHHGejM8h5AzZuCMZgi9kUjjNNTUDawnQWI4GFcvjfWWHGbBe5apGOVg+SbB 273 | WBhc1SEIOxjEQbVdsvzgIAEB8h014ry0OsBST424IUnrDcrGPNuosU1wcDdWWJVk8gZX 274 | sUcHYsB+apCWTzW9ixCPlbNROo97nKXHDkNiurmIvTzg0rwFfp+AJl7LqBL74Sr2LsC2 275 | eRkNXDpJERpYar7IHGQJWFkUiLsdXiHrXTPsqoF/3rAHdpxDigF3CrZ7nuVtDfEBeBiI 276 | BCd7TT7+L+JxalIxTesqQ6fTpTZ8+w+9kx3LCmVuZHN0cmVhbQplbmRvYmoKMjYgMCBv 277 | YmoKOTU3CmVuZG9iagoyNCAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDQgMCBS 278 | IC9SZXNvdXJjZXMgMjcgMCBSIC9Db250ZW50cyAyNSAwIFIgL01lZGlhQm94ClswIDAg 279 | MTExOSA3ODNdID4+CmVuZG9iagoyNyAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgL1Rl 280 | eHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDgg 281 | MCBSCi9DczIgMTEgMCBSID4+IC9Gb250IDw8IC9UVDEgMTIgMCBSIC9UVDIgMTMgMCBS 282 | ID4+IC9YT2JqZWN0IDw8IC9JbTEgOSAwIFIKPj4gPj4KZW5kb2JqCjQgMCBvYmoKPDwg 283 | L1R5cGUgL1BhZ2VzIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdIC9Db3VudCAyIC9LaWRz 284 | IFsgMyAwIFIgMjQgMCBSIF0gPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9UeXBlIC9DYXRh 285 | bG9nIC9PdXRsaW5lcyAyIDAgUiAvUGFnZXMgNCAwIFIgL1ZlcnNpb24gLzEuNCA+Pgpl 286 | bmRvYmoKMiAwIG9iago8PCAvTGFzdCAyOSAwIFIgL0ZpcnN0IDMwIDAgUiA+PgplbmRv 287 | YmoKMzAgMCBvYmoKPDwgL1BhcmVudCAzMSAwIFIgL1RpdGxlIChhY3Rpb24pIC9Db3Vu 288 | dCAwIC9EZXN0IFsgMyAwIFIgL1hZWiAwIDc4MyBudWxsIF0KL05leHQgMzIgMCBSID4+ 289 | CmVuZG9iagozMiAwIG9iago8PCAvUGFyZW50IDMzIDAgUiAvUHJldiAzNCAwIFIgL0Nv 290 | dW50IDAgL0Rlc3QgWyAyNCAwIFIgL1hZWiAwIDc4MyBudWxsIF0gL1RpdGxlCihyZWRp 291 | cmVjdCkgPj4KZW5kb2JqCjM0IDAgb2JqCjw8IC9QYXJlbnQgMzEgMCBSID4+CmVuZG9i 292 | agozMyAwIG9iago8PCA+PgplbmRvYmoKMzEgMCBvYmoKPDwgPj4KZW5kb2JqCjI5IDAg 293 | b2JqCjw8IC9QYXJlbnQgMzMgMCBSIC9QcmV2IDM0IDAgUiAvQ291bnQgMCAvRGVzdCBb 294 | IDI0IDAgUiAvWFlaIDAgNzgzIG51bGwgXSAvVGl0bGUKKHJlZGlyZWN0KSA+PgplbmRv 295 | YmoKMTQgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNl 296 | Rm9udCAvTU1XUVlYK0hlbHZldGljYSAvRm9udERlc2NyaXB0b3IKMzUgMCBSIC9FbmNv 297 | ZGluZyAvTWFjUm9tYW5FbmNvZGluZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEg 298 | L1dpZHRocyBbIDI3OAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw 299 | IDAgMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAgMCA2NjcgMCAwCjAgMCAwIDAgMCAwIDAg 300 | MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1 301 | MDAgNTU2IDU1NgowIDAgNTU2IDIyMiAwIDAgMCAwIDU1NiA1NTYgNTU2IDU1NiAzMzMg 302 | NTAwIDI3OCA1NTYgNTAwIDAgNTAwIDUwMCBdID4+CmVuZG9iagozNSAwIG9iago8PCAv 303 | VHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9NTVdRWVgrSGVsdmV0aWNhIC9G 304 | bGFncyAzMiAvRm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDExMjJdCi9JdGFsaWNBbmds 305 | ZSAwIC9Bc2NlbnQgNzcwIC9EZXNjZW50IC0yMzAgL0NhcEhlaWdodCA3MTcgL1N0ZW1W 306 | IDAgL1hIZWlnaHQKNTQwIC9NYXhXaWR0aCAxNTAwIC9Gb250RmlsZTIgMzYgMCBSID4+ 307 | CmVuZG9iagozNiAwIG9iago8PCAvTGVuZ3RoIDM3IDAgUiAvTGVuZ3RoMSAxMDE5NiAv 308 | RmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9Wgt0lNW13ud/zyOTeb8nM5PJ 309 | zOT9hJAhkQwhCeGRCAQhQYIJEAgIihiCsYUbFQtExAcCEXu1qIUAVYaQwgBqqRdFW2vV 310 | Wt+1WtGqy9TeXrVWmZm7zz9JJFmty67l6vzZ55x9Xv8+39ln73POn871G9ohBXqAhTmL 311 | 2tatAPkXyAUg/cvWtq1L8gYJ4+eWdXV6kjyfCcCuWbFu5dokL90DoHStXNM93N6I2brH 312 | OtrblifL4SLGpR2YkeTJBIwzOtZ23pDk9YMYz19z7bLhcsPLyOeubbth+P3wFvKea9rW 313 | tifrB6g8Geuuvb4zyfsfw3j2uvXtw/VJE8r3WyCYa4K7QQFXgwgMaPFpARA/VLqAw1Ja 314 | jr/C59/8xVWpFZ+DjnYLcFX9HXL8m1OnT37ZfjGoukv6B2YoRurTWMiKZwGoCZYPqe4a 315 | LZHbYWCKQmNOFGYgVSJNRMrJmWqFHnIA7kT6CRILq8ht0I20HeleJG40dQi5U+S2AU4K 316 | nybdYCczwyrOPd9oc1uVKvdLUSIM3u9+3freGWLD2XuX2AZSQDFVSX5CHoDl4CY/BT+5 317 | Eeogk+w7nrXG3YpFh2AdUg8SK4eEHBpIK3Y/QXLBzxFsE4A0jpxw/7koz/1+UZQhA+4n 318 | g1EOo1+mIRdOdZ913e/+hWul+wmkI8miw1lY44T7kGuNe1dalOwbcN/tihJsc1cy2uDC 319 | pifca7P2uJcXyeWz90SZIwPuEJYvCKvcpWVe90TXBXdBMCoR5PNcs93ZRb9xZ2BDrObB 320 | Tv1hndvp2uWejEVprprgZKQz5DC5D7LJfQP+me7TmMThHp+RVbYnSn5wvC6zyB8lN4ZL 321 | 6zL3ZNUF/Vmz3f6s2mAQ0wueEbeIV4pTxWIxR8wUA6JXdIhGSS9pJY2klpSSJIlR8rOB 322 | SrdwhhyBSoTlyHFJkPgoeRQzuTPkETnzkZMSJzESSMZo4h1UXgLGKDkyqKUpTJwQ5JQQ 323 | JY8cT2Y9EnZzNMXJBVqGpjHAEBgiMTATIuT2qAC3mrsqrZX6KbpQbfW/ClrlkpEw51// 324 | rMQV2TOrsSly2NUcKaaJhKt5pLp1JPEv484NWNRelZMza1738a51q1fUtPtqWn017Uit 325 | kdu6OqyRnqUez7HV62iBJ8IGWpcu66BxW3tkna+9OrLaV+051iW3G1e8ghZ3+aqPwYqa 326 | +U3HVoTbqwe6wl01vrbq5uNLq9a3jHnX9tF3ra/6J++qop2tp+9aKrcb964WWryUvquF 327 | vquFvmtpeKn8Ljr4mlWNVdd3onZ6albN8kQyGyMz5i5qinjamquj5ABmVm8A/ixo+cch 328 | k+8BO1cAboDE60hv0Dh+ReID/jxo42sT/8uW46SeosTEKyvgLNwO98FREKAf05mwBPrg 329 | WbIa1/ZiGIRXSBrko+3lIAqz4TmSSLwIK+BhrN8JT8JuOAZqbLMWbdhs2En8iRuRD2N6 330 | KWxJPAgZUAY/gschhL3uhKHEocRxLJ0HV8BhOILtf018zDHOkHg0cQEkmIt9bsGSFxOz 331 | E0dBD7lQBXMwdws8QfzsG4kOsEI5SvdjeAD2wy/hE3IzGUx0JLoSLyTeRVW1ghMa8dlE 332 | Bsm77FHuR4kfJz5OxBGJTMjGt7bCLngI+z+Kz1k0rTXkatJJdpHdTJi5mRnkbuUt8Rji 333 | kAXT8amDa2EbInAKzsHf4B/kU8bKatlO9qnExMT/gQpm4SjpSNqhC5+t+OzEMZ0hAikk 334 | 08gcsoncQ3aT3zHZzBVME7ORuYH5gG1gF7Pd7O+467kBfgffJ6jinyfOJM4nfg8WcMGV 335 | sB424+iehBfgM/iKsNiXk/hJOakiS/DpIfcxp8h+coqZQ86SF5jD5I/kPfIp+ZrhGTVj 336 | YnKYTmYXc4R5knmeXcXuZu9l/8h+zk3hGX4//77gF9+ML41vjz+fKE+8m/gSTawEXpyZ 337 | KmiAq6ANR7sOJsB/4Sgewecozto5eAqelZ/3iBOG4EtEAYie2EkxqcengVxOVpBV5H5y 338 | Gp8nZFm+YHAiGAWjYyyMk2lkljJrmR7m90wP62Cz2ZnsIvYoPs+wr7Bfs19zPGfgTNx0 339 | bgbs4NZy+/A5wPVzA9xv+RA/hW/gF/A9/HZ+B7uMf5F/Rdgs7BQGhE+Fv6JZnC1eK+7A 340 | 2XkWdfaXqMvf/DiSgdIXwzWwjFSTpbAHZ2M/aYNe1K7lZBvitQ4yEy3sZnY6U4ja8AT8 341 | ALV1H2yC7exi2J94jT0Mr6KmrMEue+AgVwUufi/Ozs1QiFo0/ISzsrMygwF/hi/d60GT 342 | 73TYbVaL2WQ06HXaFLVKqZBEgedYhkBuja+21RMJtEa4gK+uLo/yvjbMaLskoxWXsidS 343 | O7ZOxEPbtWHRmJphrLliXM1wsmZ4tCbReiqgIi/XU+PzRH5T7fNEyaK5TZi+vdrX7IkM 344 | yel6OX2nnE7BtNeLDTw11o5qT4S0emoitV0dvTWt1Xm55FQY4VDm5VLDEQYV7TgC09o2 345 | oYGFabRGTcTuq66J2HyYxjLWX9O2PDJnblNNtcPrbcY8zJrXhO/Iy10VQTnhNvVy3/Lb 346 | omFY2kpTbYubImxbc4RppX3pciIWX3XEcuP71m/YkVTNjksKI4y/tq29tzYSbr0NwaVs 347 | K+XadiA3q9GD3TK3NjdFyK3DQlAZV6OkVNykT/C3rvZEFL4qX0fv6lYEF+Y1DdjDdtn4 348 | RmBO04AtbJOZvNxT1s3lXhz9qbypeVNpXO61bk7Gf74lmf/SWRpbN597B+NZ80YBIBQB 349 | 3wyUM+JZJr/Eh8KW0aC9DHqXlSFO+GsmOMxVKM+0CIM6w/ojvH9GW6SncUSMjuqkcK2r 350 | qwcUNrvshKqasX5rr3YyzhTW1/o8vZ+jt271DX0yNqdtOEfwaz8HWkgnelRXIqRtJN1F 351 | naUfR91h9XXQ+e2S5xR5n7XmkgzkKTRU5ogRHficJm/E04wZuJvMnRUFxZymY4TsbI6S 352 | xK1RqHadwj0qe9USLM6lqraqGt+PTF4uZmR7MZWf66nFN9dSXfH0enpnLO/11Ho6UJk4 353 | vxxjQXtvcwEi2NiEOMF8fGO42TGabG9unoz9FNB+sAlW723GHlYP94CxnFUQw0qFuehM 354 | 2cCcprlNkZ5qRyRc3YyzgOp7dk5T5CxqbnMz1ioalRQl3rTKOixzMcpclI3lJclecO/S 355 | g1009/bSPhubfN7I2d5eRy9db0k+SmB8Rng4Iwq0CoU8SnrmYFuMfF6HPAdenxfFaqaY 356 | TkCVHtEo3LN/O8Klo3Jjy0kobamMcNn3hHDouyA8+TshXD4q6RiEK1DmcorwZf85hKeM 357 | Qbjy2xEOj8qNQk5FacMywlXfE8LTvgvC1d8J4ZpRSccgXIsy11CEp//nEK4bg/CMb0d4 358 | 5qjcKOQslHamjPDs7wnh+u+CcMN3QvjyUUnHIDwHZb6cIjz3P4fwvDEIN347wvNH5UYh 359 | r0Bp58sIL/ieEF74XRBu+k4IN49KOgbhRShzM0X4ylGEw44IXGqHe8aZXfjeDfPiSyDH 360 | nRKvhyomhAfnELzHL8Bbi+thHh6uyzEuQ6pD2kLOwxYaI9H8LqQK5jBsx3q0rQX5Hkyr 361 | hsmE3Y7cB6nxlPIE8h5YRI/n//aPGdOCHcP9+wwKCDxKJMpNJfTwIz8lnpPUePujgVS8 362 | 19LhmQ7AAEa5uBRKcd/9FxJlJjMH2HXsWfYv3EzuSX4C38//RXheTBNvwAuPOultPFBU 363 | AXAv4NmWxXdMS95bSQVR4JAkbRTgBSTKY5p9C9MYixizGCvegtOyZAtyTmNPPCzIKSwq 364 | 0Xl1QaQqbmf04p/4x7+aFuXqv8Z7EKzxHsI8yHnldxWH7Xy2yGaDICoVFoudJ8s5sEmK 365 | 5d4bfoiXEw2f1VfEKhpq2qs/gMrK+iHtUFGhocTk0yG99yL+OO8bsV14AMerPkhDkC7D 366 | MTBAUXkjPKeONJEOwm5j93J9ykPKqCKqFDKVBERBIIykUGCgBJEnOwjLeYxKpV+PeUae 367 | 9+uxgkrFswolJ/BExRAWmDRRipLmsAKPHIJCyfLI9Yf1KSlU6PvJ/UqbOmW/d8cSFNrW 368 | 8Jm1PhazyWLXVluh0lJRWVEfw5HoQpVEpw+F8E8XKtian7NJOwt3RtxZR4Q717w13zqc 369 | wWIGe645Z7juVm1FhYhUVEhaWqCFqIihhPhYL+sj7M4/Dt36LmN6Y3fszAPPMXcyi5jt 370 | sY3ssq+mkWi8Tp7ReYm35BNgKp7tK+AP4bLsQqLUqhxqZ7CkTrtKsVorhiS9WsE6isUM 371 | hUurdpXnMPlZ5SfLmfLibL9eK/KSM5hucUZJb9hncbnFoCtfxbgmqirEigqnUczK7s+w 372 | T3FkOWemBstsl015jOzFg+8psgeSUzj02VCD9ov6C7Fz+lABzuMQfYb0IZ3eEmrBIeYP 373 | 5Q9RWHSWUFHhtO5wZukkUzoQm5+UpnrBmubwgtlj9BJvOkxivGB3WbzE5MUA71NziLaC 374 | 3t/cdNNNCExLhrmkeFLpZURDUokgCiZSOql04oSAL10URN8UUlKMR0idESvhKzTElx4M 375 | BGkUmDihdJKBaNY3XNW8x9tRvHZpUSMZnGJS33Lj7eVeZT//94ce79pg8avTdNm5gZZs 376 | s2LS8z/c/fjpvb2/XZQ748BdJqegSXEWrCRrpFxr3uLG2dmNT99XV9cX2+tMZ9lb1UKV 377 | L1y3+ufbdj9sIBfoGsAbAvYFrgHs4ICD4YKDNtJn7ZcOW9mZku4+I8saBZddTHEZVQ7R 378 | 4bBog3rCBhmd3aUMWmxOvDYVj3vXbxpGF7GtqB8KhRDRYXQxQVcKQjkBF5NfbVIGQGPQ 379 | Bohel6oVbcjxwHoJYThWZU4JQKoeA4VVCBCOCF5C8URYKbDJMEfGFswWXz6ChbAmESyh 380 | 0DETtVAiMq+8ZzmqXb/5ZzMLt9297hbb0bS/nnnpK6J/2ck1RF5ddkv/2p/sf2v7xt8/ 381 | RUo+wOuNyTxiUJZ4gx3in8S16oKN4eJJmumahZqD3CEH75eMTKpLC5LLJRqUjMui4vMN 382 | +dosnd7uVgXttjT3Vu/6qkuHH7twAVCr8E+HK0seut3qVCiBEKsKx+bEAGxMAJQOKYAD 383 | xD9ZY/RUFWQFEUxgMVt0JTrfRDosmDhBX/LF3fs37T9w47ZDpLex8LJHHqz82bXH4199 384 | +ja56sNXn/31/7zwK2bShLRZjOurKbuXNZG8rz4mC9EO1SXe4Ox44+LE2zk/UYe790r3 385 | 2g+6WV7DpPJGk0afajKG1WGjlGUns1Qn2PPkafa84zXpdcUr7td8H1o+9KnO687rmcUS 386 | 781I3Wd2ZYQEUTR7XU5R6TKr/OJe50HnSeerTs5vTvU7eZtSLeo0wVRXkLcHM/LFoM0W 387 | CL7sPdCSBCh2gS6+oZdjstWRjU9BS3IVop6gUdIO4dqTIasFH8ezeJ1FeE5wB3Ravdag 388 | NWo5Qe1Pd2QE0Bu6AiTNpbCIAVCZNAGSovHZvZjFYyBZUa9StBjQZZlcl/LazM7Jvolc 389 | 1wLXoe0yI8ZmkzcNV+Kk0kmoQLguBURbh0pEAkFcqIJImMFXykr12ouf8nfuvX1+ofGY 390 | eHnRvO6p856Jf0ysfyJuVebMR37YzxMfN/3qK+aumfngQ0+1lE4vvyt/jlNLfHinx5Cq 391 | eGBD7c3Hewn9aIQefAs6CKprZmgM5yKakkW0SEEuaNggbpAkQwpjQO+vcwmiSa1MyVLa 392 | rcSUBWabxYpfWY57lyZ1jdpwGUuorJA1LUQocNBiKNGhnUkaF59ugjwMk863ZTBcsvDm 393 | jxrzTqUVbV13YpB/MvbWXG/ooeb7Y3OZh7omNe17JfYMlY+h8pHyYf9bGnaK73MotMDK 394 | PhHHkyWy1Cse/kaSc7GKcyN+sQI9I/WLOtkvbjmJPy7761f4x58b6ZsdQn20obVZEi46 395 | KZwXGE4wCkFjl9Ap8kY1Y7RqXbwIglWltIt2O6izFHYnybdm2cDmQLM/BoKkOiVtTQWu 396 | OF1oBAaCQJhGjOwwDji/GoJYkC1HZh/uuDAn96SrcHM4a2ZZnmOQHOQK+pbMe2DhgxSP 397 | pRXLU8xVE69bFfstCovrqDzxOudFG6nGe2cb3Bku6ZP2aO81/5Trlw5oD5mj0jPSq9z7 398 | mo+M6smS4LKKapdeZRNtNhMTTLU7FEGTze6IEgVayuGVIHuhb6ykrPK5uA0MqAwK1Fod 399 | EyCiBVN8CqaURnUAiBYDyYyGkdVgIOs1DahBzNBPHJ5ptIZ61GAG/VPSGL5za+Hs0z/d 400 | s+chvNy/GP/7H+IXif7PQidJPbBnyT0XB45cYN+IfxL/LB6LP0pyLqKzClN72BW/gvPj 401 | 0DWQDp3h3EPSQQuTKXmcOo3gMompgsblVKVrmKDVnqHM1+Z7s9JTbb6Mrd7Hk8ND7byQ 402 | nBt5cdOJGV7WTrMDeHuAC4ADB8abMSA2TQBYizwmeVjUfWagJaS6Sw28xVxCSkyyVuOF 403 | K12j6Cp1Pubpg/7a02dq/BjG84+Whq/8wYn4yc593fMKywe7f/dSz+JjZ5bv++HCA+yx 404 | nTMyK+If4Rgf3HPVxLQZsT9QPa+IX4G6OB3H6IEbwyVl1jprk7WfHOT7nUKmpLewKpdH 405 | NAisy64ya0Q0+uYsk9Gergm6bN70f2r0ZauPOijPptPhVqfgx7QA48Dxqd0YgJNFs5Sm 406 | Grb6w2Yfh4cGaGQCqeWfSJePbPnR7JV8GawZeGx6MGdGdMNBcseVxflHfp73wMYj8b/F 407 | niWblxyMtO29reWBX7/MTJmWUbv7qwATqLuCqPHmnpCZsr3ZjoO9G8epg8vDgSAbSJnE 408 | Tuc4jaRlNAqdQh2U6HLTKSW7gVC/Bja9IUpq0NJslo02ncsGrbznrTwXO0e3gXSDlLQ1 409 | 8hIzW0zUFwu4tLYfMT18NW91aR3abXcPcgWnSu9j2CdY5uj6WB/FvCrxKnuCm4VfmQpI 410 | fviOMkUfv0d/r7HP1JctZGb4g6XeWu/0jOnBBRkLgysyVga61d0p3ZouX2dGp78zcCCt 411 | P9fAornn87h8A9hNDovTasoz5memqlZJAX+pn/Gnpyi5HIP1aafLIHKu/H05qgJRodEy 412 | IhR4C+xuq9katEzJDIjBTHuRxh3UToFgvq2waGDURw19FgtRyxoLaTFFhxsqwBCnleoy 413 | 3S3SveJ18hzPJnlMwOS3B7watxcU+PmWsLm438RzhJe49JjnMFq9xJOa7gVvuiZFCiq9 414 | JOBXKEkeHjqELAzSdE4vsZkxkF2VvMmRA3kpjCxw3E4a0FvJG4RgoIC6J9wmUisv+pKu 415 | ii4TN6EezYgLJBAkn0r+6v7lfZcFr79j+9TON0/97eppzGE+MOXeFatqMhs2Plm16vW3 416 | Pz0vkpNkzqLChQuvrMlA756ePeOmvsd2Luq4rHh6Q7g222ZwFeTW3HPHC6//hPkHugFL 417 | 4lNGwS9CKzjv5yn5yrMaEiWVYT9nDllYQaPU2fEIgl+yssCkMaWybpZhL5ptNvtF78rh 418 | HWKsJXROdvRJh1FQKZ9GhrSxC7LXoOcput5H9sSBibgHKuk/ceRIwFSUkmZ0TwtuXnTX 419 | Xfyi+O93xWrKDCrC7FRIN61kntol+5eexHvs22i3LCjhkvDkqPEZI6MwSEabwWbMFDay 420 | r6K7BV6jBCFFyaONtopWK24785VZapXdTrKosC+NeLZ6aqSp+uP0J3ezlRVUIajqkxaS 421 | FBRXLt2oTZL3DjgrOj8psxfe8li1f/Aw45uwctf7jXnkKFcQC82b0Nq/6L8Zzdcv3n9Z 422 | 9vx7521nXrPT/YAKHczHXAGgbw3nV5GnCAMroYPpYFcKW7lt/EHoZyT8QsnUcDP5H3Hb 423 | +fPcM7w0I/P6THoKRJeykq5T/CQeTawbxM2Sh4uSW06y7Fo9Qxj8P4FbwmmCsBYP44QX 424 | OJYQnmEFFvB7lVKik3WUOU2ox99ynBwVbMnz4jvvDJ8Y8bxYgSdGvbzi9SGxPj9H23Ch 425 | XkxGObPmdof9TJaeZTnIwoMq7tXGdI57+qM8fNNvKBQLhZJn0dGeeVGbg394nMRtWct1 426 | BgXB4yR5i6SRnKfia87GN3AFF/vYjq9fRISSWL2LKRVMpDcD+J2aXgWwSAKSooCe+gV0 427 | n/rQafyKPZKShlOFRYYSB7EoiA//SNpHX/zjzfhe0v1B/It4/ALp5griW0k3H/s69ia5 428 | O34N40eVwv5M8Rnsh6hT1PP/KnxNr2mb9aCVFQWLUKav0zfpV4ob2Y3iDmMf7OX7THvN 429 | ey390G/W1sEs03TLsyaumn+aZ7byB+AA9S0WPiOTt5osZtxTmdSqVJekoRsFs4Me3hEr 430 | i8l6VH2HGfcLLydnFqek/oIVgfsGu6Q6ooUqthVYKysqcIJCBDUgrDeZwGxeq7dYrDwh 431 | dNKteLDXbjonRxLGpAUt13WEntxLBJYRGdlYTKSb4NJJU8gkRJ9lvecDtyyt+nHPjwNZ 432 | aQXZ2uICLT9FE+98jrgJV7Ayflf8k0fjKwYF6eEUwWuV7sngGnCKbqZYyb9EO34n/2c/ 433 | eqvF4gkrA6qhVv7qTr+rz8Uv640wH7+uL4CF0ATN+G18MdYkeINE5G4EvE+C+vqFc5ub 434 | cura13S1d65a1ibXkIsxoPU7kG5A2oaEzgb/wwGofgDd1r6G9CHSl9ithGRFykQqQ6pD 435 | akLqQLoBaRtSX2L4h21gNE3AM46fPI6fOo6nUl7aftk4fvk4XsbtkvehTGParxrHXzOO 436 | v3Ycv24cf904fv04/vpxvPz/bJfIs2Fcedc4HvEbI2835f8fhx5CqwplbmRzdHJlYW0K 437 | ZW5kb2JqCjM3IDAgb2JqCjY1MzgKZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9Gb250 438 | IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZvbnQgL1JLTEFOSytIZWx2ZXRpY2EtQm9s 439 | ZCAvRm9udERlc2NyaXB0b3IKMzggMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNvZGlu 440 | ZyAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAyMjIgL1dpZHRocyBbIDI3OAowIDAgMCAw 441 | IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg 442 | MCAwIDAgNzIyIDcyMiAwCjAgMCA2MTEgMCAwIDAgMCAwIDYxMSAwIDAgMCA2NjcgMCAw 443 | IDAgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiAwIDAKNjExIDU1NiAwIDYx 444 | MSAwIDI3OCAwIDAgMjc4IDAgNjExIDYxMSA2MTEgMCAzODkgNTU2IDAgMCAwIDc3OCAw 445 | IDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg 446 | MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAw 447 | IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg 448 | MCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2 449 | MTEgXSA+PgplbmRvYmoKMzggMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9G 450 | b250TmFtZSAvUktMQU5LK0hlbHZldGljYS1Cb2xkIC9GbGFncyAzMiAvRm9udEJCb3gK 451 | Wy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDc3MCAv 452 | RGVzY2VudCAtMjMwIC9DYXBIZWlnaHQKNzIwIC9TdGVtViAwIC9YSGVpZ2h0IDY0NCAv 453 | TWF4V2lkdGggMTUwMCAvRm9udEZpbGUyIDM5IDAgUiA+PgplbmRvYmoKMzkgMCBvYmoK 454 | PDwgL0xlbmd0aCA0MCAwIFIgL0xlbmd0aDEgOTgzMiAvRmlsdGVyIC9GbGF0ZURlY29k 455 | ZSA+PgpzdHJlYW0KeAHdWgl0U8e5/udu2rxItmUtXiRZkuVF3hch22DZyAvYMsYssR07 456 | WBgTQ4CYJU4IgRIgtWPSJnltgBD6yEIbCi95skkTERJKKX0hTejJ1hdKKOlCCClxSVOy 457 | vBhdvX+ujIN9enI4pzl957x79d+Zf9Z/vv+ff+bO1bo1d/RANGwGFprb/X1LQbpsxwDI 458 | /u6V/r4In/A48ju6+9eZIzzvBGAHl/bdujLCy58DUO28dcX68fqJSwCiL/b2+DGUrqv4 459 | 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 561 | 7+adv3vqpMtcVuYoSNRNy5jbsuHJU7/bz+JEILi/AMGC33GjwE3/mQFB4POCIEcCJBZJ 562 | mfciYobvhDiEF/HN5VosajyWX0AsSXQTLu3E45kBYvnJAZIpnhDfO/iMeFr8DSk8wFVf 563 | vcxqxo6yxqsXMP4p1QNL32u5m/g3JV9mhuWeqkamkfXFdDAdbGeMoDLF2JQmM2GHsZiQ 564 | YOhIihMSZco0tBTeRBwySBhSJmocOlPyv1GL/6mla3zJvnI+VPHO+XMVofMRy5H8B744 565 | ofGfD52/5vy0aOVoR1pqR4JOW6S1ot1bS4roLqWILSc68SOCrkQMlaYkpCfNTGWOHBHP 566 | 793jq3mHf028OjT2S/5NjrlIyOw5Ca9efZi9/dXaZxc0R+yLPiFMv6j+o0uLiSx+6bTj 567 | +0ceFOGXbC9+g63Hvzc0whz8FtsC8/D77kJox++DVENxSPQS8Ks3tDQ0VjU1ZNf3rOjv 568 | Wbes259TffuKJbTUtasDI71IdyHRcwL6H6H9SKhPOIl0Guki0pdYSY6kR8pAmoZUj9SK 569 | 1It0F9Ig0q7w+IV1YCJO0BNN5qum8NVT+NopPP2v0vXtSdBd1/6CKfn+KTwOelJ9Cevr 570 | 6t86JX/ZFH7FFH7VFP72KXzfFH7NFH7tFP7OyfyYpKH/BeK8N5AKZW5kc3RyZWFtCmVu 571 | ZG9iago0MCAwIG9iago1ODkxCmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvRm9udCAv 572 | U3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9GS0VIWUgrSGVsdmV0aWNhIC9Gb250 573 | RGVzY3JpcHRvcgo0MSAwIFIgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nIC9GaXJz 574 | dENoYXIgMzIgL0xhc3RDaGFyIDExOSAvV2lkdGhzIFsgMjc4CjAgMCAwIDAgMCAwIDAg 575 | MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU4NCAwIDU4NCAw 576 | IDAgNjY3IDAKNzIyIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg 577 | MCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1MDAgNTU2CjU1NiAyNzggMCA1NTYgMjIy 578 | IDAgNTAwIDIyMiAwIDU1NiA1NTYgMCA1NTYgMzMzIDUwMCAyNzggNTU2IDAgNzIyIF0g 579 | Pj4KZW5kb2JqCjQxIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5h 580 | bWUgL0ZLRUhZSCtIZWx2ZXRpY2EgL0ZsYWdzIDMyIC9Gb250QkJveCBbLTk1MSAtNDgx 581 | IDE0NDUgMTEyMl0KL0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA3NzAgL0Rlc2NlbnQgLTIz 582 | MCAvQ2FwSGVpZ2h0IDcxNyAvU3RlbVYgMCAvWEhlaWdodAo2MzcgL01heFdpZHRoIDE1 583 | MDAgL0ZvbnRGaWxlMiA0MiAwIFIgPj4KZW5kb2JqCjQyIDAgb2JqCjw8IC9MZW5ndGgg 584 | NDMgMCBSIC9MZW5ndGgxIDEwNTk2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVh 585 | bQp4Ab1aC3RU1dXe5577mkcm88y8MzNMZibvJwRCAhlCEsLTQFASJJgAgQShPIQg/j/8 586 | UaFIQBSVh9KqVMtTZAgRJ6CWUhSpraK1otQ+rGBtV7No+2t/K8nMv8+dECHLdrm6XL13 587 | zmOfc+45+3xnn733PXNXrVzdAknQARRqZzcvXwjKFXoMgFyYv7R5eYI26TF9fX77Km+C 588 | FtIB6JKFyxctTdAytle7Fy1ZO/C8WQYw2Vpbmhck6qEP0+JWLEjQZDimaa1LV92doI3d 589 | mM5Zsmz+QL3pfaTzlzbfPTA+fIi09zvNS1sS7UOsPG35srtWDdBeTGuXr2wZaE/qkb+3 590 | gGCpFR4BFdwJEnCgx7sRQPpU7QYea1k9Xvlv/upHdySXfQ4GZBuvO6Y+pKQ/7zn54hct 591 | fSHNdvkfWKC63p6lYkYsA0BLsL5Xs32wRnkOI2sU6rKiMBFDOYYRGLKyxtmgg+yDhzE8 592 | jYFCG9kCazFsxvA4Bn4wdxCpHrKli5fDJ8lacJBJYQ3vmWm2e2xqjeedKBG7n/R8YPv4 593 | FLHj6n1E7F1JoBqnJk+Tp2ABeMgPIUDugRpIJ08cz1jiacKqg7AcQwcGqsSEHOxKLfS8 594 | QrIhwBN8JgipPDnh+UNBjudKQZQjXZ4zoSiPyY9TkQone067n/T8yL3I8wqGw4mqQxnY 595 | 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 714 | uPY2HdP3EwQU9Y1yxVvwW4Svu6xYSPErCB96/UGohGrl64aJyhcM0+AW/MJiBszELxlu 715 | g1l4jjgbW7PVSpwniuzkrnpyVU1DTVZNy5L2llVt85uVFtdHWoCZ5Rg6MDyM4WkMEQyn 716 | MVzA8DsMf2FdYtBj8GLIxxDGUIuhCcNyDB0YHsbwNIYIhtPxgQvwGswT8A6hy4bQY4fQ 717 | 44bQzHu5sT82mxvp+UNoNr8b6xWMb+Bn4ZD61iF02xD6ziE0+87gxv6Zh3YjvWwIvWII 718 | vXIIfdcQWvn+8AZ+Vw+pX8Po/we04JVlCmVuZHN0cmVhbQplbmRvYmoKNDMgMCBvYmoK 719 | NjgwNQplbmRvYmoKNDQgMCBvYmoKKFVudGl0bGVkKQplbmRvYmoKNDUgMCBvYmoKKE1h 720 | YyBPUyBYIDEwLjkuMSBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjQ2IDAgb2JqCihP 721 | bW5pR3JhZmZsZSBQcm8pCmVuZG9iago0NyAwIG9iagooRDoyMDE0MDExNDEwNTEzM1ow 722 | MCcwMCcpCmVuZG9iagoxIDAgb2JqCjw8IC9UaXRsZSA0NCAwIFIgL1Byb2R1Y2VyIDQ1 723 | IDAgUiAvQ3JlYXRvciA0NiAwIFIgL0NyZWF0aW9uRGF0ZSA0NyAwIFIgL01vZERhdGUK 724 | NDcgMCBSID4+CmVuZG9iagp4cmVmCjAgNDgKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAw 725 | MDMzMzY4IDAwMDAwIG4gCjAwMDAwMTExMjQgMDAwMDAgbiAKMDAwMDAwMTQxMyAwMDAw 726 | MCBuIAowMDAwMDEwOTU0IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAw 727 | MTM5MyAwMDAwMCBuIAowMDAwMDAxNTE4IDAwMDAwIG4gCjAwMDAwMDU1NjEgMDAwMDAg 728 | biAKMDAwMDAwMTcwMiAwMDAwMCBuIAowMDAwMDAyMjg2IDAwMDAwIG4gCjAwMDAwMDY4 729 | MTAgMDAwMDAgbiAKMDAwMDAxODg0NyAwMDAwMCBuIAowMDAwMDI1Njc5IDAwMDAwIG4g 730 | CjAwMDAwMTE1ODAgMDAwMDAgbiAKMDAwMDAwOTU4MyAwMDAwMCBuIAowMDAwMDAyMzA2 731 | IDAwMDAwIG4gCjAwMDAwMDQzNjkgMDAwMDAgbiAKMDAwMDAwNDM5MCAwMDAwMCBuIAow 732 | MDAwMDA1NTQwIDAwMDAwIG4gCjAwMDAwMDU1OTcgMDAwMDAgbiAKMDAwMDAwNjc4OSAw 733 | MDAwMCBuIAowMDAwMDA2ODQ3IDAwMDAwIG4gCjAwMDAwMDk1NjIgMDAwMDAgbiAKMDAw 734 | MDAxMDY3MyAwMDAwMCBuIAowMDAwMDA5NjIwIDAwMDAwIG4gCjAwMDAwMTA2NTMgMDAw 735 | MDAgbiAKMDAwMDAxMDc4MSAwMDAwMCBuIAowMDAwMDExMDQ0IDAwMDAwIG4gCjAwMDAw 736 | MTE0NzAgMDAwMDAgbiAKMDAwMDAxMTE3MiAwMDAwMCBuIAowMDAwMDExNDQ4IDAwMDAw 737 | IG4gCjAwMDAwMTEyNzkgMDAwMDAgbiAKMDAwMDAxMTQyNiAwMDAwMCBuIAowMDAwMDEx 738 | Mzg5IDAwMDAwIG4gCjAwMDAwMTE5NzIgMDAwMDAgbiAKMDAwMDAxMjE5NyAwMDAwMCBu 739 | IAowMDAwMDE4ODI2IDAwMDAwIG4gCjAwMDAwMTk0NDYgMDAwMDAgbiAKMDAwMDAxOTY3 740 | NyAwMDAwMCBuIAowMDAwMDI1NjU4IDAwMDAwIG4gCjAwMDAwMjYwNzEgMDAwMDAgbiAK 741 | MDAwMDAyNjI5NiAwMDAwMCBuIAowMDAwMDMzMTkyIDAwMDAwIG4gCjAwMDAwMzMyMTMg 742 | MDAwMDAgbiAKMDAwMDAzMzI0MCAwMDAwMCBuIAowMDAwMDMzMjkyIDAwMDAwIG4gCjAw 743 | MDAwMzMzMjYgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA0OCAvUm9vdCAyOCAwIFIg 744 | L0luZm8gMSAwIFIgL0lEIFsgPDFiNTkwN2QzZmI0NWU0ZGY2NWQ5MWI2YTUyM2M1MzRl 745 | Pgo8MWI1OTA3ZDNmYjQ1ZTRkZjY1ZDkxYjZhNTIzYzUzNGU+IF0gPj4Kc3RhcnR4cmVm 746 | CjMzNDczCiUlRU9GCjMgMCBvYmoKPDwvVHlwZSAvUGFnZSAvQ29udGVudHMgNSAwIFIg 747 | L01lZGlhQm94IFswIDAgMTExOSA3ODNdIC9QYXJlbnQgNCAwIFIgL1Jlc291cmNlcyA3 748 | IDAgUiA+PgplbmRvYmoKMjQgMCBvYmoKPDwvVHlwZSAvUGFnZSAvQ29udGVudHMgMjUg 749 | MCBSIC9NZWRpYUJveCBbMCAwIDExMTkgNzgzXSAvUGFyZW50IDQgMCBSIC9SZXNvdXJj 750 | ZXMgMjcgMCBSID4+CmVuZG9iagoxIDAgb2JqCjw8L0F1dGhvciAoRmxvIE0pL0NyZWF0 751 | aW9uRGF0ZSAoRDoyMDE0MDExNDEwMzYwMFopL0NyZWF0b3IgKE9tbmlHcmFmZmxlIFBy 752 | b2Zlc3Npb25hbCA1LjIuMSkvTW9kRGF0ZSAoRDoyMDE0MDExNDEwNTEwMFopL1Byb2R1 753 | Y2VyIDQ1IDAgUiAvVGl0bGUgKGJhY2t3YXJkLmdyYWZmbGUpPj4KZW5kb2JqCnhyZWYK 754 | MSAxCjAwMDAwMzQ4MDIgMDAwMDAgbiAKMyAxCjAwMDAwMzQ1OTEgMDAwMDAgbiAKMjQg 755 | MQowMDAwMDM0Njk1IDAwMDAwIG4gCnRyYWlsZXIKPDwvSUQgWzwxYjU5MDdkM2ZiNDVl 756 | NGRmNjVkOTFiNmE1MjNjNTM0ZT4gPDFiNTkwN2QzZmI0NWU0ZGY2NWQ5MWI2YTUyM2M1 757 | MzRlPl0gL0luZm8gMSAwIFIgL1ByZXYgMzM0NzMgL1Jvb3QgMjggMCBSIC9TaXplIDQ4 758 | Pj4Kc3RhcnR4cmVmCjM0OTgxCiUlRU9GCg== 759 | 760 | QuickLookThumbnail 761 | 762 | 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 796 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1 797 | YwAAAAAAAAAhAAAADGhySFIAAAAWAAABnGtvS1IAAAAWAAABnG5iTk8AAAAWAAABnGlk 798 | AAAAAAAWAAABnGh1SFUAAAAWAAABnGNzQ1oAAAAWAAABnGRhREsAAAAWAAABnHVrVUEA 799 | AAAWAAABnGFyAAAAAAAWAAABnGl0SVQAAAAWAAABnHJvUk8AAAAWAAABnG5sTkwAAAAW 800 | AAABnGhlSUwAAAAWAAABnGVzRVMAAAAWAAABnGZpRkkAAAAWAAABnHpoVFcAAAAWAAAB 801 | nHZpVk4AAAAWAAABnHNrU0sAAAAWAAABnHpoQ04AAAAWAAABnHJ1UlUAAAAWAAABnGZy 802 | RlIAAAAWAAABnG1zAAAAAAAWAAABnGNhRVMAAAAWAAABnHRoVEgAAAAWAAABnGRlREUA 803 | AAAWAAABnGVuVVMAAAAWAAABnHB0QlIAAAAWAAABnHBsUEwAAAAWAAABnGVsR1IAAAAW 804 | AAABnHN2U0UAAAAWAAABnHRyVFIAAAAWAAABnGphSlAAAAAWAAABnHB0UFQAAAAWAAAB 805 | nABEAEUATABMACAAVQAyADQAMQAyAE0AAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIElu 806 | Yy4sIDIwMTQAAFhZWiAAAAAAAADz2AABAAAAARYIWFlaIAAAAAAAAHAWAAA5RAAAA6NY 807 | WVogAAAAAAAAYhoAALdjAAAZCVhZWiAAAAAAAAAkpwAAD1gAALaAY3VydgAAAAAAAAQA 808 | AAAABQAKAA8AFAAZAB4AIwAoAC0AMgA2ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcA 809 | fACBAIYAiwCQAJUAmgCfAKMAqACtALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7 810 | AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEB 811 | qQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKE 812 | Ao4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YD 813 | ogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTw 814 | BP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsG 815 | jAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRgha 816 | CG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoK 817 | gQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZ 818 | DPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oP 819 | lg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKE 820 | EqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V 821 | 4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlr 822 | GZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcd 823 | cB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGh 824 | Ic4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3Jicm 825 | VyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2 826 | K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGww 827 | pDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3 828 | NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8 829 | ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1 830 | QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJ 831 | qUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7 832 | UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9Y 833 | fVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBX 834 | YKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo 835 | 7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGV 836 | cfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7 837 | BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSA 838 | hOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaO 839 | zo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkk 840 | mZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+ak 841 | VqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+L 842 | sACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67 843 | p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/ 844 | yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnU 845 | y9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM 846 | 4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070Dv 847 | zPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26 848 | /kv+3P9t//9wYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKDnZjZ3QAAAAAAAAA 849 | AQABAAAAAAAAAAEAAAABAAAAAAAAAAEAAAABAAAAAAAAAAEAAG5kaW4AAAAAAAAANgAA 850 | o8AAAFSAAABMwAAAmYAAACaAAAAPQAAAUEAAAFRAAAIzMwACMzMAAjMzAAAAAAAAAABz 851 | ZjMyAAAAAAABC7cAAAWW///zVwAABykAAP3X///7t////aYAAAPaAADA9m1tb2QAAAAA 852 | AAAQrAAAoHo0ODJTzPvuIQAAAAAAAAAAAAAAAAAAAAA= 853 | 854 | ReadOnly 855 | NO 856 | Sheets 857 | 858 | 859 | ActiveLayerIndex 860 | 0 861 | AutoAdjust 862 | 863 | BackgroundGraphic 864 | 865 | Bounds 866 | {{0, 0}, {1118.58, 782.89001}} 867 | Class 868 | SolidGraphic 869 | ID 870 | 2 871 | Style 872 | 873 | shadow 874 | 875 | Draws 876 | NO 877 | 878 | stroke 879 | 880 | Draws 881 | NO 882 | 883 | 884 | 885 | CanvasOrigin 886 | {0, 0} 887 | ColumnAlign 888 | 1 889 | ColumnSpacing 890 | 36 891 | DisplayScale 892 | 1.000 cm = 1.000 cm 893 | GraphicsList 894 | 895 | 896 | Bounds 897 | {{583.10156, 338.03125}, {146.45312, 59.832031}} 898 | Class 899 | ShapedGraphic 900 | ID 901 | 53 902 | Shape 903 | Rectangle 904 | Style 905 | 906 | shadow 907 | 908 | Draws 909 | NO 910 | 911 | stroke 912 | 913 | Pattern 914 | 1 915 | 916 | 917 | Text 918 | 919 | Text 920 | {\rtf1\ansi\ansicpg1252\cocoartf1265 921 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 922 | {\colortbl;\red255\green255\blue255;} 923 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 924 | 925 | \f0\fs24 \cf0 Authentication success: your previous action is executed} 926 | VerticalPad 927 | 0 928 | 929 | 930 | 931 | Bounds 932 | {{501, 270}, {118.35156, 27}} 933 | Class 934 | ShapedGraphic 935 | ID 936 | 31 937 | Shape 938 | Rectangle 939 | Style 940 | 941 | shadow 942 | 943 | Draws 944 | NO 945 | 946 | stroke 947 | 948 | Pattern 949 | 1 950 | 951 | 952 | Text 953 | 954 | Text 955 | {\rtf1\ansi\ansicpg1252\cocoartf1265 956 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 957 | {\colortbl;\red255\green255\blue255;} 958 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 959 | 960 | \f0\fs24 \cf0 Authentication\ 961 | required} 962 | VerticalPad 963 | 0 964 | 965 | 966 | 967 | Class 968 | LineGraphic 969 | Head 970 | 971 | ID 972 | 9 973 | Info 974 | 3 975 | 976 | ID 977 | 51 978 | Points 979 | 980 | {518.48438, 424.9375} 981 | {566.03906, 392.67578} 982 | {566.80078, 325.94531} 983 | {518.48438, 307.94531} 984 | 985 | Style 986 | 987 | stroke 988 | 989 | HeadArrow 990 | UMLInheritance 991 | LineType 992 | 1 993 | TailArrow 994 | 0 995 | 996 | 997 | Tail 998 | 999 | ID 1000 | 5 1001 | 1002 | 1003 | 1004 | Class 1005 | LineGraphic 1006 | Head 1007 | 1008 | ID 1009 | 5 1010 | 1011 | ID 1012 | 50 1013 | Points 1014 | 1015 | {473.48438, 325.94531} 1016 | {473.48438, 406.9375} 1017 | 1018 | Style 1019 | 1020 | stroke 1021 | 1022 | HeadArrow 1023 | UMLInheritance 1024 | LineType 1025 | 1 1026 | TailArrow 1027 | 0 1028 | 1029 | 1030 | Tail 1031 | 1032 | ID 1033 | 9 1034 | 1035 | 1036 | 1037 | Bounds 1038 | {{428.48438, 406.9375}, {90, 36}} 1039 | Class 1040 | ShapedGraphic 1041 | ID 1042 | 5 1043 | Magnets 1044 | 1045 | {0, 1} 1046 | {0, -1} 1047 | {1, 0} 1048 | {-1, 0} 1049 | 1050 | Shape 1051 | Rectangle 1052 | Style 1053 | 1054 | Text 1055 | 1056 | Text 1057 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1058 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1059 | {\colortbl;\red255\green255\blue255;} 1060 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1061 | 1062 | \f0\b\fs24 \cf0 Login page} 1063 | VerticalPad 1064 | 0 1065 | 1066 | 1067 | 1068 | Bounds 1069 | {{266.74219, 285}, {136, 12}} 1070 | Class 1071 | ShapedGraphic 1072 | FitText 1073 | YES 1074 | Flow 1075 | Resize 1076 | ID 1077 | 49 1078 | Shape 1079 | Rectangle 1080 | Style 1081 | 1082 | shadow 1083 | 1084 | Draws 1085 | NO 1086 | 1087 | stroke 1088 | 1089 | Draws 1090 | NO 1091 | 1092 | 1093 | Text 1094 | 1095 | Align 1096 | 0 1097 | Text 1098 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1099 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1100 | {\colortbl;\red255\green255\blue255;} 1101 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 1102 | 1103 | \f0\fs20 \cf0 <<Click to follow this user>>} 1104 | VerticalPad 1105 | 0 1106 | 1107 | Wrap 1108 | NO 1109 | 1110 | 1111 | Class 1112 | LineGraphic 1113 | Head 1114 | 1115 | ID 1116 | 9 1117 | 1118 | ID 1119 | 27 1120 | Points 1121 | 1122 | {242, 307.94531} 1123 | {428.48438, 307.94531} 1124 | 1125 | Style 1126 | 1127 | stroke 1128 | 1129 | HeadArrow 1130 | UMLInheritance 1131 | LineType 1132 | 1 1133 | TailArrow 1134 | 0 1135 | 1136 | 1137 | Tail 1138 | 1139 | ID 1140 | 8 1141 | Info 1142 | 3 1143 | 1144 | 1145 | 1146 | Bounds 1147 | {{428.48438, 289.94531}, {90, 36}} 1148 | Class 1149 | ShapedGraphic 1150 | ID 1151 | 9 1152 | Magnets 1153 | 1154 | {0, 1} 1155 | {0, -1} 1156 | {1, 0} 1157 | {-1, 0} 1158 | 1159 | Shape 1160 | Rectangle 1161 | Style 1162 | 1163 | Text 1164 | 1165 | Text 1166 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1167 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1168 | {\colortbl;\red255\green255\blue255;} 1169 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1170 | 1171 | \f0\b\fs24 \cf0 Followed} 1172 | VerticalPad 1173 | 0 1174 | 1175 | 1176 | 1177 | Bounds 1178 | {{152, 289.94531}, {90, 36}} 1179 | Class 1180 | ShapedGraphic 1181 | ID 1182 | 8 1183 | Magnets 1184 | 1185 | {0, 1} 1186 | {0, -1} 1187 | {1, 0} 1188 | {-1, 0} 1189 | 1190 | Shape 1191 | Rectangle 1192 | Style 1193 | 1194 | Text 1195 | 1196 | Text 1197 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1198 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1199 | {\colortbl;\red255\green255\blue255;} 1200 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1201 | 1202 | \f0\b\fs24 \cf0 User profile} 1203 | VerticalPad 1204 | 0 1205 | 1206 | 1207 | 1208 | GridInfo 1209 | 1210 | HPages 1211 | 2 1212 | KeepToScale 1213 | 1214 | Layers 1215 | 1216 | 1217 | Lock 1218 | NO 1219 | Name 1220 | Layer 1 1221 | Print 1222 | YES 1223 | View 1224 | YES 1225 | 1226 | 1227 | LayoutInfo 1228 | 1229 | Animate 1230 | NO 1231 | circoMinDist 1232 | 18 1233 | circoSeparation 1234 | 0.0 1235 | layoutEngine 1236 | dot 1237 | neatoSeparation 1238 | 0.0 1239 | twopiSeparation 1240 | 0.0 1241 | 1242 | Orientation 1243 | 2 1244 | PrintOnePage 1245 | 1246 | RowAlign 1247 | 1 1248 | RowSpacing 1249 | 36 1250 | SheetTitle 1251 | action 1252 | UniqueID 1253 | 1 1254 | VPages 1255 | 1 1256 | 1257 | 1258 | ActiveLayerIndex 1259 | 0 1260 | AutoAdjust 1261 | 1262 | BackgroundGraphic 1263 | 1264 | Bounds 1265 | {{0, 0}, {1118.58, 782.89001}} 1266 | Class 1267 | SolidGraphic 1268 | ID 1269 | 2 1270 | Style 1271 | 1272 | shadow 1273 | 1274 | Draws 1275 | NO 1276 | 1277 | stroke 1278 | 1279 | Draws 1280 | NO 1281 | 1282 | 1283 | 1284 | CanvasOrigin 1285 | {0, 0} 1286 | ColumnAlign 1287 | 1 1288 | ColumnSpacing 1289 | 36 1290 | DisplayScale 1291 | 1.000 cm = 1.000 cm 1292 | GraphicsList 1293 | 1294 | 1295 | Bounds 1296 | {{498, 353.48438}, {136, 12}} 1297 | Class 1298 | ShapedGraphic 1299 | FitText 1300 | YES 1301 | Flow 1302 | Resize 1303 | ID 1304 | 52 1305 | Shape 1306 | Rectangle 1307 | Style 1308 | 1309 | shadow 1310 | 1311 | Draws 1312 | NO 1313 | 1314 | stroke 1315 | 1316 | Draws 1317 | NO 1318 | 1319 | 1320 | Text 1321 | 1322 | Align 1323 | 0 1324 | Text 1325 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1326 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1327 | {\colortbl;\red255\green255\blue255;} 1328 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 1329 | 1330 | \f0\fs20 \cf0 <<Authentication success>>} 1331 | VerticalPad 1332 | 0 1333 | 1334 | Wrap 1335 | NO 1336 | 1337 | 1338 | Class 1339 | LineGraphic 1340 | Head 1341 | 1342 | ID 1343 | 9 1344 | Info 1345 | 3 1346 | 1347 | ID 1348 | 51 1349 | Points 1350 | 1351 | {437, 421} 1352 | {484.55469, 388.73828} 1353 | {485.31641, 322.00781} 1354 | {437, 304.00781} 1355 | 1356 | Style 1357 | 1358 | stroke 1359 | 1360 | HeadArrow 1361 | UMLInheritance 1362 | LineType 1363 | 1 1364 | TailArrow 1365 | 0 1366 | 1367 | 1368 | Tail 1369 | 1370 | ID 1371 | 5 1372 | 1373 | 1374 | 1375 | Class 1376 | LineGraphic 1377 | Head 1378 | 1379 | ID 1380 | 5 1381 | 1382 | ID 1383 | 50 1384 | Points 1385 | 1386 | {392, 322.00781} 1387 | {392, 403} 1388 | 1389 | Style 1390 | 1391 | stroke 1392 | 1393 | HeadArrow 1394 | UMLInheritance 1395 | LineType 1396 | 1 1397 | TailArrow 1398 | 0 1399 | 1400 | 1401 | Tail 1402 | 1403 | ID 1404 | 9 1405 | 1406 | 1407 | 1408 | Bounds 1409 | {{347, 403}, {90, 36}} 1410 | Class 1411 | ShapedGraphic 1412 | ID 1413 | 5 1414 | Magnets 1415 | 1416 | {0, 1} 1417 | {0, -1} 1418 | {1, 0} 1419 | {-1, 0} 1420 | 1421 | Shape 1422 | Rectangle 1423 | Style 1424 | 1425 | Text 1426 | 1427 | Text 1428 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1429 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1430 | {\colortbl;\red255\green255\blue255;} 1431 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1432 | 1433 | \f0\b\fs24 \cf0 Login page} 1434 | VerticalPad 1435 | 0 1436 | 1437 | 1438 | 1439 | Bounds 1440 | {{185.25781, 281.0625}, {137, 12}} 1441 | Class 1442 | ShapedGraphic 1443 | FitText 1444 | YES 1445 | Flow 1446 | Resize 1447 | ID 1448 | 49 1449 | Shape 1450 | Rectangle 1451 | Style 1452 | 1453 | shadow 1454 | 1455 | Draws 1456 | NO 1457 | 1458 | stroke 1459 | 1460 | Draws 1461 | NO 1462 | 1463 | 1464 | Text 1465 | 1466 | Align 1467 | 0 1468 | Text 1469 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1470 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1471 | {\colortbl;\red255\green255\blue255;} 1472 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 1473 | 1474 | \f0\fs20 \cf0 <<Authentication required>>} 1475 | VerticalPad 1476 | 0 1477 | 1478 | Wrap 1479 | NO 1480 | 1481 | 1482 | Class 1483 | LineGraphic 1484 | Head 1485 | 1486 | ID 1487 | 9 1488 | 1489 | ID 1490 | 27 1491 | Points 1492 | 1493 | {160.51562, 304.00781} 1494 | {347, 304.00781} 1495 | 1496 | Style 1497 | 1498 | stroke 1499 | 1500 | HeadArrow 1501 | UMLInheritance 1502 | LineType 1503 | 1 1504 | TailArrow 1505 | 0 1506 | 1507 | 1508 | Tail 1509 | 1510 | ID 1511 | 8 1512 | Info 1513 | 3 1514 | 1515 | 1516 | 1517 | Bounds 1518 | {{347, 286.00781}, {90, 36}} 1519 | Class 1520 | ShapedGraphic 1521 | ID 1522 | 9 1523 | Magnets 1524 | 1525 | {0, 1} 1526 | {0, -1} 1527 | {1, 0} 1528 | {-1, 0} 1529 | 1530 | Shape 1531 | Rectangle 1532 | Style 1533 | 1534 | Text 1535 | 1536 | Text 1537 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1538 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1539 | {\colortbl;\red255\green255\blue255;} 1540 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1541 | 1542 | \f0\b\fs24 \cf0 Page B} 1543 | VerticalPad 1544 | 0 1545 | 1546 | 1547 | 1548 | Bounds 1549 | {{70.515625, 286.00781}, {90, 36}} 1550 | Class 1551 | ShapedGraphic 1552 | ID 1553 | 8 1554 | Magnets 1555 | 1556 | {0, 1} 1557 | {0, -1} 1558 | {1, 0} 1559 | {-1, 0} 1560 | 1561 | Shape 1562 | Rectangle 1563 | Style 1564 | 1565 | Text 1566 | 1567 | Text 1568 | {\rtf1\ansi\ansicpg1252\cocoartf1265 1569 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 1570 | {\colortbl;\red255\green255\blue255;} 1571 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 1572 | 1573 | \f0\b\fs24 \cf0 Page A} 1574 | VerticalPad 1575 | 0 1576 | 1577 | 1578 | 1579 | GridInfo 1580 | 1581 | HPages 1582 | 2 1583 | KeepToScale 1584 | 1585 | Layers 1586 | 1587 | 1588 | Lock 1589 | NO 1590 | Name 1591 | Layer 1 1592 | Print 1593 | YES 1594 | View 1595 | YES 1596 | 1597 | 1598 | LayoutInfo 1599 | 1600 | Animate 1601 | NO 1602 | circoMinDist 1603 | 18 1604 | circoSeparation 1605 | 0.0 1606 | layoutEngine 1607 | dot 1608 | neatoSeparation 1609 | 0.0 1610 | twopiSeparation 1611 | 0.0 1612 | 1613 | Orientation 1614 | 2 1615 | PrintOnePage 1616 | 1617 | RowAlign 1618 | 1 1619 | RowSpacing 1620 | 36 1621 | SheetTitle 1622 | redirect 1623 | UniqueID 1624 | 2 1625 | VPages 1626 | 1 1627 | 1628 | 1629 | SmartAlignmentGuidesActive 1630 | YES 1631 | SmartDistanceGuidesActive 1632 | YES 1633 | UseEntirePage 1634 | 1635 | WindowInfo 1636 | 1637 | CurrentSheet 1638 | 1 1639 | ExpandedCanvases 1640 | 1641 | Frame 1642 | {{331, 158}, {1253, 938}} 1643 | ListView 1644 | 1645 | OutlineWidth 1646 | 142 1647 | RightSidebar 1648 | 1649 | ShowRuler 1650 | 1651 | Sidebar 1652 | 1653 | SidebarWidth 1654 | 120 1655 | VisibleRegion 1656 | {{0, 0}, {1118, 783}} 1657 | Zoom 1658 | 1 1659 | ZoomValues 1660 | 1661 | 1662 | action 1663 | 1 1664 | 1 1665 | 1666 | 1667 | redirect 1668 | 1 1669 | 1 1670 | 1671 | 1672 | 1673 | saveQuickLookFiles 1674 | YES 1675 | 1676 | 1677 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backward.tests.settings') 7 | os.environ.setdefault('DJANGO_CONFIGURATION', 'Test') 8 | 9 | from django.core.management import execute_from_command_line 10 | 11 | execute_from_command_line(sys.argv) 12 | 13 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | from setuptools import setup, find_packages 4 | 5 | version = __import__('backward').__version__ 6 | 7 | root = os.path.abspath(os.path.dirname(__file__)) 8 | 9 | with open(os.path.join(root, 'README.rst')) as f: 10 | README = f.read() 11 | 12 | setup( 13 | name='django-backward', 14 | version=version, 15 | description='A Django application to store your previous history and action in your session engine', 16 | long_description=README, 17 | author='Florent Messa', 18 | author_email='florent.messa@gmail.com', 19 | url='http://github.com/thoas/django-backward', 20 | packages=find_packages(), 21 | zip_safe=False, 22 | include_package_data=True, 23 | classifiers=[ 24 | 'Environment :: Web Environment', 25 | 'Intended Audience :: Developers', 26 | 'License :: OSI Approved :: MIT License', 27 | 'Operating System :: OS Independent', 28 | 'Programming Language :: Python', 29 | 'Programming Language :: Python :: 3', 30 | 'Topic :: Utilities', 31 | ] 32 | ) 33 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = 3 | py27-dj{18,19}, 4 | py{34,35}-dj{18,19} 5 | downloadcache = .tox/_download/ 6 | 7 | [testenv] 8 | basepython = 9 | py27: python2.7 10 | py34: python3.4 11 | py35: python3.5 12 | commands: 13 | make test 14 | deps = 15 | coverage 16 | python-dateutil 17 | mock 18 | {py27,py34,py35}-dj18: Django>=1.8,<1.9 19 | {py27,py34,py35}-dj19: Django>=1.9,<1.10 20 | --------------------------------------------------------------------------------