From 4d7fecbb9df33ddbae9e2f033bf84cae39f25a5e Mon Sep 17 00:00:00 2001 From: dylankb Date: Wed, 28 Mar 2018 20:57:27 -0700 Subject: [PATCH 01/15] Audit code cleanup --- audit/client/node.js | 3 +-- audit/server/node.js | 14 +++++++------ audit/server2/node.js | 15 +++++++------- batnode.js | 46 ++++++++++++++++++++++++++----------------- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/audit/client/node.js b/audit/client/node.js index 9d8fdf0..a6ab7a3 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -1,4 +1,3 @@ -const bunyan = require('bunyan'); const levelup = require('levelup'); const leveldown = require('leveldown'); const encoding = require('encoding-down'); @@ -8,7 +7,7 @@ const kad_bat = require('../../kadence_plugin').kad_bat; const seed = require('../../constants').SEED_NODE // Create a third batnode kadnode pair -kadnode3 = new kad.KademliaNode({ +const kadnode3 = new kad.KademliaNode({ transport: new kad.HTTPTransport(), storage: levelup(encoding(leveldown('./dbbb'))), contact: { hostname: 'localhost', port: 1252 } diff --git a/audit/server/node.js b/audit/server/node.js index 3372191..9b76657 100644 --- a/audit/server/node.js +++ b/audit/server/node.js @@ -29,25 +29,27 @@ const nodeConnectionCallback = (serverConnection) => { }); serverConnection.on('data', (receivedData, error) => { + if (error) { throw error; } receivedData = JSON.parse(receivedData) if (receivedData.messageType === "RETRIEVE_FILE") { - batnode1.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + batnode1.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { + if (err) { throw err; } serverConnection.write(data) }); } else if (receivedData.messageType === "STORE_FILE") { let fileName = receivedData.fileName; - batnode1.kadenceNode.iterativeStore(fileName, [batnode1.kadenceNode.identity.toString(), batnode1.kadenceNode.contact], (err, stored) => { + batnode1.kadenceNode.iterativeStore(fileName, [batnode1.kadenceNode.identity.toString(), batnode1.kadenceNode.contact], (innerError, stored) => { + if (innerError) { throw innerError; } console.log('nodes who stored this value: ', stored) let fileContent = new Buffer(receivedData.fileContent) batnode1.writeFile(`./hosted/${fileName}`, fileContent, (err) => { - if (err) { - throw err; - } + if (err) { throw err; } serverConnection.write(JSON.stringify({messageType: "SUCCESS"})) }); }); } else if (receivedData.messageType === "AUDIT_FILE") { - fs.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + fs.readFile(`./hosted/${receivedData.fileName}`, (innerErr, data) => { + if (innerErr) { throw innerErr; } const shardSha1 = fileUtils.sha1HashData(data); serverConnection.write(shardSha1); }); diff --git a/audit/server2/node.js b/audit/server2/node.js index b35d477..83bcc89 100644 --- a/audit/server2/node.js +++ b/audit/server2/node.js @@ -1,4 +1,3 @@ -const bunyan = require('bunyan'); const levelup = require('levelup'); const leveldown = require('leveldown'); const encoding = require('encoding-down'); @@ -27,11 +26,12 @@ const nodeConnectionCallback = (serverConnection) => { console.log('end') }) serverConnection.on('data', (receivedData, error) => { + if (error) { throw error; } receivedData = JSON.parse(receivedData) if (receivedData.messageType === "RETRIEVE_FILE") { - batnode2.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { - if (error) { throw error; } + batnode2.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { + if (err) { throw err; } serverConnection.write(data) }) } else if (receivedData.messageType === "STORE_FILE") { @@ -39,15 +39,14 @@ const nodeConnectionCallback = (serverConnection) => { batnode2.kadenceNode.iterativeStore(fileName, [batnode2.kadenceNode.identity.toString(), batnode2.kadenceNode.contact], (err, stored) => { console.log('nodes who stored this value: ', stored) let fileContent = new Buffer(receivedData.fileContent) - batnode2.writeFile(`./hosted/${fileName}`, fileContent, (err) => { - if (err) { - throw err; - } + batnode2.writeFile(`./hosted/${fileName}`, fileContent, (innerError) => { + if (innerError) { throw innerError; } serverConnection.write(JSON.stringify({messageType: "SUCCESS"})) }) }); } else if (receivedData.messageType === "AUDIT_FILE") { - fs.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + fs.readFile(`./hosted/${receivedData.fileName}`, (innerErr, data) => { + if (innerErr) { throw innerErr; } console.log('AUDIT_FILE - data: ', data); const shardSha1 = fileUtils.sha1HashData(data); console.log('shardSha1: ', shardSha1); diff --git a/batnode.js b/batnode.js index 3900d9e..3041b92 100644 --- a/batnode.js +++ b/batnode.js @@ -49,6 +49,7 @@ class BatNode { readFile(filePath, callback) { return fileUtils.getFile(filePath, callback) } + writeFile(path, data, callback) { fileUtils.writeFile(path, data, callback) } @@ -199,10 +200,17 @@ class BatNode { const manifest = fileUtils.loadManifest(manifestFilePath); const shards = manifest.chunks; const shaIds = Object.keys(shards); - const fileName = manifest.fileName; + const shardAuditData = this.prepareAuditData(shards, shaIds); let shaIdx = 0; - const shardAuditData = shaIds.reduce((acc, shaId) => { + while (shaIds.length > shaIdx) { + this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData); + shaIdx += 1; + } + } + + prepareAuditData(shards, shaIds) { + return shaIds.reduce((acc, shaId) => { acc[shaId] = {}; shards[shaId].forEach((shardId) => { @@ -211,11 +219,6 @@ class BatNode { return acc; }, {}); - - while (shaIds.length > shaIdx) { - this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData); - shaIdx += 1; - } } /** * Tests the redudant copies of the original shard for data integrity. @@ -227,7 +230,6 @@ class BatNode { */ auditShardsGroup(shards, shaIds, shaIdx, shardAuditData) { let shardDupIdx = 0; - let duplicatesAudited = 0; const shaId = shaIds[shaIdx]; while (shards[shaId].length > shardDupIdx) { @@ -239,9 +241,11 @@ class BatNode { auditShard(shards, shardDupIdx, shaId, shaIdx, shardAuditData) { const shardId = shards[shaId][shardDupIdx]; - this.kadenceNode.iterativeFindValue(shardId, (err, value, responder) => { + this.kadenceNode.iterativeFindValue(shardId, (error, value, responder) => { + if (error) { throw error; } let kadNodeTarget = value.value; this.kadenceNode.getOtherBatNodeContact(kadNodeTarget, (err, batNode) => { + if (err) { throw err; } this.auditShardData(batNode, shards, shaIdx, shardDupIdx, shardAuditData) }) }) @@ -279,15 +283,21 @@ class BatNode { }) } - auditResults(shardAuditData, shaKeys) { - const dataValid = shaKeys.every((shaId) => { - // For each key in the values object for the shaId key - return Object.keys(shardAuditData[shaId]).every((shardId) => { - return shardAuditData[shaId][shardId] === true; - }) - }); - console.log(shardAuditData); - if (dataValid) { + auditResults(auditData, shaKeys) { + const isRedundant = (shaId) => { + let validShards = 0; + // For each key (shardId) under the shard content's shaId key + Object.keys(auditData[shaId]).forEach((shardId) => { + if (auditData[shaId][shardId] === true) { validShards += 1; } + }); + + return validShards >= constants.BASELINE_REDUNDANCY ? true : false; + } + + const fileRedundancyMet = shaKeys.every(isRedundant); + + console.log(auditData); + if (fileRedundancyMet) { console.log('Passed audit!'); } else { console.log('Failed Audit'); From dcefb127b0b9c0475440dad3f6016da255bf6df6 Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 14:58:02 -0700 Subject: [PATCH 02/15] Add CLI server code to audit client --- audit/client/node.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/audit/client/node.js b/audit/client/node.js index a6ab7a3..9807bd6 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -27,3 +27,29 @@ kadnode3.join(seed, () => { // batnode3.retrieveFile('./manifest/85a2ea0f0d11634d334886d9fb073b0d64506199.batchain') // batnode3.auditFile('./manifest/85a2ea0f0d11634d334886d9fb073b0d64506199.batchain') }) + +const nodeCLIConnectionCallback = (serverConnection) => { + + serverConnection.on('data', (data) => { + let receivedData = JSON.parse(data); + + if (receivedData.messageType === "CLI_UPLOAD_FILE") { + let filePath = receivedData.filePath; + + batnode3.uploadFile(filePath); + } else if (receivedData.messageType === "CLI_DOWNLOAD_FILE") { + let filePath = receivedData.filePath; + + batnode3.retrieveFile(filePath); + } else if (receivedData.messageType === "CLI_AUDIT_FILE") { + let filePath = receivedData.filePath; + + console.log("received path: ", filePath); + const auditData = batnode3.auditFile(filePath); + console.log('auditData to pass back'); + serverConnection.write(JSON.stringify({auditData})) + } + }); +} + +batnode3.createCLIServer(1800, 'localhost', nodeCLIConnectionCallback); From 6036641eb275c40adb9ae75acad486bed85f5598 Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 18:49:37 -0700 Subject: [PATCH 03/15] Add shard redundancy constant --- batnode.js | 1 + constants.js | 3 ++- utils/file.js | 7 ++++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/batnode.js b/batnode.js index 3041b92..425ff33 100644 --- a/batnode.js +++ b/batnode.js @@ -4,6 +4,7 @@ const path = require('path'); const PERSONAL_DIR = require('./utils/file').PERSONAL_DIR; const HOSTED_DIR = require('./utils/file').HOSTED_DIR; const fs = require('fs'); +const constants = require('./constants'); class BatNode { constructor(kadenceNode = {}) { diff --git a/constants.js b/constants.js index 691c938..6667e35 100644 --- a/constants.js +++ b/constants.js @@ -5,4 +5,5 @@ exports.BATNODE_SERVER_PORT = 1900; exports.KADNODE_PORT = 80; // For local testing -//exports.SEED_NODE = ['a678ed17938527be1383388004dbf84246505dbd', { hostname: 'localhost', port: 1338 }] \ No newline at end of file +// exports.SEED_NODE = ['a678ed17938527be1383388004dbf84246505dbd', { hostname: 'localhost', port: 1338 }] +exports.BASELINE_REDUNDANCY = 3; diff --git a/utils/file.js b/utils/file.js index 1392a59..e142095 100644 --- a/utils/file.js +++ b/utils/file.js @@ -4,6 +4,7 @@ const zlib = require('zlib'); const algorithm = 'aes-256-cbc'; const path = require('path'); const dotenv = require('dotenv'); +const constants = require('../constants'); exports.PERSONAL_DIR = 'personal' @@ -108,11 +109,11 @@ exports.fileSystem = (function(){ addShardsToManifest(manifest, file, manifestName, dir, callback); } const createRedundantShardIds = (chunk, chunkId, manifest) => { - const copyNum = 3; + const shardsToCreate = constants.BASELINE_REDUNDANCY; let copyShardContent; let appendBytes; - for (let i = 1; i <= copyNum; i++) { + for (let i = 1; i <= shardsToCreate; i++) { appendBytes = crypto.randomBytes(2).toString('hex'); copyShardContent = chunk + appendBytes; @@ -173,4 +174,4 @@ exports.fileSystem = (function(){ sha1HashData, sha1Hash, } -})(); \ No newline at end of file +})(); From f8f40c566163dbb0aba2f249e3653b7b92cf99fb Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 22:01:55 -0700 Subject: [PATCH 04/15] Try backoff in auditFile --- audit/client/node.js | 3 +-- batnode.js | 45 +++++++++++++++++++++++++++++++++++++------- bin/index.js | 7 +++++++ package.json | 1 + yarn.lock | 10 ++++++++++ 5 files changed, 57 insertions(+), 9 deletions(-) diff --git a/audit/client/node.js b/audit/client/node.js index 9807bd6..40b704e 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -46,8 +46,7 @@ const nodeCLIConnectionCallback = (serverConnection) => { console.log("received path: ", filePath); const auditData = batnode3.auditFile(filePath); - console.log('auditData to pass back'); - serverConnection.write(JSON.stringify({auditData})) + serverConnection.write(JSON.stringify({auditData})); } }); } diff --git a/batnode.js b/batnode.js index 425ff33..a4b04d6 100644 --- a/batnode.js +++ b/batnode.js @@ -5,6 +5,8 @@ const PERSONAL_DIR = require('./utils/file').PERSONAL_DIR; const HOSTED_DIR = require('./utils/file').HOSTED_DIR; const fs = require('fs'); const constants = require('./constants'); +const async = require('async'); +const backoff = require('backoff'); class BatNode { constructor(kadenceNode = {}) { @@ -108,7 +110,7 @@ class BatNode { this.kadenceNode.iterativeFindNode(shardId, (err, res) => { let i = 0 let targetKadNode = res[0]; // res is an array of these tuples: [id, {hostname, port}] - while (targetKadNode[1].hostname === this.kadenceNode.contact.hostname) { // change to identity and re-test + while (targetKadNode[1].port === this.kadenceNode.contact.port) { // change to identity and re-test i += 1 targetKadNode = res[i] } @@ -202,12 +204,39 @@ class BatNode { const shards = manifest.chunks; const shaIds = Object.keys(shards); const shardAuditData = this.prepareAuditData(shards, shaIds); + let done = false; let shaIdx = 0; + var fibonacciBackoff = backoff.exponential({ + randomisationFactor: 0, + initialDelay: 10, + maxDelay: 2000 + }); while (shaIds.length > shaIdx) { - this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData); + this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData, done); shaIdx += 1; } + + fibonacciBackoff.failAfter(10); + + fibonacciBackoff.on('backoff', function(number, delay) { + console.log(number + ' ' + delay + 'ms'); + }); + + fibonacciBackoff.on('ready', function() { + if (!done) { + fibonacciBackoff.backoff(); + } else { + console.log('Finished backoff!'); + return shardAuditData; + } + }); + + fibonacciBackoff.on('fail', function() { + console.log('Timeout: failed to complete audit'); + }); + + fibonacciBackoff.backoff(); } prepareAuditData(shards, shaIds) { @@ -229,17 +258,17 @@ class BatNode { * @param {shardAuditData} Object - same as shards param except instead of an * array of shard ids it's an object of shard ids and their audit status */ - auditShardsGroup(shards, shaIds, shaIdx, shardAuditData) { + auditShardsGroup(shards, shaIds, shaIdx, shardAuditData, done) { let shardDupIdx = 0; const shaId = shaIds[shaIdx]; while (shards[shaId].length > shardDupIdx) { - this.auditShard(shards, shardDupIdx, shaId, shaIdx, shardAuditData); + this.auditShard(shards, shardDupIdx, shaId, shaIdx, shardAuditData, done); shardDupIdx += 1; } } - auditShard(shards, shardDupIdx, shaId, shaIdx, shardAuditData) { + auditShard(shards, shardDupIdx, shaId, shaIdx, shardAuditData, done) { const shardId = shards[shaId][shardDupIdx]; this.kadenceNode.iterativeFindValue(shardId, (error, value, responder) => { @@ -247,12 +276,12 @@ class BatNode { let kadNodeTarget = value.value; this.kadenceNode.getOtherBatNodeContact(kadNodeTarget, (err, batNode) => { if (err) { throw err; } - this.auditShardData(batNode, shards, shaIdx, shardDupIdx, shardAuditData) + this.auditShardData(batNode, shards, shaIdx, shardDupIdx, shardAuditData, done) }) }) } - auditShardData(targetBatNode, shards, shaIdx, shardDupIdx, shardAuditData) { + auditShardData(targetBatNode, shards, shaIdx, shardDupIdx, shardAuditData, done) { let client = this.connect(targetBatNode.port, targetBatNode.host); const shaKeys = Object.keys(shards); @@ -280,6 +309,8 @@ class BatNode { if (finalShaGroup && finalShard) { this.auditResults(shardAuditData, shaKeys); + done = true; + console.log('shardData - audit finished', done); } }) } diff --git a/bin/index.js b/bin/index.js index 01f4a59..78166d5 100755 --- a/bin/index.js +++ b/bin/index.js @@ -51,6 +51,13 @@ function sendAuditMessage() { console.log("message: ", message); + + console.log('displayFileList!!!!!'); + client.on('data', (data, error) => { + if (error) { throw error; } + console.log('data callback', data.toString('utf8')); + }) + client.write(JSON.stringify(message)); } diff --git a/package.json b/package.json index 1243465..b97ece5 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@kadenceproject/kadence": "^3.1.2", + "backoff": "^2.5.0", "chalk": "^2.3.2", "dotenv": "^5.0.1", "public-ip": "^2.4.0" diff --git a/yarn.lock b/yarn.lock index 651004a..d6cce42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -192,6 +192,12 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + dependencies: + precond "0.2" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1965,6 +1971,10 @@ prebuild-install@^2.1.0: tunnel-agent "^0.6.0" which-pm-runs "^1.0.0" +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" From 5c7b23d1a8616d30a6df388086bcd6d78236011a Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 23:22:38 -0700 Subject: [PATCH 05/15] Get file integrity report in console using backoff --- audit/client/node.js | 39 ++++++++++++++++++++++++++--- batnode.js | 59 ++++++++++++-------------------------------- bin/index.js | 7 +++--- 3 files changed, 55 insertions(+), 50 deletions(-) diff --git a/audit/client/node.js b/audit/client/node.js index 40b704e..7867a14 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -5,6 +5,7 @@ const kad = require('@kadenceproject/kadence'); const BatNode = require('../../batnode').BatNode; const kad_bat = require('../../kadence_plugin').kad_bat; const seed = require('../../constants').SEED_NODE +const backoff = require('backoff'); // Create a third batnode kadnode pair const kadnode3 = new kad.KademliaNode({ @@ -43,10 +44,42 @@ const nodeCLIConnectionCallback = (serverConnection) => { batnode3.retrieveFile(filePath); } else if (receivedData.messageType === "CLI_AUDIT_FILE") { let filePath = receivedData.filePath; - + let fibonacciBackoff = backoff.exponential({ + randomisationFactor: 0, + initialDelay: 20, + maxDelay: 2000 + }); console.log("received path: ", filePath); - const auditData = batnode3.auditFile(filePath); - serverConnection.write(JSON.stringify({auditData})); + batnode3.auditFile(filePath); + + // post audit cleanup + serverConnection.on('close', () => { + batnode3._audit.ready = false; + batnode3._audit.data = null; + batnode3._audit.passed = false; + }); + + fibonacciBackoff.failAfter(10); + + fibonacciBackoff.on('backoff', function(number, delay) { + console.log(number + ' ' + delay + 'ms'); + }); + + fibonacciBackoff.on('ready', function() { + if (!batnode3._audit.ready) { + fibonacciBackoff.backoff(); + } else { + console.log('batnode3._audit.data', batnode3._audit.data); + serverConnection.write(JSON.stringify(batnode3._audit.data)); + return; + } + }); + + fibonacciBackoff.on('fail', function() { + console.log('Timeout: failed to complete audit'); + }); + + fibonacciBackoff.backoff(); } }); } diff --git a/batnode.js b/batnode.js index a4b04d6..b8dff3d 100644 --- a/batnode.js +++ b/batnode.js @@ -5,12 +5,11 @@ const PERSONAL_DIR = require('./utils/file').PERSONAL_DIR; const HOSTED_DIR = require('./utils/file').HOSTED_DIR; const fs = require('fs'); const constants = require('./constants'); -const async = require('async'); -const backoff = require('backoff'); class BatNode { constructor(kadenceNode = {}) { this._kadenceNode = kadenceNode; + this._audit = { ready: false, data: null, passed: false }; fileUtils.generateEnvFile() } @@ -204,39 +203,12 @@ class BatNode { const shards = manifest.chunks; const shaIds = Object.keys(shards); const shardAuditData = this.prepareAuditData(shards, shaIds); - let done = false; let shaIdx = 0; - var fibonacciBackoff = backoff.exponential({ - randomisationFactor: 0, - initialDelay: 10, - maxDelay: 2000 - }); while (shaIds.length > shaIdx) { - this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData, done); + this.auditShardsGroup(shards, shaIds, shaIdx, shardAuditData); shaIdx += 1; } - - fibonacciBackoff.failAfter(10); - - fibonacciBackoff.on('backoff', function(number, delay) { - console.log(number + ' ' + delay + 'ms'); - }); - - fibonacciBackoff.on('ready', function() { - if (!done) { - fibonacciBackoff.backoff(); - } else { - console.log('Finished backoff!'); - return shardAuditData; - } - }); - - fibonacciBackoff.on('fail', function() { - console.log('Timeout: failed to complete audit'); - }); - - fibonacciBackoff.backoff(); } prepareAuditData(shards, shaIds) { @@ -276,12 +248,12 @@ class BatNode { let kadNodeTarget = value.value; this.kadenceNode.getOtherBatNodeContact(kadNodeTarget, (err, batNode) => { if (err) { throw err; } - this.auditShardData(batNode, shards, shaIdx, shardDupIdx, shardAuditData, done) + this.auditShardData(batNode, shards, shaIdx, shardDupIdx, shardAuditData) }) }) } - auditShardData(targetBatNode, shards, shaIdx, shardDupIdx, shardAuditData, done) { + auditShardData(targetBatNode, shards, shaIdx, shardDupIdx, shardAuditData) { let client = this.connect(targetBatNode.port, targetBatNode.host); const shaKeys = Object.keys(shards); @@ -308,9 +280,17 @@ class BatNode { } if (finalShaGroup && finalShard) { - this.auditResults(shardAuditData, shaKeys); - done = true; - console.log('shardData - audit finished', done); + const hasBaselineRedundancy = this.auditResults(shardAuditData, shaKeys); + this._audit.ready = true; + this._audit.data = shardAuditData; + this._audit.passed = hasBaselineRedundancy; + + console.log(shardAuditData); + if (hasBaselineRedundancy) { + console.log('Passed audit!'); + } else { + console.log('Failed Audit'); + } } }) } @@ -326,14 +306,7 @@ class BatNode { return validShards >= constants.BASELINE_REDUNDANCY ? true : false; } - const fileRedundancyMet = shaKeys.every(isRedundant); - - console.log(auditData); - if (fileRedundancyMet) { - console.log('Passed audit!'); - } else { - console.log('Failed Audit'); - } + return shaKeys.every(isRedundant); } } diff --git a/bin/index.js b/bin/index.js index 78166d5..d05ebc6 100755 --- a/bin/index.js +++ b/bin/index.js @@ -48,14 +48,13 @@ function sendAuditMessage() { messageType: "CLI_AUDIT_FILE", filePath: batchain.audit, }; - - console.log("message: ", message); - + + client.write(JSON.stringify(message)); console.log('displayFileList!!!!!'); client.on('data', (data, error) => { if (error) { throw error; } - console.log('data callback', data.toString('utf8')); + console.log(`manifest path: ${batchain.audit}; data integrity: ${data.toString('utf8')}`); }) client.write(JSON.stringify(message)); From 64e7c9e939a5bc9fd7d939c29f827ccc1c13fe07 Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 23:23:05 -0700 Subject: [PATCH 06/15] Cleanup --- audit/client/node.js | 1 - 1 file changed, 1 deletion(-) diff --git a/audit/client/node.js b/audit/client/node.js index 7867a14..ee0931e 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -19,7 +19,6 @@ kadnode3.plugin(kad_bat) kadnode3.listen(1252) const batnode3 = new BatNode(kadnode3) kadnode3.batNode = batnode3 -batnode3.createServer(1985, '127.0.0.1') // Join kadnode3.join(seed, () => { From 7c5cae7e90baffa03496aefe03a69823d3caa549 Mon Sep 17 00:00:00 2001 From: Wilfred Tannr Allard Date: Thu, 29 Mar 2018 09:05:19 -0400 Subject: [PATCH 07/15] Update README, remove some unused variables in batnode.js --- README.md | 1 + batnode.js | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 56454df..1e1a245 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ 7. Make getOtherBatNodeContact use node ID rather than host as criterion to test for equivalence. 8. Integrate with stellar cryptocurrency to charge a static one-time upload fee. 9. Incentivization with blockchain: incentivization of making data available and keeping it integrous. The former is achieved by the upload fee. How to incentivize the latter? +10. getOtherBatNodeContact uses id instead of hostname ## Specification diff --git a/batnode.js b/batnode.js index b8dff3d..72c6e2a 100644 --- a/batnode.js +++ b/batnode.js @@ -18,7 +18,7 @@ class BatNode { const listenCallback = (server) => { this._server = server } - let server = tcpUtils.createServer(port, host, connectionCallback, listenCallback) + tcpUtils.createServer(port, host, connectionCallback, listenCallback) this.address = {port, host} } @@ -51,9 +51,8 @@ class BatNode { readFile(filePath, callback) { return fileUtils.getFile(filePath, callback) } - - writeFile(path, data, callback) { - fileUtils.writeFile(path, data, callback) + writeFile(filePath, data, callback) { + fileUtils.writeFile(filePath, data, callback) } sendShardToNode(nodeInfo, shard, shards, shardIdx, storedShardName, distinctIdx, manifestPath) { @@ -114,8 +113,8 @@ class BatNode { targetKadNode = res[i] } - this.kadenceNode.getOtherBatNodeContact(targetKadNode, (err, res) => { // res is contact info of batnode {port, host} - callback(res) + this.kadenceNode.getOtherBatNodeContact(targetKadNode, (error, result) => { // res is contact info of batnode {port, host} + callback(result) }) }) } From 6713bd73c791838017cd1079ec10a8b8cdaa4576 Mon Sep 17 00:00:00 2001 From: Wilfred Tannr Allard Date: Thu, 29 Mar 2018 09:06:19 -0400 Subject: [PATCH 08/15] Adding pdf to test upload and retrieval on servers --- personal/pita_kademlia.pdf | Bin 0 -> 214117 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 personal/pita_kademlia.pdf diff --git a/personal/pita_kademlia.pdf b/personal/pita_kademlia.pdf new file mode 100644 index 0000000000000000000000000000000000000000..46161b34cbba7fb87b9b32b2c6e720f1c84793f5 GIT binary patch literal 214117 zcmcG$1yodB`#wA{guqbJATp#h6AS|a(%mJ3pma;4sC0uMEr@g|DiRWcbSNN*loFzJ zBN7HEFyEnk<@xcx59`0yx1ROjiGB7Rd!N0p>%Q+Z?3%Ljd~kj=F(G?a>8k-^LO2u# zbuzOfCKMAB&@{ESbb}&*E80*2-J8yq0y3uVrVdWl7cLMJS~^*j*VNe>FDkT-Pcw?&Ck;}|JLZY{A(qcb!eQNP%a;k8FRVsA%**q@ES>_#Ns2}+G*4*Cd?DEcC zs(Um%oxQMjp^t)ulf3t+e7?=BT0Kbc&-*^UITR&-wGeH2DM?H9tK&N4qcZxVF!5qR zLXyPbB<)1G7}3uBmJR7^l|^%f%R6yat8*z=?hCAKWJ#QP)MJ9NjlC}TKIC;L5o2{+ z3Fdv(Ri|Fg;=miCrJ}VT%|_E+G!4$L#}5%Zwg$3$Twi^{A?ELYH@RoHx5er}Zm zUokOQ5;lV?kL7Rer6ODKc??_M&ss6hH1^R0VO}^^hgjhmnX}YXLUc1hI8JFe4OkQk z>zsq{?kx3syfuj$U8oux(ZT+_?lx{8`w%%2I4Ao;^!GV|$gGUl@wE4&8`C^f1!!Gr ze-{x4ZwbHYE32b<((0k=pJ8t$_d~aN!nUW+Uv)+cY7;|pUEXuK;6`8oVT#6w$Uc+W zx=+#Ed`Ngi=3|8tA-=1)=kr)d?*?wa{~n)2eHElR6x^OUS)440{=}*6<=8S;ecgi} z5;iS64{_3BS)q=tEfK}@z*W9LDWn;04EZeb5m8@d{GdaFkB=x&jCfm$(;%~fhn$^> z8y+dI3$uU&E%L2;swwBriJW!YO?azktavek7)Yq^1X?aViy+eIlI=xQQwdJ zalE`z#>21L7Yu%KeSUS`6Abkz@?voAVxl3qYbtq@u+cI2LLaw)=4|z)42a^nm{)WT z5v*qAJHo_~p5U>xQ=LM^uDmW(9N)8t9)8(gNXJ@xh5dHB`21=28ez&H0tZKXb9Pw7 zE8P~+o+$37e8s~4;un=$HxrP(Q?c2UaCH}LStUQ)f>XuBmED^D|# z)!Vw}Dv~=nZgWFY5F& z(@qh)(G^ifbS^y2$93*I z&t`r7k-yt(7lQQjEbtcP;Pm%*!UU#FXUEPkYdsA7JpcW1K#oXy4d2R#o$C%!i)H#8 zpmDtgZhcwO@i%=+zn-~E3jF@uz0fvbR(FP(S|t07OGGRO{${@q6-ei6B|1mb*}`XL zDA8z)@+pTL%MO}LyN;+O#*d*Tl~m`^fY_XCbbnupiPg(;1U9xu7|NWH}GCu``Yeu*-yL9?_3%jMC^@TiV5eS3E0 z#z1(?y3g~ctAl8T3v7?=j2#)3LYT$E^}}2h{k}-8pS@6^dH&v)NwvO-USwTSXIXAa z0*b0+N?DU|Ryp-t?2}txC|fzA2IjT0E~JKih)7(OBfHnvBdB}n&Vw_p=>-C7_i?lg z!Z#T+Oq7Hkb$;WkZ1NmB&AROh_GQ1M{wDv;n0g5Is}Iky*)B6qm|1E(bm3ci^-J@d zcoD>eL9#wyRaQ9U^n`G9o6f^ez=L%OLh<*>>7cb5dX?vvtv>`AjttF4{aIsDayTdjy75NIHQ^)D`Tab1djWd;>RP4_8 zt+qyV=N;ka=LEK@X-xRZoowN{S2FHh#J@e>c~Q7cyjRl!S#ek6HD+@@ub4}~X zs|rzKYL@e@RYDBx*=362!a0+oU*J6XhT~Y z%N$K(xb5SnUeZb4Iy+ST+NVZcu}8Y*Esg7Ljr3M$2{76?-nAffvURz9+456-a+CFE zlLn1JY&`MyiR=U1MCpc>{x@Q{U3UoG`fs+qX*nOn9FuGVDMNhpZoJdC#U-bBp2oDX zI+`hHz}aYAT~V!8`^srqx%Hv9@}147sPEkQk3X|FoHhFRMCrpVv|U{i_^RN_XBVuy zoR6_)X;3B;UuO-|lU^jzcRaaRJ`*=ZheajcHQ`Xk*42d!FP(44bs@`u*r?67F-S@I2QJ0QYzptS^ z^`aL?F#R;=FAm+1;tdi1iQ@By{CI61gV`#ZY#JAdV@uLYN8&D))lo2q=qU1f)}%eU zie-sSS8mI4<)ferRYCu~$M@bxuwu9!u3YKjqD3*FVzBgQ%6sk;{E~cG#6FYDEy%=zdvth*X`XVV>pZn`_3~pR#Fujo)=<>^%)jufVOE*XT4vSWFK|u0z zwO=#MS&!X`!ftD?R0_r0MHVuQ89(hzWVy&SL}A+>IczRxpZ4ahJfT5*RoI%1Vdbt>>ZVOPb(Q>zHsAS#ivGJ&o<#A^Ic%`XH!qs58&*$}>RKf;51{(4e_Drp zW6^(x%F4!LIlZ(AB`&ONRvYfppx+2ksk|!aSRyt-Fh%8#`5bXpI9lcD7;m&!rhZsx|iU4K7tap@KQHVYY2J8h$*Xs1;~b?!U( zoz#|0Cx^l)248)>?%COT4rRn@Y{x84^BO#W^EboCM+2nFV>X00dA<_R$B%f;ewa0A z+N_ukRGQ=E60$#6m)p{#%we=9%sq2+z6$dG(sdH$d@MHOG`%b;{I&N2SGC4BtV;7j zd`i0R)ljoFo&P>V&=t^i5z{O=+8FU+pw8C*P0JNQ@w|bpDsACvw`kF%Y2Nvb`Eojoq|;);^Hy7o=O$1axG1#BDm z@w%&;>KS!X+^X*@R3!+=*6U^}Y5N}u*xvtg+16Q84|m=A4By7HPxQB8kKRodj$bBU zd=?fs`EBrgJ?67Uv~Hp3=AE?yJn5)b_T1hKvkwuZzO}!XeILG+=Gf!4hji+Y;_lM4 zKU54LegHL=hohkTBosIl0w^!g1R%-sa5NMS+h@7Ji7;?upZfwQB2YN;@DT(Y3J3V% z{xe7z6d2CZtcia_o zsIauDo25LUw7?|=RV8&P9vL-l5dnEyS2uSV8&g-Pps>L1U0F*vb5~nufC@wRX}5r? z=|KxPz~^;5%-nbR|85WfzRy?p`qa0zaJO*-Ox{!YZxwcXIaEQ)&3u>s3W*2;0R(47 zOIvFj;7k}Pu&V)J1*d?ei-)O$fVF^wfRlieqosiR4JUzHmaa}*0=tUsKFkLPo(2f8 zwHp-p7tmOGk8SfIMWB2L6yQM^QV5Dh!HoBA0)*KTdgw)Jn@Fu<1>l?(WW zu}Xp-m3Sj$#ggagLC(aqx>`K}*x9z8h@@-EZ(y+;4Xh*F@h(XZ=;FZlOWK#zDu{pGPGfeS2|@SxFsZ>^sh-*FM7_(L!>rPeZyq1b0(#I%qu5({77x~`q>H*rDC z=BsQ!MCKN-YzT1~@hnGi8RoIcok1E+0a+m0H$R>}mSX7}Aa}OnOv`PJ0h%Z zZmu>#FDtMz3tx3v-1q<{ds&>1A!zC5qKuLKC@%3M7t>Pb`QwTtjIu>C^jAAAYl!bf zH7}PkODzq8XzoWMg+lM^)?A$8O-4-U&-rhT2q}8xVwc~PQ1E(3`K~`J<{F)ytNGNt zWK9;dF{qU*OKK`eP^Zpn{~d{#i!d#4Oci+#7seJb4i<@)8%uD?h4 z@TVuc`n;N5&+wgX)Z?pyh~vEB4jqegE}00cNX=2auIZAk-c(H%8|mIwt?$yaL$Kvx z=cL~jpjlp6uk;GQ)Q%o}9kh*E;j{lRDYZ<(==gvod`~pjlb0hn_yO zH@qAvk_66TU;%GxPWQ~thY+cD!z4fwLU0EOLMV--cE>S4m59&nIoA=I@GryQQaxwwN!=n-xty_i}wxC!@U(@u-?~ z;w7%-l>D!ftS+STaxrRo>^S@QIDp33Z7PYp|c&ln@Aqa8+-p3N-lROzR@SS8)iV9{cr zDbsnT@jzMPv(1Df(`m6JGy}HilFO#+=^M2*GD4%o=w1`$&e8v&%hW))~6EG+WJ~&>E6m zDG9f>jU~|$SjD=MlXx4+8=PTP!9+J*L+c|jiym013J~2+nJY?~I(^f){Bkd)@#%d3 zpY&790?&LMoqPqG8*A)=klaq_s{cK&GVNgPzb1`0>(d3%w0jBQr%=;I8P+BRM)30(hkKnZo^6YFzv=Ug@9vcVZuPLu zrRE=mK`-ps6nrN74Zh}2%c)wXJM;V^yHorqW&1@76(z~H2aBu2@`)sutT~D-*QD?V zd~XEbx@y!%_B#4ai{!6MA8hD)epZ!~hS#%Ri|vh!P`aA*A@6p$*k;BAQ6@b0+*e=I zp4{8P#Fc_i80w2pomtUzYr)Y`ddO2x$Az4kx^-4$@(ISI(Br8C#mHCPY|Q4WTJZundOuE1=$_NnrWh$GHKbqyR;uf zEDMws>dSkJgLIYxL{zBAZ}&uGa@>Rcx^z9hUStdF>r!1dgaiKkDaFn$57ysH0=F-p zzL8J(3e9mhwBc1zFAvXF=z@*8oj~S-z*Nn`>-%hsMFR#12DTA;{b5lV9^ayx^L0|A zqCG6Fbw^l0f(-v-NY~AI0HC9vL4j=CAYSl+VYvIH4CHPj${D z7d>6B@+Eo0-#OOQNtjR75gBU0n{@MWeSvSKh+ur~?Y6izU1Z}U+|pnJ9$SeYY{mH* zJPfq03aBu8rD(2A>fZ_lNDBPLfZW(mX^nTx?@wSGTw6ERFOJ3+QmL&z{ma)twIf4h z(Vb`JJX+e)NZEoT!TIyfI@mUB+3stj?JR|@oHQ1S2P-c9o!Z5)bSLF_3mx*PKn8IS z33J|`0#SzQzH%<*23-|rF2H}4dPF59Y4EWU#to8Qu=QTgubKJ&B%Jdq7psX#e&x-K z^c44yQ+CzvX$#h?J&M`x0JuA0MMO+EF0aWe49EIO^gYScNBynfvcSi51oBZVd6R3W?rah>Xn|iZ1?|jd ziju$)h2(w8`w1Stx3qkLMqw$i+5eX*P_!T|Z{+k1J3u@34Yxo~e9fvWWB zovjK7#al80ceJFhol>qZ3iJ^2x<1+`eafx$h5-EycRj7QS8P7s(vfpkG(L;|Ntw0I z!=_O&ZPV<3c9Z2DtIdrtt1xyC=FRAY2PNMqMO5W`{ZIRDf6w7QqxB~Kat%>~<@yu(sc9&Xu30k`?|NdIg-y zEwu5g4R_CGFAt1;_S4aQm7cu5{96=9NIAOHOnIv%onXPiU6(d!dhwzh<-^+NF>oaa zjqqCr!WYIF)fYOEO=Agp^>ZJku2S}YaVoVp`WW=#`lX?_4~n0-Z$&<6LrJMf8-B^t zf!L1Ea&YPe3xCYFuKEzm^91+)%nN$v6uMg+^bAs;ei6E~@Ze9&vOFC~%n4;q7wy&7 zdlvK1HaKRuaHvY-1D#!rCPO!AVhJCZr>on}Q74^eh*PK3maCG8~N%@J7 z^SSGWFsH8Cr_LSp6}KLvV`;@6YTkp8m!T*)l3(Qi@h?Ic#g78AZ2$R-77^hW1fV^N zA9?V1{|Xun<3~f$2s9uIErcaF5hh}1l$vb0*Nu8ul;sNG#rXT2=l|CyH6va zLVHh$2qF&d@AtX?^g;iq-KSB&a|gZe%iH@4hXFVLJi2#DXs`2q#rGZXe~o3DZUgS_x8A!3C@XkyF8oKWJt@ZjNnY;pwnG%Z%SLv26~Jc>a-MRI zK(5W!(HbgpK#Kmun-K87S%}~+KLMNx6+-P35H(YGSKHleAU_O_MD9Kf{P&+@519Gv_0LeQ-#gP9YECL5qOyrOv{$=FfDO%HAdU{Ao zffIm;?q^j6fD?e09ON^B6C@NMwtGAjI1vQ+>Yo!7z*qmA0Oa?8XaUX8P{aX|1x|zk zCi|xuz+MlWY6=G?{voRcPJmJSqXFP}#2*a+EfIe-0JKE>(E!jA@kawdOT-@y04)JJ zeV{d(;Hx3m*016z^chlWQhw>4C!T<@~ z7YSsRp@N6<5kPyvL-`0n;8i@7j}R1s0_O+Mpb${OL-~M>f`7yVef<$H0u?+oA23kx zP&y!4@K87)7$Cy?odR-EhoXVb0TBn+f!Fg;Fwi;bP%h9p>QFAw`9XeOz!c~lbto6; z9Cauc=p1z@7wBB*P%hB9(4kzQbD=}IK<7e-a)Hi;4&?%!3mwV@Iu|;$7wBB*P%h9w z=uj@uKjfd=S9xqHjfK^vd}`cN*=;4l_riWUSGx5GBT zLU2%CCvZ{t&|cu8 z@S$AbqVS!x%~(e~0lrtv*K^^ox~-Ef?>*46YFHwDZ?^tvc3gp3@aqo{hufhU*?SI>PLzZq zj^}|AwY|?shIQPKRbzxj*X>u0{t>Cnf||Ad`h){v!+qK0QIEEVzud2T=&Xu6t4A^{ zHQ;fT&(Akck67EJf8D-QE=p3c@)rFt+%fP)G5Gg5UH9`$K5tNJu;k|P#_!J26BsXu z{Cff*5g(9neV8T;$BdN-SI0b)Z-V^WOx6l{PRKQfJjCS6pGgN%2B{VMxc4JKo3h#1MfZ=Co9fw`+Ia|GQlXBSQPi5l1_3*rh%7w>udB4vYR_KnT_(!NL>hxS$ zUF`VCO4YIGR`E09D>wf@e<7`8aU8#Ns7Cv*WtowR_E##N(Vt1AznO8Ivl*+vm_JvY zvF*gpE@x=?&R}vC-$dY)vx)Cc(>SSgzyMqdSG`=J@TJO&o_>cG>^T!#HR&+wc}xrc z&C$)_?P7AvU^Uo${uv`;@PH(xMOWt6MIpfN^e zRE~LAvk`i)qfgG?e-i}$4aVCcJ%uxcjk^k-A%$Q}!?wX;Dz_~fx3WSungh21xW z9pHwImf)~qZ#ngltn4`%PdTM-+50nUD=Z??4Na8Hi#39FP9;p8U7Zi=2JT4z5RRcC z5h3(k?2B!>WJk(Q|3I9bZk|09KL25)Y@Amt}t&4V7xU^VNt>_Xv3lf2rq5Ymn z<)kX#A4v}7lIUj3!L7x5n`19?yc>46`V+VT_K)TG$P7Jr1y49b_m|_tS8$MN3twgj ze@W1Pi)kkiE9vPueJBm6aaw-(czt(a&hgO(0$JnA@O%IDKFyG>k<#uUVOtnY zOyDL4D+I&D)W3oR2VX!Bw!?f(OfX$0PK_IZ{+mpJ-dJHf&7l4jd?}1cjD(-6uStv( zZIB?aq5K9%VrX|T5<8fTZ4Bw0;DOCs2Df0x+q?_APGGa(|5zpu&HjH}Cfk@yHZWN` z;ATuT=?-B2h-P!cPFmJoz|gRbW)o6&pN4Q!LH0pkSU-9TVwOQUh>WJ&7UCYj} zD=6M)3A3*t=NVs*pqqKu=8)jrVt)2Dug<+74Y;vVOE`H)i)bs6<-N|ka%}~vs;>(- zeQu|=TRgyRwQ&91dWNxW2J#7{c$LKXk~HdNQ>He`J&zuT-7u)3j}@1&bG*>`zCfj? z;f{aCB}`H1SI!>heBH$k{HVfh?)tB#3HR<*e8Y?TCjMV$@d-hY@R6l85kSF>nv{5B z5+XA3rJgvmxRuW?4y9;@lbq%VOoq{);`wgnop7Nkkz~2MlAqbM%&XZq4kMxUh_Q7- zMZr)?pXF+k<_D~=!b?^CN%@!y&nm>)F1=-6Dxt4V)f0+s-l;T2C6ln5B)(xG^KCca z&W%5F@#E#nqG%%7gq+;urHGPzgx9#)g<0P;Q`ZE{I zB=vvN&m+%lP`nc^;Hw+gdX4k}eSBq0ef$JC8DxTs9C?=$--_yL7 z_2rVAj3hgaB+)~(nq=S|KQ5eSye+#hIM{tCXBsD6$|ao@YTNCF?#P>)5;nMO{$`f)CSb4LkSZxSG$~ z3^IuI)0zcQUh9!v9rsF*K!NQ23b4%{+`%s7o4$(8^UQvfhDAt3Y&=Dj-uG3KLsh;- zy*!ad{DkS(HY7NOy)2vNqM@YT@jf^yaymMo&-+VZySP@j8>I_F=)mAQ2e=7~ke)L+ zS;ivHttwTl>RU5aq-y0iala;`U+Hy(>~eXJjeeRs{$!i}r!!UuNetd+r;iNU7=3<JPklT#cq zsS&)oN~)?N^f84!bVReDxtJicL(& zT(KHO{2wHrn#W<Yx@E*U&hEwM-|FByzZ^PPF1)O7LOObqKy zr8bub`sCNR)bn-{3rj{c1z5!=h1td965NGmwwH@JK0Wv*!XiFarOMCAP+XqQhtZ^3 zdXE&w!c!QFJX1MF?CzwId9xn7k;o6@l8^J|RE;+1XJChk@l57fvkf&Ddw++=zXL+J z{rb78Ql**G^}}c=T}S9G-!chy+9+Q&DN%Mk-W?}HZ2y=ndR--U*ivM#SHB9cn4Bsp zCv&_49Woxse~kUwPydusA`9@Q;ORmxz49*erd-FvdJq`qLhUG!yGb?LkTJjTQM4n4 zcr^L!$J-T*S7;66zjQpQ63tg%zd=u(du8Z{Qk3O6Jyp-@%}a6g7bKoDqbAVJx0GLn z{j7Jqx)Yn&=53fgA9tEA2+z4m?-kv(F^Xpq_;X>Gv8o;r?0^Joi`wdprZ{sIPDx0+ z-c|g?R84P;d@6$D#TGlm@2pI2i&Ge^CmMt&y%V((EvbQ9+l`xgLB95Q@0<|Sp^rp> z*gJOdED+W^#}#BNCOw0*>}VD%eX8Y@BeRVqa}%(LXqDYn=+OFcic2SK(Sdiz%&M-P z#x1^dM)eKxEZtSeCoUd~4=$0R>rvb)3k?QRcC44RuXns_T~vND{A@7h$)?SvjJ6L( zA>GlY9|Yj*xV`E*UT7P0=Zz+{3(iUopoii?+bW``f{T->p9C+k2}u%N3qm~(rC135 zMIBDMc1D^ur#w%58?`xPX^;ej&61p-2f*8Ndo~6b0S>UgBXXoTX812EQ?4| zM|-@Agi+&Qs>-NLW7z)+5R6NZZGk8bPziA`gU#_eo(y6kj>a;c#gsTUNkT#xErr{O zqRHw(L6rPqxNMo)NZo7-uvx%eMj(zRMjsugVAAPqXLq&h$@%W^%XNLe6~3cRj{@7n zLIfY~5Dlfes)RzKZIINV2^uexwrThYRnZnm)zM3@%RC>g&##5go7J*i)GwP(XQbxA zu2evQWYxT^Te<|J$&{s=>sy7RpVum7AbYLt$jbE_BjNap+C06k3R{gn;_u$EJ-9JVd-B+r)Kgw=ye@592d32OV zB2O^N5HHE%N+a?%-{Hv4{}^^o8nR@3e!%l;jp0EMrAGsDtiNbgWnb;PS=LL98@$^I_4B zi~v?n?m*a8Xvd4;Q)7c)?#{VlkFO+c-I3)8xyx^6vt>8?_9Mq8FY`k%aab###s+v{ z(IDp7vE0iep1@D=Bg89ee;vmgyUI)bu!`o?QjOn`=nw3OIB+enjz3gpzNn;3#QxZ+ zy5_@-+6Q#yx6sAq?5Il?cy$vQbhP3=ydu_ba{|66cM$kemYrj4PR-zt|H=54LEEW7 zMZ1G6-tOX-$HopD>Z(8`RB!#^n3sy$TQCo(N9j&M{PI0PMIOxK4s_zD)?ssu^%m6od$!Nj>Ag~*e<8`2%y`8^e_FRP|K>)d(QHkyNO z3Z*^QDJei)+e>#Fa;4{Z-<%K&3Lc3IBL9SJO~JSnL_wW)O}3gFw*39KL1167Vq72=)*usXE0lQ$AIh&shQSZPV6qNz%vP^B z_VGrY5aq#+Y)$*27BV?&r4pDLKh%Oh^FgJQS^SY$3yX;1-8j}E8zoI_K)ip*UIaZz(ZmqxqS+EZQ9}eh7 zXeUSB4_bUHCX?G2cl?PghUtY?m>V(csLDd)LGUqthqwguqvsx@^wj>KHK04cq z9{GeB6|l~UJWbyRV;9MDP@koA;>=^<5Zt_`uFp#uA+8i|_T@Eaf5_RNv$%34#@Z3t zxiZS_8oj0Nl#L z)EQFs^u@DtZ8aGR8(CSnj@cYy)$Nn766Y_e_W(QDZm@*{NXZ<;kSW~$ zk#kB;{_k)2pZwzz(~5+N$rh%0k91ct2|?C~x0n_HT06zGWe)0B(>z9Cd`e{25ZfQr7=i z`p;-N$Nz|yXTI4>KH=eQ;zJ-143KYy`No)=j7c+avpCJ4DmI=nIt{c z2wbA2RfKMkZsB9IVLSFql66YH6U)c=u3&usgptiMJW7u@^JLHtF8KeSnM`|TGMSj{ zH2C`YWBj(T@HX+Frtd&(3z98Nry70zR`EAme4&yoobU*<0J^yx{O`LN#AxUNq7n1= ztvTMflc6rS@R22IKiz?22BbR`lD0T}!#1{hbm82&Z1gQHam@EYY zk|9p8$~_CDCWyTT zk(}Vrd^}~ue@=sc+Zk7eh~JwuQ#h&aQIWKgmMwQuosM5=0CQ5^9qF>H04d(2M|ZHn z%~*J^!H`a3$QA_R1%V(S5FrSJ3Ibu03|qwluVay!;j?6(F6O=oi!(PV4rI=}ORxJa zP&Vk{C%krNk>n`Jr~V|M^MTu-em%)qsSyI#V&cJ7FB1>RuORVP&VC0AQfj#9(D6Pv zA+!=c`lcTG0LUlr`rzVUKJe=v!QoC!?U^5_pjYeGoONEPhars0SZ0{ z@j~c}&x`JQAtsbL^Xv{DWs8rWV9>)fraeChnc(aCF@mpCb>Aer@jTFD#lO}B{DY)> zT(ZdJpd`RSLnPsNC!7q5!4XHCz}GHCge3(E8Q0M1Puju`{YnZ$iVj`B(_v^y5)mJm z(4@s&*eP-KX~oYUHTN?@ppT3wB;w!c%}s2Y45jE$zjUc9i730BShjf2c2d4*_P6ro zYe{Qmas2WXxM`VQ2F70z*3Yjg=HFY!C|Ka#}{UScFQt(y;m&vr4?#}n(l;>Z)M z4F5o0d+`%Z*zQXKgw(YTUkb!?oCqLU@IX56&r%=BySvm+{9~#AN3s9{Ij!k{)qO2SxAp(SC+Q{dns|77BbO}}LP2+I}P@a9X&v6YdD%wyVY<|S2>Lzf)* z<%Fn1Rp<^jvsY?dS;vpX2?2@Fk)<4YVCltflr~IA4~Ej*4>b$n0HNk&da1wC2gJLE z{xd7Gzo(_|Ly{c;k$m^1rS%zv!z9L>Oe8=-#GUvX49QGwNSF`E^fumWCa43xu3l@y z3O*yo++;(6IP$GS@+T<7jkN8W$qj7gwztq1z!Lb4=wRxF!Oi-PH}{0V1aWllJ}?(- zW)8qF@IIhs)%gd|q`mL@?^JS-j+S=A|I*p8MLOC+3{bUzKfVotNG$oA1yT*5Vf{cl z2-JKKIcvu79AB)sSC{+m(-Q$d0++?#)GIe@(&DaAAaLrY3+W;@(;II0U9`!f-6cx> z?NUL~9+Y;rSvn6CI&!ASm*>c8((Sv)(Ww&gL*I4NgqrG&?u>wT?qt+p;7nOJXkvmlm!r6B7)B;_X(jx`30 zx<^hHSI6~#eeJA)Lbe)Y88yoSpD=^07yN?;f|3%FB1^}OoL}bQro}X~YMh_4B}zg$ z<2kdM=m(AQywp6E^_%r)xmY`C9N9&_;|KU;&;)U`y2~;eZr7|yCaaK7=CCe6R#5B5 z*Dirg6GB=6)*@HrreRL}f-niCH5xjfayOebUzfR{^W8bUh}NdgE`&Wzslwa$3+{y# z{fGf?=5r;uuZ%iwI$zIt{)Fx06F#=v4|xr~XOCW;4YYVVP_F%HP87+ceT~wVC=#6Q zBHR0N7qr;Mmb0EG-Xz{K0Ae2 zEoIT&T=q3;2Xez*pNK>d)nifYs!7jlOlOlnZIkZM+n<^v*6(R*{OgZ65-|9$Sj zg^z@Wqq@{~2{!InNI-B_|1+X2H|%)&#N{BvMqV7_Dl#d}qzTfO73dXZphk60%{@Kg zB?`t=qZ$&ab{i}-lJuPQEJuyTob(4}p)i}Jy9pw_JQer8sX8iEi;Ncj1kXFbP1{9^ zD1;bXMQ*2a*U~fL5MLuhM>c{}8&otKe6htyByps>ak*e)5N=JvCuCa!8~L~_WC0|K z{#cha{a>U`DAZ2XwGjkjT>?N3Gp(T;N+WcVYj)-rtoP80;R-}OP{$Uzk7jo-NwFTd0xz6O~g#II}sYL z`P{HJV(=K4#*n6(AUM4IBW8bJ!P``}UKwK`^4JUmNAl`RXgHM+?s; z8I?|l;(omMF(sPVJN6n|L6xzQFG)t(^5a|9A2q-8!u7U^FkToR&2pbl#krS1w|A!h z;sXejulVJG@Q)yk%)VfJk&e>`}9tpN$bnG%qp7(21RpbeD=Qduu)tR$4^f<V$}BD-KmnbI({VCO5Q4JiOZNgSED;eaJ`pXIfs{_nt)S$?(rk^FMQ;4(}m;b z%*jv{@DmSzhp?l%_L4}r-2?&tTxI2CsYG***C|w)am;XD>=q_UX#z>d5A8j!31?)D z6ojM+iS7(+y$daxR8owSrswI^iC{~^uF1Z5MmZwE{w|FwaRi@juvt5tur&Mk7Z>^1 z!dc49HXE9lk(_o#?1o7855q-G!}^o=!7ccpcGrvgAU)i(iwU3$0@VerAr1{@_t18& zlX{O{38eXS%z;yoiM@u9oEU_{4Ow67$H<_#?Qq~zGk{zxB4R*cOewip84nOxd{0HFzfb;);X>eHD>aef_mP#WA)BAH74_W>a;PcIcoB;;Z$%Z zaVMk`vIKDef(Bwh)PNd-3n73U07s&?EZxUjbh6MD0)AxoyVkWAUB??E!VQ-Bvhd+H z_Q!0gR6@N*k^prQ7Rr7t&7PqPhD>?U-6esv0xmY(!~{$?s$#CHE4a#IMQti7xk^7G zbK;aK1RF2hnZ%vM*=B4f+ornFqw(QerNq0r)(0XkH>7U+xHecwfi(RLh-Gajb@|*! z`MybnTnQY18Vr5ITc}m2B>tcYY3e#4ZQ*D;XDD2+s&*dw83iUgANe#P_)$V{IOqxr zE1oVpB_VX(*K<)-BIu!@Gsh#CXKL3oKM4wDDmCZ(W7PE-*G&J*aGwl1!bOg7gQ#wC zk^oHzXiR}t@ueruZEXLQc;Q$mM_r@rIsD1oyCn2!t2SqXSz!pWVhJ{3=`oezpTlt+ ztK5d>e&pT+walNTJ*88%d6}7vm|`xkXwW_y`^rgF_i6I?_o~1QCLu)^|5>s?qCsr@ zTal*rB`8Phkm z>@B;Fmv-pp>rb@HAMBWN+@tzx8k6>I(rWNc!-pnvA5laE$*~hK`_6;BzQw3B5o3+0zy(3** zwi)4T9eN)=^D@Pyk?QKFVy+?8&Dvbz;9?W=iH?sE)O_>Sg;u#=y;Wa&j}^W9fH*0zZ$`)AMno`=&2iA3ZC z-bf;@|FF{+eUswLD|OX(L36TOt^B_p`BEg(^$KgOAUf&NLO1Uecbs2By-OIFNHVQ@80F`u* zykE8Tf5O9mMH8ERp*AKaAT1_nzXTrMYhOqtkd>kJQ~eD#iNIhbn_)l?lYRZTUQ3t| z21)5M20aPY{6XB7u!Y4-*{wO!kN-q-F!G+S-&-Zlu5yJ{!hT<}QN)fU34u)|NQU5y z6>%{cj+O+J66RjDpY+d`3Ve0E8%`KdLmvSSNK`Kp2&Zbo@XU0eh=V8;R=9r^H2hCY zl>)gNQ{_Awgu;&bD`&OBghK+2?*sx03#2e?B_CM(7DyJs5({awz`ht4)d<3G2eEC& zD2l)g@YygJOsKqci>Y0VM~RfuS%^0F5}r{m?r8%*Ss&1E5>-T?(ht%x=M4}^JboM7 zL3F|ImZ$ykW}gr!qK>Q}NK`jcPh`_0)P*hmg^1?~vj-0-4F!b8Cw7ACdp5>;5%CZ&Rxvhp5$m?{~w|7+MLyfqb zgVNT~OrwGVTt1db+FNYq5gk-TzUZrz?=qMS9uoP)qrd9%)6z1+@HD@vv3=X-?=|S2 zZpf9pg4M_8_(Sp&l#;}?Rsni$$Q3)N>(u3}CW{-)0|VA9l;9{Wp2_-#InzZNO6N~S+9&H4A2XTiYu!h!$6iDp~x z8X9&&{l}SrFYBWHAMSv$@KBsaA<|OK5PMJ816;&Vn{@toJ5CrgJj$Vwhyf%TnC2k! z|5(BLPb+BYPGW@=*`zOCh%Y$O&(W_s^dQ9{nFHkIj{}^0UwHrfUIrIDx)@dT@0Zi= z$2fs3&%uHuv|CP_O#fFoZR82cX(8V+m}Yq3HW5WG1K(|%(2?TPr_#VK zX=r|AS4eG-$<-tczP>*|%g1 zNg`wksVLE&Em^ZyWGzWjA&J8L&Yc;;o6p<#^Zowwdw9&a_s%)@p5@+iU+27@ujdmi zXAR%8h(;23y3o5_L-@0P5V{ny7;H{{)GV4VTGT|O&;E#U-Yk7UO8?$Qe&>f;{a>7S z+;fkqeR;(yo&D`#PonrQLEV}+sONRF`*e2=yuN>Y*I{V`(X*oh1>=VcnDWmoF3*+a zIR>a$eKrY9N_N2~4Dt<4)~dj^@*`Y{(gBm3$M!Rv~{n7Baq@v$)~z4tTSB)p}!0bcy3IEa0zG&QT1 zSfExBwzhIQ<)F;_QB3`sB;!S06z8{0dp6IrwudvO%XmC%gg(8@n6ph)cCg`Og)1Jt zoZ`~EOZ4fCc>YHjo@*zri5wfUC~f0-)~xXOhDWUnjKLxEPcC-|*)w+MWD#G~* z>8!)^<1*jF+8>-Re$5n@Sf2iXkxwlAsSq1+(D{Pmi0kx8hZ)bP+sar;5{JR$a?dix zxawO+`0}OG8xUiNmlaFz){FJe-@C_7)o!O-IZI_*;n%i#TW!y3+t60G62SyWl}S@5%y|E0U9bcv~h4D?15+1sh#F?$6#7jdJ z)&D*xQGrkE^z2q+Wq2x~^hje|+rW?}Lh-{rs)21~-ggB#)0 zz}kHa?7n3y%Xu;|h~%9kicV313GoE$1lrCJ(F-JTO`BKM()c7|O* zQ^Oh;;hM|9B8VHsLq3w}Pfu=M-))+GsC6&VxVEQ|+kk9Jj5b2U&71BCYkPT5p?NjD zG%PzgOui^L`}(P`xgU*wlXG#^rS0F@t(6ftlGMC(fcBBp^an&mgE}Oj zP~owQ9?gfq?0HWsgv%`QKO~L^69Y6mp*AU<4mJ62M?a$DISFpgT-VWaT-l7x!Y>V+ zZ(QMO{bb=$8->1|@bK2c?dyAsIrLNeD;_s}B@*|KIbtEl)F!Q8rt<02jm!Qq%@-JN zi`<@n^nNDtH#2`M?R*0_86S5bm$DJH0UfMbeZO{;oTGiSn4u-%Vvy9Zk8@z@8*Sr9 z_j&ix(NJ}?Ul5QlyVqcA=Pz+}=<2Ir>esd7v6cfdDRa~Qu|aRsteR~V9o`-Hmz=fn zjf#IY-{evwB4tgzTUg;%m(zjEvox~V*0Y;8+%|1V=?zmRe5@0gDFTn|%5$`lZXylB z1N?(}WZiT08>2b}k8lQ&c=LB6L5x$_F_P#MG1$cbIw=CpyGpQ&lMSN;bd9lDwy=xT z8d0Md0)bIrLx-uaSjoNbtv8P+#uEJe`>Poxw{8jLV>>?Rl64nhSKfUoPl5q`+a&^C zI{vg3M-%g{pN}@)!n5N`9pXIiDsO3ha|-3Dy&A3G~8*QA{y-T@a&t z8bUNo^)Ruz5hkgz*Uj@m(iuwMnaPy#oT57==beo{^p+Herm~2h9;Z4yVX=9@DVEUa z-|H?VwXW``+pG5xp@2&%$ZWg@G20jR){kIdU|;t&%KH)D)Y?tp`G$rG>dZ=VVD-pp zD7(Em)b4{ogmd`und&U$4@U2x+(?V5;5%d`-%Kwp9_|z_GN+(oS#1467AMy9iNR3$ zhr`dhp%W_KQxdXx9_9tqTu8bgc!;sWC!zZ_rf~<1Bbhrwnc*cf1M6|Z_~TWS@EKDP zLVlW(qtvCB)Iuq|Ds{Y?2a_9ph&y*=M(6Hrve1;ieNn8-^DQICn;fk>T>MXC#yJ@8 z{qQ=on@(h{p0>xab5KELs zJ2BHrNoMOBd}C0f&NzdOYNIDSDO%_#Y|m2_)nsEjMsIxF-99rjy0rS6&E+du3-=bM ze6=a^y^y)PZusr{Rdn`nZzvCAIuDJ?nS_&O#q;TRBVyVX%wBvXdHU>$QlYP(pLS8q z5wB!pkDE=*>|G@Fq_qPifF!fx2kn+F`Y`VIT!oF{D7A7 z7u#KfyP12fzg|3ftXS+PQSH~Hs7=QkETz^q+Isza8*2|@+nVzMlJoLhOxPr2TAhu| z;gBE1CXm7GmYrH7O6fx}Z*Bhh)F{EOT_)k?4))?ts>W<&r`q)T8*>!zM<~7j5PwVT ztA=jdXsQLPaZ?na1d>S^GOf&840RQCmG}yA0)4!B6W#o?Z!opuL9YGjcSt_s=LZ-E{}T(o?ZM!<|_FJ;ztPP2`=rlu2+$Jht=%UzBM*x6f| z6n{|-b+K`thxU;Alf~Sg@vx&Dt$Y{s9=G{v2JXytwiy>HSkTmY5;^0WBs)T%|M0ft z&3%0bf7SCDe;)Kr;E#_PiFSS&lweX*3eS}D(tqCSb8_=B97|2MjW%8H^Lnuox`L5! zsHTG)q{0mY%omPQoJ1TU)`KDt3-sta`uxlNQ~ZhdleqtAbJ=l@fHl?C!RMDl|I~}P z`|U~ZXnHO^68(52!{(T&6YCeAD~FSUianE_mx=lPy#4s=viZzs>w=O`zh7M5Uo* zUAIlkdVO%up*FRXAegy+TGET&m;AWuRA#nrbgF1H!Oiwv#E&P`iE|$9%G0XO>UPnbug6!1M@^%9JsdonF2YX?N$nI|=8C3NRH84BhSN#Fee0gdGi0CRCLHJrmd}>|7QB>mlDv@a*r`xUvD_rxZ(edT&Bq1#75Q`|ZTIpcehZaxEcIWPw_3gs(V&HQ`3;+$ z*qnA2%LBNL;;skyo^HmPApqODE8NM0!0Hp>qsTZqLuyCdaChnGQIVq#ig)f03Jj|L z8Qwj8gPz?t=8U~wfBb{mNORt+Y5H|n6X$G;MIQbcEIA|Hq9bX0;4I%2FWHYDM#=@1 zGUDU~GH0YlU&Y)_xoDpK%~jQMfA)ET#0ErJ6J^MsPLXWHFprF6A!U$+p=3Tu)CZ1=R2#i7%?7)_RqGB>}+wrOR`uS0OG zhF#!T62L8nkEoX=qa=J-Pj_Y2D`Ddac_onRy%HOc-ap7lNh2|Z#EQ|D1q@aozG4|f zoGb?nlM($m141vxfd2(Q9c{vE0nqThAQu2LpO)If%;|qOgVjq@}?QV66sl7~D6OBzNUk+?!_US4K_(+>0{O5+HC}Mn(c+4VH%rDI+BT z=$U1Z5`eT>7Kz=)rUdNbfL#|2IK{!Q3edJR;2Q^=yhsT^nv6diIF81j0k8@K)^Lyt zTXp;uaM#3s%gIXsdRu%x>=9{M32-0cO1n~fTzRo|#+?W)Edgk3|89e}K}!Id<26a} z^~D~RMoIwgV%!nX@c4XCC*d}6zoP+%H{gK=wFP|E*j`xsE3WLgl=$@6Li}yZ|DU#? zzJn~WfBs>c5IVfNu{O<0zpNZvO|-g!`vu!_Yq{8gFXXQyc?}smUjJEg<&grSTF@Fk zB)7FHV+F>(zoJl5fQ=oZp_T>G%h1uaWb8<+h%~qoAY;dGuOVZH1{^#YyWIZ)89Nx$ zumxQ^2tbtUf2#>bLBPNch}UtH&|sW|l&n_wfPfgbyr8aN^n-qbmKAY(fOs7VSuxNa z=qQMM9k&CSz@Xf!N8 znm9IyZMl~24-aq(BItJ`fRP9mAA=EiWA8DuA;lKe*xqtIxINZSQr1-iA34tdUsU67 zv8iJNCZXOKwL(F!RHP9h{ux)41NbU1%eL^<9reGPv&SN&j$;-aEhXoj6 z=P`iA7`*~zfXILOqxDup{K~N8ziI!8+b1L>E(FA-=2$5RIFr?R8!m!qP5S8G5L4hs zf@5;n1Pu6FG?;GNBw7_ZB*JX`NvS~GH4y+kkWf#;xq**Lr3#j^LI|)xyASBtZvqm= z4R8N`BY+`y-3=_;gO-LU$w{sFNznKpLH>{}*Cdmm*u3Gjh%iSKhwuoO0r!VwR56mn>WoFkqcA|ofcNE(u(hguGTU9T#OGFW+t^9zzh zw`hUw0WCJH{(HBrf=8{bD8JJ@0gL~fy^fC}*s8^dZy86^8SbajQbbWbd+YVA{%J_r zRJojDa{^|CPP)HzHJ<)Ar* zb$9W7*DUMDOMF_%XOkljJPS79c$DYb80&1cd2{_027;7Eot(YwJRs>yFFQ>;phshe zmyHC*>NfRYnO%S9j`+DNWSOnWj+?FGrmX*A28c5Vv1JESKp6?Fs1D8?hQ4KGC9p~~e~)ao zB`q%jv`fH*44+#X4NVGhDZ%6mYx;p{(dyR9IUxI67Kqq@>C{@Yd!5+F8nb&v7wE6q zy&{bB*X#z1BJ0g=ASVKpRq!gT{}a1gZpH4F|G%)i@v=SZ>~3s*R&E<$cLOVVjoK0D z`89G!U}0g6-VqQ#S|fM_Zih9BN8mnKBY6Zge*bD7fyWqHqQKeV(3}Mhn4?sIQcN&n~vLsUzCUZC5 zOQ!Y7m*~zY&67~M_A-snKa`l=MdZ)3&s0-UV6uE}_Qs&<*f{8gjya!kXRjt@V2^z3 zm$~b8dvmn`>U=e=AGIvc2pEGxzQ+Aw3u$#@v67G4qw%8ojxBs#tZ7dN2Jw_!`BJFR zZYj}@D>>?fXT4_FvS^zQab8Kd`SOs#t>%|vW4cGXhmZFw=kN@lEV>}z-pWx_6GvFD ztN%^kxKDWJ!f8)CP7IYzVW*yIM0UR}D|F-q?AF{cO_;IQ@Sd2AthVz1AIgnVBg zvECfVww`^_P1mBOdLl)Rd_@#$Uw?EUvSLnK`>L}lG0$D1I-%!+ES3W-=d39&4>X*$ zU9{8NbzNEN>2q?{0ZeJ2ZIFYXgPwVuH0otV!Mzxw$JDHSuO0XMB~R?5hLeVbQGKUX0xdE zMi3ht+p-)I3CN17stf_Zi3kwesIaAB05jDv<|QUUZ8>32;yi)Cq?+au8F4ixY6L@s ztX?G0L2|b+4brYKK#QZwz_G%cKfZW-a~vja#8??_wtk7DHdGi5@L)Kr z4{;Z7l*^FJR9hterQIk3j2mQzDgV(X&sl~M(Jf*QBw9xr#u90lVTerTFdV9YO#mL; zU5x=8;YA;KCNZ$0A2c(F31uRT3c?$%z7%4p0&rtQMR1XBBIoXq9L*&R=J^6hJ}-iw zVeb3*W(xxyJ1B0W!jO#iN(dkjeURw zZ)I$VNYE?OWs?mIgWI8n0HG?2n1u6JLekuchr!fCF53p*1K}o@Gqx!7+LfiPZ#gOC zI*`rR4i(B8Lu%5gXbs+GMRiZY6JL0as_i;RqDa15Av$^YZV^fsW#PT9*{ts4MrXt0 zx%Sx()S$hCKhk$ z>jOT|)w$yRN3VbDY7umZH_94zEFo0=2x}1;Cv}5)Ow-r;RWU=vr|wsW7;J0y zmr%ZYt8j3EH0H4-tKo>4X+OcC8Hqhl(i%;6PA3;3{ZRDvLu^#7S*|npSW}P3oQMu1 z7oLaBe_!O^qG`70Z%4_lpFOU58tsY`ts4$C*qx*t4O<(3WMZ;O{LuzapT;?&KPtf2 zhvAsS$ORVyP8?WKJ@z4-gUEN4!&kOyGCL%PYBCJ1CF zstm7#>F3ZQ7_tJG@G(ap%x`jRQCH~o{_hXshUr6oB6xcnQb+RBs;6@2JPdxuVxDi3 zb9jmdgmeP89&OC4pN>lVKt!hoN~oeo%OZeIdH%ZP zeJlC%bn(udD`LRid z&4B+q0H}I+eV;WbXNV0wLTqivdsxUWCi?ZKT=99BvU)(c_#IPD%q7k6x`Sn=%5Qt^ zK4pFN?#t9;_`FYyOK0%%uFG#yROAyLpP#*Zr*k56FUh-yqwMcQ=XzP%?wYv{y^TM9 zO~6huRcmKs(uFd^&pVhe7Ml!&Je{EDJSaBxIg&s`=D@)&Rd2yCb^SBiN^Yb#%3>e6 z>MV)dd1qP82L%STVJ0U#U7QDx~Z zXBqPyyuEd1F@Rn1*`mrA=FcbwwLC<`2Wi__hGO6!Fl3V|!Nebk5Y<(|dYsvE(-@U@ zYiDBoW8;z-!n#FOw`a#ZYAuy?Ye6}Mnt4K`V&5cR@x@dvJ`#q5Owp7g zl`ysa{qDDLVmC2m%;nOq(nCYbKF3asiXHcC{dDD&|Cz<~&zZ93j9>j99y}gj?kb`* zW556NYukOTTtR^WPmTJ9PIwl04c}<_;&75SR-PneB7ykOr6&5QY~$T*#9BuYO_esJ z#f*oqW9at6Rd0nJCX2chbMg}#-67$(^X%N=Xt+nhgSQX6=u+9A-oH$e`*C+MNf*U4 zZ3l{J__HGK%63$XPh!4)F@L1>$>&mv1Jbjq&v#}9ZLyS$osIna_=1vK*HCEGYqSg$ z%ZXictT05P@d^{NBvAO&m9+{J`Vc;+=0D@3*yb|cdSa}eCNWxI?UN2W?UZHj;zzOuf0Z5R6UrATK@dbBL}D~mRVDYD zzm%CMm8Z+Ar3)>r&V9C+z{g>yke|}kZpeG|B=xtBqoRT=S$6kon{tjP-7mahoa=+$ z&23=b-4mck>a8!P@p;EF{b3?a>K5Lyp*l{4l>(VzkZz|yjF+RTLw6$Ps4Myn`Zc&N5Q(v}v?Og>B)VxsYCMBsdmFMF#7D{WVPGadc`Q>FG2m58 zH;5s7D>@fs88c0mMo3^RlC8l3l*^7&=7spx8CK2jCZCm2j=@I?(#DY3Y~BdlR8x^! zkHn4ZfIMSN!B*@vpk^YMX!*Gs;BQKu;ylg-8w`+H4v zn*4wKTv#G)oExdPO`L4;wC_|(QRJWOjGH=ju*2XG&!_MKP5L=>lDuBtlyoi|YMd?) zKAwADS&Vk4_3Q!%^Fh(s4wYQnc7#SCkDu1L==euQHT#dcKidBpU|D{%(A@WH3vBYTAf`eAxwGR;w5(Q}XL=LMleXg4h{jv9j zL>wt^2O_=4@JXAbsrU>3LyM)iZswkO@$Gr&I|l9%*81wE&6${RD;EDgut=?sm5=LG zGKf$GAti$5Kx%5Q zP;NRJ?^a-61*MRuMdFi6U8@qa)Ce9x$ zF1%54Xl@Vl2nG>@De$HEMCn528?KUb6Z2?`8+&^OvDA7wt8;Bn4FJaz+0@NFnvVn% zhW!cL_>%6@7crfu)&Y)eAeyXZDiChxZf@5?aAk7AF6=y~~h0RWz#p z>ZB7#NA0QB@BN3ZA3to7lT;j><>b!4CEtHCO(RG+i|2$Zr|hpc#-4AROvHQ8zsz%( zg*rc$u@NDY>Me~b+mVdS7XuEm?EI-uvC}Q4EA~W5X(e&(3t}#*Ssq#nff&6gS0WU1 zZOT3y>40zTA87|N*y2Y6<)xP56i2e{OwL}J-tn2`QK#shdU?w`jIA*S3V!}!9a2q> zJi}M7@ywHbbk4cFMT>3ItX?0&@Zus)W=1ZLuAq@#inU!|db&eo9)<;pL#W9B7 zVZ#>8>B(j*T@57R2zs+<+sPE_A`%7}uJgvo(=SFps|l?6&B2)&Hs11pErgvY4ZLsJ!9__u8sdHHTaOzAA92N#=cWXN-N2^Q6E| z=O2Tu`VKA(KPbyJ3ikDmIUa7RL^m_uW+2q2Zy6?VqV0CuqPezdX0MMAy9Lcc0Pm5o zGku!S-UgsBc2TPgg^zV9>F!iFDy2)x{d&>3fSlcdQEM_{ggMAZ8FS|ft*}WI`p?xx;oYB32q_6x z+*Q(``2Mb{jM}vL5(8ZQyn~gHx0r8}d+x+-*B^dE2!thy$!7(bv-{`bgVzs4q5Jm9SOi)h3n@^G-cO??{xZ1N9q z9$58Wa|#?pZzE3cKY2c|OY+#k-5kimOJEnjS3DE{yZ`di5J2sp=a2_LG-yR+yMMr= z0{kPmvPlE*698ah%PE7B0E_nkPljE-#~nk1W6%f+fkB}y1>l1LGWEFhvH)AOT1ROa z$Xf%zePDeIcxq(uS6J(T0hq(T6ZSP87yy^Ux&;1uV6a>pz-92)0|TIle?2fL0DOW< z0T6fpL_W!2(L$iepmg}{HOMD`aa{4hDEwb|U_hOrvafS1VC%E;e#d!WuwpP+9|(kl z!b+at_JDr`;A!z55rBw7Nw0cRAdD11WUl-M92(NAo)iFeLSeN7aDElwfdO5LPYHQo z003}h54yq%N(w+u!QKi?3X8PDa)IN{0z5D>t7QRxAs}_VdKPeXfE&c06RaAdWLC=p zJV7WdZ!mNg2!e_NosUZiAxcp)D`f#i1pNN^pFo*V*xMP(1&RbD4)DK#Bw(J6-vJm! zuvoRS1I{hGQVLm6KrD0=I)N;d2iFwe z9-JD>{RHKKJW1F`3cCYN4ZxkaJdh^|ix%A2<=dS^tcM)|stqi~0uG;YWL0EQ_Mak) z`v0z62Z;Ywf=#&%kfG$HGZf2YKtTK@JX_5JtpD?rVl2U&a4{_8If3KdJq^D8iMti) zjL3wS6V-uK>V2EwE4zkZ713O_l0!VC^>A4X9N8TNW0)ZeM6RqN&pa^W*?f%Ori2e_ zJ;eT4EA|~o(#`|826{Qt9tOMkgb}Fmt?E~o8#3(@_|`Ee!p)nng>bnZ(J&Q*2||_a zsMCly^*m9=?Ox)0XIyi)yIoz`@~+4Hb|j55U&2TGdju|!oOtzysL@%$PD|=j+DHdy-q@G?%W*Kii_-&|SLnpl`hp4GjKut^gp}g;cSu3WMZPHRpTi5+J1#j4O-}zpC!1qQ1p) zDt6%6Mr9P%t*YbWWk`mFS*XGisdRwlCvdx3h;52Y50Z?7Xb?p5bS~yn9M^O${do8` z|IVYP0qEMR?3v|?N+4$Dmb}$~9oMu_fzoHw&gjRD{`Utv5I5YacNe(vDMT!!Bt&(k z)>Jz;B*puR9uRBV8%xdd&Ew8c#+~BMU&VLnvlDI{S^AD{R62O5>M^@?KYJ^+UdeS;RW8`|4STzH~Krtsu9T3b@-S55}-#%XocEqZr* zhA{Aet?S+L?iJP|4NnqAG;U2$;~%}7zIE@eK(XF(%)=X0f>oD^CTXZ0gO{p;5X4Q1 z#0xx&m>(E8exXl^S6XI^@^8;F1<=E-%1`yT{3aWHk?H^Li+l?-RMbJ?4@NA)moa}Z z3HW6QzM9>{TNHV%vG^YzDB1N8GQc8N34u_-S_~D54c>ifva!f%+bVK58YsEW2hC#$ z{-{u666AskfsBvJ%lQu>0YrbeBC`NLI}jFMbRAZK9V9t;Hh76ZgNwmCILCfi1n{|I z*ycg+yu|S6sEXpBxO8^Q%>&eMuk39+aT{nhS6&)~);6B2wYB-j4R&=KHyC^okje+m z2LUPd4=r%E`R^!5HlBb_8MzqD03WU+I7+_=XTty&oiGLiOItxNo-fyL-l7B7nt1=A z17$Y&6MN875PES1rzyJzr)l#)#c8Sm;G)J79K6MRs9VV9+23-22PtHiAL$sGkEKyP zTn4-*E$87xwLI!<1uO+Twk+g7v0IiK+;Qb_bUEAedD8Ixc z?iGkFL^6?03DbsD&XS)4LuCQt*sg9$dmM7j%g~GQbH~JJ0jpaB{cazTIEwC^tIe+S z&kr!e?es#mr4wVi(^9gZ)-e`0TGFBAa zv;3_&zXemnEi?ZNLlIjmtKwGR9&zFxnUTvDZLm#~M{51E3IO9}SW-7D^y9QD}^Jw z?yV=-s7OhOV$vQ_x#Y(2t|;R%L8}1K?g+5naRXww7P}8jmx9jIX7-|?96DF{d}%08 zc*k?i?rbJ8|F)yzoCFOIb!KC#D2qiOrZ>ycIC-#CTvyUq=$PaJVExfOaM(mP&*6!T z#bn{NvfsAiem)1;_@o{86ld+CXyB6~;O4eblejH@TvwGl=X&jcRmzig-Nge{$n%bx z3zhQ1*?#(`eiQ!gRoq-;8E4~fH-%1;MfGzHDoyFF;5A z)332s`XZ8;l=v)63-~tDs-u?(!WM~u(^v&YkJd|+7YLy-Lk1!(7Y(bX_(Q6}!yH6} z??$aq#l2f}BV?d&r%vm-5xp{$uGrtQD{>x?{msUqzDCYtQ~O(W4F@UVAA(38Y7D$V zgJPK|R)wv~TAGi|h+>R~x&{7LjTkbkd88n-8UxH~_+PX7KBvCt7M0qj0kQ#FBl`x6 zCBk)-tO;@jUxS@gu&rTXj@`6Q>(M4aFl`wSD$Vl%VJ+}%6%x?1fcmget7;MueISb@ zCa<0f8-Ym~)xL!ZPNuPEhbt*2COU-CFDkjcr%kkcPQah0l1wV`Eb{Amk*gIytg;f4a$8FxW;3fy`2%-x6^C*WXL8o*a*;3(aPCRUwTbTpGKh%o zAkG>7@9*OLiG!x`0@+gBmYV)t4Zep=j*hr6>V3dWT_2^vzzAO|%5KpN+p~hCkn2WP{T6KG zI?1pZ3pKU61VWy*z12QUB`y?@-l~aF(G%Zix-Mc$JPmt)WlyACyrmO;yIFGdi+~sY zE$G%qt_}S9GF*vHi9-eV>$%c{O%e!`kK7cWQ$L87A}FT+R9J)JntMr8JeYT2M^Err z`V*2!qO&*NpToQtaw8QEdD}^NC75i6f<9V!7kZfFSH?kP*#lUHVAsV&6Y-@7sBibH z{FtUDRQN|OaARhyD#1?-Hdw=in3$ynkKTozR zWv-?&!(ZZ!;D^t-2Hl@E@+3OsU+W9_yVKX6uWvkeZ%{XN|NL!wdKg;+^Vq8I&L*_w zUXS{`Yq5SNLhI;JrvA*Lu%CS@#&>ejly|Cr-FO;sUrpsf`s?nQjOMHTu-A^eCAVmn zZCYIGMfoD)aO=-OI%UXKZeBpPR2TP_?lknuJnjEbR?GDji^3K~ z+@`T4yBb}Uxp!d@mLP5I`)SuU)`#ZE*w~hXEG+{KYpVjQ z;zORRT?^qM|H$^1L-j4~uBO0j(h@>u;B;PArO=kW86UDl&>}%c`sg~rC~cy@Dj$Li zaVE6C8LuIBsl!Na^U7{lX=l9@5qhPvKx_)g7Bk{Q32ioj3OD7+U2hq(`LeM&v$357 zuvaj1shzq(T35jM`z3(G^3bgW@qA?!Z``8v+gsGxAk(n!ZsNxyBL5dM4N}1rD@1F> zNKW-Fin=|kM{50SD=rbWAMj^I3^5>)oVr)}e1DL6F*anHbCSMdl!(Z_6hTe^UKNgK zhL_8iL>DMTO`_d}_)ME>UP>hl{2DANHmMv76;l@VJLKVApCI_uFkgfHG0(@5D-|@o z=C@zl{*n@UXEFWm%OA$xuRlpH+nxzH;^BUvH9q7l%(6hziqja*Svwm{v|F{DMi0iI z$@jtoQOTcIJx|ONM)8nccKlx9f%Zr8b>lJJd!LP`B6Ck&GV`ZhynAG91Yxn5_2Z`2 zpUb~Jl^@$q$lFgS+o#)lrBAdw)jWDrUi4-(&D_!@{9$Hya>1C%Q5%H@((8@QvIRzY zM}5>U(+srBwYpetu3my$R{nPba)Uh5F^J|-m6~iSg(w2?U?*)WqwkT^Wh*p~yI>Mv`Z!tSbYB}RGZP$hITeBdRJ-!Xr_-1+BG)905?58P_yIdu4eziG0k)s9PE zTPy!pEOIP)=m z(wekN`55=e1Jud-TObIrtLxinll2PrKnvj{AyBX%4pL~SX8J}&oWUCHf5w^bFxe*( zND6^3&v^fZaAI*n?$H-xM&VDYE){iWDyo&7erD}spB9vrT;1SVb1lnwPGe5;$-d8F z0W2}P<{g(mM#jYShn~}RVQ3mH77aQVc&Cy19_q&EzQFwoem9D3vxiiJyE@3P*Dq5# zpI#BR{M^+ zf4WC8_chyD43YGHc={Lmba%4Wo2TRA!-Lu*Mh>XnVQ&3Q&Ch2jw#9R}J%bG;w|=Ef z=Jh=!4n1fB20T1^kP*Fpz)MSW--OC>{eTC>Y=(sp=qx(`Vx4LPCOBjokn51qHBJ%f zy$;d!M~V)?_!f8}KF4L4npBV~Ur?})w%!b!L?F^hM3(Pi_!6upf==!o|H4OjcLE(I zbaAi>MnQ%**b&30)3&Ji_H43$s5*C{kvL*^5bm&A@&A#kGYT6ujtLotr-3S0Ek=PF zYtTfO6484gLg5CbISiACP<9<11UV^F4WZ`2;AkEIo5$3WBUyJ^RR7|qJ9TCQ5T|1!zPVaj>S$ko2L~@A?dwwzBIHu415!0-frG)&agKA^~wgXXqqqV1Vv8zh1Bo2&PMh&yeR5@(NB>QE#4^WAC7)0BquCg&We}`A2f>mE``Bd?xIq$d&!*TFCqEx z(fha?tUI|9j_AiX{=PCs(<^v6e)86{M%goqkIwn?DL#L0f54|&tnJ&ybdua}8M+KJ zfvl7n4Wb@bc#~PQ)j}B%iyxi^a>Ab6d|I5lBlsSZQ6AAuily;{;TQh>HpN{Q4%$}I zug)xWOdeV6n#k_4Zof{AoW9rm8!k%si|DtysvM0{yPS2T$>uz!IA7?$kNvpC*k@b$cZFSm$HUMfRkdZ0A=S;ifIJJ@ybZKeg zsO7BJ@!+Vw`V+mRbu5-aJ|P_K1m9HodV=}eiGam?hBDjifx>8SSWE5evx2IO8dPVA zShRFHHoqsZPT%d+dfoE%u?qnEWJsswO2?2^PZRAbo4v3nG&6*)nkn=!i*vF z@Y_d)UM{s19^1yG1Kb&^1vt~TrHSa>kwOdJ zM^VeTb;!vWN{|xT~y01sG%*YzCBxVgFNOxR?tv5 zNpPwE&VxM(CMbaSgCdZw+JJrJ5Zv`Ec=97r%-u4gftsrMsE`o+lK#Rw{mL!s|6eV( z#jW_T&43TPktPH3VY3p+Qq+;VthhfNh20Y>_BPTRAI)=XuX+7m22+c9rPrV0S+Pgf z*l`6@n-B zCVGkHT~ucgp))Mhq+lwsBU8aKes^_TPuOXvo;!~jkMaJsDolVj=I0M*qR02e??$wD81&iM=3!Vxv`XPNCaSYTRj3e$N;!vO;|gY+D#4t*xgpr$b&QhxB=MQR*!&abb#If zylyK;{v$*T!h8YX2ViSkNe&#K&_MtI*(Ch^zlDf_d?1z@Vscx(435wZ$LaXJq?NSTij62s>PvBTx!BbQp-X2Z0N??~RDCl{72I0TK)ltO0^E(4v5z3@HI9 zK4s7npfv$a8y4LKrIZ3>Xy708C%XZH2H4NA;gBn*SUK_9|M&u7QvwhffREvF;kE&b z7Qhaz6!&idaa(|aO-_C#J+5N-D}u0pa5I8$dB9=_w$Ur8MAFs8PSVZU+f&l(jH{?5R3IpWI11zdTpR;0YRlBiarW1`qs#l4Hrw)>d8D%gWiwM$N?m zqy+WyvO9ek0g3@tY(q;(n&OKo4Z(V_V=ML%#GQW|#)CWhPU{ znRp&{Uj1HPXS8jJXjSk6Lpb9OAz~j?%V8~9SSA@CCkrFto+~xT#Hcw-)Wa&?v=;;s z41}tmJP5LS7zwM$n1XeP8-y%%1%g|xC_-#3MaXK7mi%^)Qn#!cBWh)tR!QYk)eKH2 z^vMxwg?00BL_S~$riru^r>z=4hL{+|Se-oQd4&G5e{iGu=>+@P%ALtCNA@k7MEM0= zq|<~QNTcCvKl_<}Doo};Vk`ah>mvgZdJ<7uQR)v7s*9@b#J4$74Rd4UW>%`?$zrfK zzI4`ibShA2}~#yDQM~?VQ5REnGB7G>vm}|Se$@L`G~;$g;F6xmKq&j8qCr~1A|ie9SH_}*J3Gk1&ReNZS-T8 zczE}RBM<@>S9zq16Xe6gNU1`t6C=3BBg`t!zkGgE*=(n`=){wPCmbJ`jwZVgza(q> z<|Hti^}=m`;2_U4^W&c@y_Aj|Ic4D&;6LiGp*Ay+7IykJ+I@t*SE=~}{fUH6+CA*Q zmr}oovVZu%!ceembYehB?sVMrL{epn{cl#4SD5=w6G^`$9EK=*)NCRmbLlHNB!rBe z7cD#=o)F3`?00gS%+2IFezs|+E=y6SpMmb{iwLD_d52Fe2e3R7>onVGEVk!4r~I$t zQ{OxE{ghG=g->rtmRx>GV^fgfj;`zrED-r>J&^fpznvdTd}eBoBKmHQ%bzDd^kVkk zYJ7MtD~iV2<97IeqY^K6lsx&<B^+26p%+>u!u}1TC<9D@o zu3h;DE}8SR?eQ%aIqjD##<8#RY>_nUpa4H|S0$y8QUwckC{(|G{Pm)Cp@2d)-{`dAAVf%*=n+;^o?`&s>$S-$ zPD}_=`{k?Ck3AOH>bu^_&pGB(DK$Q=y}Wcg+vT2gzzsonMy_1+IRnZ*50F1s-wC$?DDyy9tB*EYNF=7Eo&j*5L{y^tO{fAx`+ zYhTlW3M21(hi2ZMe@q{HbNSl9zT2d=Z57OUmeDfuKVQYnB}F$kT$$O)sr#~j553ck zj@cx+G2+HEzI3;^Y>8qhWw5WgeWyp)F=QQ$gpjY(vqF`t;trqlJJiQ(NEb*V&7iHm%FN$^&eH}XxT0w5aa6k72yBPCy$+F|A4^_ z7uJ@auU&t?E}f?unzfVrl@xqF>hql1$0Ln-G3f;8MQ(q~Nqw7^Oon3Xv5UmNSzh!V zpz)IVa)i5RE}D}?=!eN1zo1Y?TcXybIFmmvnp$Vb+GT-gq8(y@JzyOpAT)ql3bm z1}pQSN0@`2e_pfP(BoS4?#*)(ZOvC58Hjtm+u<_Rod+~QY2IvqGN7-JvwOuba6`U-xb`(+g@YBXdL#2M< z7V9YOxkCf3rBB^e7pq%!49p@5bx*5YnGu%U?Xg8P3f3UOTg(cOg#=7b6vRi2l9hn0 zW@uX$1wtME`MuVZTBkm@CXzuO4_jZ2WB?0nSPN*aX|*CkXFvY@7BXGX~5I>k`tmFeTEv!Zm?l*w7$ExPw_Q0G8s|thL1894!ZV7e|;+euK zZs7Jn)B)h&!k-g_ra%_o${x5LR;>V+5?l`}27ucGK?n+~Wr3m`0NQ^gA9Ovul?cep z!4A%T#ZG*su)Mv{Ie>jB1;RLRnLxw@a0;#LfXT=ztu4f}yvk||!X>0uNo~PISn4mQ zEtF@a2w?gvwaRG=rgwnD1b=E^HUnPTl^t*b5axj^0l25ZA|-wYnhs%^&Y*&V{(yMG zamhe60b%&c4wMJi3hO%@I?qan{|Ef0!aAy_`-#|PKW#>65rke!*zKMGuMb%N5+}a3 z3rGfvGu>izP0byrDZh|tn^87%hmm!xx)MFPN0!!KEtVkCqOATwf*6f?G{dV9O{ZOQ ziR^~xSO!D>XC!v@4~Dp2XWwmv$rN&a+7U*Q#wo6>C7S)+i@O}7c{N@y;dV>PQK3Um z-tacx=sdma^1eItWY1ImFnoGhrWu2}DpMctCmfrs5;`t^cyg@F;pH{v%A*tW&s_u- zTFM&>Xd_7r+{h4)`CE(@*t>f>t+5W@f9w@-3IgeXVUykDXBzoOl|xP!wU=cxPa?)g z5e5_E*&+|}hcEmznjvRLGkv&4xopuuCLD4V-4vx&E&9nroBb2Xcd6aRgG2e}CV48z zcDzX`5ipVRKiaks@Muz$T~a8+$as492QLlp7ttC-3MUJJ4XNu1|Llwd6udm7D@<1L zrmkDy<+0<{zgJRfJ@`B#@hK!__wpD@bH>Bf?I)G$(ffz4M0;^Ea3xw=%cBVRiO9!h zX?*jYW1pxCa0kcBWmr#^t6THM1eQ%cS9xEd@>#LCFz3Ug8x=RkQn*hB)K}2EY8|T# z|CZ&3&VHI-q2@0dSYFEvX;EDtu*for^V$D6y;za6g4kmpEIF9Sclo^`^2ZtJ#wmY` zuT&B?3L$R|=Gl)CW9U=(5->w%58XP2j-DpIRdPBXRg(5gy^Y@T7Om+QQ>r$pffiI7 zhm>ckVXLd+`~F)cQZXws!8aBFY9sV%gm#eI+sQ`59MDzGMjELklD}ab!diu zASrgl>_wz7>C4dXw&P@8Jp zt#^#FEu&%8L7W1LX|@G|W32Q40o+ zxJaWTPzwYmF_-@ssDupM~6M-#ebhJKK^O7Pfmw1KF8h!r`{| z8P}`N4>`q~#s48TNVI<@YcXSaCj2hx(|TzlrC-O|e-cUpJiFJ!3~RziHTt3URNfH; zB!L}p4Wp&5=tp;UzBK9CUtse=(Y&GP>bR+0Z>ddgYTOI$-Q5?Gcz?~IbOxWR)9@}_ zB@>J<{7KqBw#@HG5e|PDFJ9lxf`XnHFBVz}2AaKqV;8N3$BMX~%;WicCfVH)@3kM+dtR;}* z1hi-u_Bt92zv1hn3|;rOy5CuS%8$qup;RNcJLOryi^ggq`S3jpycEB`x`P3 z!!lgpG#kX&cN3P>f>B1o8ZmITWgbgFEq&fum5-e?5pbR*020D90X)<_e&jsu7Tvr} z6HRWNi3ZfXSE;H@NLDMjakxp_T+Mq8Q9nRY0CznYZ@@tM1#sIZVK^YdNsLV?V4Pfz zQd=e>!ocYWr4SYfC%8a0WpL9($Y>DLj7qdK;!>S7nYD7AgzY=tZy|2H-)xC@c)-R2 z0mW6Yz}pjekG;5)%grrnzD*aM!a5M;t@h`%ptes%@^xIMHy{POhD<;tYuQ#CBdvi#-bQo4O_CH6nJKW8BDkkMsH<9*P= z|6}bfz^dA!cHs@1?(RmqHk_K@H)ar;00^IXil)3qb2*W+O~l@r2YHB=>g`tErbYPuscpMsexI|7X~4O3pzdp zOLp?YW`bWZ!2t*Di`sWdkBRpj(BuEElyEEo(By*qB>BL~P`da& zNWzu`SS0)oz^?`>>cd)@KLjSIydyy6L5h{^tthe@F2)X`^50GfI!!+`XVMN&VN@h{2sYH=$`N*_dr&zczNV88oS(a|1AQ7gPN>(lkg1i)_Zx$}RPeF9N2iGLH8>=D@94Mz+6%E_q$!=V)3 zQENCry?W{gCi@lhN+%nW{?+C`(pdl92IzSPgS&%+%5AVmYAFGGAH)42(SW-)sZ{7| zXuC8k-9a8sVqThV%|UVEMpO*<<1DbF76fup=4l%teo&>*EuX3VcavmZjig5niNvc4 z9VH=GJ$zC=v-dyPRIquTmVB#WH|+gFBJX4-`ixS=&fWuiYRhTQSJ)sadbH7Ka2#t3K1c4gp859tCIh=UG#rsvf2s;V+5 zXDPCm0}0XDQb_HK@EqgcqNn>4Zb~l6LnHeJtvO?Q9OUn+%F`&FN^x4%Bx{U5ORc=X zV3+g00DZkbo$Pz}&xUsBX`H!PhN$!sq6@xVtE1km=#LUHS0f{jtZz%h+svN996Icz zRwxD${m3GxjXQ(XyVc)g$+3J!oKU6^eeGAH+>j~xr(83gPVyEcPeR<0x3Ps8B}BKs zZ68aW?7MVw9N;%rO}!p=Fi(QdNkNe9W-iB1Doz^i4^g!X>>D-jiqkDUZDz0FaZX1| zhcf|vkT6Ggd@8LbS!$CU0sITGw>7g*gTLl)t!%uma?)<35$SuiXu7ogDCRXS?X7R^ z47TZS@4Id28qgPV$jR!wtaUndL`W#B#9S~dx6<5>AIbdO_B$J@KO?pO;X6w z3=fg`HB7I)ev_|TMEF{2s9Or=yJ@Xxmfe4+uuAXZ@-)@&iOV((^_4m4+!4C zCDZYN@g4~4K0pI`d9>kT zTfdMdOCQp1l4vSb1U$(mzeWD_^}9pyQ@S)-cbgr!4bx;gQ$l)N)66b@|7U(@VLF$#USFafw5k(LvYHHE2=H!8-K08zZM75CI zCb=ZD^12*Cynd_ih8fh2q9**tFP0NC>X$oqWYh*L4Qvb?N7j8e9$J4$sGDn#oC@h! zoKW$-=jnZ=xZzOdUH`GaTJrW^6DWqx1NxDnnv3Zqc z`w1TOj&>hT;#HAF5Bbe)TKYvDgzZtKLaX(cw@G-hlwKHaXK(oZq?u}iv+=QH>`0`Gnb5byx0 z+MnSs&%Ze((*74pnqQ8oi(mm-8lp^|(JD zIXwI$JWv?O0?7>jcN+j;9S(w%6kd0Yv3j=g;T&4W|AIcq`H8Ure2JiF(ocR64AlJr8xfHw;X2fJ!&`PTm$b^QtNg+lR~bgY!v6{8zt|ErWW5> zzizFQ*y#Q=;pp3I<%R}F`|o>J+nJLp`f)S0VJ#o;>)KQD-0y%=Yc%l&aWk%A48bSE zF`9CNs*n?~6z@xp!XtyDB?UQ93K4CP6)pW`kthi0O_6DalU?AUNUR-Vm|r+b@sE5Q z`{p%bSC1Z93lZ^?#^%SGzkM7|s?Af4CMu+5ATK~P#a3zIXDxp>$?c^%jZSd%(DfQ& z_(qG<;mj{Vn9lC-E_x%B$M9Od@0kC7|1T?(#dj|4aqrCwfSVUc&Ek_GRIgyJdk6Lu zD6L61#T95`hq(1<3csWjsjQ59)9hP@@A8^QcOqK$LqQq={vp&M7P5A(TyJ=ppdY3J#u#!yQrmZB?aRzbJK z(KXzc?TNw5?H+Iy<#RTeVkZn-5k518N{lNoB~yfZjb)a}z#GKZ*2hq{VPVv5SDPje ze=WS2!GT|nVVoFMs@z^%+4N!gu5FrS!{|L_kqplKaYMyoq0EB$8T??#QBsLSyO*LM z6$ugJCgG<0a(I=#V?=-ZHyM z?dX+pwL|t9sQ!gEAk8NABD^8JLCGhmLMNQm%H55NNuT}b7V=5ET}9)_x|ZAtZ=K7~ zkZX*)U}mrJ!7$fzJICQ%vBGhR&o8EO?`o{foopd}p8pzWTd7i8R9xHUrqlcjlrC^PhFD-hO!`$ups#p5Nhkb z;uDm9gT}&|R}_~k9f_6(k#(^MUI2 zXn<$)x-qDaH4-y9ALoj(Y#=M5G9j}Lg4AbL#biHKI(_iK+=Yem9HzGeIfaaUFf`oYQJ!J^CV;T6s0ZLGn_ z-Wr^EH%tB8TAr&|B1s7jUkV%HGtHn>*Y~%%mGu=H<#-mHcB@T^ z$KM7*lFlo^Oy)51(_?X0s93t7Q(Q9td7g&P^{nOq=oD*-eDr5K@Y<#987qJMAfp@VkLjHb9` zV;sS~7kO(R-DD*U)mUUC9^aK;#fl=8vW9Dd=z~&f;2d5iGrtXOXPnbUh`q5ns-XY0 zN?WbC=aAbcBhsC3PJWvz_3-KOE~?4Hy`}1{(r0{1`URo2Ofq$a-VT*h!m**`PlK+8 z(hr~;FQ5x@dZJulkV`tW=Ve8c2hRAYk!Dd@;71nWrI!%w%<lh-+{)hf!GdM=90;A2;v^1^xic3{Zc>$M+kH0#u#<8;t|}P5}0I9)ANMV}L58Kj@c#Aaa0D zfg=EgM}Y3+FMNw2us2YB1QgBx{sce*0hJ?y|D5*+GKWU!A3P7BO=$-E19S>u8{mq8 z{2purT=P!?=YIop03;Ehk_+1a*YJNv;0)jc{<#ELAsv9$0SfTWs{Mb}?)_O8^`kiM zY~Hy>1LfyDqrwF+G63^3z< z)sOE4xPQsi1Fy~)aRC+0GkV~^p8>${oH2R=^78;~Fo5a-s?PvkW>^^+0HFaY9?!1& z$LGIV1R#Kbim|ii2>@^+pepglZh!m~Ac7Wx$#4S58h}+7*aG!sKYj(Eg9JH+1pX+K zgr1X1`;9o!)R)tfy9yvq)Rct&sEg$0{uj`K2Kq~J@;BrJknR32%n9_T6y>?wcTVQ) zzcD9fcO0zExU8IR0$Q|ATsB;{x$L+cZaUf6TXH$rTmpn5^b>>vfsLJWAQb2?+05S{ zlylbj6NSP7aF74Mp#Xrm{~tJ%AE)^5XCzbr!0-LSp$Gy9zaOt*^@G4fZ~+d*Q#9!| zxqN)b^YRgI_VIoUOj;=8fihkBO`(`{_YO$ZEhL%Un*<5L|tbdx3GD5aD~ z3Fh6|ia8Ws{w{p#+qnF2xprf%;o+M5hx>2r-&JKOvbR%;%F~YU%^5j>K{stYjj2s< zm_fo5@FLN2R}s(-m@}}*Ko0lrnal=b;|{%pGxb73p#&qq=OW}VPoL<*PX}QY<>*$+ zd4UoTv{6ZTNy}tM#3b>&k&x67?y!)+EAG9AkCUY{t@t1Xz9UJd_zm%e5sn~56CT8+ ziLwp93umP&f5DOhap=30#l6>lDLzuHF?Z245A1XZO*7lHyJY=9=<_r~It077X(oG5 zTi=zo-ao*JC>+ZByfrCx{5YBsH~i!jS5t9X+$9dpK)Z}4`RM6exTCp#yf!=^#m1}m zM}}qLk(4^{r6lovHPPL^AZz4M(nBPl@ddj zpS~E|I6R-zFBUj?q zf-;olzRQ@dYfYdaIKW}ybQ#3K`D0X>6%nONTUCSBO#?v`A!y^%tlnFiyu*{=dNn^Q zmzQwNzTekgjC}8IHbVg^?{gI)OV*!+I*@=EP7!g#Kt%%H?+Mm#B=OgM_^xm&kqG6> zhj3cku7NWqP{wxeAmoJkBOc$!S&+#Ov^?A!>>Bva)PXz31}}va9`JQf8xk6y{hk_v z9@KB=PUQIXjivSu{p4CMs}AN%aV*lvUCpOAvf(}w$>qw5qPDlNI1}yV7*LqYZo@&# z4gxuNKgB3kG+iIfw5h6F;-)s4dSz6enT;9`GST&Go%c=`d5t$y z7LEG`S{kP9RhqBUQqmv$2$Z2Mu;9F34`WJ{`d&O2OnkdyDQPn4!!o|v-PGDX1R3T*Cp|dW--*8tKXF1 zviL&Ps9aZV1B0cpMRblO<^?ybB(8U@G`Xj4inAnGY&4MSOK|ieY84lyZkDIj)a8~f z?+CH2h#F?e2FVuQuW{SWOCTlyi}x%N?AWau7I4P(u`zdBy*spbt?0`;e$MY<)zO7D zAQ8Km%FlsS%^S~bBgjm$_~p*Lwp?0Ho__v~oR$ca7CxT4(9LZcTcL6)S9yKRTQTqN z)$CdEM`2gaI@1Q#%?RmF4`uVAvOc$U|K!Iek2i4OT%DXa_?mbDoj~mwF*cMl)o3n0`Ukk(y$=X2IctHC7U=ZWEvR8dVliGKR zTN4@41X))?@@Hy=&ZiTYp}K|Lpk6$42E)E+ON3PlWmRB>9J{ z5WQ9Z`rWIPEqtF?KT97g9D!?CU+Yhkt=t#H6n|KtGx$6M@o99!(^-ah2jR-rk%BjR zF-RYLsa>nsj~jK#O<%}U=JBf`eCzgUOLDbZ^_#=P>}AY{dREB~u?`4oLYbZITn#d4 zj+4~hnGl;Vtns%FdibJaM8!28czG==ATDQhf@YnAxmoJv`ShSF7^EKYRlK@bZycc$S8@c`dJzutn;n9Y2{8!=& zz)P(yCe@UXxP#{cYPOjopZaIEc*Jyb-=r3@3e+-EcuM!WUJDysUdW@3PCr~JT&+Po zVGuw-vJ*v5os?TNUgn|9jJP7A7GBz6pg_evo+s}?utD65SfW1XE_kYP>s$AWYYqJ- zJPrZ9-3co01ImmstIYhAcB;Ed#Pc4}JWpB;}jDJkBg`)%o)ey%n&dV&7kd zMn`lf6SZ&AEA-Uy727?}igJi5RXuq%>t#yG$Rn=*P7^;Nl@&vXa>x49b);P8o_?3p zNjB+G<95By&$IVaZlPx1z2+g6q<}q$#RFG%JQgXZNnXFvNgxJ$&-YFmR@1=F)&5j?pLN+-YNpTdX z3G+?9F2;Qr_|V+_`t|eoBSp6qau)_CA2?))do(mXDL(RD#aPVnx(yPjZFZs2aCWF1s= z$J&jqK4ET;N?H^eS@jz{e(IfExWaZz`XqJg+GtD&!gFwaDyysFlf{=WIc|=X>%nP! zSfpDhZdG-6YoCs)&eLQ!vs&0k7~L_ae!(~&^e}&;5j7#O#+1JPYe$Spe>3GiowH8w zj%$D95Xc}%Vne6tus0{|&6jU$N`YO)dRkb`AY&h_}P)`R}6bhW2JeWDX*}+wl=wD zhG!+vHmeoykHoQ&uW=|)r|iTTvTjGk42ogF8H!O;KflueiR^#6R4InWy-P4*wADZN zS?Jk=bY`ETUJ65#D~El7B3AX@WjY)gM75_-s_0&qx}ajYhQaOZ~55o^xBNj z(2*Q|nMXJEjZbt-H#qK=ykY2lLqo=HA;@}7E34h0Kd^|KrIWo=7}3@u*dU#kF#5f+ zw?z!r#`0PNV=z7T%cUO#>> zC@_cq(3v#_VZ0?mKwNwF z9f0`*egOope{9cNkrxWHFCQRg1XDDET?sGn8aM_I>>j}G3eYEn1kbjxEB|rtVdz2N zzCzDF0kDNY&j5OW0F4j?b{F`ekUv9XfSlr=)rfx(gwQj+C;+?lD+>XTTfnkEz$gEZ zGXTO_e^MU6$PfVf6Tou+Qw)jcOp6G}5C9OupRfOf5CSA5KOuxX|1ThfKN%Lzhu(kI zJOJq$06Par1pR=d!61ZCC@jARL#qMz0C@MawZJ<73J3iK#sgA8z`I{qI2c(A^h~ny z$9_OggXb3-4#)}t?|#AIfbMP#)L?{dfnQ9iSum^$s}unRwTa?|}22 z=~exB2Rq;IYXN|B(0>G-00<%UA3-M|vjY7`&G-fY=`JHvP{e!c-N@VAl^uru_xkQ1;o z^tX-^j6mhLj1vsh_*=yZ_&xNuh!gMvU=aOzXdo#B{jK2yB&VRiHJpHS5cIc(6Aa<_ zTf+&^Rf7K3Z~`c{puaVo09_>jPWAK9Fzh36#2-z7<*EMBaDpA}*A>9vj{j&l!4Cb) z1~Ba7Zw)5^y9fQP;RIwMp}#ep0PHCgIM?e>F`SlHOo-@jn^ZX@0 zdhaFDE9dnQO@QLgR!xGAEgepeIgD=fw@a`6r}G3t&=>-Y9+3vSIpHw5x@ZzmNcSZw z!K&uCTk{W1CS)BBFlR^yX0DqIFr?%gUr8`B?EA+5`|}N^SsMW&ndso(}s!8+qLnV-9Eq>PM>e< zj=OtWx30n4-F-(;y^B4IG4V`dp`$37jJn6r)kZ;{D3rez|YB(Eq( zY@#d%rC^Ye`Xni8)hCuoXsdPb}MOX@vFv8@0H~S&|SDfi$UJ%!hf^t4IzDhI_HT}0l z=ecL{bavg>#i(_>=pQPv9vr*6c;w$yx9b(B-(wc4If{^&mblTy@sL`Op?cn==dsvF zHY6fYE!yES2EOnWJ=7>XXRWTXWc4B>IgR&%CNB$!hcVvD;pvJEy(E>zk5&wh5#|hx z%)jFT_tD*7jWx&W)NJUKuTzyE)pjcispQF4KE1k=xkwW)sKj|IbGe#m zAnE<*dZ)>Ngfdu)0O^bUxcMyM0A^pEzdGX@5x-$L?$j9~LRDExu9+?vmy5rqo5HLY zE@&+iQzWpzbbos0(~(Pu&hvw|?evdc9c(IGx}$i?#+0o0H7c#UryTVXYZB5_z5DG; zH*Z6uGSRCnQ+(__4<$b*JQCB~^%Ddo`kCf+_wh{jF;)z=$@8~~=j>xqMo!DYQ8WAI zRZKCN=aOqlA%&oPRH)=a61EnAI)0Rl8+_}(hxwM1cSuAc>_oIIQ@7t1b^Bo1SXjP6Xfw*#qkKL@eg)~Q`0VH4iCCo z7L=11gc2x>#)^hTN61BF{|2Zqb$|?m_xHDE?=hC#$|#%T7hq?)tBz^UPTA#lZ^XgY zFY#L}lF+KqBa!;yf}@Cc6 z^eV)3{BFw(9bX@hS_U2wk@>8?EH3Bl>smZk*4Qt%6sx>Ux2fehpFF-<8U9X7GAzee zSMi44*r;t+78z?QMv1{_ci3RUAk`{yoNtsnF6h{bep>WvuYY&NN|3SrXTe~x_|aj! zIZfRtt!nxAk$V0+94;E2m=8v{k~B04|30S9oWuV%6hMLcXJ6syg+W~jLgomym zYgAK=YB%T{5V|X0N5VokuvIHLtv7N16hUg}uCpS2`!N-3iC|DoFrN>|RYbJpYgo$xr56+0-=9cSg5)5Pk$Q@*H-fC-Vm60&U8~Tel za5ysgp*E`GzD-pkcnaPVpH|y*!#2-$>=D5&MD66Bk^icw#5fndaQvvIrch344v~p8 zgb7c_AbWdfq?a-zs)9b2*?9YATLl|y>bih$6xxuwpXUr_;QOf}ji}Y0Rrf(!iONr4 ztnt@cltz|%B}QA10-YXLxr?m`uXNlts}?q{9(ozBRjm5?)Rs2BSt37U?;%pAIP2ob z$~BHrGOv+4e3?e-S0N`4ohF)#nx(so*onO$Xw$7SfE0pFlw?D*gi_h(MoxUlR1WQ38VMZi0Jl$?XdzV= zG^nT^kO(TZ`?+t3hgO>7jB(3-T7?|cZ-!22D$#qr)fJ29{`%N4s>8`3q4;_K9$6vZ z6L%=lXo7|Ax5(YPR<0+jYtg(Q;3jI$+AG?!*gi$26u`#p=#OdlWuP`&nlr(djIKC(b%N;@DN|&4iZV>{aps~EtAs4j% zat<%x{row-=mGHo_>47w9Ds~;3_@@b$KX%IA1aBF!V8^w~0-+^`A|9}qsu>VQN_b{wapA`_l9p>lSCPdaov_PNa zrAjeW7+E0PwM`y+^VC&Ew)E4AegQ+y{a6db35P4Aq3H-|z3k8Yq~N#d;Ahl8+RuYY zY4nB7!=~|s`%;X$4yav>-Y^`)zw)?#K|$9!P3Vh9)4wKTzCLbXGA2Qsy+IM|S4NC; z%$1`QZ5<~4=qlvbgIkZF*4n$0B443vj5cT(hiYbu1U7pY^$h(VljT#^f}heG!% zarJTP4kk~?9gPI~YjtGl6GJ;&wRF8zDtKK^!YK0!x*?S?$+CB3yYy&pGy_(o~WGBrm`q9you0k$8RgiDMM zfpc|#e7!Jdg#>A~T9(;I#on|L-8!RyAneVfAI^$k@#CP}A*o7*9iXPE1FM~ka4vnC zx}-z+W4I0#%e&a6`ds|>2z2^)-KFD{#YKwGh13-XOjOH_zI^l%i(^mGxq3xqnmM*g zHyOhW*R3nG2y8IJqfVpBoPFaKO`jFrq5Rj5HI74~`&honul+^hG~((`XZmyb%iaMs zkcLCST;W8#Pp#$b$EpSXPO0!CWpbHjpYvroV7FQl2XP2i$hD4H4oDSUkyXq8S;&PF zXk^4Z5wS7slq4qIo+Tob z(8Ig?B@`rfD3?LaOQI)v`EB5fLGjWp`a}--j$smv;XYSF zqDu&#>k?vs`Xcb82$|zirJa%%pz#vONfZ<>KwJxr$Y(M*#>BV$ zU~oD+SE#kQ3-9LBpmIYS{lLgo8a3%W$MBq8*;(y08PuTMlyLYL4u0yw1~z`O*T1K9 zzutng$>f`xkci%sTA!IZ%Mg!XYNYPJjqGvJ~Gm+bd&2h96JbaEWT!c#k?<8 z$i>RW!o%6)xwEU3nX-vWm$-&7nO`Yefk6G&}51j|D7kwz-2H8@^(-a^f zadR8cW~=chzHElOS1od*{o+l_w+YzhUH+=Qo0Fc!9rumNNbCP68z6{v1Jk z15!Z34ZuH~ZV_SM8aB?k;tY3B>3T6o5|S-q1&+&T2uffrL2l(NU0zLqevg(@P{U0k zLqQwNR^-;cCW(zD;RlX=&JD^->nZCLjZ9zVIFoJqDn6cm`kcrwG)`HUv|iuWy@dVx zRNN=-gXpxAv|H~WYA08cJt@_Ym?{okT5x!QIRg=G`9r>U?M2cbRgy}@lwGXqKMk=+ zXg}EPS#!%nF0tWsu|Rr*NN1~?$=5@Dn?i#xcZMt+=~Wj^e9?ejB<;}SxE$$fgETTW zA#|^%u2YxP5&UDgoeGVX3;NULd{clN?@v?7#c%@|6#`j>R|fn2*Cj1a5!Xk{Bb8|H z#1WRE1)0=9iW8EM7}|2^;>0py%N547^^&M{)8_bgOgrk5Z#XwIa8Z6&*v+1yxEIH@ zFVT?Izn1(dWj+0#lp7b{_-@mUht=-o-yAz*@3azkwxhqqlnJ3=ygF9Ebd*Oml2-ne zvch`aJPv`7NDAzMP`-7r3WFa7__2FD&fG z@hH}4kVy=fUyU_g{Q$;To4(o)fI?-t} z9S>$2|1jH_#K3OV#adrzE`n!*CBvUsP=DK%VIn!&tfbN{X1_S)Wi;+lz020!0y}3{ z`i=MIPlaph^Lkuu>kE9_*U&b!d_PD2U zy+b(6wmGJj7|F^%@%j1?-o-b2phy7oe#n|ckX+!jDuO7;29h%&$PLIauMssNNF(2; z?rNp=hL?eF1&4w$kV&v1{1AaMo-*z)++7d@2!Ve{jj>n_d<{rElSb=;MqDl%3s6b^ z*(Z4T0ooKD07}OTXx{>ac2&9%zMnD|P-Iv(HnZuEY-}G){PsVyv8Wgrfch;-8o;Gf z2CnguWCyqLOB%zqQOD&;y$T2jpk`*rZgbMS$)}kwk<(*l6!)^ZvIX)MC5_unk>r*o zX2LLJ!H?z{Ejckwx(!@AzvhizNf}VE)T3q$7dCnv=Nd03L?<{<>#WGf3rulIRN?uI z*}Z{!EI27(c*L`Drnl7lL%5nYrXAfwmZ&_2=*N6SZ`)nXRS0E8p;S^GPT%LyWH z@a#Oi-}W^jiMRbNpAbU^63bmoD(-<-PgvGeZdY`+=@sG>e3pUnEV)9x=-;I?e=MH;_k)ESdXA>!cbC=yQuBI{ zO3kvLqQSf{A!HKLKLmC$FkyXR{$H8-A413l2Amqih)YN($lDHG*-ddxU;O7lt#BRS zXv{v$b&NY0J{V98A`C=Rv!94dayA-_zu(HUb-({^$9cpE4@}P)Miv8%y{ix?tRX+N zC3%ry+LF>&ey=ZJ^aHIRPz5&k2$dt1b!xsofX^a4PqcS(YVZH}@D$@GyrqPg^6$Dr zKb9pgajoZ41HVjOhF~s(j`)*S4V`8X)CCv8xa=h4>9iWg2BQP?N4Z!<3o-rhRPxJU z;7`1*g9}mO1?Ie*Q^x%-*=2xR30Sd#sV-OQLb&yRPZ8XRk$^ojrSpFqR262+|IsbZ z>n>x^(7-WrH08miv4aw^n*iyyW)xa-$tyg;2rA`4O5%`iFyl=~bTCPZ8KLw`sRE;tpOo-b0zK>vsX(3=PymLxGlvgxzpJXH? z!HsmQ>s9ZZYDL!96nq&kmfLR*BJJOQkNA2=Y&p%Pqb?0teIW&#p}w~DNS4zq&{P~w zOb;iZrD};Jd$hNpudZoEmK5v6_$kI}j2kiIIg{w5UQ=miV~*`h+E_0U&SvF=cZ*V^7Lv)3h_uwokHS{m&0GITl&UXO00a~oHKy^l!mvn^QMZL*xQunQ- zwsH#^o+e5l{1tfkSORrR`+>cU$jQ&POL5;wX^b*CA}UmwSrqTuizfxM;KfI$>$~-U7?=!Le4-k z4Tu^MwrBft{pyNXNtd_5i)AaZqZ=!j4>}x2Ox~XiwG9O}@Dd1LuzGT~?*HE%0H_c6 z^RcKm*r<%a4Y0u2E8(Uwayd*5ps$=b%Vk~@)Nnwbd-gLqJSKg!t!2Qf=kX%0ww+^{ z`a5Nm#-_gDgEthL?~S)qrrOaxkv+>va~6=FA5{rC%d&gGmW z0NC=UAz`#^u&Lwf*#iaeH28i_#Yhpr%#r@b%n=;}Tk8Gy1La>c2L=Y)HWD$#W0e+>E#cLF}bJi^@e+b3T?eP|DG3^lHTcTP`HF#r;{ z-J_;WA6~8|M|kj02E(v%)oT}6>2h8ePy_R)mDKL5!I0P?H&*0i?j9l~*7`5G8aq2_ihN&L%01556-Q3M726)>Cn7F1PH@ZvZ%Um8%+rN2JSRrin5D`XQ|*ERedp>>lP7 zTExCt(P!0ESXByWBNn(XCcxwzVJCC9K$}^zVfZc81bYGdmhy+AU_0~Jn^=8E8KPxr zW7Z4gq#59{AR((!8P87}4!1LTzr;0m$^&_BnxkJPY=ngr|~lgsYvLcHA9^ zBvG#-vjm(tB(nW==r6F}C0#e}b6Jx=9-{R4h!*reP_Q!p=J+7V_-}DX5;T%iNb4+i zC^80uKZcB0s~_`Gr)l%ACykT})yoU6{F2MrkaJhA*2nz>m|2l#FYal5|Ov^s1OMeHQekQu1+`UuaKu%VAHPkZ6KksqWZ-34Gc(Zd@*%XB{Wp| zjxU@Mm-(i?-O7cqd%^g`buYY^te>w2tzXDbLFdNMTJIz{*+uw z)kBa+I?-5CJU6fTdijUEzoCl#X)@^3tF9nB(&uBKX9o`WhKi0pa|pBa!wQQekE{E9 za;)9suS3Y=QovKtg;Uc90jH~e&0B6;juWc!O1M33*KPTgx0WK@V+X1w7zE|V{pSy& zFbT>#uBr!3^iWyeFv((3yiO99rquc9%d-x)Be>2CeXk1)dP$;(^O36F&fG0N*gFnFsrHr;7hLMD#PSF`q|+~v2H0d2z@wyB z7b5w~k@^rai)wX$@ybsl?vm~e7pRT(pQ~>!d`yLRv_lI0G)Mc*tIxkW`;Kr699O-? zn6^}#EJs63(b}!yg|8YLW7_*Fd!M@v2O697qfpcnU#62ucP}F^%AWA&e4&_S?W8;b zJ;8TcyTDMFb94bkgFokCy@6)5K-g%E7ejI0LJZtR)u!#0p-GdX3KVt?S0CjrVqVD; z&$vHN@9~vpqA%kkXWuDz1xEC;YF3TQVp310(qOU`@us4%sN-noYNT28ZnjtDd)9>* zAMxwNm93w(wW+(oB^2DTSJF7@;h(_?NybSHnYpH6d_|!r%J++52sL&vb=hWj<+ zQS0Z$MMGK6u>}n|%Y~_!8Kbblc)RvR(u{dMBWTEblxLbj^;2QeaL|C@wcS;69;t1t z917+^HY81a$*NR}ubgFzVjPm4Q8!vsA&75D6e&jf9J&Sa(5Y_aIfZ7@A5**F0z4v_ z)PA!q?XT!SJfD{tA04X^XQpkTe+V0=8|Uon;K}0@)qdxHg(>EB37K>8UQo`xG?w@v zxIx?3E!gN>76TU;^Kzavz!~&s4=Vvs2S5))oTVkWGU9-+ga9A$)Q$1vigudyO*0sq z>*Ep!-q?9uW|r`UKGs_=s%WSyGRI$Ah1Orm503T;5>HRUV#ywkwp4d{8+DAzMA|_P zrH>|digc`k(HXRPlxHOL@l5pai1gh;fUD>Z;#Z_4J*5i8!=^Oz_>O*5|&-eZEiM#rIJ%cn>}KcEwqt+V`OG z@b2fVr;0l~`WE_GRF+}vVl9Ihbe4HQ0{D2zXA!{Qpkp|kVGt9EsjOI5Q4s#=Y#TL6b2yD}6W}s#!O54= zha&?Tt5OvHxZ5bXaPo1>qGgYPec_n=Q+{Qc?mNo{UC_!)I>dtKI)L7AKWsFCW>JL@ zoUCu;yz+#fq;k9FXk%v5OcnfX@hl0uhK+(GFdL=k6Mu;G?VSwwz*qaaVA2L9EFM*& zEk}Z4$$swKkc_ZT;z`#?5hJluzB=qN>!*J$)gw?mg}2XtX!0br@ICTsDZdrk+RIv0 zJqNamm+)rjpfSGLs?iDTLlZyFdkh6F@dW{zVIL- zwzf4WXfBkZ?OS0t+rS5|%%NmuW_n@Yr@?t4(n6CHdIaLk&2lwu$0&4QoDFqA$jGb= z@<*5paKn0m@VU7YWF(IvOcht{LC?#PfM<<-KxH$W8~C;iw-SuNfWsF^@AmGB>DJR{ zd@Ao+Z_^I)cru*AEmp^0Q2%vSAbklx;yg8q-q6ow5(&#KQ=)D}2uhiq%~@TpgcR=x*u=Yo<6q zRAh_#fL@{!N$rxN%uj}YP&F79Oxq{ zhLBM#v+~xmFK)=Lee3ao))5MoSX!RDb~qR{oOw5Uanj!Y$!{^2c?B74TwD@h6Sl{VwNdRE<#r9mj1s;r!c?*l!~(x3xGq-TN>Z72cpFa#(S5i+G962&ir!XY3mf zu`syG>)^;P2)+YxkEpwV;zrHv1Dxpa?_B9i`=kNh?laq`MXXmDn#6)nMS4(zD~RjH z&*eaOht`&ZdvCsMp7F?JgSD~+*|JSMrnj%qt=p$5f16nh>HhRav+T`N#K*{X7*t=- zIldWRP~>t3O1Mm?I-g$|;8t&kz<56?={$3YJ+$w^DWap{;lEj+9X=z)L$J35HHS`6 zlqjs?PLDlOe(?aFHs)*1i}|DJhsGXHx<|HH4xG0!>v{J>8yF9c3_poB&R5CpNjAv4 zw|1^fTs!nQoq9YuZK4%qr*I#0RAX!dWxZS$#GHDQ6c72N9>Yz$@0lbM=qu{9_6d&U zA?X%z4P?2iDQ)&HV+n$9X|9nrWxG?jl*z<37BGV5yPkx~Hf@ zS=_fI)v<5M$-Dcd1$@87c@VLy1YUc(Tma6y zq$>Nr@&$K)uaei$K|(y?xOd<)qLdaRO<}CN$VP_Y$*|H9%G7(6pM7Fp2f$?#gsrUy z2T_oul%_pIJta6WOxele+W(prg_tTNVf9sBjt)r%9b=UP$c-eT% zhn%BsIO9zoP-|{-Mb0nu%lGLpVG~NUS_A1JR~h%O$V|H0v40mSa0$@ z;^{Nn9``tDW3j^jE~YLtxSuvG@{y&kd`ny?%SKDP{G(|8;%F5M%gp}H!kTQidA((( z{_9@B4>~pTW$vZg;_@$7G)YVlDa{|p$dSk7yo{zmqYsX?o+UK{A9qqbX$C(B6BkV= zymzZ{lm)pU9^tD*YtRM^R?jl-;SUfN8Yk-0C6 zci&S?nCz2zL#=Qj{0`rTo~I(u-o4#Bd{*r^b2nbF@>(CeEXJ2{Mx%8e(jwG ziV1T&?wyqjdB2Ywm6mc2bQzseEB`e6ij1fg^Ea9}HIyPV2pB;FXuA{xRY zI1vUcapwewt)3#LAiKRX`8tc)Rwu?u~9=SMB;KQ7o<`o$lSy_OE z)9YDYxf%vB$(m<8JuY&4lMB&Kwb}8~LWK`C(OD!R5^y1Prdr8nK(9fE{( zgQS3T2}pyKbeA9!3J4+%(k+chNlJ&rJ_9O`zTe~bdd?q5-21m@_L`Y>uUUK6z3zKm z*Totn*qyy!9evQ%7lnNlEy3#HOt&Fo;TZQB?!9oAh{_*&+28s5fE3`bQz4~6Az*37 zHJPzG0+3|!Sc4kafJek_g_41MfiRhf{EX3Uy_EtES8Qt-hEJ3wR$NB4L_8((UA){L zmqYjoZFp8|f{*fJQb!yYl6~Q9>?coyg}dS!8p*8h$4@z@#NL-vEc9L(j5!GCbH40@ zd>-fydG4Tz7fGawFKUPiakZHdDz_%6tlO35UAyb+S-b$NS&_pJJI?rm*w}$cF3r1! zV0=jXc$1|T+PNfiEN`(eo;?wzBwz4=$gIbta3!W?J2yF=`w;$>monQQ8s_h&2!Q_h zuMMNs$9^+M98!5RX+{*?tS^eMgUhI>ip`){Q^j`A#yV#>ntt9cx)qb2IZ`%T_23{C z3^EP9WV6UJ-GQ}}v19%U&96qlRWRr_#N0qtK=_<16!ZCGjb|V5y!i~#%|=#&p*b|> zVYVC?(l~aZTv0vVisr(w%A^-zX;}{!+|`}sevq?>+e~11(z)G5yj?58N6wdCl}8<* zN4=Z6>_~>I$-GU`&!IaEuMh;f{DbMg2Eu3#@CoozFRUi5I|CP{o(|8(f}AJ zC&%qKoB++*%?luF1Ej@`IRS1ofX?X$4IBW^zAbq}26qi=|7Q8~U@%*y~IP#kL z>z^xg1Lp;BncUpBWw?PW+`Is|`ak7(fSTRB01~% z^(HV!z`|9|SZYpOWl!T?_!IUve<+a&B9*VJ|2 z-#Gp^Cb=7o^vyF-@0yS8MyvCGGPrSoSO5$zh@AyMB!7RuF7tga0Cm5H{(diUO*8;- z1^oJUL(z5}+PnU{`R?bDzg~xn2Y`eF1-JkJK7efJVYv~`0)Y5{7AY41#0T*2Hzfed zf*bJf^|1iK8-UCGz8@e-0MuatQi2=3(`$l+8-6*!p6_S8F3-cwasvYX^}5%ezgHMg z-{l1)cW>TrEV%jj!>)gJf8PNdbh8U!R=7s{UvuGoZ@qtv2a0f9*ZX^Wad5G40w{fe zBH>!s_xd7$Z8uV{0BIe7vcDLgb+H?=I<8+J_(0#ghTuz@ zyO=s#JGweJ11t;ImH}w-Te3Q!jK(7q*T;_LH}q}n|B$$`YFnGRTDbtnT;Hbuz!(3f zE&SiP>P-GCA04p7p7|OZ&JF?q-~T~J2i(G&O5f7a{bujK)6wy<{bR{L4Zx}+Yi@06 zl`~kdB}N7M+f}UK!2d4i}%vO)+Xx2m3)I~ z#qLjzgDx$fpun*hAAt&l581=~{WVJ|2!WMS&=gPQsPJobsht>{wWnTbW&6K;#iV|h zJPhe|_`^i{I3j3DTg-5M7~C9UN1ty@m+o0-Yu*bdnI{(mUY%16f+KTTp)}1*D7Xz0 zq!`dJucj#Gn_p2sa~c?cq)efbX5);d3L%8Z9rf{lAB^6OBU;E#j{(gQCJK?ngiqle zK!5=~F&I(YEP{wfp^t_%Nm2=+%;Dk4Cyw#d2~&sZ1ma4ZA}nPg4vF%UrVjO!$E3Un zP=djC;Skx##GLXU=VNeULXWxIXHuVC$|6OmqpJGX`PY*YkUu71On@d$52Jcw95QMI z-3x}ct>jan#0hbVU)^2{`qq~6EEr)0jB6zK0gIgp$}SQ5d%o#^#tf*Xa1kJp?N7W zWumEw%joClMIj+!R$4e9dQqCG(Q&Ye-#|#PS(9U8FRmIUDnsW7pW*GqXiqj0K4TCp zY0mg;|LX8C7rK;(Z`;pR|EVlY-sdM-?Xhj={Fv;L@NFC^5u@{6b;Rgj?>@XJxOzSB?fl-ca&ZUWHzTv4(+SSGd(YnoUj>Y?F0u~k;?Jel6%nd~LCl3A@>=4!duu-}`xx8N;dhM=GqNVHk5SfX#ZS~a9I zmt*P6*o)PRD7fe`+Ky>Buh?bSD-;2p^4`tDnbZo`rpmc{Rt%BP?7?Y4lftWgbBW5; zMJ}isjXVLI*V+p7`LKHJ8BJssVhZG!a*X{8RjbE)NK~dXD#B;ky^qcr-Z`o8ZZ+=o zWSdHUuqmpyEB{zey_6U|OmbH0ecyc8<*cvtDTU!>*}3nzAHp`)%C^`t;)Psz>hZSYbP^qSovNShn=PaXJa_S-DKG%J(Vu%g9W!3+qQZjQP zddG0LfxYtEu~K6mnJ$!(e)GltZHmCj0Mvr1K}&Fwv${j%JI?so|NEES}MA zA^3LgF7Og7^r%0y>%?He`9gb%Gf*y4Ek;2N6LrS8m3-B+bk89A-RBP<76Q@JXXQKy ztqe&Q)ap0mpT6SGo12Q;tR()rC+^Es_hx9SV5sP2PiZs}Z^Jt5;1*pm-H|l?Jh#EY z%%|Fq@`em!x*enT$$>clH{VG(;Vt&~$JaK=tx9b({j^@^#{>&nr?sO5W2NmkFnumPe*^t@~&v_qQJSscv&y)nb0p-zL0O?&+1?k z;-#n0qgm+B#aF(BqWgnKD%a8o9UZ{zGC3#q&JmZq3gBtaGhKO91bOOGizgU2M;}96Y%Hw z0A~l_E#U=RA6|gdSk>4WC{F&}(fEht2RQtCLJAyyLoKUnY-#@csQq`DJ5JE=LRSU4 z_g$8x<9$ymhGtYNDdA4oiO)@XWnxS_qwSSEsFr<2pV466#rTx%f3NqwFX*5bO4QA% zanr}x+#GkaTc8?aUT`6pXTcBG=KQEl+wY2{$Dt>?=iqR45g+5lPH^Yqhi5Tv^Nqf$&(e0$GQS>S~0{iK!`YBj{GBb0i2M*=~$et>fj%72eJbcJU zn-9^Oqep!=XNnd}oKly{P`17qvo%zL?#Z0Ka!MWU5ZNn_A_;>J@g-V$d8&6}o02~` zs_Ml(P0mTMw<+DWiMML56Y48!qz+Xhk5eA;yi?Y{m#9XDM)uJl;8c zHh}Rsffu>TCbN2OeEXpd-S8dVlTGVJXidGEvfdHhVoO|DC(^8}(Fs&r%M_%`I-f|& zI3g$t1DM$ASMr#d*27JtDE$O1t5+o8Et>A9%hmJjap*S4%+sbq%0W84R;F)#0|UZl zYbs?FbX}n&E!w%gF5xS?=sNSXDCume2;i;n@j>l81nF+da)`Rhe>OSLTOcGGA0;yb1zI;U`XW7PnmknKSiHohlTJ^n*j8eCVI`s(3YO(Mz)VXcS z6Ut6Rg?kSDQ_Di0bDujdc03Jx&C4)YrcyrfVX)ovlCAUcE0fwsoEn#bF5?PHg;t<@ z%EqL)qK5mDbscH{!+5+V4UZCcg&BOeQP^VcL!s!QAbb<93JqANgkfE|?7Nqo!|Pc4 zo`dh&m0+G$sou3!@2wn4%MJE}u_}|AxTj31hPmVwKi-Z)WNJ6(W=mJDIGF4D<|zu< z(~Lf|_=iXEc+lRFO!6%6%2Dp%=rqjTMdK`>G2%s-e2)pO6IrLBchoF^iP&0qW@m^H zwiqCPB;HmO=gBe-Moo<6rGtt^Ci)Su8Lf5)`A4j%s*23zPv2?;h@ zoWlSoMjD~f7QWl@x1tZJ5$35cF)^1VJBpS&<1hJ2yuy)i6J`Q|(T}O(OvNeJ2CQi#&6N}0acAAEv?@YAAVodSm&H$R65&efj5|Vh@k8=l_B3`D7 z$tcV0BM)uh4|-mzt8WTQbD-?9zk|k*JC*m>fw1X-QuT5~sBln2SRbTo1wFfkDwCb*&% z1tk??J}tg<2nb{g_trBa&D#k2SV5U0A14^&KVEeIP`~w#Hq*oA=M#b-*?dGJ`_+nu zT=}fLxV*_w%yyB{4es$ncSIEDp7yPTe`(XGW-i)JTabi7V4lr8E^*LnXI7Ub@AKMs z%Eo#0`Gv6V2%*`s+=H;DwR}eS;0l=h|=?D{*of>3z2-EC&5U%g>G)ZGw4 z6kY9iTDrsCk*jtLmAoa8oV?bWpvbS38Fuf8Ca^-J z4Hn@!>Fcn7-4gRRJ4gnOU&m{`Ro50vQeMWQ?4*drrpj#Jt24NaDYU&qargzc$kg|o zr%Nbm^;qJai*jVm@nl3|xCz%f7B36|_0;AL1iy0y9+79(@QjLp6X{M3j4CB07DlA% zdvzLPggr(`YLmLLv-e{9ewbnhpY79&WK*1@4hSe7Aw{!vE6e#XsJN=V8?Ll9=e&i$Of-H)uXvP>9WopwNk?PXM51$#ksmi-MUGwRC#JT9rtL~|8%;nX& z#XYO?>2`SIgk^R=@X6IqI&~JWiqXff;1^?sH#S>X|-Q)a~-M}bI0{4&;G=jeN)_pVTiU^P)>lfv9;4JSz}u+{ppt% z5BxQW@DpQ+hkx*@z0gWh+?gTC*{Ot zYZi{h$Fg}?2>HC6=W`g?Tir*xZ;*UK!M$u&=^#S!C9IuaH<_)p3w(0-_$e+mt=x1& zQ6OE16|7k6oDP;#dnleyKUMsb#aXBOBT_4Odq(|RiL?#ZFCJAC*i~Q3V#alwBs_cA zF??1D<|`RZhB@8&j0i~)g%dBX-GItR>KPwwbW(SpMnr<7E^i(AP-f(XG8k;cDfQi5^D}yhE*@|l~7e<>e zmb{~LvRzNj>V#%~(fZY{#GkFUdZqs>YTjJ@ybHd%gEHPTTO)>4qD%9}_vHP4C)I`L z=R$K4%&aF@PGC@Jzz&6nemE4AE3%eZqSxh8V&A8}@dRC5rqS2rNly(iT9)j}ZE<3? zhWl0sG(HEX7~(!@x3i87?Lb}eak1NsOQe*2@!6swwLoos#a9ah*Uw5|-?=xR_tTMU zqThiKj+7a;)y_9b6$wArhtJFe%9}jc*tbXT92#2t<$$aSsI3=|?FCPIgPbeJzybNx z`}G%;2ziIoORo>T8Rd4^(6LWypSQ0mB#T{DjJ-vQw-U}RG_s2tdQ<2{iXK2IP=H_Z zC@xUESFq36UZ@zK0Z2> z@Nal4>(QRjQ5JK#q2)!)rn8fz72@oXcxh+e@ks*FK4%1vw}e4YG0|Euh&E&xeh@vg zbAAA$6%U^8Ihfed0x|ZG_p!83O+DavJ7JYE!=hsD^swyde5)+!Z00GS5}}c9nUhl)4^3i%nTd&h8ohE~ zT;j}(&Ez1=m=sx|Z25_+poXBS=LM>?2dl9alvA{W?JK&3i**5pI8k>3b{o=L(x-WR z;FeF=x%1@@9xS{^6awiXgZ59APZ8ma4P!dr!m~0Pb`#M#L@GX?vbOpn(xl>7O8%l0 z{LY%!a_k}scO-4tCrHYsil;5>FztnwY_owJrpLDiy33JJlJUp0IY%8j_$H^`gd3@Y zHs2;5*_R}*?sp*i^;0-k!^=BA7kn^5djGh>Cvs_?6r0jEqLo7%wfPtpLK&{dCuRq;9~eyVWq^BTdz#8dFge6p64LZHe;ugyyUi7Lxo0gTBZ0f+?Y@`$?7GUY5bg z!D3Nve6-T_WEgziD7kGVTseDJ%5m1CXd>TkQe#n;7p#Z}tAnkpyNjmiaNh0N6&#|yBvzGr>1 zQbqh8AKAl*lLw26F1{NSsw0Ec)eCk z{EP!#{B74yAd5EECvNb_#QPcV&7PX#B$PL7zjl&2C7sUw1lEl!3WiYjXhkHiIFUMwG*A3aOm#-xz#;{T< zidj>%5f^03fZ%CY0FO-LjEI1TNfj0mp_vaovBH1o@bO}5;pE-<++d^E%uGly-(%Bd zmM=0`9CX|f+i0gyV*YotlMz~LYS%O{5*Mi#BYLt0j2i0e14Ziz948=y*9HvM23FX% zA+r=!)jjOeQOZ^Y`ks0;>p?N-hhd5O_k7L{KE}v3!H`CBqSvVMuhl^jUvrZcqfZcL z#57@|O+#hVr-yDZVp3+ySc`>1z(n+@m`)K~Jfg=`S0_R$%j|N6;G~wuGNEbC4qGQt z94Qh@UHRIqYqdj%9}%SXA^lQc)sHX_OTX+wLsTAXnL`#5@~K$34*exglL@vcO0oi; zGPGGS0lp`8r3pg%BnwmfiWXTipmZGeihO+n3`9tKPD@~$WY zk`@Q%ba>ke6fUre9u60R(aOjYPpsz)vp*UwVVG<0kPF?k|#wwm}O?E|h-L?V-e@N!pp)Vsd+ zS&x&d1dfUx^nZSqG8d%3I?(zyn}lFb^?ZDLz3a*hv4o+aUXanxdrBc{{Ag!l&Ol** z77Z5(WqL4L`rF6l$g-Dp0d8&?c8WyksKZ_hHrNLK{_YtT2PX_Mdap4^NL5GKebd&GK2aNmNL> zhqSSr^a#1wSBP!B4yEkXRL1*`yG?~_m%F)7D#(mg|*iq9GUAA%F7W(5BTV-)AF3dp5r1n~ydFn1)4)`bc@q zvJ&Hid`wu88#i7mkB=MdJ?LLS&+~1X=KqAbq%$OoI$wd=_>P}1MvIlK|230~BIDg! z6f@R&LOI1GQma=85wG6e)2q#US~4XFukA5U5k_ByD3OS0E? zFa2vp&9|Zv=fB23tF|##@7EPsb*eSH!drRycC0SZ?wEvPod#%{Xkxyo|h8|Oo2j_Pyo zevLafQ@FA?x($pmFHYNS=35k)6(kB@`oQrE0CkYOHLDID;dkdJy!#7UO$?K zE*c1@zC2fHTpB-Zw0=HVg&pSW(fVmGIcSYh@u4yz6(K9qf_zlOC z-wKY@7mXi|@pz&VkKEth6q%?~_VG=n0q>&MC3zx)Vm^7H=gvC(O08UH zg%k4=iL;#UhN+oaUi}=>*Je_49F9{np>FglgY9DF^MG z6jaeJKY7qug4U(?2@9X)+b0)>Rx_}h z8QjzO-6>bkDNIL6{e>=}p|J7v|KP9OuG+9KI-3-Pd6w3dCfnQLW0E8FDv6=0;*X&HYvmKuZtB+} zVQV!a^p%_MRisp5!otpAX4i~^F0~J>`bSW?!wD1gkTR3AD!Z#BVREC2WvV~~sJeL0 zNnlo>^@yhSvc+x-_C%@rQT4O{GDv`ArDnBP;DaFczRK)}z5B9|V3jjLY*u=ni1j9# z`P#5p%*3QVLEmarU*gh%s67te0G77=E}J?_%KONwt(W%zx-@PZ7l?k^w?;v)XOm|S zPpH9NnV}(R!`@C1t9lJmW~GzQQy9DHGE$8_yshdjx1hQd}*+Nt0(%!7U@NGto!&YUhL^gEWu3Vaz+3f4j zf+3L;wpu_-di-`>hljX<#(Yy!MkMv^&e=f`Z`zBLr@lgF7VRqig+^PoC z!2!+GRD9oyPpjW92SGOK>NqRBh%inHv$|cG#v#N>0~32Ot*sUB9tGQU1=~29);8L2 zAW2Q??2XLbBbvo+B)Pa}=CpsO_T2n(aY@DHWABqbXOR~+-*N;V4xK#XrTQ93TStPn z=RA2Vp)f#L5pC<9HUt(d{{<(DHDlP|<_rQCKKWd^+?@DBM}D;NBNu!ef4f1Ht(*dj~I~;xLJ4 zt`}60!RD6Ri{JLa*~flOJ|~;$^BQK7N{0_#&F9d(lTh#seL|ZA5q! z=jG=DQ~^e@Y3wedpJsLW)(Ypp3`jnLz=hu$!56e*e`-lD4&TGr9ASz^fvl}?eSM$jc$Re+#VnhXIH zjqE&q=Fhvb5b12XdI7=t(wR)<04Ltf00bYL7kk*968P=X={=9Z5t-MUEjHS(q#kFK zQ(hB@L=eH{e9vmoT@lm~a;%l=;kvSttx2B)WOLmF$if;30`q|uJ9E=ch=d((%GJVT zIf8D@C6UL^G_xgApj!n}py^JcyWZozM=m-q1g=#mA89|-4A+m@f8jYl?KmoO6g1~TW^x$PSVQG4$!m7d&V)}W_-r89 zn=NB%ro}B#Vt6K#N`oFm;(n|u!W_Z*_S2pf4{vd*O>tjy0GqoTC>eKqDg6#EC3BAh zM;=W2&LM4w3@(w~`mV-f4kH;$!FwDJo0aXAKGvx=^dRNL<8vg0v#;*dyMNhQD-}8x zY|Ue>Yv9p}#S_E9uv>*Fgp=uepSvQy++l@iv7~T^&uqQgpI39I1qDmx>7ACj6YP!x zQcwRRx5Cmp<&Wg0u-D@pqLa!8wfsn4pw6%7_@;)ccswj^W;_;SH|v$8tJd5{_EO-> z0}0=QzK1Qi=h-zHIa4OY{V>9f$CS=e(HpfG&xxHYK@yJ|`eVTUsV)h2U@mx(K!^9ft^ zawOGj`!GB%38ZLOMv^01Zg*3vGU1mg`r4|nzbsI)u?0OcMHoaqK{-3XMi-|h!!KHc zv}gCb=MRDH;S}GQy#gK2aljye3QdPLcK~-8^RitNEH5mu^70Pc<`zn1fD;)n$zrIY z0MDTt7j|4ePRRu85;l#>7ZFb5uN2fi?nYd7js?vrBh}h>HZgY@r_YgN$CCFRLglCT zk_ds4FT8U>wSs6!6l)j|5W1LSoq?AeK#HY{NhOUaqHQQF5YlPMm=T^dTB3nR;x%NK z$7f5Jjj>GmUcMDGyI6L!8n>@eozrLOI*VyKkZ8xT_gm7!U67i1UW71Y(v;~;huDn1 z3JE8g{#YIGiYutzh$y1a^6mQSyTAhRIK5s>5!*Wr@NgIs@Z|g}e9^0?KHkGNrG{Je zmUCZ`tIs58bY$VZ9AfUQGH<;{*Kl7wz&ma=LDHaCz<-(4`sxAStn$9}sb9W4`~1TP z8+K82+}2?z8H~MzT1n0wT~o#@InPez0HuZIW2%;B91!iY);1(IxH6@w~0fCuhwrNHQb116G|e zGpaM7gPhFUlU=V5f(y5Wb%$LmDnk7{#l+K-u=h*n{-(Axcx81db%y6*x5$H+XO;^2 z`a@bHn(dzZdEd0OW_+vMqVieqz0LYOPW@QrBj0DO*UL<4fz+%PzFlD0Oz*Vw=Rxbx zOoa}hP?d@IF0kXH&J7|p`CoU|51pdV-Ny%%lka(X&243h?B~HQ*=$*O_)d{5w`8dy zAvx|UDyLgIjzbFLqPdCFvC+_K>VYMAQx9pocbndzjh>yTQx8|zidwrnH0|OLUU}xd zu4uy)3|u@yt+i-?o!Rzljtggee;3X7T_a-ho4MT}y&$xpjPRlm5nbT}1;ob#uU(>h z#D>ZXkjQc}B`ZTIIi5VTpfo|G@b#{(Xg~tve(0-+eWL1_z8dbJPMe!=se(Y&EmRQR z$L2b|9hU+HrKy2Y0^q;JdRgV{ft7pW2COU_f!r1W# zh=3aa0$r;j0)cIMR+C3|cIK}C73aVVM9i7_0PGSwJD{Ei=t6#%Lj>lJ=0NNISnYTl z5B|;SKg5H1{;%S}H<$R?x__Rvva|7U{}K=W83G1iS=>KC4?rLJ73-##pc-|@W7KGXXL1bmNnPs^i@XxkhrU4TESNoSKeIN&v5?78_eF z2S*hL$C|p9;{aHkc?{oM*P2ldg-E9p6llK9(&X z+Xdvpn1i(Mf-J9~9)aV1prIbIKa?0!BtE;EmKuLQHG*aHetgQa=UXYsna@hIZLM-G zjqH%(x|!U1%Vd=hyP4z$RAm+V7?fcnidGA<1z-t0jY7YKemj5rt=?L~1eXavHs!fC zmiqnJQX_v=lvQHN(`Gito-)-i?jaBx8w?|iIKf@KewL4o%NGfKjjpg%8lWfbxw-A~ zEYR6%(uIXc;~_}TA2XETB9-8Z!f$S_tRzFcriYLyyhp+OJ`5SBq`5sm3kGF!3@erw zzfdGSegAIhqbO7yS7s$<928WgKAgV(ep@vh+GIT3g4INS4J0;Bql+3vBZR`jd-=33 zbB#$^c60GuK6*1f{2x2;?^SNNTnSbluP7ZuV+w3oSQd`Kr41l!Dze_+w^__9_X+K& zW|jA#(Nn=?nWmiD{D^&G9=DrXZh)L5rD(-ASK&^j(^yq+OY~L5{zyAB6uHf!&)SFD z{`LDWdu7Vz8EJ+In<~3~3Xd0YUVAK@czvvUQWHpP%^>%DLBGW}SxvEVf9IfgKg(@Q zMdV@H#m*Kp*&xK8NiEA!gtgnOoFUeGp~Y~eyA93ywih2%{Gzy_*L2fX{i{U=@^|j5 z-G9uhz3f^%Uq}K$SmHSOs#2P&ab>t%lWg}e$ofj!slHce6}AU5bDTxRm9+QaH;(!ox5O{e$EHu> ztHq;9#twx`ce(0hI62S5`Y))l?J1tmR`cy;Rw-H&nFk)^Q@U%ql)zMcse`N`iJkI7K4}T z?!~Q4-;qxTJK*y7rMkHh4~pzz4@?pBlG>p>Gpyu$bR5MP-5iy{z{48$E{cEI;mkH# z&F7W$*qcrXy?H*xI?cVBy(?A?rM8CEg^v+wHjg4|$VR-~*;M(}j@J{ES`96l-Y`5p zc-Ou%Klr9~`Eb0VKzmwY>Cj=hcW!mlgY1PNag+R)(0990mqkx9rSR=5d_8R9yK9t~ zXEJq*URr04Y;bNHpGH~aWSfhe1~px#vV#V(Agqj`JN_`F-KGNdzKiz$7U%mlJNJtq zEue{claIU=q`gLwea}!@JG;1Emjs5JUj=D_tQ??%3Z&$?03hV`^H#~&)!F)bdHO#h zw7-7-O^}xTrywo&KWo*2LG8CB=Z`TD7!Q93%)zV0<%^+#43*Z}JOQ_9#Fa7IA4n!mvK47!#41z^RXTg6|1 zzz77uG{2u3;Nbz?>iq%=ub>-+zw7G&WGbLrwO@c51avF*3t&P)w_3k|jw|R^>KDkc zgKm|60e1>?EA$J%aRCU!kBb5j(C;G2*Vh4Z@1R?iUjUy0x)u2a@E9PVdw;JefWiRX zO8f$t3ec^>FObOx-3t5y5N6P=z%StHfo=tUfgc#?R^S)ti68*BdVT8OJMHz&_zT~H z?>8}n#Qtl|I)If9`3_R;A*QE_kuKE}Wk9hG?Ym+fTKLPtnAN;POnx_nDEILWDaUSj zce$&D1!G+$6%GHt43=f9P1nD?>Iu;|%qdXO8CEhJFZ+J@8Ze9kz)gNS#G8kql zFpGI41>uAa@#LHm?-P1%bmc(6{=67@u=tpZ=4=RBxMeeEPXO#H#ey_k%cYrz$UQP9 z*)dscdGB^91NM90l6rlLE=5&cA2~p5N5945F^J z#Q^SDS%9fnraQg)f(bA16$aH0g~Ji?VeVBcKKbZa=Lni5Nr8w84-wEHlf{$8$oG9y zINl%Dm1(szl$?cW*@7}BZoR^ti{F0y&dJ7?}CPx0xC|Xg<2Z2<*U{06*xavtg@h%(y-DuaH)7+oI>Mnn&JP#VZrCbqeo)n}MfPu7%TC z$B4>)q~!Gt!ckKl{0G~w``lmH&h?x3c+D=%aSx!3gEBG2hQ$W`pp26sUw~+bm81Si zpH4vRyzT`d^&c$n{<$nj!=lWU`k5?9fP^d=0l^j6$mjwb8gK>{fpa5Y1w*vMU$J+S z6&uGo7&V7%g2CWj;6=uU@_9*Jf#D7C8Di)H9@zXz7MF^t3H1m2t{-Us-98S`Z!}4d zVs4bvLg;ju6su!i9YF2vRFPP{j+N}jg)C=kzY$Ioe<)yR+k!vEBip=+^x^a?4R_!x z?^mFO0g+ACLCXg=&p*`EW5g`2R4(ElGnc-u=`T6j?K_Bmp|{7ZeRr&WV`BgK+g1Dc zg(pQF>&nZxZ^KLYoO9PCgM&r?;=Po)ryCF&-5)yE3thls8=V7f~aK zB$av2f#WCfmT`pHwQ1ut#1BH@g^T7N8tw1cYuLGdqtE!!DIg>O7Qx#tf&2;~7CHBp zraqGSnru4vKhz6;C!0P3G%N_N{6r}>#9%!O(5w!ao?iStpgT|8O^MJ<02(ZGWyk_rE@ghPYs`XhV=XrI8py^q=U{ zk~cwyAt%ZG(1L+yTm+}`hJp2~nP&b@FYWxw|71`C`F1QQ$Blbu0Mx$=A3*-G^DZH!o zzq8YPch&y;Gl`w^xACUD`$nIzV-LN`r|4AKDAmlmNW9z#PK*xTNnHlMV1TeOCGF!E z%nh@Up`!9^{8;$+@P68gWzX!=@3!BcA{MUf73qks6>wg;U(vBrw)VAWnl+!#5UuRR ziYCgYF1K_Q^SQ3L-aG=jYcL%pq%4kqCeAb@QobjnTtUET!8t3Ww&bViLsL7!gT~MJ z?T%U-f4Gm=uEt+j$NigikD}gRGxmj67?amOk@+GNz^n;Rht=MWM$6AfK)$jqu(2usH0Ead#;yw6jO09eJHg8Mu$m4wWS)2Sl~|D(V?yz!@z(yt>lG~HAx z*3Lsp`R(Xsv_|>pe8lvyW#NaS$y;IM5Mo1y%q6CJgi_(}4w^FFJdYGHA!BCf@YIfd=MkpFkGukY^lUs%ld+ZdA(1Kdwlln`hKj4BTp zKuF9!OOqe*b>JPC43c($8yY9WFy@Ekz#`7=5qkI`E$wC_*>=a~=#BH-0Q40~LS}mG+Sp3QK zAweIFo)fF4S3}qp+I(3l4SXq)Bmc!)6=_VRTYjA7Jq6rAMS#;))tW8wG9``vYs=yW zl6-k&s8ix3P;AV;121Y31Ir%bs{mK4f4}`Vvx~oIjNf%13i^eRpu|vMKV=)F3I*~7 z9MqEEYkeE2f$)=4FO_eaq=QOFmkHYv<_H4s?9)5#_NdT_ING$qsP6mI#DY05TqbCe zjNRKi^K_rRQ0sSz=wbch+(fF%)yqJr$!w3Z&ipN@ZquE-B)(5FkUFVbjvA^+Z1ui} zCgkZn^e2SpyRgEuSHV(HvX9S~<`(;wkPMIdWd#3VCf`ai(ez5f_An>RMHRbCa=3hrklrK6_?=7q z83>4STn^1GiWLZFc+Bc2!2;HIM7J{8_91gy+}ZYlwc=xy7kKxYWp-H0;q?h-KcTlW zYR&w?_P_I}*nej;y&W~bdyGFxhX2xIye1jWPWsL8 zb4WM=#m~^Oyr*r^0cU$zL@1xn1nFB&y&u4G?D@>2)9+=0;i237uF$*NMcl~M+AjQm z-ozI#H2$5i_iKvPYTAz3$8em(xv9j#7&w-M9<9ww9?=n|Bb5Q78@g=;z3 zs>yPCvHK(JIj6ye)IvzeNBQrqyw~1MVYoqmbU-Z}eoFs1m{|j6Y0Cr!#c&VY z7x`R?Ljuv9Q@O~@gM&Z+G>CSMGspY5v`IxLq1fHbd5m~KEt%}_Rqmn z{0ID`yH({|r8_xq&qcdG6A@uN!f_-g!RBk>%!MPcS`uhJ>zBF*alj)FmFH>pX``Oq zDcihVv`rHFr3}nQCT}yDOlG}V8Q2QfrBZ(yzIvAj|0>?O0=D_lQ$25}a8FIlKQzv- z5y}6>$^2cO;Pw}x!N#e^#(j^iM)SL_83*)#=$b|L0rQ*xqHDGR20NTyKe-6t_I{`f zy5>->|DnQv=S}hb+e{1)7lg!;E<_4}`|cEr62YM6aQyV>MIl*y(An14U#O~UruGzk z#rafb)Lrm37sI~T2%~ppJ(s*obwPDu7YqRtIO+UTg^k(y4&@(e`j_FP-@V$~rd1o_ z(qQA(V&hW(-n87R5Mmn0VT#Ty$THw%MoX7{FZ72v8?NLFpq0o*Myof&qmh5d{Mc=3nNQbJ%Dz;&!BY&x4 z+AA`~Zf|G)hf$JTW{I98Al`(E0|Q$jf~SM$xkIL|qPP?!1CfHdM!1D*l7|GYo3ZGy z_aq{3k7lX{g3|2zzAZ8N8R{1={C{ zhL5UUH`Nw7BjH{tqQtI1oF$`>zme!&xR?hmJT%~a1J-_v3bufEGp2Jh?V3;2<9F95 zoLz+P$=2%pLp%JX=ktd-GyF}w=;xgIe+((l|2(9i;-cJWb`qQd(ShZhNz$;*oKq2K zXeta4w3849ICSw61?ADP>TB2bV=$O!Okx+3e(tAw5Dz9N)*tNoJ8y>LKh%RFuhnfa zq~5CYL)x-}7eQ-Cu*D`A^8Cc| zqRn;n^$6b{at7;BbyCo&eAj2*@R)aHx=s}vcbx`j!)*-@H$A4G>e-XN#;cvE)qUY^ z{V|-DygFs*viNY-!q=m5SMLm3bKl794{h?7p3v_K+ED{P zyxRn{Crm!UtB8$nwCP#!Y+xNQT%9rK9=WQz+Bcl(&UvHqX!G1bvgAlNKwS>Hpui9! zEl4$yuYaU`U-=wHr5KcHN@!jwU}CLWE@xT1nx4yn{5HJ;UUS7+98?i%=6BiPP z8GO-Wr-}Plw z=%tKyb2|QG78~2RC*vDFym?>HajWM>wjGb0n5-DpDAzNuNgDlCO zq*9S3?Y8y>k)_C%LMdC?RF=p(=euVZnx5u)=6&Di`@Z_kF=x)qIrnw1*L_{r|9`db z0q$w^QWM`#kB6{M5r%_ms-p*cyjLMjq_ysStZ``UJFR=*O_r2vYhz#EgJ9_K*XYrR zH{?;hO7|+0)iN8;yWifl??qNeqvxg$sd#NRM_8Q@-|~U2qkw!0~D`G$EKLe-?e*IQ)OYJYPhNt>HbtyFlST@xll4|<SG9fj4?JM<3xn*rJRThiEDN2Ko%CuT-(BpOY|xpM_fGBw(rNC@18+h{p($HIvuMI zCTz?;EOBp9?AtRPNf(a1IDK=|ZeEpjOkoxhB@Q?6A zC?Y0Wsfx_&X!Y#<=NhqU4p_Oy3TGyTW>N3aU@%e46&h^X{O3%aE`Leyc7}!YZfOK8 zNJ|Wng{DaPg6c&5w*p8fp9KBZn)2w?H+8_FKdv7pCqq?f0c4fgPXLm(5uS<|0>qYICFu1#fv zCU=2sK~^969hEb96$dSnFw4B1E}V!cuw2I*cdN6mm%46;VFjF>JqOi_j-TC8UzNG+ zJU))CNhBsWfM+0PbxP)@#;YW)?O2t(plk!{l@eJv&wKA=c3Ic#)PrA68HJA{@$#V# zs8Uaz=y8r(FYf!&g;uZotrwuyIo=T5RIRN-d{ble(x0RF!noD#Gt+m*f7Zvpi6-3U zsqPJ0$sbpYZ?axzzcenVctNL%sdi^m=Yn@wd2YTQ zg1PM=*Z^}xG9Kg_6E&<_S37Q zw|hn6u;JGZkNKs zZ|po+s=s7Ml3?|&WyZ=M0(2cltB*Z7;@rFRnoErOigjU~=it~t4)vo%=Khh-rsxj)_ZCy{cAgVELBC*2T@{=k9*BL4rv${#W{x+Vh9rAkYBTX(*xCk!(_}1K;>r|A}RG z;@Ud$i;dEPBG@2Una$E*yliCr;Ug15xSjdV-!?w&-1KwTWUb$*E4C^uKDg`yhYXKq z=qamn{!inkHB!_*uEP5_e7ELs@EHKcVZD=RPetOEJ2^GdFT`$bkBBdDS|5JGbobLr zgKV!QKaThr?moKyWAtW2d~NmqZgs(*=f=bq4OTT0G{Q>#WqZc2la_LZT(0M;T6Mqp zOo&y`#G1X$%7v!|gZrX9F1)OIaCp%+@#CFx$&wFR2Dnjf1ADlc)DVlFJ5`3=U|O~6veCUO!&33j6r^B{z%3smk{RT_dip_yQehaK&4?1sf^@-34ojShG0 zM)2(IL@HRom+bC5!XKR8%;@W}`bQ@Sz^XnwS+j?_ z>oI9}7B#Iu1`U{Ff&IstYX4E$GH?G8`A_XXT@acR?Ea;C!8`?f4BnCQ38hfxqtIy+ z9mH_LYEENKN_pu()XOn6q6h7&t>+E9`-BoYg-m?y_>KLpL~qdSdaG+55WqxCR+Xs# zYeN;<2VBX2mYEi%#!BC2$ha5>e0pFV z=IG>Jz&o?u+o~bnG=az!EG`sWd9&EOczZ%>Rxg+5LUY`=tF2sNbz5rB1iKt7Yp`4! zIT7il*A_j>xygMPyI%g;yP9v&J;EcWz2XnZROUV7aCrU-@p;fspK~NdJ+etD)yl6Q zo@O8Fqt6k4mvi&aLqzVg%MuOG!N-i&_iTR@%F`ajxBH^%GaiwXNN`?*@Q_ou%>GLmTt%4c?mVgIOo8sY}>SD35mgQ z9}$fUHpqR;XCuWd%`NVHP6ipT`epkA<@GC9wMX-nI8$(4eu0w3O~#vc^Y3a;|KhLo zU0A{4!rig2YaTw$6(ilq6eiUbj*S`<2#>Z`_;}y8JNE9A!L^pGVr?UhirV;^Q#oO4 z?MyyDdy#31yn}E4Aq&YKQzat;i)Gx|*M6~R<=Um{=i;oMF9=`PsZ+XF;i8wy-oWy>(*=?i00F)Zq7jL`bIP)IXa44vp00`#e$Fy;*wJ5SzW~fa{Y5&xS2>x7P`9npEk-ceFp;$#^|Sv zqgsZ`v`#*&Ilhjtt*kX{-8;mJ+MMsqt?uSf!XT6YL8l-{PtZ{XY!`<3!(+xu9p9Dm z$%$hsP$2H963rLL7fTYSs9>iMmV6^$3FHbA#tF;`2n0Cr@%2L>s7O3iVRq7fDYHwQ zNz1XOnyE16DVu9KYwDzZ%N(m>H9Kk3{2^%uu5S(m4ba2~E* zMnN5Sq#$I8-@0av0_m>X{!C6W6Ew?0BQqK}|81#J;-Aq|P$}^Gf@rlGRqTL9=khTr z@m`4mK{Od?A;FxZ<)nV>Q7vNk*c#Wc@v${huHEAgBsu$j4tKE=QXCJ}?+DeKa)Ck( zvET?>O2HzI@>C+}t{Pjm9ZUknXmP@<$j=b@yXQH`p+@9`b-IJ_g@aTB@5?L$Y6uc? zHU!D&!*sA&;-;NSKgQkg#$QV&$8a@WM_pk+L5iN3^niV5TA2 ziu)Hkm902snP53$(fG(r0>XaMMHzE#ue9}k$`)^Iwm*?HZjRix?@kqJ$k>iahzcz- znicUG;^a7wz&M;A&7YT0^*_XQL3mh6zgzZ)eN7~fqYmYKd+EazPFctBfL>_QP9 zi)F5o6mr5YN}e2JZ`SqDW-{EA+?eC&g+$=4zGPRVZ&tCP@K ze(j@mkJ#q&yQjOY7p-cwOVPIEe=4@gqFt@SCqeaTP*H}Yo5|$q%ZT=Pq8wTGuHw@3 z7e#rDE0&}@;;MZAmJj;_HZX<5-5|sg4jvMzO*HB$w4GQJvqHC|t*h;QD>r6IXH)lr zchYzR4<j&2CL z)B`nB832!{sLbbq1CUAThqMDI0th>$9yGvr=JT$BL`>8VsRxkwjGFB1Z}ObYKyPRR z*PfQ|3t%Qdk}u{*fVQArr~jp&(a)&>6#9Sqwg2Xh%zi_E4zug@XVS|+|NHmfXLgnP zYi8HzPhxic55N2c$Tb5Urq7u3KrU5)&!Hh!=7C%QB18Mccn-(~(hgDqTl%zYB2*j~ zNDT-^i|T)j;{x4gBgh^Akj)zZ299f%A@f&A%#1vAIYB1})uKjqhSD%lR2&z;AkohN zdS@094f-uWZK;BshxBUzze7uKH}g9H-~qD%{TjgOs8Q#knQH*3qfTu&+8GtcMN4is za|WKLK3l=maRkoh%0fkMsn3;#iq!(JC;DBe_oSDFnhuYa#hrRfuiu`RHLVmREgNSD#s05ij3QdN}O#&|za#pkEbO`nS^IAjeDXi22gPU;k zbFgPN=R*#VKABfH$>Ns}+|(ubD!6mdveeSFj1rk^Cc!5Av% ziSls4U`+DZ(O!7ekNCnGwnFvcwV#p>{LGye>@^TJ>^ZsM-Z%8m%9Za=W_%H9BCn9! zSFwH5#XWLyo}Gr|_2?#Ojr;cI)7u5I?VmBJ1QzX@ct(T;?v*MQbOo3b09ep_f{P#( zTck3-v55O;BncniC`vpH;6^%u{j!YGLx`Lxha@N((5|U^zRFra12l+cSG9(zAe5)T z22nJ2lhRFJorX`{@i|0sj=fX=Oy{p7WGgnH}yLR-`JY49eQ?m(Jf9pZ?l&YNDf#BjLsO@$FY++~2AO zT=UJj5IrKDck;K5NerZMcGktrTfF%;jYs36G2687O zTs6fF7liK|LDnRytz37-_N(;+r?mr1+4hKKT-uyP8q|sA-g8ReqsP@G_4kfvz}wq~PS@;E9w1vstb zzCdVLGNB(09Mgv}P-y5h1jn|OLI_hFxtb*2i=IdV-2!wC*s_{gBbj6_$&ZPEENaxa z-}-u^DhPa|PJ6Pl99Awf)1JX!oHKU+?3@9+<$P*aFULSAX*fryC6VI}tOp$lnQ~>H zll%w_1HKirQq+g6jbI|huPQRjllQecS^zDlBNxJKp-iZ5C^A|z8M6$R_OaJ7{Y9f* z)|IiHZ?gutV)-hHpijBp+x>R5Z-2e6NKd^lI?As()`a`J^J>e}rZS74l#ddPjCMcq z(BHjmvt>(q{l#bJtP9e7*I(`ptZj_EoZRs?$t6VGcA8{==6j@MpT_>1XLWw8{-}X% zFt@8{_g0Orv)^NM@$PMq+hFl%KxhkzSWnzinKAWRYtU zJ-qSHwLn{v|9Nx+*6LqJw<>PFEnVh%tHEE8VRp=2#&oBuIE0-t(VrrTw<1LW1`HNI zyWSZ2S)?*4GHb?3mEWdX`l?GEUoNw~@4p*gj#SG!6g35LVzz=3Cr&v*_mB zBrwc?O=^q;GvgE-M}7sgQn7d;5;;}+g1-XwHS zcQ}J{>A-Gst-W5pPIjh9?2dfL2?W8%Skun@ev~7Z#BgzhHA?3B6JjC=UWoB|*xesSnWi9%u}@4Y@$| z0%eZXQ&H1s5U)ex;|AK4_=+dM*+MLvwXez)ZCK7kCRPoO3?oa4j+`Mzg)9E#qQ(|} zXt-v+vQ@94MvpqdG`742rl)it-z{c(_UygGNwrlPR zc#>;Sbg@vsC{=XB?aZp_V7+Fqlhzp?pUlleDy}c>yuGD%`?2;G3Wwba!jxM`dOo64 z&zHPC@|;QDDTfIw`So}c^7fD7dPfyQmNkhPn}_C{pRQF=J(RQj1>Co#OMqmyZp#BE zg0rd$F*fGEH$I&lDP;o?s)yty2fSqCXg<(vW1mc)$|j9E7E+LiVM4}nadAk60+GPD zg@%cR6cQn^7XoNV*es+Ge%MWniF7PFeHnFrw^~}H21f(8{DRyX{@V1?4bCr&MK6TO zv(KWeId~Uqwad6Ai%%N%XKZc+oAC^W7&Jz`>VG3EwMN^%zsRH zBy@;xB+~xH`_yv@ufzfi>@8ys7*(Yti=?g`db`4hvRR3USo{U^Lr{~;_Ss9tvDNsq z#sw!V)I4Q_oMasxYAd}l>i+7xcXt0Qzx>_aOG@4A?8hgiuQ#6icJ1?9jvr6gTwnL5 z2X(&M;sldgU{S|WXYiBN)v8c~%{Ur1tuW2);_+uYx%A3WF>dE25l3wnR06Cy-mbh+ zlgA_@8yi~`U@XwNY1D1!zMwaLJFPahe%{M_?&6_>faM>GHy!$dey;I!9S#{3Uu*1B zlVTsDyL}68-1|xD`ZANVYb>^61-bDj@Wd5O@Ik>*;!BR*Es;LN)7AD@LSGDKIA1M! zu|uKVV!b`TU|mW`IdsZwhuP1S*VeT+BOg^HC^He6HLXXBL1Ows33D=7$6+wL)x+$8 z39GQJqmu_9#sS{gvFUGu{m++Ch|}Q^S}>myIt>ruoORuny{KY>*5N)CldlTr-*_n6eobHi&JE~ z2t$H{Wk;wK2T`%JD`95x7A6oi+7A7n1;D8=>?se|)5r`sJE1#Eut(m=zIj0QR=&H^ zOVpX|u6~1pQ9e%I%CK0Z@NB|+-KVXV!MCWfZ&iD}#~X<7Sb+bg~UDM8l_9FHuy zV3O3d{On#_yfHou-XvjysDPdw+@$;HE$;G4aY_H@T*1!kj1!j<*jk5=jTv|>dLYDg zg~WZx#Z`Wh_~&=xF`mAaap)f_T-ux*3DtX0tuiY%krnNN6IBo34lv=fpxG_{xr$U& z8N)EtUaI1$Z48VL>o}|oW{nTO2m7U^{Yi5p)6j`3G(HQ^jt~g!Gs8`hO0ju0Jd1i! z*m3w-SHmTzl1ziJHK=9p%UpG$T`5o}fy;66Y>T6OPRagxc+o5`EQq7VD2{4_D)7ot z#jyfA=vi@S1C0Ie1{l10pG7q1?xXLA0xZT*>;!Rf;tPnAYXqhrY6zlgAh;FqSBXxN zuuu3bc`k}WXkw;J;@ZWYCTfzq(JzAX?a7^pBdcM#WJ`=zWN2ZGY>kJ(UUGLT-%8@c3CA~s21NdD3`+e^+T<%OT9y{TQ~mOwNM z9U4A~v-^5{Cq%h~nyf;u>@T(7VzW6&eq`O3$4y;nVF{b|9OPeqg_pnnP)kEeYyHo! zmopFR*j>sj^7nXhfAnn4z{+m&3a$L;^V16VpM<({m!+juW5-YRCb`NAwTWYoBH??} z#!-B?jE_qi?8YwdAtkb{e`9*Vz-s{s`RZ$Dey)*9l}JSVLTJ6dNkE z_OVxJEAL)Jh0Z&4E23jmu>U#2Q9}bJ{fr(mCS!K6iizmI>P8HH8DKni0wzqH)|?Ln zPxa8KWAGaDp8)Rx;12^_k95z88t|L|izaZ)&_AJhOsE8obDwAecLT6(YO2hA0y5_S z11ETCVzlO;2aLc}`!4N3b#h>FG;=TYK=o_@N-h=byypi*{Zl`r9RO)0_Luw2_(`bu z0hC+7S2Fip20savo#U4))ElYL4w`@G7@^s+Y10JAwxFd+ zpiHCRqJHz&_so9D__>;@GL1uw`l&ir8IX%IUjOSE9;XcIm|o7Azj&-Nu$bdClmQ#s zOc`cArp69dq7(G1#i zP7FNV=0ESmPz4#S=A0NxGhPh9_k~ygs~1C!#>)nz2F!G`?-|(W)aYIe&40m*fuD6q zFnBR&0?`Epy^(6cryKfdY;^P#VBi|?VrWt=2UP1m&5J?H8b5OeJPx!p@iS+@<3P_2 z555Up1oUL@;0)9~J;xY01AYPEYoy;3xEW}zLc0sq!=X7>7SL~0X}LgVu7R@9Q-FY8 zPj%}tct7Ygx8NEm3!OI>oPn~?saUC_1)R~nAHdZJ&gRNOWw8T2Z?Z%m*A(_&H`i;FrSB zG4laO6n>7G5BQ<*^UQoegn4E@@X&c?KI%j1-2!O2_<3eN@X&c?KJc7*WT~G*5p-cZod%QYXv2f1oc#^BHJ!ZK3G`U} ztlO1w(6eZ`WsKwsj8y^w9imnD*C(zilI=fBzW#;FuST3(OfEx^ox_x!UGZ#>UH#rT zt$3KTN3a7{4inN1T{0;@6f4metDJ9s$I6%en(Z#VNXLWZr{ry!Hke)gVR-*F=amm8 zwm64f_1re>ipVuye5kxZBOGd#GNR}ekSx1(azbBPwWYWkt=*FJBj64HgOG-i;Gs{s z4^{^IT=JSERF%X-4!z$uwzihNC>4I2vfdu~XU%~&lhLQTzcE*9Fht`z#8N|fM2&WQ z65PLzu=qRg`sO81`?~FoLZ4M$pU*^Q zRxQ1Zdjj@VP3$<}>x<;!oF(iV;RDf>DBx-!m6oC^ zhKODyndosewzUB5nD639tOQ^I4d60?V0__YA9t@P15wza{bU!x^Rqs+srSSqOax=i z(2G-H@Stpt*YO5n#u4ZX`FMV%6Z@1CTX%BfqvNRr#C!6i2(S|Y{R?A{to|<`V;nkW^enH%DfW+ z$ldrLKvWlWXsi>2+4n#at=|Edi`vxUP!Fk;5Skt zcAL8<*FKYpWGwD|ezVNbB?Fcj0}c_{nO(c=UqEc9{@HgXt|%@}$y}1b#hC|{4?t+q z7DP*H(oukSnnWRp>a+IGeX%%ZUH8`=%-_sIOq#}~K@AYA;{f_$mi+?99wWIT?X*G8 zyuTYT>*$cXe**>+EvU>$xiid2kx0H;g1MkMI|2(qr65RwT?Im3&g6HVaw;3kiX1N| zV7dWBgdixL2h}@5388>rXI8RppEoffAff4Xtjw?s+tR~NXDz!C@<%-Uj?{9$@ltob zC@4Gc=Dt?bsBUX}fZhK{iu{EyieYwJ*F-`ezHHa{W@Q-j>4>nARK&p-Dj%v%AlvU) zwG|7qT~b86El$fzqb@2v4Nzb5TtX@MuKsb0?Oa{`Tb_5WdZj;JzDv88QfmiylkK$R zy<@}XZBu&o#+7$6Q=a>+hHps@=>Fiz59N66Wd6RsRBK_#SgcF9{~>tc65HKOdL@hI zTooLH7m(g70iUAm+<43XEso`%XW9`6bV@ex5P|G8H$=Ih9MXawm^*>MU(cE?ki9uH&iRZOY3xDNp-m2m|7n z4D88A7jNjBS$HU%d}Ku~3R`^g(J_6zxtrq2i^ufOuIWKWLL*hciwQv#bmAD4kSSw| z8z4+AuP-GHpb|9)qRxkwbRlCM$A}ykD1(GaB;Z`U4UsW(G5S3&8=RO($D*q98&em( zU1;;5EZvUF+C0cWYemtZIE|5}2<6Zu1UzH_YILLx8Uzep0INQY7)FdDO~+uL#vlR! zu|sXLPUFz5TWl!Za>t)VV#tX2H}l7DumieCpsN{h&_$9}{e5a@g;u2>P?16eD#I!@ z3gBh8a=^+#p zT8B8ri$lAjs&!{A@kwMILnh*~sKPMvN2t=p1+W7!T>>7a!dV_Bb=q{9M*L;ENzQ8&NOxtNKv#5Fv5A55}2 zMPuE+^uSLPUNUiNJ*R$fJ^txZ`3S$={wW8HFZKjS;Z7ygn4D^Qy4)vj_0nh`4stLq zpzchWN@UqJ!Gzew%IpT5%H=s_PAjDD@!i;w!oTr#-hGMIEqlF%ya>m3XKlZ-PrL6q zY_P>L5Ry|};49vHQN=i3J3%{7L0b%E}M_i%PM}7({XMd)a^Rnt& z^s>iSwQSRZ?>?^J*!STXJa_BHwzA>}d%bQ)D_#81nVD>8RP+eHyk)(@lj*ewWG$C` zCJdp*H(mB`C$+?Ht>E!l^4^4liCiq|GmKoe(#NQarl=uFp-bZ~Ig!Ms(I#F|NsR4W z5N5N$IVV+Lbk7EX?yfcZPnA-oH9|F>Ja8Iv&Rv+iRw()6g_C}DV`T?qCTyd+{60L* zUmbI2sO1!&g&=zJjPd5IVa3W-whNE#r_Dsa-?8#|c@!lD+#NXR-T2mt4~%q=Z0 z{|zfNgzkqjTqvBQh<<+a{p6C+aToz1PDtG4cnE_mL-&h|>$VaH5+pezV|ci(kC&A? z4#UH~hT2l#Y{LMS?&#y#IqO7{xvnk9L`bR?g$0F2jbZCJC*=R!TAv96Kp8Ng5WuE) zh>wo|h`n_kJ2@j!{dFjG{%w+BC*?dUZE__Fdp@drvPJMv{RFH>=L=^gX;g5^L?%{m z8J)@=_SEzw6B$`ldl+pUb29$#4LN}Vgx3&}D0qH6R2tEPl;Vs;tMT!P0YBkxT`aa0 zXb*{?n<9vBN=r-M!koe@fJ=xoFZV)NXqN%M?W!Jx7H1yQhp^NMU>i}COu zWuCFfve2%KsCtLmG9D07!P%K4@OaS>f57&PpuiJchGl&12Idz98ZWKp6yuO#JB&v^ zF&X%%m*=1qBmPJtO(H}n_96G)A@^QRIrdh`zaLav<^Iy2MU`|;OwJzqZ$a=p*>v5`8^cTr9qCSy?gz@o!3%k+_1$s{h zmR*eX77d!Xzu=+f_PpZkpvA}SMw+jW?xzUWL@nwRz6gu>lhP;*3n`aWEGLilRk(e0Clv8YWZ$iNt{+Tvv z#=F777*uCa(&kF~@3hDWlDZp)brXnF=R-4Pq9r~9gmZ6b+WBpK_!KJcc@hHF4+xNq z>8nKZ3nOYmTM|8VtM?E!!rt)sskVM463A1JXO(m9Zli-t8ih4G4vvvw$1Oo89za7Q zkQSH?dhu9)xUVoKC21_lw4lk-0;7;YH9+Pkq@F1iS|NWmtt!lhE#^jW&(Gl8X3vX< z<8EHLwqE;akgCJd2k-F);-0GxZ%mbv5%t=6dZ*X2=r&Qpy?4?ty*Nt@HnheDoO6HB z>74ySZpnCQsx@lMZuU*W3Qr9%2L+zT+*x~}Df~<|fs(*g#JTmyuqv0K#fq*wmi#h> zVsE&ftPVq_nCx!|E-#r{{-7XPdy02U#O0_jkq?!9?|wgv?pz?VaLs$|?J(QpOsa-O zg@|#_1`rQa5(uM`Y(X#+0S44>#v(4qiLs76bTTIGBpT(PqE+()i63#D>=`TdH5iEndU6t|-Rl2S?Q^EhQ$hv#3Kca@x$v4rbv&u2VGGn`gIdTsFJq^V~hxw98Og z?b-Jh9?KcHJgz!S(Ue|l^)h`B+avehtn#42F5F!{wTot^K_&`Hm-x@5ztFGD?oYmP z@^z^7-O~k&H}BnJ>r-QMh|R7OfhTqeY8!4cT=nDK$D6wM5AtkMT(g=J{z_7lCJaVQ=t>VfC3RX8mb|vifZXZ z^nl?HXb~MHE09OSd-XmOKkH2pCz9$6)aibQp%1v*OvGeSvBEJpk>5U_LbrQ|R0yo~1@P zm$pr8gg@tD%q|qfH^K)=Ip&`$i>K4cM=X$B$fTgGDkFd1R?Ki(&#%!lbm0uj2n(w; z;IIasmwqHB4Sgi^P_W=mvg1L_EkyTf%yl?*Jq!;G6*@v7VpX{aFv&sKeHEWD!SW7P4Ljv}$D zdVS$v+4K`1VkY&z!R{h^l@lk4-+E^^j*qWeCNhzpMN17Mj&E-41J4t1rqVr6E*Ny} zuj$VuK*FKFq(A#D1(ck)xEI(zm3~A4lOtyzff|2bFDi^t_#2+m;?E#fhmHa>k!W#u*2mOY4% zFEnXwqLQ6nc(Uce_^vh5pCoed-#kvcuim*|@9eXUlWkGu632L2QUl_5%Wtu6iSd3l z$-TMYoK@uIYzN~{GFOr_yfLmQq1%bR$jG*rsb59bH|zD=MQ=l9LflgZy==OVZ&dSl zb7F)ld0-!VHyl}2Gqm8@v7~LU7vD69(YaH>@wT<}RqZ*bI_OTGZ@5n{&lX-LwZNjH zqQ!u;(21w9RYjZ!EKQFWQIVOhB8}c<=y`79v-t;$7cDi(FHXEFB8xl3_dsKK|G2w* zWxC(<@L2!yh%Oi7g*Xu*E9If*TIn8k$!`l!C2o&de{b91*8_y4bJusJC!HHs?g`lR zKD|rf$72zN2SQPtW?cC}!@3L>yVWSRsW+f4Sz-BF&?kVU`62eM>*O4vDGuwAWqD zI=Ztr{T9w4w@~P09_k8Vfv5c10;|BIt&6u5yf@wVdU~yw$~O;%TQ`cVkKau>%%OnU z506V2;52;85zXI_lO7+CaZ#^Rhfi`}c*A{3L(%ixoDNSv5ye^pr?WqQsSx-^ikQl} zH{oSS9V?$a-sc9WM zKblKs3GEFSO9eiI2LWr6Mb@s!$;_~}T;{%N;0W%glm02blO00q;tp-Vndtsh@q3u@ zZ2SOmyYfZ3#4W`_DP9&^D$)_}w+$nB$Pkt{;^0`w&vq_t8;O=5abc|jYsepEe!TU& zF&U%l{96CrTk@&)Bj~huu@1aR!#D52(>=Czi5xcD^k;^fnP@H+wrszpxuEL1tfp6BG7ZyJ zusMeip6U=1xBtZ<#P?4QA&y|q$;b%=*8Lr(o-9pl(IFEjkwd7~&_sv~6wXM94-%(f zMX|oKc?A#VDgHSqX(nQhh1yqV*xKvFEf%2elrCPvNR$grY%2X0v~H!@S~FWcHXc25 zvLTUJM9mZdKZ;2?m5O;34Ar3tGVjF{dG_x|?r{1(RuL>;`*@*4fwrG?>(!)_UVZv) zM>v!LDf)(o>5mIM^7rQ33-Cubnd0w=xFsLWj!P*Hduv#JG6UJTp&$)i7FM_`;feK| z<)iDh17CdQdDxGPqjT@`I(xJD&>j=UxkZ~o$c?lY3}IVL&+G<^PEN~Z^kpRtkEJgSrM24 zdU?2pCNO&ga6GC5uar(`%_iq!oS^L39G$W@z~~WTXbYp1sl>MZ2-P#|D+g0#H*R*; zR6B$V$kA+;xq0*OqE*(mJo^^y61^Uf({OzpBrTIyROfxU9k5pfVC;v8i`I-|5;^a3 zDJ0o7s|}oZHP|5%dM5KS{E~`j=_DIPifj8*cyNbai5BIZ>1LgPi#a(;(=gGG_z@<( zl0{`m?a#fEW-g~|cK?mvgM*WT06SL*CiePJX@wd=@D9}uZo<#GbILI)>=dC@6-!8r z0?ZU;X#nBPsi|A~u9O7hDpTaT4t&sHKRZeICByCVJC;36+djHYjM*QL0vXCf+#nhYaUh?;~4kd{R_1V;Df zn3OIg7kdbG0MfF?InuIL^G}TjQWh*~&c)#vuDI5wUpoU-(qaLg;)6YNPU8Q&MYDd&9N zmMC=gme7_PVm<*PcKn$S^&P*gS_o@~lRu0iOB_b^>b9Tn8ZM3+K6uSU{E??&)meXj z2+?^Cc3NZ!Li3Vu=&B-Rt1u?@z@loy=w6pM|%mVq7FJx5^_!Mdo(_G~zEYSzwYOfmIShMTSn1`jO)O`Hm8pokT}nOsWZ(g;Z1u z*VyVH^tOSxKzN>5yxyVN?dI998$SHGacFV*EXc#S-3+AX35qV)OVxe+p5sUR_9q4A zEBA+k6sMY(vcfOe7aT4g-Y~?|?dO;|YWHzj*Rw<-d|0Od30t%k0QIMp-288mb12AA&3({57Pfy(d(}DRL1Em8_%GlV>0-$x;XF<&K!1L~hI+wg^ zirny}knm35k~=~!rHuDnLn5E!$I@hWwWCDaK-`K(r6BbF`|(dU@V68h6m4%ECYdRT zmNulSkKNixIW%0@sRY5S32PrQ5uHUlj|$T`m0!jlYf%u?DU+U=E|Y>r03ro0zV0G) zhSv462rA-x7|o3sC(O3mP6g90CPimakzo>BOp9&!pTfRlp|UZU>Y`^ljyK3Xs3|c& zjzfZc;R|qLe(LIiiY^w5mv4cW9pd1srNBZ@fjoN%gkEgFfOy}m@r~DR1Dc6stg0>y z8tL5FnNiW`0qy@yqmZW(AY?x@1(vN5bT4UOAr=km;lbP@J4>xdg*$7l=tDS%$ko1$ zEv=0bN)tMQHozjdNRi#nE3R`odt$GX97&xJGI&KFa%fy?wjmcBwA#x=To%0 zXBhHV!)rO6(j2I3b@>}MzlGI@G5h>x_q{K-IBaGjAB$=UV+Me@ zS|tHm>gP6$>Fz$RAMCaD`qk}jX5zGcuc9yi^P~UnI=D7aUvjbzj4kRTrU1o@-+9b@RP_C{Q_T4(f7&MPrep1 zdUQI;(4xV{@aXL1xq@Zta3TiaG+E@l*0kFjX*?buG$;70~O&Q`R7VtF(m*F%itN=@SK)6 zk)y%Knk%9_efObjcx4$rQe?gL zuzg8`{>q2)H;3#F9$w|PDx@aA;oii%2YcLFq7T}Xi2f|K-8P&TRo@eJr=|I9YWK?t z%iV(tb#_kg_Baz%)Q)L!tTxh*mL1Z>oJn8)$(7h70DJV&FcayAzj$`Y_ekM)JnnLqClNeo1 zrE$WmTVPe_vDq|dqWG^7I5g_U$G<^Y7~OObsTwk=n&OW|yT_xj;VP4G04&0cg+g%K z-h^p*B}noC;z4$Sq%~Eg7znt)rr~rf%eOuDOrkqzU`-a9hlxqx-;rztJqArfr4Tw& z?+}Hv5{0P^A&SND4ym1Xt~V!8tg`tJX|sDUj>@z9f6<72=a25M(z-z+fj4 zSo*qp^vhalCN0RKvcu@oGollmuM~)|pWu499P5#FM#nv+?uCjE^>Z(AN?` zDyFo|3kxlidZZ|e#Kd2_BsOGpQH_Df|+voC+D9@p;=G&_@D>HbLnCqcKT@Uc<|TzSamD--Ei)R!2|uP2@sQ0d*t zT`Q&8ZubiLZE|eS?Y7CZ!Om|>8g=btauO0%3_LdEbt`shkA1(8d)&*IJLlX}`Awfv zy2Up4X>&^mRPm-tzK^$#^m~7M#mMPzx2q)F?ru%|9y3b$01q@;^=z{2XxB=->fUEl z!_5_`r>gx#wBC|M_ygE71bE0x_OnGFsOX4pOIU!R9RCRGn@;fAw);)D)Xx#4w@l<^ zQHx@PP0ndi_?ZALo4H7`Vj7r2Qg0qi!Kd^mFa_g)9f4553IvN3m;yOBh(FLZD#WP0 zvnoS`u#Gj7va_lZ{n>c+?>N{w_&~%iHEHxK*j{PD*Lnpyg3o|03xObTQR9!1T_Cii z7CQw(0ELdo4tYkI;wI-pQ7u0DF>N(*J7N#5~jblj-XT;5iGZwS|9?m$^ zHh({v&bCe1XDYx)#?%_+&)up*r!d}o#NyACbu(ym7Rt_;8+oo{fyUVa;(tJV06qSP zT6R4-#_%6e@{zyd$mkLN`oL(x57sjRIaZIJyG1;4S<0U~6AduWLV490EWS#$Agu*f z5IG=<>`K+u|Hi%kwRr^t7+mW^^SGpLm`haRu;roy zbHneqo`O? zD;i52fJd%gajQJ+3wihF($BhNtU1~gB2Z9{!^FO~(7VzQ3IX9ijG|kC-NdaYmadtfLn<60yITbhLQP940ym)M0tN z&P%Qdo=JOYVYKF1ptL}FX)jP_z#XGCUuG>(W&m8$nrB*?=Y9fLsM#p~hVY4cm72<8 zmgR~1j{1vV^I%X<0SDDzlV4Cj1BGSCcmYmvR8lD%^%poQsT5A_Z^)izD1T_v9LR#9 zrc7g0p;Cp+y#Mw1r_X-9{`c?c#7%$yt(mL;$&={crT_i=`~TCo7_T#)F_!I5*Z%(5 z|6i~ELS2QYC7PhGZ2BGn{^o9e20nXyeZ1Yg12CGa41BzN{H%PPT-;U}x&?W-xS9Al z1+SXL5gQs<8@jppxVo(}b@SNe9spRjR93Bb^WGKUj!{*`sj0293Um$#_H|ojw#R9g z+bV17TiZ>}yWLy@R&DWcrGD*KPZHD$b;1PK8k-rz;B0W1DfkbAx&*Em?f2LTgKgLV zQ-Hx>TrebD7={4v;NU+DE(znHy@$b^;Zk$&cf(iAeuoWwM+F9sFfs7*gX3uLMZx>1 zC=VF>>~GV--)iszPo&;;=C2+Ay}Mz|-F*Ul{M~(gF@Qr11H)leu&c3Zs{wlvPKEkL zMHPG>kpZ819?(=_8Eo|X!re0vbMH~$d(?lNaKvocIDaiae8GJA;WEFLAJoNcIpNFL z=I+gZc;eRP7ZeZ>6crE<5TzajL}z{?#L5kz zQkW1I%n?RLz?Z<-gy0AvIMe~e=7K8V1W-y2IPKr8$OzCu*f}_nT--dopc^n=gu~bn z^oxQpI6EA{#?Hop3s% z^GVD55u2Ssk*T@2Dqr@EYM5-DveU|hg~Y6;3L8wXV7oV)zOk`1iHT>SBaOF5|pKrT~z+yn}dwb0dQvwDDA_goQ} zmtgsP5ukP$AAe0f+|^mv+AJh z?XL=7S$CW}<9WS)lS|u*{JI3oleWg#Yx=7*PDz5oe^j1N^ zo$n)(QXNljT%Cw`oj(0G>$di%E8OxoZ0sF&W%_SeIO=jIVAH*0x^X2Y6!nsU7VCt& z8Ij3y1KMfk_hN2bZSgl~{iZi{jd1$=dxeC`TW3B$ENfez@Hyzda^%`;M0KqUM8cljvRJc+-9$? z*?i&Z!H5KR*8ul-?{9vtT-u@b zGquO&W&6vt#b*u|Sd8A&O?Z@&(qSgIDE+d^$`PNSm!5eXRmAPzJrQTWx-9yUa>}y$ zvy$h-)r;z0zqYzwcv$^mRkPcHJtN;obRI?cK(M&N^UjA)NreA610r(`;Kz0#r)1Me z238QPvFOLUPlwS>Jz4h`O0*PSw0^hoqFPHK=gYfMfg3$Zoo{rG%3qsQb&Fbd<{YjX z^V(^Z=f$0!Q^9UZp3{;gX+O{tgb%u>m9!3C6?N5UsKy!jFD?x^tZs04$9vL|8&k4k zCwMPi?(@2N|4eni9@?ni_ovF&sj7md@+Yl-K8*GCzl_nzN;K`beEPyWE7;wa_>Ofq zLk#TIqtT-m?p1zylrUU;n^HuPu)qBI+tsaG-!w1T|3dn@=jp?B2N$V7j5k}~1ZD>a z1~vV7l$mraVS~@Jof930#fk-`7i`@V(4#9oc?xx~9}@Qw=_!e>rxY~Lexy1o5% zhQGqS63^w{FYWEx%$91|O7F;abKPR2ShPy9$>pDuhM#pGs5oOg22*&Yw<>!;;pZAmn?g?Db@i|K3QbuU;%ld=qeK$+$ zLCqh%JV^k(QZ#Vmi9L~*ulzg^S=7(Z(eN`Q=v~gotZuhX2mh@Gu>IHVfK~)nwYDqd@ z8d4s=Np%A=)`VE9NOMa|$zk~-v^#yDKZdLe zKdqxcNzp3HX{Uf0??$tA)Yhj_$D92$)Ni%E{Mz#5$=ARQ0S7{|)JfS8tn@Ii&)xGO zo5d-)OVJ*;{gMBNz4wlaV)^z*2b8FQWQoF%hn$8Cl0lM$AqNRV9&$!NP>?8+m8gJ( zA?FMtL4xF*L~;hn8Qy@N?>*<*=u!A)vjH&t9DoQ)c*9Yu20o`llr8` zcJA9HsuU{u-py-Yy|u?G>dKu%N{X_FuV9U-?N*I$= z*^x7~opZgjqC+v2HQ(2Vud=o&m5$FED}_pq_<57UcTfs^k5>5Yvb=I(I4ZZ zd$R9@xF-fK0Hvo2ss*E=zYa&?~i?xJL37pmk$ zt^xVciGJm^sS}s)PNTAOdg)%IeLpJctGcRMy9S7z(R!6}r8(R9GQayO&;!P&f}zJJBn6t=j;$pI=@>1*s=e+n+V9aQ~s}ZafiuCoMj`C5} z0nCqU_FQd)^D45x2r=NX&hBPk5C7_7h$+q!#GFT6PvmrDf%utbcPSqas0wE*Z}FbXU$r(tf7(%;ZGNGxc;e6;`o+Yioypdxknix$1J|mef>m6?u@F zA|^3gVOrd|ku+O}o20AzQ1W%Ho_xt{ueS}fsG(_1O!lI0-^gZ2o{ranwXaz3Xi`t! z=0#3<0Qq3MK;OX5MLTCUUgh}Ss)MJ0CCtT+%mw$8NUY&oEN`YM3_rdg6Ku@5g_ci`;A+0DcL1rMq;u zR?CCmw#$EhZqn{-{Z9L3cq0Ec=8$jm(ch+F|0e@L>;>RgiCDL^8>7(UmXqW^amw3L z_iy7Ew^zgk=~phy+c?6!z2RZ_RUgb-bN43UR_2|9TOK?BFX9&oz>2scjMSU(ZMny{ zVRD37{=Xh~R)5#;mJMNO-{!h|V|)W{P1s-cK);RO$Vb!#`SGvwcTP$K_3yl-H_;O~%7r++cbOqP~>=Cu*ykWZG{BOtKXgB$9%K7K< zH-`Tt{I2Lt+|Je37V&e_AXF23SHuVM5NL)eBKA9>5eX$UeN;zYZR$V>gL zY%~iedsl~lkWlTNtSqb$sE#WPk>|d&`c3I7w=_f?%h=V$UKVNxbuxB=njr{)8?5Fx zGv+Vm8_G?JJj{X$@$-MW{dZiQY&E2{H4vhHEB8kE|D-56TR{IoK{d8@(J;372Mya4 zipU4`aFKVG(@;`0vA4IqDG>cH@;{g{EbX1V#BHrC{?ZiAug1&$MMmUAL+qh!>}usVsQ(o{Y|;Jzsi@8{Z9fS3qToxzugq?V(*~h>f#Ljd&j}F zMRcV9LA`Hc?}F%1|AT%Haf>bgJNxZ31NTM{0O|L$;RX=<)p374d+y&vvECytH_Cc} zIG-Vch~Kw}AOd=NhyafMH@NN()bs~xLLh8^pr$`i(;ukm57hJrYWf2;{ehbPKuv$3 zraw^AAE@d7L#XK&l0uCz#sB~a;zZbS000g^9AJh3KuiEo02SaVz!DL5L7dLFAqNBp z{{I696@U-G2H?0U@Rx*Ns0$hbeL=iuM?$z`;K^CKxHt&1v)ehd8Q(Zau$kJ!*gcFL z*g4ra*a5;~9tdv{8>kDF2^4`hh%oHbH8D_GnTarH@hWjBIY>e+t>nC%pz2=A8m3-0 zrUGURVxpMBVz))HB8p)(x3YDCIyqB8olQl6l4`)4WDh|^3JmIEOyvQywR0Bq5Mj8@ zAczRxkl7iiZdqJxL>RP{o>I9WjC>m_ghL7&KN}Y-H#ZBFxsx#r>Td63L&eF)%YZ1- z$;@0(O-kl>fryw0!|#TOFMt;__C&CR&XjG?@& zU|tRrR!&ZY6n=9v9#$xaF&DQn54X8FHwObI)nDy4c2H9K-zENa2VgLEgj6ajVFW=* zNl?n()D?#C<&l>X{iQK8dsBp1hrgU!{;B}i|6K)yZ|?6u3qv%E{YHg?A3|;Euq2{vb!_M+mX}0r?Kn4Mg_)Kt)4AzjGG@8R=$$2x5H(Vof$O3PK)& z5eXp?fQpNTM~zPaBt++=ArdE6<&xm0HFkXH&qK$nW}*Q`tf@f1DNYPW-2AoM zGh3bP5q-y|xM?k1$ZGUM$;;snFQg`vfOj=8lylk%RUJgtsQIGiFO1>3d047KD$ngD z8r~gd4ScF%tI4v>ht?m|3??UzcqrQ}cYB(3z(TOf?HE4XGvBxCP&eJA%!Qafx6?9R zWzD&7*Pa&|=4v=g4*ISsjYRy}V+kr@e|EKK{uyJWmZ>oJ2$Vydc$u$It0yBP4J$_r zkg~!eK2^%rQ^O;?1`z0XF8o&4f3=$Xdf<19nGL>{tyS2d@+O|B9a9`NXL^-MXW_b8 zmp@78qI>_g44dyQoO$p5o!DJMnjb_AX!-W;2_L^7hgZAHbcZVxtanwBJL?qqWbP3@ zPk|+{rrM50xha?oGWu7LWIUp4P{qZ?#ebzDCDk_#Ww#$uvu3lf6H#y=Rqi(bDL2kY zNlZD$)}ayGW#I83(-YgXh->~tFmJx-`3od_F2MwAnTkqNrRlZr8{6&Rh|eP{)seEr zs7=$psh_1tlL!6YKYeP5q@gtdh2XP3NA!pPYT!+%?|Sf8BU_C&33LlsQ@@r?e;KPd zvs_{OzTI{--x}T`muXkOpGk$xm<)&S#;(sE5nC6PeY)FQ)=wcJ>y6yb7_k*&CXAu3 z*^T`0L;YSfeR*cR4{orWp#pT_qH=GYu@xe~|#e z#qSvc&fyBo;c^A7iiE;jD*ag2s9-c+ydp0(EBf`znTcs+S;Y()+KOCP6iG>f_B^r& z85S9Xb8?f^!%b0y9=VJ??k+PM?6d$ zwh_l)GeIE-;_4l$u3dWNFzN+psv727&I*9>P=Pmj?#+XcV{lP~gY;g>#xECDYs`5fOyVn4}uj?llgevX(XFiR>BAz{)|4seve%C{{`i~PGnRMJJm>qHn zweUtOP6RLszSD%q00S0=9A z0|kAm)D&%!ng98s;wO6KvCC6fy3zSY)C8`XwAv*YorpHkY((-={re`*4~{XI4=Rblbj*sTKA+L zp6(<6v?U;!K~!zz-a+t>v&qSWxqtGq}u?Cwb9|zpBMaJb6huq$*}KVKp~9Fv*iYKCI1wM0ne^XevDarK+LS?-q_cPz^e5IjpJL)XuFhqYEr5*Y6MM<%5WA&E=5~Jjp5;^i@pT#MynEX$&(Xyp!K)H4#-l>Xb{=rdG8R_f*@&$N8Fhr7r!1Hi z4jrJWlw)%jX-w+(pjkd)aiikhBR8phtb_R#*<}*N7-?A3|0`14bD;+NQu#FsQ<-(j z;qWaDESdOh-H|%W@23O_R=6KuK7@AC;=dFawj`K(3!HfWp?JS-k)}*8Cnq$liyaQK z*#4`Yx1C7rdi2**>DSE@9HN&h459aVmG!JSXhMX|>?Kj6Rk5<%x1Og`s`zmbLwv@$ z@5k7Kb8kLcS{| M^?@=c@kpVsFm3S%2PNVNVKzp+ePuh!3N~p^2G!R8WzEQqwzJ z1!_N9yqpQMuX^jewVAv}BOS;2UFk7F_mriuuBC5~o-Hm4L(NDMDq*Yu z3HW||+o+*c>n?cOc0lS?l!u1KoKvL1Bj@!U0RzRo&BT|_@n^&wnWRhu*oR|@RB~Ai zaed#F5@dLx^QcNjcOFGfkhWh8|IGGMB!g>(inirW7CXT54DnQV_Fn4_f zGRp+Nq1t0?6h2#081_aio$+z)-_p^Y5>J^*Q7_#RNhAOCe5ZU?JgKnip~!1SoqE?>!)~x4{7~$lUo42ZejSF4xeuZt+vXJ4$%o}7IQ}XXI4-*fF zHlczA&OiKeF~gplZ9JZ>qhBfUdo(@1Nnd<)d~)tw1=GdIbPR28qg2iWr5A8vGx@8$ zeWV)A5Pk9?eTlc=NX(+I_<{}Y3mZO*>`)Tr-SL^e996)EOcdDQlh|>b2QT8r@P4K7 zb{uJZ@SJ~7x~F}W0D{z1fxmbYC+vRlcvUKUxLZ1FHoX_Rn1FCQY>jQcX{4S1^32}MI|CN_BdEk+5& z%RS(E`V9E}qqhx#qoa7w8sPnwx`jQDzjyXy;iwq`zJ3fCnp%_)TDB# z*YvRcF`r@On7ebJDdQ*AEsf8nh4wtXw0d4Uj!%Pie56_@fduNtKO7VIRUFHtI+%{Y zog)jo=Q%V2`P|#gK0Vr9C2B*g+0lfXYBZoh@s-YN08MBkNXqddFu&oUPlzHnJ$EyZ z=LNB8hvnPm&pdm0c$BKDs-Dt{!#yk2ZtFsYtrag8gFt6vrC#R}ShfqCy9K6Od%Vj_ zJ;x!XK1xxIsy0&&C|IfJ3UNKvfBP%&yO}ux&y}M-?K~YXoTVbVdoEeUCv;@>crRn-<=6G(boD zEo~094ZI5^N7l(@tt%=)##PA7!J_E4(nL{NBWOcW1P2Gb=Vxp&4Cb$EJBM->?I4>3 z+GI9yyKj1eaK3hCWiea-MDoA^27Wki_mRr3L8o-!#sGp_0QQ~c&Yp--_U^Eu#x9#rD z=qrSkhdQ}?t=-v*fq=rLc}(%8xd}H6%)g0sO|fb zb)Msc;^Q_;*jBA3;?2cGSRUqjhCeYdsjBHIX?zy`Yifa5eT(Q#LcZr&s}It(?eu6V z+*n^#QjNuaeX1<=UWJb&UI!+?cYnqM>4B5hG1kkNl-Tz zDtGE^0$ZLFnFi8g4JV~=LilRUlz}THtw2m=PMo~x9(@@R;oCY?lWAoyA>0qK0#wuf zo-Ofx$V%xa)o51|65r0Yy|VX~U1-OtiIxw|!rqPs4lr3E)0DjT60c0o0VKD}MlYoC zETkC%-?$rT%6_Vzpx<_YAFd1TS0#Cyy!jI3I@cH5(btLkML{%~CY&j>2t8~)c_P1l zI!M#e9q;5{V`wV>0a=QE7effFbUZ zs79dUH9+k#eG>a$b4pWcy&}VPAAh1dWONn{T!|7rW9%6u?WOSdKa^Y(?iv_&4S;u;9^K*c#*xNHU2uaasxVsua=*rH>B|g|-!&A7Ll^dWp8TfU zL>W4u;;dRc^11$Fd5Ei$Wk+XzWx!9l2Gl+uoFYU_TKZf3e`XH1whV8}UWU#z zpK`8}k=$_BR+XAtgJ6GpYm5;gX_$1`h@Jws5QZaKS|o1YT|$W3oQS{*wL!-4dEt`H z4ExAPUnKF~oqX3V3c9=1it?jS&5j0!MR}vQhH?=zA;|5=2|ej5{jbW18S=gFnHFCp zqgCjMI7W1r9`r28rY^3xD#+C)Q|M5Hhmo2tcXfG1ELVFV5nvF+dTJ=z?Tm`Vfa$l2 zM^;BQ<0(SE&v=g0Ddknj>kiE&2`#2x8 z-W==HI2>o_kRhR*{w)~=f1a9Q4l+8|ZN zY!NW9m<(f-?F~e~dlO^&HL+q}z>zvYmWQq?wBSHo^XGz>ow?fUU7a6U|%7rer^5y+G_0 z)5(r2&Gi^Sa7e>VCk`M`18U$(L!`Q#=j}y$k=^`lMlK<=3Zbfe&tQDtq8UQF94m;e zO-Y>^`|%WL7p57zf(8s+TwEr5qn2s2#oS7$W>xK7?K4G6)jiy;ujXM}Z=Om#&G^jag z7vv08CB{gnq6=rc|~RLRwT zNS8v8)ucMvQf7;`h3wT^!=#D8agzkqLPKmfbi|ch<5(P?q}!))6wu#Jb0)V z8l2TsXfMyaU_I;n(aE7m@>W^~?7aKwXzXIM+(`NEvnRfHJLUHVR-VEhN>QP{4Z-4< zI*W1LSd8sD;rjMeS;H-r^U(l7Glr_bHK5U*D{*tXt7O=1`+a}Td>eD&+;~3I!ek#B zWrPuBVYJWi>&~EvXpabL8YwUUmXj%yUlP~*UCm(TxHS5WrGcJVYS7T=!Q4Aa~#sgNp-b6TIF3l z$P8(ZeDU>^xuC;EzRkVm+ucA9HAAJ9y@?qHrP3|w>@fF?H*F2p73KMr`$Y15vN_`{ zMxGOFf(1Ep?gl=wNKj#)&thCs8a;u7Ro;47EAAVxsL4}rwgh!aZ+cgKi}`l`B&6}u z&))V8)X%4!3KrF5MKgDea4)&WZijAHmHXz&l>goMy#5PT2{qN@Zj`M}=Aqdp7JEHs5g=%;6jdc4ZDq$=-1uhI1Lh!mrMKo3-7$*4f; zqQwu643t(@Z*6<}IT&3Yx?MYk#lN2wQQnbTYjcJk>I82(Qp~LFtD|zGnbh^kWSZFQ z;pMw(P)XS7NRV7Ym!D9~V}0%}&0@*~hzU+zp?scA;_+)%C3b^4fVQXCYq#e{bcfl% z3I$F%tk#8;g1iCjLcsWT)_fkW6l@c!@OKf>AJRP;fO%h5u!lxiV0CDkwv}XAEu`JK z`6*SOwe?#=A9S z^4nmvj%~1{Mbax;@A8L+(mO0%1GaIO#4S;XUukH!mz*r+tqZ<3Sa&%$?7}__s-jUD z1!p)_ZHGv*R{H}R7SNHK?}Q->G^rB4D`j?OhG}66h52RfG0zvIpGvRc@4mSUU{VE#A1{KMp3{a+`V*HwG~x?79Yc zC21uNa$Le3g;1Iw(EAtfdl)$47XP?PZnUydPK7rXbd!LWko--z)p7lOhVRZ{w1y91 zIe*O_9M8VwW_YXAS7gQKS?g23vaD&eN>r%7c8=m%$wjT;OOUuSf^zg7+U&+srAzHt zN_npn_r6q6NzH}LFpT#JmIU@dsZHE)U9}raE~HmWfWF)8Uded8?N^4!v1u9yS_Gs- zEv>N+5ZiH?GYlnm*WK-2F(0ocI_90CZAeP61h6{VlwYB zoHDfp(WAHv;Sz@3}vb9UWFlb#!57DFEPw^iWz*8l5bT%t zIqoj(RLfBTm^yLseg+4JbitSI)>ZaRD<+G6C^qnuNc?i%Ft=5H)=4ZNb;V8c)A2p? z*Ws8)$l+-!mD8DOM_a7iQlmViV|lLCm|uE5q0^Hc4vT#y@e%=Q*@~V@YdCnA3`wux z!NE+Q(}Cvp#(gDOW&T=RBF|4tdfp8|Wd#(=vr<7apGC+c_#p?fXjiA0YYmw0nyxAa zuF2=4U@gI8{k+kP?_Xa*7MMbFA|#=M;ZD#Kk~?yrT0)brk{PmeJleU+XKK5uY*O%{ z@Y1+XM<@!uBcg|DFQTI|+37+!Go-D})Q$Ez_87B8VR?2RsyWXLJClqo&?L4&8q+oWisrxk9qq$k9X-*K2?w zQ1WD_<)dVf)O7a9alB*}?|@XebcvCD8ny!aFQC-opU4|R>u-C8e8+hB9n$LG?w4&p zI`P_WK#ESVuwsv7kHn<0EEJSWQ-w2xJqulUg%yIQS>hs+U9J@7yZWZbu68PGOGV*J z%-%Cb>b;h_yZ#SIcBsXPpdYmZ>7WpX zw?!W@fFYP?q3MW1LFP8MmZsSMPe|KxPWP7bMA4Wac$923+i|K^aN2E?n1$Sv$y}(y zY9u-(++1py{WZ~i>r>qa(nmE5osCYe728RNkM`kR5%BrONV$uU4OTIOxAxDg=m(AJ zvIVSAr8)yHUi(v)#m`0yz6yRa0s7z=tza*ITnV_x>j zBhk6d6Yp8srkhX2wD8jJ{meP@lSnCtaq*taohncW&V!`Dz)<^!A_JU zern3S@UQNooD6&NzU+94SKTO~!P`KmioZRGWRohE~cyhecATg z9Au^d60da7a>0h(W*EaR2_1#SF7ELBHDLMcwARLzL@~+3T#u%$^J{>sY}9NNqBaBV zDi0?p(jT=|xryZDOq5>uf6v%($kZj5+bb`%a22G}hOhE$nmv1V;Y4MGtN9cn97Uv# z(p|oZ#R2V%AoEdP`c7Py7QSA>+gMN96SIZJJ4@|aojy6j4DCV|`SGECKR$aN<$`QG zHC7c&J%NpS4H%Dlqobln92hmj7Ee`sTD=kY4GI%ijME^12uLeVvY0;X5t*t}C@1T$ z3oGaC35w4+w|DeZQ5e%iytd*zm6oNQs~lP;;!GCMe1(2Mb;k;wGMpBa`J}2nX4Ew? zb0Uc@`IIc^(r&iOwSJN+Kf?-gZ@$%5ed;v<1Xnsp6)kp8jE^9hnfZ2zJZ!gdx7$!Y z95I}lPJ!8wDNdyGa3763O)INhCeAY|t6hS0t=;XMS17=~TEp=TX>cF(YW z)OOXHj&>3*@5=E#gh;MB^4=!L!V|3OH<+Xk(%GY(`vj5=jC7bil8|gF0)3ETBT%1ZDDxN#$bIi zu8$saW5t`@w-9M!GtgWF=iKRZG7ja3Wymbvk{jz|CQ`o$aks`nGYZ_aRQy6M~Xe_XjwiPrvU=HkV!|^&Ag47?qLIBu~VOHJ|ax zz=xGN-fs<*f}nf0aZejK(~EUR6cYrc$b?pq2J-Z_KH`OCGXu2MlJClYAvbgI+h|u> z-LZDltv=>)miSUBFNoD~ms-Q|HAX@b2M_)ot9~jDS_wQtJSh#0ZBEco^&?r6H;`LqLB0bl;!}a5C9I(h;OjEXCj5X7q*H&uE zE@_On-?5DZ50+d)8W#{1hdbw4lNB|Cd{;Ah(cq_sA$O7eS-4Mdg$3-S#!ixB5zHd0 zIuS>g=^5PDO*AT`A~=EZQf8in8Z)>k+WC=l?OCY^YkMc3bD&m{>R3ws)D(dm0e2Dh z^DG%(IWV5i!5q1Jx)q;vuxkYVa4Y3z|32dHwvsp?+dJPcp zC~ZzGA_rpbr_gS~*mvwURy?M__Zxs*)%z;E4>G09GCST(580ZMeJj7a5D^yo4ERJM zn66z*bBed%`}>C1YPDg-0}UWsdYCb(U~`iJ>nhi0ERlOtZ(AbZ+1bE)PUeJpOyXiT+6Bg6LZ(fOfin~eiFj~#<32x#F~XqAL!VulHDf2g{#eRCBDYB z@nKw5ylNuk(#vqb0=Xt<16W&n|78eu=d+6-^>2@?MjI;QzM?1b;IflP$!?1P&6hG) zf714(*o?cVgOxO$9nwfoA#e497W%3~ox8LZ>=?)<*M2HCvNP#-HVRJ4iqeINZ(RxH3vb-2&<{QlJ>hTA2N0 zoGBF86=US=vE-mt!Z=3|ycO1BLok3a*V|gp>Kl{0<+pk?!Cx(k@SVxcL$|TZiftdW z_%vdTBzp{g{Ol1j=RNJ3TQWjGN~PlRAcW9)LuM<*q8Rg&)%z4maE}}rI7RSTDXYHP zdmb85hH`{GTGV0X;i4x>jXRY(P^3z*)p2_cLdZay5QQHPYGiMJ8 zOI%XedYfkt+TEwc-22R4I=fR{C{xax@>)udjIC}sA3o}5^tq5s#IPLk9nsJbCNoZy zGFa26O!il+!M-{EXF$go;cWLyu65pSk&H1GaNVJzMhHy8j@F}&SNl=g=Xl=$cHYid zzV6EmAmL@UzG8}1T?FNEQS12ODe5K@{RSRQJ?8Mc=nQ_v&Jd=!vqaC=kCPmThvf;m znVp?=ibfS{YTi9yrb4R$sVBoRK_AkAm`u31AoSq$Tu?d?ROoWJl^SCe0fNw$J-1nm zWoGOvKG5Mb3%&#Y7Cb1P{ay_AnFs$a1P|{TzyvJxdx&uNK)Boddx%=hTPDMK+#7#4 z#yG2g%L1~d2Mat}Tz`^ln`f##Vz>60oY*3u))?4a#A7k&!z0 z9P2&viu#JOv9k2=+Mj86S#u9USEFeK)fz$RHMxSyG|KPM>&MWa(1$!4^dqfG5mLPx zY5=>&V$>BG!g}2#xgS1)MSx>;{6Reaj?K|_o!KqMOq?)WN?m6>iN?wNlMC^Qi-H0NiH{Sw;LBwMF<gt7V-SdWyn23&qzYW@L&n;SHQ+s(g2jE>0k{;;hb9Yu|@*Hb`}~bv1h8 zk5=|L8)qu=i_$djKos>>ZJ`un<~^aPCtr+Iq56+p(Vvb8%jJ{#rc7_youg)&^uAP` zps2`odjV7I3Z9)x@BciO6s1F5{yddI-z`w@@&o-yRm?GdYiUlys_)QM3sEGFR+@3C z<(HD`v7@7Y=8wG3`WiTkt%64L`AC+?43|eN0d4j8(@f z_wPu4mo=VwDDSdWV{qR!Y|^i2x&+r{RQjbt3+BquV*Oq+8#1w)ox_m`^JmR<+YD?@^mQ zE!=VV#^gjLuSGoz16Msr#xIIv#DBL>wueWn%BCKv?EH)~w#xFbpmL_#rSVc6M5=#q z)Mn~1BJ%PLC+QcF0@^dJ2_1wD!1XLfdVt+>;JGj%es_mugUYV;aiK|PT#j;1nqT>< z+obQb`r?yFlJ`Uj@kuy6A@i-#E~Ig;tRm?$!>?O5DET`f?y_5FkyBc=Sk6p)dR8b!d7+#p7?bbX>1;y-IRKZE z9_wUqK?TdYD7Nd|G0th}AHO>q(+QurXMUVeJ?Fd%tl64MKSw>*-P8i%8(bMp8hrY+ zbL{YG;+u8tT>}Z3ss$q9_zeTsea{F_5&572tP#W)of!nC3}2Sj)Jy|=ooZYun>T%I z%Go36I!^mH565E*?mp}ZcSO^5JfkN+R{E?V$*DQ!|1DDGATaACdp`D_A_mP6h0SI0 zu!V%rF=cTPA2Z=Z45?$h`0M*t3%=vb!LPELcfXi--+F;$xEo}h+f5j*`_{y7Vnlt` z-)w9)ZA}_8;g6_(kO4oVNFI%h4-}Bwx(0N(AHJCmGtwJlawQdMZ^pSgQvT=n?yM{&3m?NA+e2~tG^U2J-RV2gfFZal0I`mRd z;xur}!a)JF$pt_#y?7kjC|Bchnn=H?3Yn0ZFwft!k?3qcV>?qSL zgC3bx!CtV`Tsf@G7(%#mH{miXl`3h?3&s{AP8#r*0-VGhWejB;S&LZ~Zd9ZH=Hr`f z|6FZc~JQNfpWe>9{(wyS~OSBlrBBgHig0Cw(3?dIE~c z{hDy9a3Zx7Q?-{APbJHmt~(Jo=VS|ko>Jo?+>1Z|bQu67|t={QGD`7{Hj-^!B0 z88q^f-BBf3@6PBHO~u}k0b5qkk>YxFUt72%_)ZD*#nG&n#A)S{UPtB|ANl!4nloro z_=h@g@9~@}1UmY?;X|^Vng$FhhZ%pEmjk z6P)cUs85M0^`dNPS1FRRR?or?iwTH$L<%X3KhcdQd+s=-*LW;sN*RKvuQVQI3zqxj zHW(h8clO(OnqoDW3@+U%(R~eA?1(TB&(-6md>m^Z%!WV3nSR0%s#Kip5glbArtBVc zI6lRThhx)Rr7VKv{sn#B9a^UT;#~U=%E?@7fxQqB0c<=|D^vLMwbT(Zdp<0+X z1mPa0zNJpBbTxAXv~j_14pl{>BC3$I4tS>AC}nvVRv(?Xzjg)$(#;`;V~_1*U5kaO zUd1@iRc#Dgc;Q#Qj2Twi(&4+&TQ5d@dZoZU&;oBKc~6c<+(^d{q@$0c$2Tr9nzHDv>CgSQGJ$SrM)I+A3wBiypLemb%VeZ?SNyJ|;@%F**ZPj-NZ0gvRODvcP6GsCdhG3aGpN!>9TE~*U zqR22CW6pJV*wj(WOD=R$itivcEn%5>qwLQln!8%a$iwnGf+`9!zxn@OkM7Eo?>-{kT>g_v%~6eo!Kb@r|3lw zWK+V(lYChiQibamm5ffgPI-tHeRW5BPu7O_i(x;ig44*2p~e+)k?hnkw)=h1@vaLU z)rjo(T+m}ux;rXVTquk3s-|3L?gdMuBN{}NQOs-bl#ExcBx-X^nsTaIA4MGvEz_WF zcWGctoODYNLI}h+zcx&=V)_tv1#vk#il8SCz0_1x@RoD@C>384FXi^5J$4uZn+@uF z7xU!Ri(vgM$L6)(hN6TfCG#xPoulVjEA|*%lf9;F>WMx98@6gDU6wq`L=nqU-bElNGTAa;BRa#H{0_hog(Jgd+a2o~@LgEkNDB6X7}bKi)3f3|-^GN)c~8<6I%a zL)W`js0Ag!c6H9j-=q~^$nBHG$5-Gl`2Ui?ljd9g?o*@LdzibO*B<_zt>0GF40v{w`Q~s%4^14BKhe(+jBSFcc1{dl5agIts2xu zpR^8Dc6&GKh#GrZNH@kRwruf|v@%r5vw}<`(m}beT-hB0A83u>M=C0gSDdX@I_I<7 z{P^<8MZ4xbP+f@^cMx@&XptoPp4o?0JZcd8UFI{8g^(5@&ey{DwoJZs{Re?kZ+%Mb zR3G98gp(3ugI?e=M2ZIIoza^)-@IM9ou2Xf?cH4tIzAaXme^fin%N>Qi&tUN*~%(% zs4#L?yDT!@rtEv&aNvE_cXq+8X3vfpnSH=CB{M{0^yX1)$xy-gd)o^lqrtCby4so3 zrk<6vuZG!C%!1L$!ar{1l;b_m5vt|I-Wejcvy zq2-XjSTQ;BT5Z!dkch3V+KtOun7`cB9I)emdf6oQrdasotiERdtjv@%vFa4PRNd#o z{QL{%q0{!!>~uxKmyr`cqUtA2HK$i&W&3eOIPR;*muZJ5=DF4kWd$_Q8RG{Pyz8v5 zYGbw;EsY$nK!Ezh~JHmPn>PYiRx zrjN8tPbTw}7@Bwrn-E7&mkKtI&)f+CA@u~q!7v=Htz|yip*K>o*(FoT&KUo@Qbr0pc2dC<- z9~N)eHV`isL{^jITN>^X&{{8_yro#bZvx`M`gsarW&P=w<)!M?^Uj1NS-}D(` z&zH3YzJ!N8W;5${>wa`DlwBz*7LFgr4&O}WcQ{qvJF+19-aZ**3RE?DSp<}iL>WGQ zAdIWG%Oy=EF=$x1#)4jjw~E^t#u$aOt**H<(rQHqo~G|=Z~lZg@(6e5Ys zf7en)Y51O>H=3Ds^M6>{Z3eVO>{WV<&mNz^h8?D8)h} ze$+bBD-96`Xv7c`Yt$xqo;pKvtodrck@a@=yG1-V~ zR(0gr~2xraQA2@^Rr)O$?@Gd6PE02_oryg6oQzNvcHp_#>|4vOsG2@D{t!uHX|; zK+!NLZ#5^cTpQt!P-*E#kqtlR)*iOF%(ERoR7h+v8H!bjFy*@Ut<^hDL+YnXYlGIA zdC1O;>%@7R3r4Lpq`koaen{U?WLwT2q-%@0w!I?+#?f_%|NH0w8a8NHCJKxo*@ymTzt>=2u;W<*t z=B9;bO;x-wp9VBb->$E|apNhbrK#)Fd}b29X?h<=Oblsa-f9ZnU8o?!@_sUpcb+3b zx9yzLpl4VUQtw7sAd}}Oo;z?Q-9Ej^9HUbbP85qa_S4GegoRvY^l=reC2$iXnweJL zalKv=ZZyzvGG*$R^IfSp>=daHwn5KI@#=W3Lg@vcY+jIQREA&)l3Le;7-hy2T=bmF zdkd>>x4!rPv4n4NgnwNAYmMVA6Up7_bIcg|q-+hPNG`-)6@C?NNl!l%5yeY&s{ZIK z^?8uy8m~u`-s1X&ft=v%xq1vW;Y*xF${4md;UQ2VEjacwu>=wo8pj6ulpF5KS zEKf)_eW)^XSJp$m?E0&8P~6uGy?9#^NV#6J5y5$!WUO|Dk8iBST=8XU*=C8po!KPv z-jl|kcnqQNY;!+vD}qC?n^uJGa7X&&x=TU8yL6UZ-ebNuS}5LlZ*b+_jMsxpl*qN7 z3+t=ob+2`Lr@SuY9Ur;Ww&8K>7QBZQ&q%-*K>avB2AL&*L@AfwW$RHKhBU5Ls(=b4*_1>bMv=Ot zWopx)S~yVUQ)5dy(m3hQW%Bt|8%+2eM`X{giE3Vvm`Q&n<5*;HwUp^R(8UL5*)Rz) zFfQ{7)$kkKv(;^?3<9CXJitD<{j<<-J7y-}p{-hn`3~4veHx74kW9UE$S*3k7e)Xv zReZA{#9%hzs$|<(7mv1pX3i_R0%b%6Ok9Zjk0Qqt$mFhxJ4B+kKox5p7}zUTB_j z2Ex~fttnRs@AeH@nt#3*|xaD)34d9kN=C7)_NTy8VM zbbEWV0>#YOa9G!phX_Zobt!Opy?V48gADJP0G%U-G})5J;cRD$7R)#zG=R*>>!PS4 z!eHyugymGXRn=#BaULo#Lkhe6|03-zpz7MS{bAhQ-HY31<67LUKqxJg}a+k6o=;N&R`jPmubGlL4w;+62IZ5qNYO~}=+ z+tC2*b!!esnwnyzCynsh&tB*e)&ht`FzrN~aTMxT`9x0icutr0$&XbYwtRRVa4*X1 zK@i8@o5%VaIYKgag8l zjGxZQ=eq-0VO;Jv!>pZZ1A4X5=QXIwT!+u;)()~OyA(6t2t46mY5Z*Y{B2z`3z5r# zwyBp!q!AE%p3*)CxxhgB5Ggw)%g?oFgQM;ws%&UD=k;_ekx=W}BYDlw3|dqZ3rvis zQP{c;E_WLAd6Sx=6L4K1h?$-YwMXne6h&rrxM*~KYK3Q zMfh!sDn*{X@GC=5muccV9t!wt7w`||Kq&tz`uT$OLa_YdBvy9rh_cmF9#pki-c`&J z>iKcyT(9_;3FWu6h@84u7m@g#?W%%JLE+%DqVUSyH<**3zupPGyj2Re&fo76mMAz* zj2CSHjm$K*RMQfsmpSDj6`FnH{xhuK!#Vskzol}6cYQ=)t zUv}&4GAqSQ5TmV~lZIkyZQVSg@P+-EGCqG~tFU!0>vG8ET3Wx)oqrDAFXw`!o7P>N zB{@lB=?yUMv#FWU=SiA*JDFsS@mc@O-_dN=LSSvFmlV6|4JopFUSp0GQE9QfIfIq3 z#@Y?v)-H-y<2?8L^Ec>)%TG?lmR(hcm9ob!b;T_X1-$aOs8s}juBc@J`%kgV1Sc58 zl@&_*;g>&QvN6^;#!xGvV&6E_WdP#ICZ-POFQgh5h}Lh_1)^F@7It)oUe{t|me$2X zSzK45ciEF#++0jmN_%?Bwo|Z5N=0Yg0VbS<(3Xm7b|=u97cFY~^*YNl5oktgP~Cy- z%`0&WC7gW&VV%}OYn`DTUI>JOmdE|+%|%gDtoO~vI(wCjH$$+IOz^BPQHd*m2qYEgj;CpE|`8es7V-Y3^2-?Uu};RTQe@Kou*a?JpIbQ zpBC#$?2w)xp;7VVksbmjuzqHBEhIH?#$59NbM=+pXdR1HqU2K>%|@&pR8)^hY2PZ9 z6xx*OtYQ=8%*iMQMCvs3?&hn3l9$%fGd0)yUAt|qQy0PK(uUOK_Y*4R#pT7^rneoa zoYeA&9q5LdLzSuk@fA8DwJ#AEsK3Hu0){MJz7TEZmzF|y}`Y4edX4zOZBQzv#=fR ztTgtcyd{fRkJ3UJ&C~bsnMA|=x{c#0)(x0r!QIxc>qIqlU@kRqkfR)1<*zymckO$g zy-S$1sd2c}n#IRX{P;mD`4FLcG?1B^;sRHF;Sn~uFgCu{RgM1BL)Bqh z<8a!gZ&Z`?#_W+rf1aIl zu#IhcYJoR%PwIKoLopl%GQ_p zg*tq9jn84?7vi7OCDK!Ao&Zrl<;4Zc73-6BYg_eI5l2CPQRBK$Z)#N^`p^y3yV#$w zNL{+IRaDb%ES^|!KIm(hTly4DcpW8IT9scKN?MaNu@`QXz*_&+!&^dT35M!*aQ+S5 z`jVNgF77PpIzzBU34h|ViBeMw=OY4o513-P`h;o5r9S-kx3+h=M*N&d^cXkA;fW;P zS6|W>I0ta-H?}UKdr<@O^Imcov9r`@scJhYK4agionL_>|vBF(aFTS616?3`f zqHL@#clV~OG7)cHS@!}jJon`jCMK`ANOIfAa*xWPL^3ZO`W`16#^i#l+Dv7VoI5M8 zp4pGLsqxIjFD5k08%N6dPc)|D@Y3Q=nnWNG_ zb2k@(_iGeh6vpI%AZ%_ixjw=hbkY09AV1Hp5oM>-r{Z+)`Xa07c6N^mUS!-YDj;v? zQ|>bMMq8%m6ECM%X>dii0#v5$}1@#Ue--J^ZB zRfZN%ULS{BG3Sv}bn|HA74X7CF0XQt=$;Q}SGSps>AJ)x$R7k)xgzaGlJk@%+`k-J zBs#Ez_dz|IwsIl5WnAvJSjNM#cq$q|5A%+K*G?^>_Ty#!CCfsEJ43QnSK*Y0WiGP^ zmR_yOP{U}+d~6A_wE)EzVbu?HuAUh1fvbJ8s`%8}@OBr0${G(=dwcUwGI~bwcmi^J zpVtY~b(f46al%IBceEJW4K`>YS+18FIdJVS~aPRK2xCLHR zGG^MIyw^ymAI=Dg{$Z`S(Il=(4ly0y|;UsZ$t(u z?8mSvBlmL(!axx3T|3pzg0(GgUX^F7O$-N=Y}-GO6_c=9KUE-T>6d;sILu(lK=?Ek zQv1>q7n4s}p%*xrf}`80{l#!n)~{j*C)(0|Oro+P8i`bX7biXFv*Qyf@>+SsK=r4Z zQy=uVlNF82Iq$i}-#GV2*VWs1V?#Zm5ng=e|8lu2XyKq9Gf7NOHBSZl?8XZ_G!GE7 zA1yk?-H5c{kurm{k;7T9QD>JcTb?#3+dtkP!I8~B@MYptr-b#jYb*p-J_TbEhbJw2_hF~t*aQcQ7-pcHn_}$RunFJS~0p^kyMWQ)1 z$4b&ahFyQWt{6%^#)Gb!4^d)%wU%Z?E4yM%qC!Q^iqO!Z>ExrWF=zW~Y=@aVbuNng z;h@TP+WnXHg1Q2}3NX z7g8S`Sv7~0^4uDU$RPPBq_6V6mp0Nymy8>5FqXASi6tEqx9%RokwKBg#l^)Bl)QJS z3kC0k#HyXna;{F)cT}GunWmFV54Cm zT4^DQnu70rM26lwP@`7L^!sBVA>GiLmAMB?&EiWixlW%%m(qES$h)zX5j)U~MBIsZ z4mJ2cL0|26F4I@LQ3yWMsRI7TX@0QR4BX3Oi|!|sYQrt~i>>mi0%aIo)TorBPF1=v zLZ6EI71W0K%bzoPhd&UW-YqEHiky(IPqrFdKJY9Fd-?<)p04hDJZ#o&j^sxRo@PEJ z&P!LrD|0TJQ`AD*Q`t6?&m>LAL&|!?>^;Pw?3PSS8|1+<=0-<&yqSr;oA}A*RE1- z_2?OkH+x9HGw&=>ePxpZ&%0{wt+i)pBPXg@)tGUr^my@LJ8uVb%18}vT~kgaQA3X%fYG#-+3JT7%# zc^~US*~DttmutRkmMynjU_nXgF>Dt0L`}#Tmvk~)3y=rzzb;QF#Vx0uGRZ+?<6C%u zpVhynN*}p%*uB-d-@Lu)y!FgXJpw`0_;d^JUbNb-UwI8&h|Hg^UV3_!m-DBfgG-6l z6}CClu&9_E(syqWh%T`G6Q#kn1)wI`FfhBVX22@Xg)Y$OOJ*eYL>G|}dTX*s^S zsB5r_ORuihNOXK#<4(fqUF*-K_S^w&FwhQ-q>@&$7hy#?NN;s(HjE>8y?5id%X%ZH z`=xlx?S3`X?b3spe~2V_$NA0XU*9kLAC>aGVFE#Os7TODtzqK`biHgL@ z#ZAFZ@%>g%kWJjy#tHnws`x_sxx@ikz<+s0b3pT{A|k zKs&cA8qC;!30x)1zIaRFtZOr@UR!%{F^D{~pKSid>N6=bwxqKLPfrumP8i`i?p(;=Ayl$u{8JU!%ySMk5 zDihoa|*nE%>t!S@@0u3ot9fC3(Qt>$F4!%myl zw_~QL#PTyaD}lLTVH%J4iPP71i}vADc^W&7qlgGaPzI@^iqg1>c}d>;FQ&QGIhj3y z;|@>ok;FSk9awxTY4)|=%uOfV?@*M@{n<(JJrLsjgDp~Dq_}NKIeWiRm&$-&v!VRBxWtG+kN8T6q z)xe3&B)5tdrv5h~oEJ%N!+aZyVT}Z}%pETJ5BM7|wNhz3XoNE*`}ofI0dqHN`DHC^5WL$LkynSc%63y$Qjg9Aqo=lw>+&Gzqj*uSjnsa+3 z=QCaC0v&SuZ7XK^J16PL-uG#P^wz9YLNjp?Ys28|5eYR*6Thf931=F5+s}6GXrT9a=}fBxEX^Em{v-r_K+7@LvoKBi?4Y$50wtw zUv|#oG!RE%B14rDq+DP@%gc{GB!5*BK#nn?XCRX64m!b!vmo_rueJ78JbhgJp)Q90 zoPnT{f9CXLf_zLd=Ji;lUHFCSp4eiPSRE7(0`H5!lmGTz|Or!Pi0MZLk!$;y2 zY6ltkGeaYZbv8=R$dZvbDAI@VB?S;9A2qIw37tR_HBuL{{TRAH%L@Ie3%rMlSt-Hl`tEQ18x(OLY$V5 zz9{;+B+osPXjy$3OtU{ctHl$zHb>gNdW9mG*IT=O7(mo@JSl@@hpXy?0nwxiQCrH{ z5dBY{?>Ikn)a#?y*K9^>qKZ*@Zy@@?x=YeE3v)TK93?kuCFBsun8D3-<>49fratzs zg2;NNw;X*P>4;;b+3|{+)mo4BV<%kRiSQa-|LPNj#!Hs9JcV!_1QxHnFX_3*DNj0% zUFJtR*04e;rbNso$bGT2Vd6rr0(Hzitg#cD0-&Hs@deTtUqk3vz>F~x2}b4=WIXap z-agFBWEJ+VQ!hif=Op&8T+s9wX{QDSFKlvJl1g4V!5$;9R>k2;_>oJbV6{`=Q1jQ? zErmMuYEy*K2Iwa7b|<~=RW2mWeWoX)nT$_X4{(=OFE4!5W8FXL z+kJI1ODgG0oTHiMAH_J`|D=$v_%SHWVhwM^j-t7G1T-JOI9qy}^%Vtr3}5ht*^*zT z1Po8|wEj^-_RZbF*Hz-f)l1t1l5PUK;w`@(dKpf1PkhB*;~2mRfk|W2fINiysvY3A z<4v->SxkyY#H%qhL{_=aBlSrxA46$uGkerD>2sc7OTH)qHee{gl<0f`%EF67p-Z*i zu9(bv^S^s7th%N`!LiCg&+YgyEJ>>s){ zt(lmg*9Ppe=Q~+sj_0!G%HL|@zmU0qZ3vh8e%yW&GA0vdR250M6$R59zK9DHWG zDWc`OQFM(v2usB^3dFH@MnM5IezTlM8gB;6BtxER3ARWWsQDrmz;DaqH99;Id{6gS z&7F!Ie{Y7;?lo?Af=_-@I7zq8`(766BBp-K52Df$PW%i8%q6tzCr|Z`)UhyL;j15f zn(o2{oumf~N3+%Tu8hKdx^jE5ZN>-r__K&gBo^`e$foUOt`gk}$WbMZCJ4bBbt3Vo z1$`BMDeR0mAL51dl%n-+-(68CzLPyJ`F@0JC2l3cbbD3o5ZUV?Qf3!?PoUhoRDcen zbYyt(w$w(u9sRt4oot-RY-qyxr@KCULTtCjeErWN_Zb5fHg2M^Q4U;YxT%yTly%C+ zy5%VX=k2h>N~N?ol8i=pz+A!rPuZC3Y8y{d!^z|-bo;#&!e|Hi|6XB^AgYjL>XhM;`AM|h2U`B zDmJk;ihF(R7IWD_%GrLw|CPg^QZ}#{N9eG2_E;Owf$8BMaPRhfjGUVNb3bnDX~B7I z!B#Sk?b=!my{LSa=dccx{8q!NM-$P(*p)NZNkPkN$LJY^hFJ#X2FLue@`NW&TQMp5 z9A~}g%TP3=O%^wDb!jG_`!ki8d9JyLLsWB7o_8IIU@h2LL)GgVo6d5MNW{a^K6fwd zT)44dg3h*gDbU{4i`;GylhgIc7+Zh$NIP zM_8Cm#lhBC&D2SoO+`YA?c2HBy1!%cZwY@03$)4qi4XFwJ7$?F0Y?3xJb?i<5$rNB4WQqM?(6#Ww?jl^wvv{>|I~ z|NeEa%cfxXGamqehfN85UKpDckdN&zYXU5a-)NV$2HO*2VCvb_oQ<5m85rNJ4B+?c z_X628EliwVfNAIbVTJt0=XZX7@o5NPX9u(RQ^?>D037;h&45E3;LuMogF`@Yi1UXq zz#%Yy++2T!xWJ)roPh-ee#Qe1{S*>7#0w7nG=~fUfN$mftVeJNTprI)0fR%|WcC*= z0C1i>f6)SN3!FTE(EAP{>eAVHx?4cv4K!nE_yVU zvV$f|NrC-J_F?Ivl>psYmT=uW3=p9jBI!f**v9QV6NzF-9QW zdjy3l>E5)q&nAcoViC)D{!j6Yaue{vYUfB;r01yLD||3XKZhr|GWc@zg;*#v9+!cU zP&f9e6YEhB|4Up`9VN{Y)PA9Dto4*~`k^4Q%S~9*X5A-#mD%E=J0W?L7-VfhtcdNV zdMHLRJ&TWoU6%2M6l#N~U)j!{ulw-(l5>yyESD^!QNs0BVa_|r34#dt_9>8knF0hn zA(as1DgVIqx3=;RnCASAX&}c~6}twz3OkgMF*PhUFc3$)OpKLUo?;2&6Ra%FrURdw z!*(zeftJIz2ZUt9nUEK*T$r3%!&y318ZJu1nJ!KaDlUpqgP<-B0l@2QAKKNaui$h}ovsOVMP?mw!%L2cBKP8E7ow5uaKOKmdAD{C6 zfvs(bU>1C}$i(M6Lrjjld0E56GxH$jvB`I7K+ zvPaPv^=7XfdkA?)yEg*vt~UqXM<)(ElKhwxKB-1tD1Y|m2(>XjFZQNud&ez!7qgSv znF*yX#hBo5YxVvVxAW#91uF>E8oP^*ga-zKHNae7)MO;Gmq*|N-X>h2g6$w2Y&N4c z@O89SAiYQy?O`m)^2P2O4TGr8fE+%5bkv%Jl8;3Ei57f1qCi4>1w6q{NtFAfBI*$N zV1h+1OXqv}Svm#w&Scps5y&qQSH2<)2hOX15Y#t~@ZSXm;N<$dpn!lWV6_Uk{vi#G z|EhlDm?X#$kcPtEda~QMBuR9NH0OmNbt$Q z?IS(AkAZ=~RdnDoU1ALQV=Ox$_9LG=P^KT~HUNZr2O{1fz5)Rz$(KQ$2I!Bx+d|PN zA3cD~A3*St%MRyjNNZ3K;{Db*e_-vKe)|Wk0e;hEK#p->jrup%jHtz7u^oRjZE@hg zH|-Sr|Jt-?(T_x8Kn5UaxOI^u5d)DnUzjA3yI?WzoE0DXU-Y|h+9Z? zh}{D0xcyHNL`76URE76qPKL`#1*Vhf$=nL0to$1*N#?!1@C7~ChYdGghJlsh-Ujiz zp;uM$8H5=ix+S3PYY-|P(02Z#W#0HGLOgC&TyN$5~`gRdenSC3)*Mpe-{ z*CA)=E3!`>uM%I0u-^qgL#!p)L#YU;*AZ%fYJiyfpsM%>p8p~A0sgKDxu=1^Z|VZh zkoqr{sgeI(TWHz+QCs+Rf7gT+A_c}*pd+77P!EXw&gTng8RT(|eh2csLdO9u`?P@q z?jb?j*v2WNwy z0G%BVBBZqr*aIsz+AmfzIWDGJ5tD@N+D$@f+7{!C#jFQ71u2jy4#uJOP^H*gUEz$! z=SY}MMC#f#sqDxc^2*7So5;_XUVD3_$>yiR2EPY>3ARF8;~=|2mud;b!ei0vJ^n<( z)!i)R3ekeq(zcLT(QN8m173bQqvd)ITB3|Iqu%f7bhcjK<#)jTHfbiXAG}19W@D z<3W^9dyknxAdyZVnn9F!YEmG1Thtsn`-8Eq!QIFbM76J9J6S;z2pallebN+5=KO)L ze}-uQz~Acgx1suvee$0T)ypDBAm~#cCw~xhfDlWFJMS?F;ucij)F1>0s+~NK%k{I1CSqh z9|j2S0X_mmxJJ(Y0F5;W^356adCY9$-wY`OQA33d61jtia)P37R~G4b0H+6yA+TyH zmpx{MK#lVL^anow84lt5oy}h`1lmX(8CG2UM{}gGhQI>A$o~S^(AQul4aO%lv)>nR z#>+1;v}r;1x~PW0y$oGHaZ-&judpouR~aPAGjQKCfp>s#h@&{7?A>;u3t^riYpu6A*X294VlF+fi-2v7C5&}^6 zB=--*|294IM~5Z&*z&*kd&OaZ&3AogYi($e(hMm;*E>J!&&q^JwE~66h$IpJUO_Z& zvJs4#JYf=Xrj@$I#Bj>5K=?rG^UCM;U8OIl7i;gdCgM|aH(o}a9vv&DM%{&`KDth? zU27BqJ=}T4E|Gkxr)^z#9GVLJ$U+@KPxB5(R>=fGwmZZw-0m$+YA%~ORkK@2pNuc2 zVBGbv(hgibCPKiDUlK$*QhLO6?sRRPU4^R#whq9^5RUmwu2v4zD=PVjY69qfxFrJ` z**1Ir2Z8)EWWoXX&9-wM5mNfZjsd%j4;Ba!dAlQ|T}~3N?t9Z%8NX_6Yrg{DH&8In zo}A=e(lXmrMg-=PJ=~dV*KS0?7w(Pg2_7vw^{wj|S2gd@cLMOV(Ren82L$$|PUsGx zui;tVl9ONWp58{@9oY4dUJHphFA7i8o6o|w(O^c(bm!F*(#}B<4?(34p)cw%;8#@9 zCN*`}KS_?KWFiU^-6`gVm-YGV{LIBKvSiD^k+z{f4yO-<{b;v4j&TejsGe;5OeYpf z4Fp+e{~YRbw9|Y27DXG~|16yEb1DCQbmUR>#O-Fm;yoTQmss|$n(J*=RxUnhG!UxD(ihnPR8v4{#WvflvWA33 zSNoF6NnF9@2pN~_*u2lO1)8B#Z~YG<`G*LIlNK6ea6(L0c+@O^aT+E3dLy144ZwnRfl}u;>=UZ#Fq27tddW6ct8Gwy#6U>`fa`h$Tb1v`cd_2*s$1YKQzDE zzmLUv|I1h`4jb@&Funy*wE4ytfpKo|v5&YHG>AOtCWs%7;?a@{bk3EbI&6qhkCGRJ z>L7f@6BG(07&rk~BqS1?pP*?a%j8&2EpKN9!HE;d4-Tjcl2DD zK`HQgJMmvu^zOSUo^5KUrfkj)7)+8A(G!sPqNku^+_;2U${YFZxD{Mo)?4$)_GABC z=|<|rce;JJrTP>17rgISc#!)?pH`313uTof>_B8CK}rpxCQUmT@RPz!`N+Z%)cD)L z_>wc@h;{gH%s}KNW`(TtCtMTyiKwHfm%IqdVd5nq<9&g4g33d?Jidyz6fdBm^at+$ zA;kK93gIuv2=3AUf>{3-Chp@|_lci;o=;6siL!Vh>LN(CQ4UVPv`!92j0@c48<1b}Kktx3ft>FH@%xN8gjn@K@k1yDC zMc?z8^*Qoc22p~1LBT=@;F&B{AK!a$13wM8frASI!LZ9H-a{hP`m`B9cbt$Dyu9*Z zzcT>!+(EwRfzHxJMY;3&#cRx>#D_od`ghnSVPR%w3SRLAUgD+w&FNzZc0F+Lv9a3N zI+>W7fgKxchTr`U|BB%Q$AJG_?BG9uf{Wv?CtN^q3=r%l`YVP9{5IJ6z{B%b3@4-8 z;3xkg9PE_=KlyP1fPHTNA`|SB`S#@dh3nfLm`JdfO81Ae>6cIJH$TUBr_=Y*UmNUx zV+DMJj{oh)!NL07Q3rO>u(N_4Nq@ioiu-SQ{QWs6FY9-|&%fe+P{PH{`h8*FzvBOX z2jpY@<_h{wGmxA0n>*^qJr64f7X=3=E7-^Lld|vezo_QqVC4gQB!BYoN56aEfQ9oYmcM=??=U2nk&;0aqh3&JXmnFDfU~4Nc}kY)cdQa){0JhJx?)>6MwVKylpQL z>bWVm)BeuH&7mDY)1B)4iEtBccwZzuqS4v$G8-k_8g%*;2JY~}2SLg>bA7f#@#VQj~H-ymy*RBYgrJ$_W9pEF^7M@iYbka4c&5ZwMYqrYKRpojFQ^ zZ8(WX@b4WYQuTZr*AS?!{S@igb|e$<Zv*U3 zsWkJai>Ql9QX1Y`Cu|rvulOc0#KF)6|6p%=t?+j5cxS%BkVn^#6X@bb+ZcSfv?-C_ z8xi{ZEfkdzQgw!iYYM&0v)Rp|gG50cm-E?#vL z_F1G8R4*g0gwnN*=I*vsFM^2K!8jz1CF9fKz%yY=m>Z3^Tu_TaLp38E&Q{(}7&>IU zimwT;FgP0Qq>{&$gFMy*`8h^mE%Q>Ps7?aJPh(b2*vE6=AzJ6J$VdzW#W3DmVo~mC zx&sO}fk8n_xXYRGssS|l@ zNY$A}iRiix*Q4BoHcmb1&25rl5h%++m4!O;{t#W@6IUAb_#M@r8mx@Ew|OJ&ub1JY zv@}7s#>aXykcwQHxFpFYxF172m$a(E9Ii^a)zW50qS7AL)n<3BRz_h-h2))Xf9;Hc zY2udEHKE2xFPAlg~D>et3|f{USuX`efVu3F+7fooG zFeV-tOxKzLkwox!?T6rL29U&qxh7y@)g+SqMOB+HKRzRAyt}`Y56YM*k$_SC1oX~pusC8-0L_d&bJ^8RJqLs+YZkZ7h5J#5O?bl@+ZzKVURtw;W`|9_+S~_Et zsEXUp$G1vmLygoY@7B&Fbio5r&R^CaD}w99UAl3+P3qlJOAj7QJ-xe=!|T1W%PPFd zY}0fWx&2zY)`#-bON3AJ?byl)>Wsd+yn7c0vXW@h^|mNoH#W zUuGif9;NZ0NL$KJLygf`oxCMQUfJkXvyzqT*uLg`y@^I-Fij#i{txHLPs(UsSCuP{ARf~hE z;w#51E9iIc)TZsHJcT_-6mqhwK+TtM(Yx{(dV9J|2TT4?d4Rg1Mo;_7KPNE(1@mhS z)94KX2d|({#9VN78}cFGez#?wi0QWD1dgdcPb`G_0C+<`;&K(!S0R#_dJ@pg>hO9q zZ_#R>{O0YzTvY94#mby4iF|>Cs|82nkt8>Y?l7?U>-FA+-6P9ZctKQ{PBFz6DIpac z#L0jz--#Mu&Q~&XuZF_J&?>2g(6j72@J`-K5&QW8;%(rof=P?%9~rR;W6Bt_E8U>- zU(?Txvwlfn=@h~XJuT9T3nQ;Qwr|myYZ0vW=R)FAB!l!ucapTP$4M#SQ7|8tXB)@$ zt8`J8wk2RBd4b=wSSOUCXWD%Cj&4;lC!K=K1^`%!Dcx>~JD6=S4*H-uB-eS2Q;%m? zRI9L1WZ6j|T*}Tig*o{liUsDm4s`0-y~@t{_LESV*2{F$BtR8H;q-QJ7^#^Y+FQ&Q zqV{QyI53q(8w)tELs&&6{0%5uT+{AxXJ4z6?!B}6{cfI# z#Uy9f4ZV3;&l|E&R9D!h#ew?m29pdled zI{vVUjonO)l80{Q`_hRITx*8#T}Vex zF-dqyNUkD&@rC%zmP4g8!I_@9S{SXlP6sQlT|+%etA$>kTa&qb1 zdWjRUS%ArYSgD)cp1Ty>MLxYUCdsvxOIwvPUgQ(!a(Mm3mK~?D+_zT$437Z3H6({; zp!hEL=5s8Q2S69vZi9B}-Hz*N^#J#nC56zU{Q>?^?s4)B%AyWq$h#*#8Lx%nv}M;r zeRZ%Y;?1t2X^l4PJ=badHnYx*2i%0k=BC&$a2$-vd%G1zvd*M63zdnYqxH6$1@*CXJ`czF5#(Hl*A3@`hz*OIk|G z1=mMH`ZD;ppF1FK6%ACV-eQjMI{iv_3#n#dOQ<$^ANy}ecX z5B1Uom!^n%6@uC<1-^W+rv#Rt!+UJaahAK**Dry%SJ!OimR|jA9-|39QP19Y(vgI= z`iR}BE=Sjx=xGyPwvUQpH9wwM#a5bpy20-)Lpl*$dhQs9C5yvqMmlZeK5n07KBIS1 zW`S4C{tSO!pyBviip*fw*cm8Z})r!pNcCIliv+p^7sHLGYhGye!}sRSuAl z5qdC{mfAhP>GOdcElIZj&o=9K;Qtr2|9@Ld2?X0QKi9bZ|5!{3Hi!P@AN`v_^E2oF zl)UQABYV#22z!=Nik5uN>&r=O0f*v_CNUAu^N+8~@lF+d#Z zfg=juF5-2CI|)HpbRjuo?8RT*JYo>wm?h@uB^SLcHabn7K@l_6Cg$TXNMF-!v8W)1 zlZ7G`r1U91EyGvXu?lpbw=0&wrJa7Bu(%R4-58Y0x0q8KyxB0NOWcCSR^Ga=26=+sk4yX(xn?gr*9>aPUQ?U;u5)xm?Y#VVnO6^ zHDi&KGQuGD=@wiOeslR_A(jkPH-m?YYp=e@2O3^j^a?3rzAJSGp6>U53+ok|fk#i6+Q2pN&;+i=+YkjevYHMh zt}(f+vA8Uo&9X9Wzj#IC)7(#I>WeQCOnB9&l6`bG8rPd`6Ke!H77!>p?J&MnkBN2` z0wsdGJ1JlzR2tZ(DD^yx+vgcPvd!YaTa-l{*#2}YE1U6DNS+y@nFJ>h{QIu8hxaYB zHD|Y8lxwWmg;R?UIg8~ApKVWY$qYM(r0NvbPI7s|^%ZT|v>$ROss!NdgF960Rj@pJkV(1 z#l_5hWu4n?VX33%T;1Yn*t-Qbg1tcoCDL}^9NQ%+-xpe&0##OsJ3*(Bl(8fPuVP7K zYEI%;-BzDHn8LE2?AjlhFpW6sywUnBBYUn2vI+pm4AS*>3( ziOC8nnb)p(?I-JLDC%BMlI7`Oc0JDYrOGC)JiB;_D0l9c~vDzX@eAg^n@ zrs1cF6PPmyWI1q>4%ku^s}NQOGvg7cL!>FNJjIPc3k^q{6dp#qO5xsbUa=y|yn(@T?z3~5p-NEBc_1D)+;Ug8Q>X#m5SNm%8R$KeMpC)CF>?9&G z5OQ(S-!OdQKC=$ovLXFi+WZN3h0Z8Z0^_OJ%S5iURp`%a^fSf{fDeA652%i)&7VlNYD@>iPsBA z=Yi4)z4oHwSePtnhubXdx;qvVbkLVj8!QNE9-~3c7`nA$*rF*|js)%|Gow9t&~gb3 zxNO^M$W}EIqwXjLkRS{)5)-#kNvRPP;Ujn|7uuCEY`Z?S4D7r<=GO?Ag@-D~PtJQR6A?apdpL$qC~v1GWG`f+$F zf`ia1TgOL%`-+$^Oj>iK;a@ngS~GMp89hADZL|+(Yt7TqyAu37(l~Cz;_J3wX5`y! zkT2xSpn1d}qmhpVQ`kp81Y9!D1@=&F=#ah6-^xkGYuK=I& z=nZ}H%2!mFw-m62qt0JB$(F9p*H*paLWlNNz6OZ5Yuk|T<#@be>$%Q!+a;jCt-E#& z-zMHPeYblt22DzmaP^Lw#}*XYh~_!6%>J6ByDvWz?X6@dro$*ZCOJwBQ3u-l-0btv zv|{qdG+OAz{6n#e%wHD=;AkuYYp!S)ymY{a26 zU9qERV&jd$icbOav}SNyuZ#eh%4<-!T2%ZbVESPD%o4GCgQ z)YOVX;I7uJx)>i?G2ZYBZ6NO%Hi z%ob?x?4Go6@Hq#$e{JOU4<5C%HBn9XSiCy}{y-Gx>T7 z#hs3eE(vMqPIPJLpj5Z?m0$!eDIiQFORLVIdCF>7gYBOKPf!>JcD9Mn)NUQTaFPnx z&r4_Cp{{?-9$-db1IVh>3iykn%uu&w%}77uSY&cS|2nBir;43?P(^~h@HW1^HA+6< zefyaHv$Ck+`EE%t5FF<+N9C~1El{lAXd<~bAEZNH{8$klr8uq{51M5 zWt$WSA(q^Zzok=6qr>|nqS-+Nci5V#M>aMb)K_Q}BSxpv%Q)Yx;BKdgVuEFlv5ndr z2@3i2Pc$%@C)SsZa6ts}8^LR z+;1{%t4&rEO*c%K-adv;h|61s8Tz`VY!TB4wPABQ)zWsNf>2lldFJ;T_W!Hxtplp; zx&?7UQo1_?B&1HCLy0tk0)hh4A|M^oCEX#Qlt>HG0us`KAR!?oh)9>BbPLSm_uaYk zdY<>4JHI>gJO8N5wV%EB+N*c0^@UQ_M$hoD#-i@~mv7qP>ecBx4MBUvhn*5m?>so7 z7jCN}O)omS#u|1QUi~CWg$4$rcoDmq_W7a7a$;4Lu~VQ56PHN03-a4~5osPcv{5gH`hpI(8KfeMVpbqr1Rxvc` zd0CwmC*y6aL0#(vk=ngFZ`-;rFQ4ty>yiC9a{S)fQZL>$#fQ57oh~kWNxu1rRPB26 zDuv|K&acU$0?knOk(8!WCv9@Wsk)VtdPBP(1F?Ev7VKWs+_A`z{v+dGY;^5Qd z_(b@#t!TLShBwRFn}oQt7S475p4j3^LgTz7xffc?KXp;3nh5!tM78eKb(&adjRi%Y z)j?fV_v2|2DvWA#IKQe8<@@w=Cp*W195-!*iQOQ38=lZrMQc}|mf^Odht1hz%+fMq zPU<^1mR?UPMp8I4Uu1vf5J5Jo8dG?EhI9XpcX)Ck`Iv6gWA&qH_p%uL8hUp9V!egH zyPb+3h|1Hv-t&gp&{j$DGS)_1=2`0?W~gjv_Prr+&! zY3R26bkHv9{Vu&rS%`*h_J#$|>l4rEnpT4xDVi|m7mV)?54G;C>Z~b5R2I2E>nLZ@ zgxpAr7La>!jU2Q7@s>Z~4*`bS1>Dh_>8k5ppL2@BoiV96bM+NvBKDP&*~OfudAuTw z0;hVz391Yt`%Zpzmk+1=*5J4r`H^Uaq?}6YXBr8rk9|vqB4tMiDGAK)pR`=+3l>3A zYg*6gTelpBPm@94iM6vdKfs81D(Kz$VDp4QdE}~so(j80EainI%-=>1l|2BImN6$OX^qc24ftbeRW|Rq|#99 z`(eDywfVB)go?n&z>UnvROry!lRlFo?sK7tOB-Rtt+vzX1OZN`if488@;En_gnI8~ ziTaYUUb#lBPET88KD)Y}%-mzHv~Bm@*!7+g4y=d}Wz|mO`GMNvGJRUGQ$WX7Olx+2 zQQT#|&MsGexy6KvLbc3GN~8)WnO5o-W_j=~aPf{oAAegvv{^6r`I$NDP?CvXJv+t~ z>dYq@{3l(r^0IgM4Fn__Iz&MMw+!XaZT;BzLlx{d>X`xd@seY^gY5i z1V(dK$*9H|%xuEO`SWn@UTsd&T~nf{Gc?55*VE@`xrDL@FUwi-)xix3=N)0Kda2xlQO;xa%O?i8vc!H_!xt>R@_2qj8;Rn>&b&Hl$*<0Bp_jkLfLTyAS1N*Dj zhnadpbJg*=^VVZyQ~OC=Z<>ju(tdl>w9K5zc(8on{&+4~Qef9N!iAS(SL4Qg#?^J< zkWWsVs3^0#FC^j)gCkv?Y)n@_4P4_&OR;Dhz3|DxgnbhEaso(jnnaFUf;~? zlr$yRtC9R=ElD>2QTg6I90_Dw7#EUeo${l_x3=?{k0T^R4!Dter1|eC$@N<0`FZ`L zTsR|S(Pr&Leqv{JyZHVdI=RD_9;PTC6q^U!aI|h!JgISL!5NJuRp)bhF^^YyPn>UV zKE;sF8u>!vj%tP%PQ*bdpzj)l_VZ_%isKfIK989_I0zWxe*I-yBi-%EgCGI6Jc=&= zCj}iZ%3Y2cR<29mAf3A@{&|f~@~B{YPF@?Q>IhxOV#p#)qAEV$pbC@E(O?2!iBh=r7*GZMFe(Vkfki~ z|D+ug&F+yn*xvA^cuM6R5(#Y9vco2@A&p-CCN zrgCrFQU>nezd+ECwFz;Who45}(cd^4XDWKlDP|UKdcxVyNM&hCv9`HaRD6EAux!RkQsO*Qy{*)9mP%x%zI^ z1O`y2Z)lmcdo*vaTWPV@3ie0QU%!RJlDCfYx<@W(%ucVO=qK>@EfV*kH&rT?)0k?y zXJ!3-Twh>cLWtl*ozaZThJyNo^@-$yREeDX=%sc}OD=KqEIRXyiIA9#>m$sxTZHbj z3r9&r1%fp6eBL*&Zf?(hhp*K|np@e=>*Yrg1_rYBHPaucU#Fuza9PY;g3PgPRZ;H5 z+#Iaiqu=mn8hKCs?xdHJgQy16+HULse9mL zVsjhK=I3r`eo%*>;otf>mM4fwgAgia)TO$#qq(yLAz3(&4$x z`LUz?agzjNX9G7h4kAl)1^;qSVW%aLXc_078;yMB3t!ZloA7>ZK(l;z*4)*ON>}Xn zbxJXn0>J_n`$ucXo(1PxtDXF@?vq)Yn>P=9^Io9pdP_u5=XdwGJLgn;|BPV*1Yo>16ybWaZi1UR=<% z&%cEuvPdVYw16y8&?sjyNI2nGFO|H5_7*VQ4N&vWBy*z53R%^_(KQr;i&bkZ8uaoP zs8{Lm%RGKjE6}{WVosTGUwQGf%b=0;m(2|BUpG)9boF-+(A1mSNB$X@^N^oZrkoc} z9?Dnkn4g8J4Sy5V{2C^W7 zvTcF1Gh)b;Bz;g`jBmn7!fIgNwj4d};}!|}pqLab-^aWJye~*T#eN`Dgvv!{LnnJaW_0=Utw?CTCv6h-O6kt4j83Zgdy{rjW}o@9b^pBvrWUaY%6Bafv=A z@{Y6|SF?3Bp^q<}zEheop-4#L-3AnmYPFdidPzqf+t=QCo3GCr(reAt)uV$sWmNu> zy3&DHDn#>Cqv>t~B^irw6K3Gf=s@o~W*a+4$>BRzNtIB-Ug(g!!PLhjXw0_hs&R7T ziz$}#gzCzsVZOI)gq>aMw;h~AGI>W8n|BO8`7PhubCR1Tdg;z zD8;X7##{^Rq>N5OlkbHDZrAtE3Ir%I6e%J8C zAo8rl35TPT{p;>N0@cKD_OA=OLdkTSp=V4_=MH*(Ei)R13N?oIdwPzpFK0oG+b|}j zCM|d7U9U}zu*lKwk%Jl&vB$;-n0HgSohb{k-wk706p9B&tcskZ+QIw5##;!&dOh6 zy#ILh;lH;Bg#g~m_}7`de~9t^dXVp*FRVhvp?_Q?`@wAFxS;gY?@=hHMcc5A(u}=F zbfbfd3Tm31rY<~pil~$2eM9#xt{X_bS^r-N^4F8?1P6?(Cm2?Pxhbr|79X=ws5VwV zOOrhLbkSq}WN;}urO;R^I)m4x)9y_si7r}eb?_3(Nlq+7q#{N{9SLuF?_31v}KaPGJNc{X=5`JJ`)YGR7q0eu>fV!`)S=9NwT<4SQ zM1630{wcOLFk|{94Mll8%{`J@)A(H_guC(QR~1${XAb)e@iG*{US2}&`eY$o?y^jk zJp42tKO~p)I&_}QPZFFH(%@?&3a$+mM?jL zP%m>mbLLREQ+!+LjvAX_5OZpe>X(rIJMA`u=H)o>)%0#l`Grf$?yE0f3tK#RHl7`9 z0E=W&b+IS&Nfj%3BVvBVyvkZW3a4UHP);F-CzxvVOYgmRb{~~AuRZkGlX`pyK`CV$ zN+sa0Pz`mN7k600a9v~4SK~>^4b&F5t=2QOmx*6LQ_wcyzT%fcVo|`J6qUU#zgD2(us|Pvx`y zNyf|NhtwGa#7C93(stVe1p%U3JoIlDEpY6H!vbtgGxe@Ng~M$kMScuz8ohYvG)7&! z$O=sy$KSqn!SU9Y)5`E`Ih)Urbs_;KxS|$lze{!|B#pO+8(^!&*4wsHN;wSX?VH?p z*8GAcXdMb4a+lt|OXFn!05UGFuJ`>_;Ol(rA)Th0mn_B=CCTEVY`0Yj$Yu%8l=s-$ z!;^xFuLlXym2e*(8+(k9F%Jt0Rg7`n>wlqm!$HS5eygm+=XnYhl@z6Lit#hX{+&w` zBqY7aF|XUh_iGABTtsA3@pI3)7;^2*FHMw^v$tRHk1Dx*zkaxQ?D`U~$&FO|-mqOG zUoq*KRcM}bi5M)K`1Y3)f*+-+a^)URXtLq-tu`+^ouJSaw)1&OJ#%Z(yg-FX+?H#cN$tn@p|g$Ss8v^%Ip8$ z@HuWqL@J$f?npatY*T`~1+$#rfDjjnGB)dItMIEQ;$nQ2!V@)Kq;HcHS;n_~QA4QS41%my$#`6L z3WK)$sog(Z^-Iz|xN+9`bIOw)lJl{oQVnfYJKTUXWbR3_Ig7kL7a@LlA|d0#zBDUw zb2ZG~X@A+rusN(*kN6{w)RPU~Mvs#zBUQZ_=B3%Sv`AhjIa8+YcO;639}adOistow zdVH}Y!C;l$YrD%xLSlJnm7Rz(ddmOc*HPr48VU1+EBBfNb%8wOflR^Plh@ry`oz=X zPSygO{;$2pZBiAm?@hiHnb zL8k3G!g{ox`S-j!9y?J|erB&hIgeCY63t&fIum~!AnII3f|=du%ewGuu|BI$jJB@1 zu=5A)pAB*Fee z7mr_q74floWqGXB$y?EgqTGwQqV=70UvToK#wjUYiUhF=eSJAqWb~GJ!su=N>Z%4o zYi$XhqPJIGeH@A%Hmw;OSH?2L>0wJoN}x}bYME9v@+O@>+oW=yDff%sjntygPhvT0 z?bH+OOn)xE^*2qrW$QoU9^pJ{yqQyxx9smKvdTTd3o+A@8WS?EP~ueBZm8S(j^n7TtKFb*}K3 zU(FqKFQiI{bGr}|~ot};fo$UxQ^^Rz7j+nj=Th!hYsW;PQ8M(=7 zzjS$~Gh%)=R$|1m&+H#?y&H71E88eCV5;-~(Zx<+bj9vi^ud$iaG!VDG3J$@AcS;# z-<)iojn`dRBNySkOjiHwqpQoi)LIMSE(w8O83)h$Q-x=>GOvh;pT9kt-)Nfk+QD-M zs-mnA{CFg`5?@GUQdfEsvpYMuePClOw>q|QZBybIk~n&VCC87-312txVFtqOYuZE) zpP|R*gI12C^N%tr7h8jTr2ETS^co}9HrCv3hH-xU?m;V^<=ipkMH%6m%l582X({>~ zm;d(6z~8!1|8^+;w}*B9@Qwc0`)2>;lV%9uHLt%pg@XW|_4>cKR)7HB0sChU=-(gz z&*}W*O<^eV&$k}Nm~DY9H*l?hpp`y@+w==Q*W=N(`h+KDB@!HIHwqUP@f9-FV^jk0 zWfPyS#ShB-+{~6$b6>AK2@Gy-Zk%pzZuWy@G(8JR%E}DgKRH;cUa=BN`w;BP5!JJ8 zb18(vwe<3iIO#oljpXk=1{?iHqw!BRjinyF4Ve7#%;(XwPvr5zYmR-7)P1>w(KqIv z5f;UGZWMpsPOqD)YHAU>axRob>S+7=S1f-^UO&mJSbmxH3qN1)R7m+bA1|!Ur;J>z zOO>gJEn+&(GOA(wV4`w15K&8!e@orqGi_SwUHgIUvLd1r;la?^jS4fmmdeco_itm& zrXoLy&YCdaA6_IXG`+b}RxHd@IL!QLVCM=f^}NuPO{Kb-RU6K;qQlt7M!&_IKXA88H$MgwJAhU@t^jz3KKJgcv zf1I}c;FMZY^5^6zWbkrpww3nzLFNsA{A4%)y4^QBGlYXD;Xew+*4s{Kvq9VkJu?j7PuM~D~lT20LOyxVmry;X5i{4pX{aNM##udhf04WsNI2 z)j#waOToCR1qxwflF!S76RDf_w8ya!y4C#{w>s_EsTx69yIjn?uF~8N*EV$x_v!uS z-F5Lt&Q`;TaCBn+-45dyd`?pqUV$q^y?qzYXe=(+z)|_la}X0;xfFx^B+o1Ny`M8~ zq#8~>e#Lb}{5>wc2wz8Q{nW~wG%TIm7PgO^^dC&WVuP|`5=dS9O!57OSG7@mWmPfJ z4F&4VN`>0eQ3Ov#u}k>l7jXhtI0f0>dwvf1BwVPv{xrroxM3@%#4-k^*>Pp8GGwak zhP1q%*X4)a@3c19&Z3~wK$7>_j%Q4W+TOYeDd+H6!F#aU$MyOmL39pygWbtIpNi{IepRa)VsILXSM zM7l=3mn-yyyUKV9(MEEMJlD9CMp*gkN8t0K@9WQt)(o9mh?KwgaT(c#5{*Zf{p7tx zSS0OBC)-YFtQeu-RpBT)N8pGi%TNEM#q!o(uo=O#1rP0J9Z^%NQW#9c;a*NRRDtV$ z&HR#IG;6le?c8DLKJuiov`2Tc*3CZRYV-43A55nuDWp*~SFXr^)$>_wQw!tn{i3tz z!Lt%jV}-AIJ2;I=z{#_rscH(vkifX=(&c;Ux*kKf=yeGXlbs3nD|K-rnW4)<^_QxZ zk22(3;dSZnUPjt7bTakTksL~u-Mgv$8qe!uZn0gAyw0HR!mG*qC7D|+jR$9)D>gHmOmc$BQm&j>sJRjSCPh6RM6?3VGYDAYRZUgz|VhXyHwZ4Jp zErYNKnE^MoamEEQ;c1A|s|vezyum=on^U>=^-I(-4YIL3D&j(6qK@g4FNq&0J?tL* ztf{+ft7NtrTH+RllPXEt+LR%4`aPRH<0Nox%wf9Y-JWa^sxM2dEAb995ozWYmo+`r zBJ0`LB~Nl<=VKx9dmGO`&b^8rl1mJ8R=LZ7)TJx#C-Lno&q}6SmcA87J8a%I+n3(z z7UnG%q0%YHviV_PX?K}wUGQTWN6p(VojPq#K~u|DH(wZs#k1hbaNsQa)!J+-&StlW z9p;u)bw5&Gk)zfYte34KGLFatPKINE({$9|1gXRA7I4tCiW3vR&N9PaK4%VYj7eO} ztEKQ73*^HmlxAJg(mX2id>Z`pE#AP(%RJ?qd{jfu{4{NcEctP>A`5dz(iL8$dx6>m z921umXR->fG1cvT+>3w=;4|0N+$oXl+leFg&@eWq9(oanOpg+X$PJe;v(|}cyd0r= zrQgOtj^%4icRp8;b)B7akf`6l26OBB!U}%J`$~fc_O7oOdN~b_4<$(6nZ5aR6_sA) z7i4;DkSSQL?!22?vn!~Rzd^UAX*+VI8tICp%o+(1so@d@e`zdZ719{#Z{kIWnamo0(WtY!y z#otM1`Y_a(Up!(c^cI>h+%m_!Emj6``)6bl2N&D^2m4FkyZV%cMU8{aPFM+#i+87Q>p*)1^RNKBm|*P`)JdI zW@GsbQzqrq&id2STtoAAgORJm_uRQHgB)C!FUSbL{S`N=E7B1}nT(LrpJN~>)L2&t z#rf1Sy)C(7L!#-ywnV)Agxw?c;KV+e(}DAF%ls*Y)m~~7-1ACJXe1#{8A_{1ye!!H z>YKweQ%*~{3#OhD$vLKt#Vb8dt6%sI8f>QKdp(Yj9r;wsR$faIh9Xa!x}Qnec6m*X zbB4&2Ymx@J4W=CIBs3*l!S^` zBSoOQ<^4}nRV{V8)nk`Tzs56G9QJNv9?-kYhX&X?rhNJQvq1JZ=Dm>-+x*1>2UvUg zYFFaOD3bQ-nW3q5BLz!DtqdmuPybZ zOyS$`mEL^?o5os)p7exT+wW(tvTbMdL)5R%EhZGb5SiTL<9gAbFS};w+`AcGW-k}G z()ae-q%V~*Ve(+cFKM`b&M;S`ftu7^GG#7BgMf8)`}3#N&U7DE=4ZX`Z*-4La^QAP zedRHGBl7c!nSCG|Q@?|d`POM;2L$=pGt!LoW#?8c-W#V#4JKPjl8T0w%Jb;9;JZ6) zF9yZO&ZfDahqq1cukEGOR@=2M9KmWd@8|wFCxALPrz=b?NH;}XFwA=r|5ctXWaqU9 z<><5fz4B8E1;C^9gUm!ibdgm8W zH1%xlu;IN5)k4gb45+$&i17G~F2Vnj)8;Jm}X#ZdN;{S1AbkT+wPoRCTUx~M{YZ231~AmvGq|^^Q_iGTFRN0)7|ACv1!-)YsSg7&li_1 zVa%;t^+q3ia~6njfpW3EpL~OQP*qbtN4wFiZ|dY)&vz*rhL4QnHXWKmCH2qllw6)N zS+Yk>&h7X5%JtuF8A;mW3}<&zo!WVhzQIr9b#(gX<%hUugDA(fZh=xh71Nr&XSLNO z4b@ZS4!g-p6{{S}qyCE*EW=GN?L^WkZ66qV@J5csf9=haVfSqMa$ZDgFg@9bci|<6 zUTOV%g2Om^920f7S2VX{C`_;3{=N~Q(ju9q8r#=jEoMx0lfTJ#--YUeWXfy#(Rq{Q@S>#C^9hrkhZbxiUsM-W1NN4I%ZN-?E?MfP__FuYlY)t zYFEu}-mf`f@p&KB81<~m__Mfk$;F?aB+rb)Do$-L3r&CgRBtowYwp&^EcHos`pMwX z5Bgbty^6Ay(1)}y>W{SS-SiiSeRfjFX(cuBsYT>yKh3O+;a9iRU(?&%qmEpNb*T@} z%72w(i8n5&bwc2A@wW7CHrr1>ozpv#>W&{6T@OMw;!e$t=^h%et0*)GK7_{7m3P_e zJ}h}OraxnC_A`_#;e|j|h=S6GeOaGx!bE-}r%;PQ`_D^mHFAQy$;CQbhm`%7dK#18 z9QX=pxf&nDrZrp44~+%|jt=AZ8Cq5qS?%*a4Gnzpb1l_v#`)?7dYCEJC!izbs(0u^ zIkEO=R0KloH61NZ1BFHJeWTu&82L`4K=h5?60@>sD%R038e!R@K-TPA&Vy}F`xA7> z!`$MG@8$YB<&c%?)m^b(ygCZgj7?V~5nq&Me)7pHL1i;9WnqA3!;k zDJMRvo99^LS&FV#68ISq$R-w+*iFYmMmau9=w3)^>F$6tv3S4T&D8B1#|C}5Uoyul zPYu6Wjs;>tP5wC7D4i%aJYiqerNSr&0pO*kJ#V1`_KLaKmuVpfR03 z-`UZ9^?fenk#xg_1Hp>{B#ZaEujgo|>EQbD4csd!&zz9k z&h;7s0sGxKz~guLn*1n2cATa16v5}}-QTveC(@+7ob(SLiz!)GMf@6#Z1!B#JDq@? zk*VIIS;Lol=}EK5`Ea*dh1{elUb>Tg#KKmp^+!q5lyDNU5iW03m3a6qVvZkzsa3R&I&sX&(&bz~EbUf!&KFff3HjjLQUsTbS7jiEk zk>Z8~Jyh6QaNTTK-mnuH?-}~tns6$U=qXpkgV$0SP~lYAXF;1h9ZUQ96uvJPMh6*9 zFIpYf55k_z8#}yV)F->9`!i$f?Ic^mN2Z*fk0sHQ_hWF~qnB6{??(^ax@BD&Mz}Bc zI^Moet$_YIuW@iLU9zTU2CXEsy4(Kn{ZrJvIOaXZD_Jl=B=U;*c zAH_*?!pQHtL?zvd>cDrs!qmg!$4p+#^ZadYzLFCz-vOWV$jjDo93>JYH0;Vi(w8Ta ziTG7IfZIVLVW{$!!_nVLUfe*XFxBB@4O(he{ zlM|Y$cG7D57#O383VVi_6-HZ9`(J5hbBED5kcGYKqInb*Jffa>*~RSwW4<9Xy75TL zoY@2KgF1f3`$5uG%6y?uC=2Pu=Aw7QD-65D zjuZI1camut?+j79H(Asxi+`q)Hs| zq9b1?q0+75?zZ;i=F=yh@tt|qq8h>B zd{22c>8z>Rita}0c7bucgrytfDfWfMG5C#FuHle$kCEM6v(K>Z^&)B4P*V}V>f5+& zm~_b9ldMRomg(a{K}~m+=a6gIx#^?Pj7~lCe%y&yeA!+1l_wADACOUKJHEP1yeqgG zW*pUv%M|O-`>?03I{9VAsx~n<<3*@bPFbXP#sZ#|p{ficgE`I@oP$TjJ2t6u*)9$kX2AMsSPyZ8Piyh2OaIVZ?bnf#@A~lj(j>{I4#D$}59V*-^buFzYCh zyRo)ZjyktWdER^QXx|FpYN~l3JLouI#Yeo}7#G&iH7D%=Z<*z)nNuJX=zY0G5Z)N9 zHKn?k|M6Hjw7YIS%rNN%KEb5O^qbyCKl=q{#GQ!bR~i@A{X`#5giv0-sL0@X`et)a zuPAYTKqB=JXFIaHY3EnPs^oaa)+IH2HSd9InfLC%0={zytskXu;|j~@e;m<_F5J`p zq@X?zBa;2Jw9A`(FHJ;73=t_JPLCpb$>s{PwXU8M!wZ&iQp3G8|0$L@HhWFSxF?l2 zuc-7^@I{x@K)JS~C+mX^4?dDIlM0gW*uOOrZ`WdyFndgfcr8lV7g6lg{g7Cl>RWcu zg|GN8B1xou+Ows&xi7MDr!uPdv~ZJIwvj4&exoFSb=ru=EY#rhOP2gl(TmUUqM)FZ z{KYoh{aDcY@qot{jvJey>j>?{Y3+6Tlxx;yn}YAyRg|htxnsjM-DF<~#qRsicY&Rvt~ctR3DMyNK3gFAw8Qx1Y{z$-CzK z6id!qN*hB-R&Q+h`M##P$nm?sB|j8hWZ7PNe&Dv4&?aT9>E5(5>wpCs96!zjgLKrG3Ys;4^%~- zy;;%W4LyxC_{@7p(dsqTV%BwrACz@I1RKxze{O0~guZHeX8@sn@dXNtXsP#SEAQXU z9b>FKQ7eB&|GhUnVy(f}N=VM9UWD}Sx06Ow*fG%jFspfX3GAN6did<~}JwreNt+V5x^ z996%L_spYga9*A?sex-}z|EB^n`;*?2EI_!1Cp_@bluv-Z>4+b#-J^9v}IS(JMO%0C|;fx$60KaqjOYO_dc~s2GH=yTO$dbAXE(t z9%AbzrJ}#04_Xfk{3Oqpwx36c(ul?8&fYt7<<8&eY-xx%9g5a*g_s!oIy2m!ic@x= zyD(4_Zog_68=_5DaE^AdnAb7tv%Rce$M&ZEqm=8LH}lJ)CS}tfXLe?0@ya)wM>URk zMiSK7jjrC_yL^T56-uXQ$ET*3Q9m&Fofqo5T;Txnm>}iOUbPj2UsLAfO){O;4jOtD ztJ=_24#^v|aJb#DQR;dluEZdj|CjeI z>ZLEYjYjUgVD3MMrtf&UFEO(SP^-)q?g~_WOUQH$MgCG3y(bpy7idTt!l*V`Z9QE( zg-S^g6BEk}+psr{Z!9Zu^#17m0=Z4KX4*Wf=N-r5>KdttaeOo%G_Nwc_V#>STXR1o1 zuZtSC(|%Bf&8T+DJ2__Sa**RK@MS+tnrq*9!+f*qk&DrHOW$$E$KNAHnzdTz=IBv& zId_w)gJ;%q17FroMnX(aKcc6I_>2_?3{Xi&En@yryJT zm!8P>Fc2D(alld6YPEO05w^LTPV$M~$H29r?G`QCl+<6)FuP-B-&4kz-mAJL!!5o) zcYss>hbGtzC07m9Z+0j^J(nGwnlnlJ#`o zKs!GUTuIntVNYS`cldSg?tN<2op<(cdevUtl@)EmqkDe%^^x;tl0b5{dR|0!XpGz@ z97lv$mWy8cEv-k7rjugJBtt`d#k(7C)#a=e0a zpYHUDK<8it&45CU0wPkLcB05fvD6-BJhdr7ii?)~s6R4Bh%@=F0b;4b5qeXj$Gv-+ z_w1{~1Jn8_qeY?G4=g3rRIWjdl-b%$KlE>;Mvz}+fiih85oT@Kx4CTF^4ne2)BGi0 zdmy8(a%HAfh?(AwKl)LoM?{FK>ahIdPF!cS3XPSValyxuxVEc_{@)n`Yb}?&zSafM z4F!|PkV{TU7}!^JTnN^B_g;T)U?E7O+<**fhuf~K_PLq*ZmuM23pTQXiv$hiKOvc{8}rI>PLS;w zuYlANh%1-!e2JKRf)dAw3>`biX8YIC0v=s-tE?_w`ZWp24-SZ3zyhm4&!Lr__M|WV>tZ9r`qDXNqb=4$+!U-SNBT;`WUaJcx*lwc{|!MTVFpzMw6f ziRVj~+a0Km^%95|WQjfS;0QTF^(`L=Mqaut(q@*z z^x^R<_zzx#@gtWH!IQ|oKIf}i1`AgOja7f*2W=U8Z^I#WO>a4R*DEWj$ zcEx%n6X{h3zXy^^=5#lc)l_I%KF@Ul?*@hlQ+0>;Mi4x>vW6?edFcm}3x&exS#xhq zI|laC@=gw4S~3$kx;6oZPB!!G=hLmNXYe$=rdvYNS1E1=3a|3q59Gf@FH4fNiKp{P zTW$|p!)VGO(CBSO@ZK;yk>>H#SgOH5B^UC`s8Mhm4?|38LIh9W$_G99-JZP>N_NMg7B{>e*^us@Nzc~ndcH(g`qUJLEiMH{RX>4g< z>0s);KtdClYsc5eB-s`yyY??%jffNyiC@|5rtypUMoYk<9$l))ZxQApVe&0VEv~^h zHtm?>&`gp#x3TCOl}d!py6<9BM$8uPuvz96-g>%fo&D=J5I*Yl8t<&qV%-9$_?0hC zt|%lAvtX4XGXXCf+0?APaaDSJE^T7!F@a>{4#c=4pW)SRrR zDLTI{?b>r@Z%Qn{lL#9*B;Xv{`^;`p7IvBx+NlR4j|9oHd^dNpe(tT0?}dI>E*BG- zkMN38{THP8$ zG*ii*zf~XD#j6t49=c3A;ecOoJBz4lvG*exEv-Kt@AW%~T)vKw3}TPX1$&k*)04_s z;Sb9Q`G7;KjrSV&vGf673hb4<+tu}qvXit5_MU376I_nthjfL(Rh*gv z4kuB?zQd3valcGl+qwHkCcS>E3m4E2%a7B3;R$@2T&AYliW(wd@gkgXsQk$?T^oz& z%XIS8D|MDvP!yCJOlAzq3f_ddhR^!1_Q!Zb9}7~S%2e>!@N&827aTjpp$QeHIv%F0 zP+C;dPAc{8ByH-|=7ak>V0d|8$t>ht zzxjmXB0HR+U0u(X<#oHTxQ#|WlNxjFAZ`Hbvgo()7T=1?`$E4s>8^i&aTX?KojtLe z8S&iu>pg44g}trRb~JbXm-^G<_Muaq#crj1KPgH^OQpw;n@)r#3OTRY&2vnA;*3z{ zT4xtq{UQ3(&qj>c{{3UMV1?~M_GH4XwE~+P!`dI!vBK`NL*9H(o~g;E*5^_61J=tlmbpw`FP}6lXXu*L z(SMZ^9O($=dy22xrNqvspiCX(6@)`pY(Bp`5Y9iEs>|Z0koY9>O7P1^_)8lZJMB2W zLw7nM{Z5f$gT<{VY$LV-d#V7r>ft^H;FZ+wCcQ&t3>Cz6|9mzlmlru7; zx}Q)Q6}|E3h~|ncs-0>se47@3>Rv0Yw;kx}+Yx;3X%(F>lH;`F+BV2)?U-gAG6+%U zc6?w{zVhwrrM+BU7NKig^R%gMp4RNV6_$B?UY*%;6{s99Ezv_l7K9R zaKU_+(whX*S^<<{`3V;+Jk;mv`Kj5LXR1SUmMx{3HVcB^UGO01%G&c|?Yq-f!#JDl zrL06MS97YnmhQP+;U5&yf7eZyI-?0CBHp&BS9!AUe%5!6JL{o7^AC~kA6EwcCenpq zxFE3K!6@(&uoCS5NpS1wVqr;6D$a#~hy#E8=Z_1CK)?`OzyIq$en6egfBlWi;eWw? z*ZKVY`wI*T0rpq1V6fjeC9q&{p!z2k42J&wQ1hR7aB-k|DmD!AyTB$E-rsx=B@P3P z4+a1Iq}iWsQAh-E4DwGH8U+Ql1zrmS!7xx5uxNj_#lR7u@nKNEtEXb&VSc}l{Ra$q zyBkCU;1zG6jwm)B@^>9gthQ*N)pU%2@1O0<7|4-NzIBn1Ai zVz5|vC@`Jj7|^;w5YXQbl>gZlfq-MLF9d-?VDk$EDGmeC4+;By4EN9PArTR%;p|Lg;W{9OYV3x)yn5E`iEgN=uVgZo7zK>7dz$PuUyGzQGO z7@z_Sb|09(;d=}c%+DAw4*|ETK=KO}|JNz#KjsUt^Y6#c|AhS(I1mg5yylOMhXkz= z6nMAkEaVe-|MBb9^v>dqFVR@0T92@Q{GLz=mN!{0D^twal>b z;4pDeTQ~wtQ=lX=2oE6+2aN>*gMsLb02m*;UjzmWLjna5vGI`b-;ekIIbS5|Z}7l6 z7K(zxLEi&Z6SfQjS`ECGXegKu&|p~wmJJH(1C7Ce_y7X|=|3n24g-w^g9NWH1}v*E zam4S+*niLk(0-skV1OdR?gIuv0Y$R0+Cs$vHv=061&t2|FcJ3LU{JsSgW6(#`!9cv z4+a6*WEczv;(Hhj`Mb(CR$H*_!{88*eue@33>qIC0n&9apsF`$d*6)Hbf6xFSjsfu`5Z!_N zCIsMogWAHNpx6a4-5}WqVnfh;5x)f!dn|yO1j7&@ngY=WNUtFffCr8JJwRn+(-{E_ z1)FyP5J(mffbR_&3lba)A%JiYn_mE}fdat*^9G_H3JM-G3IURR1PTa5vFC;Y%Nqg> z1Wnj@Xh48LFeG@*(HM{}Mqq&3cGztJG*BNHG)T^o;{VD${K0F0NQ2}TDGm@Cs}H0& z3KVMqW)OniFA{KVvFQT1f1sEc2?a`BVfO*Jb=drZ1f~lb3l!|vApwU7n}>jFi6A;7 z0i%aadn6F1VDltkX+gY(1ne|uEC5@9+5&t4>I1N~Ai4ng2oU`+VBZ!AtS@M87&M6X zC~;sxuxJXfILN0)i6cS!574IIwh$<2Em05z$ZtYHP#}K;1r-O$ISL9WBJA-2;)X4Q z07XIkjDi6r&9K`74kfm|L;+40=zB1*T>zvPq!Uqa1ZdrWup6W&QNYDm>~%vSpdcLv zgd~3hLxS`g&;v+!qJ9e@_Iv?R0MQQ#ju(I|11L5?p&+2x1qJ9e5d8qV3hD!e0m(iJ z4LCp8;{!ws)E12f**6phoF4*AH^>(Nx&_G~T3j3?t7vgJNIuX&nhTqLKsF5IC!&GS z8H|Sn(H>YKkbXu(p%`p^0B|mdhX73sk|Q(_o`c!~ej*6=+o{H)Ga88Zv2_j_4$f}? z%K@@IXuw~?)+J~p@J=aK9~f~Ih}SUUXi$8F0TQ0rItK%Rg7_H&#en!8fPwTM1_pc( zdn`a~h0SY#r3K})F-Rck25O52={gMHc4E^MfPvyw48Y^qw8CJ-K{g750WuQU{r-*4 z2GU&EIaIz@2Gr2} z*Nen|;=w__D1e8=_9Fn;-_R5RI561#B7kTJ1Vduym4Q;8=-)L}{u~PuNa%oIAb$vm zhyjNegonn?`v8?e0U^Z3L&30RAHYL^=?A3cLHq|OSu7a@A`(#E8-M}P26n%|wh)NN zF@WQVjfa7O#|)Mupx7yBF9vW90M5ty9>8qa@h^af0LceHgx{}K|FIqbBDReOoGUoC z{sUlW5Z?oPEFhTyTq$h50hDG%V&^CT7$|=VfdFaF zbA12|iS3UAFf@1`fD?=@gAl;vfoO#SB0X#xpa91m8wNNC*zyKk#l-eYfW#pjJZ4}| z1Y2f+9UCZizrZ#Gc0K}NHBcTCfFVIV39uwc4*?ns+gAaU29V6fni~{YVC?xqA%KSu z!UL=~HVi-n;Q?U=*)ofqZ2E1~3Qqm;qS;%>&4TVCyC*u)T^cTY$O5_Ol_tNU--)0JQ z>IK_(1YlrY43HjsPXyTN1vV3~=LQ5#AU*(8F*ff)0r>#U4GrvmVt)^CWI=tPk=QXE z1n`EyybIV5&{!~FzX{lj0rMZQt?Pi1fb1X)7&JDmfV~}% zeg;BuF#P}*6MM~pXbWVMVL*->j0eiy045Iw(y_mXkQW#R8Twv zzyP9RjSmGR+_A?D>==S<9*`Em&SwLGB;YJ#e-B8sVy_#J%K-VJ0Ow-o`T%YQ#Y_MU zlrI5bp!^yD1MNWq3K4Xs2!H{~9ed0`Vg*DOz@-7c91>*LS5{58iEGI9Gg$k5YS%HZ-gNJLUv-?f*EN;_6~%ZD-*^ zPAVluPAYcG(b1I);6$!lz&}(SEFHOkW&hVdw5`1@exC#sQ&ljK0`^Mf(Q@*Drh>{T zK_O5%1qH=xFr>Vk5)d8AqvU1&YYZb98FJExu4XQ-|2}32j0=T;k(2WADQYN@ll~9t Ci=*@a literal 0 HcmV?d00001 From c904943339312d9180b0e4726d471a6c2ab1ce87 Mon Sep 17 00:00:00 2001 From: dylankb Date: Thu, 29 Mar 2018 23:39:39 -0700 Subject: [PATCH 09/15] getClosestBatNodeToShard filters out nodes w/ same host and port then checks whether they are alive before contacting --- batnode.js | 13 ++++++++++--- seednode/seed.js | 1 + start.js | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/batnode.js b/batnode.js index 72c6e2a..fd62972 100644 --- a/batnode.js +++ b/batnode.js @@ -108,13 +108,20 @@ class BatNode { this.kadenceNode.iterativeFindNode(shardId, (err, res) => { let i = 0 let targetKadNode = res[0]; // res is an array of these tuples: [id, {hostname, port}] - while (targetKadNode[1].port === this.kadenceNode.contact.port) { // change to identity and re-test + while (targetKadNode[1].hostname === this.kadenceNode.contact.hostname && + targetKadNode[1].port === this.kadenceNode.contact.port) { // change to identity and re-test i += 1 targetKadNode = res[i] } - this.kadenceNode.getOtherBatNodeContact(targetKadNode, (error, result) => { // res is contact info of batnode {port, host} - callback(result) + this.kadenceNode.ping(targetKadNode, (error) => { // Checks whether target kad node is alive + if (error) { + this.getClosestBatNodeToShard(shardId, callback) // if it's offline, re-calls method. This works because sendign RPCs to disconnected nodes + } else { // will automatically remove the dead node's contact info from sending node's routing table + this.kadenceNode.getOtherBatNodeContact(targetKadNode, (error2, result) => { // res is contact info of batnode {port, host} + callback(result) + }) + } }) }) } diff --git a/seednode/seed.js b/seednode/seed.js index e9607ae..28b7d15 100644 --- a/seednode/seed.js +++ b/seednode/seed.js @@ -67,5 +67,6 @@ publicIp.v4().then(ip => { batNode.createServer(1756, ip, nodeConnectionCallback) + console.log(kademliaNode.router) }) diff --git a/start.js b/start.js index 91c9ec6..944c240 100644 --- a/start.js +++ b/start.js @@ -85,6 +85,7 @@ publicIp.v4().then(ip => { kademliaNode.join(seed, () => { console.log('you have joined the network! Ready to accept commands from the CLI!') + console.log(kademliaNode.router) }) From 6ac5a48ced685028f04e10dbadcc2a4b77cb66d7 Mon Sep 17 00:00:00 2001 From: Wilfred Tannr Allard Date: Thu, 29 Mar 2018 17:40:26 -0400 Subject: [PATCH 10/15] removing variable shadowing --- seednode/seed.js | 10 +++++----- start.js | 12 ++++++------ utils/file.js | 8 ++++---- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/seednode/seed.js b/seednode/seed.js index 28b7d15..59ee764 100644 --- a/seednode/seed.js +++ b/seednode/seed.js @@ -41,7 +41,7 @@ publicIp.v4().then(ip => { console.log("received data: ", receivedData) if (receivedData.messageType === "RETRIEVE_FILE") { - batNode.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + batNode.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { serverConnection.write(data) }) } else if (receivedData.messageType === "STORE_FILE"){ @@ -49,15 +49,15 @@ publicIp.v4().then(ip => { batNode.kadenceNode.iterativeStore(fileName, [batNode.kadenceNode.identity.toString(), batNode.kadenceNode.contact], (err, stored) => { console.log('nodes who stored this value: ', stored) let fileContent = new Buffer(receivedData.fileContent) - batNode.writeFile(`./hosted/${fileName}`, fileContent, (err) => { - if (err) { - throw err; + batNode.writeFile(`./hosted/${fileName}`, fileContent, (writeErr) => { + if (writeErr) { + throw writeErr; } serverConnection.write(JSON.stringify({messageType: "SUCCESS"})) }) }) } else if (receivedData.messageType === "AUDIT_FILE") { - fs.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + fs.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { const shardSha1 = fileUtils.sha1HashData(data); serverConnection.write(shardSha1); }); diff --git a/start.js b/start.js index 944c240..223942f 100644 --- a/start.js +++ b/start.js @@ -14,7 +14,7 @@ const fs = require('fs'); const fileUtils = require('./utils/file').fileSystem; publicIp.v4().then(ip => { - kademliaNode = new kad.KademliaNode({ + const kademliaNode = new kad.KademliaNode({ transport: new kad.HTTPTransport(), storage: levelup(encoding(leveldown('./dbbb'))), contact: {hostname: ip, port: kadNodePort} @@ -34,7 +34,7 @@ publicIp.v4().then(ip => { console.log("received data: ", receivedData) if (receivedData.messageType === "RETRIEVE_FILE") { - batNode.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + batNode.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { serverConnection.write(data) }) } else if (receivedData.messageType === "STORE_FILE"){ @@ -42,15 +42,15 @@ publicIp.v4().then(ip => { batNode.kadenceNode.iterativeStore(fileName, [batNode.kadenceNode.identity.toString(), batNode.kadenceNode.contact], (err, stored) => { console.log('nodes who stored this value: ', stored) let fileContent = new Buffer(receivedData.fileContent) - batNode.writeFile(`./hosted/${fileName}`, fileContent, (err) => { - if (err) { - throw err; + batNode.writeFile(`./hosted/${fileName}`, fileContent, (writeErr) => { + if (writeErr) { + throw writeErr; } serverConnection.write(JSON.stringify({messageType: "SUCCESS"})) }) }) } else if (receivedData.messageType === "AUDIT_FILE") { - fs.readFile(`./hosted/${receivedData.fileName}`, (error, data) => { + fs.readFile(`./hosted/${receivedData.fileName}`, (err, data) => { const shardSha1 = fileUtils.sha1HashData(data); serverConnection.write(shardSha1); }); diff --git a/utils/file.js b/utils/file.js index e142095..243c857 100644 --- a/utils/file.js +++ b/utils/file.js @@ -33,11 +33,11 @@ exports.fileSystem = (function(){ const fileData = fileSystem.createReadStream(filepath) const zip = zlib.createGzip() - const encrypt = crypto.createCipher(algorithm, privateKey) + const encryptStream = crypto.createCipher(algorithm, privateKey) const encryptedFileStore = fileSystem.createWriteStream(tmpPath) // read the file, zip it, encrypt it, and write it - fileData.pipe(zip).pipe(encrypt).pipe(encryptedFileStore).on('close', () => { + fileData.pipe(zip).pipe(encryptStream).pipe(encryptedFileStore).on('close', () => { if(callback) { callback(tmpPath) } @@ -48,11 +48,11 @@ exports.fileSystem = (function(){ const privateKey = dotenv.config().parsed.PRIVATE_KEY; const encryptedFileData = fileSystem.createReadStream(filepath) - const decrypt = crypto.createDecipher(algorithm, privateKey) + const decryptStream = crypto.createDecipher(algorithm, privateKey) const unzip = zlib.createGunzip() const writeStream = fileSystem.createWriteStream(tempPath) // - encryptedFileData.pipe(decrypt).pipe(unzip).pipe(writeStream) + encryptedFileData.pipe(decryptStream).pipe(unzip).pipe(writeStream) } const sha1Hash = (file) => { const fileData = fileSystem.readFileSync(file) From 3ffa1a811ec377bf014a369c87d96a1ae119394d Mon Sep 17 00:00:00 2001 From: dylankb Date: Fri, 30 Mar 2018 10:30:24 -0700 Subject: [PATCH 11/15] Comment out all manual file commands --- audit/client/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audit/client/node.js b/audit/client/node.js index ee0931e..a4af98d 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -23,7 +23,7 @@ kadnode3.batNode = batnode3 // Join kadnode3.join(seed, () => { console.log('you have joined the network! Ready to accept commands from the CLI!') - batnode3.uploadFile('./personal/example.txt'); + // batnode3.uploadFile('./personal/example.txt'); // batnode3.retrieveFile('./manifest/85a2ea0f0d11634d334886d9fb073b0d64506199.batchain') // batnode3.auditFile('./manifest/85a2ea0f0d11634d334886d9fb073b0d64506199.batchain') }) From b354a12cbdda2025f74a26f63ab7ef90e528ac13 Mon Sep 17 00:00:00 2001 From: dylankb Date: Fri, 30 Mar 2018 11:01:59 -0700 Subject: [PATCH 12/15] Update CLI formatting --- bin/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bin/index.js b/bin/index.js index d05ebc6..0cf6edb 100755 --- a/bin/index.js +++ b/bin/index.js @@ -51,13 +51,11 @@ function sendAuditMessage() { client.write(JSON.stringify(message)); - console.log('displayFileList!!!!!'); client.on('data', (data, error) => { if (error) { throw error; } - console.log(`manifest path: ${batchain.audit}; data integrity: ${data.toString('utf8')}`); + const manifest = fileSystem.loadManifest(batchain.audit); + console.log(`File name: ${manifest.fileName} | Manifest: ${batchain.audit} | Data integrity: ${data.toString('utf8')}`); }) - - client.write(JSON.stringify(message)); } function displayFileList() { From 16dee9ad0bad6504ac1ef42fb8eefe2a322f6b1a Mon Sep 17 00:00:00 2001 From: dylankb Date: Fri, 30 Mar 2018 11:04:33 -0700 Subject: [PATCH 13/15] Add demo instructions --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1e1a245..d96f6bf 100644 --- a/README.md +++ b/README.md @@ -199,12 +199,12 @@ Then select the options to upload/download/audit files while connecting to node1 - `batchain -l` 4. You can always run `batchain -h` to review available command and options -## Note: +#### Note: -For `npm`: -1. Run `npm install -g` before running any `batchain` option or command, make sure to +For `npm`: +1. Run `npm install -g` before running any `batchain` option or command, make sure to 2. Need to run `npm install -g` when making bin changes -3. If "chalk" is not working for you, run `npm insatll chalk --save` to make the command line more colorful +3. If "chalk" is not working for you, run `npm install chalk --save` to make the command line more colorful For `yarn`: 1. Run `yarn link` to create a symbolic link between project directory and executable command @@ -223,3 +223,51 @@ For `yarn`: -h, --help output usage information -l, --list view your list of uploaded files in BatChain network ``` + +#### Local CLI demo 2 - upload and audit a file + +First step is to make some temporary changes to allow the code to run locally + +Uncomment the seed node information and comment out the remote seed node info. The file should end up looking like this: + +``` +// For network testing: +// exports.SEED_NODE = ['a678ed17938527be1383388004dbf84246505dbd', { hostname: '167.99.2.1', port: 80 }]; +// exports.CLI_SERVER = {host: 'localhost', port: 1800}; +// exports.BATNODE_SERVER_PORT = 1900; +// exports.KADNODE_PORT = 80; + +// For local testing +exports.SEED_NODE = ['a678ed17938527be1383388004dbf84246505dbd', { hostname: 'localhost', port: 1338 }] +exports.BASELINE_REDUNDANCY = 3; +``` + +Next, change this line of code in the `while` loop + +``` +getClosestBatNodeToShard(shardId, callback){ + this.kadenceNode.iterativeFindNode(shardId, (err, res) => { + let i = 0 + let targetKadNode = res[0]; // res is an array of these tuples: [id, {hostname, port}] + while (targetKadNode[1].hostname === this.kadenceNode.contact.hostname && + (targetKadNode[1].port === this.kadenceNode.contact.port) { +``` + +to this. + +``` + // while (targetKadNode[1].hostname === this.kadenceNode.contact.hostname && + while (targetKadNode[1].port === this.kadenceNode.contact.port) { +``` + +Now we can proceed with the demo. + +1. `cd` into `/audit` directory +2. If you haven't already, run `yarn link` to create a symbolic link between project directory and executable command. This only needs to be done once. +3. Open 3 additional terminal windows or tabs that are also in the `/audit` directory +4. In the first terminal, `cd` into `server` directory. Run `rm/db` first and then run `node node.js` +5. In the second terminal, `cd` into `server2` directory. Run `rm/db` first and then run `node node.js` +6. In the third terminal, `cd` into `client` directory. Run `rm/db` first and then run `node node.js`. This boots up the CLI server which will listen for CLI commands. Wait for a message to log out saying the CLI is ready before issuing any commands. +7. In the fourth terminal, `cd` into `client` as well. Here we can issue `batchain` CLI commands. +8. There should be a example file in the `personal` directory, so run `batchain -u ./personal/example.txt`. Wait a few seconds for the 24 or so shard files to be written to `server` and `server2` `/host` directories. +9. Kill the process manually (Control-C) and run `batchain -a ./manifest/$MANIFESTNAME.batchain`. Replace `$MANIFESTNAME` with the manifest file name generated on `client/manifest` directory. From dd65868258d9d2a9056cfdf23fd4aedbddeec0d7 Mon Sep 17 00:00:00 2001 From: dylankb Date: Fri, 30 Mar 2018 11:05:13 -0700 Subject: [PATCH 14/15] Remove log --- audit/client/node.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/audit/client/node.js b/audit/client/node.js index a4af98d..3e387b9 100644 --- a/audit/client/node.js +++ b/audit/client/node.js @@ -68,8 +68,7 @@ const nodeCLIConnectionCallback = (serverConnection) => { if (!batnode3._audit.ready) { fibonacciBackoff.backoff(); } else { - console.log('batnode3._audit.data', batnode3._audit.data); - serverConnection.write(JSON.stringify(batnode3._audit.data)); + serverConnection.write(JSON.stringify(batnode3._audit.passed)); return; } }); From 99a1564c09358515d5ab334d04c03010947956d0 Mon Sep 17 00:00:00 2001 From: dylankb Date: Fri, 30 Mar 2018 12:14:38 -0700 Subject: [PATCH 15/15] Add logic to start script --- start.js | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/start.js b/start.js index 223942f..181b0db 100644 --- a/start.js +++ b/start.js @@ -12,6 +12,7 @@ const kadNodePort = require('./constants').KADNODE_PORT const publicIp = require('public-ip'); const fs = require('fs'); const fileUtils = require('./utils/file').fileSystem; +const backoff = require('backoff'); publicIp.v4().then(ip => { const kademliaNode = new kad.KademliaNode({ @@ -30,6 +31,7 @@ publicIp.v4().then(ip => { console.log('end') }) serverConnection.on('data', (receivedData, error) => { + if (error) { throw error; } receivedData = JSON.parse(receivedData) console.log("received data: ", receivedData) @@ -72,9 +74,42 @@ publicIp.v4().then(ip => { batNode.retrieveFile(filePath); } else if (receivedData.messageType === "CLI_AUDIT_FILE") { let filePath = receivedData.filePath; - - console.log("received path: ", filePath); + let fibonacciBackoff = backoff.exponential({ + randomisationFactor: 0, + initialDelay: 20, + maxDelay: 2000 + }); + + console.log("received path: ", filePath); batNode.auditFile(filePath); + + // post audit cleanup + serverConnection.on('close', () => { + batnode._audit.ready = false; + batnode._audit.data = null; + batnode._audit.passed = false; + }); + + fibonacciBackoff.failAfter(10); + + fibonacciBackoff.on('backoff', function(number, delay) { + console.log(number + ' ' + delay + 'ms'); + }); + + fibonacciBackoff.on('ready', function() { + if (!batnode._audit.ready) { + fibonacciBackoff.backoff(); + } else { + serverConnection.write(JSON.stringify(batnode._audit.passed)); + return; + } + }); + + fibonacciBackoff.on('fail', function() { + console.log('Timeout: failed to complete audit'); + }); + + fibonacciBackoff.backoff(); } }); }