From affaae14b7a175dcde2fa7b2c674d20c76995bf4 Mon Sep 17 00:00:00 2001 From: Alexandre Bourdin Date: Tue, 27 Apr 2021 10:59:46 +0200 Subject: [PATCH] Merge pull request #3917 from overleaf/ab-example-project-ab-test Example Project Split Test GitOrigin-RevId: a9d68811c878e32b92e0547311c9e477e4096135 --- .../Project/ProjectCreationHandler.js | 522 +++++++--------- .../Features/SplitTests/SplitTestHandler.js | 60 ++ .../test-example-project/frog.jpg | Bin 0 -> 97080 bytes .../test-example-project/main.tex | 119 ++++ .../test-example-project/sample.bib | 9 + services/web/config/settings.defaults.coffee | 13 + .../web/test/acceptance/src/ExportsTests.js | 6 +- .../Project/ProjectCreationHandlerTests.js | 586 ------------------ 8 files changed, 417 insertions(+), 898 deletions(-) create mode 100644 services/web/app/src/Features/SplitTests/SplitTestHandler.js create mode 100644 services/web/app/templates/project_files/test-example-project/frog.jpg create mode 100644 services/web/app/templates/project_files/test-example-project/main.tex create mode 100644 services/web/app/templates/project_files/test-example-project/sample.bib delete mode 100644 services/web/test/unit/src/Project/ProjectCreationHandlerTests.js diff --git a/services/web/app/src/Features/Project/ProjectCreationHandler.js b/services/web/app/src/Features/Project/ProjectCreationHandler.js index affaa79712..ed303f84cb 100644 --- a/services/web/app/src/Features/Project/ProjectCreationHandler.js +++ b/services/web/app/src/Features/Project/ProjectCreationHandler.js @@ -1,20 +1,5 @@ -/* eslint-disable - camelcase, - node/handle-callback-err, - max-len, - no-path-concat, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ const logger = require('logger-sharelatex') const OError = require('@overleaf/o-error') -const async = require('async') const metrics = require('@overleaf/metrics') const Settings = require('settings-sharelatex') const { ObjectId } = require('mongodb') @@ -25,316 +10,239 @@ const ProjectDetailsHandler = require('./ProjectDetailsHandler') const HistoryManager = require('../History/HistoryManager') const { User } = require('../../models/User') const fs = require('fs') -const Path = require('path') -const { promisify } = require('util') +const path = require('path') +const { callbackify } = require('util') const _ = require('underscore') const AnalyticsManager = require('../Analytics/AnalyticsManager') +const SplitTestHandler = require('../SplitTests/SplitTestHandler') -const ProjectCreationHandler = { - createBlankProject(owner_id, projectName, attributes, callback) { - if (callback == null) { - callback = function (error, project) {} +const MONTH_NAMES = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', +] + +async function createBlankProject(ownerId, projectName, attributes = {}) { + const isImport = attributes && attributes.overleaf + const project = await _createBlankProject(ownerId, projectName, attributes) + if (isImport) { + AnalyticsManager.recordEvent(ownerId, 'project-imported', { + projectId: project._id, + attributes, + }) + } else { + AnalyticsManager.recordEvent(ownerId, 'project-created', { + projectId: project._id, + attributes, + }) + } + return project +} + +async function createProjectFromSnippet(ownerId, projectName, docLines) { + const project = await _createBlankProject(ownerId, projectName) + AnalyticsManager.recordEvent(ownerId, 'project-created', { + projectId: project._id, + }) + await _createRootDoc(project, ownerId, docLines) + return project +} + +async function createBasicProject(ownerId, projectName) { + const project = await _createBlankProject(ownerId, projectName) + AnalyticsManager.recordEvent(ownerId, 'project-created', { + projectId: project._id, + }) + const docLines = await _buildTemplate('mainbasic.tex', ownerId, projectName) + await _createRootDoc(project, ownerId, docLines) + return project +} + +async function createExampleProject(ownerId, projectName) { + const project = await _createBlankProject(ownerId, projectName) + + const testSegmentation = SplitTestHandler.getTestSegmentation( + ownerId, + 'example-project' + ) + + if (testSegmentation.variant === 'example-frog') { + await _addSplitTestExampleProjectFiles(ownerId, projectName, project) + } else { + await _addDefaultExampleProjectFiles(ownerId, projectName, project) + } + + if (testSegmentation.enabled) { + AnalyticsManager.recordEvent(ownerId, 'project-created', { + projectId: project._id, + splitTestId: 'example-project', + splitTestVariantId: testSegmentation.variant, + }) + } else { + AnalyticsManager.recordEvent(ownerId, 'project-created', { + projectId: project._id, + }) + } + + return project +} + +async function _addDefaultExampleProjectFiles(ownerId, projectName, project) { + const mainDocLines = await _buildTemplate('main.tex', ownerId, projectName) + await _createRootDoc(project, ownerId, mainDocLines) + + const referenceDocLines = await _buildTemplate( + 'references.bib', + ownerId, + projectName + ) + await ProjectEntityUpdateHandler.promises.addDoc( + project._id, + project.rootFolder[0]._id, + 'references.bib', + referenceDocLines, + ownerId + ) + + const universePath = path.resolve( + __dirname + '/../../../templates/project_files/universe.jpg' + ) + await ProjectEntityUpdateHandler.promises.addFile( + project._id, + project.rootFolder[0]._id, + 'universe.jpg', + universePath, + null, + ownerId + ) +} + +async function _addSplitTestExampleProjectFiles(ownerId, projectName, project) { + const mainDocLines = await _buildTemplate( + 'test-example-project/main.tex', + ownerId, + projectName + ) + await _createRootDoc(project, ownerId, mainDocLines) + + const bibDocLines = await _buildTemplate( + 'test-example-project/sample.bib', + ownerId, + projectName + ) + await ProjectEntityUpdateHandler.promises.addDoc( + project._id, + project.rootFolder[0]._id, + 'sample.bib', + bibDocLines, + ownerId + ) + + const frogPath = path.resolve( + __dirname + + '/../../../templates/project_files/test-example-project/frog.jpg' + ) + await ProjectEntityUpdateHandler.promises.addFile( + project._id, + project.rootFolder[0]._id, + 'frog.jpg', + frogPath, + null, + ownerId + ) +} + +async function _createBlankProject(ownerId, projectName, attributes = {}) { + metrics.inc('project-creation') + await ProjectDetailsHandler.promises.validateProjectName(projectName) + + if (!attributes.overleaf) { + const history = await HistoryManager.promises.initializeProject() + attributes.overleaf = { + history: { id: history ? history.overleaf_id : undefined }, } - metrics.inc('project-creation') - if (arguments.length === 3) { - callback = attributes - attributes = {} + } + + const rootFolder = new Folder({ name: 'rootFolder' }) + + attributes.lastUpdatedBy = attributes.owner_ref = new ObjectId(ownerId) + attributes.name = projectName + const project = new Project(attributes) + + Object.assign(project, attributes) + + if (Settings.apis.project_history.displayHistoryForNewProjects) { + project.overleaf.history.display = true + } + if (Settings.currentImageName) { + // avoid clobbering any imageName already set in attributes (e.g. importedImageName) + if (!project.imageName) { + project.imageName = Settings.currentImageName } + } + project.rootFolder[0] = rootFolder + const user = await User.findById(ownerId, 'ace.spellCheckLanguage') + project.spellCheckLanguage = user.ace.spellCheckLanguage + return await project.save() +} - return ProjectDetailsHandler.validateProjectName( - projectName, - function (error) { - if (error != null) { - return callback(error) - } - if (attributes.overleaf !== undefined && attributes.overleaf != null) { - return ProjectCreationHandler._createBlankProject( - owner_id, - projectName, - attributes, - function (error, project) { - if (error != null) { - return callback(error) - } - AnalyticsManager.recordEvent(owner_id, 'project-imported', { - projectId: project._id, - attributes, - }) - return callback(error, project) - } - ) - } else { - return HistoryManager.initializeProject(function (error, history) { - if (error != null) { - return callback(error) - } - attributes.overleaf = { - history: { - id: history != null ? history.overleaf_id : undefined, - }, - } - return ProjectCreationHandler._createBlankProject( - owner_id, - projectName, - attributes, - function (error, project) { - if (error != null) { - return callback(error) - } - AnalyticsManager.recordEvent(owner_id, 'project-created', { - projectId: project._id, - attributes, - }) - return callback(error, project) - } - ) - }) - } - } - ) - }, - - _createBlankProject(owner_id, projectName, attributes, callback) { - if (callback == null) { - callback = function (error, project) {} - } - const rootFolder = new Folder({ name: 'rootFolder' }) - - attributes.lastUpdatedBy = attributes.owner_ref = new ObjectId(owner_id) - attributes.name = projectName - const project = new Project(attributes) - - Object.assign(project, attributes) - - if (Settings.apis.project_history.displayHistoryForNewProjects) { - project.overleaf.history.display = true - } - if (Settings.currentImageName != null) { - // avoid clobbering any imageName already set in attributes (e.g. importedImageName) - if (project.imageName == null) { - project.imageName = Settings.currentImageName - } - } - project.rootFolder[0] = rootFolder - return User.findById( - owner_id, - 'ace.spellCheckLanguage', - function (err, user) { - project.spellCheckLanguage = user.ace.spellCheckLanguage - return project.save(function (err) { - if (err != null) { - return callback(err) - } - return callback(err, project) - }) - } - ) - }, - - createProjectFromSnippet(owner_id, projectName, docLines, callback) { - if (callback == null) { - callback = function (error, project) {} - } - return ProjectCreationHandler.createBlankProject( - owner_id, - projectName, - function (error, project) { - if (error != null) { - return callback(error) - } - return ProjectCreationHandler._createRootDoc( - project, - owner_id, - docLines, - callback - ) - } - ) - }, - - createBasicProject(owner_id, projectName, callback) { - if (callback == null) { - callback = function (error, project) {} - } - return ProjectCreationHandler.createBlankProject( - owner_id, - projectName, - function (error, project) { - if (error != null) { - return callback(error) - } - return ProjectCreationHandler._buildTemplate( - 'mainbasic.tex', - owner_id, - projectName, - function (error, docLines) { - if (error != null) { - return callback(error) - } - return ProjectCreationHandler._createRootDoc( - project, - owner_id, - docLines, - callback - ) - } - ) - } - ) - }, - - createExampleProject(owner_id, projectName, callback) { - if (callback == null) { - callback = function (error, project) {} - } - return ProjectCreationHandler.createBlankProject( - owner_id, - projectName, - function (error, project) { - if (error != null) { - return callback(error) - } - return async.series( - [ - callback => - ProjectCreationHandler._buildTemplate( - 'main.tex', - owner_id, - projectName, - function (error, docLines) { - if (error != null) { - return callback(error) - } - return ProjectCreationHandler._createRootDoc( - project, - owner_id, - docLines, - callback - ) - } - ), - callback => - ProjectCreationHandler._buildTemplate( - 'references.bib', - owner_id, - projectName, - function (error, docLines) { - if (error != null) { - return callback(error) - } - return ProjectEntityUpdateHandler.addDoc( - project._id, - project.rootFolder[0]._id, - 'references.bib', - docLines, - owner_id, - (error, doc) => callback(error) - ) - } - ), - function (callback) { - const universePath = Path.resolve( - __dirname + '/../../../templates/project_files/universe.jpg' - ) - return ProjectEntityUpdateHandler.addFile( - project._id, - project.rootFolder[0]._id, - 'universe.jpg', - universePath, - null, - owner_id, - callback - ) - }, - ], - error => callback(error, project) - ) - } - ) - }, - - _createRootDoc(project, owner_id, docLines, callback) { - if (callback == null) { - callback = function (error, project) {} - } - return ProjectEntityUpdateHandler.addDoc( +async function _createRootDoc(project, ownerId, docLines) { + try { + const { doc } = await ProjectEntityUpdateHandler.promises.addDoc( project._id, project.rootFolder[0]._id, 'main.tex', docLines, - owner_id, - function (error, doc) { - if (error != null) { - OError.tag(error, 'error adding root doc when creating project') - return callback(error) - } - return ProjectEntityUpdateHandler.setRootDoc( - project._id, - doc._id, - error => callback(error, project) - ) - } + ownerId ) - }, + await ProjectEntityUpdateHandler.promises.setRootDoc(project._id, doc._id) + } catch (error) { + throw OError.tag(error, 'error adding root doc when creating project') + } +} - _buildTemplate(template_name, user_id, project_name, callback) { - if (callback == null) { - callback = function (error, output) {} - } - return User.findById( - user_id, - 'first_name last_name', - function (error, user) { - if (error != null) { - return callback(error) - } - const monthNames = [ - 'January', - 'February', - 'March', - 'April', - 'May', - 'June', - 'July', - 'August', - 'September', - 'October', - 'November', - 'December', - ] +async function _buildTemplate(templateName, userId, projectName) { + const user = await User.findById(userId, 'first_name last_name') - const templatePath = Path.resolve( - __dirname + `/../../../templates/project_files/${template_name}` - ) - return fs.readFile(templatePath, function (error, template) { - if (error != null) { - return callback(error) - } - const data = { - project_name, - user, - year: new Date().getUTCFullYear(), - month: monthNames[new Date().getUTCMonth()], - } - const output = _.template(template.toString(), data) - return callback(null, output.split('\n')) - }) - } - ) + const templatePath = path.resolve( + __dirname + `/../../../templates/project_files/${templateName}` + ) + const template = fs.readFileSync(templatePath) + const data = { + project_name: projectName, + user, + year: new Date().getUTCFullYear(), + month: MONTH_NAMES[new Date().getUTCMonth()], + } + const output = _.template(template.toString(), data) + return output.split('\n') +} + +module.exports = { + createBlankProject: callbackify(createBlankProject), + createProjectFromSnippet: callbackify(createProjectFromSnippet), + createBasicProject: callbackify(createBasicProject), + createExampleProject: callbackify(createExampleProject), + promises: { + createBlankProject, + createProjectFromSnippet, + createBasicProject, + createExampleProject, }, } metrics.timeAsyncMethod( - ProjectCreationHandler, + module.exports, 'createBlankProject', 'mongo.ProjectCreationHandler', logger ) - -const promises = { - createBlankProject: promisify(ProjectCreationHandler.createBlankProject), -} - -ProjectCreationHandler.promises = promises - -module.exports = ProjectCreationHandler diff --git a/services/web/app/src/Features/SplitTests/SplitTestHandler.js b/services/web/app/src/Features/SplitTests/SplitTestHandler.js new file mode 100644 index 0000000000..b5ce435373 --- /dev/null +++ b/services/web/app/src/Features/SplitTests/SplitTestHandler.js @@ -0,0 +1,60 @@ +const Settings = require('settings-sharelatex') +const _ = require('lodash') +const { ObjectId } = require('mongodb') +const OError = require('@overleaf/o-error') + +const ACTIVE_SPLIT_TESTS = [] +for (const splitTest of Settings.splitTests) { + for (const variant of splitTest.variants) { + if (variant.id === 'default') { + throw new OError( + `Split test variant ID cannot be 'default' (reserved value), defined in split test ${JSON.stringify( + splitTest + )}` + ) + } + } + const totalVariantsRolloutPercent = _.sumBy( + splitTest.variants, + 'rolloutPercent' + ) + if (splitTest.active) { + if (totalVariantsRolloutPercent > 100) { + for (const variant of splitTest.variants) { + variant.rolloutPercent = + (variant.rolloutPercent * 100) / totalVariantsRolloutPercent + } + } + if (totalVariantsRolloutPercent > 0) { + ACTIVE_SPLIT_TESTS.push(splitTest) + } + } +} + +function getTestSegmentation(userId, splitTestId) { + const splitTest = _.find(ACTIVE_SPLIT_TESTS, ['id', splitTestId]) + if (splitTest) { + let userIdAsPercentile = (ObjectId(userId).getTimestamp() / 1000) % 100 + for (const variant of splitTest.variants) { + if (userIdAsPercentile < variant.rolloutPercent) { + return { + enabled: true, + variant: variant.id, + } + } else { + userIdAsPercentile -= variant.rolloutPercent + } + } + return { + enabled: true, + variant: 'default', + } + } + return { + enabled: false, + } +} + +module.exports = { + getTestSegmentation, +} diff --git a/services/web/app/templates/project_files/test-example-project/frog.jpg b/services/web/app/templates/project_files/test-example-project/frog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b889ef3cf71c83a4c027c4e4dc3d1a106b27809 GIT binary patch literal 97080 zcmbTc2UrtL_cp#EbP=Q}NI(PxDI%Q&2vQ{Up3qe~5{e|DNb{ixDuz%3NC{1Pi}WfA z3WOp>nskxgQJN2y*DpTL+kW5m{p;k~-Fwct=gc`X+1Z`h`8D-x5jban&_@6u5D3tt z{(xUgbcOob+IP$>OcDAhI0V`5F=H7&lTt5L&f(2 z0Bq&rhxG>l+7YT88szUs#dNV?)KPE_a<= zsrW7xOF93S+~dFS-#$zS*Rr5qMXAS;I~IYWUawNy;bO>Lq%{?vr(!Kne|_XXUL9yilwOdB`(nNH~xzga#!2rpPUV}lYto(U!-#W;pcDmPdhX`zTPIk z`pM`-Tl1(`X5m3(-5!$7Qg)zqT*I3td8zK`Ezc*sDG9P z)3`d_G^EOvvyx0w}5tPaufO#Zn`2qRM=MV5-&sYKwo>K`THjORG-{rG){4v^QuqXw_+N zQgf=bM*m{a>(Jk%*8~LVCFo)Fvh)VO@xOYTUW}@PQO`R6?Dv25$iEr?-Fj4i{?kvt zMCwFxJ!KuD_t1jEu6NCUw|y6V&&0 zk(Ls4^7a<|ONA4}y5Zcgfo`tS!0$2dcR2t!wD@Z*1DzlKkIdf~0N{Jn|M19vWOe}n zP>BP83kv^{U8UYr+_?bItmG1a4gA|4b&wqd0GzwL++TSRixzb(TKM(rka}M-Bm=0~) zPfJVB%EZX@oALiG{ptYN8EKYjw!k1EfQB6eW(WQ10xnS-fsXoA`~6`1X9CfHY3b-0 zs6L&c5*p3{G$1gTh89fqm)a1ZaH<}lWvAn~EUQV+Y3{@zgyE8lOv+~z)~e~`ws`+p zMBW)2#l(F60uS%SE23go#U&IJm6V|{744fk2wgpW14|^z%9`5MF0O9w9(O&_IRAja zp!>lg(GO!{A3c5&mrP7aO?#G}k@>u!u&B7Cw5+_guD+qMskx=~&D*Z-9!hUt|LEBG z#N>ym>6uSU%PXsE>l>R}Uk(nBj!(Y+dHU^lTp$4acUb?9?0<`kof;PnEiIUq;dfjh znjq={W~ZgQEKAR!Y0lt;;S`dKWaQFH%CG5U5|+34%gvj2C1 zMg9MZ?B9X?C$1TQ1q`Bg9+(}t0eq%}=Mfefat?kJ!UPuTPem?=x2+d>m<&fBqzN>f zT3XA-d7c|oQg*6k>~?E8m0@BSM;?UD_k`1-{IG}+^S-JaI8blTE$SuWe9lJ z1b2{#!B2>%uhZ0~_9=7-I#MdtC#uSHAya<4zT(jKE7t%C@e zs(QJn7D*8QhZne$HWX#WqPLi|C0-OL+bMi0l_Sn~hwOUG_QtFE5a*J!E#ZuNlGh)s zTl@kf2yaSk>3@`o<+j;0*Sm>(IWPL!c!(9#sY-C+h`B{TkV)wQA> zT)%O0#KY?%?eOu_IHgq#(d`>0cnWD#eyx zVPU|$P74}gvnw6F027AbY|DMWa%LK8DZ?m$BQEYH?=Z%I6C<*>UM%647gi2ayEu*L z9sG#ty>P`~HF9x1F7fJ$%Rw1U#5zA6^!l19x1ozt<%u9Bis>5;l@3zUmr|YhF!a7z z99Dh+EUN*M=EWH{K0wqTEEX}M^nl}f5i~-x_f$8;Prw##+ETa^Z=oIH5BuS%`;oVg zXPAqXC)du2w~z115!aRc=TprI-@6x+2*=(s-yGNK^5^8>ErT`|lyTOGOoMM1cb*zY z#k3t4pHnA+` zOz7WrUCjqe3-{oN$(|AJns5D}-FC*!5}l7BBPavkVSYLha@Tw>_RWp3F|17#sAF+# zUW5OSi;19WX;zgLtD0#0^zrgp4#m?R8T3+jBHI^_qe30#m!Q6i_jzV)S1NRbvm28x zin8&VTSB7i{kQQLD-QPTcfm*W#f&eK8BEdBaKuh(|7MMxfviZ#_-E2(33~nGq63@k zDQ}nJs~VcZp7c*_+Dcm7OgPuPS0;*1H5Ma+xy|It_k>?m8SuxgQp zhq3JE$J|T~QnAN%Kz148-d}rWIi%}gg%tUOVEbf;?z*l`ynV!3)1OwG1|Vx_mj%)^yc+`HGW> zzgV&Op18iOHh&9`Md&31-XVHM9{!DSlQ{)8_oT0qbCRCQ8umv%^Nc6sYNi`Ep%3hsQG=$7lFTf=GC9EQ zwxw~@jZB6Q4wpbsEu#0%kI77H#R8Xb3$=SLYWUA*eGMC!=C^H>IoPst(*r6DzVrKK zy($*jj_)8Z&(uhBoznwv+6Qs?TId7c11d8ZJEdT|w~$2ifl_=H?9^r85^;@UH+=W0 zFjkYH%D)!DQK3e@pFLy^h$*E;-ql*$CJx@KQ*d?gwU!EZUKD%97*C|nPEsnm4^938!BQMO&3T-RcLVFf09Gc zh73&2gC<4$4Kcf9tZ6d0CaC3Ff!xhg#L|Ur6y7yi^E5o%%U!QA`hB;Rj4O>C0GHG; zuCkS|e$Pc~^KivA_fv6o-)t0am^&0*0pW1?HfC@jCrdacJ>PeYm+rrOh5%X&LEe{; z!&V$sdRJ6`9lk?Kx!CUb!mHG&c#hGHyQ@U<$Wlsli1rw0nA zFVnQQw9#)W{j&%8g5ed$iv58D+3!9q?<%9xKNPPrS3-`C$-yDnDUBDoBCs0Zb_IkX zOF~Jzaq_#_T3ui9?$}j|aRXCbtumqXsr&n>Z_$?EdeD9*z8MAy*f#LfrCsOWaxng6 zUcaX}bZ}odGqQ&VZ0Wlg?wRbAn^RontqiB_-K-Z-c^})u@E~X6DoW5XnsBs~?)R3j zw3S<55JY5v*XH7iBW6W02OY+@>q$6vBp3`3QHmu zJr@4Xk1KHB9I}6^3GY3r67T+~Ep9BwZPaVx$A+$3Ev4|+=v54x0T5=j9Q+jAqHmqrpZ;>aBzy`p%WGj*?shA8dM02-8LKT<-1EV6H@jE?5!b z7vE9cq3A6U)5EG?8GNf#VOl6g>g8u$MMuOLN6vaeRJsr^c&0Ls@Abv{Y4m`W4*u#T zW$3V^yHLIz?9OS63$9<5g(U76j zU6BodK{qJ|X=8zIDb=&Je&L>4In6v3Qu(fu2_e3KH)%1h&sb*)<}cO=^}DaW)@pbs zi&vQJmHCvf3E~c$qP%cInHLig4-(_ayACcAXLA+&>5g8mkFO(FO&xtX4T{?7`S5dh9x;JrC+e+AnaaqUvOYa() z7Q%wTkJ^*v?7?cxBS^kC#~mvt&n0#))?`<+B)1gW^x-c=5xj4L90heH~jX=Kw6hZl~>2B|Rfr)edyE6r1W>J3R49}>wUZpZbJ zpI9I^G;T0+0*gytm{?pw-+G$)p>}-P_=Q7>B2V2Nc_~JLsMZ2>-eL1ky2}l>UOs48 zG4XN|{R)e|*C`Au4?5qe5k5!}JM-Zq1|Bh046 z^1D_1OmQ}i>B(~voFrn7tZmT6r@;{=^V1)I7@nPT7%_ma?$bi{VK zj21byL^Z0cpkS71i|ap$qiyGT?r;_S#2F)E+4MW9NEHFV#x78J`6@m5#4HwcGA$wvCIwG%SP(bOn zo&Me6b3!EimqYeVo5NU|=%RzKSVD*&Y4Z7kjzpG4z=o+8 zEA&tu*E*qaRV3?2S;5@=5?&=)i{O3KfV&CyK`JTl;gP7V5{EtmA!Ri^iR6@k+e8|= zYv~rlN@9Dsz6Dk~SRjnIYy(-}LInPC^y;=y=dx&KUJMKjk2fg2Kc_#4Qt|G2F6`~i zz@h;!*A@tJvllKhUcGd!19CE`)@VZy6~x4SOdHT9|027y?Tdaw zdeh*Z#2?q?@DVc5@>;pn)C@Iyo0TZ&5?NP3x1UMm5GBlqYa@P$dljR-%N;M7k{8{;kgK*LCBA$ut!z0GB{Y8H$$IaFabIw2@|$sU>4Yp6*+!ZMnxc_ zICZ!C?x*6y!jG29j%L``@i)(9Fb-i=zgbmKTGiOQHCM}cczO0Dr7aERp_F7cT2}Rx zB6>|#lhDjYT{?3UHnD9Z$t@;$O5C7M33h3I$4W1;jp4Q`yLIY)HGoZ+ONzF;S1c|Y zggR3nK6hv{bn9%H&R*B82%q&Twfx!UZ$}EF^0AU1ip32Rzu)20AbU2990}#j)4|x2 z^$JPHbhS;S^nt4m$27IZ^?{bA{*qUPg$1UH@jK8y^^|2i=uv+T zTzpy0&5zPt#l54vrFAMB)A?;&^YIO(`F5s#tGHO0Gm-$^H0m(_s_go;MBv>;Ein@r z`umD9cd{_WsT~_y2?im3hb};ZCCbM)<{BdUkRw<@>-eMd;*Kn`s)!h~Q{FC2f`tj;fEtwA$bUVY2Ov;x{??dcrtiH zHD1yU=@@WS8gM3h2POLzZo0rz=*FxJ8d;>T2=39oyuCRH0{QCa56%o;>^ZqgE4hH2D;0n|7{{1bE_F$rJ4i{ZRHQIjHty&6PN@V+Bh*e4ZWHY zQO$y&Tio@l)p>`LuX4}WeQ9|MZM*o8vt!p(qS=b~?7q>HCi)@yO{*n~cNGnPTs*RB zCG|m*J0e@7OdIam&#XZlUB8y@`k2zjP#XNLJ_GFu@N&Kye1?^z88`A+AoYQ&gA&%1 zzrtA1@)9_+{p_oW`6l&aQemY>=v}j>hM!9$aP*&(b4vL|y~E3vZ@q)WXAr?_4NDIz zT*aZhy=1064~b_Zl}YD1O+aP+yL<*e_tDM53mKA;KbJK%xK=JKM@jZ~8=B(+-3>cl zeq$~lA@4ZmV(isTtkbikfuN7p!U`CXHd-3iYNb?Ik#RZt`}?%`5(n z{b~(U{kUypR~`&P+_ickGTRKfDmK~D;^CH(>WiCvJcg~AKp2(x@YnCjh*=?5g-sQ1?Z9GlbE|i!2 zk+D*iQWa9aTr^awYe;%xy0BO>4_izB;%=p?IqYDy@@4f;a883^pL1Y@=Kj7tHpNwe zS9pMz!nGE8GgPKyon-a=roI@TUfDzD3z&iP3NPG|b~S`+`fh5AY(ps>wD}#I9~57r zv=&*T%9?vLxkTc;dt~XL6km+F&!zbrUk5!^mgFOJ;ae=s8P|eXu}RKMd@`7syksqA zGBC(NiaL|@QK-z|qhQ|<8+U!>^vc0>+yP)uav_IKh-Hb1<)U%TzJ6GhFSduhn$T0s zh?QKOMG zm6i4Wk9dzaOqvmXAxke10FHW_6g=m;<+B0T6(^`&*x|d^i^Ck+! z@|G9etSAlR*|@qo9$ViM?w}U7ce?|bgk@7Bz{(}oCG24gc+}%wPn(*R!)`Qj=WN@S zjT|UqUI)rjEf~cX5+kDSG{iVuWP_mVa7xONku-_1H%w{_V&9ydd_MndhhAbV(M^n2 zfHa{zyW$oMTdN6W^{k48FkCi)Z8$}hk! z=ljbcdR!+3?Nv5xK2}nNX}e}}%&*83^Kz6cp{KG-uB++VEVs3%G*?(lg;%@D#B4Kb zd%3H>4)(eCgZ&ct2Cqm6n_ZZr?*PjsON(=JX{QvQ=OkB(S4C}>2gVzdY25Ld@y2Mj zsM-(??>~2lGu;)`3xk<6aB%G+~v_c5ay#sr^yegNci;Z3|q?bYEU) z$uU(6td!{Qsd;VXDVaz^q}bImr@+~`)0sqY;|FMeRX1k&eTUJ~0Ym3++2u$U_ES{z zN6&k$#_n!^_6hvs*!@~(=q0;;3m>~xvB29_1FRJk^nDSJ!V)qH8i<@D#v{X;^fdc`JiE8c-=|-34Ox4kVUyI`@xuP>;}v_-sD5@;<-4DO$)Rx@Rb1utYRl~yE8UVI zUBz*G!vpq~*B6gm2qUW`-=WdI)VMmxcjk?%HzetWlIWS{HeUU!Q0@skqwYpm(71c< zBynG0&1;REL?0_kY>)PO>J@cftHUiGr);Y_pcK5+@KE}WVn!cY zuuf>h;|Z>0m6uyLO&VB~^INdn2IexrXbh z-#abGFDg*?s2*`I^CIX~m`l>qLE01^}6Biu2 zax{(=Qwn#>1|>oqN<_6eWdF2s>$?&Bct}!z%5{f2CEvDvb}b2y`>2>%n)1Z&Rk7NN z^1_XX%IRDVfLE9Qtmm8?VoqGNW>uul*USVe)M)Z8Ww~kxmCAFp|?s)U6WP z?L_p*l5*`za-WHQ`!afG4sdwDADQPg6!_}*;F1} zYHgk4jLuoEx?`bMP`}69p`Mc2k~P-|C021rdJ86CjC5~!m=lvtc}nQ9OtTRxqvm@a zsx~j$r1GYO1B*6J8lOGcTBamy{kgoTU6 zOG^g8f{$DI8`k*$x zP=;s6OTmXNlC-SoWWUC&(Z@R|R-^OG`Q1A`S_0E1a%C=q0)v-(AJ#{q#ZFTW=KSb9 z2EujSWl=V}Fz#SWcAtA~ITDQK_WQonrHMRi9^dG_pI&L+qsh%Zs>tQM9rSsp*J_+& zan&ECyfs*iZ)$u@1{g>mXh&N%%7uNPDc8kE1*oc&hd zcvxg7pm4v8qgtLgzC^y+Z^9^&lWLUIR;@naEJ_zUb_nV%^U}Wid?x$LkNNhiS5D2| z#zhHr@|?q>9Y}3~<#Dxh#wWsVEE){Ss^fPHKZlI>w-Ltt_3;YNeYYYjbqW7)_#UK(ct>f5&zaZTi5rAO=F5=|O^g$*gCC4Rb$Cw#!7!8|oR-=-s&HptEw&m1|Ipr-z=J z+STV`{A@78lQm3seN)XX1T~roHCJLX4uvGh>6d{c*er+9mY(g*kDL#p?nK8u1H*^; zjjiJ}*e;j%XTKXDv3O)gmN@0%NG@?+msK$db{QxVs6+U}C}}%F_D@Tbp0M58#!tO) zdDA&1FzKiGPM*$)hvNA+gNe{?SIEun((j5CD6=$3xmYN4(BF!zPto2-UVbR8K}!?NUExD7!ZQTlzB^t+oSLa0 zPH%ArmT6k;ox4Ar9SZ%RN_!LPCLASyOR-+VD3290c;${|CRQa>y9IzAQ;luC;h&b0 zb@)kg-CO)DSyq>TeRz!^E~Sf0^WC;W&lEeOyblMxv?8j-NdA=@h(0clK7m8{5ltU-?XJy*5J2O0eE?X)6ar;qv8PE6f5`@8TE zoHcKUnaK#eEP~@t9uYj=n){AiDzR2vCE#u7A<9)_i)o`IS!FWob73MYJY>?JP^`3a zy#WV1*f7tKFHbgElB5r&KiMfM_PV`-=Nxo00rM9wLnhrsriX9g4OZA4CPu&*mk*<@ zl9XG6q(mtB_Gj{38o<1jN2c^U&XuS6yj-+GHp`GWSiKC~Et@?cD;N7ydmbEo|4@Ta z;ZK@+C=_8Y@+B_q`m@)c%xm~GEI&*p0&HR;A=chj&r}3Qr(QQJ&0(h2NJxe&N%q?) z7fiB#CxzSNz9Xx?xBsrOGLFo-b@Nk@n+^M>5u+iI7@=yJfnAPjQCJF0Na0{usLCF# zDW6E4*7K7y38pDG(z{mgN@#e1VA(S5XVXR%BUW}*<@@-JnJz1gNk}>F&CPj`P~z6C z2;8Q1-x)?o?0#mI=xEC&S#W7VioQdCBIIOqA#eJqf@9_NC)C%ALuPGKi}*s$CYYFL z>3}fQmHMh_2Jdu8g{l{qpU%$0*41(*)>}SWWT!oR<&MNd2#?w=5`XS?*To?+!j{17 zN9DC`7iReU6wlieWJBc&s}7QJySB-k_(d1UoPn6J$fzLj@Pnzlkln` zeZOxAlLN0XS(Dpg`>Ny7N^^SBN8Z93^IqxS(SEs}bAKqjtQ_X7N{aHF8bUDf6v7TV zdg<%!pIV@JAFPB-d=J|N1m@Pt5bC#opn3}r<~YFLVajmHF1;CqiP8-_w5peHa~sh<-*-~z%BQR5T!4pR4LLvNOvvEV=JbT&;#J*l zgQ4dZ@hof>Xr!4vOl-7>X~6%ag!T=lJ{N6K6Brsl-*QT)!BgNQk`#Gd_Ga~gFLYR_ z7)b|X5SU0=OY%JQ)#fN)$u+p&tHzot=s>qiphI*e&(}C8y152e5HioYMA2&un|U&= z*8u)U-^TB?`3cf6u4Fn?i=_^*WpQ^L!XPGxby^;Kty{3Aa2rhF2h(o0Eo% z#B!pTI=MEmBs|-woya)MEfN2)_rk1Dl6e+S-!f?;?{)i`A=y!4kj~DYikc4tEz!aU zs20W}^G)3V7wT36K^nx4IjyO@_@@I_1OxgHGd+ikDP)uPeaCs1`?x7|gpP{s_vu_`w+dZVu_Z1OKwxs4^C5vBLl>g!D4bAY^bBj7{sQ zmi9gKCc(apoW2v=9~GrRe()RF5;2xd04bpOQCDuzmxA19F5>o12D09CV%ww7S2zlj z2x!M!eW1t7?PAZ;d$%a6U4}eFlKHjz6im_;@=)o@hZYLSpY+ zt1C#M38YRZLXzC*rgB(SPRiD-t3`J6ONl=!O>nbZQbok*AuqVQ8>pJGEI(1zHGJt0 zX2X`u_NU7@M;Eb~dcmeZU=g%$K4YJ&j1yoh@(--0dFc^{cE<%u>UbT}cX$W#OWr=? ztIbljA8B`fa(RFO9Sa9lJ(j9nUlnL*&3->%QPrApa*}sQ__^&YDW9kmnK|BAV}UKj z!m4_Gzm%bfDj56N}@jGsQXesq*n%hcje)4 z%_*)<4L4eql)EoHgLvP$ZSRNZk5+4HDzb=!6VA8@q?Ymdqzg>#+q4d?$+=B2t~Wu} zUPyu)f-rIU)e8BoA(Z47H z&!f&G+~0@mTNwE)Llyn>qq7Tg4F;rXXxhJD3^BrttPx{d`MTTV`8$k)IOZ_=%`v_Y z1>RPnI4Z!y>PM?#POa;46BTvEDr{2a6>U=TqZMiiYjWjL@;RP&#zLY=2WTew`UB15 zU4uTMV`o`t2R_%Xc(4yC%>R!DVZANCsvMZ2ZIh1}a0y)zaQ^WN@wcCK;pI(f3#szW zP^T!(wSxJ*BQ+)^qBQbvOWB-w9#eXQ!Gy663z_2jtGlr<^P+_{>bf(<-HO1NA@{(>JnCU$c0Y z%B0uTD$N;rp$>Qt(c+t`osJA#uPhd6m`-cD?et>(7z7&hiGjO$;|^|3vcvS1J%wQ{ z^KqIypakl>o|B8kVpNAfJ$B2`E>Qc;stP8PMI$#QDRQAu4`Jf>pg2iys=oj~x@IM5 z?TDKDq(7fz$u{52f4@YCPI7K3>B}&6U87E^h+mOmJ&AIuO5-iW)iv&c3G?xOr1`qo zD(~@N@WdKX)f3T+Uv5!jmEAV7V99v!YC;lgqLf>N0Mvc~7aFk2`I8FZLyym8YPHr3 zyk#iE#S?zCaiK2JtibQG@ZDu71?_)B95#f@@$|F#QqN|o?fP>;mZBJ_-R73UYtj9< zb3?ql?tO6iMyG@CQCVv3I_<@ZIsN)Q7C$+FD^^2BPmC}w(+k_)HIwDp11*a_+!5WQ ztepEJTNy)LjpJR*Xl7YF=}=@$N4O`$%*S|m%S^$%YZaIKS3F*D%M3`H zUb35bH>lG~6du@)Hm}DwLk^9v)eC^Wjj2ZID@r@`qO+fjYB#ippdJzfxjxHImebEL zZ4ynT!gAzEBhN(&2UdLVd@A4NJxgFbDV_L-NnXfWk!|QXKhxV2DSKp9G@_qf?g9+H z`SJpf1*=M2Q>s`po38{sI=I(S7u{ol$UK5PW`I`kTH-yRrLh2y$ogdV)L|687q48f z_Y@ET34s^PVF zhG8Y#*BXdwE@+zR?OWVcIqbLra5B6cWe>5abG4deOpLM@`DRrZ*a8)FX++Prx3>N$ zWD$t1H>ZE+BN#nd7r_5+wTzI~PYz6mZQ3!$<@s6--S6GBRx9d-GK@_YpZm^XPu9^6 z@AX~92&@kCqi3k&QeU@pXMD3T1Ggw33>k0o(Z_1X2AwTQK$JxetFicD7V< z6P3nkX>c3h3!zF zH?pmQ8=FrbmGPG293te{go|7UaBVnx)!~Jz0(0fkJ6iLDQw!no&Zbx{Rb15lZtKhy z`pX01UIJ^IxVI3Oq5z!=KCNBioWtsUG3vMQz4fbzJ)Ffr(A#qw;J9^Pa*$+b$Yf1i z%X``ktF=Wu0k>~cYtnqV$#?MDyZmQShD1`R)y+}gXCjMBZKdtL0a_OwGIC+Oly=z* zA_rV2insVN4GCcr50kvyu7Q7X{^)fePXikPftlio}z=eZpIl>ce z{{F1Nfn&`|nLw&T^26-uvUFdcxp7wdJsci6KNZ$AS0)CNkTnmE->Nt8vnS#wOl3lt zv+4Tp&t)@GVCAMcKSEGT4~!fytt02?#mM2?6qBu1lnz z{AD+d@uX0kfzf-@4d1?dh4ZSu%@F(EsUDBo_)}IehSG3*N~yGmky|K_ zy1j~L`&OJa;)2fo-3fyr=%)23XS3_Ma5|e6l{eza4hji#@a?VQ z!uzo0W~pT&AJ%=sSQR{F)cx)-Y9|NTA$Q+oV2j?gz9~X?L!4nWO<_Y76=PAE=RaiZ zX;Pw{{QT7lJw(rhZ8R@n;OEGrnMSBYm$>3>y(eOknHz*+Zth0;HvkiqvTdp%-;~sY zcDeBG%oqLGYb4hr2g_Q7m(#fjIcw6FxD3R!97vF$qo@@H2Jf3%3u(11H+tgkN;`dO zjgU{UbL`7T0wCVPv)@NLzOH4r+{AY!ZN{x<-)t1W)s}F!p%>;$;hJ>nf%}Qa3koKx z94p#pJbX$#IN|PA8L+IC9j`WFk0U{r3a+PX5!i6%d%UUyIu-e-cYxal&H)>wdO4u^ zGj9kRIW#UL@--CN4Kr{0(mVWz0g(qQC!^y&rqFuxNz!?gzQZxsPwJMdbDo@c6MPTY zHcbSNz5SQDI^roJ@vjXkv3%{e48lA=jID(^Rj$oWuw!$)D2MJC@;z0!;x3F41d#(qqI3TjRdd2@47ssjXd6UI7rYkL|D20 zgY&rD;+`0k_7_lRFzRbYe}mZ{y(5c1oP2Js4>{N~q)BsB$y{h?>Ib+uGpjuBMOA7r z6!}l4{h6rjvgvT(FjJtcdO>ROdpUbk=m(UGH)8i~BRYn}I_kq$%j;+w zQoMs3PYUdxf|>+=B^OUl-MekGh?Pi(%eXXemURfof~*vzHlELO9l{d8@2Ma6jT;aI_rW*c z>Gt~-FhI+)0>=&xGb?+iM3#kGybQW_dSLE}DvKP!gYpmFybFeP3nv$H=)N8;>k|Y> z*)1K%WEEm#q3@2t*i|qtKvBypF{`?3vnT33<)ZfQsM~el849~J<6~!}= zUumbAg;!kOdz^?*qG%)6+J@Gk0?m~fWGpM+7kC94yQg@;>zR97Sc;=k4$kJ8wP1AL za&!5igRFB=7A?;90!M8gD3)m%?)8dTSM$<&YWryhp?EKssocVU~THIKg6jHo{r}wB_)qb*4wHaS0@F#%c-_QM2 z^c<33w)%n{Hlu<;*(skr1a4&eQ+EYH9dX^L%sEn;W$x{XrRnZ1`xrcf83^1i3dEpH zSc72|Sj~ommp@gJ^wM(?A)~FKG84ZXZL9JHRn_&?H?V;cdGC z%{reR_(PFD`ngu}U12k}OOcAtORdi7E>IrCmeak9a9nP<6YmgnmY{+}XHTcBJL{!j zl44IP-giG6l9M%xm(v7qTcemdY4HKv7P9wrom?KSt1+iOht0_nVk@=TXDDjyJ!o?Q zHfRUrJtwcK(DO3t(hhK#Nifrgd9xf<483l4!2@#Y4G4|fg8D#CgLTlzI(A{zIV4IO z5>$G4kVsvIP!tw@=lTy6S2VM_6LFI4Q{-~R`H})R=rNDN{5zYp-oC{V-FJFsAMK0_ z7n4oc0RPIl9m&n-qS`UA#kH(88rH=QLP>)VnWs^IEuG@$c%Qym!o*rtTx-BQCXtk= z_Z5zoGtuk>tAQs|MCU+Jq3)@=`zF}X^@SGleqf-kX6G*;v|~5#2WDhv4PO zjH&i&G2X66-7+<7@zX*@j#-*>z; zMhl#J_*uZdW6BJO6Ig|+EsVQO73^?qj^w`(mT5h?Os}PxCn$-nq?@Y zf%|FTm#_jq829MR+f<(K?OvkuvIE$&{*4AShc->*MT;D*rShbd>HJ9ihV_pY4k z58HKqs8fg&PTtrdZs&MO+h@OBTMS_?QRu1zX8nQ(UHfp~2ixj4?JT;wv(2A`gc7=I z2&owgTOrMT<)cH)BvR&JvN^tn-)p46-lbe-By5ak7Y_*#D{?pJN2Ym)fQ*tCPYH!# zC8O#2aco(a>`p%KY~j6kodvC(w&X&_y>}9#3BmMLwM*C2V{a6ph|o@o$?>*D-DuB9 z+>WluG&l#eYf7-7C~CQ>@*GjN&F{Gav8s`qw;wtc4LufZP_ZeTO-P3vcW#=$>>>^Y zS03fc?ryAvjSs`ZIuBj&xLam--%A!~7Kz>M?O02YNi=jJq~`EziZtlC@quM~x4Z8a zPImTYcosRXkL3>=+)Fofg#469A~jP#BHZ*jyp;8&WN74PrlJrQE}PT7WtGU?+o3*T zAbJWDrX7EMmG)fM_@UCV0$!Ch(5z#9t=q%kqr5CkeL||gE0MA9_^8}8b#WyDeP%UC z!ek|em$$s_7cj%E(EKr(^^5*GraW!M3U` zYT+}R#W<99YLMusv6&*9&u@eNu+v-emR-dRNsLAc5ni$$w@<%2nhVkWsFq;x8gi4` z=G$gE6Cq3W!VZxiZWOtXc}u57FI&#ivU(xT;SR5QAi%e_q?rj*r{(X8 zFk4v>7J$I~Rq_g^tALxClv?R-xVY!O+G)qoI==Iyy>8=0so2lKn7tm|qf=J*851bHOvZi{a=jginof63f8@XlD}Bnop&OD;A}=hWJgD2e;M+QU z8y;frS_eyaS_=cY?W}2W_27Mz#9XPyu>|zc9~t+ZgUQX7dpMJzDQXMm!<;_SL~Z0F zK4$S7BQHr6Mq!O<>HUgYzaCZHQoxBT-Cj`I6XakhGDsHh%JGD*RGD8%je>Ar>QWs| zitPo!HhtJ*I-Hf*9Czb6*->)WJI%h$nc95s>kHm-&3LW~*Tj%Xxm#y98+?ofx1i2) zY@7Ot4%IiVS+nMAIyDpVV=w0mf4o*MhF0!VcYJ@}0t>1$-*N#ufNS-smrRfBFnpU=vE{srkd_J?-1mnqW2j2YuHFB4yd(XYD~Se{i>dqdiIk z*0~vHGC8tXaXo}$?8$qDhC1}zx zPB`=TzUJO4lqWneJu{qfT2XfBbHEi7@-kZLSXKSV$mjTR=~EROumfY>g+|-P3l2Kf zkKP0f_)%HAjp|m~ak+mQicPz60UUFmTD`TDXCnuit0o#;^cbw=swL=V%l@Z0C!W=r zIog@qoS(#2w9XZdIT);4rezHI2P1)Abw;9$-L7L@G2PSw=qm!@kIYw$4neJXm=wz& zo2jfTsXkIq0G_qx)s}&~Fzz3WlfnG!0_I#3lg4XS@y2*H%wIoZ+!LDe=QefHj+&V_ zlK%0??dw=l+%GN29+h(OoP&Zo;<>AW`C?85Z$;ljwh0fC@0P=0`c+1mq&rC_t8W7! zu1~EBLj1!yuV)7nrW)>9%MtV)>UChiF+9~Ik(-tWZh6H>WL*4&C&1`K{**cYuCfO8mMWh1h1TDqSkZ1BrHz^)yWA7)2B+x zk?|)?`&X$4bZZr+#(3q^vxFB|{^pKX$6d!7xrQmi4t!Wvu`EFTRvVbcU$DpZIw__*t#b@!Hrh0Qq zvYp(Xl;YjSqO5Jk;4aqBUJYB^N^Z!?jD2ejCMCfB6V|n(a3cYBmCt%^Z4NOJiN^lE z-RhK&lk0<5m~#liJ0rj~@DwsJP{#YR8?oO7C)Fmb`4##o-iJ?Ta_2KiOWY@v{b91cb) zq7qj;b62(&Pyoj~=A=|r86D4hrFEgrD?Lhr50Gui^{JK&DZs{R>Mk3B^{ZhOoB#%W z>u5>X!gTJ8^n(n%bBeY=5sa$<4`Iz-SQoj$1En{}ZNr={a&ub6+{x4G3At3MJA(7g zOT2{ybtazujAy-HDU`GN%GF#ow8~o`EH=#b5d^HP5}UMk6NyJjsWJGvs)NS*BZo<8Rxk1lLwDIl9Jd^rUN@Rn9isz`` zLwYH)n*}59V-*7u6sS1^<~4c1Je3>@s_HuqyjKlf9nV$?SrCE>WbhlBaO7vOr|caG z0|Jl%u;Y)dVC0_0@qK8RCUt4|>*|ZpnI&IV;Bp-@QR6BcD!cR&q$s zZk1Y6LIcNMaa~bbSm&IIaybOx_Nh{*QEW}GQ;(0K?F4Xf%8 z8Lo2JV`x43u9nk@0W1LY?^Acs;;Q-`HLmU8oOI_E)Y-TS6m}e%H_T2QM?Zy#o?RZiId{ek1pA zKp^v2sWu31e*s!CFa#X@$C`KQiL-A*We!!2-1F3)YTEw*sppj(;GXrJ6x+UCz#R28 zaS3J_;10R08ds2f-E*Ekl|orY(h1|iIN+ql|GDQ-n$OuU5|=D4{MXG~MR zr$2EXOEF>(VOX~joE~$5&2;xlRX9-9hja-U*g+f+E20aj+e>2#Nd9~baZLF~T;`tJ zyut`M?@=n2By`8EdiX}Hbkch0AtyNp9^I*hh?657ImI~gr-DbVLzM@N{x$B=XJl`E z2DF$2bDYwNzjx1HT8YObTiKg_cDGU>|CXl>p>t-l;7Olo14gnKux_BdDsm9*tHX?vuQcReZCby;PZTS{#E; zOYJ*UW0EQpHq>LD{{Wp(c{*dM^{C97&N6a3eQOyr?%VdtdsqwjN1_y0b z2XG??0B$v6GR@Z*>sYv(LA%`0jq*Uj+g7u=h{i^0tS2OAv8!QN$@1_sT+c&B`K4j~ zffXo3X%w91kyM{d)r3sV{oh>F#zZx32gaN+7~7h^8UY{5HyW;rG05-Qts@UCkC-1} zTgF|?XB!giEUWVHM^Q_$ae{O2QicL010>Qb9i>?YGuORrnUvMqE4*YvMh*$&pxbm&}(3+Y-ApK)M1BA5zRcS0;)$*O>kE#Mh{V1B&=fe+-W6GP(?Xim!aVH z#X>W%_c_U_Q1i$&E=-lFKgqWQb>^XC&KIR0Fl_dynp7%4KQ(exYR98aH`tBaf+{8Z z#2!H$QE5fnhs*$N+D~eR zk)pW$+fa}*nuX-ba5x>RH;^dGoM*AB+t|sB93E+?+f-ah_x#F8YC!9~^SF|D#WcCW z&*4#w1})qV)~zc9i9-@NJc^JwVUCBXHCKMc-OfqokU7BGdYqcxojbD`w_?*tk^nj4 zt4hOWazF>6ptxSRIqy|vkQ8iWoYzz#V}hjgDl=w$o)27mRcQ|Cdth|+t3P?ZVUK?F z+#xu?&+yl5U%PXY+7(Dt0OamHL8u*<%W=+qYSft_PSrU*YLtq8e1lJYN>Y2FT62TA z0fWIbEyj5O=e<;tOzzJk(y56y?%TT^PHH7dGLv^r8;IfgC!b2a8wQi*!NTO`x!9)M z`*Jai=C&>5&H%?uXV$QsEOaSfb5(iT%kui>tSbQ72b}ZoRMeN?@C8{$wFcnZK>1rasexlE@q$MzYb1;2Oqws6alsil!L2kw zyKi293abbKnQ#tyCbX?#+~khKjMgpL4o=z@VokvAI4jc?b})A2E?dxgRB^`phDQUb z6`=|rG?fPgb*^bkTeAsGj*kZ&zO_32>{ASFk@Apg!bU?3jB%RIZu*$YrJjPSjo^&q zy2jN`3x7RPH0gVPzVg5E>5aNP}Q@iT&>)a@;& zVImEqr&{Q3XLL-$T_Q#TmdFdNUm}je|NZm zMr!I$k{Iwh3{k2j$)t6W$d4KR70=9j)v-7!o%lH9wR3RXpSlRa{Oa(VbYD2&4z)6~ z6lHW?X}4zwC)%?oxgT)u{{RX@E+1&)jO0}bq+%Nw9gn?p)YKy`<0hE$3j#4%_Y$dK zK{+0kJdSppeBWNRnOzg^yqum+?Xr_oUgTI-HhZf=U#jGj>ze2 zoc+NYiTQ>r4(FD3EJ5_|is>#?5V-Buur7zrRjQqo>#}(?rS4e4SXJiKmbCNSwAz_?zjPq4l3ls!^M>!QbmIshJ z{&k?DZbGWb!Q8#^R?q-dKs83y)UX?I#cF^8kOwD`R|#7~qAL24g#mN?U9(JO&V7CA z#tA1NdsHlN-Tf<9YZnNu*-ZSBbx~8tAi*Sqj@1O%R~Z@25ucoZx#PE5miihftD6wW z2m@dQjEZZ3T;v@4bf_XF01ce`)uML;j=0Y?P+A&WQnLgcHy+gn!B%-I^9A~vZqIs7 z%c)ke}!Tn z)EwI;84L*=)T47Ac;=I4^T{}?D-!{pxZnw1+M;PoH`ApnvmBiK-hfTRZ!zUC=Hsh zvgNRFIOFR_GCAiRHXOhe1b{Kr)fqDGc7Vgw)yI$?8yt_CsypNzqi7rqRjF9zl{U(S zUw1hN&{CjfZ1P1+8AycDlo1F3q=sMRUTAPk8O6P(->K2gf zJ-sQIAhWRe{_H8TF|7$tT&MUT>FrD@mSpd%BeT`Nxg%~;SP&~WXkn9)J9qJ=179TLKsK(0YpIQ667W}|^ zXQw%++EOGO{IwFup-E;6Ppv@Blpy4R>E5)0xx|y^ZHipuhAIba^{6D945Tq9sm(FY zF_VmpfmPkc;opk4xwLk;$yk!aW0TNT24-i*2M4WKIrBL@gZNWlZtmIbNlMJ$Xo7O! zZqKjMwymEkRZcdZGgwNkza!SQW891nOp1!OW{XK1u)g36cJJ?2k@zPgt!Bi`Q)=}?f_Tnqm8=Dhc|S_%?X8Cy+&Hc}n;Rz6 zu-Kr&XB?g@YTDTC7y~$|E$w&%uNkdap(TdUe+uTAl}YGVjxOB}F@xT(Bu%gYHlNb1 zC9`h(hw5tL+a8QgE0#*==9KPd2u?m_1dmfw1jqy~->qp2cKNtHIL$d>Z;&$mD+x%# zQqZCkX#{6>D#Au{z$K3)5yf2c@q@Pm)}{-N2*yQbo~EsVfT2cnR}V9aq?>w|?c9>2wsG3FqLhaNr#ThQ#x}{u;p>{!hEUD(WaGbT z+ojQj?9QGk!k}g+KGm}f_*KcyYmtq^5ziH(E()^s#yZosr!3W$hhCRzpa&!;ty_xm zNyh#=S0cAvFjf7kGq_-I3BvGdjK_39XAC(t<<)*eUWR?c07%K{*R^NQwIgB& z1oo@b95>x84Q5P0+#4e&y>ZPNq}nqi1h#Y9sLPWZb{_R|R!|$R;A*6&bVogXtC_=H z5!D;m#G3#frm-#oC9p+q&Hz%QmaGepmv-)cmAyDwU7c`ETSEfxd0+t_TFqu)-@-Glm7R%Up19~LyKqi(>r=jS*!DiPUGv9W4_fsoMDC}) zq!KsC2;g=VRh;CP{Dn@$G=OAdtw6vMog|q(m zuThHJj!dW(%f}+DoM!^HA-LzBbLmrNw>oIeHD+yY?~zp|V~pes9P>>QagKAID!jzL z4sZut*1B5e>GT-x&Ou@}{-0L|u(ykme-6Jo*mQyGQqpG>`^)%_lyhl%nobRl1%# z31*ZG1vRe#F8fNKy^7Aa7%Q9;jHc!P~|vaTy#aIIN{4#N)4HQeb(cD90S;wv4pgm8izx z?ZG^C0;7B?a=rfm8kY@&oae3uMsc?%IrpvOK9L1-s{mY#k_hif_b>s-0|J&sImUio zwO!nY$81)rrNr;to6RjI?16!d8c#Hdvc&YNhCtoOK9vJ74V)2G8C}@UNws^LZ8ivC zat|0Zk)6-UJ%0+Iyz`!WRoISHXNAu-s#+1rc3ni|U<#b%MYm%HC#e+>I8ls`dKyw) zaKz)iW^^h#5y)G1K2ygvPG!j%B~NTs$s6W9GJPtvoM4c04n=d$_d4MO(MEI|IV6t$ zxvEkk?B^Xg$6CKD0tq?inxfqaAfKgksJ^3gth6)oOEAU`q2| zS5-8b#adcesL~DYGEURQL*^3slGWT+eBkckx>GsHQVwy!?MOVnc9I*hsLK<_JG<_g z#zDd5amFiV-E*{b!NyHzQKXII+_7$jW!!PF*1e^;dyU&k=ZYb zAPD&w=cukpM^lKU@T>{WPkMY#1284IJXJu;=MCA$Ge{-* zn?Af&)QsekX6#aczcB%ar=?D}WUw269)`K$Fe4p&{ngJkv6*1bEmd!07>BV6}4|O02JUp zc|NtwLpBsB^v^x3P6?Sn%Q4Rw#c@ft5Q{gSVlqBsP#KD*NC!M%)k7yTVmAU>z* zToqC^jC8e&zF`A!Dl@>U60zLe^yY%(6V!}xP)g%z-JX@_)ol*eDoFc}C4p`@^{mO5 z5TLi`R^)xKjP(bKp*)#q0YOv9C#`cyv}+ZqMn`Ni_RptUr0$CmU%A}#Qp)TH%tmqA zs7T<(co?pD$98qaJC!aZP&Y48`qw#gCQGo+O>1083ZB4MJ9ywmPat}V>!%)vTpKax za9n^#J!-kgJahtyfE_r`Jk%_5z=y!cO75c@D;;pyiKHB<1Rq+g=N%c3rA*s*obD&- zRU|ka{J4GdBl}R1VvigTWo^(4>{k)RxE@@R-Q; zs3bU#f^qFpx!~?R`qgHWE^)YkKJTr16s32dUe8i&<}BxN%~z0e820QsfBNWIGT6p4 zGf>LMoc8Hm)a9w0otV42o`=$`!zmJhxP2=(&D!`N5_zRF0CK>45mw^gQ(9Y{B1{X6 zp519>aNGmMV?}YiWzGORVAa%>UOoss)@j*T^eMGscEb^nbJChr?#C)A6a$Qs4r*Wm zvB_d{o@;J>E^Eq95WxyEezl_(dyp$R8|DBEeQQNeApE^5d9*1z4`m_pdG{SD`%~0Y zxhwqzKWgLdP~`fTcF!WVQg;J@2TYE&wQi+$?cknB>T5dKD=rRqcCCmNkKPy~y?C`{ zsprZ~qUsE=JhA##lmiWxT#Ba>?2%45BD7;1=ab)x#mK{%6RM1p)OM>XFu2D)^u*{m z+uT)^`MEu6B`p<*lerKLpPL6gap_OkH*wf;Rs!VoJoTvzLuN-OwkT33+IJ`si9-?1 zM%fLK+|`#;j&Yi(RoQYg!RbJ`?jwJ%2X{Mh$4ZUVebof|=9RZI@HUanA!g?Q)y8cP zn#idk!Rk6yHXychnzrKr{JGDqQgBZo0qtE7o$kRqq84l}&^h&}SN&%>sSbC6k)E_= zPUD`3it47;@kB3?QCT6kw-Y^?{p@fdhHyXRC&fTl6%wSjg02i zvfN@papD=KJ%}D1Y4tjN{3*-=`PAI0WbC#s6w<4VJ$E9M;lK2@u)uSnL*d0CU zi|+FX9dXoGRVe9X&o;ERC_3aEAE@t86@8#^FnAudb&!M41oOo*RBg-Cr)ubn)a9DF zNU8u>j&sNy)Gd|el#%OJTsFXP2tS=b`dB(@?tNP~DSo(5?-V!&s1I3kgk z=IxR=#VjS8oM4I@(AFzbMI}*2GT6ZatgJvM9mjf)1h#R3+>W(jMpyuH2VB-}Pr0O4 zrHH{Q0;$e9HMMDG(z@_*RqU;rSK0w8eJi-rwEeLT4o?-$Qlq|x@sqi8OtIR$uI!5K zEUZ3E;}{$YtEX6yK+X?r*Kw!Wmm@2M@WAtmS8+$x^Pm8EI&{M)W!DR^qh)km?BSirk9K1P!-?+OMsk z?3q5*!BR}ZQ_{ycY}hbjpx|I)lv?1DQ=E6MlkALtg@z9}rF&ej0E6#YH{9ivj!41R zx%cZ;-Vv|@yym*5w&!lpN$*spx7vAJ;MQ&2!gD!kEx`@PL(-{B8tf_qXB`D}l0ZzY zfwUfTS+@~^z+4bI)J_e(44Y`@WRC-YbB=S`sW=Cr&N|k-s&K^TJ?kPvo!tdehNL;R zu2yq_gXvXFhdhzj<)_HRwl=rrQrPLbuBql7FHODF7C*f3Ld>dt&M{purrwDVv}9=b zB(_gH;8oNmNnA4x*&qt^!|*raGJH1w0ECuZ8BMDIOeZDRp~?K~*8UX!%~xJ7(*ftx;kS)+IH7y(7VJkM zCweJ=&lQB>8AVDgw@vj&Gv}8gJ~7m_Oee_3Fb5x6%wZ%_I=ZxYKQLt=idB?kVCT5S zd9@X{Ekzm(?4uz`9nC=`p^%V4$6R)*@=1o>$YMQev&c_59QCg@qq_wJ)}qTGb>Q+j z#ZZ;TGn~|~FkRzuQI0SxK3Ri9oRTq)mB~|cSiq|>EHVi6=CdYZxl+LWD%(Eg%AAmE z9_jFR0&q@08kadgccI$|qNUWBQ-V5IHFqg8V>#osYFy2?Ipv2+z@9+PSPU`ztGb+a zxzP*XLbSv&0Fj(j1+cqtq;=eB8TNvBH3Q9;9XfQcN{nV1T=IU$HrnS2_i%5ms2EaWJdaUpBhR6dv(#*g}d8&@!HZlmu zLtRN&*7ib3`P@fyz%^ajfdvlVS{ZGn-X7#8VQrQQQ zOqxt#d*Z4W&jXWP)bC?Bw8y)U2?w0@sMcNo0L73x{c0AI=uT=ABMg85W5*TM321K@ zXLCv!NRR?DdmPrJbC!?{)y3uCw5ov z=M^QXrpu8A?4+)FsdrOj&f+%}_NVjhTJpr%JDxRZafVD_lf`sUNLZcBJu8Z|BN-&A z>}#a7l!jGo5_{KyQEGTnt!o`j1hzAR6jp?I0Z8b1=CUA{=NRdn8r_MMt~TU~=WkLa zJxNp-{{VM2ax~8bjyV*_##ev=!%mSF`N^hYN3J`<~{SxT#)?4@BredJC?|9ov~U$ zyI9_vOo7kLPXmsoqE=v~fXC2vq~wx!bRl39w=2@a%!a68pa+4J}&tJ-*^ESp8TS)2kBVQgT=rfp(W3Zcu3cW)G+*&C7wMlZyE2eH z#}uWE!!NdsomHlX=7T9DvC8L@nt_xU`t|j%vphxn5qxUXJWzD)Cc{nf0*FhrkWJ;D zGH^j1e;)Pn--`St;$H;#s(l;9+8zFbsYci_T*6d0xIGW&U2saIIiT*mij74rE^)>t z45VXdB%IS0K3ffg+ZAq9!(eU>I;j*C3`&p}VC(Nwbaf@zL`{gHiTYNZqy||w?BLXP z*8X__D>24vuhT6?LX{Si%S&@n}-L|y89b2CBOxE>M52sYDmZ=gI%SqkP$|9OJF~Qeic92vcm(8`K)BQk)Jl~!WO?FImUX_Ep7lHay{## zXh>WU`BhhmN;W~=SxPUd&nX0NVca1MM>*_Gb(b;ZHZnNox%-vFX9pxzMKdKQ)aEV}uHr^UJ5~kO z#C(&52a#PZz$jUWBmvXbyH5oCKbyrL4z-UGd24qatc4-A8O*FP?eAIQaS_8)bD#V; z<14do;NQS2?}|~}Yg(oJ+Bb%wW41;6(-F`Q{{UTmf#CZsE8*UUXW)xXD$rV7yKT9V zL6Tma@t;by@UF{Ju=pKiV?BV=(lCLc$12z)kJt6B`>i$Z{9mWu2;#Sj-E+GiF=NzV z^c^eDsfn$Kp&mub?srpy zUbV057q2FnZ5u}#C|KlX`A4~~j>6jR*Tc5f^WG+09`K784yAH`)~+%b{{Tw(zr|h}zwpi4M|2q$Q}Scen)R5qUlM#u_?teN zZ9Liyump+rj(-w**O~ao!v6pfH2rp44MIoPEFqArS0tV11oh(|k*_BQhRv$W+q)=j zX7#b@e_~f~=4j$NuFy_>%|`9DK+b8CEVlQOB&yN4>KoRnw2Wh6$ZpxL_S)R>Wlm9i zuW|1w3Qpny9+gSoa^R9c9dSc8T!YHus7WCKhIr^JlC$@XpsXaUsJ|&7V?OnVb15o7 zHDcmzsyd$4iE%09b4nBJc2kNo?&lzoPFRkDv0cwOJk`sW-I0<$g0iH>!c-95GuYRq zhK-S>t*Q~^!m;n^ReZol$VTsabFmAR!Q+~xD}@ZMJlIMmd0Os~A;_3u@@ z&U4N&)Kgkj86XYE*QHnApSm-T%Qe+&><-P7ZqGe2&oqM$?UpKWkZQK$pP1n1kx9D^ zkbC#7qHeWTB`i7uNyl2dZp5m9!*_g|qCRH%fLgT*g`8mV-jtF^sMNDMJ66sZeGP0T zLFWhQST?K_tOG}zcPDjjh-!*G;R&uiWVDeA3OP_z%v^9*h)bVH{E!=Qxde}Bb7a$G|Qn!gf z0|#;HdsggGZHYk7rxoE%*`GN%HFD%ka;F4*wY6_C*ays~xvcn+M%7c#eAcuPe5HsP z#{l%MHzby(Jnd_9N+}3nG4KBX*Q<)_laL8KX0z2CZDMc;!8K`B#y(7e(y(u+qdj#m zAyPmja5&b~`;!LSd@pL(exG0Wj_KZMq?l4wzt%xPDH zkWclj_5oWMIX$apWG4;EoOG<|m4a^hNgd5v-0Xy&hCIv9L!Wx2#e?MMBZ||M4cW;g zjD9sqhCcrQUuxbjq1ziWx!j|u+G#L%@Oj30pn?HB5uWsY<;vrZrn+FXxzz@)G=j^# zo<~el20OBM8Zf~Q3Xo1|rHJiaG1VOw?jg$@XK&V=4i_h;aZGT`oN-1Q03W-KXm48z z>ru?z!8@^0-Mrn8I}+zFcA96=KMy}+pM%~R(IWoPvS_EGQ5w7)$k5L z@6CH_=~oM*X&P)8Z63m1kVOiBk)QtnRx8DP4e@f;`sE(Z`rh=sSd-_;$pb&Fd)I_D z`*yOH8_34z`INT+l6sG7`8+mtUo@(nZl7{I3aQ5GN&L>YR!h0GAZ@c1v}u4DhDigO zrJ`Kg{{X@^_Zo>Y6;ej_9I@b54r!oB@ZYu(~N&S*A1!Y_u7q=7S4RDRFiRa z8*}YnTSgF4=H31WHA#D^BX-PdS5n;=?jpCeL70foKU&t%VZNU7bE#ell@BVp0fsts zu4+pw-!dC(Yp{@P+W9y?on7$eoh7Bs*?mG%=Q;Bv$WiHv#+?Nk$}(CqdG4%9sogh( ztZ%gkc9F;|sT&Nq`kLi@U7>hu;y=S%n|~O1TTjm4^^J~ zQt|BCY_|cd$jTfZPELPJSFCt`AF)N%IdX%ev>Dg_ka;e#~@e|^g z?2++1!Frd8HGKy|pIq=olNoL2iNTgQy5NrZ{#EkiaS4aZxbuPtxAr>?L0IrV!e54S1@JCAg#{HqcWv}f|iTa<5eizzlw)S6UX|MGB<9mR26u|B= z#d{Rs_oirgPkisb^%sGCWR=6YO|O zoT(fipPJ?k0N zPeYznJB7Wu1$e;rt%#r}s3xU~-SR$8wWN__VIhWi;8ZB{895b%7+<M0nT}*(UWUbVzdKcBvnZu7|0)`bZrEtLO@oIs!0$F(Ddn3 zDtBfwdK}cTVm-JAoaV8vA`6xn$4cvFgcQgF(y;E6a+Sf(aqV30n_8I4T@F6&K>MKJ z@@tj8Tq8Na9QF3D;_)zyG05t1#boJT7rya@?d6?-D->fA++!*`kUi@v$b{} zGDp`n?p_MhMzP^N9?kYgrdUQ1{I&bwE;;;b#{7HY4R=BDs$2M1PkHpyF4>sJxZ^nE z@))n4&M7+3jb@u&5!de0hNq~uzv5pH+-cVOnTPDN0ksh4C!R^HKNISnD7^6-!^F|+1tpZOpKdoq zFmM6mpURwQ;vF7kv5iX7QQJe+=hdUqybANnBHijM5Gshkw5J0H)2(sd5ApV^;tfrq z*6semGD)=&n~ZktT$Y8W-@sDplC$iN+&raOsKrEn9)}Do#k+n*9Gy4lDj2saEVZh)WZUj+PX@Ku(fXLEOC zt1h5hcG$7VALQ4=<0(ZZnmO^gbZb-guwL=-tGM#X86Eko`J`5hjDzo5SMbYgbu=;| zR#SonVaiC4B;fj2%+8ZfbLOKP6z&}E03L#{?pWoC<3Gx@Wp*Kl1Kidn!E6#(HEl|r z+0zR)W=!M)0qIpEooA2B)aRNdQe-YPxCO)ljdkIYALRAhGZ z26@Q*1$r>1S2cuY8QqhfohqS`x4(8Hj8x6Et9-+*4r-eQ91pqu;a#+;tLjT`*0{#| zsxy}E1ypi;(}R(W?W+t|pg)MJ?CZUT2JCgNl%2vUCw5koB?%i(7^qa>07(bhq;40m z=e0C|&Tt4|JJzXKu4TCaZ{A}B^W0O$0|I$HF-9AB&r#N%6ZgA-=g`#$wA7Vb39>r|Q925ZLb zWIrxD^Hw(>U)HnYByvw3`Kk9spT27Oj+ng;9tglAsruI33UR>Zs>2Z+?awu{1SGPR zz-;mlrF_KdrhMd`^)5pMcwdz6BP7MQPZ=$T$9 zm&@C?I6Q+^Odtb{@H2|gSOIK>?UHIjgBbu5j+M_Uv1ShL_cBTinIXR}YA_L7kixXt zGJr4xwM8TV$BqH@?MY1uRI!{Gte71MsX+(i=Z>C~uMQuOakr?bOMdYJ@wU2QI~ppi zk%DbLpyH~@)B*-7SsM;dY-Xsup_9<(y>CuOR3@I~S&)`uxgb_-s!EVX0TrgiIczZ> zEmdR%I6b@8$)?Vzw3&@0Ln;&=4oy^&Fw-6lYe^p+PJKs8s>$&=UsuqtYAdHUHqR6|l zI^z`s#=|BuHy>KwGiOgV%8Z{r2_S*mnX!3t$34NTL=!GsueCMC(SiXa){&EAa*c{@ z^GYzp;CHB)vlD^enzqP$U>|B=jITfmJ!@-R&CS~ODuBa+#*{|hV12;$=e1o(hT>Qp z0bfOa&;I}h?mi;;@M<^q^Zx+CH)SdpVHQ?a&)xc9imS#d@?<94vJZiO2K+Q@Gv}^OKT7+X!Cw#jJr)y2Q3RppEi!^ag>-22qEbqzIF5@+wnj*O>{J*)JcEZ~aNMI2Eg z4g!SjTwjYkFQ@97B)hF5k$~gn=l=k&UhPg8!qLO1RF1vQ3`J@<$#Tvo$DR}Tk8OEo z)^Bv}E<&>PAlI>2y!RSnFm{m&<#CLCYrs5f@ap%&UMHKxI!rGSKzFQTYPjpj_3O=2 z@aKy)S?o5GHM%OC#$4rb*1iiFiK~~^uO<;y_6x9G<7?ir9l!ea}=p_Ay6^*@>t^|-o0Y` zSg`QtgJjj_nE_-QNx(e?cs`}1$KiDn#WcWeW-XkYdWxyx`^&G0(odq@yuV<#+X*fR zX)OTu~eK*2`PPmC?R2xy7?*Y>}u4_p6as7d51*NW`CB>Vuc+yA7 z!91_fR~~DIuTq~S*D+C?xzlmE<9;mtlYA%Qhl|BtAJlGiN$*LP@gYCEk&pW)r{P~E zc+=ta@5A4Tw|*VGm|ckC5d>9<};E;$f;?L22Q=Cgp9HAnz~Jo}W$)aDNxR z4PAKN+d|ZBZr0xZ!ZRGsi<3H@#*991S~GY|c&JqS)$)c9{tv?0jhK^(4m2D_~~ z)QyUyHapi#seCK(ABMKQ>q`u1e_cL>DI8XLZi9dilE@JJab<6sQf6sw>MEXy9Aezva76CWX7b9Kw?Kv zrBc(pAK{HZ#x`~u#HUrfalR1R_fbr- zHNKGVvPoSCW*Ns{O8TKZJ>kC%d@x-zMzj|9<`cAT22A4{kJh?qG`mZEDp78b+uO$5 zmL=d5=~3uf9iY9M_fe5FfrA=DLoctc~2b48`4{D}J z8aasG>-V}I-&*LrXRdfx!gE3{V2f#+FCbD$9+>|CJ!_h{@ZO<6#A&Yd)q=(+cHbiK zayoHU^^XO|cW$$5+Kb$=`J_L?kaz?1uPU8fO*}N9oz=|eB-W_(jR(Z~e~WD+k4TnN z3a(^g2n;&|`cph#qsH1^$3=-UJk5tJeYvj`wfL`~_-n*g{vXn5>is=Dl1lX1$*yTG++fYjO)sN5fI+hRQprl6Fn90y0vC70=pyKDvhHTf=?kO*qS@Fa~`q9{a;yAc990%4dl?=cQqZ z#A52hmJv*dbF|%!i_8B2w57%5*DDkuH+e`p5$RbT55NA=_>dYzEfiogv$r3GeE$IB zPl&f(6xX2BH6n=f&E=^lrFuVs{8bDw!Fb{(GXs+6XvKN;<%pvMs==f0d_KvlVk*kD zMWl8=Nqi@D4E`Qb5`Y4XeJis^1pE5e$$k^~qot27(kY@zh}(_B7$1)&y>8dX)N6~gyQ?WhT=m_=wl@s+q$4;bfIWwL`Rm8uw1>kl zhZ-~7c$37I7IOv6cHy^AA;v%mGI{kpSLT<;AKTx?`qzVXX#52`_%};rV3#-_YLs(= z4?8pMU$5mfu^F6sqYK6Ldmk%ai=zGaWAsnX;~dv_Ei1bm zB!k|lNUC^JI&)SD-5U?#6<_ygnI}1{Xw$M+IpbqIrqyD^V?C;?rv#S5`&G#qOB@`J zLs`TVeXYB<+IRw>tSIgiYJJp$w&6Oh_ zwN<2TxF8(!j^eu_taIsmvIYPQWUby+d}?H$i=tuIn@ zxM!wmbp-FCBi=~*jtKr#EQLy|V?LCuF@cfOwKR>T26L0%wYsp|WrQucoA`PRRmf(; zpvXK{cq9Ta04K5Hrj4^83I`nKv(ckVq|!PFWIM2TRpgWjMjJm$zz$h{^8ug6v=Q;Q z1E8r)>V;1;aT%YX!5*fr2W)-z{Hr1fK5o6ZHFKZuezi9{BRvUXhieS-J*#5g45%RU zp0p*t0=Geqp0%YEXXM}o>&1LkYOkT<%T3Ac<4~CjYgQ1da(OxFRG|b!y$?9zuZ$?~ zyEV(s?qNNPiX1R#@_FceDu0#FLXA|Fn2v*v`Kb|!7{(528))Q{>R2i=3k;m}sM%GE zU>s(pW*J_4QVpb@MsvWWc0{x&$c?*dWfmzJMoch+YN68rH)K+w{eE4C(^scznM@%H{Qjp#DkN^txD~( zLbwHe>We#hg>lEHYUzyb00BY%zH~-y63ENWNyr(;tygUC9Ak<_lM;_k^qasZb90^v z{#DZ%S)DPSfKW1#>CHgMLh?E7Q>%^H8TY83Pce@neKT7obV6ljk1jKT#YeXcaHN{D z%3F{@BhsK?<&RJR=DRPP^brS zk(&LA_)lr0d^7O2m*Isrw%hH)IXstffPWnS04n^*_%HpFAH}$D^<7duI9iNG&e$0} zPvu^}!#GQiI0c0+sv~dnh)~ zrCet2+n%f#;m5Ew`uFhH_Pza|zAJcU%Te&J#2q2$xC1sfzv$O7G5!`t@5ty#_pY^* z<8Yr8T5rnh?^_w-Ybvca>+?=h!?sX1OK<$QT%Wp$&?45+LmOl<&XjPsiO z`PcPZT^r*RHZWX0wYI z%~C11D_i65Mpq#I2ERSV<}t=qRFcs9MUwkW6Q?zHeU)e7eHY5K)fVd9ys90WcUrxD z;w=xu7h>VA?SzA=^8sD8@ZZDVi(2Q2FVBVGkc;3#;knLu$gga>_!Huv6)&Hz>k`Lo z>4@#)%H(IMaNf9MV=hJKJW|N`V@JJi&IFk_!Y0|+U35kHM@bRu_2n`edmBU$7=4uV(~O&rB=-5_O&mhc0R1R@ehb~7M@S| z_=U(ZVR9eaHJPkwJ~NX`Tdfk}OKB$BU0HLmcMI=T{1DzD(lnUh*Fn0975&_dn9gb~ zTjPeArg+*71|2U@C?wnVpCp)x9Gsfzt15Vks-)eHoAXA`LslIk_8a?obs5Utl>j#1 zn40uccNA98S~{5;MgWj8`PVV2YwNGvTC_It#z|LM6l1Sy>m$?WiX^<1l2+OXUe%2Z zOe0=i&1vR!#x2IhJ#WJLW~Hxbw=FZzd@R{5NT#TE}5);d?vnN!_H1<&*a+ zf4WEi09(C!+*+UdM%IgY$R&xwpI^qS+}(YtimUv=xa016{+O+*&zhUG+Gdf8Ig1Yu zTI-$`wmv1$tOVBX7^R#7B|e~#K_;`cUjq0h%KjUO;=i@Fl24k>-cmu&T<525mAR_l z-C5g39jwKiw|@TsT2Xg2(7@BAZ!)RhxN*;=WkWEXDsBn3`;Efp28-bB0zF~%Xx{SH z;IaEG6UYdHKAVW{PCxqfuc;f+{QA;rf>?Ym%V`3fE>w@=_cgT~L$i~5vLhWfGp@8x59z)h(yVkFace!3nZDM^ zx!uU>#~o@LKNDVGYc~;-fd8YQfk0f(B5 zTO@|XaZ3$WtxszYb!ce@>_D;G-03pfU2k@ga!JlO$EA7xv7tpDi>+?-=o!`_w2+wV z?s>0Y)NSChwh0$3*c-FWV=|St0gA)SeAHYd`B9t6$N$rkBH-%{UU`4nDTyZMPqAP z)R5W$E)iUhUUS~KmS=^8EV>xfpro(4%)#JK320s>ZDLVxCZg-Z78`-}tDYh8bh1vC zmJ8=3QH9=vIW^>(j)$!Ho5t~dg7#)r$v-(AdsfiU^?wdu+e@g=<=QD5nT|;{;$pKo zI7)C@9Q@82MkOy0c*DiYvFk9tbdi1Qa{KC~^C{I&{v#m|@Cv(UD0BPTc3$3n~ z;u~3h&-PoNFzieg>TzB%H;H4h@GX)g>bEeD-UfW&{VVCO6>E2TufyBxE4J9CBbJbE zY>(w%nVuonZf$kVTEND_Lfm8cfG3*$Ca!S|&Vr?7c%P_vVV$>#l^UH-Xp`eD#*<|f z)^jA22P8iHm2YoOmGalcuiA^^_3oxDw2u;9=@#r;akgwo{kd;`IQFdAu5I-TX(M}s z8wVj(eSK=4kMOq7#hxb2w+yhPqkA9muI!f&mSE~SxTq&?>gVdY-5g#f9JqN|{l-6p z{8y~q>C)=HDAg{nuVg!5#_GU)mol+_D(T9V9$pB9=+lCm!u0A zWSZn$sR2fK&3>U2`lpBu0>_dAbhFdFHBVLxQ1bXGwWH7A5rgAoC2htqoqpCmTtHeRz|@qf={)2l&qJTVlxKMUHIhos^z%B z0IoUu(lZUD1{<4?r9w*}+Qb9v*w;#ll;lF?c9lE=cmlKc66QuYB=Rc6vTny1!91Sz zSLNJ;X6DD7f#9y%D zdB{wkYLET3ZNEy3%)vjxNbS;@yef`4$4YK4!XC^<;j|EGGP_$ONa|ZTe2g7eSPTx#_!^6boQq){n*0u>p|LCHudgl@37e{;mByzy?9+goQRk+UFaaL5} z$;lb-S(O==8zC?p={$HtxhIgqvdXuE=NpiSss-N?^GH5>ilVj zAm`Xs2y?WR;HmFgDo*USG6pO2nbud_<*Tc?GLf5^O%y^&Nw)&4CkiiiJK+263l9|NJ8L!4r;ngHyb=6 zq1s7d)tbAZZP~5egb#(u7^W)%Gip*~h@f(NBSK{#SYGt<3jrESZU_8LJEjB-0>qAQo=0&&pQt-u0*hti`AOq{R^ zdsj> z>!$cB+U9iq^n-A9%DMsHJ!|9rD9Hw?9E$_U=yQ#xz24Ve_=l}*hd|JEJBS1VAT8}! zj{NlZuc4=irAF?5iIbyJZqY~4n%C_)@jKympK3fE@ds4ikMi2jF_thrFxAs|WBv+J z@nR%4-Xn(I@mYhHwk9IYjAYl$5dO|z8hlM^HAy@>f8?>q^Opzm#d7z*1H5ga-3Hb4 z+lysZ=Xw#)*URQBBF0IooUQpaf57%|R5LnulvB5+hv}DwKWc9jd_nNLMKdHZI__e! ze9M!_$rQoj*!8~?%^l3IB(cKWH_whZIqhE+cvjN$K+!R3eqoi!2jn&B-Wc&rmaioD zQWbr{WS4FO^Iw!>vWzVZM5Tvb>H4M%6H+*2>Z?Ad+1~>^GA+J8pAh+qAXu}O1TIfr z)%pqIPZ}hi5@;+gQr2{g0frgK`d7hU4E$MXZQ*lq6sX=}V4*#I#d|%!hR&wn+W!D- zy;dMORFLfEzIPwQ6{^M3r=nUj`KyRCCtEY9(^@KR%@NRl|UQK%Tyi$n1P;z)apRIin;XP3_ zO>yD8Ee*oqSdrK1(zc_Htwr8%nH>+-}=>keMYRMPF*&> z=b)9*>KeVZgv7}M?Ux{pkI46}O9pr>A`I^$vf;zFNj|mnJf0%I(e>l@+2o!d?#OVU z*H>rpF5d3yJ2)H%BLFGQdKoTl98GCP+^_Q-B0H<10)Aq( zTSHSlfR*2PZcpV+x)G(p0Tt7!8S7tVJS9jg$cWdABf64V18&2}7YWBCQ($>m#ICL8 zW17djx{$=UV;0lUQ?2hr$@0mzLDYlRxz(cXOs35luW;o_F<|n?)6%x!onKB?E~Ptr z`_}8nHLS8mG}2=@U^0Dc=bwolGhGHbC33|<{o@1BXa4}NOC5u#=t^OP^U3Slx>?)%H$+I+ zF~^KC139lfNTs{g?qxT!vu7ZM>F6uPuR+E!Te16Sq;E8~UK%NOHx77jTHw4(<3{l% z!q{74CS!ov$*P*=hPQPKE8R&Vp~|4-fnHXg9oMXUX)W}6gvEy;OnC}D{{UL@vAan!7wA49Pp3iSn=El}zgO>rReR4Z^4AO8Sdb@OTxT6km0j%JXmfsnmVdgb)3 zZ^U}eqZX13mg+%QnK;1z0PEMN-8YA{O&SR`R*4)gBT2X{KpC$~0SLyNr5LF9IQddu z>pUk`)b3@{Z_*_RAC^WMJ=DJQjly=wP*b=)r6 zd{A3Ozjk9IamcU7FWP%dpFsG^b;VN5(zfQuxySRbxZtNkwl~=+d`ipI^!Q&E@Ohjn zT(UGzH(1Or$rJJqW9eNEpJjEYU+uS&Mcu|kmal=fm<# z9CAh%%vRx;WLMH=Qk^-vRXS+T>O2lMjYuiSslVXyu3F5E73IvzJx?d-Yv{Xsj}X3# z_LsW6LL(cqJ_!0(hv<{frAHc-StN_@XMowR^2=J)wRe`%8DjEc11uDrAIm?bd|i0S z&FHLqj#S+w-sbFD-mey|BTaJ0cpEv(ZqHJ9* zk?+#HM_0NxTJ`LPMsQ^~Cc0(MD&F@);5f$+r9u!-sf{7z?L23#QIU@%oG7a@Gh{Ez zwDiSLmPPrO49pHTiuLg6pPnUlSCpQhoMW2Gm5Fc$0QD7iSIZn0!0HWBm4}vlSG7Uv zjS^cG9KP(YPv=zJxdh~7aB6pH4nQCbXEjbja0t#j*QZJ-FVKXMfsQhHCaTH1%?px1 zJm##i80Vlls*;k;h2Rs`x>CC^sbra6Mjn48VD!&QiGc+i72EDIYD0l=6m2ADB=oB6 zcSp$|g==Tj#U|M7m4qI^^#Y-JLlV75UTIkTssjPXdWpGB+i}NgYAW{?njmJ&sRw{) z5+5`5uo-#QGhS}wS2Y$6}YE9Z>_a21vOO3W^)i)J8=GkLsB2NC-sq7REJx#3K-{=0#Ag7Ch+qymByozJ3Bg~OW08+qhoGZ1 zeMQ@r2tmeqsdgv5H5q#R#F3LpSV~IzntMcgWHN0oFizpYHEYeu;DPLGDI`DM;0}ka zPLAK*I6UURER)vdNv_6{$jW)?PxDkEBRMshxq$hYpL&rd+r~Eo+|(FK*RwPOjE|eQ zH6Gwt{op-no4SQA4^Gt^%y)Hc`gX0UN%Ir-ORV`EZ(r+6y+FtqIO|jdgpZYu@Aj#_ zVG4JV*R^_7)9Pm!z02i?Ibu)K6yGqcWRObdsH$c{TZ6z9#hJf|lC`#vV2p0{9_^Em zbDE8qqU7fXziJvqAfDdURLI2OAD2B1Yfcwtiph*-V&|OXaaEnmHo$r>Uez&^FN|PS zbCBF|&o$jj9nIpcxZmRB1|HpM!AlRjflpJlNmb9iI4LYn>fZyu zXT3w>Hm9w4d&2rMyG+cHM2gY3umh)VwQESe@SlPt7CKjhpoFktm5c<>xyKdb+82my zJUI-c`Osg?+t@0x4i7`<4D#q@&OaHBu9BSFUab0D z4pW6vxi61?DQi|yi(My6(``~!K4M@JgVw%B@$ZU1wURjRqamGk0?(7zKi0ipT4?6e zucd*bd8H#8`DGs2uQt5XEvC_T-`VfGVTES{C^Op?&w`}sNi=;ErAjopQalS*xwef_ zG~LQs2xc5)r|8btL})^{ez8wx73gg4X+=F`MF5DiW7uedX|YL$3TCw6$eT>_^N79A^WH`Vv0@ z_|HMmQtM6E?xeACgpO>GJ+od3@CFr=;N^wHFvzz{hK5e6#A7R8X;}E~8_x<|X$0Hc zU8H#XG|Cricfqg9F?Hz25n44mwvXl-(2v$=#AtNAkHRAeDjBf9& zA_XONW6!m9(O*Rk()qDVyVUY4s-`ZLN=i^?p+=&Txz*m^P5r3P8g5Jv#+?qfjT@!H zd3YRgRc&oqR&TuP&@g2c}8Awz9@2xoJ)m1NjZh5t+xckWY zk4W(J{vG&)k7aWzS~S^MyK-yoFAhkTT6|3_{GmBLtLJG}JFBR!WeXEV-ymM*y(dlA zW3tg>hD9ov>z-@L%yYUGAp7m7$bxsZqbx~cj!w$$vFT)UXUmJzYWs9iVTN+ii#S>(f+9XJ*?&zm{q?5ST zMYWqvYbm&o%SKXuQIg)(-CMe|%^k=FATXecf<;!EHAtJw4f33I_OGbR;Yy^MsAW=< z<2{jbAb!iUbnCQRcS0CaVi;o-Yaze2gL_qR*RreL|+WovUSvL3#Y^j78 z9FId@bg=2#J<}QO-V)2WDzDzpy?OY|BaEG%hb*Zyt#g^uyfY<^g7J%VxRKXrc{(mD zI7%|U$Kj8FuCM$9@g20SMmHA5OeyCW&3(_|d6Q9&DTz@T z*1n00Ma+@!r2-#pc*-+Jtd5 zz9y{C*7$QjaEgQ2_6xlRHMx#MkcxA(_svbFPj{qio2`&-KQ7?C2l&*nT}h~Eh!b(o zCC_u{D&3)$YtsawV?BvD$gcz0t6ECu-Bis~z7};+{fYFcCAgYrxO11?mNNeUhtjj| z?H1bBE2tTwjhiAi{vT?;ZzAb=Wd`7~@_^)hD`HDFyU~*7>e^_d`^vb;Ks{)LVGA4; zG18uw)bssv{%t$Mw-+wr8Eyep!(cZR;*u}}?-QO$CpoUy#+u4%9v~LbIBQ#T@|7L? zir}O_Il`zO^=e8|y^qf`Y-6ooM|6lKkQ@SVGmQJy8L&uT2qUTWt1}&-9CSS@gpNo! z$OPw_^(ZEJ*6LN2v64ms@7kzH%1H#(nV;v~k_Z)^?Uv5b^{-xvu~G6OkOm(iBOPjl znA*d04@$8km2SXdsLLi>kb3ZI)upProVt-n+d_<6gt~&t0qf~VPFUa&J7$>NKyXIx_0W~fqjc;!wwTKk zf;beUD~yqq9XaNigXM)F9D3A*je`RRz9{9p&>VHS5l|N;Mmtg{R%|dJV~UXc$BsGU zH8QRv%K%TcXyQwqkq8T(OMZ8$BCJ5z}1k%D<5kt<=CQrYf(dQyOXUs#(Ot4ty;(^B=biY5J%%dd<>IWMV!)QhmbQUL^)Bh-WA1S|n0#dIAoA+0As)k5ZzSQO>6z zV=L`U2LR`>#SBkI6PO_1bPpxW|+k$dFwI0$K@sN3~Q%MueeNDdwIgiFr!U8{f+xMRyN#l^ zU*AOU&TuQo#?wxG$opO&%)fT&UsPMOh+NsV&FcxK4~W2Qwg+!Y)Y9OBJ6V$AH#4vz zGF$HRo<(w6DobNDX5rdPc07`BLHdf&@fV5TNwHBBCT5kerBj?5@-Y}!DRQo-++i~) z!6`E7H3YCTtF$g=y*b>lTjsh2G;Vpb)Mzfl)&u zy0c4Y#vo46RQ?9Bj8qpdW7Msf$t$I}2^| zqFrEMWMeh9L%+z;&wkCG)Ff#CjC=by9JfZAUXTX=@{7nua1nVECH zoSwg0`)s!n48H+a8&^b@o~P$rLz%k1>|Tib&)`;%sp#JgtZbUXLkWywazG^a_OE)= zJT#Gb)9sg*MHsK#a7Y;>a%-XR{=4D3PX=sAA#0Un^3#CGxEaW*n)i-lTWKENDWeYI zaIxeX{0?%XUCOJ~$+!3Fennb;yltM9d!p$E-5jN&#k65@lbXYi!w@d2Zfwz-SQs1- z03iBRZ6^J-KO)w0sM|vTMh$iPx=C;0bdek&b{qM@IP^8|`zTeQowY^NioZ3qG4-3J zvtO~v0ELimUYRXe)}ATbV-npnfC&sMqO;SjwTWV$;~`FWJcsV_Tz<2rh!$11o+%*` zVM*^?IBXiJH6-;msW~lH#&)Nvt-b3=qy%BOF*VPB!fdEoF*8dqL;>(Q^`zFc;XD$? z(=zQ|$AD|d-%M*i5<=}VwZ9~`A zx{WsUzxuXCl%JH5f@_?P#@<~xi6cc)HwFXd&1dXNhFO*uO9W#+~_v?hK}(~5oX88b_~~z>3YP;6jP+EWLy%ay(-7X6SPE1 zs-;FjuG}6b6=v>^`c)&zW^_6qha#|qEWto013jz0md4NQ>d{29j*L%g@&V#&hLFiK z;R(v-x_vLirfJqEEEgHaV_#2!l{jh3V`SmVtj_AzIAV|$`3ULFTb}l1wqX+p?7FkL!Ks(icD8eMdkV5jut#}yxTBw&U#~j?H7h{H*E-mk43`Wp% z&w7IQRFR^P0z;_dHKD1q&uqdFWR*_@Rx(;#HpZF*hWp06sU;{`BhPWx=AVXUVDe9O zDwZb;n)e8GyEL|jGRYGZ0Ou9rpJGO|jqUT;066BBD;+^~S!B4llqe$$jMqLAoaioC zy; zyXjt8qIiE%(u>Ch!HE@c2{|~&O3?E4E9iP1g=za+Hu?!l7iWz8UHEP_{{Rh6Ah!*8BX8aW87Hx?%nfqu zRPaBHrLxs6He1lR1N>Mwn1EYo>|fKErPe8usD;SQJa0cRHRMkiIul^7uN z&)1sh$+N5`TU}DCq$T(rm<)5JEq)W`p9}m_fanmSh(w*Aen|G_z1PFq=7p;165QQh zc{d9lRDwA*@W+cj4EX;5z?#dpo+Z1rL-GdntPl82yk(}@n@hb80mL!;PUq=1ji~9f+RZfA_F+}9M6!V1+*d(Aimdek4vV5)!>HX& z8yS4L1`v)p^cDGsrFg%@8iKv7Hd@T`J_3NJ^{=@;3;1$fE5Rn>>d~$5ZbzALnrJPWBnV?e|`K|u0WQ>fEasfWVzHD~G>>wYQmKeaTvZy&> zsm;6HFTDBOC4XxR{p50zRQDpY-M_uXT9oWi26BCBgsr%I;GB9_(9n&J^({(rjJ|R< zj{mCdc zgUIQD+OlOVSaL``c&}oVRkSjch#c-=k+}V8L9~phKm?9?#X}l~ZZJsXW~JJ9fX6xgD^#0yGj7WL zNxZVy;jxU5tuUc2*Yl@^Dsj6$`KFwMlG~}u3sM}VpxiLXILBHL;$`3w$zW>u`I&|Y>DH`;a-)pk)-t9|lGfrOP~ntd6!zpkVA3@BeiF| zfl)qFztGf8GOKV#@-jtw6rj=+5>~mQX8`0f%cr>y5ph~ZE9<)WfTH1Mrzz@p$8zI^^mgyeFvpoiN;A80~}}8oJ+pC z8gaKg5^WQ#| zWf)3p_WC$zTck)xg*}AP{dr&)0$1LfZdT)u194a+}Cg5Jx1Qk#cyYPfvoQ0DCC>~ zdm7|KM5!1%LF@j0m9wO1w>qR6rQBhov(qisTd9CJP3HG1{{RR0 z_VsL>$DKD&kYqZZK+osRT({PKA87VXtDSF3+Q5KBi^26g*O!E=D)b{b#k-|r>@az) zIYuqL&B#oRry^Y2I>oz&2ZR1`RW-eHP4MQAJ?^74HujN2xy+Iekao>-o+S#C*F5mTC? z<&Rd*+;(jj1fs2DFT_`upA>#S&v9-fpH4~f26}DJTKyyVPvEJve}?guws%h~C{Vnw zzt+4P;E%$H;L-*C+Ia&2ypA}}7y`c9@CS=Dy(3XwFIJ2}YK`+xo-jIBiN~Bngsnwj zDZg?$J0G8BIQ3iHi_~?NkqykynC>No#Hu+=6OP9<>ejJ%cE-(~{iI0=0Le2Ana^Qd z-;6v(p{9+yNSX_&Kqt$LWxYY;*w-{XFL&dA3`GLm+``2~icyXM^di0=3x$(Poj0bI zJT*ze{{TZ)t+fd?JppXxoo-oU-3blKkAG_U)ciQ{ z1)is5pKiJlyxUnoCm?q@uUcInQ}E`5moZvPCDJfZ>`%_8t$XVOiB#3?e|-%AYT1& zKT5#x-L2J)$JwU0Ycy8=FXH#CaI}4mRQ9 ztO4M0UgN9imRhsMJfiML%yGqHr-lB^NI;;bcJW+z%p_fBI2Y{YqdAQ}Ad$!}AoDl@ z3F(1XCDRO-h2ev2Y=ao)x=ULz6k*&BkELnHXK8P$N_leU@-}XDiOdd>k`<0Hd;8ZRs=SvUCzq1V&lS~Mi(w}qxC@;7 z)wGJ%Yq-fp9Czzpc0QN3TAM|=XmVOTg2EGhxft(?(ABMNjjMTZ^1}{5uBXUBDZu$d zeice+m82lYh3j5d)Z-d01fyqWd40Eqh0Wn?n3s2M;;rBKY{eEMe0-#P*P+K0KWJFc z?IdT4Y^Wu>MaJ+34SAGd%c0NpRP{W&N6>DX9n$7SNj_dNU7WrimPx~H7;c~r_1DK5 zT4|2xgK+FBlzNLvb>>JEE^shwS5BN~cJ(!-O+{M9MX!SVwi8bZO2B8HxTjoL!vdRl z<5U~IVg+{*>Ve?_L0m2ldSbHEPB&5+7jZ0kY;j#~3hu~$#x~I$Mxh^*rn|ze?B_h1 zp{D7YqFfu38JJ1)CPxY@)J}}z+sJ17N^aeTTw=5>UfWNP%Mr#@t_nYDDd4KPsmq~0 z%{6PEH~7C#*EP3jg}jQ2+e439=j=Qktm)RxJ>2r#LJtT>J-ut_-A>}orxIG*#ygM> za%-N|FD_)$gP2C;JSwMedf=;0nyYoIMo$cy-1(QpdXI@4P!<|&Hw$j(=5R;@6^Uto zt-){-SS~i68Q7fH(ecG*mXb5uZg%B!$>y!vX__orZ1P`Qs)bTlf$85h^4YEyhAy?` z^Ap0#5K8CImy&5(jpD^R#w2VHpXSdV^~CER4s;vallz-B+}L7Mlk~-PULo+^#J({) zhK|xmfyro)Wk=GfEv}@}figDX)N|IpPQ7Z_JV!MO*07?Tm6oS3qkKBhG+kUW#cso{ z;+Z15BP15G`4EVeNx^VBuW?i-g757GcE~u#wPDHjpY1zo7Aa;i$Q7a;S$mQ1N?7bp zCReFe=S>QADrqO8JI*H&hSKsFkTlM~u=AXH^d9y4hX!#ftobWRS?HbhO?0=JrV6{K zUDInO>SEt&`yJufhS<>PpEI2-yuUeFKDon|{3}h^# zvl=qQbA#w>N>(o^KQQBwRfxi88RtCLsRq`DQbbX&B%E#bsn#*e1|uAbRKP=>qa8t} zvna?@lb&%~DH%1P1N^|Y+!IwBhruIuD$I_}l?6xEtL^730pq_~(iSI1h;nkxkxy95 zFz2YvAzZ$B$E8Sz<^Y3%(zb~CyA#BPcm!uPZ)h8f5Knwm36m#64{Q!<;6U8*jC1Q< z6rY(Bvs(zDgkI#+PSV3C@TU$2Mt)vSd(?k1bzr?mdTlEsEZf_7CM*%8TeqS{X|058U~Gl~@uI6;r)tjpU!0la4^CV{^F%{2X&%nMyHYdhTee zv5b}r>`g+_oPa{()Oytxmuv-Dfgtd6P|G+mpl2KN!Ou#?P*>1*cO{lz-sBQadG@N8 z7duV|L-)9<&pU1;Hs(InN=bJq-rUzkEH#Qqbdwc1jFwUFRNmk!^B@jef!?T1DMu5~6XM!=4zgI6PvZonBeha9DdQIU$avXmpP>YF1=Hj%oLXPhqX z!mYR_W{8i{uMfMIR_-w6eO-PKpvH4T<=xfI`uUYnoJy1E`#NvIZ_u4 zMtk-j&)UA1u<)Ft_At`)tq#`r65Tex;;YM>Y((-zF$^f<<|+}h$i`Z}dGORJsC+`v z?42Z*6F8c16fpA8g4rKjepU8noqw*~d{vu7)-~1erj0xc4Z*o^<79z|#AAR6!R?IK z=bUq%PY+5oAoZQ@^j1s$58!d)oK?J!jXo%NCrumpM;W^(F-VJ@gBckk`B%o; z-^1-)ZakA?Jc+xkY<#x&75D4wZJ~IRSn%}g1>AP?xGhAGjFo~OdvN5TI95$hU_ym8q`sN8OG!hUu1{{Vu% z0NZF1!*#Ap6s~aIUNSw$>0aM$soGijOK%)8Mlq7AGgP&$Ugz!bT)B6R&Jcmz`%#PW z4>ZTkQhwxFH8IudJ11mzX{FgGhtdrcLv0*oLZ~>%9cyP+_+fLY_zg7;KITa8HkRRr zBtC>zU5|!*L3`mdbEKWpD((QO<3ELZ*Mr8br+8{BZCtFc6nVj1bLn0t7Brn{%37tl z#q69~v)1N6!k>luy{?-T-oFwp+_}!~L0|s>ReRo%ZKP>8zFoPB*-`e4_w}p#FNka| zbToiP63EN)oZzin{{VzzPP?66V$zm7)G6uiYwd8qS9Brlm%aKOQH}jb?sZKzU09G{ z-mDfpjt}|GZr@tPs@N(VOB`#vW;iG7Str5E7O1j=9Q=H_ZWsRmuT@{f_WDk++Aifu zKI$>=U2?|D4&OevDN|OvHLX_O%Gqr^rH^sONF6(h#@2i<70sH<2$ARAxNTlBSQ_4= zdv$pez>cnt4*q}-dhG2r>61&}Ga)#@KAcxB3A)mkv|1GiLQM0^f3(M~8&v}%ueEDl z+X%F?Iu>a$$n~t*^?PXbtEm=5^PF|dVQ09zX(ak8nYa^O? zUU4UyaG-EUP-|mIj_|@04J1v#Be1O((;Y2{V_@hz*O3~KjY~JU zLY%L2mDhCAmnK#DMmidY!}srRbL3n;+;qo!>~-nkpHBIeLxI#+luL3W)k6cvPJJuX zoj6gbswZ*I4J{9FHI$0oe{TGma@ zcDNn-*L1joF{f!WDb#HpG4V?zg!$M}?^fdRvc__fh9G1U-`LlS$u!Qg{J<&cP)74c z?26=Z$vx}gahc^<&)nP8&NSqa^i8jet}dbyEQ+n3Kb63xSXgdpIo5+rsWfiV}vW(HeH9CXj|~t}~p~+lzwgLf`^B*NAC; zD-q8aXH*}=E70wHMP)2}%DL*G`qyO~YI5b1(CBl%=FDDWOCTiWdB~?tbS$d^|K8c8K`TI5E%K34#%ZXu)kNoGF(m!VB`+j z^sMXnAY&mC<$=HhwNItmM8F9XanBxv*PF>FRT0egJr2r9q=Hv+RakI6s`6?O*s7?U zD&wcMa5wi8+CiL^`EUTPdriH%ztv)jd09YwFt4JFr%rLQBima;*IUI9i=haaV_)wY zqpRxH4`Goq@5kN;sjfp-(gQ;BMRG>bl^*`}!8|w9>Q>1+If-AK9<|qttvJEP`-|Fg z?vGNA`Wt;J86_*bsQ0V(n!SbG1hS(C7(5Ou71G$~CGv6Q;3)#RTWd#4C)qg31-Lyc z%fn#Os=1zrM>=~Q&C}_E>OH<$+Hs8YT+XwnNvPZXnIFnY4Xz^@NDz(O@2vv)>{X{|`Dv{-Z-U7&}{9OsgFq@K>oYju~%ja2pHnwniy zY7s1e2FDfOFJzt}1CR{1@U&tqwg%+AiUBXz2hd9wHd0)Zl$9)u2ffT3o{t znRnxH9520G@mGUQ{{V*Mxt1U8Db^3PK_m&N9>`7S3D8uv-G`*$0lou5>E zY5Q7D;jK&K-k0LP4v1j>-O?eu)FBJE%bl0z2exu6<%fN;yD$T<7ccI01ec?HqhE?+# z*OT(GAH&n1dj7xREZJkQ6zVU^a5W+QpYJXI;zD~#lW-mS=_plp}w zcV{E%S@RRlG7fv!-cVPLq`7OUoa}u5F}ta#9kQ$kda)`4CNqPMwGmI3r~d%1x|W1< zUqS--B$eO}X`eXG6n$#RLLqF7vv#HO$wJM6#sC$vdYMS2<&CYu$>%1TQ!#=LNEpHE zSBh=eIXiUIuB#ACwmSF(4j!*-GwI85J|WP=a~)szW5_ameXj?FuR?=BnEhteY+e z@ecl#ayb;qoSYL`s;ka7V0UVjHvkWAwb5&m-ObS=?obZ|;;kd?jFsdcTE&gem>83a zxfFy%7tr%rx@n2Nrpigr@eK2tvmArII@UOux^P#vI@O5fCxOSWwPh+=3Elb|B4DAE zf;)p!hb40x@HxS(kmNAucQtKfCAa_*I0CudB#BGj*JEiVQj67?^*x1Og~2Qb1Pa52 zu^%S1;6HGHPd_ztPBvl8)6~_Cn7%MeX0HN3`MUbm2#MS>K>T^FAVXu3_)!ZQHPo{X z;hY?wQ&tg%;@tJ-t1rrMpySlkql1iadeqcu7~7fLw;P=G&poQjIoeLr!>A**P*7FF zpgVi!tuE8FF5@9Qf$3cB-%z?by#oILR))*O_O?k3cC+chVw)J2NrCxRCiTe&9)Q=l z-FRC6095cFggi%Ot7=zTgqnPR+tSES`rPcmCz3Fu^RF)O6qb$RZ80vQ`%@{Jbc$60 zEeb9Ku~rk#w`H4Kt;b=JEXL@yB}hKlWtTKwXxR+uj5~c@#b|W zig1K}9X)s3?$q)zF_fy=9#P^S3twuUC}p)t7G7~9{pMBm_o~`ghp$rPK_n7L<2#!M zz3=-j=3QZ>jeMy{EayD@-^#j;3qrRNypytq#uyP_p3~wQvVx@>Jv1wkZhY#V71ch` z8F*a=auoVzy(+`O(%)&3{i+fYK7=lL{{R~G>y08ikDdfl-|pm6LeHnNiGc_|hi(OP zEY7uB@Qp=f-3PHrUgd8G&3y&g(oARU$Up=P5`F8p)NO6wR`TU!Q;neK73T}$AF^ug zDiIhBmN?^|O7o8rd{Bzt#5T(v#`!m$#P!dmeXd(pF~YiZ;@fP}6lW=U9_w+Z$!BqH zZ6^%~1V~r0^dF^5VXf-6f#SBFM({Hu}vn)geA?&eK$Xdw3V@vHucdh}^lttH80 zpApZ`pv!yMjm*)^K4cuR?_C9_h$FCshT6za4e3}~y4s7!XrtN)?OZ+8*6q;m7#te; zY~FLid$DEGi|BiU_`xo%6h|m*9y(VyKZvGF?=fV-&m-6AUQ=&&@G&Usfzz6|E~gyO z0%TC@=zI6CD+i8sY~GC8Nwss*rPm~oGfL-U9u8}m)GyLF%Web~Ef33+mC0y+64SIF+H(-QQ*&QCMuSFbX6oPt;*B36fvq*O^Ty^v{g>y5>xrr=u z-nm=(*$WVMmG!SW5S}7hvwS`UPIhObe`=)I{owg{Dmv5Q)jx&yvCmra1=lu{^QwW> zvsP1EErK8Qt!I=@?WA_kEwkA6WV#zSp~pGmwASl-qX`IbG6rkNto5n9%x~NX=xeR9 zzuds&vG46(T}(A>Kf=yegtWCsQT?xT9nm|=^VYf>UlPydfLOB*hPWASk=taXDbEB^ z4fHTMUE9uhBEFLijfd5_ukQ}F8=5I3dabXBt_|iSknQw6Yp9RJ-b`S{FYhtVO?YGL zCNbuGoiHk={3Na=0x&Xrn&!jf{np;6G%&GiQ{9J&#J3=MyBMB9@9$oPpzAS~jpUI} zv9FgcHAg3V5xks^E4S0N`6C6LvRi@lt}0p7pn&b@3Fuf6VkY7 z^($K|#=4B|+{FDotIg-u?`Mf%Kumpjr$P3O%4K1+oPm>HNgVxGlzCBugkt%b+G<`l zbuve=;l~B4#g3$IEn#wYoMew*dgO+i9mU$qCLMFg&2=!FTWfKEJpuHsYhvYAJkC~V z%}Nqwo15E#2!u%ZKb11aRxn#JW-K#?&!s}@WP!^4n>~15SMKgHP zk0z&8V(aEHpAD11#cskZT6n=!Doze7fSX!{3j~o%ZQz<)U48)|20&XKduF`seQI;V z$`V&J!&Kyzk9N~+blEhgvVE%=?f|WC4<)QVE56g@M*AaLG$D+b7(f2H@oO&;7G_nH z@z_<1?-AS*(pyja)QdrvWS5dmm- zOY+R9dUWR%>kw#~55yl1i>*q|E312iD$z=SgV!LA_48+id}kH6gKi#q1X_ZlBxXn8 zmIpjzrvkdK3V6o<0K!)~YZs3H07=yCh04bt0dvD+J;ph&-m*;J4T7gmR%$YB$#vE4 zT|u!W zmHerqBC(TJY%JYIUIL&lGo>9987&~`$%|WpFgk zkyiGAm~7{-6%Ig?9W&h4j%vYVD2Z7>83Y{U()oY9B(W#2HDWeg;PdV(O{!maYUrZ$ z)XJh(5;b1qKJ|ViUOJKQ)}U1xQoS-WS7RSH$_VrZwrI*O`xX&$gLhh+V4^TtNp7N_ zf&JF}sieBIDY;zpX)t0q$6obW*oF&@ymb|#V_*nS8mcrna#ZI%Ls#W=tk$Ptmmp?5 zgY123yNoUf&1*DeQ0^uTFwo!$}yfjn7V*$?s9@WAi8+ezmV6kOtLKRQIZmoPoPw&lT!I zS{1PY$RjFAJ*nGBCnGuOPTG9LEx1#h5t2HSftu1UP`g3@04#@GRY9AuC? z4z+p=hZxHms~QrRIOen>Mhk*R9Wh+>9)W!>T#p?49&1_w_eebYR%{42u6Ql?t5Osj z$OM2J0N0;VO4buscQoKl&)lA;HKh_RGlNv%Bm>7d?N^kXFGJj8*0EP?tK70PzzW}$ zNrEs~6HG!(dE7ekDrGnWCq9)Dowo~XVdxI+*>0bAwN9HzJF|oOaw;v%amIe0l`6`S zMdnCKs3f0pj+poDQOvdpE9j3#@a~syt9WKhdn=2-_(<i=NU+I(O5gR15Y(7!X&WNi^Nu~ue>?GB7FF?_+s5*L*U23J08^Bz^Gihk z03xQnYX*z)YHcFT*5Is2tXGoEM?aNiU5mR-LP+IP2yTb5u8!+Rd38B8$B~-sHxf5f zl5;Bz47pONyz>S*Ry_n@3u#6`e*U==72OTV#$!fQEdX)0p>8Q;v+zfQD zBOeX5**+k{sa{Dus2pWC9iZpwUqe~i#{|39H4EqtD{JkxY5Xc1w>=GhiH6TjJovx9AobU~0-a_Uzi+h(H>!*g|Ip8c=GDkS7w@n0P325`T zt$5W{7NVZ_yEx%F-N~4?+GX64vhQ^m>HTQ4@MM454|OgicJ6y0QCde-jwqL7k?Yf? zT!&NzdWK%dIIm|1n)?;Vv`pPOMe`c6TZr_fffRte1|3hhOG0bg;*%YcZ3J}ptf;jo5Pw<}xTb`?;(Zy^rp( z{Bw$mTlf?x0AzHBcukoGg4}NRH z#bwnesfAn&H$58fR0{&b6BjY z!aAeRtA%zu*1uA`66B7R63f1Sl;EFQ<|4aQla}pP{@jRi9AdfN4aY=}Hl`L`k3z7z z3O;^LIIgDB{vD~mJB4`UdelmX_t;^`6=pvXENraP4u4AWu^Bw-bUCGiZ&T>I8@P)p z3=0u}0j=oo;f@{0YmxjX99PV#<0XzZ*(#Dd=A9>xQ_IMea(iZ{2bW_gG?Z?RO1XVW zY>%QP@g#QAHVECNSP8f-o@D*Tef@-bag%ki?8 zHNHZQQBo@B*s0=pA&Y2bCvO?WQn>LvK3E%-N$xS4`B(lEE1il}WXV4$0GcG%^~=O> zCfa!)pu+K5Qo!P#oTiH_Z{n4Yqb_yWzp(ea#Oy`zA;an2RaFspz)+)VBExseT zxcG-^tl#M%C>)&CA@M&;f-{?d+~hER59Lr>{2PQ^Zo0ggm$nZF*w;yA@UOyFEWTx+ zxMFw*IH;ZjD1!H!XO}Eq9yaB>Gps%|X)wstxOUYYS{PP+{2I%63Gp5I!^ zxbSy|_bD1hp1^VUY4*Pld>t*<+9uJWau3K1tQYbIyxGGggSt|S`_9FWgw@h&$Du>< zGex@7OTm9`VTM7xvjNTl_2;E~wB8`FAF@Y*Z)~In;?dBo#E@kYNZZtBoB@uw>t8wP z9s~G)qgge?eiYK@zLN}IU|*0=K+S>Fb~V_4XkU1W6w_icwwNRhU{szDJ zb#j&$WiF8p`#DC}jQWmw73Gt`BziP)NWoQ?8%ZOaSCjaIz_IEO%RRXXGa+5T;~?iX z_8cF^HS+qZ6<+BkEW0p`7S#2NK4$p0J->=RB+IGk$gc7d4#9%nhP;jKq=IuCu{3i5 zjig}L)3!ej?(H>~YnC?%Iu+!vJYur^bKz*E@YtD=McgOkbzC!h8vVmA;;b$rN-IOA zt|p7CWY3*&+Xh!Waf-B&Gh62Yc*&`Jk1k&>LQtW@1I0}nMds};r3vE)C-kqaa!Fkd z?!{4T#B-jR4tdRV zQ=7e!m6KO3MwomI@I`1sj$9H{3ab$wXCK|IIB-w`JJ)KGdz{jO?oN^O{?V%*Q~Fe~ zrU3*FM+T?z+aG?dE11agk|b9k50;^5$@z-~K8CfLEb`nQ)e(#yJCoGc<*6-?Pm<F`s{W z>1K~Ary0q}#bi$wW^9aOk}I~9-#}@$V7zVS5ymrB<%nkt0czQF>++H4NT?-F0o%}X zU68Eqt|fcwWwcw15?BmotL-ItIpeKp%e3Pez~OuP)JUNKE0gJ3D4t?QN$0q(O0^rh9_X_Y<+3)P zL0S=~O~4HE#Z`*S%gq0`Z?+Ja?mbR; ztemwIiYMs%a53#q0P;6`^HCG~!U#U!N_iXsoO;$=`&?-&78mA1dE?MmwEoW?5r@W~ zwztFW8uHZL>2}x6scI_Ax;26XXWad^?+Mqfc)U0&KyWa65^!tpAK6-c2f-f$d~xG_ zQg~MLS&~gAB}5)*NRxXePu*58*yMmXuP-&ssbJ_i&#uPwX{RKQxHX&Y55oQq`vt72 z7_+vXTO!fqktX8X7qH7W1A*&bJKO4dMxWsOYghy;n2QzzX=2>+J#$`HtNc-u#6Bxa zwz`nR91Ud&jEsdjKi0S_?-CfaNg7$@42`v3Q-X2zufg*?>b@eUv!PGR^f$#ry^vVth`OBhuL>S0jjl}p0BJ{!(<}4TL&cWfT%K** zM2-O6`d5*H$nh9@t~C;UPdcP!Jz8hD%dXqCkasFvj&X|T=fAW+Kg-Wdit$N&ZERy? z7g4U?Q&@BO)*mI6u2(%rHMTD+#p2~=te4^?fs(b4aMU%3Vz6dc0f6Hb#5ahZYl5ss z2ls2sZhUHnGaF1Ax#_%L6i&>t43XNs8aWktZxg1DT_y1&=&N58ExariU`{)l$G`DZ z?e`=Md*IiAH;s{_+N5W`Dyi|11e~6@;=5^Z<{?j>+LH3Q#h*hbh~1(L?gj@nZVwkE zaP4V^3FDgiq5Nx=DH{`$^HzKKrgwZPC3D6rx;Y*t@1fI&%V+Slx%E80EfNw$iZQ?> z)+N`8$e79JE;GgreDFL$e#}a%mGr8!c#8C{(yR`BDE|Og>dpJoI%ShV?t8t@ivu%m zm+4%_rQ#^0V~GY2HRF=%dZdJr6EdEJX0k4?^9@GB*H`j=43}3@#En-0D@SL2gHJ;t9(gjCT7} zFza%Oer97=8$l?3a1Yj{k3)@{hrtJ@t#xx@RCGnG+JrX|wYMlR?StvmRIzIk6M$S~ zW16!EhfvDIv0zUJ917801`yqw+*d5?VHSo}GfFag7{^tR6&Y?jirIr*lm$|)kM9bV zG$>kLRE~MBg408^Kp3cH930mbd`=eI9F=n@G-WQgbRUIsdlD+bU+Oc00=;(Dx&#vA z@md7B9 z>NMX1y#7;8ug@P(tysMARk}%m6mgJxsphLg<91mYRDk*5gIFw0PFtw97>bqTz1O*67T|q3 zuPYT>8&!Ld)bnLe7caDXj+fvqCJT@zc;j^JP!U~}ei_g$t=uedWc6TpHS-hvSd(BX z`6u6>=S8o@iDZv5+-Loj#($kG9wRY@IVsaQYvuTwo66_XvkfZB4bj5@MB^ZGYo5RH zExbUWD-wgi80Ned@8W{WO8KC1_c;Fm8sPPB8C+f*#UWSd2|QOMa5&2CryC|rGU+dj z`dPeFYSRPfD>?0+g0&*?4UgH@StU?0z|DM(ZK!Gl2R9gzx`0k9EAJBCLXMAc+i`{F zxc>mvDLJl5>J>1NYRT$-V|C*lKkV!bs-PSUHF5V|Ked6+moEc78opDy@jb#P&pRmF z+}11jf_u=(ZrjQ!W+2zGhv0W7dC9W}g^GKhU$2cUuWh1)FlpHE#j8=gLmj8t-dm{D zf^w>Iae-eLX}Zn*mW*#*%geZhj2?SeVW(@CvPI_HlOi9UQU>jq9W(3gQ;XoZ!RYRg zdo|Oc^`?!kOXDvV=vp*wK9i?C!Aq-{V-G9j94dl-_Z$lP%i!OGw0H4lwc(o;)bBhy zC4)$A@6>tbV%)iI$G7|jzHR-JbalA++ox)J^_tvSM$IL>lMI;d3jBv3-2mt6Ywj-# zU!M*5!^amb95ZN;%MH1mG4nH*EJ*FtSDlB*;TfqXXhunBuHBPu{)T?mF@8sdc;TB# z@omPMt{7S|ivhQA3CH7%RyL2QAWgR}LNPq?fn9yafa3A5$1PqfTlu51l2GVW=Q#lN z{A=Fy4}hK@(<1`<;#;=bIBN1?kYaOORI5=+F;2_Vr{FqxT8b&Yr_9h;Nq;=AVP!Si zXOgL$4)tDdh1!RVHJ`EDLTuo3i6k-Pk8FC^+T%m;=Y(zLTWDg5T`_{Any2B%wVPFt z+QgvlINC9q{R<`Gy3{H|+f>&51y&G?zfpT>xvI@9B3uOklhv#B8nmS1qNM)vmLgJC zxy@)E641156;drO2=|@~D z?}+yhpB8E{=xG@y6xkesw;mLnlg2CVZFf|%ve7dXv80FZ1vSoET1H}zRNS%va(5^q zygb7^#o?hEahuo7>!DtJ$(}LcKiMzfZ-@K^d0};-ua7nRxk;B%@g>8;Ezq0+9?$?P zIvgCH_0vcDFnkEN_9<|RdEsCcI&GqT|ofEF=H+N&l_21Yp;SK)) zgDx$6HFx5T6J81aiKt7dnPPUveqyp=#2fm?|3_f&wx> zA(w72M^Vl>udTpi=whk!QWXIuD09E;k2iR4ma1?GUlhZZdNv9NZPjhxAM#fsLW77j-l^{$F_1lzWzQH%n9 z_-?$^v98gT1m}aAwdG~9Hy>Ql2;xkWjDhHS)$}+31O$4XqM%61 zf<|{|88vMbmS2}VV48_kX%wQ9(6pHI036nYOSQugdgF?PBPBoqnD*nfUx^6nKMLcV z_buIz1ch9Kk;fII3IVvWZNrQXl}Dd32OJ)1;%@U4gNE)8LtOHb*r>-tMlh@sCya1A z=BABE+;?XU&{b%h?>m$aO1OsvU|^rhu#}qE(lNe+yJsgp^yLE?ecA0&k@A8-&$T!r zsYfJaden0fYdaRKp)EK-tP7j~7cAKw0Q{@!Uj*p0+J4KPDAVt>Nx!zBzZ#v4FE+z4 zDi;6}IXLNFoBJ~S4Tk#8-^N}buv?3lP1X_4GOOtL$6ECtk3Jq>40v|eSF<55BAYi$ zfth1G5`8hne4iE7bIYdGQ?}Rn6<(WAz0ZK;_=(~DBFarZ%GXrWwRvY|lFI7UjPgu) z2&3-x=t0Ii_O533_u>w}aGHB))9LX(0eiL?PhKn8lTc^^NiChd_06=VduyV;W2ih6 zxcd%28qAYXw7!q+48bQxC+8U8ob~)`;U%46VM#i4Z!gI6;f$PKk++%U*Iy5{D0Hi5 zU3OWFjr-VBAR+E5^gj#dmdHu{voAdCEOT9hUPkxKOsMJyK-^H8yio)`VEIk}-Ck?X zG0iP?^hH#}Vr8?`Hkrj|l|dQg5GM5tTNa(naMy%DwBNUglt89rfy%|UJA z4LWdDWlp)|*E7wt8D3i0&NcCST;L`6e5JF!$n+g)%kaTu!!thK#QN81apDU|kc4F< zH&IoW#?eLcu}+u+KdoGI4AHN2>s2v)w^BI?z8j=y*($Brj`g135910{V3EnL!tchA zn29?H?rWBt#p^V=M;&_}zSY}@ubRnf#|oIYyVRP~;q|y6keDMa@9$d8@aoM#U=*D3 z&N!^we-yh)cFI>PjCxb9yjsU8xtWLEV0u?nYGa-Gn{4#(^zk(n)U-EkyfLLk2oL3t zP-;1RC#6X0VE`T9F(6|V!QOb9cHG_=dy3{BM~Mp;IrYtA$*N9n#A?Kjq~@G3 zb!M!jbIwwXo~NQsYo@MB5JBz6D;imCVUYdCAY<^X%R_TK3<)P3_3KgG>60^VJBP2O zC{R(Ar!yB-r*_FMFKv}mY9gHRQrV(h%gJ6&PDe__I(caTC79>s=DNKqz=*>YU~$ex zbXVl3Pu+Tx?Voa`?WdILvElMKs4VOzoQ2rs^Uf=3{Uk$xrFQf!OwzR!vzPa*cVnoo zcvYLHp*+e`u*og1EuzE5RYheB#(SX`DszhKwH;C$tvn=HbKHzq63HmJEQ6f!PY$`S z%!-?Fl1Et_A#B8l87tqdbJJ>f7WWP!I~O=4)sMH!8W`CIao07QCA_yKq;Hu)`eKR{ zQj>Go+HNk^XIZD~gxi4AZ6I@l)OV^HhNnA9<_2TNbM0JH-aW0x3Vi3Hn!dV=NopEI zRT$)YR=?S*Gv`ZlSaR;rT=;_KB>ANyZ@p+~-X-(K9k&ze)#tjy`QeH_Ks~FSw!M3M ztceN7VP4!aidAWCsnDjjJ)ZjXw0o4`j<`9j2sOrz;{}LZ=bFj0)>dd4UvDG5X5ZgJ zvJj*w$6?;Fp_kh5ltL11*z|GYMf)iVzz+35-bCzVb_ck@uQ<1wS>`GWx3H}{kF;7^ zjvF27zp|;*c3ZKhaG`9u9ngpi_#P( zGtdm2(w-Gj+}GJjdWkIZMGHGilaE@fZQ>acafRQGqpoXa>%rbAx_}EU9{%Td03>AQ zvo5|K`14M&Ym1KxYTGfv5Sr+rMuk{v(=(MB+VU*i_~6@HVHoc2F{a=&}&-nA^eD=w|8tZ8R(){*feMSus_@UK9J!PlBx zalqO$+{Ge;ZjnLrx*midPkPrEkHFH3jg|Xoa8|2LEexF=d%N`!nHUxO@gTu|E9oBx zcs%NIT3G5r;MhbI*}xZXn>!JbPw{LRr+hW|DR-&pb~h18cctrBQc5TDq1=%|Q~``< z=IfGu1%8)!8{j6NbE#;$k+r+~9-U;cSw$xSNCR`9Qd@D)y?$Mu=X9|ZWkU-q$#(DS z_n0g_N$gqpKj7Ic7Wz9Y7_H!n#bLFT$M0HPoz6($XFPLWsiS-*z0>raM$T*NtC;WZ zMDv1ABpiT$I`z*D_+kwQO$rfI@=ixe=wsAvjKw^~C3}Nj-c^)S`lKmWTV4J7enxJD zVIz_7&w;f43hGOf3W?jJXPWHqZep~zd7P?%I3}>Q4O!mpVz+Jq&2qZ_sd*)n+vhGv z%ZmDJ7F|Mx2O3baA2g>cBc9bSpTs^QFeIP3Q-U$?TiQLOns%fP3Xa5%Yd6Av7QSs{ zT+Y%lcFD-bE7)H`Unxsri2Uou!C|T@vz*!5uv2lni2}$awo-5b9Mg@YY=DpnsoKyj zxLjZ@RF?H%gydu|73#{olD*D#LzZ6hGpEzUcSd$N>@n$Bn&eMB5yu-~_2kxPi2Olx zkdqq#xXuUE*PY#X@?ilIaLPE(O7b%d%9ST}!BCX1WK`GmO;1t2OIYp-scv?+Cz`W0 zuDzuAd947FX!dRQ#c;>sB#o}4vbwT1K`YntuUE10=98%DsBV0{%IwzZo4zxa*&4^s-EL zKLLw_mE2a1c^4{NjZWI1hU|f4;d=ET_4lT;5x1cOk)E~fza0J(&G4(^6t*@WXrIED z&eCZYa*Pd`Kf5RU!}(W=IUZ6^x71`|(jIDD}q253s z)NdPYCyLS9n=#x~b^y5yNC0NPD1@xfX}cLx#y}hnxvKLnV!+4;zB*O;dSGOZ#;VDa z4jTua)zuv}W_PvBcZ`_HTmn7%)fS7X#(SLBt42fQWcyWSg+j61MtWwqgzu@Dkm$Q| zLETWSM20(lZr+uz_HUCp8SRr%7?`OQx~N2=`k3z)Q)wKYxT>;34tHa4>IH4IAyef$ zm>zRgriof6`A8@Dt7>z(n@+|fKzAJHk4k5hI$-nnN$zW8!Z&=qG2WBO1gI)V&mP9Q zl#*$JZpL7PN2dNM-q|-30!rn zv8!ir8RM-B7SIVFdy2HN9)oZIU{^g!BSx6TMF%7u#-?1B0PuTpQUt)k=Z?9n2@xm; zP6_E;^Yb;Pn^qjXixHZ-gA0+hsuhePaJz|axvNN-1Yiz(n#$_NmbS!;$icyWxc03L zIaB*u)6K`1=7QY_#(AdL*0g7MKGS3Hb%};Z0>^3;&<2AQ(K55 znPrW~nhJL9`CN2sbNj1xp!;j`WSzq}+DK(?t4)tk zi(`j&FPw_({59~4Tk#aJ-CA4C8Z#0XC0LI}^{;5t{{Uv&>0mNW(n9PoNKMAQNmHb? zO6RkN%B$5^NcnE}QkHEpcp{tkfk{!GwS%JF-$86d@_gi+WY^YOkLQiVEPt!Vs?_m$$K9$OziU21a1>(2f;BcQ5neoxL= zuQ}jXUE+_1zAEsym~Sm!Xu#^J^{*O}P?jxB!6H0(JsY)mV5m~98`EjnDbuM<^37Q4 zZnYA~aP9QPWkn^gqn2En^=M%iBPyj@ZQG&L$*eWJ zoJ)duJX9xJXOVt#aC_Dmuy}hQ5J~d&Jr>_lFb2t0ywuGn(%YD4yK}pQ5urwk~saBHST&G8p9iVf%5wIsi5&RPY%Xlfrlo%($X1j&=N}yoL1}_Gb>@F0QwVI*2}Q4 zR&PF3uuFuLyKVwZ0*^k}ad5pYbK9%Yo z2>p;Wy)O0{gm)85yPq+BQPYf9>7r%}?O}0Eh1Eyt5o9Zy`)8iteD)(g{k8kPjxT z&8=Jc1ddKSoLAaWcqfHvuXyvT(yJ+Gv_2^DXYAAAjYCtontd9=>D=K%Krp>|74z?i zzhjRJT*Wg*V|8nDoU2CI1Fe3OUR?>MC3)x8vP6MyGT%Dqk<{1cSgKVah;B1$=6Sfx zG#ayxr{zsqXq-b(=iA%=2T{{Xey>0diZL8M zbRg_O{3AUFCl&U7`!N}5LV1U!b((zE(p##=%0Ly(Uk^NN)MYIX9-a~w)gB$9{3+A4 z%jiAtCl&0FTgRno=!z9^I92Q`qFAB_Cuq%N>QmXqz{=^s?nk|SK2O5< zY!rQ@R;-$knpR8hGOs1Ny0LK#WDHjyZ>8QX!^q^QCns}PTR({OYimNrPyih=KgPay z@u$YU2SdD=&3K55ouCkVpL+Uf*2Ben?#C?*s~K8+wBdGo<6c>5({7$c-`tbZpwmQp z=DZp_JXy+-Um!v8WjtN41hbI6yo`Aqe_HyJ;r6E$rG>jY1UT#xwfWehg5$t%Y0duN*Z96P6I%1>UmK64R}RE(aMN3)$)SoFhc zNbAlAC+S*x4Do8Z?5dL_cM1*|W752OZxbe~Bw`0xnT7)%D>Unk;muiQj_8s|J9E~x zog6!pd!rh8JeuTtmOe53GCvf44*0jimM?DpBGVK5M@v>4m`ff@BJun~kHWtnZepI= z@>p)+XfBb;NgFN-u;79_at(gU>3Z~+9}%s!_-|4sW&-d7w5)y3ewnY!?~YnM#*6z< z_{PrS#jH`U-s0I<=X5T2D-W(~>oSLjl^I5!>r=qYviV`ApL54DM29^+>8$5}Q;bqc z)SRAA1oWuM`M|*(S8OKwo>aBIgy>0JXBa$Yq}|V2skj13Bx08%`|J7Ev8vKCyGMS} zsOJP#Hs|iHdmQ>!nae0<>5eL-ilaEreXH|pTT|EdGu#g-@Bq)_RCe|GTNR+iSe@j3 z7OJx5Oyupx1}k+tp`@F+oXA5QoO%k0kZs2&{gNv4Ky$eB=}|Z#GCuZy3h0Zyh@4W? zqvVaJ1D{OO7A)tI2t6xAAOvSQ#WT5_&!J&#!jQqQC`qNBfIb(o3iqT{T2d^CGy+BuK$yINuuDWv2 zdR(mZ|v)|Wc8}0BjN2g;D?E?qm0cEw$DW;C+l5hx9s_>kCsWFo^l5R@~_g{9|l7mv}D5? z@z2UX!nB8mZ3BSHFz3a!QT*RDK% zT&Ve36k?^mz7fL|Hxsmx#C}yGzBe@DnKbOI+44E(J_FrrMma3br)6<E7bJOPTGGD$#9XRzEYjwj%&yDiDJ0%6e(y- zZ*&<|*OnMH@YvdMr$#j+X*YA?p$A%f>Uyo0!p{Wjo;dL(-NomdZDlG=V+QgSQJ3cD zxy@6H;TMN>##vg_T;AHx{)a9yQAhJ1{d()XG2knWJHzl_#i`45_b~qeq{Qcic0!`wKU_OjH$@VCSJJ9r@%7SL~1 z0PS34`q!yjcxz3K00@H~f~u|elMd7beJSgy$|S&Uyz^e9YvHM@HhsU;B$cD0EL?bN zPnIKvjCT8#&&}YwDI5?`d6ElViYmZROO?3`W(5wT@{6trO_W2T3$}G0dW~I9u(E9%h=M? zGOoZm9CxeJL-suyCAyF2URwj2=ODh*?{zP-O2mJ6BEL(5jYj5{i?R7^d1pOzu|+j` z=a}O>oB&O9`hJuy5Xn27xX8)rSr^)6rM2jiDG(_1G~2yr?3T!3kQ{N>rEgL$s!EQR zJt{3bBy2-=cYKV2zACwV*?=1xT$R}43Y_Chib9w z=~_Y+S2fYmPKDD~GIe?6MFJR@eih6Md&{?Duz(LdSE)}noh^|ptLAhA9Mg1(EScn1 zMGKr0il}3q8gJay9#r7dZKKT%t->)!Tw}5CT6Wq^ypS0Q3d8RLYtgkED;8(+KxQ9w z;;^C6ceb1cS5`^{MF!^ykpv4f^0&@kM)SKL;-yBWSrla5Vo z-MyT8Sy-Z0a60#_dmy(H81QmW0=gY%JI$+D%2gDfGdA?bxr#7jA1>P0cGc&T%!(tl z@scWxer}(&nB_s_6J2hd;+rUK&zO-jitw>gseX7tNSc);CGMjZdG$Cn-`*)B(2P|Z z9}r6fu4aROrfO|l#PQtBLdJ}T@WoJTyGgXx2&?9i*j3V?+&_6waw(}b?<1p&#YN;* zjR45(GgNg;okH$1LN>xWkzA&qclJyD^T)XZb;Wm*YfX7zk=sSI9y79{t{GwKCkScW z)u^VdkE_3Cd7^?_Q8`s|Ksn&`uhwr4-`d5az$4p@x#ODrL-<+ZH_*IS6jR(RV6Z9= z90OmgUk-d(WvTdX1LmM?bj^Mv#yr@3d#NR()cv!DDNw{(}ndmg6VB10iwag3ANm~~j$ zcPk8$UTiM#8R%Z(jaE4Aw5dG#W|MB!kds(ey3dO)_2y|~yo@}dQY(oz zeGz1 zwq_Sdc8uUR{{UXRC&hoXl#^JBje8?Lm*ShB5csQ7GDqQ^8CDo!wP3dzjl+Tx zH6Ppn7GvluwfM`XcqVUye-1QgJT+mYYWjVg4Rdh>h-Wg$o5~Qp923dUQfuDJ`5=_> zJyp_u{STF`$9a7U@ufnQuVr+09|a-CpKB}1(n=!-<~8*!k;q?S0(PzEw<;H8BB0BUs`)#{I^ofV2oqIXR1BJmyE z*9xsM#(P(JrRuU60~roIJLbHm7+N&Q1xP({#a~TkOHud3V~YA}8I-9jGdGl8Ha*%u z6A0|WJ7jdP82E|e2-8Qoc-RsYk_Y2ej=szXBL|*q%RGClm(cDN5bq-c9Zyn)3KOOL2Zcd5e!yYkT5Wov!Md?4rv`mDIm2 zk9y%PJRjoAc+un1?it4{0I#i%0u^YfHL3MjdiZKdU8Hvq-pG=nB}(Hxd9K3Jz#iPQ3pBg>A2euOvXMC*6)1^`^gquf$=aXA+aulRvFzRn?QcW4VqOFu)~u zE3;=#lu2oEB(o#Nk>Xg(ZQKYvaqo)xoA$BP`xFuczUj zdNY?h=zMP$VsO)n<$X_--I-YK+nwA2(xcow;!S#8@4|l=S;4+-Im>Ox{3`*x6XG>+ zlIhZ`d>^!LW0fEkCmGL5m*xK8u8{aI#E3EdnLBsL6wmlXd`15NK)avH zwWnG((V59Rof#Wq$8Oa|UPd{=?kd{FD-V=A4{=d6QseG1A4>QxQ`>fWnS~T`K*9Cv zQOUP%02!-~Z96de2pOwUX*1lNs}o@N6{J(KFGOK3`3}{_JLZ(22N_!HV(_K>&4h)& z3etJ zYE@n-3g`d+3Q?*yuuNtvqx@_a^XSKBt9Q}w(a4vM91j^Xt=N&xTj`tQBL$fU*KU#)OLw4d{a6JL8 zTs!SJ-`1mZDMAMBxvqI)@lw*kIN{c}Gc}e*yU4*OJo;CPYH2m+hyW5YM#SJ(uHHd3 zts*vZN6Kr3)Vw)&8^-pSmP5%Kxf!k+`6e$EuA`y(S06fcVQOnsa;dCcX!aL2m{S~! z!So=WYcEG=UI&*3ONE#ea(WVSPAk)N&j9KgrKZcsAD&4ZiogE=3fSn$`-Sp^hb$YK zSgey3cqQtDOq7a}2fIpVqP zNZm^Y5=QxkI#)L)VLdrbJ)RZ{@{!JbK=G7NX?F@8a(D!vt$t^GK-OPe@lEWTnc`L| zLwDrzEA0OO8u)8lxkoWH)5cq#56kObCI0{le^8#_1l-%C+;F7iXX#&W!x=s*E!3*L z56gJZI)vA-q4Q_S_xgS8`Y)Se>2!l3qhZSNUU1qJvR^=Cwwl)Gb{LV z9YN_-w9gLQYL+=O@s3VS+Gc zuTF)zedKz$PH9J1bMn6C%1sgj5OXFETAn>)RhGm>6fWuqWi|Rks(#B*-dvde&mPcn z7$5$%XD95*aipm+LS1_O%<=hFw6h4-isy~x=5$I^Z+@xhJ^EvP9>SR|ol4)L*lGi$f5a+~jkOool*MjGC6-Mr#)7 z+m}P&nC%X;aI0?-+IZX(72jz70=YO5+fL-;e&f&KUw3Ffv-OplC>GcOvOtfYlpdZe-l?BaauFp1gD^FB>4L^jn2yH)g1LW{V z+UKS4p0eNtibY2Lfh#E`yi@OyE`@~Ge8R4NG;!*J+GuG$lwHL;yKbs;Wh z&&q9c!Wxto<-W%&l73ON^{xRt19_-wBu`-~9P^QmYxW-F;T@I0K6Sd6J%aT2=~QC) zBWd=X!qE@aGEcpCP_H}Q%OTo?qtTt=v~bwqn(^6uA>vz2b=EyLa07g- z6xZ(Q_$>_9?u}}#*e{n@S04d1)*!v2y_&KM*R4uAs6QdWu~gCn?xiIyE9!9tBU1%4dNv9KNjr&0A|fbdBK_|mAm9|UZbS` z&$HXuB!6Ib$D-Hj#6J#n$dv82Py6Dwpzt=Hh^ir6?8?*4tm$8u8_O3%16?sIwWoPmAY4T z9s`P6F-wiA-(%-JYfZYE+C>}iLFhBqyl+|fZ++rKn$m5;(f;_^$^2{W>HI$rKPdca zf$;nriAeBqgN`fH!ti`(yPiH_#TBtC(%ASm+u#j`im3Wkp@vWk867tG+T0MmRHJLwytO^~l zMhWLTb6gcTIyEQE&$7#S+ZBVPsi$M)82Ea_lFim!0 zcrt_}r*C;}@8Gh zk&;F^`ckFB5QO>Vd2iRgr-Oy|ROF`B+GoRG4-;RB(rr##iKT8>$a9XIeJkq?Ch|3~ zj1r@a^IB7UIJdBN@?pU1gYIN6smKU08;*!Cl1v0C-m|W8pi&a2sTV6N>gf4R~JR3YS7KGtPah>iAzF zuPWD>^V$CZ6ye-$OLGTK_*ti3N+y=p7bn$gv$Xh0q@hL@Hoy)Tl&@IQ^rDvWfskvl zipOfG8_35zSM8K?s&R@;{KCF#T2kEb*uE6#(J$_;VO}}do$68W*1|Fy$X-3M{VU$m z&35pOjMP(G0GR-eaf4d_0A^5o#N~L}-^_TDcnZZp1`PM&pZ@>|TnivkZi9{nKl;_} z3u(tZRQ~|k=uUE{j@8jiETwOT#!|%8d$Y#l@T^EqVNwXk`QoJi0EBESF36V)Uaa;Q zV~%<3DHg+XWQ=`9O!Dec-X?COpHs{u(p6mM4*i8}+vu^m`Jo=%S8Cd5Q<2uJMP>wi z@@W;~#dk7vY+DXAtw8{{WsV>+63C#*u)~QpAK7=IftBMBEABq zFA(2jSth!l9jC($?hD$LJ-DsgKZdbFz>9VSbN6fNsPq^k7~9QUhewZb!h`NbRBBh6 z+{#Z)S@XrGfMXGl+?5`sD`wxoafx{WaDTgjUhH)2AW)=Z&{cQS@VkJMK9#jBHA!!C z6rztMUk2GI$p{EM@l&4+>B@u*1CL7d3#&q_oNeR1b92V)HbEOeuS%X3Qk2TGDwMJz}e?Nq$}q>egQJg`!Wvl^u|TaQQ5*}xG1r=BX@dTyNpkg<{v z(A02B3}_c_>eX0UL_aPLIIO3Ea*eEAH#H+QS_tOb7}!T0IIfDp%SfmRJo;7(Sjpy( zmz?rzsnV^=%NPoM>xzdAsnl8?-}aqo!pWT!R;AEqCaxJ;nMg~&n)W@_Ggwiht>XHn>~6_Z{fRJX-vi?c?sum$gf)(ZV3iFuo>x59WyF( z7#@|;43>;mkvxj{nbn=<&p830U8xXEayATBb<*5Uq%x8ZBE2SEEO~?XVErno(vZL1 zAXLvKq}8pVROJ}#d6ZfiYmiw;C!UqFABX;2^cCn4>FR_9QJ;F!OFXFgKOtBCuF#VB zPRd!mYI{iYl+nVj&OqytQm%@pff+vduR?1zSqA9Fap^&~0dT9d{VHDy;dgLHXZpim zZez|R(S{W~ybSY^RA%t%62WopUa|I7VgXU^NT_79k8#?+omcv^hFYj1XP#G@w=v{t z;bdhY)ff@T^`}SRn=RQE>Iv?nr?q;Q*-D&*81$*(gtKrlT~zX_anVHbt5)ZCZ1WM| z+g#wp2p`@QT$Q^#Q=*I~iY=TneN0vq5xMCmbkeqr|mhk*- z8tse>4sbZHK>Hv=k&pNlO&zM|oPHF2ULB0pKIfFl;pE6BH{H;2#ap$|)+rdW0RghRk&!7ROxIJHbWEV?|A*a}j9~JYb@n0gjZ7qQ-IzeEN}H+%{ma=b*<* zm8_A52{^6R6KFL-$!h#pOjS1XpAsGIrOV^;?~BHif5Rvkderw4ZL<0 zxoM{%;{zwJ6~8sABNf~8XSGWNA~(q#dsbAaB+TkU+ZgSprz#^>1HNjMns8i=xE<@V z@_~K>b4-%d2#G&8HQ)7e7KaXW;n6_b?kdbWdItw?Pkh%(U_vv4k8w(oqDj*{(w-ey zW zXaUI1dkW8MB><2LkJQeG*?_!-HLL=#s^%TB@$ld1kkK%L0$)^HAC#_CUJrFu9kS# zL7lu}vsMkRay#*gnbJu+7GYdyu*xyDPDg6s^`8mC@JY2Y0OyMKWsDR!2B_Xzq?V)= zIX!E~#$kP|EXNr*?9Y?0d>IhDCu8H-d)Ahl;OMdykmEdYUd4N+ubRgkgH|-_3`vr! z!R|S)kEg@5)qZOlyi~fgjU%oWJs3YFaK%5dKODit89 z2WxZ5sf{aK8$h#R_#ljDiqnFBF_i8D>sajx+{H!)D&?YKmmuyng-GgXn%wH(<{^y! z6=GBmXxx1&t+w#1^6{F|kdL$SJL0i)?zJxHx+K&p2B-7-XpHRPJJx6so0qQ)uKLkzXFP zzwnQlutFcku*79ClhGd9oj9Y#=eE0Z(wi2acG3XRoL9L;;Zbx`J<-94#m8$NJ7c2G8FLnLbDHez^f?(uQR~(%JT8h<~nM=6SX z9$idUr;VqE9h^4DC(^nr9}ftfOGT64*1bwCEC$4jx6t>gg@lOtMU1bhu9#pU6|kX* zayg5AHaOKt`D<}3@}nmtiqTs@P;jMz>CIh^9k|Hn&{na+$6{((tFnSwE)*{W4s%)y zWCUbRmXgs}g25SoH)NuKD8i>Dg`*m^s6e^A((gV zO(T4VZ4R33IWiTDXQ$;>!~>6)Ii@PGV}iA4N$b=P&a;&jB3=3znuVAw82r3;^sJ?~ zRdyI8de>8SH{0&ocVoR{1S;n^=D6zNz2G)9*vmkpfCX!{y1L{H9CZ~-P9w_4deuA% z=%+{Bu$K2RrncS50OQcp5fymazO>IDm?{5wN_Tcc~N~$T~5VT01`k1 z)GHotc)$d6S7a%iZO0vjLNE`$YGX~`V&zpNSyd`Rt~2XXF!@0}aZ$&~4V=`(Zotks z>S@)dZIPWOnO|@3dt)69NQ)}ANCk7+o#l|hvNK9aZ{j1{wKzjfQB@iyUPvGuRODiy zOogQmN}Pf@tv!M!H4-b#gw42On2a|7KOEEMka8_DM*IGg(e^>qza! zIH;nKGVp1VK3f3Sa%$EkF&wFj1A|d90YZfbjFVAI&IWn*sQl2mT=vCGmG%|cX`CcR}&G>9chknl_#2}@)c}zp0xQdp)X@yTQ9id6$Q+gI2Z#N zHAqjD7!5>@NFbio5~CI;Jq!!P^DhrLJ+W5pV=J}01IY_MeR6jfI{x^}9sa70|6%BnTN2f43GoNTRO^CtCXp5_a;E1!BmUwJLh(z68H zpE)_lN}ODhhmnfCQygZA8gjE>;i_M>gAoBuWjp@!JeqpQG1Sz_Xh$};G?9dzP7Oyi zn<6`U`qdLFZrZ0GT5Gu{1oo`tp%r#(7j#O_N`k~>jMGc}!w0ohIVYC%){s6E1k^8qE`7UFRb9gIHG@XTaKv$nw+7WJa&ziyok?){ z&l#-AVeGtN8u*DDS7SP;N4;}xd2B0yBOc*(^@ zNhP8x`VDyrlNliQrs7ZUezg!{^5+MGQttl%Wxp!qZHnz0sbLyK4jPy2asL1b`qspO z7mj*#sB!_o82VSY3Q8+uH$6%#WTiUuRPHUd^U342Zz`4<6-wb-W--9z`qxb;^D@+q z8&QNRxnt6}yP^bV>s{uqprPtX?OYwqOeQ(T&^lMEhouD1Lk`MI7UBu%SC+{RK3tz_ zY%7pHQ^~E^qr#4Zy>>cjqtJx98LML%U9Ix>#b1iaIO8CHbXJ1KGm;e6ga|TzP%}x; zR=KN{_bFRx%jO0>GhH>Ulqi`{cW1b!!4Ua#kHWPOC?g-0a?YCSa?X=_j*i|HIVw-# zQW(=eDx7^O;gyi$o0eF~Cydl8NgQ*eg!1Df45pY+FeDBK7^m*Z1m~J)dKrV^rL zR{sJ>y`bYmYYoFd&j^ zZo=bv8?)B6r$xO_HxZ_%WgCLHIL~TF+FzcS?NCO*fWY7ZO3lV|#W_*3Jf|{Xz^`0= zX@r5_KT5B?eM=u|Ln4Ly*r-%nWcx;m8G#w*o8}HVBZ{Rwr)E^-RZ~0qrt860`%T$gm(-TvUg{-DU)+<=WtwmR7yPoJDP$+x34+oth0^iMsgQ5 zkqn>_z1Kd~ePts&1|Id2(TtL5nULU(-=$OUH(B;l0jc1NXE zFV7^@a`z2Q2^~vka`dQtz#6Hv>YQMc>rl1EPDsbnr9)9&n&~(lGmiCPXAS+}D-mV^ zMo(I>mjMnjxE^y(QB4Be*AuIZaxv31-RE|5SzGrKOE2L{ZVARt0IXCRklQv^QMhsi zB)1z6T#R zwRH7J;d`2U`O3F7Se$T;j##*{?G}? zII1(xx?Hir$4agwOzz7QSk5nE`WtCC%1(LCIi@oMDQtom zOHr3vOh`7C$E7>Y%MLJWC+$DQnvC9IzV<7kijrE2=;_i_S5im^6*9^lkIkG6=QYS1 z;v1-Hnmt1xg(oEA0=id3v^ti#=I%cO5hU1)?=azgq%XiLd z^mBsQ*H}d(~N=B$1qxOC+eyc_SkSHBiW#a1R64u%T%^Nt$VB zK1t7$--@a(26qgT+*DG^0m|n!M7ac&ARl_}YeN-#nug#3@|-d2nvhOBtmo@kerlNy zCyq@?=8~X>!1Sh4iKq5}N&DZGD$1^UkbUbFr%>4B)R5eM@Ze|bSl7QPNi@y1ZKolD z{Ay5JX6*4;{&&h-r#w@|*~rN%J?qSr+cmner{)ZEnr89X)iHFtc*A?tFF0v{-=5CA#P(x*lRMSVJpxtop2 z5kMU(31eR^o1yeIKH?XQel5hBWqDnv* zZ^FCWdmfxFx*ChLj-su^vKasih3}fkNr^c-Kp&l5j^PS{wV3CrIH#?FRM%5-E&KK^ zG1rq;m7GhFpF>ojVS%wvJes_%gV-GRtSWR?IvrS|(w@1=rv}K!PJ7jFGzUEh9+Y{> zw3gkR@qt|PjgjY9sJa&&fmHyFqm%1d^GtGhIqk=49%UTl^y0H+nTzLx>0HuwIAD{R zZ_Q%BoP&Q6Iyz^ua|##sJT=;i_X@mx}D>62EubdpH`jMGaWEROl8a@j0tq0ZLN ztvIyN=egcQ69N|`5^;*emNhOwQ}3GFl0%cb2aYjRWWz3UGv1VrnpG@gh}ARPb*l18 z!AKu>t!X@Qma4KM?H~i3)lyoWPO@fJ^S{4Z*RY!aaz+}nOj}=^0&3K2u#Q*P0=ppk z8cw2U>>{}Zcqcfie9*%MjzHi$mWX97pT5K=_CyvzQ zm9w0%9{npb&mlfup7cj`ylpLxdQ)*kx3V^p2i;mv}(aQUvrw* zH$S>lf)9G-qnG9brCw{Dv4A<_y+e+KIcjW~_s8-&_2#2#U#T^WZx?3b!4IIQP3dFz zuqqqWu5)0`l1a}TR4*wfgO9Ccy~_@S9MlHwgMqvp`gW#W(l*}bY<*69(6@Mp49AMW zl6EhG+4@rbpa`+Y<3oB1>6__zxZ#gp^*Fl)xgn2XT&LQ0zij(el)44FW879!upKbC zI|%?QR1(PT17zgZT1>>`F(clrJmE&tdWy}ow;J5bna=aU3!V~V*esbijd zj8zFFRc!Y(Ijdggv#E7sS}TVc z?o5rZJxgbBARci_XU{6%En$flvHYpxL!1M}GL2t9dEg!?@y=EA&15X4ax;o@&z?yj z_Nc0^hj+QQ_eaYa;c4dOp9%rlj;689n};7T9N_e;Ya!UAecW_4%?c{l2|Y{VbF|`~ zlH`n)+)sYBou7Wb^lrfiIl<~HM@lvevs|-oIO$Ml)E2(|&V9Q1nYpEvz+&6I*&P`L2>3}(G zRweb~`9w2hW2JT_(4@N=_qSW3f0%N3#d6b3c9KXu^XpSy-fmNjC>;Q-7MtfKjzO-9 zdTM&udUi&%FY{+{$GvCt&v>7xfuJbzW%jxJFZ7L0B4%oH!-VD$8m2k+NaFN9ji(wQZc_GxVwAc zBLwg>T4|^t7+}M{6%tlwB-`k84I+X=7rBA=T zRB4nhNC1P6tyh}h1YM*K=CzAa6R6o@S7rcwpyRDFHxaPQGkexF*SM28Z^Ema;LXI1 zpGw*e?Add2ongA%qsutwoYcO57%U0LQC!S7#bYYV-*rtT-snM0jwkV0G7c681Ge@=y`($jV@$rqO5c)c*Xv0r|DChq%q?=O>+Kz8#y@j zsaE9*@>p9Wsouxlbq9< zQ};nRu54c>agsi?^u64EUdNi3u$;6ySnnJu7zF#&etS72;C(AFTnq!r$n8=6r>;GE z5m?QpC_aYD%11e=KGD2q=KO09?I(5%FVd_e!*3@Q%QPdQ6amXq-=~aV;1pLIBqb1PZK_?5vLT&+5w2V?t`ZApEjWaj{ zu1~cwB)LAo(^~80+m5F>6_nQsRQ%Y%#WXhVLH%nvRO}qC#*17Kxyv7|R%^5< za>I6NjIt28&+Az-OSVIf-n9~y(C=et-wnG+C!VyAeV>#JFe0 z4_fDyRE-j`)xE$9u4&X#vDFHxD;*SfX}{(y zSdN0U;<#npGu35J_03!tjvY%r02sw|!$fk_sF~I!!)^*#pI=IuE-=LB zHOwv8XTWiccQhr~=jSW)W1jWu(P^WeRSvB$2x18)oVR2WGn1O-P2g5JVogEz;w0g# zqBkW^Tb;~zeYbP%R>j8beAU85e}>#xk}FLvzjcsLJku%2-?@-G9A>BzNe9xPOO3}F zsmTYp999))WnygEUBBbt`_eJ_bJ%sHc@$*lky(?^v=g|2=}|(Z)tES<#KdvPZ>40; z>%Sc5r8Y~#a8%<0v8B5u$=#2eIIfjzklN~KZy}F0GR=tiJm$IAy&^;N9)0N+{B1j! z^{nbuNnH@9snZ!1qd9yWVxvo!1TPLpOjkYj^(Te|d(wYsAR$KOKA=|wu@YseU0mx@ zWhC!yr>7k%^ilu--blr9OMjEJmB(Lt(}M6cKr3@wQLUw$FP$`W+q1Zq7|srTDFm1u zNm0NZ>ltpw!laP7>+ez1B$Wcu^BJ7*jJS~U7B5;63Q?+JaL0ltoTfF zJ?o#2ako3m9Mjt5wiJ_(YQkwUqjZg@l%A{ywMV@F0DRVJ+#SFXyV9+BtNq%+s}!Qo zTQ{Xo@qSd}dB-o-xre;molQdb;yAYFC#`*~X_lj@&|O}P3>G=!xx35Lk~)r+pK+-% zjN>`)k4opRFWkRg0pJ?zj2YKPlPz6bhH@}PP%>v2WBAoapUqZm#lsxVEt4O^Gl&rN!RUPIg&PiN!HF`UyFZa9G9%n0z7CdzoVmpW0a(U~` zChT$5is*I1_y)nrIjP0(?uqCP6@y?*_-MESKw$K<$oek^5`6Eh6XX zLB1YAR&sgc6)ra~nCV{ii5Vbq+M2h0i6oO;(7P-^ETfJIG<~Uq3=lv()^br^qH=qk zN7}I_+~E6)pY1;<47v5LRc|vVRqN38t3vIF$k;&Z&1WlHVRM^}b(ru8e^P3!_oZX| zxvbB%DRJ`w$3awOy8Yn=xau=lN%St8yDVH@HvWWGciT2i_m~682C7Xv7d(UXs)Ay` z38IP?02edcmX+VA3SbiZrl;|!p4QMJ)54?ucjwR6Jz1;`suPHI7N zNCQ1bHMA;8vli9O^}5L~I2;(A9+0oZxZEu4hwS%w*C#<-8c+1MYg%>w2ey zkEyOCY8f1y5$RSUzXmc17|(jnQ%MinUqh~I@CFp*{{XX5$$khNoQmb1>@s|^DuLdi zYuv5_bL;C|vczZ{$mrhlAm;}ssiu9q3-awF*0}?yKbp!Ik`I2BU9}frK)}agS$lbI zgxfm#FUdoKKMKyC^psqXKs?to_O=;d`6H;R^InI>3u7GSv7J`;W~td~bOQeXYBwMr zwHUihhAu-MYn^MAV4!1;xisN0-P;wPIv=%()<<~kxmM3UwQf7NE%Sq)Q(UY!DvOT! ztLb=l^ZC&!SeVaU8Pk2FZ25^E>rHF0W567H)(E_eN3~ldobgEaIbIkV%i1GuXC!MI zfZUJBb*1}2RveR9B61&w=h)D0M$TC0H4d`qV=a-=eY z@o7CpE8kPLlThP1I0my``CoV~^AlY6_Kxg~uRfJlOY~Os;-%u%u7}N`p*6`8l1}e> zr!J%WvJO|8%zME3PNq;aoD@ zznVhw4^k@ZcXAk8XjR7?o=s&=tdrG|Dy<#7cR_$7<@#0Vt`Xn&gbu)(<87|lqfo>H zioTaQU^n;A73<;WeN5cZ(s`k#J4*mK_Nl(ng1I9g_pBtiVI~GZ_v=#$_OK*mX1z*P z(nNFWYQ5g(Zk$zbwQ-WBsXV)%tUz#7p7qqR7bZ=uPJ%n4vXh=M&{f#A z2l;+%4@%-%>4P3mOjFYMmB4%vSMAc=N~>F*lLh+YEY+;Hs$%M_r<(GZwHHux&%JEJ zst+d&_`v+@n-NwrHic8Jn)EOu7&*Wqu&yp}j2=P==bFotP~Z^!b*!ta-!ZazUihwM zSC!}zsGBuj^a%d>!K`WT0CV%4)fuk0Mj3X62LnB8CTpN1IotI$obh(n<}!CK+-gdk zmTXlu)dL;M%(ndMn|(BMrwU zyQ$)mIpaIKv!?UY9N~|sG~cu?c`I07Ym3VyI0W;Gs`u)=?hGqQViVA&>~!C00ztKa zsoLwH;GbIL2A~UqHsjW>E#b&g0m#TT!8(@MxJf>zMz=k2 z09udED<|GH=T@$w&7-5->Z7?KfhWCO`(%E#%tdwbZ6G&2YR}pu^go?UaWQDn^oE%1 z<%LtYx*Idp;}x0bv0uNDj@3%$=l6UQU!+5o>}dygsOyXN*hwH(B)7wNE!MMdZqyb9 z$j4g5d(b^ictD>EI#Z(wSy_xXRk6yu;Z%eD67!_`N=#M^qdJJw#>EuJi@Uvs8= z=Gm~YB=f~UFUo>H9&4Oyy~8{M`qT|~h68bKd8}R`lXq*Qru%cS>Z3li!+D+>Ko8cr z&$MoGz>qo$X>!EigYTMN*Qugz$4D};%(=z)|9J7Jz0!u+hc$2c?Cfvb~RkwN#_gL zHgm@#-nlcW0TAxl>T0x_rWpLhIUPG!GsNp)l-;g%?Rqc>EX4H!r(3>3-P*W?zsl!% zz!^9^)00pS-G`=YqMc;Sqfw`+-Ywt+<+3W2(}GFfGt^fqx`zcr5%s1%qDjU{9`!S- zjTJ{@plg;b!vju+=!wo-w-wF{z*ju}6*}B6le^|Eo-2t>r*k{2ok_f9+6!ks{U|z_ zj1}FHn&q17YGs)6Duma@J)|~C7y`L#Vm;$I%~7~nQka%q3G!!rEXuRUx020O}} zbg3fLuoP!-#z{5J?b--P?xwsVLdeB|9FbK;;bK5y53O@YPz87`_;jd6@yYV>mwfaD%BYI*Ez+*&$RoSb2S_U~6#;gn#IeY0GuT@m+K1E0H68=N*5 z9;cd#*RvuQ-0Drx05`~^rYVhd3LltcdRHYi+49HDw+5h&_^Y!9W+ZW3wJ|-5Rjr}b z{kv(-PCeyk^~l>Gd4;+}7QOz!Jat7tDnp=-0d zuF>A0n&h$M{JpE6d$XMHUY!j_Zn8ix*YvD;-N(()=_43r!yZj)s;be&v`xaX0BT1KkSQny1;u~f?B4%w%r!CVaIJ$_JXfJgzLp^9B$%T7u16f? z)^ztF)Mw-a^{lz?kf{ZU=NT1~HlRQtuo&r+#dX4>Xj7Wl)|%;wz&KOWHB4O??tlyq z4o*#T@2MvxocjuiuaIqQf=KU5brLdc>wmP*o<>IBYOMdmnRvh+wQVnQ z;1*Ixy>q(jsJX1pd$tn>#U%2YTe4S0pz(7Vf0XM*tC6 zazB>*Fj0<`G}nCPnL?4k6_IgrrFR??&{Re)M9HH--H{gh^qVe(=jCHIjFMxlW zJPdJF&Dyq3GCk`~R}Do9&MfF3SSBNuAB|YD)Z1_y*|E!ig>f?6e5B*QO0jKqi39Qn zLyDQzX=rOIj%oKjX4?I5uB`bzh^^Q)50H)9LG`aSvb_Xh7;)-rbuP}$#Dm9UP^!(b z$4$=1`$%+G1xH-fX|*75p@wUYmi$HuJ*`PWQwO)zq2as8!+Uc7Z5*0kW& zRFV6^?_Od3ra{I*KJ_G8j@BPKjGlR{s(|PitouiI@JFFX&L**p-RS)tz>$) z+mr0$FSL(AS=Tq|u${+_yjLpvpO*m}i9XF-{r0*R7Ao9(oY&~oF=*|hG})=B>MOn2 zFvq=evudGaKR!6^T-D~gkok4abJn@pHC2?KopL?v(^Z>V9?dAbTlGtiAKH8xuGo)nOK)fTz|`jUH^&zeP8$@3I_ zI@UGa?%2nc+>TGZSJzY6;KZc{YTaMrQaA(*b6Jmm2pGo)n&&PxEXYA4C%HA5E&jkV z;N3N^X9VxKrJ!8 zscvgCtowf(cO28ByWb`OImbD!O>Wq*+SnN90U z0QatXm6@eJREsi52`*TL>&IG>8@;=54iBwjNpi0UJAfng6%yTocqb!)Si+;ZrD#RR zL#$h=4nW#Irj>6uF;**|t#d-{f!xkIbQKTU*ls?jy=(1O=aQ4YhfHqQ&B0(jedsr; z2^~|^*C!?6-U$@bs51bkXj+KX9N_J9uUn)qo%k508`V^75Kem6CfCQy;~A>Wd%1zh zQQtl5q7`3q9PiNVUr|-c<#X>@)9O2hRhJ9b-nmA;3!TlLI@WyG=eG)ZH04pUFXVJ{ z>PL3qeq8pdZ+_0%9M>;3_qhP{sH40p{INXa6_wftwa&?JSf^4O(yj}brvgAvrE%|aioQT4=*>Cy!3`tZOB>-H|XwURa&JwAP%f zk1U+ytp;zC7~l?sRR@@EY;HVvsC9XT&0|Gw0?E6n$2qA!)}{Azj`hzy%LCLNJ!&Vr zZ&TBtteY)68}nTQ762zEt9_#k2t4EPtUtB&Y@b7#gk21rG4>UNd)0XFKj7xQ> zP4?8|oQxX9mh+Nv+r3bGzA{Mb&{h(YWJ$e_!Yk9{hBzQ`j`cCSQZf!Z3gm6?w&Ug> zjah5uD%}s#oM&Vxr_|NCpYD}xpW^had1g~7B)42t6J37qk~(&*S#I#7ob%00q~!HF zV3S6aw`z>a3uhFmdYM#W;N!h>6JBm+0N{hv)I#lpDc!vHH2FYheOrnUNj zPu&^sT*um*%L5&%Cb*Hgz#}-psZqN#XzZiaIUP3p^fk2(rMCo}*PN`*Ht~_^TG2~@ zt+~iPwQ+;yGnAg}^a!s+j7TIC+O;8-f~hB-)xg1W+xW=EZd+Zszy-1IU9q^9x}BJq ztR(Z#dWK835rK`vJZ`L??EtX=PdI2de#i{w^V#&XMxhYY1O+q>c+;Ayg~>dao(xD*e*zuIPF-|T%Mcv zH|12Nxh06jZ-mTa%sm= z!mAUL+zR21+b9H*2lZicJF#v9^>A#B)wqS$NazN&DUBLr8KB!n=@KZR<+eCR@FE1vbmR_%(`-1Yc15EY$^KhyvFhbO1Vp+q@M zDbt*i)7UU2kvSjdTyj1oHpfZHsakU!VrELthdIt!kr;ByITp&=oRv9zbo&1G`wzDF zV~_V<_x*Za*R$vJie%^E&%dk3b9t^Ct_~((&bis<>y-4??@rC59))R#{{tX>; z*L7HJ&J4TSId>Q!L7y9&#jRcyMw5iJ8y4K|q_Zt<{U}Gw3z7ck`>X8tL!rMsmB=TX z7L?aH{Q{AB#W+Uv+k#(m-n4}j`Y!&GZuXO1d!K1_{)Fo~-*>J(#)K~C_;s)PN%cT1 zHll_0bUC5{12F?A9lL(U_g+scw?nd~d+S9lgOyA>YBYy`-_Z)iV!QGqvY>?;Bt8F+ z6+Xrt*cWaoQ6d#*5&CI~+u`$&G}gCsLW|dVuZgVvbAp|rK#qmFQ`0`M zU=PQF)LRN)2f3zK9o}z?C<(CNB2qVVj3Zg@DdwEL(t-Ff=|{daUIVxM8M70o*va)9 z5yBZ?hnN)CMA|cClMXDzey`U6C}7VQ&OuLq-(KFSoG)now>Ie(Jxe$+=iI2Dvqnwq ziq){ys)g&0C9CM3Th-k^g(&nW&yTb31f)vOHHvBFcfx-T^@&|LaNRB#LoFtwC%^C_1;A6yWfu$Ev?2mVaUk!X|qD3V9zg{VI_m6V2c3F_Ya0Y@*@E-u}F zkpFz2Ec4~`8-`RzT6Cps$HN_AJSog6zrzuJL25w7GG^PwW~4vViMSW1G`3x5MS$tP zrF6CKi2>Sb0^t^~{R{Q7{;eNs>EGe)_SW03KgLB%T&e8-6Z|fwkry-8-U-N67P`%b zn02z+sz3+V%rL`M_CJh`H*6~E^%~=i)!aVJnRPw<@Uvg0jW_mzma3jsZgbdU z92KfF(-}+V+9m*wQw*A-C{$+)AHkDsV0!ubyvzmS}$Q)qfTk80K1H!3|Gnq zNUD>~vj(NZgcC_AZFg{GH5hIRg8}^7%^g%bp;#Uz!y>Q>g5JBz)!*23k+r?_=m4y7 z)p?P!W9I$S8GRQ}a!!_HLiRbhgv(bAn{4u##*!X+#3{7j^=N9C7{{D1{D7l-)ven6 z58&@5B%Uif^avw$lup1SAV|z z>L+7a&`+l^)4uNw9?1-KIsI`>CfGLOV!n|Wy8JQ;4F<> z<=*&TiZC=ym6Gt!R*RIbk&GVUzbZY!xn# zOFc&*IG&HqI5%KWlV7JwKX)qAS^K4>y1MgI*$X*|a=&*zp8nEKCIk*gbT{w zFR5ozAm86-2%Gl0_WK31%kHO0TY9F#68ojLal<&9K-V{&avk9nk7g~^m$lIS_uSnc z9dY*nJTA-t+BoJIW4F2N2a4wdwRFPUKv@W03iONjkI|mBAb{0NTQ`hnE+V0=&o3?L zj`x?R!}(n=pN0ZfaWm;H-=B_PBE&{&{+z`pPR*9wzBDwnzSLZ5^Lj6!eWH6%-Xs|4 zSq+&|0O(5rXAS&7V%HT8D(LxvP#>~zWMqI98s$LkbE+jG&B794thR?oFehWoY|tJ zpd09ATclE&K!qC{f%86&1y(~PnE2T|Z@Dl6BbUs$?;q43{uPs;u~hnR;sNHpNHQ3I zd*Sf{B)e5Q>(U%VuX-gOun{zTaB6G3b7U|iul8@?(V4~rCNG3}zEzQI+e~osqhV<92hk zSMC_2Gy7e%eR;lgE@J6dcjIpz*Uwjy>zW?aN601wh{S#iEvw|)LNYD&<#zH>`lFREPg>8P^CRJu9xDvBsx)*%@b zZMZ@VvxXnvmZP0<+Ov%5wVla_FF7)((rT9aEWL86H+BD}1X~$w%6HD%cxW6(=9g+w zKa)8`C*_p1LOF52vFoYopyI>ZZVytlMbxGeO;mogbM3`CYN?zA#IkxJCJs)GLkUPgzqofY`Ig~QrHy1ypl z>LT8%ciG=HELMGh3`Z?p;&?%4mqoPmnA3~A+%{>786SvV6z%PY^rH8avXPBj>&UOB zK-SoGelPP*leOY{?s zbA+JbEe@OBP3P$r>g^`qPRrL~z3$~W&ZW|{ZTkx`n{LZQLyw&vSU-YE-tC@_+H^8C z^Y(!{7Y3g<)a{d;!u}5cm7AWEc%U!K2|uppVN+}I0M2sEfLS}Q?_4}}Z*|jo>dpgO z>HnmY@13H32wf3C>CVR9LDAS5O;(kX`pfsha0c_bK0tc?V^oK#wxjZqb9R&)3)>3( zAE0Xiu-phU)X#;{)BV7p2M4PRefLHpM>7dWfO;9$Qn|*T{PB-zqYiK7+P}=p;+Rl`Bk4o2Is}9 zIg9!X`2OFzxwg38InL$Trc9)7N$U+9J(L~gcX55Sa$oTzeDks^P6@`V-(B^(efff; zgx={O1=B&}nwPNy6OR>#NWt1m6h;3U&Xe~=0!Ng{d z4j6#fofx5yHlFMR*t#cWI58;}pE_oo3GX9<$%xhKscu-?UgI132ctD5X6&MB!gR{Y zah?)>e(Iu1xwHRDy+AAryO^l^@%H8(-mSmn6=x=4U70Asg8=Mt>jX}!R|XZ{0*Qh$ zpgmQ4S+7u$Y193g4pbQ}_RRYGMe!-0={a+47$XD!B|EiV7)-HsE!W`j8V|;n!UuiE zcE0G&@Tu^xF!7V!iY|F_uRmR7J@9nDA#G5q{rr0f6t+&v`8X8*ntx}gLhz?jea-;% zu(sSHT(UiKZ{56YOqY&vgrTD=MvNuUi?s$3k6(tb%65CWxeu7g(Afuc`IQFiSae;EjY~`fxf16I%U?N#jUO`wjRz~d(i5oK62!^)VU=az=vQJPN% z0Jes)B&9;LZrZtOC4Kvy`|LLf@yn=ZT863UB`!7TFw5MC!Od|<68HqL(nI*s!6{m9 zxYU0ahdUI8b`+F?*>OKNfwObi#+R@`5K~<2W9@_wmnvtZk!7n#i{Yb)(#5D-i-wh~ zcVUGeE|6wif|6O7y4?NdRe-XvBK5tHxP3lCeOd~#ekp6Cxrzpy7>YF=8S-YL?ow@0n>+<4! zFUYq$27G3=Y&$YGr>yE>&PNWaomG*omlV6;Bn-<6x^L9u0LtOaQgU+Nxg&*hRI2m! zGSa2ZOVPOv)Bu?W3oxacRPL#@wHw+^M znYf)m)n;zHwuVRND52IOR86bWa|bZCdhs49>z@L;0I_tetMb4snoLNDzR%vVpj8@q2mY& z&Qg4HhkJ|xx=;`#wyQ;^{RmQLtl^WvoV7lZwVmhrqx^0z_Px^2Uai=b+1XB0 z!o|M23(ANKv;r_qw)g80_JV}yiW}xbsZljgm7N@Rx>y=zi*G5>EYNmY{ce1f zc%YvHZNG5Wwyza32KsOx#`$+=pIH=yCs{$IxfSsflkm~;=1{6!Y}jm(bdOw&RQ#^n zqFal)D<|agSd@bBVrf`qYh^M*sW2Fwb^IWkpK|ylK{UMVYt zQW(uFB?orVjmy7Fe0?`i(KVm9nj;P0sF`G_rNI6vmNTDR;XB6Q=9J6hOdCq3QcK(J z2G+miD$ah1N{*Gg1j{Qcj}khEdZ>XzqYV}F z^FhT?-L`^66}GCVHJNwIeOfR^Fki1*ca=-< z`XAQh5`l%EVQl`)Nfng9jhe2R?cXbJXFr|`q3ETmQ62o8EL<_8?J~zQmORCC2MQZi zj3Dn`ff_B^e$IQY#oD%Vj;7DrWHdhwv1%_3NW0DD;dr|_wG~2XfjnF$o_@?fk@D3c z#XSn+sI0BKh(V5M zCnGMk4=9B0rj#om;e{KxC0{iAf5v45P$#hx>2M?n@jsm^tIDKM)}7J4k`oY}yc z9f$GYUr2}kS-#_Az4}qVzcn#Wg>?LCLuc_V2@~sYIteIgyCMn8T=PaIR2d?yYTOv|t8%qd8-)InxezBawANoHTQv?#p2=Kz%$ z*Tgw^(OIM!ON7Q=Vj5$O^wOw{5=3o zKPPPFsjJiS`6Tkmo-vC%DG_IQs3W)CSZ-Aol;d@r7vv4_U8l{^(6{EutNPTt+@DP5 z&=+((X1;gJ?U}Gs55k(s1K+}IYnj6*8W`B zLZs3I=bAge8}GytRuchzp@X%qQNa~`_w{}#RfSI(M|h;)qI7vY`pKRg)>ev86~`&J z1HUSN)HG^$xVW_G9`T~#c{KP$7tpq;fl>NVHbk4rd%5g52tRMz;Z-0)l1K}?F^n}njZe&njV!Tyl zHSP~JGQ2t(mp_IchuFG)JCj}S2E;NJel{fQt(HQ_1~xRHdhF90dxr*va4G%vhPJ8@x+jL_OD(Aal zS7^qTu{e8E-^yyK^hj#JAe}{cQU+?-AVlacDSN=v_;2qc$}OEN?ND}e z;cVQ8EZPAza8$osbRl@k3|Fb#E>WTlNMt)% z<%YG;p==t)7J;$}oqSkc6gY@D(l{r>`KK~f2e90q_=GT9{@$~+vP{Kbm}3Bq%%Tf~ z^e_Q)dRg8~-B?1aXc3ggv-Ek_?W~0cqZgw_)I4FBAG+FxmQng8o*X#O_P_1}A=?$9Wjj~gx4R+lo2cz1@ zEd!T}e&_f|$6;osb31rd%1!afTq)A%gW5b5)XlUw1o@`I6U7e#LNnD5Lg%?w&d!PT zDU=)l-$X`6vQ+eca6*DVKHC#Q1r@Zm@hAQGye8PWaqZFOTD~c zD1^9|Qc$@$S#1$^^w#S?$x6n*eO(|fyrwX>W(IWN`@t%;v}uS5SNy22t{z5Gx-69} z#~OnHX3FpinIv8a6-gT3_vTKOI3QC^*Ij+O$)o>x}ni9 ziK=U1F9ip|6{2=cl8%u6US57@1bzB#*n&DL=(L;9{{TRT`rmC_`{R&BOTpU6t47+D zkE4~fCEE%HV5^f&uYGh860lWB6VC;MHjV)(InQ`7|NLvm_Z>LSe*gXp>Ik`}35V!a zecK8^d|co+m3}#P2xDCA;iwv_Z0B~^wOr9Z%gMeULu;tfSIRmbX7O>QMUz8fZbW)I z$8p=c((?OjZR(i9S6kZdn%fJ9Ua-|ZLw)ShcRmpY0)|(BJKg-EX>m#zJ6~W$J7h`J zr%_2LwtmEN3vKN_*5<`JvnZAf8CE=}9OiC%Gk4*oZ--od2g~6CGw|G+?yMOt>z%?1 z0cW~6wgOz04uX}>=SVdLD%G!eMC>|p_lk3^uDkuQ)f%&UJY1`sS~$=4$iNp*X}tP< zbBpt8R;WUjWxU{LQ0#t9B9tHX8T@*`1o6E0>z*p2GSWv5ZS0ye?+{rDmN}}(IeL6< ziZ&bMCZ9oOD-{C4?beasn_Qqu?m`N!mF3Fs6hQmpyh}|>k@Gr<4tLPR?KKU&Jv|SP z;~rx2R#qlS<-7y%xcp+Ue6YprPU=@GWSW7h;hw#AjC2i72nM6q1VeKzsu?#C>PSmfx%{Bv3ASh<+w*!;tpP?uBa-d!J(KF;ybTR93%!J>Z-X|vR z;fE$6oRKe|)zVP!?hWEYDvXm7gN)Sq5uF-rp*&nWU?Pi~l4Ks40(zy<&PO5~GE5@# zXVs_z3iFH5cJmi$dP8AgU~WORdg?OyRQ#v2L!d*l*SJSdW;@1V<|V0Ie9janYSNB-aRCyDfLk0Z)H7a8X8C1A1KQG z=&_26swpo#Ofb=7`zp4y!GB-hL@MPD&Y$%V_-bM7r#qi;a@+Y)(AkV0x;NvM`rd~Y z{ypxy^0aFcGv_5zJG@bBRvK7TbUoF#`M+yzui-zs3 zXo$p4pzUwR?_g;}Wz)$4*T!FM63QsP!BUMZq16oD6ODur6iiGaGwBvH@t5^XLMZ!F zYwOxzfWHn)f+!;L!+09DPg^OY-Ti|XXbS0rmypTqDIc~i>nOZDQVh`c+B6RkHlRh+ zBt2R@iUQ1}Yac~R48b4)@QLr1i{}vN_M1D<4aJ(qi>f#={R0U+V9yx7(b*Qk+`H0> zwg^O7p4XJkdC9*L67rPdjZK(Th;G|Rh0G_T=*_4^)zJ# zp<$*UgmOxkuzJa0%aQ7)d+s(bc)m~pb^@i@K-N7rU;Yi9Am5jHfkiMb^g*QCa%@LGH*a!DE`MTOVIsJOxa;T0C+GDP+SL5jE(j`QP)4%Y5=(M}qm z#tQ8BqrPqbOl;h8$Q)YyztGt`pYEEs+g2j#?situl1K%eBgT-oPU|W)`F_<_q|f z&@7vA&NdEOXPgiaC}iQb_9|QB5{wtdXx*mMwJcCbR@S`C**Qql12m-%an__g{9|&jjLjMF34E^D3RL6v_uqP|EGhXj%nBcOA)f z92eCque&grZ9@+|(8!!**e%>(uPY!+5kEqs15WPFW)Hi9M0ib8jFB${sL+xP<7;T> zl#kMjm#1?Cgx>}g5mtrMyQ!v~ktbS_0~%N+6QAXn=q{?La7Nxe*Jxn-vn)GlWz(+f zCf1XmE4Ui$%}+_|B#-M&S8c!Z_b}GzcewfqRj#+%eaSOl zS}>;Zzm#U9M!K3YzxBTCY%%RKzZ7qo;+w(W2Cy--$)2Ykv+kxs6$oLVz zvyC@Qk2H-?_J0!wgP*Kfd|pq>P;=MxqLm)y{`=Gyuki$De^m`cVm~S0{PDaSurKT8 z8u)m0@8&{>y-wi&%5?r)|eyh%MoCrC&kZ`X_W>uf^XvvW!^i3^IpE6$3lPs_T(6xs(NXg7t+2m2ftNg{_sP90eTr8T_Umq+~0Jdp$8ZE7{vnfGW1AB zgZ;juntxa8)%5HYp@8LphjFXUMuTkb1wW!+R@7ir@wPmN?{Rd=S+=3+g$#|Vhi9K< ze_mekI2*6{el%(625?pEmwW#HPaEy8c<8Ay9m3jHS?`8rPhSnAn-=V0qYa!>A7tRFbng%Qm^htO5^em#UaK zxOZA9iBN#Rj~EEjS(~oFJNYI6VGY>O7)AOmV7&CR+g+i`zi^oauk@xZRAx9Dd15p_ zUkng1kcC%ek6CeNpFmsw>nXbxI3Fl9|D4*sqR=2MAfhU^R8nGt)u=Zv(Co4^|-|q<)0+%LPMv?k0Ou z3MDFrQ88m@eg9t&3h`bT5fX%)%03Rcf3@d+i8nB8ozUn5<%NMz+#bs1{&a!x$`8yY zpN8rES}|C-27W6@qIbiD+3iROdF>Rj={%~D!*w5W);va8(U-iHnS`JJgy49XJ9t!S zYwPr9p0m9siKvtimY^d^f{8w5lSC4?URr2ak2d4Z;`}a`u^Ow)wDl=ikgSXdVrxeA z;lL?BnOTS(FLw~Z*SuX~RoVhfc+Im##H|QXZe1TXrL!g`K=((67fsd#!w`3F$;&q~ z^V(PFj2y(5Cvy<R&^AFL@&)LL)Xz=bM9}_yeTjp5x#23^ zQrKqk0wth`36==yLW&_vKKrNM%Fqxda;ynDrQPH~A;uvojma>0pijZk>t{W1p`er+ z&0w*e2bxu$oR$4ISoa5n#DC4mUU5_&Z42+e0Ukr4tZHK@4~DlKGQ&qsiK)Dr@Rm{) zI(bwx_cA_Oa2@-M_GA(={wRo`>97yMY9?(ov@n=(g>U9+eQ|Ilsqwq2_il)@Rfi~A zE;TQdxAehqjp?2-HNW|qEZjoJEcwjNP%pH`D-_Ywdjyd(>%wKIVjOk*s?*(5?XEb& zE*5Ei`Ar1kpDZHp&A;-_xbE`15?mG9_mbVwSPVSRQyo!Zi z^BXTONFk(mFP_%p2Za;|6#Le=k+xr){LR!qco`OX>SDel#hS4C)WfuXMe<{8ydy*J z0Je$PY{(&}_UTW&Qibg(!mfa{oE~<4Yp@uT9gAM4mKukMWfUIk&%Agusx&_fdWkww z(1c5OVU}f|AJ|dc?jQKRpq7rIW~P{|$kPe?_0u&evn5q%8QV}^$Q#iQ=uG0Q$-U&` z))P9v?D{>*qhfJ0fi7_S1a*u*Haxy(P^$w)eDopLP48 zgBCu(e@{s8=3dj86aWWy?ZsNy3|ppRcm=&Etzi+MZykz3Iurf&S$M!RBLhjC0VP9tx?^+;|e|!1L!46=~;}8#S7)05O1(-qJxX? z7>@=qE0D)`XxyBIeNNmGr_XtNO&nI(SOmJT%=BZ}O!=gV!I)*7u%Yv(qHGN5?TmNJ z{GJtOsSiveu=%X<(>&OCR z5Y``VUtGgxk-76E)YY2pa`v|II1;z@@}5A8K{;mpy=>g{*SXLyHn#oFJrY1^ZIABP}sgX^HuRS-`El*;9( zS4&HCK;MFKW6mHGaRNmCVS&$_yii8X?lIp*txq_l#fLzhwL2mrhTdU4m3q4`1&lE> z+@6hEJYUoFn~Ob-XRQjPgA|{adM->3WTQ{Vu1Zv%N*PW=k4sm}c^|ifq2(oiZ|KG_ z8d62S?0Cs98`=<`0(ZEkD^~RRI7tRIiMk;U(d~peSYqGS8dYJFL3gmar; zJL8D<@NEk;I=KABBC>$1WtAEjWWh>^-tPBqW|&AZ1~3<f zfW~NlsO7w+jxjM03fU%$QR{&BJ}DRV%U%W8i|`owfq~Nli5quSS~YX6Ye_Mcx8A7% z{puiDAZ06diivndD{;)AR$6plBssrW&hvkONP^F0!=9rmo|WT3Ci|cABJ9PvLFTK` zYt<#TUz$#3FuEV}ZWrjgbYzziScPI_(`V)^k zxY8IVW=!f|)`lv-sav(>yGh^Us5u4-aPcmSep{?PzBl)?X8OEger@7S0adg+0}n&^ZO7W(kGrNWR)5ZxMI({wm_fmbLg`EB5+m z0Y9$`Pp2J&75tm!l!||UBytqauWwpQIJ+i@u9n`o^3mgG+JV4SD%%rcsY#)vyi!gx zE9&00t|nU=?*=A)%socP0vUvhXz#GJd~&Iv;Dzt;!`=g0wXhN@z&jFRuSSajPI>1P zoQ!<3(TsA>%G75~6A!POM&)mXZ9pfYwj!ze)jcpmJmlD z%ECT|EttdxSv>o1OmXHi;V9UY9y0XG1Bgv-Rj;JuSlGze!z*V1>8zy!!W+pP1y$f>o&P^7~<^kc@amS zPin#myl_RBiUA-A){k6sXqv*-f>Nhsye7$_JJdlJ73~l(*MXQ!+%}HBU$c4%tgOS| zB${VE%nJ{4whP$e*CCjM7K9CM#04xarfJnWAf(gfZeNryrCEV@6*k?bo@($MTvM)U zJI)h0II5Ify&jtt!&CA7iC*Op6Cwrc;r(%<;SfoV!f;3xq=c=#>$IRNQaZ3CR_!r`aBjwe6k-n)q`(az{OP@gO zR8-NfgYl#Pctw}ht#)RsGD{Sy17p~f1}ZM_*8z9|tF%p`c9xu-dNZ=(u+k71v1=s82v=Wo9Xeg@$2h2zp1)z@DJW`h z3-ZF_n1l+x`It>3vEu)pZKTlY=%r#`eHWIISeWrOloojO9!br4?`(TJT)w!atXZc* zY`SoMoELBNj{oEe1FK}zuyyb7*2jOH8(q_{PDGLtUln7=$W*&||KHSg>-2W4d<{L? zsqR@m-=O9k`06-Do{aU*JYg6C4-D04Bgm7V|G8pyk8k~;)HZDHzl!403>U7v7{)7_ zIoH`GtiqxVd^mUn#E$VBTkbU5xKR?MUf%xIbyTi!`Cj5IR;f@j4V0J>Y5_s88jQq} zmb=VbBtOuLFrN4>_E%_;^7PbeVA*?rE5{W+Lyw9&zCJX6)C-GTdeOEzS*qMyz_nkD zU2UlW!JOIZksbR9jdQ&)Q5!e0Wa;OeB5Qnu%NCxNZ!WX%7Ww7L=YOg@ez-+XW;>dk ziu6ePHkP`Q@TUr}jTnfk?|cm0zqoWq9?LxX5Lr>Q^T|ll|Cb=wlQt2l+4yY+zKw2U z&aizW&kVu$p@|@!YU%x7fWVuL4Oa2r&(+dx@93bA_vcDA`m*g!GL%tKdENh!e{uK8U`5Y%kWiokMz~ZI znW^djB)=sQPq0R0uqLre(OZTz^TH%LBae?wBZ%7FluRO_7oLK732anqExpGvGfn5P z;zbM1`;$?)k-x8EXOfKCiJB1IbWIyOweBHQpv{q>C{pCIk?(PyAIbkB2CMk-?ipZG z+TV?WxV_jG& { - this.ProjectModel.prototype.save.called.should.equal(true) - done() - }) - }) - - it('should return the project in the callback', function (done) { - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - project.name.should.equal(projectName) - expect(project.owner_ref + '').to.equal(ownerId) - expect(project.lastUpdatedBy + '').to.equal(ownerId) - done() - } - ) - }) - - it('should initialize the project overleaf if history id not provided', function (done) { - this.handler.createBlankProject(ownerId, projectName, done) - this.HistoryManager.initializeProject.calledWith().should.equal(true) - }) - - it('should set the overleaf id if overleaf id not provided', function (done) { - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - project.overleaf.history.id.should.equal(this.overleafId) - done() - } - ) - }) - - it('should set the overleaf id if overleaf id provided', function (done) { - const overleafId = 2345 - const attributes = { - overleaf: { - history: { - id: overleafId, - }, - }, - } - this.handler.createBlankProject( - ownerId, - projectName, - attributes, - (err, project) => { - if (err != null) { - return done(err) - } - project.overleaf.history.id.should.equal(overleafId) - done() - } - ) - }) - - it('should set the language from the user', function (done) { - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - project.spellCheckLanguage.should.equal('de') - done() - } - ) - }) - - it('should set the imageName to currentImageName if set and no imageName attribute', function (done) { - this.Settings.currentImageName = 'mock-image-name' - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - project.imageName.should.equal(this.Settings.currentImageName) - done() - } - ) - }) - - it('should not set the imageName if no currentImageName', function (done) { - this.Settings.currentImageName = null - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - expect(project.imageName).to.not.exist - done() - } - ) - }) - - it('should set the imageName to the attribute value if set and not overwrite it with the currentImageName', function (done) { - this.Settings.currentImageName = 'mock-image-name' - const attributes = { imageName: 'attribute-image-name' } - this.handler.createBlankProject( - ownerId, - projectName, - attributes, - (err, project) => { - if (err != null) { - return done(err) - } - project.imageName.should.equal(attributes.imageName) - done() - } - ) - }) - - it('should not set the overleaf.history.display if not configured in settings', function (done) { - this.Settings.apis.project_history.displayHistoryForNewProjects = false - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - expect(project.overleaf.history.display).to.not.exist - done() - } - ) - }) - - it('should set the overleaf.history.display if configured in settings', function (done) { - this.Settings.apis.project_history.displayHistoryForNewProjects = true - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - expect(project.overleaf.history.display).to.equal(true) - done() - } - ) - }) - - it('should send a project-created event to analytics', function (done) { - this.handler.createBlankProject( - ownerId, - projectName, - (err, project) => { - if (err != null) { - return done(err) - } - expect(this.AnalyticsManager.recordEvent.callCount).to.equal(1) - expect( - this.AnalyticsManager.recordEvent.calledWith( - ownerId, - 'project-created' - ) - ).to.equal(true) - done() - } - ) - }) - - it('should send a project-created event with template information if provided', function (done) { - const attributes = { - fromV1TemplateId: 100, - } - this.handler.createBlankProject( - ownerId, - projectName, - attributes, - (err, project) => { - if (err != null) { - return done(err) - } - expect(this.AnalyticsManager.recordEvent.callCount).to.equal(1) - expect( - this.AnalyticsManager.recordEvent.calledWith( - ownerId, - 'project-created', - { projectId: project._id, attributes } - ) - ).to.equal(true) - done() - } - ) - }) - - it('should send a project-imported event when importing a project', function (done) { - const attributes = { - overleaf: { - history: { - id: 100, - }, - }, - } - this.handler.createBlankProject( - ownerId, - projectName, - attributes, - (err, project) => { - if (err != null) { - return done(err) - } - expect(this.AnalyticsManager.recordEvent.callCount).to.equal(1) - expect( - this.AnalyticsManager.recordEvent.calledWith( - ownerId, - 'project-imported' - ) - ).to.equal(true) - done() - } - ) - }) - }) - - describe('with an error', function () { - beforeEach(function () { - this.ProjectModel.prototype.save = sinon - .stub() - .callsArgWith(0, new Error('something went wrong')) - this.handler.createBlankProject(ownerId, projectName, this.callback) - }) - - it('should return the error to the callback', function () { - expect(this.callback.args[0][0]).to.exist - }) - }) - - describe('with an invalid name', function () { - beforeEach(function () { - this.ProjectDetailsHandler.validateProjectName = sinon - .stub() - .yields(new Error('bad name')) - this.handler.createBlankProject(ownerId, projectName, this.callback) - }) - - it('should return the error to the callback', function () { - expect(this.callback.args[0][0]).to.exist - }) - - it('should not try to create the project', function () { - this.ProjectModel.prototype.save.called.should.equal(false) - }) - }) - }) - - describe('Creating a basic project', function () { - beforeEach(function () { - this.project = new this.ProjectModel() - this.handler._buildTemplate = function ( - templateName, - user, - projectName, - callback - ) { - if (templateName === 'mainbasic.tex') { - return callback(null, ['mainbasic.tex', 'lines']) - } - throw new Error(`unknown template: ${templateName}`) - } - sinon.spy(this.handler, '_buildTemplate') - this.handler.createBlankProject = sinon - .stub() - .callsArgWith(2, null, this.project) - this.handler._createRootDoc = sinon - .stub() - .callsArgWith(3, null, this.project) - this.handler.createBasicProject(ownerId, projectName, this.callback) - }) - - it('should create a blank project first', function () { - this.handler.createBlankProject - .calledWith(ownerId, projectName) - .should.equal(true) - }) - - it('should create the root document', function () { - this.handler._createRootDoc - .calledWith(this.project, ownerId, ['mainbasic.tex', 'lines']) - .should.equal(true) - }) - - it('should build the mainbasic.tex template', function () { - this.handler._buildTemplate - .calledWith('mainbasic.tex', ownerId, projectName) - .should.equal(true) - }) - }) - - describe('Creating a project from a snippet', function () { - beforeEach(function () { - this.project = new this.ProjectModel() - this.handler.createBlankProject = sinon - .stub() - .callsArgWith(2, null, this.project) - this.handler._createRootDoc = sinon - .stub() - .callsArgWith(3, null, this.project) - this.handler.createProjectFromSnippet( - ownerId, - projectName, - ['snippet line 1', 'snippet line 2'], - this.callback - ) - }) - - it('should create a blank project first', function () { - this.handler.createBlankProject - .calledWith(ownerId, projectName) - .should.equal(true) - }) - - it('should create the root document', function () { - this.handler._createRootDoc - .calledWith(this.project, ownerId, ['snippet line 1', 'snippet line 2']) - .should.equal(true) - }) - }) - - describe('Creating an example project', function () { - beforeEach(function () { - this.project = new this.ProjectModel() - this.handler._buildTemplate = function ( - templateName, - user, - projectName, - callback - ) { - if (templateName === 'main.tex') { - return callback(null, ['main.tex', 'lines']) - } - if (templateName === 'references.bib') { - return callback(null, ['references.bib', 'lines']) - } - throw new Error(`unknown template: ${templateName}`) - } - sinon.spy(this.handler, '_buildTemplate') - this.handler.createBlankProject = sinon - .stub() - .callsArgWith(2, null, this.project) - this.handler._createRootDoc = sinon - .stub() - .callsArgWith(3, null, this.project) - this.handler.createExampleProject(ownerId, projectName, this.callback) - }) - - it('should create a blank project first', function () { - this.handler.createBlankProject - .calledWith(ownerId, projectName) - .should.equal(true) - }) - - it('should create the root document', function () { - this.handler._createRootDoc - .calledWith(this.project, ownerId, ['main.tex', 'lines']) - .should.equal(true) - }) - - it('should insert references.bib', function () { - this.ProjectEntityUpdateHandler.addDoc - .calledWith( - projectId, - rootFolderId, - 'references.bib', - ['references.bib', 'lines'], - ownerId - ) - .should.equal(true) - }) - - it('should insert universe.jpg', function () { - this.ProjectEntityUpdateHandler.addFile - .calledWith( - projectId, - rootFolderId, - 'universe.jpg', - Path.resolve( - Path.join( - __dirname, - '../../../../app/templates/project_files/universe.jpg' - ) - ), - null, - ownerId - ) - .should.equal(true) - }) - - it('should build the main.tex template', function () { - this.handler._buildTemplate - .calledWith('main.tex', ownerId, projectName) - .should.equal(true) - }) - - it('should build the references.bib template', function () { - this.handler._buildTemplate - .calledWith('references.bib', ownerId, projectName) - .should.equal(true) - }) - }) - - describe('_buildTemplate', function () { - beforeEach(function (done) { - this.handler._buildTemplate( - 'main.tex', - this.user_id, - projectName, - (err, templateLines) => { - if (err != null) { - return done(err) - } - this.template = templateLines.reduce( - (singleLine, line) => `${singleLine}\n${line}` - ) - done() - } - ) - }) - - it('should insert the project name into the template', function (done) { - this.template.indexOf(projectName).should.not.equal(-1) - done() - }) - - it('should insert the users name into the template', function (done) { - this.template.indexOf(this.user.first_name).should.not.equal(-1) - this.template.indexOf(this.user.last_name).should.not.equal(-1) - done() - }) - - it('should not have undefined in the template', function (done) { - this.template.indexOf('undefined').should.equal(-1) - done() - }) - - it('should not have any underscore brackets in the output', function (done) { - this.template.indexOf('{{').should.equal(-1) - this.template.indexOf('<%=').should.equal(-1) - done() - }) - - it('should put the year in', function (done) { - this.template.indexOf(new Date().getUTCFullYear()).should.not.equal(-1) - done() - }) - }) - - describe('_createRootDoc', function () { - beforeEach(function (done) { - this.project = new this.ProjectModel() - - this.handler._createRootDoc( - this.project, - ownerId, - ['line 1', 'line 2'], - done - ) - }) - - it('should insert main.tex', function () { - this.ProjectEntityUpdateHandler.addDoc - .calledWith( - projectId, - rootFolderId, - 'main.tex', - ['line 1', 'line 2'], - ownerId - ) - .should.equal(true) - }) - - it('should set the main doc id', function () { - this.ProjectEntityUpdateHandler.setRootDoc - .calledWith(projectId, docId) - .should.equal(true) - }) - }) -})