From df5d1d12a83edf3b4075eac779e88038733ff141 Mon Sep 17 00:00:00 2001 From: Shiv Date: Wed, 29 Mar 2017 05:09:55 -0700 Subject: [PATCH 1/2] added dependencies --- .babelrc | 3 + app/component/login/_login.scss | 0 app/component/login/login.html | 32 ++++++++++ app/component/login/login.js | 27 ++++++++ app/component/signup/_signup.scss | 0 app/component/signup/signup.html | 25 ++++++++ app/component/signup/signup.js | 25 ++++++++ app/config/router-config.js | 31 +++++++++ app/entry.js | 39 ++++++++++++ app/index.html | 12 ++++ app/scss/main.scss | 3 + app/service/auth-service.js | 88 ++++++++++++++++++++++++++ app/view/home/_home.scss | 0 app/view/home/home-controller.js | 9 +++ app/view/home/home.html | 3 + app/view/landing/_landing.scss | 0 app/view/landing/landing-controller.js | 10 +++ app/view/landing/landing.html | 25 ++++++++ webpack.config.js | 42 ++++++++++++ 19 files changed, 374 insertions(+) create mode 100644 .babelrc create mode 100644 app/component/login/_login.scss create mode 100644 app/component/login/login.html create mode 100644 app/component/login/login.js create mode 100644 app/component/signup/_signup.scss create mode 100644 app/component/signup/signup.html create mode 100644 app/component/signup/signup.js create mode 100644 app/config/router-config.js create mode 100644 app/entry.js create mode 100644 app/index.html create mode 100644 app/scss/main.scss create mode 100644 app/service/auth-service.js create mode 100644 app/view/home/_home.scss create mode 100644 app/view/home/home-controller.js create mode 100644 app/view/home/home.html create mode 100644 app/view/landing/_landing.scss create mode 100644 app/view/landing/landing-controller.js create mode 100644 app/view/landing/landing.html create mode 100644 webpack.config.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..c13c5f62 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} diff --git a/app/component/login/_login.scss b/app/component/login/_login.scss new file mode 100644 index 00000000..e69de29b diff --git a/app/component/login/login.html b/app/component/login/login.html new file mode 100644 index 00000000..97b0b545 --- /dev/null +++ b/app/component/login/login.html @@ -0,0 +1,32 @@ +
+
+
+ +
+ +
+ +
+ + +
+
+ diff --git a/app/component/login/login.js b/app/component/login/login.js new file mode 100644 index 00000000..dec7c927 --- /dev/null +++ b/app/component/login/login.js @@ -0,0 +1,27 @@ +'use strict'; + +require('./_login.scss'); + +module.exports = { + template: require('./login.html'), + controller: ['$log', '$location', 'authService', LoginController], + controllerAs: 'loginCtrl' +}; + +function LoginController($log, $location, authService) { + $log.debug('LoginController'); + + authService.getToken() + .then( () => { + $location.url('/home'); + }); + + this.login = function() { + $log.debug('loginCtrl.login'); + + authService.login(this.user) + .then( () => { + $location.url('/home'); + }); + }; +}; diff --git a/app/component/signup/_signup.scss b/app/component/signup/_signup.scss new file mode 100644 index 00000000..e69de29b diff --git a/app/component/signup/signup.html b/app/component/signup/signup.html new file mode 100644 index 00000000..44bc8764 --- /dev/null +++ b/app/component/signup/signup.html @@ -0,0 +1,25 @@ +
+ +
diff --git a/app/component/signup/signup.js b/app/component/signup/signup.js new file mode 100644 index 00000000..b5923714 --- /dev/null +++ b/app/component/signup/signup.js @@ -0,0 +1,25 @@ +'use strict'; + +module.exports = { + template: require('./signup.html'), + controller: ['$log', '$location', 'authService', SignupController], + controllerAs: 'signupCtrl' +}; + +function SignupController($log, $location, authService) { + $log.debug('SignupController'); + + authService.getToken() + .then( () => { + $location.url('/home'); + }); + + this.signup = function(user) { + $log.debug('signupCtrl.signup'); + + authService.signup(user) + .then( () => { + $location.url('/home') + }); + }; +}; diff --git a/app/config/router-config.js b/app/config/router-config.js new file mode 100644 index 00000000..5357c24b --- /dev/null +++ b/app/config/router-config.js @@ -0,0 +1,31 @@ +'use strict'; + +module.exports = ['$stateProvider', '$urlRouterProvider', routerConfig]; + +function routerConfig($stateProvider, $urlRouterProvider) { + $urlRouterProvider.when('', '/join#signup'); + $urlRouterProvider.when('/', '/join#signup'); + $urlRouterProvider.when('/signup', '/join#signup'); + $urlRouterProvider.when('/login', '/join#login'); + + let states = [ + { + name: 'home', + url: '/home', + template: require('../view/home/home.html'), + controller: 'HomeController', + controllerAs: 'homeCtrl' + }, + { + name: 'landing', + url: '/join', + template: require('../view/landing/landing.html'), + controller: 'LandingController', + controllerAs: 'landingCtrl' + } + ]; + + states.forEach( state => { + $stateProvider.state(state); + }); +}; diff --git a/app/entry.js b/app/entry.js new file mode 100644 index 00000000..358681e9 --- /dev/null +++ b/app/entry.js @@ -0,0 +1,39 @@ +'use strict'; + +require('./scss/main.scss'); + +const path = require('path'); +const angular = require('angular'); +const camelcase = require('camelcase'); +const pascalcase = require('pascalcase'); +const uiRouter = require('angular-ui-router'); +const ngTouch = require('angular-touch'); +const ngAnimate = require('angular-animate'); + +const cfgram = angular.module('cfgram', [ngTouch, ngAnimate, uiRouter]); + +let context = require.context('./config/', true, /\.js$/); +context.keys().forEach( key => { + cfgram.config(context(key)); +}); + +context = require.context('./view/', true, /\.js$/); +context.keys().forEach( key => { + let name = pascalcase(path.basename(key, '.js')); + let module = context(key); + cfgram.controller(name, module); +}); + +context = require.context('./service/', true, /\.js$/); +context.keys().forEach( key => { + let name = camelcase(path.basename(key, '.js')); + let module = context(key); + cfgram.service(name, module); +}); + +context = require.context('./component/', true, /\.js$/); +context.keys().forEach( key => { + let name = camelcase(path.basename(key, '.js')); + let module = context(key); + cfgram.component(name, module); +}); diff --git a/app/index.html b/app/index.html new file mode 100644 index 00000000..dff91bf6 --- /dev/null +++ b/app/index.html @@ -0,0 +1,12 @@ + + + + + + cfgram. + + + + + + diff --git a/app/scss/main.scss b/app/scss/main.scss new file mode 100644 index 00000000..35fe4102 --- /dev/null +++ b/app/scss/main.scss @@ -0,0 +1,3 @@ +body { + background: orange; +} diff --git a/app/service/auth-service.js b/app/service/auth-service.js new file mode 100644 index 00000000..41fe4c15 --- /dev/null +++ b/app/service/auth-service.js @@ -0,0 +1,88 @@ +'use strict'; + +module.exports = ['$q', '$log', '$http', '$window', authService]; + +function authService($q, $log, $http, $window) { + $log.debug('authService'); + + let service = {}; + let token = null; + + function setToken(_token) { + $log.debug('authService.setToken'); + + if (! _token) { + return $q.reject(new Error('no token')); + }; + + $window.localStorage.setItem('token', _token); + token = _token; + return $q.resolve(token); + } + + service.getToken = function() { + $log.debug('authService.getToken'); + if (token) { + return $q.resolve(token); + }; + + token = $window.localStorage.getItem('token'); + if (token) return $q.resolve(token); + return $q.reject(new Error('token not found')); + }; + + service.signup = function(user) { + $log.debug('authService.signup'); + + let url = `${__API_URL__}/api/signup`; + let config = { + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + } + }; + + return $http.post(url, user, config) + .then( res => { + $log.log('success:', res.data); + return setToken(res.data); + }) + .catch( err => { + $log.error('failure:', err.message); + return $q.reject(err); + }); + }; + + service.logout = function() { + $log.debug('authService.logout'); + + $window.localStorage.removeItem('token'); + token = null; + return $q.resolve(); + }; + + service.login = function(user) { + $log.debug('authService.login'); + + let url = `${__API_URL__}/api/login`; + let base64 = $window.btoa(`${user.username}:${user.password}`); + let config = { + headers: { + Accept: 'application/json', + Authorization: `Basic ${base64}` + } + }; + + return $http.get(url, config) + .then( res => { + $log.log('success', res.data); + return setToken(res.data); + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + return service; +}; diff --git a/app/view/home/_home.scss b/app/view/home/_home.scss new file mode 100644 index 00000000..e69de29b diff --git a/app/view/home/home-controller.js b/app/view/home/home-controller.js new file mode 100644 index 00000000..7f48d88b --- /dev/null +++ b/app/view/home/home-controller.js @@ -0,0 +1,9 @@ +'use strict'; + +require('./_home.scss'); + +module.exports = ['$log', HomeController]; + +function HomeController($log) { + $log.debug('HomeController'); +}; diff --git a/app/view/home/home.html b/app/view/home/home.html new file mode 100644 index 00000000..eeeb0858 --- /dev/null +++ b/app/view/home/home.html @@ -0,0 +1,3 @@ +
+

welcome home!

+
diff --git a/app/view/landing/_landing.scss b/app/view/landing/_landing.scss new file mode 100644 index 00000000..e69de29b diff --git a/app/view/landing/landing-controller.js b/app/view/landing/landing-controller.js new file mode 100644 index 00000000..783dfec3 --- /dev/null +++ b/app/view/landing/landing-controller.js @@ -0,0 +1,10 @@ +'use strict'; + +require('./_landing.scss'); + +module.exports = ['$log', '$location', '$rootScope', 'authService', LandingController]; + +function LandingController($log, $location, authService) { + let url = $location.url(); + this.showSignup = url === '/join#signup' || url === '/join'; +}; diff --git a/app/view/landing/landing.html b/app/view/landing/landing.html new file mode 100644 index 00000000..efa4547a --- /dev/null +++ b/app/view/landing/landing.html @@ -0,0 +1,25 @@ +
+
+
+ +

already a member?

+ + sign in here. + +
+
+ +
+
+ +

want to sign up?

+ + sign up here. + +
+
+
diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..5125b9f7 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,42 @@ +'use strict'; + +require('dotenv').load(); + +const webpack = require('webpack'); +const HTMLPlugin = require('html-webpack-plugin'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); + +module.exports = { + devtool: 'eval', + entry: `${__dirname}/app/entry.js`, + output: { + filename: 'bundle.js', + path: `${__dirname}/build` + }, + plugins: [ + new HTMLPlugin({ + template: `${__dirname}/app/index.html` + }), + new ExtractTextPlugin('bundle.css'), + new webpack.DefinePlugin({ + __API_URL__: JSON.stringify(process.env.API_URL) + }) + ], + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.html$/, + loader: 'html-loader' + }, + { + test: /\.scss$/, + loader: ExtractTextPlugin.extract(['css-loader', 'sass-loader']) + } + ] + } +}; From e00ff8832fd5db3cdab054c3730358889bd048a5 Mon Sep 17 00:00:00 2001 From: shivprogrammer Date: Fri, 28 Apr 2017 21:01:45 -0700 Subject: [PATCH 2/2] removed all lecture styling, fixed weird bug with the headers of gallerService and deleteDone, all tests passing --- .gitignore | 118 +++++++++++++++ README.md | 72 --------- .../create-gallery/_create-gallery.scss | 1 + .../create-gallery/create-gallery.html | 27 ++++ .../gallery/create-gallery/create-gallery.js | 24 +++ .../gallery/edit-gallery/_edit-gallery.scss | 1 + .../gallery/edit-gallery/edit-gallery.html | 19 +++ .../gallery/edit-gallery/edit-gallery.js | 20 +++ .../gallery/gallery-item/_gallery-item.scss | 1 + .../gallery/gallery-item/gallery-item.html | 19 +++ .../gallery/gallery-item/gallery-item.js | 22 +++ .../_thumbnail-container.scss | 1 + .../thumbnail-container.html | 8 + .../thumbnail-container.js | 11 ++ .../gallery/thumbnail/_thumbnail.scss | 1 + .../gallery/thumbnail/thumbnail.html | 4 + app/component/gallery/thumbnail/thumbnail.js | 20 +++ .../gallery/upload-pic/_upload-pic.scss | 1 + .../gallery/upload-pic/upload-pic.html | 23 +++ .../gallery/upload-pic/upload-pic.js | 27 ++++ app/component/landing/login/_login.scss | 1 + app/component/{ => landing}/login/login.html | 7 +- app/component/{ => landing}/login/login.js | 2 +- app/component/landing/signup/_signup.scss | 1 + app/component/landing/signup/signup.html | 25 ++++ app/component/{ => landing}/signup/signup.js | 4 +- app/component/login/_login.scss | 0 app/component/navbar/_navbar.scss | 1 + app/component/navbar/navbar.html | 10 ++ app/component/navbar/navbar.js | 44 ++++++ app/component/signup/_signup.scss | 0 app/component/signup/signup.html | 25 ---- app/config/log-config.js | 8 + app/config/router-config.js | 10 +- app/entry.js | 7 +- app/index.html | 11 +- app/scss/lib/base/_base.scss | 74 +++++++++ app/scss/lib/base/_reset.scss | 61 ++++++++ app/scss/lib/layout/_footer.scss | 5 + app/scss/lib/layout/_header.scss | 4 + app/scss/lib/layout/_layout.scss | 5 + app/scss/lib/theme/_vars.scss | 11 ++ app/scss/main.scss | 25 +++- app/service/auth-service.js | 42 +++--- app/service/gallery-service.js | 141 ++++++++++++++++++ app/service/pic-service.js | 43 ++++++ app/view/home/home-controller.js | 26 +++- app/view/home/home.html | 15 +- app/view/landing/_landing.scss | 1 + app/view/landing/landing-controller.js | 1 + app/view/landing/landing.html | 26 ++-- karma.conf.js | 75 ++++++++++ package.json | 52 +++++++ test/auth-service-test.js | 23 +++ test/edit-gallery-component-test.js | 48 ++++++ test/gallery-item-component-test.js | 82 ++++++++++ test/gallery-service-test.js | 87 +++++++++++ webpack.config.js | 10 +- wireframes/assets/cf-logo.png | Bin 6821 -> 0 bytes wireframes/signin.png | Bin 167865 -> 0 bytes wireframes/signup.png | Bin 169025 -> 0 bytes 61 files changed, 1279 insertions(+), 154 deletions(-) create mode 100644 .gitignore delete mode 100644 README.md create mode 100644 app/component/gallery/create-gallery/_create-gallery.scss create mode 100644 app/component/gallery/create-gallery/create-gallery.html create mode 100644 app/component/gallery/create-gallery/create-gallery.js create mode 100644 app/component/gallery/edit-gallery/_edit-gallery.scss create mode 100644 app/component/gallery/edit-gallery/edit-gallery.html create mode 100644 app/component/gallery/edit-gallery/edit-gallery.js create mode 100644 app/component/gallery/gallery-item/_gallery-item.scss create mode 100644 app/component/gallery/gallery-item/gallery-item.html create mode 100644 app/component/gallery/gallery-item/gallery-item.js create mode 100644 app/component/gallery/thumbnail-container/_thumbnail-container.scss create mode 100644 app/component/gallery/thumbnail-container/thumbnail-container.html create mode 100644 app/component/gallery/thumbnail-container/thumbnail-container.js create mode 100644 app/component/gallery/thumbnail/_thumbnail.scss create mode 100644 app/component/gallery/thumbnail/thumbnail.html create mode 100644 app/component/gallery/thumbnail/thumbnail.js create mode 100644 app/component/gallery/upload-pic/_upload-pic.scss create mode 100644 app/component/gallery/upload-pic/upload-pic.html create mode 100644 app/component/gallery/upload-pic/upload-pic.js create mode 100644 app/component/landing/login/_login.scss rename app/component/{ => landing}/login/login.html (83%) rename app/component/{ => landing}/login/login.js (93%) create mode 100644 app/component/landing/signup/_signup.scss create mode 100644 app/component/landing/signup/signup.html rename app/component/{ => landing}/signup/signup.js (86%) delete mode 100644 app/component/login/_login.scss create mode 100644 app/component/navbar/_navbar.scss create mode 100644 app/component/navbar/navbar.html create mode 100644 app/component/navbar/navbar.js delete mode 100644 app/component/signup/_signup.scss delete mode 100644 app/component/signup/signup.html create mode 100644 app/config/log-config.js create mode 100644 app/scss/lib/base/_base.scss create mode 100644 app/scss/lib/base/_reset.scss create mode 100644 app/scss/lib/layout/_footer.scss create mode 100644 app/scss/lib/layout/_header.scss create mode 100644 app/scss/lib/layout/_layout.scss create mode 100644 app/scss/lib/theme/_vars.scss create mode 100644 app/service/gallery-service.js create mode 100644 app/service/pic-service.js create mode 100644 karma.conf.js create mode 100644 package.json create mode 100644 test/auth-service-test.js create mode 100644 test/edit-gallery-component-test.js create mode 100644 test/gallery-item-component-test.js create mode 100644 test/gallery-service-test.js delete mode 100644 wireframes/assets/cf-logo.png delete mode 100644 wireframes/signin.png delete mode 100644 wireframes/signup.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..43eb113c --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# Created by https://www.gitignore.io/api/osx,windows,node + +build/ + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +### +.env + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.gitignore.io/api/osx,windows,node diff --git a/README.md b/README.md deleted file mode 100644 index f0bc82af..00000000 --- a/README.md +++ /dev/null @@ -1,72 +0,0 @@ -![cf](https://i.imgur.com/7v5ASc8.png) Lab 25 - Client Side Auth -====== - -## To Submit this Assignment - * create a fork of this repository - * push to your repository - * submit a pull request to this repository - * submit a link to your PR in canvas - * write a question and observation on canvas - -## Include - * `.eslintrc` - * `.babelrc` - * `.gitignore` - * `package.json` - * create an npm `build` script for running `webpack` - * create an npm `build-watch` script for running `webpack-dev-server --inline --hot` - * create an npm `test` script for running karma and all associated tests - * create an npm `test-watch` script for running karma on file system changes - * create an npm `lint` script for linting your JS with `eslint` - * **ignore the build directory** - * `webpack.config.js` - * this should include all of the production environment configurations used in lecture code - * `karma.config.js` - -## Description - * Create these directories to organize your code: - * app - * app/config - * app/view - * app/view/home - * app/view/landing - * app/scss - * app/scss/lib - * app/scss/lib/base - * app/scss/lib/layout - * app/scss/lib/theme - * app/service - * app/component - * app/component/landing - * include a **main.scss** - * include an `.scss` partial for each component you create - * style the application to meet the **sign in** & **sign up** mockups provided in the `wireframes` directory of this repo - * use `require.context` to add all of your angular construct definitions - -## Clone - * Clone, setup, and run the `slugram-backend` application in order for your angular app to communicate with the server - * [slugram-backend](https://github.com/slugbyte/slugram-backend) - * **note** - to access the deployed backend use the following: - * `https://slugram-backend.herokuapp.com` - * **note** - if you are using the cloned version, be sure to add your `.env` file - you can use the same one we used for our lecture 18 deployment - * **note** - this application should be running on the `staging` branch - * **note** - **DO NOT** include this application with your assignment submission - -## Functional Requirements - * Create 2 views: `/#/`, `/#/home/` - * each view should have its own controller - * the `/#/` view should be the default landing page - * the landing page markup should contain `` and `` components - * Create an auth service with for making `http` requests to the `slugram-backend` application - * this should have contain methods for sign up and sign in routes - * this should have methods to `get` and `delete` a token from local storage - * Create a sign up component - * this should have its own controller and use the `controllerAs` syntax - * this should have a form with username, email, and password fields - * this should use the auth service to signup and store a token - * this should redirect the page to `/#/home` on a successful form submit - * Create a login component - * this should have its own controller and use the `controllerAs` syntax - * this should have a form with username and password fields - * this should use the auth service to login and store a token - * this should redirect the page to `/#/home` on success diff --git a/app/component/gallery/create-gallery/_create-gallery.scss b/app/component/gallery/create-gallery/_create-gallery.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/create-gallery/_create-gallery.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/create-gallery/create-gallery.html b/app/component/gallery/create-gallery/create-gallery.html new file mode 100644 index 00000000..c1adb902 --- /dev/null +++ b/app/component/gallery/create-gallery/create-gallery.html @@ -0,0 +1,27 @@ + diff --git a/app/component/gallery/create-gallery/create-gallery.js b/app/component/gallery/create-gallery/create-gallery.js new file mode 100644 index 00000000..3976c301 --- /dev/null +++ b/app/component/gallery/create-gallery/create-gallery.js @@ -0,0 +1,24 @@ +'use strict'; + +require('./_create-gallery.scss'); + +module.exports = { + template: require('./create-gallery.html'), + controller: ['$log', 'galleryService', CreateGalleryController], + controllerAs: 'createGalleryCtrl' +}; + +function CreateGalleryController($log, galleryService) { + $log.debug('CreateGalleryController'); + + this.gallery = {}; + + this.createGallery = function() { + galleryService.createGallery(this.gallery) + .then( () => { + this.gallery.name = null; + this.gallery.desc = null; + }); + }; +}; + diff --git a/app/component/gallery/edit-gallery/_edit-gallery.scss b/app/component/gallery/edit-gallery/_edit-gallery.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/edit-gallery/_edit-gallery.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/edit-gallery/edit-gallery.html b/app/component/gallery/edit-gallery/edit-gallery.html new file mode 100644 index 00000000..f67339a1 --- /dev/null +++ b/app/component/gallery/edit-gallery/edit-gallery.html @@ -0,0 +1,19 @@ +
+ +
diff --git a/app/component/gallery/edit-gallery/edit-gallery.js b/app/component/gallery/edit-gallery/edit-gallery.js new file mode 100644 index 00000000..8a138909 --- /dev/null +++ b/app/component/gallery/edit-gallery/edit-gallery.js @@ -0,0 +1,20 @@ +'use strict'; + +require('./_edit-gallery.scss'); + +module.exports = { + template: require('./edit-gallery.html'), + controller: ['$log', 'galleryService', EditGalleryController], + controllerAs: 'editGalleryCtrl', + bindings: { + gallery: '<' + } +}; + +function EditGalleryController($log, galleryService) { + $log.debug('EditGalleryController'); + + this.updateGallery = function() { + galleryService.updateGallery(this.gallery._id, this.gallery); + }; +}; diff --git a/app/component/gallery/gallery-item/_gallery-item.scss b/app/component/gallery/gallery-item/_gallery-item.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/gallery-item/_gallery-item.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/gallery-item/gallery-item.html b/app/component/gallery/gallery-item/gallery-item.html new file mode 100644 index 00000000..3be8f9c7 --- /dev/null +++ b/app/component/gallery/gallery-item/gallery-item.html @@ -0,0 +1,19 @@ + +
  • + edit + delete +
  • diff --git a/app/component/gallery/gallery-item/gallery-item.js b/app/component/gallery/gallery-item/gallery-item.js new file mode 100644 index 00000000..18453222 --- /dev/null +++ b/app/component/gallery/gallery-item/gallery-item.js @@ -0,0 +1,22 @@ +'use strict'; + +require('./_gallery-item.scss'); + +module.exports = { + template: require('./gallery-item.html'), + controller: ['$log', 'galleryService', GalleryItemController], + controllerAs: 'galleryItemCtrl', + bindings: { + gallery: '<' + } +}; + +function GalleryItemController($log, galleryService) { + $log.debug('GalleryItemController'); + + this.showEditGallery = false; + + this.deleteGallery = function() { + galleryService.deleteGallery(this.gallery._id); + }; +}; diff --git a/app/component/gallery/thumbnail-container/_thumbnail-container.scss b/app/component/gallery/thumbnail-container/_thumbnail-container.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/thumbnail-container/_thumbnail-container.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/thumbnail-container/thumbnail-container.html b/app/component/gallery/thumbnail-container/thumbnail-container.html new file mode 100644 index 00000000..991ec8ba --- /dev/null +++ b/app/component/gallery/thumbnail-container/thumbnail-container.html @@ -0,0 +1,8 @@ +
    +

    {{ thumbnailContainerCtrl.gallery.name }}

    + + +
    + +
    +
    diff --git a/app/component/gallery/thumbnail-container/thumbnail-container.js b/app/component/gallery/thumbnail-container/thumbnail-container.js new file mode 100644 index 00000000..18bf16d4 --- /dev/null +++ b/app/component/gallery/thumbnail-container/thumbnail-container.js @@ -0,0 +1,11 @@ +'use strict'; + +require('./_thumbnail-container.scss'); + +module.exports = { + template: require('./thumbnail-container.html'), + controllerAs: 'thumbnailContainerCtrl', + bindings: { + gallery: '<' + } +}; diff --git a/app/component/gallery/thumbnail/_thumbnail.scss b/app/component/gallery/thumbnail/_thumbnail.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/thumbnail/_thumbnail.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/thumbnail/thumbnail.html b/app/component/gallery/thumbnail/thumbnail.html new file mode 100644 index 00000000..27a44836 --- /dev/null +++ b/app/component/gallery/thumbnail/thumbnail.html @@ -0,0 +1,4 @@ +
    + {{ thumbnailCtrl.pic.desc }} + delete +
    diff --git a/app/component/gallery/thumbnail/thumbnail.js b/app/component/gallery/thumbnail/thumbnail.js new file mode 100644 index 00000000..fe96846a --- /dev/null +++ b/app/component/gallery/thumbnail/thumbnail.js @@ -0,0 +1,20 @@ +'use strict'; + +require('./_thumbnail.scss'); + +module.exports = { + template: require('./thumbnail.html'), + controller: ['$log', 'picService', ThumbnailController], + controllerAs: 'thumbnailCtrl', + bindings: { + pic: '<' + } +}; + +function ThumbnailController($log, picService) { + $log.debug('ThumbnailController'); + + this.deletePic = function() { + $log.debug('thumbnailCtrl.deletePic'); + }; +}; diff --git a/app/component/gallery/upload-pic/_upload-pic.scss b/app/component/gallery/upload-pic/_upload-pic.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/gallery/upload-pic/_upload-pic.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/gallery/upload-pic/upload-pic.html b/app/component/gallery/upload-pic/upload-pic.html new file mode 100644 index 00000000..7f7e8705 --- /dev/null +++ b/app/component/gallery/upload-pic/upload-pic.html @@ -0,0 +1,23 @@ +
    +
    + +

    upload a new pic

    + +
    + + +
    + +
    +

    + select a pic to upload +

    + + +
    +
    +
    diff --git a/app/component/gallery/upload-pic/upload-pic.js b/app/component/gallery/upload-pic/upload-pic.js new file mode 100644 index 00000000..7af96236 --- /dev/null +++ b/app/component/gallery/upload-pic/upload-pic.js @@ -0,0 +1,27 @@ +'use strict'; + +require('./_upload-pic.scss'); + +module.exports = { + template: require('./upload-pic.html'), + controller: ['$log', 'picService', UploadPicController], + controllerAs: 'uploadPicCtrl', + bindings: { + gallery: '<' + } +}; + +function UploadPicController($log, picService) { + $log.debug('UploadPicController'); + + this.pic = {}; + + this.uploadPic = function() { + picService.uploadGalleryPic(this.gallery, this.pic) + .then( () => { + this.pic.name = null; + this.pic.desc = null; + this.pic.file = null; + }) + } +} diff --git a/app/component/landing/login/_login.scss b/app/component/landing/login/_login.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/landing/login/_login.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/login/login.html b/app/component/landing/login/login.html similarity index 83% rename from app/component/login/login.html rename to app/component/landing/login/login.html index 97b0b545..d43a7bf4 100644 --- a/app/component/login/login.html +++ b/app/component/landing/login/login.html @@ -5,11 +5,12 @@
    @@ -17,11 +18,12 @@
    @@ -29,4 +31,3 @@ - diff --git a/app/component/login/login.js b/app/component/landing/login/login.js similarity index 93% rename from app/component/login/login.js rename to app/component/landing/login/login.js index dec7c927..b7b47d14 100644 --- a/app/component/login/login.js +++ b/app/component/landing/login/login.js @@ -17,7 +17,7 @@ function LoginController($log, $location, authService) { }); this.login = function() { - $log.debug('loginCtrl.login'); + $log.log('loginCtrl.login()'); authService.login(this.user) .then( () => { diff --git a/app/component/landing/signup/_signup.scss b/app/component/landing/signup/_signup.scss new file mode 100644 index 00000000..ba7410c5 --- /dev/null +++ b/app/component/landing/signup/_signup.scss @@ -0,0 +1 @@ +@import "../../../scss/lib/theme/vars"; diff --git a/app/component/landing/signup/signup.html b/app/component/landing/signup/signup.html new file mode 100644 index 00000000..6f59c7e6 --- /dev/null +++ b/app/component/landing/signup/signup.html @@ -0,0 +1,25 @@ + diff --git a/app/component/signup/signup.js b/app/component/landing/signup/signup.js similarity index 86% rename from app/component/signup/signup.js rename to app/component/landing/signup/signup.js index b5923714..25539d16 100644 --- a/app/component/signup/signup.js +++ b/app/component/landing/signup/signup.js @@ -15,11 +15,11 @@ function SignupController($log, $location, authService) { }); this.signup = function(user) { - $log.debug('signupCtrl.signup'); + $log.debug('signupCtrl.signup()'); authService.signup(user) .then( () => { - $location.url('/home') + $location.url('/home'); }); }; }; diff --git a/app/component/login/_login.scss b/app/component/login/_login.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/component/navbar/_navbar.scss b/app/component/navbar/_navbar.scss new file mode 100644 index 00000000..96861e8d --- /dev/null +++ b/app/component/navbar/_navbar.scss @@ -0,0 +1 @@ +@import "../../scss/lib/theme/vars"; diff --git a/app/component/navbar/navbar.html b/app/component/navbar/navbar.html new file mode 100644 index 00000000..cbb82c20 --- /dev/null +++ b/app/component/navbar/navbar.html @@ -0,0 +1,10 @@ + diff --git a/app/component/navbar/navbar.js b/app/component/navbar/navbar.js new file mode 100644 index 00000000..7e68d70a --- /dev/null +++ b/app/component/navbar/navbar.js @@ -0,0 +1,44 @@ +'use strict'; + +require('./_navbar.scss'); + +module.exports = { + template: require('./navbar.html'), + controller: ['$log', '$location', '$rootScope', 'authService', NavbarController], + controllerAs: 'navbarCtrl' +}; + +function NavbarController($log, $location, $rootScope, authService) { + $log.debug('NavbarController'); + + this.checkPath = function() { + let path = $location.path(); + if (path === '/join') { + this.hideButtons = true; + }; + + if (path !== '/join') { + this.hideButtons = false; + authService.getToken() + .catch( () => { + $location.url('/join#login'); + }); + }; + }; + + this.checkPath(); + + $rootScope.$on('$locationChangeSuccess', () => { + this.checkPath(); + }); + + this.logout = function() { + $log.log('navbarCtrl.logout()'); + this.hideButtons = true; + authService.logout() + .then( () => { + $location.url('/'); + }); + }; +}; + diff --git a/app/component/signup/_signup.scss b/app/component/signup/_signup.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/component/signup/signup.html b/app/component/signup/signup.html deleted file mode 100644 index 44bc8764..00000000 --- a/app/component/signup/signup.html +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/app/config/log-config.js b/app/config/log-config.js new file mode 100644 index 00000000..a23c5ad3 --- /dev/null +++ b/app/config/log-config.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = ['$logProvider', logConfig]; + +function logConfig($logProvider) { + $logProvider.debugEnabled(__DEBUG__); +}; + diff --git a/app/config/router-config.js b/app/config/router-config.js index 5357c24b..0fb3568a 100644 --- a/app/config/router-config.js +++ b/app/config/router-config.js @@ -3,10 +3,10 @@ module.exports = ['$stateProvider', '$urlRouterProvider', routerConfig]; function routerConfig($stateProvider, $urlRouterProvider) { - $urlRouterProvider.when('', '/join#signup'); - $urlRouterProvider.when('/', '/join#signup'); - $urlRouterProvider.when('/signup', '/join#signup'); - $urlRouterProvider.when('/login', '/join#login'); + $urlRouterProvider.when('' , '/join#signup'); + $urlRouterProvider.when('/' , '/join#signup'); + $urlRouterProvider.when('/signup' , '/join#signup'); + $urlRouterProvider.when('/login' , '/join#login'); let states = [ { @@ -22,7 +22,7 @@ function routerConfig($stateProvider, $urlRouterProvider) { template: require('../view/landing/landing.html'), controller: 'LandingController', controllerAs: 'landingCtrl' - } + }, ]; states.forEach( state => { diff --git a/app/entry.js b/app/entry.js index 358681e9..78ad727a 100644 --- a/app/entry.js +++ b/app/entry.js @@ -9,12 +9,13 @@ const pascalcase = require('pascalcase'); const uiRouter = require('angular-ui-router'); const ngTouch = require('angular-touch'); const ngAnimate = require('angular-animate'); +const ngFileUpload = require('ng-file-upload'); -const cfgram = angular.module('cfgram', [ngTouch, ngAnimate, uiRouter]); +const cfgram = angular.module('cfgram', [ngTouch, ngAnimate, uiRouter, ngFileUpload]); let context = require.context('./config/', true, /\.js$/); -context.keys().forEach( key => { - cfgram.config(context(key)); +context.keys().forEach( path => { + cfgram.config(context(path)); }); context = require.context('./view/', true, /\.js$/); diff --git a/app/index.html b/app/index.html index dff91bf6..f4d84d6d 100644 --- a/app/index.html +++ b/app/index.html @@ -6,7 +6,14 @@ cfgram. - +
    + +
    + +
    + +
    + +
    - diff --git a/app/scss/lib/base/_base.scss b/app/scss/lib/base/_base.scss new file mode 100644 index 00000000..7dc9f4c5 --- /dev/null +++ b/app/scss/lib/base/_base.scss @@ -0,0 +1,74 @@ +html, body { + width: 100%; + height: 100%; + font-family: $font-std; + background: $brand-primary * 3; + color: $btn-primary; +} + +a { + text-decoration: none; + color: $black; + font-weight: 700; +} + +h1 { + font-size: 5vw; + margin-bottom: $gutter-sm; +} + +h2 { + font-size: 4vw; + margin: $gutter-sm / 2 0; +} + +h3 { + font-size: 3vw; + margin-bottom: $gutter-sm; +} + +button { + padding: 1% 5%; + background: $btn-primary; + color: $white; + font-size: 2vw; + border: none; + border-radius: $btn-radius; + cursor: pointer; + transition: 350ms all; +} + +.btn-std { + @extend button; +} + +input[type="text"] { + width: 100%; + padding: 1.5vw 2vw; + font-size: 2vw; + border: solid 1px $brand-primary; + border-radius: $btn-radius; + box-sizing: border-box; + + &:focus { + background: $brand-primary; + color: $white; + } +} + +input[type="password"] { + @extend input[type="text"]; +} + +input[disabled="disabled"] { + background: $disabled; +} + +.input-std { + @extend input[type="text"]; + display: inline-block; +} + +fieldset { + margin: 2% 0; +} diff --git a/app/scss/lib/base/_reset.scss b/app/scss/lib/base/_reset.scss new file mode 100644 index 00000000..8ec15d79 --- /dev/null +++ b/app/scss/lib/base/_reset.scss @@ -0,0 +1,61 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +::-webkit-input-placeholder { /* Chrome/Opera/Safari */ + color: #888; +} +::-moz-placeholder { /* Firefox 19+ */ + color: #888; +} +:-ms-input-placeholder { /* IE 10+ */ + color: #888; +} +:-moz-placeholder { /* Firefox 18- */ + color: #888; +} diff --git a/app/scss/lib/layout/_footer.scss b/app/scss/lib/layout/_footer.scss new file mode 100644 index 00000000..6294321e --- /dev/null +++ b/app/scss/lib/layout/_footer.scss @@ -0,0 +1,5 @@ +footer { + height: 10vw; + background: $brand-secondary; + margin-top: $gutter-std * 2; +} diff --git a/app/scss/lib/layout/_header.scss b/app/scss/lib/layout/_header.scss new file mode 100644 index 00000000..a86b8611 --- /dev/null +++ b/app/scss/lib/layout/_header.scss @@ -0,0 +1,4 @@ +header { + height: 8vw; + background: $brand-primary; +} diff --git a/app/scss/lib/layout/_layout.scss b/app/scss/lib/layout/_layout.scss new file mode 100644 index 00000000..cb94f019 --- /dev/null +++ b/app/scss/lib/layout/_layout.scss @@ -0,0 +1,5 @@ +main { + width: 90%; + margin: 5%; + min-height: 600px; +} diff --git a/app/scss/lib/theme/_vars.scss b/app/scss/lib/theme/_vars.scss new file mode 100644 index 00000000..13c8e263 --- /dev/null +++ b/app/scss/lib/theme/_vars.scss @@ -0,0 +1,11 @@ +$brand-primary: #444; +$brand-secondary: $brand-primary * 2; +$btn-primary: $brand-primary / 2; +$btn-radius: 3px; +$font-std: helvetica; +$font-secondary: monospace; +$white: #fff; +$black: #000; +$disabled: #e3e3e3; +$gutter-std: 5%; +$gutter-sm: $gutter-std / 2; diff --git a/app/scss/main.scss b/app/scss/main.scss index 35fe4102..e3e96d4d 100644 --- a/app/scss/main.scss +++ b/app/scss/main.scss @@ -1,3 +1,22 @@ -body { - background: orange; -} +// :::: BASE & THEME :::: // +@import "lib/base/reset"; +@import "lib/theme/vars"; +@import "lib/base/base"; + +// :::: LAYOUT :::: // +@import "lib/layout/header"; +@import "lib/layout/footer"; +@import "lib/layout/layout"; + +// :::: VIEW :::: // +@import "../view/landing/landing"; + +// :::: COMPONENT :::: // +@import "../component/landing/login/login"; +@import "../component/landing/signup/signup"; +@import "../component/gallery/create-gallery/create-gallery"; +@import "../component/gallery/edit-gallery/edit-gallery"; +@import "../component/gallery/gallery-item/gallery-item"; +@import "../component/gallery/thumbnail-container/thumbnail-container"; +@import "../component/gallery/thumbnail/thumbnail"; +@import "../component/gallery/upload-pic/upload-pic"; diff --git a/app/service/auth-service.js b/app/service/auth-service.js index 41fe4c15..4dd09087 100644 --- a/app/service/auth-service.js +++ b/app/service/auth-service.js @@ -2,14 +2,14 @@ module.exports = ['$q', '$log', '$http', '$window', authService]; -function authService($q, $log, $http, $window) { +function authService($q, $log, $http, $window){ $log.debug('authService'); let service = {}; let token = null; - function setToken(_token) { - $log.debug('authService.setToken'); + function setToken(_token){ + $log.debug('authService.setToken()'); if (! _token) { return $q.reject(new Error('no token')); @@ -20,7 +20,7 @@ function authService($q, $log, $http, $window) { return $q.resolve(token); } - service.getToken = function() { + service.getToken = function(){ $log.debug('authService.getToken'); if (token) { return $q.resolve(token); @@ -31,45 +31,45 @@ function authService($q, $log, $http, $window) { return $q.reject(new Error('token not found')); }; + service.logout = function(){ + $log.debug('authService.logout()'); + + $window.localStorage.removeItem('token'); + token = null; + return $q.resolve(); + }; + service.signup = function(user) { - $log.debug('authService.signup'); + $log.debug('authService.signup()'); let url = `${__API_URL__}/api/signup`; let config = { headers: { 'Content-Type': 'application/json', - 'Accept': 'application/json' + 'Accept': 'application/json', } }; return $http.post(url, user, config) .then( res => { - $log.log('success:', res.data); + $log.log('success', res.data); return setToken(res.data); }) - .catch( err => { - $log.error('failure:', err.message); + .catch(err => { + $log.error('failure', err.message); return $q.reject(err); }); }; - service.logout = function() { - $log.debug('authService.logout'); - - $window.localStorage.removeItem('token'); - token = null; - return $q.resolve(); - }; - - service.login = function(user) { - $log.debug('authService.login'); + service.login = function(user){ + $log.debug('authService.login()'); let url = `${__API_URL__}/api/login`; let base64 = $window.btoa(`${user.username}:${user.password}`); let config = { headers: { Accept: 'application/json', - Authorization: `Basic ${base64}` + Authorization: `Basic ${base64}`, } }; @@ -85,4 +85,4 @@ function authService($q, $log, $http, $window) { }; return service; -}; +} diff --git a/app/service/gallery-service.js b/app/service/gallery-service.js new file mode 100644 index 00000000..9969ad01 --- /dev/null +++ b/app/service/gallery-service.js @@ -0,0 +1,141 @@ +'use strict'; + +module.exports = ['$q', '$log', '$http', 'authService', galleryService]; + +function galleryService($q, $log, $http, authService) { + $log.debug('galleryService()'); + + let service = {}; + service.galleries = []; + + service.createGallery = function(gallery) { + $log.debug('galleryService.createGallery()'); + + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery`; + let config = { + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + } + }; + + return $http.post(url, gallery, config); + }) + .then( res => { + $log.log('gallery created'); + let gallery = res.data; + service.galleries.unshift(gallery); + return gallery; + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + service.deleteGalleries = function(galleryID, galleryData) { + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery/${galleryID}`; + let config = { + headers: { + Accept: 'application/json', + Authorization: `Bearer ${token}` + } + }; + }); + }; + + service.fetchGalleries = function() { + $log.debug('galleryService.fetchGalleries()'); + + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery`; + let config = { + headers: { + Accept: 'application/json', + Authorization: `Bearer ${token}` + } + }; + + return $http.get(url, config); + }) + .then( res => { + $log.log('galleries retrieved'); + service.galleries = res.data; + return service.galleries; + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + service.updateGallery = function(galleryID, galleryData) { + $log.debug('galleryService.updateGallery()'); + + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery/${galleryID}`; + let config = { + headers: { + Accept: 'application/json', + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + + return $http.put(url, galleryData, config); + }) + .then( res => { + for (let i = 0; i < service.galleries.length; i++) { + let current = service.galleries[i]; + if (current._id === galleryID) { + service.galleries[i] = res.data; + break; + }; + }; + + return res.data; + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + service.deleteGallery = function(galleryID) { + $log.debug('galleryService.updateGallery()'); + + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery/${galleryID}`; + let config = { + headers: { + Authorization: `Bearer ${token}` + } + }; + + return $http.delete(url, config); + }) + .then( res => { + for (let i = 0; i < service.galleries.length; i++) { + let current = service.galleries[i]; + if (current._id === galleryID) { + service.galleries.splice(i, 1); + break; + }; + }; + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + return service; +}; diff --git a/app/service/pic-service.js b/app/service/pic-service.js new file mode 100644 index 00000000..96f5cfe9 --- /dev/null +++ b/app/service/pic-service.js @@ -0,0 +1,43 @@ +'use strict'; + +module.exports = ['$q', '$log', '$http', 'Upload', 'authService', picService]; + +function picService($q, $log, $http, Upload, authService) { + $log.debug('picService'); + + let service = {}; + + service.uploadGalleryPic = function(galleryData, picData) { + $log.debug('uploadGalleryPic'); + + return authService.getToken() + .then( token => { + let url = `${__API_URL__}/api/gallery/${galleryData._id}/pic`; + let headers = { + Authorization: `Bearer ${token}`, + Accept: 'application/json' + }; + + return Upload.upload({ + url, + headers, + method: 'POST', + data: { + name: picData.name, + desc: picData.desc, + file: picData.file + } + }); + }) + .then( res => { + galleryData.pics.unshift(res.data); + return res.data; + }) + .catch( err => { + $log.error(err.message); + return $q.reject(err); + }); + }; + + return service; +}; diff --git a/app/view/home/home-controller.js b/app/view/home/home-controller.js index 7f48d88b..1e5dfb11 100644 --- a/app/view/home/home-controller.js +++ b/app/view/home/home-controller.js @@ -2,8 +2,30 @@ require('./_home.scss'); -module.exports = ['$log', HomeController]; +module.exports = ['$log', '$rootScope', 'galleryService', HomeController]; -function HomeController($log) { +function HomeController($log, $rootScope, galleryService) { $log.debug('HomeController'); + + this.galleries = []; + + this.fetchGalleries = function() { + galleryService.fetchGalleries() + .then( galleries => { + this.galleries = galleries; + this.currentGallery = galleries[0]; + }); + }; + + this.galleryDeleteDone = function(gallery) { + if (this.currentGallery._id === gallery._id) { + this.currentGallery = null; + } + } + + this.fetchGalleries(); + + $rootScope.$on('$locationChangeSuccess', () => { + this.fetchGalleries(); + }); }; diff --git a/app/view/home/home.html b/app/view/home/home.html index eeeb0858..71cdefe8 100644 --- a/app/view/home/home.html +++ b/app/view/home/home.html @@ -1,3 +1,16 @@
    -

    welcome home!

    + + + + +
    diff --git a/app/view/landing/_landing.scss b/app/view/landing/_landing.scss index e69de29b..96861e8d 100644 --- a/app/view/landing/_landing.scss +++ b/app/view/landing/_landing.scss @@ -0,0 +1 @@ +@import "../../scss/lib/theme/vars"; diff --git a/app/view/landing/landing-controller.js b/app/view/landing/landing-controller.js index 783dfec3..d62d6772 100644 --- a/app/view/landing/landing-controller.js +++ b/app/view/landing/landing-controller.js @@ -8,3 +8,4 @@ function LandingController($log, $location, authService) { let url = $location.url(); this.showSignup = url === '/join#signup' || url === '/join'; }; + diff --git a/app/view/landing/landing.html b/app/view/landing/landing.html index efa4547a..ec36e4c7 100644 --- a/app/view/landing/landing.html +++ b/app/view/landing/landing.html @@ -3,23 +3,27 @@ ng-if="landingCtrl.showSignup">
    -

    already a member?

    - - sign in here. - +
    +

    already a member?

    + + sign in here. + +
    + ng-if="!landingCtrl.showSignup">
    -

    want to sign up?

    - - sign up here. - +
    +

    want to signup?

    + + sign up here. + +
    diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 00000000..cfa0bbfe --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,75 @@ +// Karma configuration +// Generated on Tue Apr 04 2017 10:16:51 GMT-0700 (PDT) +const webpack = require('./webpack.config.js'); +delete webpack.entry; + +module.exports = function(config) { + config.set({ + webpack, + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], + + + // list of files / patterns to load in the browser + files: [ + 'app/entry.js', + 'test/**/*-test.js', + 'node_modules/angular-mocks/angular-mocks.js' + ], + + + // list of files to exclude + exclude: [ + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + 'test/**/*-test.js': ['webpack'], + 'app/entry.js': ['webpack'] + }, + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['mocha'], + + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity + }) +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..850ec2b3 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "cfgram-auth", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "./node_modules/webpack/bin/webpack.js", + "build-watch": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot", + "test": "./node_modules/karma/bin/karma start --single-run", + "test-watch": "./node_modules/karma/bin/karma start" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "angular": "^1.6.3", + "angular-animate": "^1.6.3", + "angular-route": "^1.6.3", + "angular-touch": "^1.6.3", + "angular-ui-router": "^0.4.2", + "babel-core": "^6.24.0", + "babel-loader": "^6.4.1", + "babel-preset-es2015": "^6.24.0", + "camelcase": "^4.0.0", + "clean-webpack-plugin": "^0.1.16", + "css-loader": "^0.27.3", + "dotenv": "^4.0.0", + "extract-text-webpack-plugin": "^2.1.0", + "file-loader": "^0.10.1", + "html-loader": "^0.4.5", + "html-webpack-plugin": "^2.28.0", + "ng-file-upload": "^12.2.13", + "node-sass": "^4.5.1", + "pascalcase": "^0.1.1", + "resolve-url-loader": "^2.0.2", + "sass-loader": "^6.0.3", + "style-loader": "^0.16.1", + "ui-router": "^1.0.0-alpha.3", + "url-loader": "^0.5.8", + "webpack": "^2.3.2" + }, + "devDependencies": { + "angular-mocks": "^1.6.4", + "jasmine-core": "^2.5.2", + "karma": "^1.5.0", + "karma-chrome-launcher": "^2.0.0", + "karma-jasmine": "^1.1.0", + "karma-mocha-reporter": "^2.2.3", + "karma-webpack": "^2.0.3", + "webpack-dev-server": "^2.4.2" + } +} diff --git a/test/auth-service-test.js b/test/auth-service-test.js new file mode 100644 index 00000000..e29956f5 --- /dev/null +++ b/test/auth-service-test.js @@ -0,0 +1,23 @@ +'use strict'; + +describe('Auth Service', function() { + beforeEach(() => { + angular.mock.module('cfgram'); + angular.mock.inject(($rootScope, authService, $window, $httpBackend) => { + this.$rootScope = $rootScope; + this.authService = authService; + this.$httpBackend = $httpBackend; + this.$window = $window; + }); + }); + describe('authService.getToken', () => { + it('should return a token', () => { + this.authService.token = null; + this.$window.localStorage.setItem('token', 'test token'); + this.authService.getToken() + .then(token => expect(token).toEqual('test token')) + .catch(err => expect(err).toEqual(null)); + this.$rootScope.$apply(); + }); + }); +}); diff --git a/test/edit-gallery-component-test.js b/test/edit-gallery-component-test.js new file mode 100644 index 00000000..5fb5934a --- /dev/null +++ b/test/edit-gallery-component-test.js @@ -0,0 +1,48 @@ +'use strict'; + +describe('Edit Gallery Component', function() { + beforeEach(() => { + angular.mock.module('cfgram'); + angular.mock.inject(($rootScope, $componentController, $httpBackend, authService) => { + this.$rootScope = $rootScope; + this.$componentController = $componentController; + this.$httpBackend = $httpBackend; + this.authService = authService; + }); + }); + it('should contain the proper component bindings', () => { + let bindings = { + gallery: { + name: 'test gallery name', + desc: 'test gallery description' + } + }; + let editGalleryCtrl = this.$componentController('editGallery', null, bindings); + expect(editGalleryCtrl.gallery.name).toEqual(bindings.gallery.name); + expect(editGalleryCtrl.gallery.desc).toEqual(bindings.gallery.desc); + this.$rootScope.$apply(); + }); + describe('editGalleryCtrl.updateGallery()', () => { + it('should make a valid PUT request', () => { + let url = 'http://localhost:3000/api/gallery/7'; + let headers = { + Accept: 'application/json', + 'Content-Type': 'application/json', + Authorization: 'Bearer test token' + }; + let tempGallery = { + _id: '7', + name: 'updated name', + desc: 'updated desc' + }; + this.$httpBackend.expectPUT(url, tempGallery, headers).respond(200); + + let bindings = { gallery: tempGallery }; + let editGalleryCtrl = this.$componentController('editGallery', null, bindings); + editGalleryCtrl.updateGallery(); + expect(editGalleryCtrl.gallery.name).toEqual('updated name'); + expect(editGalleryCtrl.gallery.desc).toEqual('updated desc'); + this.$rootScope.$apply(); + }); + }) +}); diff --git a/test/gallery-item-component-test.js b/test/gallery-item-component-test.js new file mode 100644 index 00000000..ec2e48f2 --- /dev/null +++ b/test/gallery-item-component-test.js @@ -0,0 +1,82 @@ +'use strict'; + +describe('Gallery Item Component', function() { + beforeEach(() => { + angular.mock.module('cfgram'); + angular.mock.inject(($rootScope, $componentController, $httpBackend, authService) => { + this.$rootScope = $rootScope; + this.$componentController = $componentController; + this.$httpBackend = $httpBackend; + this.authService = authService; + }); + }); + describe('galleryItemCtrl.deleteDone()', () => { + it('should call deleteDone', () => { + let bindings = { + gallery: { + _id: '7', + name: 'test gallery name', + desc: 'test gallery description', + pics: [], + }, + deleteDone: function(data) { + expect(data.galleryData._id).toEqual('7'); + } + }; + let galleryItemCtrl = this.$componentController('galleryItem', null, bindings); + galleryItemCtrl.deleteDone({ galleryData: galleryItemCtrl.gallery }); + + this.$rootScope.$apply(); + }); + }); + it('should call deleteDone with gallery after deleteGallery', () => { + let url = 'http://localhost:3000/api/gallery/7'; + let headers = { + Authorization: 'Bearer test token', + Accept: 'application/json, text/plain, */*' + }; + let tempGallery = { + _id: '7', + name: 'test name', + desc: 'test desc' + }; + let bindings = { + gallery: tempGallery, + deleteDone: function(data) { + expect(data.galleryData._id).toEqual('7'); + } + }; + this.$httpBackend.expectDELETE(url, headers).respond(204); + let galleryItemCtrl = this.$componentController('galleryItem', null, bindings); + // spyOn(galleryItemCtrl, 'deleteDone'); + galleryItemCtrl.deleteGallery('7'); + // expect(galleryItemCtrl.deleteDone).toHaveBeenCalledWith('7'); + this.$httpBackend.flush(); + this.$rootScope.$apply(); + }); + describe('galleryItemCtrl.deleteGallery()', () => { + it('should make a valid DELETE request', () => { + let url = 'http://localhost:3000/api/gallery/7'; + let headers = { + Authorization: 'Bearer test token', + Accept: 'application/json, text/plain, */*' + }; + let tempGallery = { + _id: '7', + name: 'test name', + desc: 'test desc' + }; + let bindings = { + gallery: tempGallery, + deleteDone: function(data) { + expect(data.galleryData._id).toEqual('7'); + } + }; + this.$httpBackend.expectDELETE(url, headers).respond(204); + let galleryItemCtrl = this.$componentController('galleryItem', null, bindings); + galleryItemCtrl.deleteGallery(tempGallery._id) + this.$httpBackend.flush(); + this.$rootScope.$apply(); + }); +}); +}); diff --git a/test/gallery-service-test.js b/test/gallery-service-test.js new file mode 100644 index 00000000..95c2f466 --- /dev/null +++ b/test/gallery-service-test.js @@ -0,0 +1,87 @@ +'use strict'; + +describe('Gallery Service', function() { + beforeEach(() => { + angular.mock.module('cfgram'); + angular.mock.inject(($rootScope, authService, galleryService, $window, $httpBackend) => { + this.$rootScope = $rootScope; + this.authService = authService; + this.galleryService = galleryService; + this.$httpBackend = $httpBackend; + this.$window = $window; + }); + }); + describe('galleryService.createGallery', () => { + it('should create a new gallery', () => { + let galleryData = { + name: 'example gallery name', + desc: 'example gallery description' + }; + let headers = { + 'Content-Type': 'application/json', + Accept: 'application/json', + Authorization: 'Bearer test token' + }; + this.$httpBackend.expectPOST('http://localhost:3000/api/gallery', galleryData, headers) + .respond(200, { + _id: '1', + username: 'exampleuser', + name: galleryData.name, + desc: galleryData.desc, + pics: [] + }); + this.galleryService.createGallery(galleryData); + this.$httpBackend.flush(); + this.$rootScope.$apply(); + }); + }); + describe('galleryService.fetchGalleries', () => { + it('should get a gallery', () => { + let headers = { + Accept: 'application/json', + Authorization: 'Bearer test token' + }; + this.$httpBackend.expectGET('http://localhost:3000/api/gallery', headers) + .respond(200, { + _id: '1', + username: 'exampleuser', + name: 'example gallery name', + desc: 'example gallery description', + pics: [] + }); + this.$rootScope.$apply(); + }); + }); + describe('galleryService.updateGallery', () => { + it('should update a gallery', () => { + let galleryData = { + name: 'new gallery name', + desc: 'new gallery description' + }; + let config = { + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + Authorization: 'Bearer test token' + } + }; + this.$httpBackend.expectPUT('http://localhost:3000/api/gallery/', galleryData, config) + .respond(200, { + _id: '1', + username: 'exampleuser', + name: 'new gallery name', + desc: 'new gallery description', + pics: [] + }); + this.$rootScope.$apply(); + }); + }); + describe('galleryService.deleteGallery', () => { + it('should delete a gallery', () => { + this.$httpBackend.expectDELETE('http://localhost:3000/api/gallery/1') + .respond(204); + this.galleryService.deleteGallery('1'); + this.$rootScope.$apply(); + }); + }); +}); diff --git a/webpack.config.js b/webpack.config.js index 5125b9f7..88737943 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,11 +1,14 @@ 'use strict'; -require('dotenv').load(); - +const dotenv = require('dotenv'); const webpack = require('webpack'); const HTMLPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const production = process.env.NODE_ENV === 'production'; + +dotenv.load(); + module.exports = { devtool: 'eval', entry: `${__dirname}/app/entry.js`, @@ -19,7 +22,8 @@ module.exports = { }), new ExtractTextPlugin('bundle.css'), new webpack.DefinePlugin({ - __API_URL__: JSON.stringify(process.env.API_URL) + __API_URL__: JSON.stringify(process.env.API_URL), + __DEBUG__: JSON.stringify(!production) }) ], module: { diff --git a/wireframes/assets/cf-logo.png b/wireframes/assets/cf-logo.png deleted file mode 100644 index 38a23b2d1d0dc6944768b2f98fae55197b0155b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6821 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 diff --git a/wireframes/signin.png b/wireframes/signin.png deleted file mode 100644 index 98280c96cf803ca7db4944f445a972347a8eb6a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167865 zcmeFacRbba8$TY7kP1m!I8h=bWn~^wvNb4MMku0?dFW_qkqRNBVPqsDdxlgB*&`#7 zy~nZ7@4CG|@809%)aUnm{JwvE{nd%%^?Kd+eU0aJUC--!-O^N7T(@THnpLY-ty4Ox zaD3G&TEwKc zcj4Z#gIVc5Zo^tyjAs1p7@XYe(@);K*<rvzp@9_k=HF zuM})1`%FJC_Fxs|)!!|EmXQ%>y!LlbPeCa_nalh8Z(%Tuo2h=aUrWz+Wi962Z}t_w zXG~9J`unH1WO{v_aOU^>N{ijM`sc=w{ji1h?r--V7jd{?)9M@le;tz9|MFmjO%!^Y zH?RKv&aR^TANK4%;eU}HU5xb^Mx(BvE#NFoK}xYU zcl%snElD!jblm4P`Yv7mBF&=fxNz<7*SyEsnJu)0{)I*U;fa3=Rn4_4tGt4p*KU>j zhY9*i0e^x#pZF^RYklJLvzf7#N(9NFjOPzeW!)unec|we$Uws;_s}|1N=)pg`-F&d z`&ob9l*|XhJ7z{)rE|qe-=8-n^8r^&Nl6>aZU5Umv!xUT1?C=6b<&&6gZ_M!lLFW) zD-ZdXPyV+!tnB1ZQCa@OicFFh9%Q#yw0p$_{oQ~6+>I5*`G27}b`8|C6TJ^-C;Ocm zhWl?UH-$B>O-$xd0ckJg-S0g)ZXSXIyYa*t+4huKp4n2^_3PKY|ED&Y|WLlX-wW_)9`u+Jx@cLjo#(*Z&nG}%UjYV$vDXe z{#aM2n;DCXP{O!Q_W7?~zx}b#!5@!>&whF=>^?m*V2@d=@EVuHsTq;6(bMP3Rk^FH zBS*iNM#IV?X|dkMUX%Ux7CLKgR|vc+awE@FAaHSEue86<$mWBsI(HoFwVE>pXU60m zLD(UG!%U9qOT+v9n$B8P(}(WMJ=r$-?lR5uBlna`IXvB)-kd+RN%i&R!6tsm!q!|j zzL!-8e{mwxJg_91i&|>1cdksEB^)d_?PHXqN>Y;}EiP0SUZqL7LU_+!S$jN&kCO43 z!db73iWf=`t9;lbljAYx>*7Cn(V21g#HRI=fq<}Yp$I`86g$NPyEa5^;^y_9cHfz| z*Z3uI)(07Ns7xN@OM0ztqPjh|F?qehJ~^{pJQ!vLZLiw6Q_-J8#4HA_64~3}Z~yK5 z|NMzVI2`{_%1I!ew+S3oaR<%s*TmsfgAE_{wbf!Y?P}uZk1fcY%D^pB0Kh(y}vK)F+VMQd7xoqGs||z znqxP2RpZ`-3c@bH69=&D*uV3M-CMfGO*9qKM19@#3kG#V=lUIGmWR4X*l?u)93@0A zt%k4k!BJz@=xw~qE-k@gdyJ8J@{Rr)9VQdW>+gg2UF<04Uu9AjAizsW$9bTzJXG?0 zCVkTpavQ@KBMCs$k@#NtF+BSq{lsvaY?-j#*Ndf*-->QpG_IZ+ZVR6pY_4CtE;4I_ zVcyupzOd!sC9?p3eUSFPZDav z_nkR(TY%oALzefQ$tHnAx4vVcf977Mx6ic#i6%H+4o2)1f+ZXor^DgrmFcLCwMudEFHc5fSc z6LSyMSg{klt*yp2F~@ifL&R*$De1Id>GR%?2wHtLZ^NH*_;0&munEN8{16NLynSR% zu{Jf6IHMkmLOag-L}kwwnmtVGZ}Jq~WYCBXy{sE7Y;{~W%i-l+jDP#Vn@hIl-?pZY9V~MG zqsHYIiqx*eA-v_CTL#&eBL(!*%qn*5SL9hn*q8JGH%Lc|jmfomb{M{4xvMhWw#`}u zZ^q_5K$TRL*O<1)lKS|!o3xzX`!99AclZ%x5#`ul7kT*3rbx9AQLWQgt0lNbg6ng* zb31nlDlzX?|CCnWQyo1?s%c2E(8!wk5mKG#F&S5Wa(FAbQ;(pb)+Oc7N;`9D!LeV# zIa21jPAZ$eyQ{Q2)Zw_qY|rx)tw~Cn*aLS{==HYUWs?-Ww^d}1fKi^5fKKvGFzng0 zAN9XP72Mh#_PCXpM~nnPe&eF<&eVJX9K+KVdv_&rlCXUX2!i6f76Y(nl}`)q?~t$R zjSdgvq#`7&k?8Cjxwh|a#NFQNXbaEo^3djQBI-S-v8rvPMPl@wy;(f=gVVPknW)fR zCwGJ~(s21VMAcLj`vu`tKfQ~)f15+4o_amI)MN9V;(amCvkZf_?k70q_8ate+!1_r znk(%=L$bL_Nw=gQxvPr1g9TY1{zej+*gXVVc5k}j={Sc(T*e*)*2f3!&t}b!m6h$$ z&G*31ezx^^xJf|wQJ8Dr%T(}6ORf?ui?CgLLGm~oIcdh6lLtF!BSn+&$2S~z-)EJ2 z4K8pZ$rsO`V33`r<#~DNYfy(I`L!FMwa;0n{t=+p#23UIdtRku5n3CIXWBXP#n(gl z@M=o(e=bXCovb$#;QqrH`J@(n*d4B)miw-VL6+aS{iy6_;%+i_$^bZXmDEy!OS(!p z%ko&r^oUM9hjTk2*>wGKiner}NiJ}W9%23gfBac6(`K;?`Z{`H;6Z-ZJ(xZVRTpk=qaW63WIff$eQ z&;Vpnqo_^xyS%%*g;%h4p|3WsdZ;CvnxSTb**gE?!W_}o@hv!dUHlY*oaDvG62_iX zP1e&a9SdPAGZ+b>LMi<0#Mb};{fvEs&FO+fNt*r>1pyl;XTGKeley4FdRi<`-AEYv zb=KkbneK26W^UD^0BZKc*@C87eR+2Hr3QzR-AB9aWJQ#AyBtzp#WEX+v16q*FHck-Q)JV+JoC|? zuNp8j1HK+C?8yv^#t-CW5ktFO8`gHyzxgu~s}M?|TO5f9SE>l+3M1opn454;1;YV? zC9W1OBTcNzwC_Gkv1Zh~#J2ItQf^V|7diUYWlw0U7HEt)5rnhe*$lUDOd*KkW zkXrQHeLhS)F7~Z&NHVS7V)4Y!d_9~ngUqyX?chCn1R&0qKM4Y_tb2J$eySo>Qj7`H z`)9>0D7bl~oNMR~X!IHV&)h>bm^aSI~Fg-6f zJR}|?p$H+!A}mO)z1!xX=HSBIWPhN#%uMIkvQ7M_?^ACsPNTkloc4h@xQ6OD!^v2O zzL(KaH#t1S1$0w+=&gHvL|KMv*Lu>d-F)BN)4N*&#RmZ8Hnt|&6a!*LjAuYz5hTZ-`u*muZJi@%hGN zb1Q&lT5r+;eJr8NiJmVy5$aOk4;7T#S4anH$Dj7g1@ow*mD}QS3A4IHlpFTtgW;DS z08-8-x{Uvb1Wj@3yF8lX3t3Fz3tuw^SV$hl<39BdcB$;IP}dsZT;5rV?}Rvk@wyl? z5CVk9?SiVWolcdlAy5hRIyYHGN3!OPT(<(d({dc2D#lGTF-b`sXnMmZV3?Cp^og=` zyS?gcwd_K5yn(OO*iq3&Hk(aHHTTStWN#8PyTd}xeh&7hwk^Kq=w{xM<=DG8H>^Qy zaWV>)_4IIyj_QAvz4!2u+c_JUr%QHmJIT&`(AdOrZc>JO#x|=rO1pH=4CBMfMCTH| zsyjyW9sJ_Y5~dUkgjREDc0IkxuI$u?cWQclM!r$N(~H2oiAbBRt?uKWdwnE_c=Gs(cnnrS+OLHx*|Au3 z2b(`_OvZS*WHm9Lw2++U=wLHSObY#=b;>}?ohMFkR$rgdiN81_1nhJ zayIBFv*Rbee3JaiHzT&!>%rdaf#it?fjKW)Jn7Rev;BTB?8JL zm$`WeFC^1C5hWH$zc&MmpKESY&!6uSOo?Z|KFqhUP4CI0sdVA11=FM7tJ@Y@+RQ1~ z*=o0uRzJZ{H8%2jt>a{Tnwocr&Cja6h-1<2@Z>v@QCnTJ{d99}K-TXqGg`dVlK2z9K}$=pJj)s+9(?Ct;sihFgm zu4{c0x@e?3=ED-s%p7yf0)s7%9Xm>7XJ<1wrLWjJr>rgAZE%XO)R34}AL*1g9?F}> z-=lmB_aM=|i?4U8*;WJXyPjIAQ)KHa!)?rE!}wu0K3%J}y4<%v1W99p)!>%GCofJ7 zG}?sf){ag~ztJ+GoZ}#ka@c#)MAjD%cK}q}EByrT6OZMXZ>Om)Gn`8PIvjU!bF|*byD46=R%g@MuiY|%%2&lX<&{&@ zUrWo2*!XyI7|wh=byn_Z_~Jx#N&<6iW@{!gmj7i(Ezc6>bBaInKO08ofQj(ueoolIAgmeY}$ zvpAWkA@rpw-;>1EI!Jpr<45p$iM8zBw+0~yGuPQ;qIY96v&$~+BqPs-N%Od#@$!Vu z(|W{Pw}zCj(samF$jn(c0d#2;Fcl%K6Z=|uW&}5%CwAfMW9l6W*h4$04(VJcIT=Iv z*xMJEc%i>v)VI`jS7PYJ!t1Ptk6QtO2i_~$eBMuF=YH>0e}f3SB4?TK*_vqGd%3jO znNJon54TCZHZAqxH$8H9&}VT${M$9=DjJy)!rO%TUH`R{Xm1H?FlN}8RUdd^GsQPh z3enXEt@6s?Rvrjpce|nSL_DeEN22bVJE+}wO>LF|Lug)KEV#oTv#j(qRSYL)&w z6@F)>hFJK%Ne1Wm(2c*3U?i;3kQ!B(y8Yq9W8Lnu0Oq=RFg)-w~ckI_?H) zo~d^GR;|%O-zlA_8{insO{1raGZrVRH8he;-0R|X%+HP*s5TwJ%AMIiTc5w^c#$Qc zRdJu96!FlllcPz|c)iHy{sR|V6lKQzth=1`9HpijOdB7&j1Unmjs={+|JbAcD zlJRV0e#Lvsu{>gKVy(H*OVY#e`JK`u1ysE6OrPEbSKD8Gcgulf8!_ed7n={9RlPi~ z*EXwto5=J?bGuzCY{EoJ_yT{6OLwTwzT;0@r(1j>z6xK z5VIT3`d2Kg8rb`Q=CL#-DAQ2mg;QOxopM~J+_yfdls!a^v9zzbLn&iwb|bR`gY3MW zE&#pD6_4!_QWdtD9+#a85EMvSBcrX@UCa8=lWCP5X@O{=x3L&=S#@8)>aCCJ4myvt zTPN@1-pAq6>1XY4AAi3*Te0`e=)t?_bS3k(eGD9HwQN>1DBupq>-wrP*!a^1d)r_; z9IKReM~+X=KX z8NE><$sfkw&bWA*Qc4=8x4NFcJ=>u*y{`Dhq+`87;DzkLv>X*anSk`IvL5FXt(Ag| z^gGfgt_!;FNHEOJnzp++{5{xnCeTwUX%hF8-!MlU-!0ju1TJ%!{^ljpg{D;A59o=A*?8x6doy+gjT<<+<4H88(#F|B9dIsd)Agj7Z6h-$|1rNS+Ffc|3Mk{A8&GaRIEcpHJ|XoFy^-J7mh!AW&iJ2^{+`<=<#(VX#e z6UZ;P$m*c!4N&u4Xqxm7{zpKEz9$as>aL;C|#2P6ceIs8AOwuzcTSv#czP9e)w>9?7 zPI=L+!3)mctL^t|lGdJJ{RpV>M7)O}hGC-*hflsA)3-rePq(22ld6MWyG^?Ak-Ne! zs%9u2x$4h%iam>;JFg93%=X!@L1K{)dykbGktU7OXG4$txItSPBkGLpyWKtASm7Z` zf9aMrCvrzAABKIrXgZoY_FI%cvDP2>nwc_fm)26y+&Yz}T`DoF8JxuBFTE$(YL&6tW>$* zXTPWdiSsC@EsKj`%Nsj>%3UV4@aG#x>-Fu`W(yfS?oYm)nDdb-EgtKZCCzNK8XeA? z8=8P$>}%G`d)}WlH|Mc1YfdbuUv=xzRMKqD{n`8`w^B1lj52Is{>!N<(F(y(RbOVV z>mH9b>!p9aq!O_1+4H2w29@tTHzuq_Dg~FHr_1s!;U$PrqEi zK@A;tbnw%dGX!PgdEZ;3kG%(DiWQ9GRehB5W#_*!G%C1awx8T4u9=~s`WR(pGUG_5 z{&N8Wda<#RUh6to_{9G;TAH`PquNz3I?i2 z-d(d+z4WeF{}f~~WrSXCw)(^+4JV&gEHmH|_fe(d^W1hh%tag3`=rj@vLDjKPD3`m z_2o^UH}#~qO2;fzdD6w`^u^OREw0}t%5UKC<*>P$PMWn&z{{rtchtAX2p^4P)^c+G zP(Ywc5#UkQxH~{gnzAKnyJl2}e-H8m?A1RpS;Cqo(#uBR1w|xjxt~+Z@olq;|0pQn zm-#%dtKW#^y6Jv(kZVU<#N2ScEU{|ZY4}z4(8q;W53c$Vj2C7n6V&ewtoApPw{rAj z_}Ah8u?Loi0LiLNS2_l*BFr**->OmOeka*?O!aZ8nfneFcZ=OqcZQjnA400VOzk@R zTzP43mTP#13^#K)AnDi>L9FR-Mr8Ig7Moqt73R zh-CxJg?g3Q?rakHm@Ad`#M^UDLa(FkQ-e%ohQbKWI{n!)2or=HH%EzYA~mI>#oFzp zHW`!B7A@^Obqa!+NT(OKjgm|br^z~7Gcis&njapzLP3?h%IkP|3=x8h_u4bW-s((J z@GS{ckF&lslUl8=0x6n!%R4u!(mL_2Nv4Xe--4ws&-O+KzTrFGEW0@U-MqAaw4l)< z+@NmYy*|kG{IdaPr|lUik-U_VXzQ`YyW|(q{>T_iYnIS6_caP+#i2sY-WD-0p$@So z|Ky9`-+e91et?hAJY(4M{oTDdXO%~Xq!*VGd;iwih(?TrSW30E@+_)paP4F)r1IM@ z&D}B1z4uOtmeRh0;#@GB%*|=T1wAJh7Z*{wTH>`Rk){!HY2-3yc_I3L=gqcf46dU7sAFgH&! z`CzBoSSg#?UnZ`0FLp06p|>rpg%+nUmk>BV#{#1b15Y2&v*SyHi9 zYXOf@b9e)5RjjP3OVG>KbsP%V4JquwOSyZNwZ6FL;J_>=cE@`H=*z{$Kjx5jb;$00 zYx-ax_ZO}d+?g&9Mc$9}a;t>=ByC%BgrU^Dv5~67*)48{>+}xou_F>ART~;Na9)WB zuKj$>=&RuVtqQI)kP>{P9Wr;2JH#}6T#*AWtVh94v`%ap#aq*T@z1Tb-&Q401L#Lf zdpuSvF3bGVoA?ecyY{1#g6~wF0*jb%jE19g;^UtVq+mk;>}6$VAJf9?rCGo1o6mVT zPDw3l-EiOOTy5!C->a+*%M;Wh=)kQAf0M5_hmxTR)VP~MHVaO0YtNVVwJc@5PQS*g zcyjQLNH$SowY!e&nR%!#!Arl>o2AKbCL+P@-Ja>wg`uoF8RgcZ%vPE{PikClJ`;vf zZ%^@yp3V;snc|LgB7t35uUWoEzM0R;)G+F94ok0p zjn?ObEkdIPuK8gxDR#c^-;dU%=ZP4XyHo!;3!u6Dxn2CG#ml7_d}|tie|_R`z))9h zivUa9wLjg&KV0X!y^uaFRh-h1%4a6 z>E4_c;cyFc+KAJ%G~IC@>&4))&~Frd(Ei7ZlnNQikZHknYk2feOmAbZ2hYOiZapdH zh2cCQ*GlwTXAB8A78*tcBTfM~y`c5CZMW;J<2-Q4Oxycb+50q2wGmtmi%nwmDz6?> zt6MU{%C`phDwl!vRc3IU>&{7P9u(^}x$bwc6A+m5R?w$xkrD+DYrPFy4h9Gsg;6gk z1l$wP^CT?}u&}5G3-cP_Cu;}mv_1zOOD6*k@9}ENNPc;|P{W5pssx;B>O0ZZ@;BCg z&>lQh?MJ)G`_v0+(oBVC7`N(U%`cZJTnK9}#={MCM6Xtf7CULk%$SKPg^PjUczm-r z+hLhlY-Wj(l>&orRsYIBrxGVJ$=c_Gy-xc!23D1`ag2yIi`?AepgAa4kryQO>B!f(PVfcY?3s?Oa z(4k{k?RG`w@$!JT=N4G_v|qg6xX-b##^K!-ixy&(OhK=w%7`i&}`Z)_2o|v9w6q#2y%C4 z@BhHTqImxhX8oryY01Ok*;~amEv;3RZJ{XIcdP#Gq+*AyVcIoXPP*?$j_$}mR~x&( z?)`eZu@Ac~Od|%$E=Y_#W6g~TIoG#%t`(qlbPoSoBgjlu2|}o-?%Ss9(bm$oO=MZG zdIcxFX5v-pk@E+@-v+B;s~U$JlDPCjTiEcvNk9=Bxv}=W4eeVDtkCjvP=TiruWwBd<~$@L)dWiX|QL$ z*@p+o{?nj8Wi5xE{g8ZET>zn1R1VfFFsF0ZK?|q0r?ih>mTYLgs(-oB++6KWn}W4$ zmA?&b)`Q#^@p5EJFgSU72amMqr#cQkpxJMBF+QB|8_T^f7a^(3YW0~5RGEt1WBQvz ze?oc`ss{6>G4QClus;k$?lQE}DAn> z0s(^4GAg5ZcoF4FMxUzZvf?UvMOl|EZbk4Sk?At6w?eXRJlOQcK==Ar?QnVmM$&0W zl|gC*7vP8GZl;&RFiGu$;)p}Xt=$1yOhHsXK8KvTob!N6D2Wu(HqX5%rH(Q$ zuB-#NXO%Z%>|v)JgQiH3Na1t%UfBi(snllzyVo0N7TFHvlNOWf4hLM1OU%ncpv}2H zyS0|BcH$_T%ftE6>>i)NJzyOwxoos~{|&?b@Cd?T09oF-MY$?m!ChTr{WU|VWT&Uo zt8&4pJ(vx}cwjj>@?630->4cYA+m1szKH3G0X#+|9QBY0Zzt#ajozri ze~;@#Q;yOi@KqdU!XEC{PzRjee@S|Iys?V#167*0SLg`RFQPVBn7I*n zC^z0tVJHru^qZAVlmb9#pu5AsJuzoC+m$~)&ARacr{+`kvT6<4PTO-((QM%`EOvc>3c~Tdan7(ht8Z_whnCA|YM)`) z?v3+?G|Ju*ZTd-FNSF_IiY|QQOH>8S^?Bh{@YQ1#kjEc8x3{;>p6h4_#6^4J>?`1hq0;xfjQPxh@%3vvjK+`4avb&VIYxx?WdPJlxZY! z^dB(bCxlf)6>BSwTpwnvrZ1(?hYXwMv?5U}jxCf;%5&_@`PojxGLI4>>ZG0zCUwc@ zUNF)e(FcXgnj6Zd=U`a4S2IDHO(X>yj(D+dm(U&z5zFmW>#b4|RI4|1vvF;kYjrB- zZX_+Vk))+3YfhMd<^UW&3lV3KIfHk?wpd=!Ic1~ix2#o=trA9X@@#UN?y97;hQj<+VA3Iq&Wadvul{EJV-PB0FV&%j)eyf zPc=MB7jtt@2UA$I>3wBT-t{l2Hu=gRTf*K&&0xGs(DR@);6`(s+gPt{7czDjK=7|c zeW|!}lty;CaH1TF8k(Vj`j?buJ6Q7@Y?@bZkInEBOOh_NkQomeaOn#57%gFq4!MxU ztEa|6*fHo&E8$!!+3NRpp!1=|1;;+fWu>_4vc>x`FyWXQ_bZp7g2yY!{8beVdH`p~ zD0DJqq}d?ltQyMH$DLojc5`K4%JN|^7Kg>0lMGL^P(X)jPMLI1E?&ZSVp2LZSe84+ zX`ta)-HrD$uOWB{UWfIb7yuZrB6Q{}?JjOllvX&)yKr+oTT`rx(0WuKi9S#vb)e)j z&G?Vc=k4{^ZWrH|+ozSN9B6P^=Qc}Ur1?NYl2ya&GdAj-fnjZ-;if8gJ*RJa9<4WU zG6>#puB=n*_fghsEo8mq8KfVnr74OMULQoYV({nHpMnll1F`7QHdUrc&%P7k%1f++ zZ0+^#!)|RVC<&!wZ%CT0kDeB2^_Uy%{dSW>9atUwlDpRzAHX*^w+56;4(G_XDcZe5 z`6>Q~@)zq+t=>Cl`EgVPPWbKN&8^@kBiJz}hh(e9I6UV^dAVuaVvE--f;EaRWp|4o z*yKm|&CX1YC;Q@c8k79F)1Pypkg_H*W}&(x$g`7+;{&(XI5!Cbw3>~H5EVx64s+&Y zNz3-OaQq}xY8FHdl+-VKLOm}gntClD)OU{0-(xgWdQ!&A)P!;YiYV%!+ZTpxIInPO zH=H{0%(mXh6TfNmu`&uwKGbqj+8i-!9|b`6kgJ3*nQkMc^E0C)=^_XalM8M&q&-b7 zo?=u9;O8yFY33xz_ll6ofZ@i0z-QTNk=P9=F$otR?>o^6G_r)+_bp#?AG??HU2N0c zn^ba0^&0WTXTKg20O1gsiKh&a=M!^9Lp^4DGu1ZlH#;f;MTJZG=lhNCMpxj6?5(;! z`rCwFYVc7!LO>~Ib>za*Smeyudz5EDPl6V|%Pw-!$M+~p-|TPFyO6nS&IaXEGSlzc z9PX$+b}NZv%eo=R8xPckN;;)wy$GP<)fK6sSsuoV$0L3fUwR1QSGi%3UrC7a!FnC7 zO`P{69PQ=cYc!?y;0k!ZZv+{-+%f+|Rg@O51{$hF%jd@@7ol7d0*|@4`*7u90e`pQ zT(K5U(t?h}VtwwAqg7wcOBOLfN+Wg<1BYgtbo0i|d-7hdR=<0TL>u7@QW#<*_9aM_ z!_VcriqY(G*G@mh^^=z1#e0jHHKZn70O;Lpb(3G-dSceV!>`$Zk{uD{n1H1uEkt`XZ3C0>#Wp-K zve`CY+U9FUl6H2GbkWg%jzm8$#VDkiWjTy``?o_CU8ir+(tTowp^(yI&vW0Xo9wPU z{;x6w9rg>l9Z9(7kNAh%Y;%NKT>BGxQPFx6|8XU(+~%(kmi2-Sle;~*?zT$9#=wTR z#z0!&9g18&2epdeg-Z-j^1gbVVQF0f)EDw*e#n2${_Z2WKG*h#nBTia$Y4CY-cDLA zXU5?zOiHn+xR5bOFR``zDh-4B66X?laiU2w4n38K0#_5Q5uOUhDD^^1Rw~fithHP* zr-jeE%#<00*-#w&N}5iO3?Qj(k-Tgj4D7K08p?Gl8&M$Sm}u`%_T0!}q-D zgRUC?br6+#sP)XX=NeyP&RC_JEjVaRek_$-(hVYbxtIflT`B=)I<&yjY?)xbnUw5a z5hiUl+EJorm4r%`U7jx%PBm@v{xDs&p^)W`KIaIR;hN=L3}cTKp;a1BHMvBbte~@Q z$r91K$iX)pl6$QXj_M)g{ptob&bImB3|GlnxsopLC9;sYl%*vYs&xy_jy|ghXBoX6 zCJ;5>?|Oue$^Zk0Tb`Kxxy7^isoE(?!7CAU2N+K_DM$0FpW?9S4hE!KUpMcOEg;1$IPJx~@^ydYOxrhDu>gOc0wa0aSC zv{-SIi3_T5$sy*`nU~CU-<;Dr_by@WvkFvA)&)OBB*eblL5�%2c!+PS44R69uK` zMi{HN6Mh{*fmy#@{C+}#uQld#s=r*g4896LaJ3gT{nmC~Q72ZQ{5O1G#cJq$rcs*R zeWZ{)7Z8|+fCl3=4D$gEiW2~}n9E`Os`9rePuK&y-l{dn#R@3PpDVj=41Rxorl<oqx`%b;pQn0 zd-gN9|2Pn?gs_a~h&Kgr)=j3niLR&;}wUZk1uZn5%i*@?Hhe* zg(A2nMs#S12NX~z%iXZ;%|w5_;NjN_7)G8+KE{gC>hMJeiP2(a2FDHr7;W8}o2!8J z=Gb%kRBLenyXRcGXNda2u1DIn#kO655Ow2BWyqWj;Vdic;s6(pw6u%TZc{HHVPa;r zU^&rcs(dP6jVh#j zb4K1K^DUJn8=?m2$6egyGz_LMov~DM+d!qv|?%<8u0rk=$XtU;?lva*4UaYCwOlkUrn}-mf>gY;W1Z ztE#K?oA{3c49Q*fNV)I{*ox&WliF?w2YT5v*E3@)tto}9z-+V$yNq>at>xr-@hTi- zQa9JtF-1Brs&^Q9;Rz`4?#P|_Y^&}$W#JicuW_hv9%!vq2scE9FAP}pLJv}lR)Q}5Ykg3Du=|Pid9U&*R}i2j7F`=)+LXcd5_-P<@uPg6UG70ZP8S*WV zdc8WWAJ_Yp%Nb;isuwCdNBOklE#G%PJ;6p_Jbib7d2|+%!2Sl6;8jsul(0#$w=j?- z5aB!(Q0xE;VLv$shOKk~w-cIfzY7k(PaW$;V{(`TjZD>ayPw>rX0Fj?lv8C?oI`4d z9Cg-#y7n*@Z!F>cenvsECj^yFz zqL76S+8}Dvbdp}JYBd=<2!@~<9Zj%e!t*}_0=PNR=+IB7AKV2=2rOIg#4rE@72sum z-oLZhaEk0wAuaq3e1x5IZp%H8b&*|+dKg5{L>X!;&tz`-5Oe0oPqvV1IX|BzJdHVW?`J&oSGWc0DIePma zpFZqopk)`=9~&Zv9BCPOSfNe+YcUftM4<(63Mq8+sILY(AflnQ&765on)*xJsl*!4 zL1a*borb<{lw13&1^b}||7Q$<$gbDmt{|}*#qVwWHRGaAGpY+-urb}yUjQYhYUp8k z7*EymF>XKk!-$5|mP2s)b#xZ01U5-%cVTzgsrGo^j!=gxB@`9vhLliNmnswoNn?p(KyB^}7&Ib~yrI2t!m2|5?jS3!Z~M83yDvNc8R z>J1yy_`D0Q0f2kaRTdaMRDMqLgxyy1I~sEWB++rUT{r{|{HDAyAU&P5D=5oy7+VOM zdIFA|Z_Q3$MN|bYA*nhKW--E-A({X&Od$+k4B7?t|8mjm=vX;Nsi8O-KG=*HbsZ z^WH96x^0XC@~ymvcUT3>y=WmPcpsSYfsn+0h^W(?roTKWBLqzPU91HDI4GzdSoKy# z>ZB2#`$+VWlANN2oK6xK3Va7k-_21P?lUZSjM=t*>hbGcgxBKtF;yo8B9G}dDeQU~ ztF2rshW|oLIH`54_K20P$je7Bjy+Y_X-?n3h%3PzDtJd9LT7Akx@}n0H{H`?ydt!9 zZiJt>rLB}${tK6eB zNoFNKC6KUz9+u=hBK+F{AF0Z?D-l```j*d+{JbCq<*rSPSf0^#D~Z4T?B`1V{=w4! z$|||Iowelk?mru+%#X!sb`(}SkUyF~?p3*mg2GE%DVBUU-hWQw(P>yr@zv-@|UNxB9MQ{^H1aS*M}8>{A(|kvl}ZG@|O+~ zETpThmLKwlcKfMips*13sX3E%xt;uv!6JO5e@uuNlaIgp(}I!tU<~Oouc!C)<$fu^ zaH~Cn#&lOdG9<0v5EE5^Xt$qzddcP7Hd7FwTfVBV=KH~!W`YcVsfJR-SGU)jZ9DCdeS{z?gXRy3NN zRzX|xiqRo&=~s--iqZM!4y>rlukhXq(jkvuSA6t}kN)Qltaz7y+SY#rTr2AGPht6| z*i7!N_*AH4{%hh5V5zaY!pb zynL8>7bG%^Vsy;m(uIX*kbU z3!&RCm#iT#cnVmGHR)e)bJR4Xf%g17Dg`mvd=ibM;+0ABV>Ol@dpAVpPoU~5Xl&T`BSD|+z`8#dzK0J|K#fmpg~*)5 z&pTA+Ky_hU`xW^SQ2)84Ka4Jn8K~@Ae(KHNqBBcFsDQZeoq_{ee&zp>d&0*x6DQLw zB%sbk*vr^6IH;CCT_RYeXPfH}<23!y_&A^K2OmJYU@&l3{eY?%TrNwR7lvV>QNn1} z6r$hGHzCUYE#}=nN{bo~f;=^4Tr@=|(F7A*5ra$uh)LRQk9bck4UBqY19Wzdn5j^w zRwXy$(C2dE!~|-#nxm?(Q6Feb*$pFLBQHM&hF2iBTJR%|QuVJS7&N7HY#1hER>Op? zYWPx01)@>h1X`*C%v2J2w59jzH{HND;ar0;9^|$=!Vy(_{uoQD9*mQ6_kfm)WQ_r0 z3+K_-sNk)?4;Jar;#j}Lh%8w&)_XKl@3~Mv{{W3gY%H3bS9mB1rFC`G6(j*PMH=M+ z7+LFfpW~Ys>hUX~nn&|BtUf&0HS-2dbo1Msg|!j44*xs~u! zpfC9V8Z3;rgR*!xh9?A&-6epER_d6R)d z9ZeqE_Ld4w%0PmPVu`ShStQ75L?kyu>f1|E%b}iz9ezMW?spbstWbdy7govsq!8O zQj2)stm+k<6*W5yEu4Vme{y9_=aT?PHKCijkL6MuLfyCV{RQovB+q_4AEnlm>fjcAs*F5 zYO2qx8ymrW!ZIFUs5!gA+YOC-!2=st9d%-?UdvGIIC_P2Abdu(?p0GVMPlCUIW*pK z{%cJgvC#FC8KcSu)hFUYddc5lvj)VZ82w8{m9C;e9uj?))6&yGfU+T78>pjKwd0ixug)lRK07PoKqEO9B1bR^7b#c7+DG1Y8k zWavWd`Dl>T#LMU251;nFjnJEIyfxLd)VZ0jJjRy7uwBMo zJf8@CwN>VU1_2xlPP^G>!-3dSBrrwjhokCac(Sdpn3`3;(oX3bmju2)z~l0)xFyFw z@#0T!5_20ome!HuvOty2!SSC$EVP_(MBjqm9b(l}`I}?*yWK3HL3UmGJWP73w$txy zj|#c4=QzJ0v)rB2t!FayJ{{7`cbr{|0bQFFO8Rex_J2Ir-FO^{UeR|zx^{^cK~3GU zjs&c*u1NIwsW3*sp@ij>*@-DZm~Dy1E|Ty&ojNGyU=;JXUhxJxXufpy(0AC~w;3AE zi!QAzdU+n)d{L%Uz9{9^Nj=G{TP6oLTjuM{9@Hd-lC7No4e%HjV=iQN1t7B#1-wY< z{89oHO%<1~)B`+nSEwDbTn5G#TYh;a3?1wPXWTt5(mTN%z1$m3KVU%Z1Gh==cRDF& zBNOz}MQhpy3W2*6lAHQ1E04nK28ZMbI%>j1Fu9}t8>)!q*$0v}ftrxeFt`h}Of|Dv z(9b*ZmR`^-T%47mL=eQvVWuk(H8j`kJ^z6Se6ekPyt7B#<#**D^xk*q%c?@~%d>Hp z-rGk%x%BaVy+ai>GJgB(H<2-ZnvR4oTEh{GsPW<)B^n93#Nk}*@m=IW^EfMq2Em6T zLMe=(TQJbgywnv@zn)kM-E5*8x4ETL*cafjY4R9q;9N$i0h8rj z*+P56HVOm3mpEh$Lmhc#PcvN+=l zEB0sf#uXxd`69H!N#J4ji3)0o=&1*Gd9$7VgfVmpTUEVKav3GIdCG#w3&`%xVt#rv zuZ(MBg37_=cMNGL;Rl$c;Pgv~t*N}*4ydj#5Pq?GdyUSe+4P1NFg|xb-(~XWEP$@k z!%jzh*+UVqyU~HVc8V_gU4@N^Jt}1Wcklf#D5e!q;ooU%ZH6ew91bbR%vEMh+onH8Q2e8)#9FZ%Ag1$g+a;hvDLa3eG;t7^vf3 zDL6`3+&r^HdPiN9YxxvL#>xc6gn7^I0;%cM@Rax*Dk+wD0l0v@!!V`^x-dh=?Bxfc zKS{DTe6ctDIDevXzdixp9T1HMPJk}IvfuX7oZQ`UX9!_$cd;OZPk6{(+1wnm*k!c1 zE2KmALKd{lPP7brh%FRy%*$ia!0^;D~m z>6$P$b6O5@u?@c?KY(V6%r~qjqkULS52#I#`95U_)u5(?AuTGv2rQ$*eCdL*CuUE* zP}?F*bM2v8gWd`er=6gzA-mvEwA8g$bdhg8Ou4%2fO@M@v!^mN4}Ofji^E-GHL1Hs zO~1)395u(&uFF}NYMzPq$h?Y%=c2)nIx!I}gU1!mV^Dvi$Tga0br#`xQ3H5w6>mV& zYqIpkT1E(t-ih~7Q&1XU?NHk{YQcjZAKu|X7*2n}9nHnXqfiEXY9MmSoVZG-JFn$( z4$5q3-W90-0NHND$De?v;~(kXI63~Ol}=l(&wI5EC^VzMD2kS=K|-Y+pyXh>+(pAH z5k^~glaXW`^mo%LAGF@8b_FN4<}NrUG%T-CZy{+t-sU6ewYRaH`|9RbnLmOzQh51& zHJKq;nqp`n5P^_rhb`-ZF5sf2!IQwe+}Am|SA2$2=&Az0{4tX4-gg3LAN^ty)&RQ{(Tsl4RM*(W_eQe*`*=$Gl~P6c5o>_W4O@$=s~H0-;}*+#OoNh5x~ z?mGnxvV?QN2wDN2~F-^o4g007R$c#Da0nTgt zEC~TZdB8sJmz~6c#)qf_NcwI#G3Ng6!u#AKppt^+>C zBTpd{ps7uGthM9pi5MG7j0hb9*gv7u zKRytEdX3$zWAp~abOrmUQ7f3{+ik<^wy!7mClr)i++fB`Qum;->jX|p(7SUyqMnQM zH%w{B-U$AR3;t^Vt8*yna*A#qO$~texk!DJ$wwv)+GJe}D^Q3I1n+TE$zNRvk|z5u zrJaM@<4)0jg{H~gFNz#$XpUEaAq)~_?z6`*`EbaF)hD^nj0wA@lC-+8Xp{ftKmPm) z7f<`kPqZDeXb`y;tMmM5X*JA`f8v+|!O+6EEXjTow>W6)>#RIr@5c{hIrfiT0&}c_ zdSgATe?bN{HlubulIFU!w>W=lG-BT*XlVjKi`1pgqqlW1h}yms??VbMGAyi+bc$JJ z(^tr>q5hMDTAw6Fvh(M%d(pJuipF0MZ#L@?3d8&E4&?rUQFpPTx#Y9(?Bf$Cs7Ahf z_%lkX8ilIM*;jg zRd%hvc!gcTd*ChKjZbU>OQh*SIH4gevQT0)f7liI5EQnXZ1QTFf+S%ygxIexi+4I< z)_HV0dF&2_K`ruz{SeFkc@+QtK&XRDr`DaYfnW3}6Oe(1RfwQTG)p}*FepGNH#b*J zPZcHr;|EMRRM33a8~S4ry~+k;MhBpK?BfT=a^_+tdJ76>HM96&YIPMW7+42ro1FkZ z9F1Pdqq42|0X0}dH6gA-81R)6xfZo>Azz5P@X%W>)@vuUk$ZHwu)5ckRfS5p%k;27 zhmZnz#XuDrEToY>X+UO<3o=yZESnALZk!h*=M;ZRais(-qE09F7FxtF9s}}|kc>-} zkN)<{Z-IXNJwf%W3o`N~K=@^KQ@x0c^ZEHixPC-Ows^_?>n8-k(S^lStq;9HHo5el zhbPn_I&%4Owcjo#6$C4iO=2C{pz6;hCIENDGBh&y&;OIVGUQsorAj(%{XIV(<#i=g zM95-=KNnMlDF2sxgrEG}F)|-g)!_^s1J03u@6LbhTO=5Cp212hGV><>vVxYOaEAT- zwdCTwpSz)q(#TCutL=VwhARR|&c!Spcf^W7{*&^?$m!Bl(;E&VL(AWwupg|eyV8}#IwP>x9KocrG!067(UAzspBou2m z(q4#~dnX_T;!_;2tIeA8hM;Vc@ijb72=0Fg)(w3eQX4VQo(8p1c)({GK% zbzcE~D^S|d0F(M%;TzXz)E}fb|7BJFrU6*PAGh<%-nCgQd2el~`Z@H!?+3re#s?YP zoav4`y(8a>T($*5QKy5M4nS||kM6-`FLebcM3~-YeQh<&cnqvdGzv%XZoxowQO2z| zGBEg7#OAo;P>0h88`((}GlQW$seug;h`CO~t^VY(%;ZarNHoMY@j1+lTE@N-MAsCT z=|b+KTn44C(JYPRuC*P*DWgtJ@Cv7xdkOaE!SPR?;9t!f3!!YAWQKIE)&zooWO)76O|QwV2&YW zTQ9Vo*D$32iU7kPxCzTd^p<2?gd9ry%Z5Q{lV?i?&K@z0SR77W#)kdTMH zKJZSC4>b8c-S&f*b_Q;SK^XtvF7Ol5EcXGY2dixQIQ)a0TmJJzBMyMrOPFp?C0n%p zQ#ez#;NcVIFZ|Yz|9zFqJ=>qRzOwR=KeuA}4=X$Q8<4&tlgnHFKgDT9yMMhuD<)_; z*Zy~Gw0mrlX=x$&n@*|rFjR}T=^%{rMWyfo zX2;O?mwPIoeiG^P(Xc*7gzEPRabd}{$-&_{+YU6&$34 z4*1+0SsKX>MV7IB@@*e?!>EM4dD9&zO+LBsvh90}EqY~-tyqi030=qw-lpkBbwyVw z%gWk?)5<8&K1+kwTD6tErM~D6uXZuZFOeTY6%Ukx=bf5sM&)FOF8@scF253?0FlJsUQL_?>bI;|&JJ3%~p7hf&rM2^JMqY0U!^=z9z zqf`iiB*=F*9e@0{s<`vfqs_x_DjTOVgmvD0x{f~ zScj?gL9J8)A+6XS;IBV3XaIJj7g#<9QurhB+;x}6*i>jR&+@fz&B=?r@chx17d`O+QLQ#O#OGt(aO z0L)#TB6ZU0y_#xgc5@R(D$Gemy{3$L&;|q`xKb69H z;YjI@F6QP$Cm@_o8Q3!<@QgQUUqNe$Sb2&6O+1OS-J}*+t-d+z<9a(~Y`m89RT9t3 zLT3tzDiwBEImy>$#3SJg+}w5q5MmLs`vS(93De9ZG&9aoc6% z^GBgZknG(wXtXJAM#DDWGAx+*)uuV{A}*lTf>7)7_;E2=t`E zME9`Xn+ls>dC`kz@4iiNKnCmM*F>Ms%OMAUv-Q4f$vTYokgR`DhpSthwcCV|^92UF zy)C@PR#976Pk1uyEwo~m9#Uba!+&1!pnRDWUbxQ#j6wwGL_K@&m5Ji_lS7fRr2!Rq z*P@$?&Rg(FkDPC6u%d9R3S**r_@?3jl05}3J+>(61HK>RRl;PXRJO1%2O1fBf)RRB z?zR~umUE`s&&hHJ7N7r8?@+p}_R-kT66R`mLcf!N8>;*{iOHsevSY>?&+Eal6Urp& zp+K%RR7*l9KM4daX5PDP_%ojrMh*vzoZ)MvR2;L-M-eFTLuEoRq2-x@cF9hR-ihT3 zEY-5_`?WXMv(^?eQ6=pQdS(z7mq%L0jSy*?7jb>d;+L63S%^N|-N;9^`t1wi0Jit; znD2-VlnTZlGZ2{G#orPgaW?9q5Jll`qD-vaEC){$hzwwNa(`k@N1Q=H_j$Rcm{SoE zaNYCHG3gHmggW}Wb!%xb%rR%)ERh2G-MX#xu$jZ@x-v9YuJPC1kW~~kah`Uy+3*X+ zg=xb6iulhwbPa}T=by%Qy?If|_))dN(A3*FJTUTl(8L~cB#LRByjtyH{v_;4m4bQXtbWI6DHT|7V%nhFA$la1C6NXB#WE4cJe z%njde9quWlCe^1yrlr2mvw2WO%AXg8wukn4UF%aj+(Yi{9)jlM}d(M|4@N&vwdDylB~RL)i>FjUKU@sCH&9Q#ttL}isT zxc|z60-$(I&iDp8TXogXzaZ3C)Zlg!)+(l*V>pHN*m!L^AaN7YC0iWbS_}%V(v6>p zI<<-j4tpTYolDv!wZEL2ySQZO+fb1!r}!TD0vzsSC@|bbMhO{jHFrck>LB zVG}w2L?i1#`jYB)hih(ehw~`ZRj_x!1-us5sz)whGb>(jTphTOKr1G1@~M;5OJB%Z zv1)IU$Kbr2v^_u{xz5HzF{uY@p$%Z@E9IBXOG~gK_vk;8(oO-qmK4lApyO6>qTp(m zJ3?L~?1am3je1HVwn1vax&3!Ax1PXiTmzCi$@=}iopBL%@ zBID8-ZwdU@ed(E}g)+AKx(Q7rY^GrSD`K%{rgt~@=<3dp2>P*_Y{#f{k6Ckfy`b(v z=!A(vyCKnu0#Mni1V41lO*(0M;5l<-OnlZx03@V3#PnoO^-dzcq`)h#BT{l+P4-h? z|H$)2G(+m{VYbNCZpj(gJ!Sj;!Ykkx{3u@0FnvO%ae>_15$4h6qaSW8ba=gUgxanM z828CU-%yo&02M2~*D+_||Lq6`NL?znjNR?L2L#1}GRrpLVR{b}fp`8Lg-E1P=PL1~#!3)#(f?OM-SJIJ{SFMkuu{d1Hnj+M&9>#SMVdT-Kf5^%tLWHETUl z8rwb+EV8(sLQ3ltW-Oo9`%Q(`tnv3{iSl5~@2{jfzYWTx4-o;~dELrtD*)6ffl|~V z;Q2d%pvK#q+}TiF8wHlDx^|L=s=l?A2JL8{Xi853n52}6DC{E?M=o8#&F~PcQ-J^L z_W_iPUrNcSd`jmi3Bz&xAd>lXc0?$Qe&)1q2>b{eiP^p`(LEHzJwP8Jw0N|xIhl^BDIek zzl8iLmps|(G6?xEWv!c*_M$7jv;^TS1G=+W^My5&*U6GV%X*uxRa^z|lU2d$G4l?e zjMu-yYwTrWe6^qm0?2nI;atu>N&PQRyxl;4?mMt3s9nu=7=l_XV2Te1`R}j?{&PW@ zJr=O2p3!qZcG0 z*wvE5O^BIpJs9hO?$c|WAU|FSKPL97O4+$jjki~UOngc+I(F!*Pg`d>Z2d4qXhFlX@cVe3q;g=C2t>3 z>o-uitJOamO+x;lcS!;RJyYuN$cQm%X{6S`+IVSzHb3g+p>Ob=4(^pPnL#O&6# zF!g;Hdg2(P%jDO9d_}9=VYM$3Zp0xr=6XJrW%>DoFIL^zYL`@r?alQ%W3*OT|f{T1y> zLtS5z`U?juD8L&!R^yK3yDzAiz7<$z`p_TNATR3}=uh5JC|vbcwGnmCIf7z(-|Nvg z$*j`~mmg0XIeU#29v?jxp?EOGxbzUnze<0!1Q^P)weRyiJg$)71b%v0zDeM#wQN0? z!n(q<3~8s>QIV^LOF^*k`B1dwvU>=!io_V$neZ#<*KWYb5#A>d(I5{e)yV!n$k-#e z=qcf>9uJSr5+Sdb@rp=6osOyeO$~BUB6w`h4Q?E6tdM14+=sOy*6$Jm6itTNdwnx1 z+o~+IFVLVSDYvY+{N0rd^}`7WB1oDR|5p4`ow$k8qsrp z+XR|06>)qCl<{}pzZ{0p9ZR2Yp7UF>5740ouVTsNOd>zbbAFCm&FncHD8!LJUl5yt zeBNwXmh2sWl*}+uh+yS;B9xcs+=a|fvQTYJTOJXd|NJf44_Jgh;ku;z_n`*lZydZz zlf+lz;eXw_3v6ANNDqa~+t0_wSwiizz{-)sLbo$>#!U!KgOh_bKvQsbrqLVgAX34m)%;mqavW13s!7I*_e6Q3d8eXO7Eow6F9_ShTwo5E|#5u&RY-+?- zoI0gF`!w2#Vd`MqTiSl~n+m0>~N!eiZWU+n9?4A)P} zJJ5iMO+`=Y&pPr|$dizkmyOz@PhZca2%uz9HMUGxjf0PS?dS`=m zuiwTUy#^arOuP22gp`zyprW#JB&a_yEE^hYzEDLj%L60PSTfv`QvQzqN_VOnZ`3Yx zc%eO1Bx$>NB|q?G`xuZO3Uq30Ijp1IsLxsekms;c#oq_S_)5G)z*k zI_J5#xZ>2fOyZ?5wFYexaR}a{#|B%Y=!jz(yu6k{O|+^hG>Dl(Hcb`JtF{(D?QAi{ zY#yVGwIO@e4aa$(QQNp}kFPR=|L@qhkRbBoVtPpO6KP=%w=rqyCsL91u_~EZsdV1> zH!p@Y5ye98Mg!XKy8zowyY^!i#L8xi;y`ZgQBqQpxTxrjh=>R+{cQ3Vt8lu3t}GEj=lY53I66UKCuljoWGYv{Ab{D z5zG(UR+ZOe@l>4mX7nyEvB|DvSTrgG%Hsbssk`E{62l2Np zH@_0+xARXM^XrFsn@HYb&)C{|$3oeW&wJ-N5y)?AXx=;jWo-W9or5P%eORynyWrqn zx#M$u7KHrs;SR+R^M7m1NVIi`p9zyQU2t%Qu!CYUTfP84e`R%bb&X>*dDWnyOst28 z$I8{K75D7fV|w!BBVtqAIwf>`IOtixgZfLgHd=#{9?)9d7nhKzuUza$ws9MGmbTS6 zZfpe)k20d&c>eskDKt=+!YS)>$nDna?-giWt8B91s_b!^TP_0;7reu3eh7nLu2@CVRt^i<2{| zIfKI4S)CuwfqdeKw8{?Q6s4tgbpw35Q=mGO%<|MPiO9Z?>LOy8knwyifNiN~#TT>N zJ)=g|;~9t+Adu1=AC#eb&2RPv{-Vo<4@v{ADisoH5;g^Lh?+L0R-(C1Bm!q}#Mqj^ zkL=_N_?WWV`l8_XfyWHY&COpJF@o-s=ttbH@Eo#f7~E%8d{AbqaeQ80UUZel9p3ob znX~6Mlt5W!)2`r&jiH5}8@*Z%!lw7hrxZx_bmX3ohT#({fcc=z*F`O!Q2WlR9%A)^ zZJT+q);`RMRead6O*rER+o)((lK=HNd#cjzGSo=f4ThLX`tmcY1Ou zjbFn2ULc(?Dc%|N&z=`MlwFINT>8(Rm$|tj%7FkpYDYATuKGCFzk65bB!GS~@V~F| z3Y4&m|0?vez2f0IRil)|{+ z*1eqcs(*cDxEC%SEpor+r~f?u&o4;wL;Zb6%rD5l?}hmV`PV)B|AvLcdZ-inzMF~y z)kTo6u5Iq`?vA09J4g0rvpVovoh|B_Wu((uYYj~RLs#`DA4D4?eRsr^qOkE81s?_( z`Ujr!oVRzHA%2uU&DY$&ya7CBVo6xmEJe+mHP#?6Zuj-mtIr*Wcqon(Zv7&s3r}wb z_RO}@=1Jh*zI{7{+5w#QJ_T4wrLqUHs=B#fwobo^VJFKRFFE&;9fubRVTQhBN}|SE zAb%_X3HT!y=^qq|oi0P@w(O#sjVO6N_cuQmccvOR=6Jswb~DnK)};&x5F=K0YNUGw zj|*kjs=>dod(9TsN0u{2q~Po#a}YB2@$m@t>K(F?#ZahNCc;iBrL*_e#%SGUyo_90A3Urba$ws|%hr$K%d7SqCaQUC{ zh61>tfKBHAq@f5|-qBwt=Gcmc`}#hJv(`fE`MO|f*X`Pv~dgU?=g@NkYTJ?Nx2*r8a$4=Pad;IuuDiEX~RzxKI>Js{7yHbeMomPP^ZQzDp zxpL(p#1lO{0azy~bw{+WLCQ1&=KQ#NT`CcdtJTe+Kofx$?z9_5$x z*Ts4o)E%@x06z2s8$PiBfp$IsACMg^jpXa-_Q^7i(wI?pT)wAfCn{Bqtp>rWa+un@;r3^h-X%BM<=FoazdPr&wy5 zq_&UGy{iya6`Rn~l3GJrPvFYixDVd~NTO&5*WR?+N|15=!nE3sc-i1tm9lIw;u=FN zb9Ns>Mn_TYO(-EJ*}yvN+h??Q-{?;zFIJKQZm!^rzW_^S6*`~a=Y&mpTVSBkwmdxJ zgGklskQg35a2v!%82$tuIp$7^m?Val*q+OVT8HWt)VgL zIN>P1mtjfarzx-&H=rpg#VoX=4M2kW*6Y0(6bhf%Y2C9uC!n@6voj(nx>#_p$6Lpt z+Rh1htXLum(Z`NQQ-!cmo><0OP*Wtle3`#0;guv@F;BU4uNQ(_lRh`B{3$?2qwA-DtVzrbxTk9JY+{{GK0DXj&^+a^ z+zY>adAe0|2;%r%FRjvK_*wPti za&d9tCuhY}$NEuN&up?OmU+Z+|6rx9I~eSmw83}~ibTd+H)*1U9q+y#21ii`w< zodufP`lbUL`%^VKTYyV3ii#U3|8{W@(agyUmg#%J(v$I7(q3m;}KtXxP6OvF~o!+X67cDE{_`jT*YVYCIZ; zy1`}gcegpFs_Qw2yOcaNYz`*nj*sL6crK64Fta~z;;7g)ky^*L8+3rcjFr7oylPW* z>s!X8Q*a3?)QkHTBA9V~mg4<4xks(2OvRJIa4g0|{P$7T>*o=A@N z^`mJO(26}-;cQp1JGk(qTdYW;#?>&aZN7#uFSk|V?RSp_M|3w~6K_x5ornc8Mt5i8 zP$$KsCY%YvguysltXO1^KJ((3WhWEk9ZsG+`9Yq#TCy}r6wbN%lH0edS(Rr1AGTx3 z=-Yq~gbHlrz71h1^>XdG)B=rN6YV?QCAiX_2Vz{cR zs!FhIjSd)fO=rc!hr`G2+`Fgvwidva9NjP4$$D$#w&xykR3fla4q;UvoZ5WYWYw$u zlc}D*_7e&?hlj~bEhzg;!_YcNA5g^)=_FtWybYX^Iu~g-w`Y$~hTEkc28U?D_W->a z8!v{n{Y_n2sBFH8BW%N~ePXpsNhIf~W21g+E@~`mbf<)Ay(n( z`IaFv`4tm?2_Z~wVM8?iwg=zWLMGgxj`l8rCll;fl?C)~supX!Ugx2&-@KfQk9$jE zV=pps2tVFr;dJ5oj{Nab@#ZV^;ACzrkP|jOPjM$agq^TTejg&ZGI>%Ets2v{*l3#< zAn9up5{7+1o<5Q^F!Mp!KFK{TC>LBtt@_T{%xg=02WU{NjawP68LDt1P5yf*eN2r7R=l0j+V+ zTl)y$7d58`yY;6f0F(is(_|Y+r40=h^K3a)tJYg}j_oN>clsaKzOV^;T!Yv5o&nzJ zU!3ZHb_SaP!D80>{!C<8bXp{v$Ca+|%B2SK0`*>dcQ}bdG7TnhOYXok#?I!c-sYn; ziw>D(G@ez^?K{fTJn&j5;gRwC79b_G=b->rLHDu%&P$Uw2cpodUR=b)#PkUI8){W~ zfc2VGB}+O6AZ|O-haR86y&lkEQxziZdQ|a2aXDaMPWQj-s)eA+-c3O1-hpLH0}~D_ zDjsiNxji^>UytOrZQGjFb0~6CV><3)J!*Y>3eelDh6-+R29 z#<9^x{)*&q+i7d-M6LTRK=<5PaevR_aR$$^DIo0*AP^*i#Hn6<9karWal74DU7D0&CMwy`_Ju zufL0`)wl0V67)^yM=N(*0cB-(@6GM4vO;L?jf{+jxritcyra>259-yua(Vd7<08Hl zO2HC-GSE-6krN}dbgzm5wBre;Ll*VVCI6ZwQ!QbiK4Wd@8=}HdVcb^8WvhJ2e2lm) zsL z&HdY-0|-U}Wh<}Q97XKakqT|Gz zIvVbf0faUFoPffmlvMpYAQ`IBX@wx6(PgoUyn(*1ALgu^?wq@Q`UV#wPn=tF^D6*I ztT2jB5p^&zjneZASbutXqnZf=MbR&k(IF5ES8N8a;NatJ28A>m+=0}k%*^VG;dq6L zy1Qwlr*?cCA{Q~g+yb>~X-Itx<60%+mNS?wg{L06j`d&;jyZ;?wU<#LE_^6>E5Lx7 zo;xRncneG$(k)EkZ>pJ)Qwzg?Q&~sWxz%ri+O@pAe2gmnT_F(Qd7r5?QxWHYIN!yl zI#>*X2zHG$GgYKVQ4bAi%h%%l7+O7GUZ@+oSXIbV6)awkAHeE_`gEtFkkRD`RHuJj zj6);CQWpq3)JZ$fzvGC-lAV3F%@~3(zB}2*O${>D*o4IzxbJNO6)v~~nE)9`(c0Y& z49%wI=9?gRegs*_ceU~4FP5qsmY*-XWa-j~`}gmQZ{2#7Wa(Pkg|2G}^U?T>2o=`? z)x~?ewz-RweHwIjf<>^4R_fV2wwL^dQJDuw|LLQD{AC_x{$nJ*@1!|vXdae2XE1&r zo_Sa*j6Y|6QU(8>c4#XviP=b_QSzl4XD_M`wLl0wh#^ANLt&|ojqdjN@)_W+DuUN^y_5u$ zww4e^h`9&keNZW7nzG(9_X%jZ$dfE$~|eXFrA|t9M%Sa!EOf99C9VuRYa9 z?1|USj@@g0DmHJQC-x)cXD>2`eO-jf9HD7Vq75D>02-hwLcrtj>`fmpd%tG8Qyt5Q)X4IsbgPbT~XI+l&fx92B4X~Ov#O4cD}H2u38l|_}&Yo z`xKoFlmyA={0+uwTKVHM@5Ce|By@?Z@#DMGX3m?aHdwpAah!#>!VK3|OsE|$;$sA= z*`xUs+n*8DK9rz{3jm2c9E8d~);<8))@h^e8G;0{Lf9P>p9MGy#cciH+1~43b#)vc z!josiNHq;R+QGDzU;+aJqx6}XnQQ-Nt=n+4)iQ)5{QsnNn{ti}BJz1y>#sKKck?zk z>GPK$9V$KZIBUuWykEHl<`?ALkYaW;=7Ilzj>(+A%ZXL=9qmEOM(A490Yo9Hlx*Tu0b2{YU3{G>zV?4m)&UTCX>W3^!ln4}b zSil77Sh?IxHC8 z%#$as{@r#%f;<+=)8$KZS^wEj69Dz;&6@AYhAwmOA`PNw6)AiA3&|zv=dR3x^)L

    f<8vtD+_IQ3Q#Sn5jCz&z1>#03&9mt^G}zD90nlgff?We zP|RlyzthgQ3t=2~Uhh`q_$7ft|esM%Q^y!pgK&ElT?NQ5Q|-f6QIVA`t1ng~t{Fitg}H@kH`28%d4 zfw^4pg{T=*0Oy;JA3wg~esj^cO^m|wvKD6CWbxvo7Q3}2T8xQN1^GZjtIpb+)CMpa zO>Zihv6k~gAekxK2?&{QBg<}OB67$qKnJxqoz7zh(tAV;xl>6IQ(kL$a}40Wih%lR zIG0`GB+FmG%q`sV8Xhx!5_4p2tZ#z1(y4m%Qcj$vGbEQD&xub6VARVsgL5%d!;&F}l3GA5eweko; z{HK77`%)k7(*I(Wl_FBh-u70uU&)7A57Yoq?_^hS*)9Ts5DCqS;nSq%>ELB&@xg0L zmU+nArZL=}1Prv}a)ZkTMLNRQ`T&QW3e>0@8@JZVe3)$mAhXSn!r=yb5@7iU2xD%& z%AXoer~-1@{0>JW!!h7-SM1OEHlvyqy_}kzR5{&`VVx8`n5SYLR#o27VL}9b_&YPQ z#z3d*_#xz*W8>g7Y8U`^!_sl*_R^hwF$sBheOK?gIW<{6ErsCb!Gx}6^@du6O0vxS zc&RIXykiJNS#^$jBJtz6GaZf2`9SAL%zd)GHGWdbiC2cO;OXueU@;Kb$Edq%m^5pw zFoar~YG}4&f4myMhRJlDe^M9r+QC?Ek?f+yv`McEd)QCl086L7(EH2Ar75FVYflUT zv86$wCQt^o#Xr86+f&n%ZryX_)c?Vi1t?Y`4mm zt;Qex^xl{KR$cvqinvE87NF4(?bXq%{e+CN1lIm%H{(f?^!mjFHQ6IF8BF ze=tShutT%}VsEa#)h&8w5&+d|w}_=vh6g9g+Gu2m9S?`}r-$`x9#R<|oYcsZ;m7ka zi0Ds@WaR5gr}Oe($*^kH6DG)th=>@C?%co0g6G7A%wtm^C|A=Cu;|O5>L!Z4ml@)* zdr|}0rr#3WZzHs0uCK>~a)f+RXp)7pXbp{>;@%wsIg*lF)b*2Cuu_NCXkB23ZiT>v zZR$MuMI#zZ)>1Jy11OH;9%uhO$Dvhgu8#HT2os4Qm#*%?W;6+Sv=)V!1$$KEL>Qdv&Y$W=GU!>MU-nmtaT73d*G&d9@lI^d427pI-6fRb^Kr7{w`3o` zNF8sAlGeJwrU%IVE`fBuy(0P+rTq<*x_5H<6UV4;xgIWr11*#)y{LjEzfE@#rZz|e zy(%N!!UqonW2frM-PM$tnB z+7)*&zMs2-ZoLU6wK|@zx$xdM3@avu>9^Oqz}PyrY%hK#_qlC($nL<1imB~RY69sG?Ciyo06hq2PNw2`ShlQF+)ZK{YmV>aMy-|@`oW6O@eQqE)J zj&dA(zQ1P_ggH`OR`1DKK3uqN`dl2WG{0qQA1#Yv-?Ux|)81UQ!3h6@3qTa#FFiHZ zrs}lzg?S#k(B{1x)|Z`vHg7?%O`!nZJeTc?n#al5t6$uGfgfYx)~#;SpN~&qZu1(Bg9C4YL_r?FPj+K zl*f8&B={7u?Jf1UU}dq}7#yB~zQhu__rVQbN>^1m*tN#*r|5rkluCcFLTL=#QNv{B z2g`UY#zWa-ve-k%Bfa89kX7ED)+F|~YsHgqFK09!<*+PmDe5WDrMR4tCcvAA{f!Vu zS<_MtHckXtW_2#kyHg3~PTj-G%xq)Px~a2ifr|a9WlbZ&wZYBMb#msk7_=K~L^z1f zlyaGv=InbupL>M3BP;I2>c0d$GAGz8?gY&6iwjPvff}LZDJytQlm^uGC!fpmoEwlM zZB^6PcztETFvrSOrJ}yP#fH$jksto${kAM(rE$s&4Y#mw@2_m>&3w5E`u4R>GV@RX zHbUP~;56=OZs*5X6bKqD!#SOM>X#19I}oc#n|c52|MwN#xrd_0EJ!D^bMrt581dYXzHHWHE|_- zplvLv$0Idxpc&A#X-(q-+`<*k=j3`CoSCpR5+l70>b>mkRZQCpgWAhO6Uuk!Ia1Ll zHJJzJwdD#e!Ium-akgFT8{^^Tw)7Y6cerMCK}Mq2%t;iEjy&U<32j)?66VQ&cPt zo(Rq!H8R{qMJw9Lb?aNO-$G*^BY3SmBg1@F-kreZ-Sa%0f!>b$NCneE;1~=aTd`_Y z%rgvl?~uW!j+k$`iB>XQ_n#Qiut``vzC{cs1?4}FS;3-del3XLWile>D(Qs@{)R7) zk9aZWPIIu;W*J3<@^7znG$1H6A?C|yyK6P}+zvIm_t}nCW=iJ86G>O(6uFzBQK9CO zyW%H(h)X)5+oBUt*1o#z=1Ef1`lK5DaO5;=%6k^|WeQ32H?_5+h=?FVG`VY4Hw}wY zZ8`p1ruE0&61HCyms{g)ds55V7+cR7H5*^WJ_T}kHO-<&V=sJGbrS-R!jeKHM6nY?VdI&*(@rZ*j*a?mOxWLA|yRRCYCb5wa z)IUhs)i(NOOa47Qcz$B;`+o5Bhhd+M_h}H8)A+OS;+2dZOhIo%g1ceo)R?6rfAQIg z(#u2drwG$y1UAQEkmksZk9?A(<5m5~6$mZsA0XNIefY3C!|)3X zn7voSB?GFc)tW8eqYk0V>+To#!>iTLAPf$p1l7;Y+a*TWkDukr%6agSz5C`Ep*T z{@l?nt+ksVFg!b%l)OhVx;PI>>7>1RbxYvbCK8XZnSRG0Ytr4_k=u%+zI{0AA>Yvo z5nO^}=$UKX%v+53x=@P}*Mk?}P4xFOi#ht_i&1RE2^6$$Dhbe=i7#;%X$_AO4{0lY z-60SVG9m^SKH3hRx2{T$bSA>cY@EA>GJnvw+z7h%50?WKze&!Xwt zO(!U=wSM0r2VthmCOsjW_6fGdh z!(O&)v?*5YAJPZ7)?JWWAVfFc%R(v$OKuilL^2#bHgrikV2r9)6x$u&n8J9$>QuVd zp{=`DH`f_)ZnUo%*=I#pd#2oH;dICIybVXx*O?qYv@Y4)^75zi9mg(GaO0RLj_X*J z{u46;xqS`Bv15y7@<~>C`<(2prS3gYny_v3#<~#b_9I_^Ih;2-e0zwMU-5vS z+<2x_Z^0Px4yzhQx~S-5EfG9 z!$Y?`oH;H@v*1mq;BZuCo;4kEkJHgj7DDHmW5#9o?zH+6)5AxO(15U;Rd)9CVWj9G zJw5r2tM5#<4YYX+>NN?1YFqc$#Jt#;v-j)oP#MzUoYu(&%0E8L617_2nUMWW==|^v zEau<>zq+-Tm{wGtNZ$Xs(TR|*6e^RO)%nqzM=8ziNYmS*-Gy2~sn!Jx>FsRn${l-? zin%rK*%(W0T*EE=wrZ=@hnyie*A5Sf7gKm8Tm;5M_G}ef>AM4HGj{l3*HI(-nHs^7 z9jdjG{W-@1>@eq>#EeTi22y*|8{)I1BL@4GE=#^Xb8E>)>OPBdP!dqDTC$_@y8Cd9 zzP-?8Uf+b<^@3AI+WPNQpX|@6En~x+AM~rESzGsD`;)Mdd#}&Ji(Gq(dQ;rk_Vzwp zwz1e@$bH}`eI)c*ZEsk5aHqc4SAn9qJ|DFO@OloM#CqJdCF||5DYc?04%UHKX&Gib&I3lNc z!fnnl8E6`-iaPReV^Do=vF?bdC(<@EZ$@puhp+Nfbr(AyDNa81CYf~O9)_?5FIfc& zIn1ZezqdImPuPH`@yry;J6r6sj$Q|*wl0+<%D0=zrC4`V)P(2NvSl9Oh0cC*r1$Rv z>{a8BOmNfrji{&B^3xwrPje$=u6@N@p9C%E=8jH>@9j+Ly&oK3oCKY51~W?D@&bGH zk*t&^*W3J$7`3CTCr#XIB_w9X?wb5SfgV77m1C>#?@w?J3 zq6=+qoKrb?6W{h+niwl^D%5S{piSg7oIUO=De&%uCe9Rf_2Hhpi9SK@^O!|k&i)%JTbp&Mfuw-x-NXT1KhP7d%!jV8_%L7OmmxhXz^)Yc-; zK~w-<&s@lBD}M?g&w_N1+BQ%1`Ezzi4;HdkL89%B;l?Rn?t_?DRH854z?7=pVrk9E zjFDoYZe2RbsgfX^#7#X7`WLV0I@;ogUk4M@ii^&c97=?aw(!hv`4-Yi`CGcL5Y65M ziW(&gjtDuvw8|%q2=?`W#o2ov_LfHTJr>c`9+QJLGEt3Bo73a1@tTVa-+6_U*j1#5 zlxh+*1zW|er%9uyUoGKsQ+n{>fY#+=?!tBvne4^nw**wJk_tShSM401wq5O*)2s$& zkZpg9Yx9KOHvho2xw8HZR{6R0v9@KqBC~SBIa=!m{p6PwhMjHf)z?P7Ze8MoqHgYu zI2p*#nPX(QO)G*}?2C^NLCUiP-n;MH0XBSRm(i0Q>kWMzidvjD6%S2=x=}gz^NJcH zc8M%w{dYA-NZKyipOco|xVMaeXNWmqhA-ydt8dkr41MXbTZ9&^Tc&(YY3;HHz3ui2 z#a+Zd&0G@fksP9>u3%e?hx&7kiXX>P$?bWfd+lFeWIG056rI?2{J)VvspdcDH|#zY3&YCSy@vn% zVjz6+O5K(Rf0@788!TCV9b2Jd$w9Fg@Z(8}*dR79abLFlUwhpo%9FDkvxn zd!n9kD43BQee4ufTJxKC?)pK~e!2*2ScHM?bj=-u6gsxzfTKr!J?PZw>86v}_Gs?L z8LQp5XivCVOsPB2g4JW&gKP#-jtySuCCz@Hm8yP$(yk8nbx8h$%s%Zlq*$cbor;^Vc+z5~#0(y$9_-8N%oFw0LU?T;3yk?5A>K3-< zs=K(b*C%ibaQrMLrVrB15DM_nn#75|>_~ZT=XG(q+1umvawSle+7wt;ObOB>FK;r^ zEm?W|iUY&V*{S>Ok@vCV`wap>`L9$$Me-Z=9Q~^1s*Nx(Ci~&NOW$|bD|%w@(_UK2 zbr*!?Z-lsXJ>GPg*LW@7Bj?=|b$Z1T4Ef%+LmM%#s0T^r=age$;KEiwS6J8zSKXjR zm<>4vFK_TwL0(PY?Vj96YIa_-6LDy!xvl?H+k_@cgOqMGpz|{Bb?)WIh7C~N_?QLM zHpa(Hg!OWEqWV0jjk}tH1jt2#t|z%!#caqzYi}iFMplBV-%6Oq5xt?nB6&cj=725y zBpmAw%VFp!Z?axnIQgYHJA5yXL7U#!YSn+r1#P$tR{N&iZIOQgA+RCfgXXVDc6GvB z&W|GnOEg!(Bc7c9Xek$o_<>LN+7j;`*7V{&nrS@dF#ob*YNe_r52i-8N$m z($wlY>W0?F?1mrQ)`Z{QaaHb_JvhugZ(U@=Kfcjk8l?X6J_r<$C5f$Sj6WCMeB1d)wdd7RnH-^CVfh>&T+nC%K*vKN??^4T+r3Fs>>g zc`Sl|KI1`}cd?qsZXUS!od<6$yH^Yb4yOj`jW~AyzZ!LzYit!tch|?){#z&mCGTsV zQ6hH#xo%9f;Le8|hFAWR!Ea9O^pE$NI~#|E;LfJmde8q{R=>U;HU?4>YK#iMjqKcO z&HPuGDas>T)Smgb-U!9%`t_pXad78|UY8~R>@$gjWQdmVrhir!BG8>vbrU}R^JOS+ znO}ZdkqURdo8GNua^<6dCa8(Yumnh&zeopHAVkBc-ehlUO zV*F*9{%Z6=NBRHI#VEeN#jW2}pI99!;|GAa>OjWrgQ^-kY}(IA%&hwkYMj4J)E=Zj z_0u%Y`4F}TCsr;cMjGUqwn^_-p8BL*xvf^`R(u|@YbhZu$&o77wY}YZ*0b=g7sHH! zM)B`MgZ_fuOeHKV+zEj0gqVp!R%JzMdZJm@(r{)qjnRb{ zH;-yC4j+Z*w~C_s{`}$WNR*4*^Yd=OAxM=e_^{5F^UO++=C;yGG?3E^FeAEX?jXr8 znB68FX<%RVSV4H|r%{>vA&VtY*2Dcuz|H&x-IG2ubrnc+n zf9=360p)mZNrVFgDFyY~?Cgrl%9|t5W@T3)M;{*SP%r4Sa@$4=phE79%lL5UO~4jq z+b<;tnPtWd5T|p!>J#8`HZCsqg@RYa=@93LCQ-j7psS&j-IJ_vY8yf|qR6&pSOee9 zV_PCB*wqAt_EoUnDj)2-np}&p$urF<^=A@lf~)X;AsPWsf_)P0X2}#QVv)m2YfmHJ zsJe{`kTS|V(__U|#WEvF;s7MSD?ROD)0k=Vy)N`FPCLMT>RV{!nfNFC(A}8Vl$5qA zLOC=fZ}RgN^&M^iqAQ_$AG0be$+{=0I0E_!B!QkHw&^YC!j#f|1^vJ~O1nPaW}_a1 ze!Wu&Qx;u}3PhbSl;!UNHfi20+u3%lD=(d~-(z~B3Zx4(n$Er5#}S_0mnEc4DD(nc zkU%e#ZfZz=7lCv?0;EEAYWu9a2wiUyGukQu^z_?v)}#Nj{hfw8l8+c?_6Uxj9bA85 za6%{9b<2Ruv?T#>^ROtxhhUbJh4(d;XM~@6mvBh@n5;tBBfcl6G*V&hA zns!M^^4AZfCAbMA#_i6a=1F6%To?O{av$o3GG9!}>b>I+Wr+`m?v$V7U&1Z5Q@g)Q zR@CTu=u~HD1fTEDwQi(tePzUst?q4g!>zQkOxUaY!OW9|6~Y7^YINRBHt4}x(Hdf< zj2WU1bK|qW@Ic%=RDDc2Jk!YI<@GgnQx6F;S(Xl7kB>zfQ%^RJz1ZQhYJc`OK2zSC z^z~(zFk;-BbTUOypNA>%JPL9@!4S0Z8V{CeTcoL~so&$dOruY%45+VZs=1U-Fvg$s zJit8$EZ^GF7I2R0gbvCQLxz~ZI|h}H4r(%`4erc>J@fWP3SuJ4wX{Fpce-Av*Du5+$4V%oThS+Xaw zXL6VAm*d-qiEf~yB*<;Aa*!_SxYHZqj7Oo9p9DJLyN}JIT?r?>oOGUE76=KXTe><> z`s_y`{qaLC(B9YW+ie!!n>3i|g`n(`>sjbq-!55J3`!_9@pl8`S`cG+6*L*DH*pZQ z;U$ocO;`HbP2viYR}F+`&8!MP4tHv?S}fTY;jPG^g0WOidj@;en7V}vka}`}eb>wC zNq&=jXOSTZ&Wvy9h!b0#dFiI6yAr0NH#-{?U0E*3vJk0!INX)O3>Jos5j-Z_>^@%P zP~%x8V)Wu#&k@F?e986o8rn;xhbq_z=J*RZC!Oc0DabAm+PVsj7Oov{1-ld%x7Kw? zuIUn0EIcwJR+whSeyVH)BN^Vc`RSi0S=b3-{WPtsP5r{jT{8rgwyS(dzht<*QLH1g$8B`(r5jtQ(8GrgZu;w zSM0hYcE>kE=VW#8-pfvpo}xD3NT-C`@SDUF&o{?k4Z~ z^cU~_itRO`Qj6EAi|cArnt)B6B~PI1P$~kh8RfwP7wf;0`aNWYb+b|(j%E0(C+G#o z=X`x_$(8*W2yWVZhYF~f&ASr2rq(O?Kl0{r&&=Xx1e9%*_LkN|DXA&=5yM%`&OUVZ zyB&g|C+iGyyA=4eg0VPc#D}Ddw)u2&hA29Js+5Kon-Yy~0W4ovzpj#rRbQJ zkY^yTMxuSl0QxOEt){+MRmwu^9D*}Dtat&)+e&1-kfhYfeqHXy^TEQx!=u^5Uy`UT zwloA~-96=*qgh`!l5!$=cKt+gL``#Ol4Q* zX+Oje@I zLsiYnLq8+CIUjI+i#7q8f<&y%FVnNxzm9FSef5#f=R8x^cSTO@)?J?zchgBFjTZ;oiX-LD(^>R& zmi>U@K@1Mb1&T3vKMisRLq%KMMRQ3b4K-Jwrz~K8nQaeD>Wz zDQBUh$D+)%><6S>JRDuU$H50cJb%7N!57BDHaalCy6R71xMwyv2-;X3UB`0#HR`so zLr`ut*U3CIbASQQD{kNQgG22f5nMh;AdI}3scGkpVoytGbqw zz?}!B1J6R1MU&==ttSsiKsQ064eMgGaH(r6}F9&oophiViOhkYx}H@2UjaYr^iDh0n8PNLOxyVr?jTfJyO5! z>Ep(pIz+qQ`dVOKWcme`7{*K0V6}48tdf+&`WG{rF-e>_v5woZ+*qe zcJk@k6fHM}UY9pzgu+XKb=V)1hk2ihE&uYU-p$JpcmhkU%%bP#)6acoY(D$gQ)c(;{EC6smr8VmnMtAmymh(Q;=(iIUq72d zQ$bzZ0yt_PmyS=yyrN4nE{%>IshdDO4k#+OgCj}A^QDrpTK(G_%x|?0F0$acuOi(t z%J{}#SRp{??7=H1X?}W~Fjw&IS?!-T{FvHbR?v_n4k6bPJV@Pj4;RWnBl|n)JOdEp zQXK4xZiJqa&bw#gJG-vy^lh+8cyMtYH&qimCqT{Wfyl24 z_}8nDV*mz*lwwX~Vsi&ytm=d|Q3Yso=y7n{w^M}sR3fxg8Q+JjxU3tT$hPd(FoXaP zOBJB&pox3%O5iqXq|h4N)qd}oZu*Hc3)p^e0l?b9X)P4PRGVp#wNHRGEM%g#5%BQX z2w_*kb^(?(KhfV&FN%A zQctWb=DlfTaF^B^T$u0kA8jLHO7I&l@8x9I5~f3$O5mRLZe3d_$*5;o{*kWqUBqV&z3dw7T{X(6BA1Vln;o0Vnx!^~pC^x*!v-eiS=7%=a>s6wZP zBC7;|kYNZZVWQ)4hw8c;coA!Z?%EdAR$rfZVoySs-PZ5BAWW7qb?VJy*^HwNKdtF6 z9{{5mI#wu9DHwV0X3?&bFRvqoL_P)nsKZnpN_^=6`Rr+glT4z^7_^F2!r4MwH{<8P zSD?prW!3)Wik?4wj{zeCA{r6o7E=*CPtU9*dbI$ss3E>PTk+zM&v+fL)C^P(FNcEr z&k6LxnZ3s7U4njSd}iwvwB)?od`{x~IKZxrYK)Be+s6VzFaSQpQ zPExZ45Lz7O(6N?7M`V{49DOAyX5KX1kAqO|kwtnPzYnMA+QT7IyPy@^-4qnmYQ7n+ zxkinId*~g5sw#sCb$Y-xtfM?dZm?V?<#|lkX;$B|r!? zwH}dsG|3d>emEdwlp83?P3ZmkmUBOB2*Z|$4?s*Kf*`V;z_p|7z546{WI{6dbhGSC ziKSNVx7u2mY_rw1atLHVJ2)Ny^G(xitk`Z$WeKC6R1~g;eWNp6RA9%b#!+tTPP+_(www_RSuw z@9Myh_@@_`$SkC?hcLQpXDpfGPDgG5$cVb?UtT%8RB)FVdO%ut$rInJD7nW3KYU%G zV7Tu8YVW9DohL!-OMYfaY-}NUo@$>~`ab8i@|mFPm4on;gLG zN@&ojn=STT1)ujD*fHp=J_za~$r-h%GwLBb={^s%3I$8E)0Fj$EW5sfp7S>>gH?^s zO+lzqm8^|XyLj=-q@xQLpst((dJv7^q;71%gGd#S)p{JMZ=~sXjwIn?{$ShXC>#w= zFNXlF5un?k1SuMTY+4zhUfjyQ} z%Sz%lf3mD_;{N`=M-rhC&McF%jYl|-fYtYIPW$`i{r4HZJ+*XoFh;*mA94&qfyl1ETbKw&dmf>7aLx94qOPE zBq`JR5@cbM{Qb^>P4Zu7^G{m#gE4vkU-gnPFA}`(6T97*6XXCiQ{1+nubQs~un_?3 z75ik{Kl&WQTgf3P@8N#_$=4hm<{2vCLZ;{M;>^FK5NDye^fKMubYES~*JK@dTBuR< z`E+R=YY6LA(px=GkvjRs^~Q9Pt4Yk9fy8Rtud+eZ*jfNXW_XzHp7n$%Wrag={_Aeb;sv;Nx7V%N=La_E@w2iz+>0{|vb1;iWUf`0Ed1i)hK zfC$tJ?hA1mJJlfM{y`YussRJS!!5K1+f3k7%l>+VOugUcYUz4Eam^;8Fno6Ry^$p} zkc{Px1TRUP3GjB#QopLVjs)$`5r|+Wdw1tVsN?BQs7RTF}vJatb4?jKqoxy>@=S9wJ;_PES zt>nR8o<>N!sC9Or3YWV`(9w~|k3p!O=)t%iTW`5YYjadnZ1x>n!Gb7*xPy7PgtN^+ z<|x~aM8?(1)9f0N!1zqT39a_W!i6m^iwy)_7|quD_r`mVQ~ZKz4!Go}^?{?{Mr}EK zXb9py0rrY~PG2`fUjiy|>3w=Y`py!qnN2|>+V5X&1f}T!5marMRA5#AwxnV}5UxJ& zktB(|1o-pMOMvii@TV+MBhVU3j1~si=BSOQHod5gA;#^Dtmin7#XpJMgG0T$xBN4r zPwdHK4ng$%1YMKAZ&QCT`WOAAtd{PDnBYIS!#%qCprHvhHuK8!uD-crDTyfL_Zd!Y z9o-hu-Q1wi8eOLKJU82r_tCQGBobp@X^>-xC|sc zm^=cUothtl;Iue=9}p-E{a(?F*CEyDy_z(_HEKjf4e zJM(PCyD;E^9CP_=@7s2SWaD#gd`N`I7@yTl&qmHL(1f0gl{4~7ZUeqjWX0Lk^-*C9 zV}qadBL&(A=-6cjDzwvEbGDDPh&hNSAQ*vdR}eF^Ra^A{qZ}iUI{Xa7BXlS@S=bm| z1pw-TjM1bHoY>@zxBDQ|h^YYiyo>VS7YfY3FDQne67tAzT=t37Ryf=%oOf3g{zZgdnrydWFI-vONU;M4x;yR z9Sk!Wl^U|{T9zp5HECu*-=+6Y3Zi#I`R?ffpO> zZck&f@bg}T2pAoEF}K7RhsQ_70(f`fcVVnPIm&ELd^?qSNcPTidZ$M{A~RYwxS{mM zVmagk>nQ596Rb*aF`S?#6x_!=y;YRWjQR-jnm-Dn(D*i<>|YK&XFFU;T(v{ zbN+0X>)Ju6b!*>&O*x|s;)N|x%`Z5=X8Gz^uoJWUe1jcC?+Oz%iBog?MAtrr27Olk zw@I-!;DCZ09DW~$#}n{k9qgP|mn#s_km%g_(ny^rVQ#diI(utH&wEHq8e;CM&4>&6 zHC~K_m?xl3W*Hy4BNbweMNO^`ieTFL(hl!@TzA7FUFn67;`&>!IndDdG{RW*EqPkp z?KckUtA3xRSh`p$(6O1o-WurTQ2Rk;A*I_kUzB5X$XNYGD%^e7%`F?W$UmhE;tRvsf;c&+}>q}?O_Rs%09TSd0iy|>6g3w^!)qrTGi z^fEHl!fVGxQHQVfPC!ktoGodt*u~t4?2Jum2|QbFiyheWz#a5BZ-%-bKnL`!4T`i& z8*HD>Iu>wzcPii|9K#(v+gMh~g)VG&Z_6g6w8UbpfSlqy2xrf;(>{1)U#oZjRCa$P zvq@FyL_*iaJV5kFa^$M$%Is2Mz1JTAkvNn%O|N)P3>}gh3b?tOA{gq-I$ZC}I#7P@ zC^c8R;@0){^N0$j+l?RN6pp`SPdW%Vw34c<_hg3On}}|~iYu`WkBeP}-hc_F0K0|W zF})&b7RQOARz3Ccc4m(UE=w}AuEl_C4)o_dlNQcK9Cp5{6tb*!zjT0Jdff89?WYXJ zAt<0hRL|kbmtA6fD2Hpug=l4kFMe`t1e~`Zyrekjn~B&v`7OzNzV(`pQ)Cw{n?ft7 z-$xG-bg!wezUN6*P6ZS+&WHo(P|%_~hI6OKIJ!o7XCzIZS9=xS6#Tmy`9Z^fAa-I97(Bv0Y=6?D% zk3gcl5y-n-8y!%*FOx~{Rs@Iy7drQ9=5+{e$*=Hb2<(!)Br4q9w{3ZyFtuL0h2}<% z)eX@}GQyB2VQA;p#7~dMvmI|&?C+QvaM>=QaShvi@+gkc{uMp_3Unj}U(tNy&aDFm z>gf}_f1G&2N(RJP8-XBgq z+QvTMWTQH-gxVo+UVKv%A#Ev#!KH|yb*4To8H-~$QEWffGJ)Ef&mbe`Cn7Tj9`Sh| zAe?NGKjP-^5(?W5iibM8 z=-Ng<2ua1RXEQj~>7_>H4Vf%HU^l2yb0W?Unv$cGjf7I9-!t(vo9-aVFyYt3`jCQ=y_cL@ruloYmn_B%zV=87QI@Gd@QqizEv z9_cg^8o7rqX&xzm5fytXjO6sT`-TIw&Dqw%k3rX4kj&nhy*G+ zYLDEip7u90NG)2t(R#QpFUB;#Ot0uj9Znc zNITb4$-B+D`oe4v-O91b^lf48MhqOS%MwQ69@SH;5a}xnMOV(GWUN%Fd|>6(lNbFM zHe;1+BtF8uGb6Jh8wwW;0KFUk0@#0_+3RnnTxClSr1aN!@{#6uZLi9X_*-0NhO%qc zsWC9RS(PGkw>vlW6XVM>$W6~F6$KSBJk+N!{T%$Jx176NomI)is`m8<^#4V9Ezr(C z<~(`t%H4&9IGpZaabp}IznA(?lghsuOlJab2fUn`dpAD}c(qOioigMhD;4XMEc>)* zgWOs&qO(+jwXQwgmOQX5hv+fx3qYXO{JqRI1s+JT#b2@|0SJAxx?!Xu0b|@~AECq>Uf4(LcRN8s#XE z@di*zXD1NaPaRvvDzs^kP7L8XCV*XL7PyfA{6%C(UIlxDk#?mrIf$v#4jKC%b!5Bp zV>~lLE}ojy@@rp&UN9t^JZ>(TQuJeWqkonXwWmJVa&-ipcHj=as%6CF3b&fGBBSqE z%k?^ihU5#;4Y&Ig<+I{bvxD>D#K8_>!|(Nmva*u)jlb_77>)*9?Xtl9}ctSF2$Q-PiSba|1vPLprf4H%FxE z@F%Ga!myGUioC}*lE)JJ9ghfhCTpUc0>_SKAp4iN${Ex4AlFaX=vDd(h$2wip-eNA z`W)UuPLGS>x(Sl?o{CRDl2BDmIpR03v{Z27Mj)myFzlKQ-?1d#e3rmVBAJGA9z(M| z8c6z4MOrF9@yXmlohg^r%hz<4w4w!XsnK$w*Vl%YdZJhDv7zh5@0>$>Mzt^G)ykXb zU&`u>&i57us9K3C`}F!cdR4Xgy2{Ticws$#yEArji++sfq$U+Ibd0wsNOK!C+BH!N z+pjxCc`DRV;TKR_S8>&d=g>(C69^x!wqQda69lduuhOE+Z>DGJ=rgMG>8y_*^`7d+ z6v}Se*M)t!*p?v%ncSA)9Ui-<4jO1SvNTZ|7EI99zcb$qrQnPQD{&BMEP^UMq1ON; zWWL=~YGXZ2^6R3pr)`<}(%FXtwV3l!{kKg)l$_|Z1JzNsccoVCT_c@}F6);0$S^)* zQO&08&JG*QNQ;0PxlG8&F#lgCUdhO5VTL59w3L|NnNvY&c!BTROndWwhrqa)x+30; zl6j@t28i}C^>2OoPu_lMvo{#MaT$H1P#=Rxx4FK@jC=yW&?^|c zY`}tRd$|<2L$GE!K%O~oF^ZtEU}oj9{#IaV0g#K+bP%~6o<5^<$pewQeI7>FV#MRl zN>o563oT#181}xfXTKRs^4#G~cuMAiS->;Os8qn64JL>NlU*a%tm0)bas_x;>VyDW z>|K<0i|~QD!<97rE)5UM-30Jg7_FJqFiRiW1!6tvmeKL-0c@q^LGu>t%)(0U)Q=Yf zlOVl;C7_jfzu8U%m))q6& zP!7D7>P1Oz^0V;b>k)ElZRk8WK_+>*0(+xjmIA>nHw0O5Nt48YwV!Jzw)KvjJ)f-} zsGFLwGi8<`F%#JR>r-!KwlX!VK9XD|99@g*RYg!a{7ucJyj@IHY%m^yA5rn))EQxP zn5w}^h;3dxyI&`>CYgG!MSNl@{kD8gv3oIHytPcN=_nXZdV@8cjBj_ai+Gg(Sbpik zn;z+(boVPf#_ZT#k; z%$3RlbEkZhTsvK5mln-kA=!B)v@cF~NtgD%?%JpQj-GtuqLoKvjT)y0)5-f}E3zA= zhNN0C@qQh8KEr{i{`51dljy1=U|rd1cLwvuqUyLLIdzm|s}66U;8&7iPqPhASFDh% znZe!xn3Z^v7sqyomgrW?ACchKr^&T)av80~C$28Ycbb%S=Gp*6J+&yxvs0J9?RECd zyN8rL`6$mPb>YRa>z9hF-2wP)(e+UXY57FtQs+g~$YbbShRM2M=gAzwt-&W#loX45 zI3j#obk0u!OshRbrTbWxKf})M*^r#f3`1zPWn%c_ctIxm&f^o6Ja|;t0Yyc*0FSXN zJ>hu|z=E1c`Ku64ha@~%(rsdLS=Ux$J(Y3U(D=ToQtceUZtY68dDvo-QU~ACbmrU` zDEWJ(1nFdG59J%)tL8+#*pc4+20&xtj;9-jceXOxN7?tqb3<86;6m5_y@hqoLaSGr z5RZ|qE{K)H^(dwRdsI{$H}YWh>{(g&MvQ9QORH#$eO-Rk1kXOk9(su&-lhxZ?-<)3 zNVGj~b7oyU$)OW(F!z}^mkqkUuV3B8e8VTd{NSy!OQFP~MWDuURi+*~-EXC)XRSud zvB?sB?g1W^H7I{etg2HJ+Zb#bw|z33$t8Nv?E|Z|0^MrQH90vPcvzcQrnbQywEy=O{OJDGOslJx{}g8@7*1l|tF>8IqhYoNKNC13WtupE`W zZ!g=?I`0v}Kg`dR(VfOceN(6*5myTpgp&hzB>D5fglg=%PWroBXgf*YNv@@7Q_l#^ zkzDzXkKinIknsFjLc68IW%=ixRU4(Zywq%f;FNth!?snK%ryg7@}qMS(BWwokAaBi zWXIstT3WI@hgSSc4rA`!sb=A=d94!thiJl#n;asL_Z44Yc$yBD zJ;R;Aa4~8bhXo%}YE{1S=SXh6q;Us`IQk|4QZKE=&S3$+<$KuqPX+y0!X^yMe5LQE zuvwSgMxECSj3&&4^n*C|Dk>q!bS}3Z#`K6Vg?qS!;2&Lnbh-9?Ypw-dvluw4FCw|d zz3-7ows(!M3qEyyHPu2`O??XL;LVkb6sG~kxGgq}I=fxJ9I?77QrRqO)r30b(PYY% z!K?H51wwbim{SqnvVUmK_ml3KYww3wbj2>nRj#}aD1Ir9q{PfCVVc+8>aCr%1r3bq z%!2tk@t&1hVdo*FnoFZ{&xDl(_b@ufB!q*(v1h8ap@;ye!YxI-9=fSLEx5vEGMBx| z`NgdTs&Z3BMK^|A!rD!taY@yvwiBlL>qhLY$*pQ*?otngxDQ>k>u@GSb9^)?>c2-I z0L#Kv44i~k$sDxY^j+zuzOR#@^%K7*-O@H03S(eGWKito&(RF*wPT#y#^TSUp=-B$+~tb$6p0 z>pPA0K)L4H0>6eSj&p~`+J~&cIk!1%$r-+-7<>mND`K#4t&B^m0fOOT^`cg%JYr7i zDV~0p(A6C5?)m0yP=-}&`R;!|g77K!IKTB0->ji)cWy#iEZ$<4+4Lb_P(5&>5tb%oY z!=V#cY*}>WP)qW6{8}U(-wJwIgD!rJneJS;MVu_!9=q6}!+EJ0UCO#CgAzH&t+)L5 zeynt_M32tfDT&c@ewW3QwM^*V4R`Z37`#Gp>-M|80JvCQw0^6)zQcnzFO35m!qn4m zR|W#ed=LyAnR*O4dc=!@5!)>tsN0E88`^H^9azzCq!kIn_d~f10i2EN-hX8sXCk$p zfxu-5ON%<(V(P6SoagQfw*}qX$F2n`ojgU%9- zEHs?~+xo1>6WbImd}#nd=tBsP9h3F1OU)lmH16gw+u~SUyR}Mc5|q!c^S~iX5s2km zi0e{dyeV7hg?U$gmNOI_*=No|%}DPV&<`pva0>mwWrBdSiIUb1cOM+lnib-<*2iKc z*Sb#+cQb1Liu^FrC=3Tiq;9py)p1cxd(*h-H$GKa8wc2UJ=TVbPDH!+F2hT4mHQ(X zqGyA$R0LI43QHd+r*`YbI$`mUwhX=G5nyK1ZQqj$I(-iN?oXZ)nbV$l zd^Hv=_@)G$fXpHcI!G(}hfAK`WfpUy4^w%L=qT&GLnn1=G$EGLZ51OJvj*^9k2#&})G5OvxJzA6)X7T58#0td?BpL&H@g?f<53Y78nD+ zeGeemGiu>bs{^KAH-zDjZh-iU1bP&-j?H;QB`vN3B@t%r#vy2MmXVi5Y>@ql(Mlu` z!Hz5jlSy}lb(V49BZ7_{j!=pR%AnbA|*}0Zf&ksqu9}LSrscW?q3k=NGtyR}$ZbBVY^3h^= zz1uTq!>=tz+>DCX+7?4_exg*s1bV3v1H`EI1N3?_>D zz#~;0;=*4B!nL#XVU-_&HpAc(wH!|#wvYnUz#c`VICnKqhbkdI`Ab2&_UrjTPPJTi&jeMHG5@i6r^txwN*v{tV*zQb7- zgrfxomF1?m(vDQpg`FD!y}s)LSL7${k!zLj)+x#FzBgc=dy@4$@u@|NE232q+;*2+ z0{e8hnOQVt)Kf7tXGGO?<;#PImi*@pXv5PjR;|xZdz_o7wX$Un`-@{pDJ1{Npj3!0 zX!|_YYQD-_6n$_Vj6h-wmx`vC3Z|e#u5YAEG|WXW6>?T>DdWP>W5V3?Na=< zdZL8n9o?IKGZr0uf}1#Zvn%{5U|Z_nT93oq$3dg7J1w%iaMWiw$Qn1>HVsyXPyfBY z`1KAAi>1E;L}+f{HQbwJjcSE<&}R>;`L@TtkJzHC5>@rrZ13YZpYX^X*k%yXiT?8ydxb>07s(7g-oe@Pd^=Pp zb@H62HLuxzfck;j(Xc~(V7#smo6u|S3Q`ggHK)JnINdF#Gbl?1&#r*e=UUuGFQ9J( zBJb2zmMRJ_-(puT#7|i1DNWMn6cCh|`lRYyk-M~-MI$`M^kijmomxG0+jjuOpT7bB zXU!b`tS8sfd!Q`f*6_hn(LL;iNn^D_myC+-u>lNCh&}pJxwTqgZZPidXD8XQ?Fs30 z^@((x1}Hi*Iu$D^`%su8yi9#gN_8*syK*r2i5a zYIWG-Ad)UwxfALK1uo6$%DH+@+M>-M@}9%$*yQqTWJwc9K|j>8`wvi^r=_aR?+bg% zD$^n%P~;#-7x&6}o`RFXJ*?p^)XK%-&*IepM-Z*iA(n9dE$dC&89^^Fz zGK7-KJVisDOH0N+7iH?_oToz0pe*C=M%HyXqvr%=7A((rI95B?F4cl^#9p3$33K7i z7>GCd!?Z}739bb6xp-6C)#F2oIeQdZ<9xAzso&K)o^P9ja~l?QkAC?UoVU83`$`1w z-%34e-`Y>JK24KDeY|TWyhI1nk9}9YdoHBGboqiO%E4on%hRU&=zc;GyQXipYfIEP zASHZGrtIkoj9-eh8m6>Y*EeGBDqoQIY3yscf*ve5X&(4O&xU5AE=Hin+JrNRSM40O z2k&kq_ozYZ^eURBsMa36&V1>`?K@8mq6YD6*+$0Cs}DCFQ#xL=B$rb;W#Zv!tEMfd zRc<|W(7B9_xq+|gcykbD_s|KA#*j>Iivn;y-W}m9 zZ8++EYvXkUbH;v!7oz1*7T%RYu=buX59%Fr9*Sx;{9`qFH+lj%RNBL{^gEs`@~D>Z z2+|m?_&hoiR(hyODxN0&wu~a}x$>-3%=)|zdCfyUkmKsjF=A#IYXIZn15~PX_#UYd z?NMW`EDqH04-<@@iyW#xsY7_?=h?6zIscT#0)%?a%nZxtdgoC$0|$=J(jP;zE0)Xw z{(w0hO@3VggLpoMOOoqcuYIbkj`$nd(87S-OU}L>CYqX)O#IH3O5u%0$I=I#jh_rF z`n*84XuUw)j)qu~d9&|%azy3hCCigv5FTQdA2Oy3$;Mq$i&+5_O$!t2OH)r!L32L) z3uAVq&~WT}PLr-P@nYMbCM~|E?*T~LuB(J(y<~`dCU0z4>28Td^%VHJ)k#{(AEgc& z!dRu7D;k%Lc-)P%Frd|&?V-qH4%HG~&26fSkF-$?g%3q&76}?KT%M5~(v=p#20>gU$aHo?0a z=!y0A4l-y(oA&yFA>UGqeG4+EP3e1Nj9C;Ac7msUlMtH-zLt8;0M1_wm|Ft$LQC4h zs^qO<=h)aj(%n>Yo{weeGTh^q@|VP{qvoo6y=RxZZl7(+M{xS)!UQcH@-%~HV+(r( z*hvDE+zdt7U@dSUNfi6;wfCuOiV?T{8FmTql&e?Ths_CP?0i0@s5JWC_YY_+T0C4T z?mjx}HeM%p0S3PE{7nUe#mNF#DwwrDmSs-xIntXEv)1KNB90^QI zzIW;pDp*zmSWGEyWl*XGO87f?0O0XD1;>iGJqLY+*No8E>CkA|zG5`%pCOlXL1Ut0 z?r24@z9BP%b(nt3(a`GW^_$xRy{2suOSVaFxq>WL;$C1tzXeOEv?VVUUAM8QcC9sR zp6bDO^<-6Cy&kdtRSN*+^#R~MjT4V~s1J(r=Z^_wc=c`0@Qvz%%A;Jo6Y?y(rDczi| z+WAPszpGydm8EGb<K@{|@yfGiIjE6So8Zgj1? zKj@(z^p+O*~WHl?H!M6cD|DX^p#w#RqBU%xN+Dmh3_?PNT$oJ@zX${S5g3QsnRMj44j1K^|fO7PU~ zg!8>1*)qFhF5Q#bplU_<5p0B_#qB(5{1=P~@+H zpqH#E4t*?5NQ!&!W^X2qUZ`vi2O1de5iJ}~2SIjY!J;Ma4z=W&!3Gxre`^&uW*Kf% zeWF5WCFLt!JVB2UywweTu|sAM7#5!-gIMnnW68Ds$V(4Z|E*ICli*Q5HW zRJ?oUF{k|tNL`}F7KFVSM%U1iok#p%Y=h2yR5jO1@v9cP2{GxTBp?M3VRp?J(d1Ln5l<5s< zR8>h$RF%YC4JZXpu8zc`yA7ij2vno|ZXdU)K%(99832qI28<`yh&|JAs_ustcKz4}_=X^4_piK5h5@dF9oAV}242nXF%pFt`>Sc!#~YD}HwTPYpR zc(bfNWx1g$wbDNb&>2%m%0f6G=6Mv9nA(;zm}DX)ITn^7Xa3p23j*ea`JH_CuY)7s zeT6nMZ@}}7&+GNs7S3o@n3e~Wl)`~{S>8&mW3iyM8iTVtkoG(Y&Qg2+vV}`=<)-}p zHXt1n0Zz2Xv_4%tdQARIj#-DU{n{w?jE1nHb6@uix<^X%I!2Pq)0V%l_ z!v_msgdz!w;zgzvrWL?T=mV28j|PBfj^Du^kaW~{0;QRWK2S?oq;G!*S%fjaT*Q6(y3Y>8KJoX^*BsAD&N!3uJK4ydB>C*$eZKc7*f$zI ze;xRCi(mcl9$Xm2nD|ZO=DQF1q0-QR29{R&njy&gw|7_P0~dCx@7Uln=@=IfU_LlL z-SXQ{17F+Q23$CB=f+Pji}>?D0L7Dp;%z5?^$6c?6a-15h-gs!@POa`_un59AOW2P zorF!q_xkZSG1}n5yr=(6;Q#t#r5AvOB~G2*vEj48ruge6f=%%^77m-@uN@TZ6@TZt zVXye>Z3PGDUk5cfK>wHw{AfjRuK26W6Zj%HSN!$1f^)^+Z7aBJ`SrGf%a)(Y@b60r zxPt!8wt_3@?@i?=D}uqCpBCi1wSvK%Uss*rSV(%=u*;hryg*I~-{*7|i+Iwt~T&UvDcI z%=vZI=>>y1zu8tWnDZS#@w0P=!JJ=jD;UiAb=3)jIlrqqVKC=sKl7ang29|$Zz~wg z`Q5gH!JJ=jD;Ugy!JHqfC%D`4UC{Yyrv>>A7M6wsG#sFRFb}wb{0U99Utd!Zl2PVHK|L;Jgg74oXmx+UJMh^N1HDgWH47d*xC4vy~~@eiBu zpRes*=tUvpaeDJcw=DrrG0mv>8^itbU(TDh`mEjlW5e6(m3a4x1pSy{kXXrC@|~0` z)O$C)EyjzY)auBF(^mc9mCe!}-SD;^;3<04e^x>z`m=Z7mGyIJkXqLtUiTV!3e3}= zPfQ{DGuZHmmIMfN{I4;*?c3kBeboYhjqryJvWpe=ez5n0!|qR;;(wF(gFW6)FBkTB zu*ZWv-cOqX_IM;V1=TLN&>*V4Sf$|#mqgJHSGXjw0yxx?@G3C0LIR|MF+CE%B8=&g zaI`R{N0hpe!C*3p-9rh3$;7P`xQju&dp427T@2y|0Ng$!-aTaAaQlq7AcWgz#JlHz zQTq%Akbeppa8(OewJ?DE)24s{WD=VK29QZWJurYws#v9h0c03JE`hmuKNnqaaRC<> zFe#KM*@AIAq9p;I1IF=)odt~J{TxyNf(7GvB$6#S)DrI=7{?>gf`w^OBz6x>iy{Sp zz*Q{?Q-J|w5~c#vqDWw6FfED%RtD3eNW^5A7DZeT!n7z7y9cI4k;w94IE8rkz;FtQ z)J+;r+lIkp;st`e-}e^sPZbM;$s__L3?>ur z9vDm}QMkfjGKt*-gUKWi!v9eespAe4Pbh)PnYaFW%bjIpF1gRpQBpP5=jV(8dRBHD zE1LBJ39{b*pcy6&B*=z0Rx~Rq0^(ix|DYMh*DGEB9~8}80Z#+>A2h>sO1xwKgQD3I zNVAvzgJxJh5K{XOie{5Qf^70XXolH=r?A{u(X11^vd;e?RyPcuqHAMCvt01Xa{q%^ zT|Ib;{EZdOZUXVHoBu(q4mLcZN@f!|YLje zJf$YpY5acjI7U}mTHW*Xw(oyO+=l~aHo>1qa*5#eBY|3jZ35d1aSVli1KZ30Uwi3I z@}L0j>Nxi_9xs`f^Mab>zWn0Do>Q)o%P6*JfAxyQ`Tm#RsI#-O9uW(PrzQR6zWteZ zkeBD*tQ=;1o5;_3r}BHcpY`6sMHCdE5AoLHm|k)7_#hQ>NSc+ccR!UtO5BE@est3& znGbmqA;jhNkH0abq@-lfyzsjxhZaRT*vl(sRGV3eltcgaOyCCra&jNvq?a4U3Plhr z?D_mSNIvm*AIJcnqx^%$hO5rO%9TOB=0=|L$G847F7@ zT;_}5wI$j*^M1GTB){rADk|9gh;3FKHb0Uv3N}AtR{(w!1A9M`>jHZ}l1T#`d`Vi1 zmoyxFN#zONaPCJOp`kn)&izQHsc`N`Y8P!Hhf5EV)c{<2klaOZ@wgL=0lPCgU;DzKa0>Dczk6;Vb zlrh{ag;ranIUYqiC;n`0B~QHcSn0)c?Kf(sl&FC&1X^PaK{^Efi;W%UoF1B5UoUsa z2Hi8#4)7ZSa1-?HN;l0QNxa@4zVp7#l#~xOa|Ac~z*FEmQhW;h;crQ7D&9Y+sP?5= znr!^_C@Hs=acy+hOM7;nUP!-_{_eY4J1g>yNAWJZ`LL8Fee2+LFQ&Rn#?~y8}zwI?R$0If*9P@B~`*J_eeLsWK{ruK?-?iSg-u~*uab4f*``yE5@BP{P^3~Q<-cGxhmW+&S zyUJ@u9N3o-8Xa_+?X(k}z+ z^ZD*(4;;@=*KzhEEo;Zkp9Xae~nYekl}EoF7wwN4sJnh-SX>u z!k5vv%XgDp)1Mc6N=AO??;e1ffdO-Q+uyBz3%L+^3IE@J3x#6XP4TP!+F0A|ZK$fh z*;n}9WjYGezhAv2~Ays*ADzPv;VpSe+3!8(d=I) z<9BHC7f6Lv!S6WpFP!l^&iu<{{7xGDTQ28!(%>&I`#UuG%VhixP5u>_|NkTd^ipmc z;4Ezsa!I_0Ly6dVX%g9VOdahd*MVU1Zi($&n7)s+A2If3Ydz6_VUd6H#D5A^%iY^# z-VrX__A30F3HnO`{{(sdX}5*8`KOf?F`*k(aMF_n@j({~ACtJgSZsMhs8N?kbekzT zDrMIbT%7e0)<17b;sdUVi2>8-(r_-|&zq9?fN3Qsr%vH<_}e_QrOcKsD8B{uIUf=W z{c|bjgwVHtFY+&+{Ga0Rdnf-CmCZl=mPyjWgV^og+Wp%E{j2}}b2ok~&i{qt*mqDa z6GnoT=f<2nrpE4X;-~-VGJAL%lU7pBG9i9n>=9T*p+#W z?tD9~NC{ijeUjJJ4f3yRxX+JU?b^9^kmQ0|N&qetdfk;m6uN@z@a6K`Vm2Lb#M}tO zf|h7!g&yt02BFs#?xdLtI4&;q?Y@r%MFOx@)@RY) zTRF2aW{f^@xC1Ben<-Fy>G*g=+vR-I;)y2;QTyhqZc)Xb@>8wm@bc)&y>?-j`kPx5 zU4qi@dQ02|UNs&6#fixB!6Q-KIIjVF=f=2O%F%MyVFm??ObrF%`dah5J5<@XaUa!E2r03UU1`klW6t+Aaim)Gb%pyVU9^nW;-W_ zZr&)DeqXDaXZ%)UZRu96Dd+XzhWy(9l+R5z%1swTrqHmQf}mFM1BcB%J`wX=T@<@D z-of0>vfruY%meObOm4IY>;kMfgyq1IgHiVHX*zdNHOMYp($Bwc*fwcB<|MZ{)J231 zQw_jTO5)~L_{u08HHy}N`7yh!6pP&%2Bx{(OSF27CerslMjXD;UnxjtQX3+~Pfo*m z^j&?l^tHEiU8hKG3`4Rs08OWbk78l4_6a(|6kfho%>L_*>V$6<4=g&j&QIZE=O?<` z*YAlh+oG75yV%$E9KUH65`4KXLfmR;X27aBQA51zW*sNV&2I^X&0lsi(pLldk)Yg4 z&mNWD5_|Z{iHAaTCjGMHRMxWHm`JvoCC(!|D^u<8rO4jv>3VP9Ct-#|U2A`Bn_N2R zh(AD56EFd^)ac0T!4|=z6%$qEw=Z<-_Px(2w=?UGFRbOzK*Ufw-X)2f$#`y><1YeN#?SS%E_Dkqvxs*>I+W7w*>mGPV?G8_-9PdV;;fV>>t zeji&p6LU}X6iFTa-rmbC$!GYDA|>tW$!T<7U*dlf7rymQ>CS)3;eXl>RHk%Wn8aE>@--~Fl^|r0XV!4wh%(FcpQDNfM{G8W5+?+H=Z0X3h&?;OSjBL*EoJ*}gH?^14smD=K>J!VBWnH+= z!?EASIFXmQ&8eDJJyzk3c04P!JRF~WevX_f<>=#VI)i_KF`8GA@-7(#tvs zhP`OH=F*qMa$nwc{BMyN4ggJsxRJvhW(JkM8~^t~q=Wt&S(IFC;w@F648VSbX@* zM2+SisUu95h0EtIsOKQDUpPknb5-h-ha76{lsnjE!psjI8%>TcGz#B)1m|2bW;oLS zNaXcJuDqumS>|dVhNJ^YUGS4Lj~|wQzN& zw)T*InJ0F+&dxJvmyrIm7`M?^IpCExTqRf*G5fyqtXVcv(u}e`33kv{hARD!Z#eNj zVU>9UE|8EJfE7$PEXq6Yb!+l#c)v91XE#KieZ?l{j{v8k0OD zQW6mL(zYX~qG$iy^mSp13U@wIbcQw%i~^4C1!?WMvnG?mOUIwA^lhg zi1Cb#4nZtxBBjX@*Q&>R_(fXRMq5*xCwq!0>01a)Hf1-~Ru=4>-h-pp$IjzONnWx% zZYHW}uAOS*Sa5rpz(|O`lff<%zJ>^0DmXmRoiDN=O*N)d9>P4g^ff1f#D$pYsL_0F zKVy(z7b^8F4aI6P@u;5$P;)5N4m8c`%L}DfS{y3&HTL^SiYWDd1w?rn@ac&1CT|#x zqZaj_dtO{#UtO~5&a-`s7f*TMNg7OyDu9s7%5d8P+QhKYC>~lt90|Wp;_XF9hoP%mXs69vyn0=S60+;11m;GXd6jOF@1eQbxt}ze-oFbc_h3Ny z`U%8Bo~PUI|A`P*8PML5Y1+KUA}Y{)2b?gy+~Vcd2|qdnKwPbl3J0&Oe``a2niABq zFXI-EEK6E8#);W><%ogRCUlqvn0N0R?I*jD(gV3e#u`mdx$3?g#kKa0JE- zHT-I4(83ua5+Q_J#Dr_~4cQ*oo>*I%8w=HxTl(>}c9-DACzQJ@^C<6~rG9!0TtjoJ z(Oin-=&Pi}2OOTqg!FUx=xm1lC0Hg~w|P-*+x^7c%V$Umi4OqEG52QLRsv#19A(qY zKYwHWQU|M-y)VZII0x5iI{$Jc~_q=sBO&$e4vXYJAWUXaa?Mu=ki`_c{)-yATkS}L=J|2X&7I}3gAgY$ z+>=BMgb*&QPelEV^MzVk9EIqJOP5tr0&D5ddsbj~dd^~VBzYE0OtN#vyK)7DjEV~? zK9g7PcTit$mS1a5GYpWKIW5u2X1nXO_Mv5>{DXzJLotz8>mq_F?JDm&xtsSCI*qKa zOld9jI2%XEdwIGiC62u=5>`6(uy`la;sn>-l`n;l{=vFT6f#(m{Rh{uz=dL$bPId~JJT4tGoU(RW?RB53tG9D{ z<44bG>~Uk4qt5CavVLaM;(|(S@3g=3%g|Cng6-a3kJ-8rf9XlSQo#i*3auy`*u$0O zR4H+QEtopFV76Ymd7+HBmX+t^Xgj@-8U5+}1;g_me5oSKmo9OhMrVZ;FSllB4n;X= zKD_**c&DB!JC^X}v-DSiB}rlLr@}?!S%jyd#V>oj=<=@jL{OsF`l#d?)So<<+Px`= zKg3|^74qDhHflp<<_^38m}^sen|iNL@Ve-??w)~XI+~xN1q}=AujGvu#DAJN;chY` zZWQQ?CZ{nO@KD#zlXSgQkQZNeM$0Bhdy1RqCw_HM(qaqi2R$~a(F>^km1Z`@gP+5L zN@3Y~;lXI02?6l{n(xQT(sv3>rt)W|tf$*yuRWw$QC(rh@ragwXKAncu|)5+SRpv8 z^sSdsMyIRZBE~iGr_%#3(@P;n91{X42F0R`g8qk&U>tI#JJ}>3#zoB6Y~ZEED#@!% zGr@8XPGCjldI^b=33S2*XzWTiUbAdRkXbg`%C>^xp0vFYGD{GkZL~1&Mq0 z&fh!#P4tGb{)|6MEE7}m84DD;GG*rU0y{gK;e|`ey(_A^vO|U!1geb|3fmK$OJ}3` z^8|-geKAinJO%_t=DY2*kbO7M$Z<~SeQmUlsdfrGNf)KPW<+5ordu6gzig ze!SB*TEBIAQ8xFy3Hb^Kahk)yiz=bLa;hJoqOfcf);|r+vD!z~Tx&F+^>r%s`0j4K z)jIsD2I9G!a@&m}6IL~%3+{yHQVs(R-b=SkI^ z{5P^E#cln)IE38h5eq!HU_iQyWp1+8VVWmE!!gD)0`^}40 zt@R&TStxx7PM_qX2Rl&&4dBy#2 zi`VBev_!vjm3a}ldMBtK7Ys&RliJ4a<2wOCn7Q5|6NCG^nOwPbGmX90=FC%vXY12{ zTr^nl^_^6`L)9UEUeHUt501gyG-L@7Ebt{o6bza8YILAkKgD~mYWH*8E`Rhl9}%??F@7M`HsrrLX&dd!`-tRCK<9g zJI*ti{xIcOx!6{A0>1;RHxQY}lg^bKFGiufD$%c}=+5==O2z%{ojv#IIeG`D#!hl9 zYp3S1N{Z-?5GS3>YCYo_ckeWPTL8{?x+uVwqh5C5Ykx-80%BPUhhIEuYVca0&6?_x zX1JPA*6`7CrgWhsqt#sW6)`Aw^`Pv}ati(`)8~)D)s8hk-g7j|R#G+pSz_$K59bZC~V6-l7q4`|_v> zVs@kD;D$|A1N{WhJeukQl4)r1#;EVm%|0tvAJCpz%^s=2P(9k+uTn6-%*^CSFTZN9 z4?yo$LzsPfj^aMkv-0yHB0`z8a=OYxt*k*_jAZu2wFL_U=1SBp^}``s_daVo?((zG zChIWIVGh?Hfi}SoX;12llt*%>k3U9ESGr8s-_WV`yzN$cMT}CKetgj;)8}7bn#9;i%;b zMiL{lKFz*ga`iGLmp01pb-VU(x&Qp)_R5!YPVI)F*NZ0diq!<@dtS@1Q3*G` z)SpkdC*pA+-KeB+(f+~I_Xw}0P%o9tIm~lGqvB)OA!)n{xXdZK2RDh=yK?wH2zcM} zoPK0%#xz~c=6osD0dW@ND<5xbTk)@zC?0-SEx$f}jvD2I@wM|>=^k0Z6Fv2`Pk!a{ zzT3~zeY&#a;WcHyy{)73Uh6|%F_VR3uLb#@A1gYA692Fi_$4l<68n9{Md?XZkd|Ed z+}p<2@0X@r8{D(T>28#6c+vkp!wI^M_iuRVMGJi)ZWA z>|84LWzqD%ue5S!>nL=(RyY*n-UP9KiOpHj(N~U~rP_AtZ67MVjKTrD6s4|lT|`f^ z20h9wTznwEdL?q@eP|m;YP#`kM7!CVpY2{LS{c4e#sOPUnJ;AQoSYs9*m->4*Eza8 z?@dLE6Z5EfjemWcy=b4;Q{LS>pQl?bwX7YH$>llwVG9{zF|xf* zzAuT-vj6rzO+I1EmNP?u?Bo-U)*t(>%_7P}T%RJ!NxJkkswmlUQdEN)SB<=7tq>|fI*27*3`xCa-xC8DsN8Q zz>2=xvxlD3&&A3&xGVE!;Zw~06XDvHWnJ#oW=<$o*ub(^^Gy;BBGKvrOkDRo zpY1lt|9Vp`Wc!Qw%rL{oDlg_N*2+9O!%txhoz&|qWyGR!VSq|k&*M(GVujD`{XUf> zzh?E#RLLve(6xQP!)MV4uLIJ^8SgT_Q)+$o=8?^zgaomZiX#hhNTLdfUjN-Mmvc}; zhaC<4H2Dfnb>Uio?{t{YL~^C#<>q-v+D=EQq?^$w&y)O4R{CF?wgGH=4IXg(b}wg6&LoSflm8lYCPeh*?y}j=iL+j z+xVmTgEt)XsZzXIxpt@;z<4_^6Cd6E|)o8J5C zfq!m0@x96!3w6GHNt#Q?@^`K8*e4-q==ep+TthFA2nD{4 zPaPODCc5o<(j4yAkB?iKDwAJmT6CUzT{Ky<_WJ3aK-}fE<+*fCzwxcXW+$zj0_p$b z@c-BY%M*ZPH5MD4!pU&Uj6S|CsytQFqi58^s?9tOuy|PT&Oe%BVhVy(d#%Pj_LchT zl0vuG0y!S0SU}P#I^nGOxj*HOFjSh|G!RIk8)~h=Lx3aFon4wEE4s%>1j}dZK0Oo) z(461>YZ!FwRtk3u*@Mcr#5(va(nSl;LM$6% zE;^#h_Gp(-O^Hlil#kbnltDlKbBA0)f#Oe$P5z5b5GDvYW`!KvMeNE)9@hRKrOAwp zu0-{Z3l|`mNpODo&^XgXDNo+ThLK^;$y{mj_7;jPGVimo$qNu%eAHc97-@b>jPR90 z>TxzVmvWjl)gVQaX8GuTQ{E43Z>Fho@3#nH6`XbB zd)3$4qNmt6?JGt-->dvmUDTePkX_$M?ERD`cNBp~WO@2$ zd4wNDo>w_sUg^uEQ*5H-rA~GVqmVX}A)$jwdmkf*b=xcF;c|m1YXM0ZsD%nooU=c1 zz#ctsDZlh1NJl-69+H0J?5z1E({8|!hTWLQaLG*2r2h4{6$mq?!AT6B+|9-%1b+)AWKNvU+!@gEv9 z)mY9uDi_p@dX6wSo^PGoOcceSx!C)vOU?4>+n63&#lp3YcsZVyZh_35i!tt#Dk9hs zHKY{VB`v;!7;Clf)d5;svUBI$#xtwWsvp*6I?WK&ee~+*k0lN7@6lza(X?LW@QJ$% z#`ljj1Ax=F?`T{lAGhMa1W?}}=JVm4JR`D)I#DxPKM$*bx>!lOc8c#y*~iCcF7@ll z5gJc^cu=^8eY`Na1AP(nHa|Z*p0+~Rvts(84S68r%f(iRC73g))Am4FQn~f~8WyGD zmQ6AhHM>n#?8QZsWWMZb%C>Jrz*1G+P(q<%K-?A*zDJ1(NN?u_wQ zkt2H*-IgFF_)Ir)Yi!lI%x=dlKPHm^oki-Ts#DJ5(= zo;X{#R?m#SF5I~}K`o93+=|$@lkMhEGE{>acUR4i2mep$ zE^@T)z^Ow^L7GzhbO(J{x&oKt(%q{LEna*V&3ceQVH=X!%DcpulUh>7h+;4}RQYoF z$ETof>D*Rl(JT7|TIt-2oS(U(h5hGG{lpN`*;Ng?Pqv)w7O*lkN_kdFrY&1Co7Qnu>>t6}NZ-ELgFmx8 z*}?NIExW#koaTDj+Pok`oY-kJ&#Gzv!d)g!zB_*Ew7t5*s>mP3r6i=9`z|zynoM)-*pR0_V^iWf#Hm9BZvPwo4>o`19KaV zpE!CC^a|Ed8QY_$yt=ZJ$TO$dS&DVnI+v>XpN{{J2TRrl?{`mIlM8dZJaDHEP3}c; z4)+*mW{kF_>47I`Z+g$QG2^7;4udbV8|0)T7e%(y@?Fwd+{e@oo<+dJW=_%@#i^sv zyAZhjG9=(ws2CKDIfdK}!goBh+po8s^XLgPT_4}tk9pb}KQS#Vwi!ue-ovI=zH(x! zz7xW#wP1Z!>77=FiZi<>Bu7l{1s?wa2+UsPb^W4Swn~PdR%9Ia;%yWmP+kwU$O@YYN5K(EOBWs zh|&x}YoZE!!Aabd>%xbZ<4&yI!0xW983!?XH9wmto*cUVEbnNHvX$@j?kys0lp)WI zF4PTmc*pCineBNynv#06+6}eCW1$GIvC!*o_aXc=?ONKwTIFw-NTtT!BFeuo+YbDZ zQAM=wwV?!$jJ&0L81H*@tcgjno>JXSm%$cWK@yrxm!-Wv>iE%x;$#t?p`s(7I9QaQ zoIvgP93v~O6kD|Sn6{;jx~d%%MMr(x-_I%c+ZpBErRJphe(LmrGV9iqBW)jd*w1|8 zwJ?nvue~ny^95^3a-{X>x^*u=>!f1AZN`w9Y7&7^Q8NIq>WS~c?-SqDtKP=Q(h^=* zpSpGw{B48=x~X%jBa_P@x`z!LpfY@Mpycv9Z$Y+Y>_Sgyo*lmTYO81_M`}g2KbyfV zP4%nFWD4p{&UuOkyF`qlJQpiC5{srvrE8^-+O%-1-q#T7QUn`LKacP#GyC*3D|iv~ zr?%(Bi$Uq2=5h$V5{uE^p~XMAk6Sq7pHqju`mnS6&ZS$O=H?oY@QOC_O~JO*g-=Uf zrYVpp!C+3(IeO+LJ=b&e2hGmqW(Xn#&Xhb+h?CZ5wW{L+RiR!ZmY$!8RD=2R z==n5U*@Hq6cNyJioMU+=udpn83rf`2V`U;gDHbw$op*2MyvlYOczah5rCcdNH+Swu z9pkw(`t?#{X-y}cR+ipTaR^>pxn{i5C2ZS%M)%4W-0q4X9*sj%XQl0`fdIj2nOIOc zwT|RUrk`t;uwokdC0I8tZpHBB(Z z2CYsP4f{_V0_)JoWvk2opD^qXk02HUkfq8!(M|C-<_@jR*871fvwF0Y`1ak0;}!|ySd@4gWI39{871s`qs%eGzU4T}%LM*B5g&;*Q{QxM zRkfFeW&IBYRO#CXhL&cBk~*_3LUXZ@dP55C!qUCL6s(u*72Lkj8FvI9awBvVtE>ZG z#c?Snh*wJ!aQfIy+0F3=8Ez1%H1BWF6QNr8+dmDU4L@vr|WGLTzd4 zU^ybc1Ya!=P9?OuP-w9Y1;SB*+S#~cwwClnju?>0zK+o;oOo+2b^706z@HFS1F2YB zag_Kop|u0ZML!kTcIQ<{SaIwj?^0c1XDTalo|1c(9@i!lKan|bvgEq4_RmY8aD^+A zMRXkWYkn;R;&KKt!sw?r>wYQSiAc$k5si^1H4%+=BX?Uj{7SELB~K@D4NsJnoomrC zuj2q5zYGy)xH-K~`o0u?&^cA(#rLdDkmXuuen)+8r-5UO2@+{u&+h$sU-Ae0)Nmiv zL9$Epos4p0Y+Jt{BO%Qph%~#!xSa%PrW*$mqQRNi(8=PWBKA%yf7$ttXZe!u9{FGj zD|UTs3@^R+1*uKGHY}2IaMduJ9T4$4E(^HP-1Z^bd*Ahf1BMX%pQpT8`D2<&e(@cl z9*P>;(V>@asx0@jmUY;6Z{43#;4PUcTWujX8$Rwj5bZhrfi)@edLh4o1_$oIL@>3K zOSN=w;QR3(L0Z?HMj@A#?WWI`7D&&CVeCAjT8k7sUPI=usbaztI6KDCbJ;(;4YRLm zAes8qYg@PNZXC_tJnThd&?sx^*bECrm9Ny?JYGmz;VS>ygB@&LDQcoSkori{(FU2LA8t|24%S_BxU_Bm zvBM>!=QC784R7f^WEo8`AMePt>UeX-R`W+_3_d#6RPC|X;sdYK?S{^V5l75b^;!dK z@$r#WeMDy<4CO-{CV@|@T1K@EPA$2opH`Ys%W(s^o zH||lHl&xH>D}h1^ZAS81bAPzk4=#>RJl?ZBL}h_yIJs^wy6(UrNF}>IH7#^@TG(oKU~J@Ukv& zmcLX4$o|%a4;9u#*l}12w_6(KkE%l~3W2 z6tgDc!tz)Y%-Dxjmq1U#*T2iJbJ3*@tI9qY>oU0hmV3n($)~){e{8GN-+IP3lVi{J zNyr8#ve;V_*DY=kqE!a9fkOn^hAHO_vzM*RWID>5e|V) zQ%X;+kdKFdB8IMHCOAVKNsBiF4OObAF6`VoluIIEnd`htjY>kn?o%a_Jzm5$J*oBf zl1V44(Uw;%k|N~B>>vh?-M0DWox2Z}zS*kz*q2Bh=K@j~X)F09T%9A(^}Cw!@>#bZ zfyz7PEWwM9R5EGF5L^N1J?M2mxw-X3(Zb?scOuD-xO!BGu%Z4J)gMx0x}lN#f~o`i z*C0D)_&QZrz(-{e0aa`B`DGeIv0k2Tb=Qo75;Y=qr}K6)UcQ0HE+ll@mC4$EEy&a@ z3YV=oJ;sp{$fcZ!Xl89OgTaygP({}pUAOcg95519Ss#uMNPNKV#uxm$K*aHgi2JE@ zzhH!axX-Rww8w2MeFQ05?-D$#f>zl56~eL+uwe=hC$>LS>tGJ;cz+p43;dG_o9Cd& zaNd}V5EY+0_vkmCD}?fT>C)iIx}xv?(mP7*1|bpz%?-{a@ZuygU7Y4OLSQBkcHc3H4i0?|Z+84%x_I18>%R`7u@q@N za~r-ZkWoC-=xzrNT3ZlJp^$lh0lZxDQ5?5gh?yQWurzxJOb;@%JQ`wTt)}}wXjo+; zCCdS?munZgcKLi-Y})ybCHE5NPc9?c&0P$`uobRX7E3X=L7Z%$vFRxkH@LweFcn#H z_Z=Kn5aj*Z#+jG#{um=N1uHk=E#U8Xv= zbGVmEI#{n?#m=|RON-o&Ydgwtu3H&l#{bvDBc;@OTCph`9g7c_l;J;nnL2=^j+Blg zByOYggpaxWysQuGh^~A)V?SB8x>w@3CNgix71!#Yxkj(zzB!zMDiAgLmEhd)=K8tT=dG*Kx4mdUs>%A`rxtK2uMSWmjA2y@>VD^V65_Ol+>05;>K%k%$8ACF z*njLvdU=2isxBv3Ayy9C1R%KCo04vCAHRe%D^UJBzLT*Uxm@X#W%u~`jx-k#n1+A` z)3l7r01Y0)0ctTIz}@Bes@)4048}DY{x@K=sgCH#;PD# z#%u0^SFrHgA5Ymwmc`pI1*vB57X+FV5QEc{CzH-@ZUYhMMNU0B{mKf7;JO%)Lqm8# zA#L(J9s6<#W9=eJZxm4sd~*T}4b#oB>yA>>l}z+b{Rm*RbMNkM0@j<;@Wl(gl_Bh2 zEBRiLn#Tv8>9$td4FE#aPc@YzaW=TCtgwsYTo~fUF3P&kzl4N|nbn%$5>Mu1R7VB<`Gg{gA zjzY9k29m0XQFWWRe=GmM&yp#uNII}4N)}3{G=TozAbah{$H0-STH)HY*G+fmb_t#a z7*ay^O!Zw9*ow_8lLjw@10(EjcQBzFZOBEfz--{fTxWh1ZsX*8`8pP4QoqE_DOzo{21zKwpf*TTJ*TyYIpa-eve7YN{hpYfYV_Be_ zauRH{rO?mS*@h%wcqE>tk_X;&AuT7;_#yFap8`Xmn~{|b4gf_WQY{`qN{4Q>2E9+~ zj}JxJT=TAlZR?9+ z@j>H09$^q6Ngf|If@}7Sy^;WpYAME~jR&+$LfEL;oTR07uXR1Q@n65T*bar~xm#?#RJPqj{2# z3TfeQ;3Mo^N_zZ2*2TFQ3{VI?6Uk6pfnHeQOR*#Nc2*2~82WQTZv~IO58Ppv{EF(O z=%3N?e}2GK@HMU+?yXHn&NOZ-C6Zk5B(C5sm=^DSTCHgPEQeh-Q=oGg{QT(%JvIBW zOEZ(CkRvq%A1k!Uf30Lh3{iABoI*CuD$-X29S}*-+GftQB1`!t^+HAq=pbTH#GEI; zGAnHR)dL425B!fY0OH(lz+FLNHBr##^4EeJdfiA}@Vc$(fw6KZF*QREOHdj`Pfh9( z(ua`*sV&Ed`g_P(sN>kAq1}bu^`J)B;RDf*O)5xKs3+kKpzqeJicHz};Dmya0?S}S zY%FItjzn%7*;8$4@ORcjdX_XGht{f>A>!!VMIqwyj;;v`BsyiDYgsm1TDR_G&J*w{ zzY75Fp+$Rg8e^F`(F%XG?IIw5er3*y%U8TJG=XMrXwhO64K4Y z2LI7RE12y(X5WVq@ITR44kCZnOw^|j2b9WOscI6z4}$1$UC_g)?cSjH2-%oyaz<)~ z3`VX~F9B`~*PcEMts~6cdllj0`+d@&&*_a#XO<1!-H3_D_cu*P{$ba1cEWleR&3lh zSrPHA{6>#hMe4n&At(3*nDL>I#12BJ)10QiJSbxXn2fnv3H@?|YKzA%oB z=3Prt_dqi&Y8~%m$ccLc~-tx8u${{e>0#M^Hj5h{kC5 z)$2HsG$#MR8^1U5&tus1!|#p!wFLc^$iGa;CJ_F&YX5S3wvhj}k(;NH{$Y&%Z=8*# zRg2$Oq@%j}Y#&mr%Jhh`_ys0m;48Vkhguc?VK0eV)SrF~B?Z)+;jbIy*k7-fKpt|K z56gNDjk`&E33%WGHetFXmVjetK$;BczqSg|Fz`jfQfk`byGVn{f82PKfdQRNQOEt) z;t=fr-$E8=176yE?99aGg^7Q$^-k2(3@y09oxiqofCVK0a%9aV&u@Cae^~)e3XsGo z#sLA-n=kGkUxue9Q|NR%Mv8gpY03`C*TiO5SS-~zr}GADg0B}algg! zm)rB(I{wO({79h!`V4F3orgy~_7SetxSE zuO9z}DiO9rWM2BEK_BL};Tov-AHVrhty<3EDapxMu+a(35K^1xTQkF|q*yJjtW*%T zXr1o`BUkfLJf67MTKgBbT=v1Jaabi?MVc8f`^b?V`@%kNx~44iT4ZEdFpow=OO@UZ z5_ueCBM6kpnj34oAd`gKfkGG|{iOLv@O|4Yv*#8j*4y2XeI_M7$giG2Xuo*!SKs&} zw0}y5lZPD1uP=sy8Z`b_vB@8Y`UFM2%J|DwZQPST7lW(|*H4YGn@gsv_E`Z<5gE2Q z0yRj4Hmi>CO!h(_UWBasEvfI1k2V1{p|B+x=w3-cVHp_G3_rrXolQy%KUH7#{N#fs z=%L%#b)X_P0TsFlDMGLK?H1)k2En9u19O)U-t7rhPAixb);S##65dVsAvi*bT?|H%jvs}Qo`kmzSYbal>Ab;+n6EUE z!08wYKqkKJg@F{M_-Mbwub&OiT57o`2sCVuT)=zDBeMn_dZ7QS*A5}FOmcW#xN-}o zYvwNSRg)^L;dVk|?O7a?IF1ZALsy9*Lc7E>tVxlRFB-Z%Jf7U615Wjm!TRV(VAB^e zce4c-49WwSbw;OjZNkoi;=>Y7_&P%Dl3o2-fv^K&-*Rq!X^NKLS~>(3?d_+%1_X>% zvaiW*JNN<5-i}>281vgbzCNPm6~R#owc94(r36h>JFG8w5hY82 zF26Jt?1#);{dT{DJ`|ZsmHN8y(A*Th?51h}RynL6+C)E1dCk^ICION02!3kx6pB1$ zifPTGSwk|{-Br24udlpTq%11NbugUy`QtY3WuY42MsExpL`LPVX|M@ox6Nh#H$(Ct z$tXfGB+MH2xs!v``KzMIDUc3%oo%p7Fvq--VT>D~O(C{b~xT9cEV<2?cBO-OVs9rO@rwEGbpO zdBd?Xzl=W@M20KnXSkDx%)+vMPl2#NHn^rh8Qm*xeQp`3BH4IjXjeNYE3F{tz;I^; z;Uu+jxiIcsoPq%j5f)W<`u)~@nRpW~rd$SIFn1R3BI&}XVz30z6j&&b+2?=zytZG38>FAronzln}U1ls-I+U^8T6-N*{At zWNh2&MJ@>w?WMByv9g)Nn1L8%OhF+Si|*+2mw_3Ha2_-fDwya!&lVx_ouaay7u3ca zOy7Ek*&a|uQJLryldD0UUMjQxGj?jsa zfQ&tzxKGtzyt}Uq8R6olwDtm8m88-yW^#5<)_CbtQJe7G+1{k8| ziR5SYy+zJ;=J^Etv@>CC%1b^PX!wTL$AEK}eOpz~K%1ZOYXRuowf6^u@g5{m$Oj}r zZWQ}UbPG9F5t+LnPLXY^@d>|6Y1?o$nQQR`et4%&N43FFD|ccU2TZ(}doFBSeVcHh zbS79hy1P?lDB9Twu?-eU17!g)FtH9gAn^fyVZCMW*!(ZD539QGV$^(Pbb>3S!)1MG zs9U<{21((^AZ&+G!SmdhI6IniiHjLI%P?-?G`P34@%b9(&vL+s!L4?J9acqJ$x87( ze!B_s;Oq+BJ1y$V#-ZV{hv^1@0k44!9_i6wI}9T}VUmIM29+`I zv0|NqG$|jB`35<8+II6p>bEh*j6RZ;yuh51bcSA<5g3u82LILuu#NcvF{xcu5xS!cm08=xHS?>U6b^I-3`G*wI*bN9nB{ z$S8-^J(-H{5gy-EdlBQpFurV^$fgl~B;mDke$4wa$vbs$*((~xbJug+ z7bXd926pDL$9CQ6N93|_vHwvsjFk{b693^2C`NqY)j}OHB68J}_dWI8R_aracYkRU zl9rW#p_-Zv{M|INd(f6^3uh#xNmlZ(3UTYl<5#@>C6K-k8r1!5d!DY(h!BrpXCv|I zFllPy%_(HKB^|44+=w9B`lxW~_FaAM-3$PWqyjQw*K0MHIqrk57K2k4|p z5@Ft>dG^j6ai>+->SiRaC~5VA_E<^O%elz)%$yVPH85YHCE0+bUv6&emifsZ_j427 zVEE4%8e^w{m7nUYBbfA@v}o)Cqj8J)N)|*z`|{^7(UGTW!k^^6tWq-wo@i~>A8P&n_X0fahco)j0^DlMhm)$hC8o3a0?Y#EGuHZmfDLh2L$S$@*J3* zvMFP!BG=hYS+X5|CD%?e^wHk7MQt~8d~C~8kk1KP#kjt%YZ)3|3(j7lNJHgIp!2pw zt$^ojA8#)@3Vh;-{Lk`hgl2>j>1G#d%=-L6TP@cQ`4C4_5DceW!I0!*5m~^ej(=M` z*wvPO3K=#pUe-;r!uXIEbhKDb2i|!^og;7<_MZR~s-(B?IdV{*_bT79F3I-qS7Fw# z7BV*66W`$i-QL&c$2#?(gHkq>Wi$er74I3W3RJ|Rtj_c)Xr{h3w%W!ELoQ{-O?G*Q ziT4A9di8b+22Ducjn$Fq>{IeEK2^-B>7@rA8L9u@W($6z{TBtV@d3)@%@RTZx4tpA4b@ZlCMbw2 z%pO{7TchUs?$9TK5oy^!R--A1`-u#n5l9N@kAk+G!3iHsHK44SwbwSqGc^MIR~e3V zWdR44FrMAehK)?F(9x1T@33Z@-=q7heMy9U5na)MnZ?6g`HEc&m@3lNJ2)_eZrRq*jIoS z=*Q|8uFW>cmnCWdD%BsYd5RLHP`WE*Qgy$LTc$_{#=sVg6HY$ZkpNwF3rDZq_Mc=q z%A;6zo_<{!-*dB8h|MsBxJ!+<@+b!oUA-8wrd( zc^N25kk)Sy$9h?aHX^nc8^H`qD|qS2(sWG~g0_LItfTH^Z20=^V8m$8eVbSq6237~ zlsGF-3@Y4?C8J_!fSQWRK>f;V11#$roHeMyX&GaH+{dINQkT@+m59Q`PB+$Y=_zItZ>OeAH|2X1u@r}kmRFc93avWQLp@gn7}^J#KsMt=`4k zDfW~>hs;ZAE<*4O((OFf0L1M<4gW@EkN4kUp3CWJT`z)#Ak7)s%U)lUSQ7+Z7rfxX zXw&TaAvtDd3i2}oLkg}gPX~BKHIPlieE1*PTej^L;~NV==6EA7ortBD$`KZg|Il7K zpNr%Pa@JqftwG3}?|$iaoW@=%5`jA=10I_|Tl4^tdIy{f(<=1*e(oI&aQdD~6~uLs zA=bZUAk;Vp9yf@4Yf-#EBiaZ34qmPyjlGm3u(iSt+7pq1)0zz;%{0)`r{Ub=bRo|X z^ZBs0A-qZ?u)n#m@+qU}$?~sn9kOFhZaq}BN66plT2qelSGO%9?W1+e4DarZmZe_g z`L?!zZ;-R?N%n$iDn1)P`#rUxkSLeZC4;rJMQNWshnPv&JxrV{AjXI!krsqD6U*rH z?mH5pA(-3>nUVhCAg<7b21U7fYE zan)0*3x-bT^P-dnUQ!$G*SL+IWIAvc=}nJ}<_zKS;il!3X*BXJs|d5@T;Daehp_Qh zkxo`*RPw0&@q~-i$>aJ`#))zXkSEc8m3ii!XyC7rHVENc1{ zq;)_;n4!6 zPbe38y$i0ClOg+1r44OxQz$tqSYm}F=%+@;h$$Q;cuN89ile8iWL|Imuy3?=ZypKV zfyGv9Vs7_!=(+Di{Bh2KH%M3>53etI)tUbba+|#k$g00zb`o-%v62@cAUoIV32?kqbrV@p#bLAo+YlYw?DhnK{~^_|Kyf1=Z~r ze}20z4jo0dow>E4A`Kb)ASf+_naDHPeWZLVvQxTo108bp%?N6V`$&%TCuM#vhgbb% zU)?X`a`=NFIhc~G$cQ5(n6Ftl$+mR`6g* z=Ftk8m8~EUM_Tc%AktiN%4Gb8yn~Yq-X4@XSinZg1c9)b3ZOCeHYKu1)6+dxWaRJi z7$k!TEjn5WFs1tV2SHTu3;@bRq!%!&d&C*FeSJ7!ov$wHcy_Zx^goh?o8kV(YzV$& z$HpdMkNFbH0oFAO<$wKSs5?@wfWb|PfOehVro(Zo#}ZeEnp-az_l!KHGAwB66cRhb)$}WqjSy|wnd2vdDjQhkU7t<-_sfjKO*sGeMC9})i0#~ zpSyLK0$29OMYPZ2koS^-_vEzeffrKD+L9JYTpMg?y3+VYW(N0^8hOJ60;{;K{H|_x z02_Cc6}n7wCuY|zFH&p%r@_`HgDe!e%-QYuj;grkkAM+_Z4}SB=T~b(o6(|WI!JtVXlm9 zf*13D*n9K1nz!hGm?lwlB8oKNqBKcV8c#%5QAv|#rFoJxXmnI06qiDp3@OcNo{I*z zS@S$f^Q3t^&)OO9z31?Iey`{IdY%SwXPy4g?+H0@9)_c9*A;#n=$UwywlsA19 z{lbf20X!s}Wc-b?69{EIsEgGOJ_%8^ETZ~?3(#}^Q(17zUaEnn2tku$0^s(s-Q+;| z7X(*on@(I|b^4y~8|>!~O>~}*(z@F9yW0)7!uThZ*79K{YlG@7fKE`E)qq*`&Baqf z(Alb0gb0*oB}tIl)|?fQgH1jdyU1wfPJy^DQHQDb&ZB=VWtc543;`;^a^LlNRm~IE zuz7GEZ)n3s$X&zEk?A&Gm$pYiJkp<#g?s?F_VFab65d&C7#>s9fxJ)(+>4^nhu?Ua zVth1Vd^8bhBk+@wa z#t*5W?&GJ0rDWryN$Bb@?++ol_Mp`;6eM1g^MhzcJ&zyfV_?3@wsa#LIXK9&9wS4A zVix(O(WE&EG*N8O?l1ATuqxC!+5E6J&ySFh5xkgyWeMX3TpvX*&ot?&kjlXY0y_$< zbCWSS2uBif5*6|0mis=uAR1XzPLR~%xz*uMi{dZJAuISfv2X~7?){sg0$ZA5PB_ZI zR!}M8Gt8!P>ZcbUh$4ZqGH7I|+_@C8jj%KN;mbo*Q0>yU{oOCZy_Hk(A7dhZPQu^o zQ-WARt7qmC;jQ%}xT)L;;Z)fN8k64!Yz|7$>7g$VlJ1Gtz2$T> zNaGw~`Vc)?#?<0~*9b($AYjX%(F@SRY9v^(;LRw&jdIKLHL@wfCO{~XQH9`#D42$F zeib~o8u+&o43#W)7IEl9py^vSB%Jvo2odC+tw3xmNI-HSKg;{o5GbHp-*qh7FWusZ z1f+MSH>K20SuP308&(7*Lg}saXwxCYxD2=mlq#}Qoq}=%1hBz0P`HRZmnb?=mxKSH zzl*VPhKc{J50R+}Sp#tedEXyONVzm&17a9%yyj9f3OIu@3jYkXdUC35FG07HRoEHP z&Vh{Du+|Q@Dxhup6QnB602h+QL?(l(7|_dB1E*ALPu>WFJEE;#L3JHGKKPUdD#n41 zBWeABVY6I1_jJK32Wr6vIhv>xhLCC$lzfpQwlPMrwyPo_J7>W>#>AtM~Fr_E06hHYtc2QDOMMk z&!Ymn1?8ETJ=f0JJ7zg_2+Q6*nAa;dlQtB+VDGjJ)s14m-JW?fz*`$SWj?VqV2FUP zj6>cmdd419Jedc@W3%oK40fjhc8hEqsyWj=y9J653E>6*)7a~qE*vx?n zuG>UB8@G1Nht~sHo2e{Kv#QnwC=jtzwCe4{v3*!pwRk=?=X*PHkfmgg>LyNYxTM-YoMIE#vpGDi6cx_`TSOUunT zOI1uW5;^|au4D1L6&0A!oh!t0gCfOWFQ#be!Z*<<-p*fRT}q81EdlVDHPQ`?a4k>K z%N3#U=ji!d!Xr0s%)}hN$lT7W(A6$bt3s~hvS$C4oG5PK~e&Zq^U4E{$qdw?aH+EcEWVVbe z8Y0zXrzP>s8z{a^8k;?Dl3XgGUSFs{TD#Zpq^Cap0N3~@7pb*3i=FjeU6a1GcZ=@a zO>gN^lgj%_Q%UiY$Ly7)IfpBKtD2&-Oo8%w{0V;$fCr9T@Jf!kd!9Pt_+DRq&L*K5 z)k$ad3Y#y|>;H{E=uU;$K78@#5s+~L|Hqbo3ouNW-O15l`83Eh>RmdDP|J}0|m z&gB5?Ek>iR$NHrA&L_bO021hJW-^z=K09Q6T&maO{M1$60=lub@H;9RnXX8 z*h4YNp$};m-!j`AJ$Vs7*6@`4A@Wvs-ZAh#R1$k+Y=m`h;bI;F^vb3uaVTIQU5YK_ zQ1fv^f$&XF66-&;^(~YS4BHX8;#b}w;VM&Qw?Wm^wIsVRYp*{x$vLF&Qp!38jNz{+ z*C34oM`2f>xzpTX)|O~|&U=Stb;?Y#gNp(qBd@P(s1qQf(AXkL*9`~N8VYuc00Oz%P$}b%`FQ4`K4;O)gO~yxT-bm~qGihUdfP~ZY{L5st zY@R7oz~dM+oKiqnvPrQRT3{5MykA|>r?@^s?Vh6aD9>$OicM;(UhUeOwsH~k7Z8Hm zS4Ha-!ppoRQ4&9LF+q6Br-%7KsIWz?%t^%<%cWLE=l1kX(?k+5SX!vpdR58{KoShM zc|*SXs3!aPjX9N^`C7zYI&@ByVP}02<7Y&$Cfbjf zU5$kfhnTYNVWy#hM7))A>BlkfCSeH8)xsULoo|2s&^p?3PmC0GRng})ASq~3mKHdi zKQ;Bx-e8Xm?LzkbVLKjTYpsMUT&8kX2_6tx*)M@u71Fi7H|z}M1t{Wxdw6JQOZ5lX z*o^#Ue=-VKoUWa@HH4em=x`krA$ufs zwH0NL02T|v62r=RgU)WQZ{63ki@}=qP&%qpeIOAk zS*i2+&~F&2qVe65(VXKu=-;W{E^wSDoRr`wDCs0R z@Y{BBA2YALkH+aQ9Wu|gSSLeuMezfIYyls*%@yfKE`#kkuKs{t_ZP6#O7FbE_@;ll z`z@pZU)i-?4g18rKj6}_Y)E;|J7vV0M*({*joNA0)hKujys_@B5mcW&LaSyxhK05g zPHo}zfcovyojg&b-lD&mfmc_uEdVUxV{@Q6Fr@Bd61)_WP@O)t0DT@+02>O>-eTFL z@(77$wci~(cKYvjdKnuG5+Byw*8r%EM-}GDTc(^7rab5W>r2s3AOr`PlxamcJ-qb> z)=Pkf?oDz6-PnoYa(>jX(#SqHN_)7^q(KJ=D(7sX1-eqsCm8hH3vrfeequ7%eYWgX^H}m|FmGW4-UWr=NE^w?Axsu0Yr~R=UGo;7kL11V}I7o>L-$ z-Pi#@O)5AEae!6T8B%mYOHkD(eO{Sdq=$g8Ikv`eIS$IW0pmdqfgFG%pWAy8|>FJyX>bM4XZ)St=UY8S||rJ{SYX(aTMuDRYWoe#O%By zu(U@o4sLEMI>6xNuQ2R}vt0mP$PPRTOC}+MEb(b{B)OCi)J9gnqY)2KjE>VY@t%w1IJ;0f( zgG3$QEFqyP#HOqS=sON9X6?1q3gB{1Fx8D)K!Rp|yB@;@hCd_=V3~;k8%YE>oqr=u zS2{pV4eFDYD^R$L6qY$lF?=kN9lMT^fmn;oxUGv5fBQ zT%|6Fd}aqEd{!W}a3nq%3_trqfjUttWVZ_*5XXEs$5N-8O!>l$j8q;yG~$1l-8NHJ z$1*?!ky8dh;z}py=OgLDiNmUgLIYJlXtAv{Js?JR7wOFY zHsv(vcTmtccm5E9w6PoP=nKzh9f$C{?E`y1kSWXYI=+RV_8$3mU1c04pCZXdbIqL> zZXrc9Di+B=FF=c`RUy`HW>8lasieJt1Bggk*}jc%KSsLB=i_!$zdbPjEIgEF#`)~R zX;fb#khJY+0O0CQVbhgrg)zDA`D>^Z0Ntn5FNZ|m2m-`rV+V2oZ-Tp{r=^W~uo%)Q z+TD)l&zg-tF;`km$_`n}J?@f25QO#jM@|e6vLcmwFJZ!NKq#{gCY=!)3cPrxeEA75a|e#7U{kY?f3-?Ogp-+Ox-yPGsFsD!0KC&ovU0$5jHJeu#vj z^G)9rB3MqlhMl0CTxeZ`ZQjFMc24RDV7;;XR$y$K$4_3_UINtgpAAr3+??%M{w`N` z-YHj3IZW{50hfGFT4T^D=m%7-_<%wFU*xpA8?qejyoTY(Hk|QsWGU-#sS)=3)3XP2 zpoEhex-K*9I72aR{rX(A0S$1CZURBhZPcFI*X?G*Ncc2xJNB12Yfop_iv9aw#AcD` zFQxQ7$1hlCE%ghLkfra}f%xF+QMB2~gfN~0ReKI%f>n2ieAr7ux*u=xxBJOQ;dYt6 z%)!~pyZ<-{{M|#<^-avf!zIq`^b6`w2`^%Z9`19tLZem2k~EQn??(n&5!PGrLIbf2 z|99W%j0!EW)0wtJn~%PJ6?XsvrUTSZzyBtY48k zeiy2p&`aDj(FFGi!UyfQr$<2K6mih(w{V(ll z9F?f3Hg8g4D)8$8g4_k99KzqmK`ZyKzd0X)ikib$hlxWGzrM8+oOenL{6Ai0QG9wN z>y%GKIqB^7fbEa}xVN4A3HI#?i3f3HFV0^gCnw*^qvYl1s@lWY@aQ8|TrqxHIW9?o zQG-@BE&s%ud)Hb{k)+*wf(ghiz1O&8Gj~Pkg2f+4uLMtqMedWUn3%LKA9X5Ml(2DK zI868zCRa>~&$5Mxg?xYY5LC0wjRU1w!Vmhktn+BO>YoTewfl!veEZLze^LqPCnKE( zC@KH?iO#4LI9ST~+to5cc<+Nlzc(mk^ERLEuI%@pNA&NJ90m*B!C?Diu?W2ecsOlj zPeK!gzcu+Cu=*RRGk!BM0AzsgIR{?t{;fG7vH^-4n!lZD6|^bKGp&B>H*SC-lfL8r z^%6r7IT9JXVO#2N=LV4g;x7CG6ZmEISIv-6An;{w{*N}prfm$&%rP>LpFWM8A<|ii zb-{hQ+W2X%X;E|#p(|R!vGf&+grk-i-`u`FBQD+}N0dg1G@juWNy;YPluabfIo6@8 zVLI}2cdyE$u8{+{@$qprU5EvzvWb9%-}6+8@HC5PKg}@|1@{ob2wS)H@j4~+dGq6d zfT+E2$$tboJ@R-9A{}R+*CPgsBcx<#5DvA6&>-Nnt&E)zftba%7_Q;xpZ7H1sHLE(Nf~#sAn3|oouvPEpUh*k42?wXcc1#BZF;~#g z78cxPrKK;C>XkX@E zJPRA#C&8i=8Wz-a%*<9~ScV%D!Zy(6OOuU@$Clx7!;@?12r8uDj*;&c!Sot-i$t&F z#^}Z<-Nee%c|k7a>I&-%XjRnt@bx+6Z6FvMVLM628?FoTF!man!~20(+WOTIV|&SW zccw!n&18KvP+o-f_xB$b7JmAvw^vv@gM^^hsquyZ{?&`X)zK5&{H`sbr+@dwdvIT74U73jU&WWdgxv*G z>2dnuA%ZLL)A@^)g%fLa5(yp(tCRSXq5Qm0kd3WcBJpr~bvqLd;8$$uKR)p|>z?j! zTmVG;-|B?^-)B8Z#14P5e*9j5n_*!VK}TX-94NZqok$S28%f-p zmli+24LW9#GL{&wct5tIYl~;mHtM&ei1G*;nO&Oz$5bF7zvl}G;a{_ey-i}3PzOcD zh+w3M4JDyShX9FyV7PPw6_8Q9kS1#0U|Q>Q(5Of=7JgY(QOChy{!Y<0gyVZldRzJ` z;Y$#`EUQJA*VD8cH*Q3n)YHE%sBO9jGI;Hf>6_>8E|j^34I|&gB&1kR@59-UdDVI; zgV?=)KW5kUX!Vpjro$EWb(T#~>Bv374W--ra&eustnz+Xz7IRrk`TcdIoW7U2F)=n4QA{fSJo2`BUApecxjaTZ`ySM-<_ zp;H4Vt>fa7?Z*Hs_rH@b`PVx9GrCShsoeuP<-fhW3BYuw^U_2R8v8%O(`ZP=CKkt9 z6WT>Tzj`G~bXt_U9r*c&gl+-YNSMgz&x5~hMY)0!lZ+D~h$)ZY9Df^UCCcqbE(#G! zxP1H0%1C}rJN@#RtJC$b<9n z@R(mXe*8GmbUD~|ZWt8wW)pS2zj#z8+F3w&RL8n54MzAQgqJoz=b2ug-u|!Ae?N+_ zw@8>T$ah7(e)9cCL_TQfz^Oq+9dUHU-(1>7272GV&_8>5mwy#ezBR0l5#ET03tDFXFeN;NYg+u{_sYc1-WTM0aA2$6a4E-bP!vK_qK+k!!qO@2~XzO zv8~LWn|)ZsgS3EjXOl|gVPbBuLl^j~Q&kPB1d*|KJf}rc@f8dujXA;N&$Nke0Qx_3 z9p2MZD)6mLUB|KYX3fc5XXNC<5IzmXQRYpF{l|_(6A5Y1+WZB_r%cuCmv>6sa}cuO zBS5WbD^$-xFw}*?RH{Q5);CIedtx@?eC?Eom#X~e1{1OUkAlzMu4{T$kJ(&hw#CLjtbAnE8_O zkNjyM161DSp86-t(oVrktX!O&0ZYCE&zE2&pMs?Hr9wkmlNC4{K%Xn@UB_hHDYHR! z{uN-*Y{%-nVrh5Sf1~6Uo9}zE*C+V#<39o5XqXOMl#fJS%}FFK3~J-k9ZXx(ZTjhR zW=~A$Ef9YVPB5zTsz(3^gL7Gr$PoJhrzvOE>6m7YIpleJZl=XrE*+3pe!?Pmy}j$! zUKbn#rkgXsX~m)tB^Xz;jbn|-WaV-8V`K<-Z_{91A^OM`igHFBI+e0yTbNyDJCR)b zWKyiN`PlSdu>i7^sQ~(~H+i_cM`5pCRav?&G#?PO0%qflZPUczIDHSn?!sOjM~dZa zavkwS%rZPVit;gdil;h!+`5~xF3^;Gq6V`!P?e^GAcZ8 zglSCLKIie<+EF99K3mD!fLQr3AK$rXwXp}mix>aKNeSx26}%wX&48hA*PFV2|Ni|v zDW!uQh^<%5@#B4|2&(DvKDR!O>+9lAJnnF8U(njYEVdM!ZEu!`7*Ly*fnksjk+;{z ze^3!Qbm8@Ir1p}@*6W^Iw?e;~-v}@|@D1D=J<y?fJ5slb?jzh0__3SfQ6p78?Eomfd~(gM zHdBkTH4^UYki_~(#%T6lp6sGlyp@$}T!HjDL|3_0$Fp{mepzzJbCkZ-HMJ#it<_zx$>c7z!Wxu=2O}!^cjPL z_MtcFf-F6S10?bDxhBcao;@4TbVTWA0}aCVzqVT=&zgrljGofwh2Dd{V_J(Y*}9`D=W)AXLM~o_M zeftLN!otD^mqKkVz&C`7&F3%B?qD#Z-M|oKd(htUb$ya)eH}}npw;uX9E>mkDzCPl z7AeeK;Q}M*bNc*qFV$~QSg{un@PHOboBLLVOKC09EG6?a$**6(&KvnFwv1{_hIulD z#((W~12&z|(Ytr=*4}gi^z+oRv@jJF6?-9uTgrRqYZ0g!pIa;~D+@Im1Oh6KBi+Pr zt3O9r`Wy1~)=@MgxM)|eQ*vz-_EMw%qv-V8GTcYAa?8WkWAeLc#LD=gDvcWGCIOwS zd;upnp^4~93C9#<>7eFWnY8^ZdbJH0PpV$}%ZQLy#mwU3#ft@c+k|!O1uI+!+MFiJ zRuoU3JbA*G&cwuYX59V;qR=`~_Q92GOV@qMSZH6|UNldXZ;!QdFHS^7DgE%VB(T+M zx#aXlVlExY%@#61bGCGKD&GJ0B7}LpHBus49mg!?#Fwr(00ZNo!Mi;>vnNA&LPM2B z?4hBHjM9WxnBXG8Q?c|=*G?DYFhL2BBJ#q*!hsEXN3H|;SZ$8>kZ_SVlMHYjzP@=C zG2#Po_=TEzh>P|8K-Bkf-!AI}kx2p^fOl^HO-Z}3eZFY$@MxeJQB|>r=1qqj8e!zp zcSM;SJbLuWNcv#R)_0_xmjQVyHpW1h&ILIYq(YzfAnXd*aN=HY#sW2(u48%Y*!_A( zOX{de%%D-V_FYg=kk(ZECgSD%L%=|Q znfuhsEW{p8g!5&OD74%5x8s-E&ylT{ZbC$?=`FQl*_}@egHDyj<-I-^Ho*T2 zv6*y$7*zT`kza=_a0_IaPC>rSPIC$xLj9L}w3qiX3EM`wj1C2+dM*RG@GEGW2u<~5 z7GDPln1wi5yx7sB=j-i&myfRVT4-`(W1~sb1wKmk{P>B92^r^tUjz|#WH;0Y&lj!u z_{`jm0xkD|FF*DrG*QKrXcL)#Q0QC}{>NdP`B~k5J$NT$xAS%<6E|Xf5KQjtG z{`pQ_GeqU-6<;{rD~>-p+@6!;@bVpGX}xq#xU+RlKzxy~!;!&hCZj#ttV=j}+KOhJ ziMT^&O#!>GxG)UK$d29g4L~B?1UW;8q4=UI=#P$6B1h!AbmB7R5D%W3|NJON!-EDg zkA6Z?4@PNdXu?LFM;-eSwQzN5>1icBcX9;nJ~5azStU~qy~V=^PSbXKE78jaiKO+# zxBbGf*kM&(WoLt7UAj-1|7KZyp|K*OXiFyC8w{fkRqoVnxy2H>30hwF6tvEVT8s-` zXBY*h;$STZ8&0sC!d$=&#^#7QFAZwT0n2#gjUDa6R$Y=?Syfe4{|xomFCEBZLlim~ zxrJdKPsKnLDO__FR>w%C1G=A-G_frooOvyB7FtIKF0AnEXK7c-E*kcLJ2rN3NY6g* z3gnCZsB03n9a&vi(rxOxPYtxDXAmL&R%*|!faJaeR{yFYg-~`}-Y>VnfqPz85U)|E z{g=u5hwM7!*AMlcsf95>HoHZMg=2HR97{6gdgyh1J>UP%{_aX+51|c|YERA`(~RY5 zyL#vlY#-z`2wv*Yf87JXEGtKB;qUGy*zIuG>z6(_@Y^pc!zCsvbH{HJjQWt}eaI^p zLEH|$4*Wd$)i<9_ewzb*2>wXEP~WOCG^Tw@e3v2jXf#gyfv8w7ExqmMZ0hmtAM6Cla z`g2BGk>tgT7fJawHHulp#4A2i9j++huc-etdY%R*qYwFGflm@!;d3|{z*F$5P!;_&s8oUm;Rl0A`E>jUfQ2o9 z+qcIc{(XdzsKD=|4kmE^04&>zuO9d%)a>Ybjia&h)(yL`AyOpoM0Z3!gBwx^C5}ry z`6bfgOG`_GG{pmEAn!@9YO8eJUok+QeU8 z-2_K_r4*dRU-8GrxcK;ZlvPTEqWA$x3a>G{7G3-i-`U@^P zcMtWv;9w!>9rcnUZb{pbmh7 z2SHFHVs9c6S9=u}Ry{Oi<{un9>NHFQ7+p_(jJDGu=A}Z?OtJCOko_SR8`;U?qJ1pTOd*g5Zgr{i~L^ zYKbe`?yDnT1;G>c*yu=G#ccoLdi5U=Jdun1>LjjC;yW04%)8$hO9A+x-^{MFpt+=Qhf74nGx94)%BrR9!|UD^S4qwel*W4QM@3?IGK z2?=1<^_bZ`@O`WlIpn0DXgTzU9zJrU_QM8Wg2fozW%4eA=vk;jokDWzaPc!n{ikMT zQ7sa$QFgMIy@QsbcYWU={L%NjE+}fmr|I#g{Jan+OL70Z&mEYh^B?Qq6W=sDdl0jTV1- z1<=}8OOy2$4ydC-3S>xU$qods!QGZ)WmZ2(NrOn3T3zu=K)rT`z8!m)Ft0w>hWs)$ z;M59tu}JIjO9c9_0V@hC7r1DSG{nCs7`TGy_H4;S-i9#QWx;h;=PZJk^D(PmYImMl zPs4ejhcJzWh9EBW7Kg>B9XobJ?6~W@zRT%L=PWAhHs4|7SxXYQP4G&eyr#Cu8yz4? zn;InsAr8j6Q-bWBnq8%cwt9{+DhbmAseaxGvAi2n*RbbF$|Oz6D9s2O2Uc3;-m}E&!oTjh2Gdm2g_Zl?$&nDS<{$RG3Z5ji z+rQ1v )>Y5aHK^K)sR@SgbUMpvitAA!NY=4y2szil@{TkQYTHisJ-XK#FO?FbIc zg`>E&v9eO0Xr7yL@;so5DiSP*R_rSzjKoLe^PdjDU>ErT-zOz5U9aV6F1MGO7-d4h zHsEOZUjvSU{)+Gv1ySA3Z_6kPdDVdAID#}6KgS;qpeI<_{953*@++6rK*cZ7L-gN{ z=<5~#d(Z~(+qKu*WV3KY3-n*NAg&q;(qUXfgo^3kp9UXrZE%)P+74{|ZT&a^gzf~* zFZld>NIyRfz5ApxELO@n%Z`6Jga7tp30*i~XNtWWfJ(LIewR%=IYZP{N1)an7iLH!^GAX8UbZR(wM14@#va+?>} zy|so@*fg?7N4H(x1Ntt|*Z7|uYEtB1+}Iab1*5#`?v=-Ooe zo9Q2vh7J!3E{yhr66T*bX;@?dOsXUfunQTa@fdmad`v$eoY+7C>tKP%$-AAKt&j5Z zj=%1`oaW+04D`lrfUDKCN_|Xz2le%lDbvmR;AedXjydiGE=-!bXV+5N95|LL@QZRF zKJfl8^ZXMnpoA>iYTIls!<{v;-6c|LU0(e9!R`Ic1(#Rd}5Vj=f>Zd0I zj%Ry$T<1!z{Joch=fI>Te%cb@W+Suhs?P|7jym-U+qB;v&i4Q*@qRgDfb<&M+SqzDE?2rfy6FcJX za}x2wE0I$o@KE}VyucZdijQemH`_l_%;LVT3nZ^NQ&#ZB(+zr4CNw2Xj2y>@phMDR z0&uJ`%KKDDW)rydYH^PrsET$BaVfKTD(x$8+s%pEI}dbJY7}%1b$87ibQmw7kIcyn z=TSZ!M|5_AfhlJ8Zv-}b0~S16Jv*npwl3Ll*91Q2p-XeQePeg0a@;<#2x7(LS>`G$T&Th;XC*rW+Tmp&LK>K&V1(ch% zVX>3OHJm4=sNf@z7QlIQ_ezkHvb!EO>OvbBCq*+3Yr z?8D_rRe&Vd{EAq%Z$H{S*0;wm+2`P~7Ir+sj0Q{1vU2|s?Cj*ku^i7bNiCSB#VT5cqhn$>~vDh(F#xAw|{?y>gSxR z&vHhh;`t~s`S#t{9nGvhEQ46@-52F88wXRVT;om{U5MuzLeRbW7f4*Af4}(L-}~Q^ zPOWuqzSZqAUmdLMqvx6OJSg>jPE8#(Ccl`Hw#rk9N_h*j=Qs^@mm_M2-Wue2RNdtE zR{Gr!H|uR@WR#)3IEPv+YC7A90mHHYmG!Ofrd*TN@0O2nb~nk0NwTWna**T5>(P%s z`aRv=V?D{Kj*D>gogcY3pI{`;txJ<^<_qr7x}&0Sd*(uVl^)Cc1`3)8tNubs%a3fVOdn;dcb0LT|1o1uZG18 zz`~3}LF4J*R_15y6W?BrWUX1p9dEs>IsJ9~?p(lrs<-aSQB83Z9_>z;mDNaO;jCuy zVOBK}DU&}&wtM%^OVhSp`M2nNb~Bj854^q1Ax`aWnq8>J;os?w&ZaV-!KF_d$i`^^l}N-AV=38 zUzMPD0_W0~rke*x%PK0uQaxRtC8s_XYoM@erg34()PnX9x7I7rbTA35Zm&QTC&Xp6 zdPw7aa+lQxx7$-CY1AZS01Bz?-uk>P74lOWs@lZ~+gXjYI%2bDQ(W5|2BYWeRh=&! z;UKBeHX1tID|me;2RNB!KY#0bqk%0MWjpkyaCv$hVpbg+EQeastUdNP5hH4!XOEjC zbzA7aP=hvV+;yx-c85kv>R6UVYx?~2B}gp}P<56hZMUnFJ99>dLifm_L}>yd$gNLc6E-9E@sWNF4$k~ z7M%&47%_~U%IpnrEEijFnpVFtH9a%Lg6P}H?Bd5{eseZFB{#GdYffD-sG++HSyDND?k!2{+KB!6O_)d+q z%lcDS^>Q`~dJZ=!ycYJJI>K7jnDn7YGizMjq9wJ-Aj(E~Uf>vuZ&fgVq1jg22G4dT zqDXrqdSF3KiCf8^iemcYuCYe=tnDsV$NTp8)!Q~h)75??8eaxP&Qw%U!^B<=@42RzEwq*44kaZ-Yffg?2O0`-! z$)OZoO^>&C#AJ*}Cy_Q=i5T#D=5-_S4Yvi}d*UE0HCf1L`4Tiyi`X^&9tYvyu`FLg zSn4;y-lQ$#$_~`&MHQ%nZPU?@_Y#wh@r>tHN)KQv;vJ?2kk$fc2c|-m-M5FT>uPsP z(`MXtL~fYiB{6>L!9Jy&k-tBaTU~ZPa$qmXnkDw6wbx_jQw3)FROMWo8GxBRtAA}T z;l2wj2f%I+!d-IN>C8p)(c`lvg~zP z+RcoEylz-I60)<#)HS0J4K~W1Ze^)2)VX{*MO*kDbF)C}m2+Mx^L7mvZkjln2<%W& z$xLH`hf*x=$&CXw2!j-_d&d*GilII6oI9n7OzA^V>0qNh9KI1#8Z4gUU@}}vUhC%C z5MoU}W(sf`+Rjx(vL?B zAY;BuJH4n#oc(y$z!QjGEo?I0!~=;way-hm2@)V878Yy6jw`;!)Gi;pb9BTSnC)f9 zx8Sa;ma`g&+0XZfoukfFc~$D8PuCTVAGy9|DVl>~R+tJ?8YrC73 zweA-30MqTRc#C(WR_3L5D%%eMu?rpPB-&O&1K}?sEa!8eP0bkYeOVFNJT~U>1=|`~ zueS6-H$kx9VqHPq&s^lp>z#o;>~davD8)t;y5gUWM1XoB<&>z5Ndq`7vD zE#H6YXKzNcf*f3;^*oph(fRp6-JFbcbeyJFN>JO5W=@m`Y9)jGhq6!6;bl?w@sn50 z8$u3sw2e1GgW6F|$Kj-Yh!b2L>2`ZgaD>`=;RWm7ryrQ{tY~^dqI)p=&{M2Cm&rTw zq~ZJd{_S?ShZ8l=-T@May{g=C-ubxe)t_32KQ{hX?CtTsnl zoiaUKCdvfD82*e2jdBxe>ur2Ghvf4zsA==pIJM*`n2?g)jfzxo?Xh;- z$p0sB{XbOoyRf`C*JzuXf0{(ow`uzZ6g3aL_SKP?%2ngPLBkTXNvJPmAcgluF32dT z3}+0`Gx6&h+(K7<_UlwG8}CkSNsn0^%M@7$Fn(YXQrUc`0J%^=K?g3ShBb;`2 z2LY_>_Iyj8d%WLM#CJb0_ha*1gU#HkeN|8N?OI4g+3=gYmU?2`+Q#dgshgw(cQtR_9FrIny z86)W&(96TY819X0Db^Wjity|o+T$euWVfq%Z$WdX>$IV(pUYIFb|^TOi(v(vKO=WU>7w;s&`K0pvtpz09C^}VhuCd-qtMqWC(ye~HX?t;OKr`$e8)Y%Q z!fTYqiqeTky=_#wGAUUUk8QScNtFtodNl+`EPLDJiUV3Zd(atD8wtTN1C16L!wQ^k z7@W6=%;elzDJI{kZtzHt%ET}^9K2gjEJj63j_sO1bXvELjA(=w4iQ@T%$LlrD8^G_ z`S_-ze-vCBM|w0K>vZp>B^&}VGdj|$@olbhGSrjIuwnb}OEI6~-Rf$H)HGNr(qFP7XxqeI@D$H9cxw~_ zoEjDNLLZjkGx6G2kGs6M%P&1{;3_9gwh^{geEXx#=7OId>qR)rUv%fjc1Yi+k`R<_Y4k1E#t(L&-3qoyFFe~QuRdmF26IL+01=!;Pi;%;aK~Zk=$aC zB<6Yd=pZ(wcIm&(RbE^NRq@+2YjVWt7g8h!DHDUP)sLygR*3R~&F{?CD6(}4f0xK>;3w_*{Of#~GD zhf?UT-vsUv8gQrR8Q_Wj?ewHkCiW*`ib`&q(h2WkC&b+ z{dTEd!&05;vE}=Xd9uo%hM0GCB8je0$m&G?($-cj@|V+t`Jdg|SGX$c>Xbz<)J7=P znllm}$-NxxaJ#-KUh647uoWqD6o4`Z+evXFq^)rXN4w{w;@)jMS{kj%KwL>^AIwqJ zENdoDk0#BvH!^`QlBY&4W716-92n~s24Pz>r7oaEin3@%1-$=00k=qQg6CFWm}y!Z z9ohtgWJ3*cyz>$q@UVO9L76fBz9M**dsf|L)s41uZlby;D z$Vi8%f|Dy4poxZ_v;y+oAA}(9ce)cX0wD$gjKpocti2N<2lyEZtZ4`mIB>UXG|_-H z{Bi?4&4a8-t?#@jQnr@f6$e$>&?kI`uaqK{QN;X`(K3_Q970>;n@qOv-;#rz1y6ys z(I5YPUHFL?C&txHGt=IRe-JxdN;)pkFe@B=42qk|a3UBLXw8652c4P@$h#W@J%=o! z(%81!^9f~_xRxoNG`W%{#ERfrvc1Ma>2Wk++)fPz%F%3a2r3WRR6uuICwbwW?GL7* znlo^j!oxC-f?&WA@{uIoOkz=!e_1RN<~c-(ycAm*Av&729>bQ2{X@g9**wK;Lp0KU z2LaEQDDR1wf;=oUh&->4#N6E67|F%~t${J*?i&q1G)FnZ=-;bD;A44V3awKx$$f{r zEJR~_SZ8byiQmEZ=Tuq=zV}at5b_7C`QCoEvfoC1SK;9Q_&V~p3Rv=+!JPlP^3Z_b zjQwQLI1z{tKG!JyRsxId7TEVGA!)wfhG;?XGFJy8hyi52Z-s}FaPI%X6#C?M)59tU zFC$`8OEg>b?UB+*rQ|Q~s^5!>gu%-Mr4Rg8NM$cXk!+`=jQ0`T5a*x8jrIa+{aoNVHdT%7HH|Q{sUS9!P&#?7d_R+n%y8~T@ zpHr&74Pg^~#`ND{%1u@W8UXvdZu4woX1D@^qAT0Cl!TX~@&vu+L%`Lg9TLBh40lUb zdbsdts4D%JPq=b`gm)qrA$${^<~}QjjV-SHosdf;9LiDemjk_BV^=CLKVyIXIg*eI za9hTWVc!WVNv@a%6fSmM2a?6~&Z!7QAEUnwt~}PG#t2OI&qE!%i(J>_BcN#L-m|1l=rENJ%C1uQ&#%F?EJ`Eo%^zH~U+<2&In6HX;7?W}BeA$}o5-c% z`@xkM1p_Lv&00sS{QrF}f5I^Ra%+~rRX@?J-to8X9IHe8kL7${E$r$n{>RpTnypn^ zBpy7h?r7q3^Z%4z#I}!JM+}=&#*yzlXd$L+`7l?8yVVJAgK$~|ip+9fa^T;9)WIBTI@_}STwn<8pN#xMttS;2GkV=JX`%z!g?!vn=u#Wor z0-_5;3C4|Y^lO(IJQwi&!OO;84glq?J`DDC*s?8i$PnOd{hc>iWPxE_y7kD_5%)4# z;bFzB0vVpHhf^w3SRVejsS3|4Uc|&m%Z)IJfidefS>`MqYKHJsalzv6zxJ}1cG+>X zAUI8oMX&G|%Lrj5Io`H#oc&Mr!)`E{L5vH z`{Ehy;h~pABYFb9BLfN@nl?FMj0kxMO!LlDlYPAS7>h z;?mrh1Tqc#P7mYHAO9A0_{+X~F@KBPX#jDm%=f|r#VXh;A3QzrxD!BeMmf*)rwF7Vnan$0geBzXK->1E7binroZujN9a$a!%=b4jkWX{_FL zslGqNZIiV2LQ{Pe1oKU`{cfK#08=FtXj6CI7`h`wU9umq-P5vr$O;f_VQJRA)3a*( zzizlPX!kLSNy#9HJ7KlMF;M$#CozFmrou(&EPc%EJo$mnauC!m4lOLlz1tM|G?10z zhTbJSU{^~*18H}7&I^}&ViK59BTIjOSg>q@L76mf-%c5BNyo0EU0m~QR?cMWQ3udu zgfr74L(hXy0+bbBnlurG``c*{#Br>%0dFxZ-G; zdxKqFyq<8G$dIw?p7K;J?t(tbNPmxW!)XB9lxYV+jVdJ-O<$Mkgy19k+io`5HhnGh zqyyltukAfy0Vp=#+#<2*_(Xsjt2FPd#!H2C^gPmzVU9G*r<)r;Ik)TPPKBcn5x9G3 zJ}k%~!Xb*5vDqx)jFw**|NI@J%_BQnQtZaO18 z6nA{S>QVMXU6aKiKkwec%jDHzauwV@9oW-@EW`GIdT&$FFI66EtZ?BU28o#3QE2H5 zHv8KRz~e6+%nn+bz4?1zKN2?4WbME&kK(IlvS+dq0au?SHV>QPvF`atsbbQlS7>vB z<1ZG1&`nm|pwrg^IQ5;}N?clW24NoyS2Dm_nkEfEWmw;>JMg370cdcPXw8dZ zRL6%SAW^E<)~?DtrPU80qaRw0Yezv&W9kZiX+~v6@5P}buB~|znG=DdPGQa1;wEOi zq4>giAX$18pn7n9RSxh?MVvPIzXaD4)r*W zD2PziR_m?zq;cvXt#$qiH_6R~%QtmYP6lcb{LdtWbdoTIHHt%%Xf-&9l~XDaAuDzr zzj1gm$TadGMFX^fs4hA56#Mqi^#;d|%-HN1P|b3%(dLm$FsvAVESN)kJ zTWDCxg)6<|a01i>z5&sRy5Z)p6G0)XqthF`BemDokf5zltKnFd`lO6O@YcrC)-o=S zq91xADqQ@yHT{_#hvFyUUxwm<_&4(sD4k$qG*3LMnFNud`THzgp+!KZgrT52W;tkt z^Zc8aVPSQF^}Ja5nI6`*TkZEx`g*VZtLfUQ7bDM@zlI8yU>MHU)`X#d8#uh6K`wQr`qXO#gRakWw*49?n3*ZM2 z%yrAU)A}>9+QZ>0WLg{|&Tm*Aa6?qDXiZ*2ydI-+ir1HL5x2Y^GHk9cF$8P(kfQSA z(GFUM_=$aKFlX7+|A?vbBXiI%b`k;+s466VF_cj9z;RArU46;XZ0WphNO$zYITa4_ zwL9W3766e#-Tj=31+=*`Y#}s{ZvIB6O&x$;a!uQ)A>2avDnND_lM12WxkWQ*SYWU7 zZ#NDLtU_LS*eYtU7v(z zU!jFtPfvz)09^l!)J`kOCg?#JXre7Tkmr`pGapwyZa!h2+_L{GXc)EL_ma_JY8sFfjuOZ z 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 Z@#UU{O7xz@4a?x4#3|X6iGOL__&=+@T3!GE