diff --git a/package-lock.json b/package-lock.json index 27d5492eb47..6080636b6fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,6 +51,7 @@ "puppeteer-chromium-resolver": "^23.0.0", "puppeteer-core": "^23.4.0", "reconnecting-eventsource": "^1.6.4", + "sanitize-filename": "^1.6.3", "say": "^0.16.0", "serialize-error": "^11.0.3", "simple-git": "^3.27.0", @@ -18264,6 +18265,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", @@ -19483,6 +19493,15 @@ "tree-sitter-wasms": "^0.1.11" } }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, "node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -19930,6 +19949,12 @@ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index a125e3b32c7..ce0c1b75dbe 100644 --- a/package.json +++ b/package.json @@ -407,6 +407,7 @@ "puppeteer-chromium-resolver": "^23.0.0", "puppeteer-core": "^23.4.0", "reconnecting-eventsource": "^1.6.4", + "sanitize-filename": "^1.6.3", "say": "^0.16.0", "serialize-error": "^11.0.3", "simple-git": "^3.27.0", diff --git a/src/api/providers/__tests__/glama.test.ts b/src/api/providers/__tests__/glama.test.ts index c44debddff0..58d9b6ab670 100644 --- a/src/api/providers/__tests__/glama.test.ts +++ b/src/api/providers/__tests__/glama.test.ts @@ -6,7 +6,7 @@ import { GlamaHandler } from "../glama" import { ApiHandlerOptions } from "../../../shared/api" // Mock dependencies -jest.mock("../fetchers/cache", () => ({ +jest.mock("../fetchers/modelCache", () => ({ getModels: jest.fn().mockImplementation(() => { return Promise.resolve({ "anthropic/claude-3-7-sonnet": { diff --git a/src/api/providers/__tests__/openrouter.test.ts b/src/api/providers/__tests__/openrouter.test.ts index 7b2998f8e7f..5ae7f607a93 100644 --- a/src/api/providers/__tests__/openrouter.test.ts +++ b/src/api/providers/__tests__/openrouter.test.ts @@ -9,7 +9,7 @@ import { ApiHandlerOptions } from "../../../shared/api" // Mock dependencies jest.mock("openai") jest.mock("delay", () => jest.fn(() => Promise.resolve())) -jest.mock("../fetchers/cache", () => ({ +jest.mock("../fetchers/modelCache", () => ({ getModels: jest.fn().mockImplementation(() => { return Promise.resolve({ "anthropic/claude-3.7-sonnet": { diff --git a/src/api/providers/__tests__/requesty.test.ts b/src/api/providers/__tests__/requesty.test.ts index 3e6803c4aa3..b999a01947e 100644 --- a/src/api/providers/__tests__/requesty.test.ts +++ b/src/api/providers/__tests__/requesty.test.ts @@ -8,7 +8,7 @@ import { ApiHandlerOptions } from "../../../shared/api" jest.mock("openai") jest.mock("delay", () => jest.fn(() => Promise.resolve())) -jest.mock("../fetchers/cache", () => ({ +jest.mock("../fetchers/modelCache", () => ({ getModels: jest.fn().mockImplementation(() => { return Promise.resolve({ "coding/claude-3-7-sonnet": { diff --git a/src/api/providers/__tests__/unbound.test.ts b/src/api/providers/__tests__/unbound.test.ts index 3ceacf4d2e5..c01a2b53676 100644 --- a/src/api/providers/__tests__/unbound.test.ts +++ b/src/api/providers/__tests__/unbound.test.ts @@ -7,7 +7,7 @@ import { ApiHandlerOptions } from "../../../shared/api" import { UnboundHandler } from "../unbound" // Mock dependencies -jest.mock("../fetchers/cache", () => ({ +jest.mock("../fetchers/modelCache", () => ({ getModels: jest.fn().mockImplementation(() => { return Promise.resolve({ "anthropic/claude-3-5-sonnet-20241022": { diff --git a/src/api/providers/fetchers/__tests__/fixtures/openrouter-model-endpoints.json b/src/api/providers/fetchers/__tests__/fixtures/openrouter-model-endpoints.json new file mode 100644 index 00000000000..10ea52f07fd --- /dev/null +++ b/src/api/providers/fetchers/__tests__/fixtures/openrouter-model-endpoints.json @@ -0,0 +1,25 @@ +[ + { + "scope": "https://openrouter.ai:443", + "method": "GET", + "path": "/api/v1/models/google/gemini-2.5-pro-preview/endpoints", + "body": "", + "status": 200, + "response": [ + "31441d002056aa5ad5de6cfba09eb44cd983cf558aa50307224fd48d88f0c0d12137eda7bef1c435891ecc325645bf9d4794cd227137c069a7450a3f6ea3541aeacce9727170159a489e4b07a179ae738dc1a983bd860cb018631c277e3ab29720d5dea2ad528e551ef3c67c0e83e03cc3e22da9c6d2dbbb03ed2d5afa96237dbbe0d4e5e379806d0ef657edc161db2c0d863cfc7525951860c1af95425fdef6f1e177a1a24eb98a9b4ab75cb9acf4e63df938f044074a6c06dac44cda2750e3aa6e1246437d1cde032d10d0fceac4d20b07958df4a4aeec4affaa012d9b3eb5d0e3c33fdd4ad849181f1ffe53efd2b0f7f70b17431cdc7a92309228d5154e736588069b1ce7714bce6952e85c744b1cb672c175e424fda500d2300b1b3041bffe4209e02917760c1a225f6c218da952e14c3eaba01868e2fc07a68969cda1df7a9777e56ff7021bc945ab34b99e29c5222ab6214868114c9f3ebfc91c1c358cbac63aba3c18cabc99b8570923ed7b493445434205c506e4261983e7a03ac145e5e4177400cabf2a713a933092e58c0b18a4ecdf48b9d73933ec3534ee38c815670864c1a091d593757a991836ccd364e0e3e026d14b58285fe813f16ee4eaa5f285b20969d68ece56b8c01e61f98b7837320c3632314e0ce2acf4b627b7061c86ca07350aecd135c00ba71b0a08efaa5e567b2d0cbc9adc95fbb8146c53ef1fb6072b8394a59730c25e23e5e893c2a25ed4755dd70db7e0d3c42101aeda3430c89cb7df048b5a2990a64ddbac6070ceebeefc16f4f805e51cdcd44502b278439ab5eb5dbfe52eb31b84c8552f1b9aaaf32ccab7a459896918a4f4096b035bdf1a6cccc99db59ac1e0d7ec82ca95d307726386bbe8b4243aff7b14d855db2e5b0ad032c82ac88aecad09dd4eab813d6282a8dd0d947de2ecb0656ea03175e91d885361ba221b03605034261814e6c1c060c0125d58114a23c9334aa543079846052706459dce45f590e0f827bf794f3f751e24c224c06e3106cccf5c5dea93db5b0303" + ], + "rawHeaders": { + "access-control-allow-origin": "*", + "cache-control": "s-maxage=300, stale-while-revalidate=600", + "cf-ray": "93ed496b8e0a0fb1-LAX", + "connection": "close", + "content-encoding": "br", + "content-type": "application/json", + "date": "Mon, 12 May 2025 22:17:32 GMT", + "server": "cloudflare", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding" + }, + "responseIsBinary": false + } +] diff --git a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json index 5edc53d8b1b..60c7556bc91 100644 --- a/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json +++ b/src/api/providers/fetchers/__tests__/fixtures/openrouter-models.json @@ -6,16 +6,16 @@ "body": "", "status": 200, "response": [ - "6300f8ffc388d4a41e008dd0e173defe7fa9fab5dade8349f26f00220952a439517290354dda72eca43eea47d423f086852afc7a0552f0ef8089ebe1a4b0587bb3e8d50efef34bfde45bd1b20d805982d31afc68614a03f4dc771f98d10c18490633b680641bc84e1b495be4c8f7bd91e4917e939d667b9bb6ffdfb5b58efd53fc534a23dcfe4947150297ddce36012459986e6368f52d575b2ca8034e3e0bae9a697969f5953937d90b9200e4485691297573fe004ad3e029cbc037f843622852b2fec50f8998649d38df6960f7703fc0a5616e6b0e0d6b56648d680c64b3d97c975db0f957cba7f53e30276952775525ae7adc53c98f495df6d677fae1b297cced9b8bb797de64f7f5499a386a78d78135f679050abc12b3f90dce808b7d607e96a4c925a47f6136c97aba9c5fad8ac9f3c93c4dccc5fd3f601bc5bb649d24b8bf8bede86710857f5e7d79e9f3c5bb2c768ecd18fe4268bc618b5d8fb7be53d4cd4777e37a953f36649f8b29ce7bd982c1de07943545e771f78392ac155785e4ca0d98c24af24764b10b0e61b896c45521b61a11a47e3156104c47366bbc61f8d4337d1b3f40f455655911566bb3b8d849942367efa1fb389a2b5575535d608371f83fc3dc3e84e3f0ff354e2158591dab6c916c7eebb7c1376dd41cafc5b1a0328f4230a251aca51aea1859aff8619a42221ce5f568be99be8b6d1771f1d71fdfbd95aef3ac64a684e2d0de457a12600d55ec62266fe32c963bd4fcc13db816d6394e13befbae5a4a4028ac5997e9efbe4b1180ed3723ae42a71c14d1434f12cb5a9a47ee49632a53cb63d1b02f89498a9cb6e1228d22fdc3e6f849cd0e54463952648393c4fa8a25f07cee90f3c45eca4df64527fd71ea81a6b766542f7848da2d2bd6e20ee2aa87e4bb1f5b360effe61af00fe92af0536467d8a0ac499c62499e237c57d51151c5c60dc4e1577f9652f4177f76f9f1157f854895c237e6f76cd8ca9183b80a84bd38b220a7270e391edc83fbd831cebfdff21a3ff31d28300845fced707d97a2f71d1aead12903206fce7a576d41f4a964d91ea5772a8683d4f8543b9bec49aaac8c64430f5194b26fa7e033c1e187dfb566dba2f40d237a101c6e97ca88f3a73c38b8c0f7516534e6d0cf7c07471a8bd82d1073aaf75d28390d2ff6d0b839b268bcf3d6571dc3d38512b6870dbf09053e106b7638e78dd2d58519f361fcf620ce5f12c588fcc12569727d1cac7c8a8fae665a9375315b5eadd2c455461079d0fd1c92f50f49e30d59897db24e223fc5ec2f223fc5244dc4b55d7cfc8998b026eb5fdc57925fa6c9506de707368efec04ebe7248d6c9bb5873489006fad7fe18fb9693b5ebacfd4d9ab4414a7155b2fe21419072b24e26a59f6c5acb38dd3049d224b0b70af5955969a8e2ef564ebc7b445d7e5592f61fa10be9d4ff264da26f1fa5798b42b2fe4146430d3d3d16c279ac91abc56e4a13d1c7c69b81fdf94cb2de9355fe4d9ab41c1e8b7985472b8dc47d14f22c63f3681a84c9fa1719a9d49bd32472d372a046514545bdb90ec534390bb0e7f1eb4d1a7d9ba4c93ef3dfc195fd63cb8e6cec93345933e860c90f93ca6c32a83f2469d288cba8dc7294ca8a9f9f637dd506bfd34feb253eee843401fdfdf15ffe26b50c94fe1f27b9fceca1670d1be99aac78164a5d69476fad26036cf75d1285027f3faf66cb623eb53e415d8f442d559d5932848fe7b20da29c55810c6b6fad90012f00b61e2ca1655a386461310fa3a4f6da5db8236105459c1e5ab23da2322eb1812915278bd26bd4d17ff81d5972252b3452e4ccefb3587346214250819c92c798ea4105006243abdfff2742755eabf41a51faa6a550e8d918c848be7205ae54b192a630ac7b60e256a125d92f6cda706b7ddfb08b8a6095e5353ae16a8a845a4da6d318842c40574a52d6aea94fda27f3a964ab1007e31bc0e6994b587a63cb0c7dfcf46a6b4710b2897649c1e885ccb4aa3e5bddef829814de656de066df3b212efb72ffa2fceb3b0351f8364a235fedaa197191ab06f1117933bbdb3dd738f970d85b7fd2bcdfc5e1f77b0e2a610c8b8923c3d96fa9ec71fa6e84e8459d0b9b8f189d7f562f2c7586f1d13bc71145beb82cf2658a8da58630c7968e1ca43cd4630b2f7cd39033f8f0a375da2cb78c95bc0624fd4147f48c828414a5df797d138d2cadef0c6cf48fa539d2df63d3623a59ceb67bf047d250c580cf88db35e05756efa14b9e837cf2a6ff5c05d0379f17334dc032dcfe8f95e8bd45d792b78f9ebfdc440b75a220baa800d854701eb1c58969b0d97dc1a3a77a4260fb3756795f59beacb81127d92c5f646df033bc4e5e9ddbfdc3356eb716ccf205ee839fa75931fefd5c2c578b6961fb1b8922e56b1a87ff86d4fcf51dfc5926587a12254188c149ce826974c6b41476d1e4ae46d283829208dbfb038a71f83fcb75e538fcbf5aa84fc18e761672cdd83216912ea4e8c8e0bbaa9e1a00d2237675b934c4d49033705d61559ff44072f4cde5685c91185b5444df665138288dbc77eae4f7d85ac68e5d5937140efa3f9e36da4bd098b5964a46eb558394c55528f426189bed756047081a3c7be729981481f796cbf903735f3d5849512aa323aa202b1536a14e347ebc27ebbc9aa9b74785c7ca3419c0fe674de6abc5f26a3b8569b2170b6424f9ae3f5c8be96cb11de0f4f7bd2a9f4c16d32b34e38a974b2a6bdb30650ab1daa498fecc11a72091b75b3fbd9a2df0909ba41dbbf8ffccd562512cd2ad0dd05488080ceb06e209a8db9042c99c915c96642d87cc94eac47acdba0e2533aeefd678b1e325d898d0f67ece57cbd5d573e3a50c51a457fc13a5541a44231e12d2637c1ccea450d643828f9b2d769d589c89fb50d6ac71aacbac9d039d0248f982d7f7779ae3ce696432f0fb080ab2e5abb80a8e9fe2389c67371a888a2968c214e863839e012da314c6588ad6c3b45d7b2bf461cc86e370e63b26a3f77622afad5225b52508214b4564a1fbc0877d838163103e921d87337555c32eb2017b7126ef5204bff351ca697b23a88bbea1397186a148e3706e3b9b7525ee7c44f231717c6b5c4108be03b44acd6488b279864b31ac88937e9317e40c6a7f7a863582d71cfd8141151a71e4a09dceff5308cf3fb27d3a1740ca71b2b62bc5113b532559ebc093f99a234441f63a3e017b71e48ecac32e627eea5a6bbcf0ce7465f4e14faa88e60abce57206522c33a0241141e23bca4f815ef86d5c4cc18d444569991c6f16aa54e2562c5fb5266754d584c1db2254e15dc9540ada8c555619a228eb608e68f2c184dd61dd292af2911b7bd7b2bbbe6bf1526f99aa133d770a9f7f0a8e3cacc92921050c20d57c9a6ed58fc3594bb2acd6c7ca61deaa49faae466290d1faf14c169ae09f8dc964b548688d9d60cf328bd1167b21280bc1731051c6167012fc3f7ab4f5d14a55c7bbf4c7bd6c2f973b5d2c66fa85888a39cb7138efc4daf1a235610547d12fdb798aa12047f652bcd1fb13bb71f836cb17e370feb2b1206bf7e2781cce872726763d0a8ba30c6ecc3c6ca8fab939fc145105df8d4861edaa49f03c42311b876f072da10cb51eac115d1abc370a52d6e485f0720b4476155af902b45c0ce39a1ec6971def007603d85713d0f8c0659cd21c9f5491384607b27d02e2ac4dc7176c1ded1a0eb8bdffac73e962e09b5063a0900bd45ab88b5338080fc7e19ffb35095f2339cd01e246a80ad47cf30a647b15d5908b721c48133d606da8f551e198a2ede9061c96100f0ab4e5751ff3bd6beda3a6286b0a51e1033edfa1f1e5611cce5dab704c45053b46f599d0068e07927064e0fe6d9fe31505db5bf71b406b7f82443414cbda96af06f82e42aae3297a704347047cd96c099a6f72b3a12fd7e3709ee6579816e3f0ed06de218a9432bebcbfee59c3f7efee5f99f6c78fac51d19927ce0b6cba9355fcbc49c1fa6d9aaef0dde77cf8dd09f3f07fe66ab128962903bdd381f97e1a628dc167344e5700daddeefda6f860f500d4fb9965e7f6458d147dfede52a5b5b4c007c0b3b7c6ccde1b300768136db884dfffa2255cc03538def0e5fd3b2047b2dc320e67bf1f87b3e8157cd8e078ab466ec7e1bcebd3eb06eb2b29f331dd3021bc4acd18745618b07c5d2bc2c64b7532d7c8d86aafb311d83229e3248651bb1f03fe9a881ed3d96a1cbe1d703d22e26c647cb7b3ac6849751cce7548dc3b6caf3fbd89482db71fb7e3705efd98e46c22ab1e56f624c211a5378cdc48c2ec8abba862bbed3f3dd822d895be0b54b1585c7c4854c1f1f19ffe457d6c79481003951c7f66c861c7b9f2310c7cc0f8b7126ea985145a1019618e4fb2f91f2090d39602bbb2474b12148f6707a76c0e7546e2389c4b25c194e7981116135241703b43cd64635d52e0501030075ef9bc0af84acb6a29d66828460e759bb516f0d38bda95aa00c4d53059db8f5207d709259cb927c579c5389c9f084113898bf8bee3bd44c1634c87a5e9e366abd8f9eee017884fee9049de01607e20cf93ee9782a2f8fd4f55319b4c266f7aba38d7a7574faee4be2cdace9fb7bb5cad560bfebbfa389c299658f4ed389c3953e2141c4b169c25b45e199bcd1614b18467113073295467448f48e5c132e498681cce8a97492de703eb44e129085b6a13bb86de5fe71852827c0a0cf9e564830e6fab203185252866e05517990fc398b50ca84b613946fa39535cc51ab1f3fea05c77c83b227306025c72bffd5eacb84a71aabd6525cb69777e67bd215b7fc9dc7e643e8cc3b70f53178f0098196e7d5953c2373a8a721dc22dc0e690fb7d79ffeef2c3e6cdeb7c72d31aa9e214bdb03559bb8dcedee8e6ee761cce37ecca7a1cce6ff8680e30a87d2ad6bb0aecd054596f998de57138dfb9651a7a8d541e9257ffd5090175d21f978c4b71f00ff390ecc9da1d95878704bb40e2208e9a69412b2d5b718c919e8e0fe1e9d9f6962a587f42e9dd5e4c54910376f83412152a5f39c5448d9a54e5c8f8f117c264a2ac59c6542554e5c0dcf2f5ba18f3edec97067b4cdbe80ad69fc6e13c9a8714e6a3f447f40eabdfffe7387c7b339d4ce0bc6135788c3026a941b21941340e6771fc83ad3f7198d3d00b7c1e100e6849c1bc204ce5c4bfb6aee611e17a2ebde1d93f3e6f3ebffde5eaeaaa08bc2115752048ced3ab7ebfd7b64ab6feccddc93e440f8b3943c5d861df85973bd22aaacdc540bb1a8f6cfb71385ba69b702bf14db74b779f4733967fcbdad8d7a5bd8b354729b1ebaa7138efe509fc746f6e823816a1981d7272a9363214bb7bf683c7bca63800f8e7668decf7f0c566890341c555964969e23cf4e4a478b41f198a62320ee7d6764e10f9e03a883e202a4aa997ecfad446e266448f4f7dcb1f037139c5ad67a4ced1270e81f63e34f98dc8fb5bda2263310effba1a876f6d6494630a7fe4d066b04ecc8ec3b9989fb62ddcf7b1f60ede617eba8557478b8a61d758eba6ab5ecb13b4f421d32db803c93c18f88166f42987508bb2854e6d35f089021b1e35adf862887030087b22d5a51252c74fad2587d37a1a5970f1a1b039c3cefaf2a0d8f5b8017d7b4e9c884d675655ba0dc45155672c22add6bebad2b7627d8496ec2888d71c2f7c5cc83889728a4fbee218b4e6f51dda20252b24ae4c8fe3e5bb6e836f8370a4d0435cd9353b765153a847646ab45422f61d681750d9a624947be0ef5786ce8def9207e7b2eb13f4ed940bcf8f09ebb363e8f9ddb4585016c28f7d9c7dd1cb5cf4e555b76dd612f49ed7842fb37a625fe7c59cb671d4389c8fb380c2fc3c79dcf98f489fc3f3b1606a9451ada1e150b111dd004f22f0789002655abc06416b0a2d8794243fdb9ecad891857665c9aa46e4a95833baa9588f9794c7af263235a8291c59231bfc769a4f395fec9ec1ecc0430f7aa5b0efa4884ac3a1d29f111e405631250c82a7b5acd1765ab341df4a4b1aebae0dc6e1fcd61f691cbecd26b3b95281dae7fcb98e382173509b37b3dd6e3e8fc3f93ef8944cd2983f9663a271fda938c2ce8b947af6fb8e5ccca3f167da3bc5b88d9a6e5e4faf60fc2970397311261e717bfbf9f5b30a4c9b35b5e1d3ed031f190ef99fa1a93ace895439dfde7fceb3ab393ef56d66adad92ca74635850d1dba309a42a1a0987c5c3f6c2b2ba6e2c8ab962d4754700517992d8079ac804e2d2485b90972a653c62f673c18e63ea3ffc8358cbeeec70c8eeec03c4d63d1468137a9fc4ce4afc8ad604f3fcce76ca9ec8fbdccdba6c39fee54ea693895c887ebfe5d9fc240c3b6598068090a946f4d5eac1cb02f4fbc043f248ccaa86fa87a4c716393a14f6e7a88c0e5bdbf1e193bc17976e2aaa60063148f377bc8b4c8b8f3e30b7e22ab645f92824ab54507f9cf3dace95352b46477523898ae722930376da8891e99b9b37308a93d68a34716423661cce0f502d6ad93590aff0aa12573bcc2a39c09a752b8763d476b147d7480e47563c721bb7cc52c500294911add43e68a3d669d7341490da4d5996b2461fca0e303b10ad01794335dbb69218b77d7ac5c0a4442da4981b3e04f8dd0e3cb0369b8935a3663a0a87b889d3d5280ae7237a4646393e77ff8a6a0e5d9fd6ab38c2318571389378dc9fb696227e3bfee3bfd2338aad89c899cc7cb74f9b0f6c0ec47f5b592efefc368d94c1abdfc7cbb6966cae939e60d6da4ebbdf8a655fdbbdd053ed77761ebdc67d2d98eba2b7e4de76dad1f6d8d362f2fcaaaf4ee2d600dd2967871e9ccea97785dcc8dcf4ce3829c7ac3ae022a9c3ba952ce79b9e3096929ffb3cc35931e4bd46e375e09d0bdc4daddfe325a728d763e439e19001e87c54ac194a0d4798bc614a4b0f51ed1c0472baf7a1e11047f2a4bbabc70ea70c8d012b7fad13fce6d2376de09a5d2a4b6995493e90bf045af06ad9aeef4eea40fbccc10d24ba634e3fb8073742365f3c3ef7234d1bfc910d2bc3f93b5818db19e30e28680ceaf192757db77d95e25de364db8666b21ededb4ed1e8d10eb1cb02e30e03d3bf5d4cfee8f8c954039ac471ddb78a1ca86e90e7c2cd6f3cee3a6aef3475f7450472854099cab4134554b69f682bab3587f2578de30d910eacb88501350abf10ef22b46536dd6e76432cb743f85e0cb9c531ec6e9d2b19b05f87767b62fcd368c15da5e21fd764496cbf282b9274710c0b0ef7c98cb795dc161faa03a51d280adea964efb6e5deb9506fc75e7f5766d3d9724111168b1cef444a8a139a0614bd330bde728d27f003720876cae3daa8b314e23a47c072045f5685dfc35072d9a7bc77d5475428aa18440822786dc81995124f1129542cbcbae321a8184a42ca16ca67b896aac6af0bd628365e15f62351c2b1b0450e776e3cf9aca5101195ebbfd614441d4345000cbf61ea125be9be2e2455d81bb2c5a9ec4bd5a2f57cd526023d9ea8289a3672e417de3058c7490d6b2a4ba5a15ccaf585f34b887baab6311517f4ac00aa2a558d64c7e4f6ee13d2ec786c943ee58c93f0c14e190294f133fce32a6c523d6354d1ab680f9526055632c1a6365650dbe2073e4dee56c3069d52c531fe16c58b9ae27643818431497e82144b85dab35c2a8c1af6a74d38157f19bf3fb1bbfcfec4aec826f9d52e9bccb3d94af534bc3fb1bb7cbf4aea46e1c4de9fd8adf17fcf433b6ae6fd9ccc8bc5ec4a6c94340c4aa328a65d9b62925f61f753ba0e36d6168581a37dd0e719eba686b02b45eaf9d64b4a1f17e24d25a4459b013e2323c4c0d4dee1aac2db26ab9a77c100f0814be75df61f7a9f790536bc9fd3109601f59716700f103aca781a539c48ec1d14b37479b5cac82afc80ab4556e2765f866453c4c878d6a963c3118021f12e230e337567b28801f86ce7c42c3095fa276f312d5f6a8a44ca009fb7f70b5b3009949025657125e7d7e75e361cca2ef4592c14b3fef8d98e23a13784c5eadd6d245a63fb1168b9208028318f9b77168172d345b15a650313b7202f111ff85920e18068a05238ab38c9be309bcdf6598eebb6b57dc8b301bbc0749002f76b44cbc091b7256f93d90a2a6b0ebe8cd039c5229b4e9eca15414c572287cb9e8787290dbdfd34e441cd45bec01b92436751ad777bff299b7b6cc549c250d7f7e9d341969c1ffbcdc79008051ad8a0612ac64c992a6e80bec622618927f7d69f1e8ce951caecfec60f4939502bc5494cb45890588e0fe34f39400a346696f618a7745197e39dc30b301b1846faa5bbee04c85e38d5681e62d0408037207c39f8ce8cff893dfa9a1c1f984cec5ce9831fee173beb2bb45e236a0efccb8b3ac656d79797a7d3299fb22d96769a935c12674e8aabb259fc82f04c582e10aead2dea91b63fee0524675784dfb588be35896efd345fee8ca17d99e6cb7d9be6cb77a29816ab1556cd896bfbd05a2a638a69be3484c8f7b69943403725fce48b78004585366234459db08ed81f4d45bba8df85856310d10ae7d7bf58aa0b660f99388bb258532e88524b470ecea8c5e249b671c81d07fbeb6229f9f90caa23d08f2cdda9a54756cbd30f4c23e9621d82b9443990b96375a07369b20fd3c93c37ff7438e702c420c564872ad999222b40bd0c4e169081392043396d30541b4a75621cfecdbbc2e16ac8a0d238fc1b0f73bde91d35527e40c19ae2b426d6cf4ae0526cbdc057b04a21b1c03a9920ee54361eec93f27ef7e9137b57107a23eb0037ccc918b889b15bcaa6d7040e65daa820127db197b5d3d96a2275789cf6a2ded81abe65571d2ded2efddd133eda229b0aa035deb5ec6ebf6c6877599d73d4974d914d45915e686c8d8fc802b413e7b9e9d9b458a412e67daa19d3f90e978d4324de69de28456e86725c3b1323d5b0c9b4e1af9db755411ff66cdca6cc7d59646527bc33fec881acf5950cb204de170745b462cfaafc54cbaee8873727f74bdc65df74ebfeb088b15821e4b571b918b1ad2315ba28ea168d1529130213b0a86abca04436bafd7c47730ff34613f222f0a1c9282653142fd983e48e9244ba9d1a1f380cb49b70b6ec014d9f0e04c0a19c7d38a8d987039b45788f3b7dbe9a2cbf1ddcec83e5e2d3384aa22002224f26a200471c39f4683c63097f3c7d4f80b41ae656990f97ffe26408a25b18b2e32c2ba4979f20b9ac5ec867f7eb8efc32cbae965391c2e50da975d1052d7eedf0652657562f26cfcbf1923681ecd1ea57cb29c0cc490b9583ce3655213ab542c5244954f38bac2ecd7141027d961c1b39b0ed410e5d4b8980f88af78b1dd04f75d9345f84189591f5b0efa9e4bcf49763f469a7f922fbb07986b73ee26ea0fc96a238387f72a09def62487954cf3105e9d8e97cb823e52aee9b47d637aac443996e8c1cc839421fc01a96fb00f19cec83fc5d5d15abf91b7e5ebba1fae771da15c21edb37acd135806abb32641b8b8fa772e4c68e2b1ee589d0c5779d94fbbf30cc181ef71082442051daacfbcf6a3852662d3574f94fbff0acea28986c9e4d67bbb8a95ce9fccdc5b7d28999dd72a475eb152c7429e6302c8d3bbd78be5c4c9f13c75856053c85fe73cb1c1f4bdfc58c88d7880b140313c2280bc4c0b383960fecdc77064a7b8efdf57fa27b1035bd11d79a93c2edff6ee0a3f84ee32654dba2780cc135588c7e1b7ebfedbc389c4b79b3d9e2708b14179a939757886a4ae704e29616286eef829bc1ba0ae0f11195b1aa13ab5afac8a13c3410e79e10128492cdbe5c8a0e955b829d648650c9b193d9caa68dadcb02d1d169850fe89cd21edae2efff535122832458c399a572c2459ca9625c5871142fc051f364792da313298b2d31b99595f63cdfcc6ea2e0c1092918bee1ecede6856f1aef14357dd500dc4115c39818219791229e36260e27c2c7b6951f55b1fac28d9cd36c5d9a6f7b8e9e08c684848c2f68da09ce130051e0e2ff95793d85a6f7d1536aa2b51cc54f71d7ca505390d710af8fee486278a3e8859745ce5846234f6c5ef16a46ce646e9b7a397bb4b5887ed09c70398bceaf376dfb144718b769e22a08f41fc131e76f9fd948c5f5fd5d1a483b91e0779d1e5120ea635a08b5238727317c7721bae236c9109e1f1398ff2e6e15b3265ba0425c53295a4098563b592605ef05c5649751813318594c6eb2eb42b719bfef96627283eb223077228bd5727595232422e09196226bcc7f1988ca3670528cb2d4e20a5ac737486c794f868633bfcf6e79ed0346c5c5d6bf7a068fa45855fea98470ea89a7baa32a88230b2ccaa6e9f81eb1aaebcce25c45e7e4fb8e113c1be8d19cb549991acbaa34e994211c23a41881e59464b912d400ac83997f146b242125e4ed6f277d5d43512ca7bd07b9e4c80855a223aad934d0829147619212f4d4522e7c7f7a3fb8e5f72776590a2005245c4207198d2e568cdf724b0d86a4af1ceb7e2545a9d2b692f64be3402cfacbfb9424e6b9e9e1c2b760802818fccd14937c9178be82e2a2c88bff8747caa6c8e6598af90a967af2d3e9e96c85a9935e75c40d5b0eafbbfb2cb7aa741983662bd362fa630223b2b3bca7b6020d3fa30f6f539ce8ea1540707cd2f13150e35d45805197a9ef42e9402523655fcece27cfafdea8617ad1d7bced5ad7d404ddb0e06ae16906fac000f8ff03402e55adaaddd127799ea088a0e4ce7288ba20eb42f68a5a8a7883000f0b2a5ce5a6f890faeafcffdfcf5e5757ad18d4af90156e1f10794944323322f339297da673efbb2f346fa66f803ea6c0e8aabaea3cb075c11268b611cef87faa5f2adb5c832d30433a6cfb865d8285c89eaff013a0f5036b8faef8bd31f8533f9ca836c21d8c385fa290ea8f2c10abab43ac6ef1791c1c98a3fa8df834c48b6172612629276ec69a4723adc6c4249d9994c2aa49aef6e83697d83154b5ab55a65325226ac2b27eb9f61235e1f6a00752407e5f6b0e272d9e017b0a4efee0f8c79e9c5fffb1073f536f2031aaa9d73c25166a9e02fd5fb33ef6dc06e761385fd2c5c56a932301fac28572ae7bf39de10049c4044dd30244b8eb4c21f999baf774c8a2f835fe835764c7b0440f8c9c770d32ee6065df13825642d56d04e75c4b4833f3b411c0d6084753e1bf1facdfd8d66c790f44b9d675a323e08ac00649bf9102b1d72f93bd25a49c4e7749ff9348dd7877804d00b721e699904527a9e48f6159decfd170321e9971015bab9180ff1769f289d5476f41af7bde288b2f0dfedc94fa60515b488b83112e10a78956a0b61ee8066b506adb92cb45561af5fc9376ffa6e0bf489c060a44e286537b878b67b46c8616a6e0cf5e1f623d67d2acc4e268993c948c83b076837ffd95e939caf508238a08e53c3df1a75d4969256842a1b9145ae529a4519273815a199337633835c3cb6a754d69e5e9a9d7cb1234a9571d6c4852479999c984a8a72892fafbd9ba2924ed05c71afbaf54fd75069898e74cab95b01c8593929ce6dad7f6b5fbb9d4ec49abf385a1f4702550d99ecf95d2c399385182f5b9567a3883136587de88f170ac0f4f614d3c9c11b26199ae225a6cebebed2f77e433727f0fb37e036a333cc7292d7b5621ee30ae41691b2b58fd123c9f6dea68e36a4823fadf6612f77126d0e9824595078353b5b664650564f92e14fa5bd399a3acb63f68675cba800142b72018e778329662e56a92cd1ef2e763124d07129ffe97ba9e01aac2b32be4e6489bc06493f3c72d79ea25b045f9a0f60bf73d4e4cc61aa6f1dd16c58b4f9dd89f757f7ee5b6e43789c8cfa268ff8b186512656d1b8ad8485feea97d01b62ee4529c7e6b82032b97cf2efb1dd4167209370bd998bf97f1a89820b84c75f63c9360798784ccd3a841f56e869b4346e8dddfe7b5867ea19539ca083c71ef69bb13efe485ef05a182854c852116612b1fc9db8c824c456423f70915bcd639c80749878ee00157f0d8e6e11c96985bb1741fc56a853547ff034adbe07efb904f00c3dec295db843dc015b80886b8f9e040182316976ea080bd7a3d799b332b99646e7c46272fec2e00909342a4974b86fdb6a6a158d2b38cefd6c0dd4b7a47b84acb8e297a9b4bf6d4e93359977da5d58b7911fd0ca7f04353ddad9bc1c635e29b14b16bb099c2a2a3df6279f5ea6c3eb8bc9b8bf7522ceeb379260aa35e452c7eb2ab5767f363b8bc9bc37b0937c72e93d7b77f945121cdb41565f0c3c076edd06a26fc7c0fe56136de348efa9a5cdecd8511efe5afec87475959099dba1403343843953606903c4b541721cad275c222873df5aec1c3c635c208ad56878599272543435cd7d6c8e4186e774ef0acb1d41cc95dcf6d20536c1bfc0ef8fef4ff57cf4b70d2e5c85aa2a6530e6f7b83b16479e34978308f5e441cd15197dfba05860d68dd96a4d22a3375e05445b62a5c7a43ffcf40fb0906159df44d195d40b271cba52592bab7c01d4602a62573b2d50245a2ac2a123512d0eb1ac72586adb466cff2365b9f627b8b1c0825f097121269ad7914c7a5acccf84fbc782cd85c8311f4ddab44db1cc42a43ff41a0ddfa90c1c3053ef9c0870c1e424bfe218387eb42947d38e29bc9a0572812e057a258e72df93b5e7860778065b8d2bb6c0f98d6c63517429bd05a8b9d23cb9d68926c07aeb1cdc0dbb2268787f730b75c36d7aea4831bce20c39aa8c746c71951cb8cda7e8e31b37601542cff9c4760f44f5f08104671deb7352c1fb949b3169cb56562b34c90c49e6e5bd7d4a61afd3214bcb7c7527343788b2457911cf34ea59c10fa7f7ff05169fe7cd5dde05dcd98761addf6dd385c0da69a66e93ef2a890d21065603d1b4d752b856a5aa61a4f02b053416006cf0e3a32eb30a64eae508245b87231ed7366954468a3f4b5e31c45a44404d495585431173d5a1b3d710b779151c51204cff86e2ddab8b34c1031b0e3f01181fe10f680cda1b2b89de84dafcac4db4081f71b19f4cf8f6c91a108e795681f71eee0b724d55d60bb6025fa75fd6fc448893105a9d26589393fa05153df9766bd197b1e8865577af383b1e40b46c8c44baef4e6871b2c94d687e5df62ba8b78c597c74ce7aa8238a1c66cc780e329a10d503a08c11747f0746e674de80a209f99ccaef136ad6670c19c5f9e628b31710647c7b0f6051cac232c1c6ed1454b112c8438523952adba036fead2a1267e77b726eb1c890d699aa5c7ccd07e12a3ce864ddc7aff3e66320db8dd9e7b4b7e18a0ead7b2412bd62ca2b47dcc1d5e6a7e722dceeec54206442d9ef56b333fb986b37b584849722f726a2447187d5cdaa0dade064ea257a3f811b3431507752d2084e304be7a124eae79148da710d02c42eb55b82e9c28b187dd92272634240d1dcbee400c0b34f2d6b5b6642b4a8df7a4bb3b3788fc803686ca3aca61464bc65ce820bb567e4eb127cc673d08470fdd12a552fc386290b27884912f8c907c9765e73aa1e1fe62c99737cfc4c4b6eb61f1080ec1167780b233dc7ddbf7586ab3108af40cce4e97f0d8f366047852bddab5bca09d4623c21bb2d4f9a3870d329094149a7385aa03a173a4f788c4295a368c5bac878574fdcd5bc1c50a51ae043eb3edb81a63038d4deeb97ab41c5761a6e61e9ae8029ecd795e9c89e635f938449089ede76278042ca490e3f108f0701b26cb1587e2bd1a4ad196b087f2dec97f25ef48b82384a75475848f38d45878a9eaf621dba4ce98be3a33da8b43c4dd21b570ea79380fb4bbdac79b5fa784e02732b89edc68020928a688c91678f9c0efe168832e23b6b467892e8310d90defe343133a1e22221eae76d422901d5e05d1b20c61278a5b8795433c5b3355469a89016c1fba1dd0e9306ea4d563646dd6b49a656c96c6aa10cb360d02d7a1cbea0f3860da19d6243ea2c62249e4f301116972dda7c57e79e5fbd3ef19c43b12f2a39857c398964dce6f3764d1292d60e5f7a7df95aacf83e6783a4729418b8365a997f36ac70a990e0489bc7bcae0bd9cd3003441da70703b88890038156f0fb14137d7802f90cca74596e1229eb75d1384dfc2895a1e8084e277cd309a0b74ae97b5c76419ea723a885cbd8aeab52ac486941e7204616d78e8223841e08c2de3e51415d7183c9fc5faf09afbb6b9bfb558a55639ca60e812d4d471dc9a42eba06792dfb4b986ce8fec83d42abbe95c0762ae005745fb45accee1fac21d0a3903e245e6446813cc4702da9afc75603ab50b091ed0bc3ff0f4e8631a6220274ee0fdadf1ba617451298c366ceccd887114a661725bd29b3fd6584ce5d03c7001f258266015a939b67f5a5b4f4c825b5174d4e69437917cc1736f164bcb1a19b97d96cb400aa319930e38c2d1f4020be5a98307395cc2472c67bba2bbb0a9dcd26cf31a13a27cacdf21136c25127d12a5c7a01917087b6510e9375aa2c8a27cf654b1ee8a13a9329920a25b54d67cca0c30265b61998e463c903c1d817c16e36f678b093999a4b472117e26f6e04bb7dc2e0aad4c8da0b9108c26f6d4cf6cde7e04b9d83f4cdd9f183665a76b7e482cbc86e452eb27afd83a1c506db15e4aa08a993de849aa1c72fdf363b970c8f5cfb7ac994a331a8de911f4cf797ee171ae0cc54d9cb1842999b7985f9ee6860a6660ad0ee982e042baa4c2a18434b607f6a27309dbc8dab39fe61b4e885b82d861e5905fec7c3411f5184ae8e88ffea37f16121d6766929472862304aed0f82e000464f81887a71dd27ca00d4496506c4d0058602e62af5d2f331fb3fb127c39949dc8e3ab439f3b18c740b6d99cc37535651cb1e5c79d141286d7380e7d1c5d6280de7c5c66bd37775565f747004af46ae592f87d13dab7ce9636b903e036d85c0a54ccf0a2c83ea083b66e19e09a82a6a385933a2897c4b0945f183d4e2e7b1dfa89576c2deb10786417cf72f91509375f2c1523c455ad2fbbc3c568eb72c736e2d8d3623dd86db127837afcb06f79d0253a7c6b1bdcaf1ac10b957e998fbd727a4095926b13adf66c41e194a70381d15d04c0d48f1a5af2317489628e76b00e250f3a26c1b3b738788a481ca9da0f0deeff6b87a842a4d716cff0a65b064ec2adf23d38b8def9eeca14f2348b62a4b2de50795114233955e6b7b8133454926fe8a452a179a03ab7f28d9df4f80ba5b5aec6e9a3bf27af3eac8f7ed353ba918ace92b4f96e149d174c747238f3edbb84963cda41306290bcfb53db4dedc3514958f518826141165dddcdd5638f3c5146494c0e2a266b81e7133e6848f426895643860f4b3ac9a7fe608df9a32a38311d9bbe7c562e1560f2a0aab5ddd41ac1f374148a4704255326bb579405d9b80b08a24769ae9a23f52165e0243aee399119a28146038234d969399a1a82211ae6f251a26acdbba5b87fbae4693c398df20a786fd81bdae680b509fbd0188cef75723d3f87fe749a0f7ff22b6970036291f5a8f76fcec58a1f6464333927d754929a2f077d5081ec94d912e136a8c29cdea55d1d1acacd09acd6912f91b233011d4b55fc65ebe793e4483e0d09e5cd88fab8d0a77c936730c754bfb69c3083f97cfe0a981431c812ad9ba492c132ce3004f2dceec05e156c95d869cab6dd60073c218e50c7ce87692fd1be2167b3b8309c0ecfb5b0d226eecee8783038e212930c882c6aa59439466325d2e5c49e6f81fb29ce9368db438cb5bb05b7a5e41d1c470a28541beb6deece53383c7c7ffafd239919b3bed581f9b0b8e7ef12b9949cf2167ade296b4c0c3195ec54b8086354546962bcb9c6bb648b57e311ffe490871472e6e54d3c7d60cf418adda66f882b4504135c57ac117a6646b4769942eb9479b46976550e7ac7026732662663623ac7b56147b1ea9c56a126c8922f08c19b235c21177fd8202d293761272f9e459091c1c60b020902deb79c17d3e400697cb33c7058e7f81f2c750dd9d8c43bce0165b280725993cca853fc122b89f6ba4a6a25615fade71c0696de0ab377cf6f7b9ba0fe883a23145394f0881cee2941d792f45bc03118bd8cd799e501e8ddcf0f9616211d4d13488a3fc478f4d3cf2ef513e9bc3a1aa131f6e74d29a6e6d7ac60140e25adc12d5c5bc6991ef15fca5b451be639d5b916e3a2134782fb1a2b72cb7d6d19c7d6a0ff36f65ad116794d74ae615ccc209fef91c74333196678873c0eec4e93d3a7579beb3c9a2485ac4f8b1d575e1dd655c94fae27c3a850c2fa543c7e248ec2c44c0cb734b94286ce030389036cb2df889fcee4dd24553dba3457d798ec95593bcc549611f975ebd0d4e7c21aa63c9a228aadd36dec9ee675b57f7fb18c32d4ce5e3c87a256e93e45e3868af47a9f35dcd718e9f2c5b2e913a5f380df3b4d3726b180236270d43a3c6cd05a04679676e2157a9afb912b58e429cf64143f7ad74471d6be326726b130e3c3e671c431e4b2fdc662ab6029ad6044482dc112b23915eb37810f7dffac1817b3a9802b8e3066a35fcc7b4dc88f0adb5b55cb235263648d77ea56ce96b0225fd6f8ff0340fe74d95bb56f9c9fc43b41580718bc1dec71c17e5feb1ce7b3916dcd0a894802dbb98b36932a7dfbfdeff7565a259809131380e22173892953d906e4dc007e0293aafc674629cc3a2aa57bef7bbff34ef58e428c50cc292143901304dd3dbbce11d9506540906d88eeffef691db5928471c0f946b6fd035fe7b9807a0da55edffaaefaf6bb0218a5c3c00b2ff1bd6ffa987a40c6731459123cb8eb6cd0f2757d6b6d38eac66b4c3d7016350acaa662e8d7eddaa681d543858dd47329f4dc279bc6542ba301adf221b2b675b61d2e113786f5dbe32230b6ce7cd3c6306ac721fc1ae73d0a6c33be5f54abe376b271c6ed562d647cfcc974ea1de1b998dcbdfa7f4288a49285659ba7633548a6fa63a69ca77efdcc1c40b518990d1ea7f51a6f665b727ca61dd93571ec1e1ea7e4663333888c1b6560d8e0715ad2ef7db3124e1c0c874f2e923cc7154f5f16696186b2640c4e08d3f8d7cd4db420582b8ac92891e9b1cfbb1e7324d5aeb9ed0fb057673b705d86d04b469dfbf33855bf32088305c5e2e05d6ab31d8af22f6a69e77711ac4eeaa17a8b6059af5eadeb6efdbe0f8ba2b532cc9df9e0431410c36cab404de524402fc6cb9d6dd54f14d2d6cfb5c20a6fb676d6753d762f973e41f857a63735727405a8d6a5f21c486480f40c3b1895a2c40033a90561461f69de56418b49c578e4305b676277f063fe606418b241089ee275f0f0ae7776ac40b08a213b05868fa8aa1b85d07990189698bc4b45d79ddf268f2934ef4270cb7fc5172769463e4399a974e6e4fdae415477c7151ff9a33aea3de3d00592c40c0124d8c2cbd32799a64c3442c91b90f4d4ce55d315bd04caa764de15376f798e93a8c90b36420da451b8e07692650857e4a1d9e88fe299e10ab495014d14120c38803ceb8e4eb7b04e354fac937a8d719ac4d3cf6d8dd7848d746aaf6a4c71b708475ca154571f7b9c6771f2393cdddf0da8eb0cb26ab4e11e2ccb28b854b86ac66eaa3e9744294a0eaf7de11685eb2a004e3a24e8a1725a7292c8885a55dc24ce8fe26cebbb766c54e06485d55cb64fb777724d8d07b6c93065efc234d39d0c237a276034c952e7c7477abe1e49b249f8871968092c5fabd2fd43cdf6728e798d478dd9fd325bc2cfccd5ab9fbb6b331afa5e6457e883758f05e67611053e898af14c8b0fd1798258533b755cdaaa86b4204db63e2e573b19eb57c94e14a1f3c4b915962b86a57edbee1b298089c605d71e9632c5401e1ebd908edcd8cbfb9234669f63570572fb23c901b58f40a4717ea28f5df73aa89b236a2dcd21ade24a9e9c0309c132beedb0362ef923e6b6ccaa200459948947c42582c5d3b3df2a54231d10dab53bab2f076dabae375141a4a2e12253bd60cd6b907150d522e47a82e1391d6259833ba1329deefe1ae225de44343cfc0f9c4dbfff8686bd3a2b0d1a5bbe6e16bf4e5011d0dcd73e2105f152ad13f5c9f0f479237898af3ffdf36f12333068ac3f1d92ae961e3bf0fabba3c44e7a9d34bbbbc91522a73708392df55d294a89c8ae782c06c0ae29c87af47054f0429116d0dcead04a4ee51af54577494a6321032f7d982f8a135733a908d165c4160bbafb7ffae7bfa284d1c701ef88c29ab2148cc9cccd683fc20f2eaa499081eecc14603722a1f21695bfe0c9eb5ef832ec3ebecfeef4eba781d4b20f47e9504db4966d8b3f67b906abbb139fba7862bf2b738af61aaaf33a048249d9132782f3b5ac6cc2a9afa3e5eb887d097c10348f39a1078a68cac602bd79639be22257b332e713890eab20fb8ce12861eeacdd93b9d292f065d7659cd252e556c7b7006e5fd4d65addd1a7bed4ebaeecd911631903e509aef12053a95f5c993c858d53778815da2130a31f05b7d19083c30dd15a5c227d020c898497071fa4c3c5f94f4ae86c6a3bc8ca75019d2c4cb39d5071b25ab3ffe561b9f6f2d6717482c5a4aa4a9b0ec22c50233ceb1b9f09f5dec9a673d64f76b6910674672cb826f156ab465d6c62665214e770f0bcbe69e5f702926df5f95364f586dd32cd66d4e9f1f3aa0a6b34210cc27691dc7860966705ee150568215906527d54545e22bc46857501e482c897732a585f17b9e83de05b74ea99cb1ceec283f6132464ab022c2abbbc503604af0faac19cffbfd9fcee7e0d5a6d1dbacba3f27f4ea83bdc3d226fe9b44235f9f5f46b3a30faa7b794b8ce91015dfd23144eabe269b2382df0a7e8cd6b9265b72403cc3afd57715d62e0db237809cb6e0903d0fa9b4ad2349de52570a52e85c6eb6151fb1b794abb3a87a48d75b9a63c1636883d8e87bb2daf00337d71ce10670f976ac640b893e3f1eb4958ce6b3c2f4346a8746642bc8ac55f1d429c2af16d6cb47f65499a80706e21f787ed259b9a444a5acf4982ffbbbc930eaaf57a0e84de19bfba7d1af0d3a359818219d2fe7b432a78a9f7c083532734f1d15ce296cb1559541f97c557bda0afbe00a346ccc0034199f3613fe4cd8a81a2a9f49808ae5f74b7588335f0fd20f8cbd5ae8d8cae72ffe97d56617ef711b6f38a3272115c45c3f6037a0186c72071d501e7526b50105b388745c13eb3ec861d5d5f9e1d8176074d4729ff1254b8f850f42de757bcb8fa356ce44b616ec322c38b6538e62d24d61d8afba61e41f79a31a3e4b73fea56caee26458752559c9e6a24c705a1533b8500c892e5772e668983e38ba37557d09969e432c1f22994ed3661c532b96d8f7a8b2c4ed2d40b466b9e1c5f6452a05fb29c7ffc4a6a98d491fc506651362d4dc05d207ebc01926b576a201d246491facbb1e77cca8181d5dec6eee71874599952edb7ef7b6e1d86347be49034060cb675dd6e5a41ec119160fa97309b5288ac050662cd3b6b77fdb66dad259fe30ba09abcab5691411314dbca257313f5988d0f7e39daa6228528c9daf84657f589d1d1f3355f54ab605315aa2c27cfc1397d6141933c692d942f8f553fa643b829a88b4d3eec8e8c4ba38882085aed0a2b485df2d0a76250330d95968010388ab1e65e94ac73b3930ec2ac0d86fc282cc60b1e6884c96934b9db0c6e85159d9809c59a239a1826a3780723e285565af4a68d43088ddb0209210e6206a2e9a5755dbf69cff97fae193002a7868261a8d6fc61cd7490e472119fc0ad4d45b2f2b2bfe407d9b6480461bc8c43cefde4527a61bc803849611334bb6089ea23a9e0a1b6d66cd4ba9d8d076fa45397f7a0fcfc9ec6fdf57b19bd78fc61f7823190b04b95991fe54c504d0ecebe9300b4ce4dcd1567435cebec3b315d0f6614b431f722094f284b54eeb60cc55e1305b129ce0e1e95ca2685e380891faf30e969d01665a97e9c07d53e9de04b4102ddd88b05808f327b4546cbaa71db8acc5d7a8ff92a5cc984f8016b3efdf3bf2911b10b680d8eb2a818ef2436da01f5558458903d86dab82fc3f4cf669b927c529a388c9d1a10827169ffdb6f9aec0a48458edb239088664de8c7880097281d81a2a5fe566d355f1368241c9175f7d1f6140159469482a0db5c086da932bbf9e564975ec3ef001af2a55dc30fa3a33a1c7f18c19fbf20481508cab4ec645bcc1fe764e15c3c8134cd33ec41edceb9a0e9a6641381d8a620938109ab5e8793843eb24ff5ed25cef6817d2c9f21472e43e110d74f68c0a140ad8b9c044889b7dfa1016c1af845ba6c5dc3efe06f9609556cfffc25aabb7cddba90314ffe13fe762f2eb1898184acf9a314e4517870b677881322e6a5dafab991e2fd7124ebc55cb8f1ce62228fbbf8876508e55ebec911c5a7854e73060de252e9e991862a106e7b2e9e62780a5ffa460cd5bb76a09d763612a7c13a669a8c17988b3da7c180c09b5000048109936f91fe5a31ccadf704858191b350a85e06ca00eb2883d1872b22d0e821812e66210f9b3bcaae68f187b6e838006967d34c1cc97b62bdba29cfed36755dbd91b9b390353ba8e0a96b0733f47654dacf3a7e05687afbcbe461cebb5f27d9bbbeb870f45628bedf0caa51ed937c64110b62646b83b38604cb3e7592ccb676223e8f43ab237f16e4f5b0d5706931badeebe6e9f6a9e8aee472110bd8e810788a90cc4a13d29330364b9ab4e12b70426271fc48452e14e356d002ed5f06d4a82fcda85625aea36f78659bc9169c61f59b978d97c543f301d3c11699c56bfce95bc9c9d04baa65c02fa3ad111a669efae32fc503c2abec1d6a6033af048e406e00e3d76275057a362a4204a54c90b0333130084397d68e792679fa61ea0b020f22cfb8740af4d1476078242e6dfb220daed3e9f1f66060f7016794fd6920d48457e856cb9955903810f6be0ff3b7493b1d41af018f9cd27842ac98d6ac3f5b855f58d133eb9d4d6b7e81d0630ee428a489fade02faaace40da18e625d55c13bc94f0fd5b9fc6f5b273631c0793f9367ca2c7c431d8e779d3c121e1a928c9c03e7b6a6c6af29ccda0211234dbb5037197545c1d9493b4fd732d445a6d7e2d1ca92e16832a970fd42e827f6e64fe81bfc29e151b933195c7afdf89f4ef1e249227e08fc1ea7e16d2bb697dd6d19d29e78fc1b0d5c1903db13f43294d67590fae7e0b7ca29e4d27f4cc64e26cc97a0fa0f4428c2434fda9cce004229cd074b0362107ef4eb3fe880709cdf82ef87ff58e5d32f4f48c693ef77808e44fc9226e1a6854a60d4c06317e206c979ff16fecd0740d3c52cefc3f8006f2f3ccbe626403ed8f99deffcaac207a76a75fe39ed83612d2120798eba261363cac3aacfe0a10969584f1fc8e80f6b846d90c3f8119a2fefc8b3c6739e7ee0c8698dbfe9e31e3f91d7996a41e10f2329d1f45a4d75165ca4044caca36607751e443e15a497a0e9a06580800b735638e90b8acc8751827e13e4f10505fb9320cb59d750c8716c3a8e936d2b3d75dabc319db00478754b58299bacab86876ed99dd3f868f4b9ed0c70543d64074cf0d2bd6b4060832458d54d314c40344ca00aba2ab6f07559ba05d2b56b20e2f5675068baadeefdabd5a2183a0b8d3f68dbd758597da7b5c9200770a71afe3482e1b9d651cc3f98840152800aaab23609eb2b925efaf654042692783fcc9937ff525287380bf3887e0ae40ed9d90ad41e587bbeb83ddef411928fa43ef0370ca1378a06fda1a283aa734a41170cad3fafde481a1ec7e2e43750d83bbcca604a85d65647498d46d517f3ef0dda449d7199175470aa04a94720656f5a971361985f28fc0d3298cb6fcf7b6b664212e4cdd94ecb205b1428923383332922db8616ec647b803a587b659c974f6cb12be8a2a2e8fc7914e193dff91a679b260eb929c0ce519ed12966cce953e49cc6502ce25d37a4ff77c0eb0556a307ce5fccef661b157acba12c558b897d3851eb6c8fc719a5236a3ada3b1b09ebecb1bcca2d7012f24181207b0e6633baed901cd3caf6d250e616f0cec1e189df999c75299fa20dd01c6a31ae150f9618fee1a7be297b5b38dbc1ac83c772d6638a22a32ad8fc158f0caafa21d0ace61d6d874688f476e949c22ad81266df43b308a8b63a47e15d23958a0d707fc2ba16b1f0c7a4d59200cfcb444cfc706a73ddaee50a79e50196ef05247454757007d1b2e09b54c67fd613bda9260ae8c219f791df1771fa97c1dbd8366fa122c8958bf3b66596bed84d57a8d4bd2789c461fc66cb8ee91bad40ea3b4bfae87bdd91d257c3a59cdfc909a1cabfe6d4e195f82c92edb5ff01a23cfac0e3a07848e360b7c5594073e332790e5dd5643b293e7e57b0adb2069caca4782dac650dc4084e71bfcd54422b3a94cf487b40ace01f9bd04b5269c84221524fed612dd42dedc958142a477dc8e87a5ad8f9d348f04d72d5535d0cdce1b8aa3fe86c59409ca4a11f59baf0e1451fd71829750a72b6347b2be2f057263f2674c09ee2ed6010a6130d452dbf6414f429794c9a3fce40f9736063f70051556169e9d175eb800940947aebcd92008a5bda8e112465d17185b228bf9e79588be2d7a90e030483f03e3541629c31c2776613a3c84529ba72191948bba7aa2b182135810af852c75251fb7ded50ee887aae71adead5e7076adeb0ded6cd58e474ee606186c728a3f9b52a67789a033ba50215fb48fe461df6b7d01bbdff33b4668ef965a2aeec89f2a1681031f2a7d3644dc113bab70cee6dc50b406e26c4f1572cd496a34257112c375d1db3cdbbe6b42dbf7455597262b3cd7d46fb0f3e43a62c17368b984b4191a5cca7590a4cbe962354f9765ca7cfb2b9396ecaef0e960f14b22bcd8689fe528cd6608a66c1e80df7b0e25c8a420d7936765f6a09c861c0d7bc803f5c98d5bed73094f185d66d0166bd7f02ed1aee31b1689a094c34ab8ad685111d7b5112d260267b4fb59435e369a208e48ad7ea96dbb3ef7bb570d59658a8b7d0e4b519e28ead5991eec547bd711641f1526eb9c541457114ade5b6a89836cc0eb1ed14b627ab03985b4506f5b150e35cf03f90a16c22886c41622600b3af4fbb091b41f43c2de20026d4f84f53407da2ecec122306dc6bd2a4257d4f5cd3e3e1ac998ea59ce308acb6a80f2f0bb10ff50819d7ab38d7c5fce54d8c7a372890d49abc35f19f624a2e4d7dc45eb4429b2c760898dce294ec808a77500e16d207003e473e20e6c8bf95321757c8b90988f59a8850a0c6c56aff8e0716da32a515602959e819b2b701e7c7fdc495626e075b4130620b5ae9c60e623ce549d3015c14bc6c6d485bcec680c36a4132e04773726d3bbe7e343264ef59f8f6c14d0ddd30122a1f34aa9c622a459298ccfb09fb034883c6699ee6e5a4b1ff3a4e0b6348384d4cadb5cf714d1c246646fcbb17f3c18cf781dd226ab3d228ca183b2808cd768ad0ffac2af0fe9d0dd8b2acdb23994692434beb275ad01ef5732f709ce83cc9c411832aab07f4eefe5be2760972b47921b733819a7c8af00a177636a80a4b43d0613fa42888f6e3e0464e0e6998e530d99a8115356f592353d60566bbb04e35b6fdccf731a0194a51784456ade525820d4761199229409755e88a4e099580aca2d1d8a8c2ebeb517ababc9dabbc4267823eb45a631c63cf3a2ca06c69b808df8713c3992c194d05319c4d568323d57406f72fcfc2a1c39082f920a761783fafe5a7eb765f44c96c3f78888190997ee68ade1244fe3d98b8d798a5dad4f3105b9e35338c33e6f369ba6acae2ee488b5557840865eb13ea2ca622d57dcb8f758f134262ff97cd07b50e1f22e0511331dbdafeb9357c3cc795a90edb70565ae88b3c9ba9f517ede70164ed2a38a00e31c69db2e0594e4c3b67a15a72689a9ea36953b8e5206649d06827ad8d25e7fdd89c86baaddfd5e1a41bdd6db54514627927b55a08bca9568d7a168969cf2f68d7681ae23495d12b0a4062341eb4db56e5a6a904264aff1ccb6ca8b346dfc19af5b1f6eafe2427194ce7def7b5d6c9e92168625cc4791e1681babede14234bbafcde9314709df93eda8cf7dec401c33f2138beeac86d8bac304b77ec213c6632632ca45f97f839ccd788c47397a6477426e9f8c69d0e784010dda730b58b48b075147cf21e36314cc8bbbcaf27b25a3efa3adc3af773da3ef4f27cba82f1da0f3d7e49cf31ecba8644fca21a7aae6691f8ba62c519e90512a1445a0d3b4322a704ca40b0f1a06a06ecc96103511b946088302d34c793d51cca0ba190ed469683c0c465a3790a53d6cf858ca06cf8a090ddd94c7c1d5f292db943ced63a4a9298fa4c5b21e4294caef6da53100f8ff0340ee4dd77bba4e3abc27d9d6b8936ad8dd1f763bf0f9294db607ac604b5e49b41c6ec7f87d4b4bee40815926eca0919f01fb55d5604612d0ee0a681d2f06a75455dd330aab4b21207367681f044e819a1bc1d1e8427cdcd0cc367a57fd893ef95ac978088d1690866f1f1eb5260087d0431f1f9fdcc00440a208d4350eb85c800a08f6244ca69f5df160a5f8f239f5d5532b7543dc90f9271c1e15f7d23a9e172918dbf6b77c5cf24db55af31ce7fce6f585d76ece3f7f7a069fb74f90237c8c2b8e238ca22ccfb3d9988654605493da2632d219752169489d21fac37cb0c65c595b737672e1b7b5e40edea07be2388f626e324cb1acdc516e8fe125128f8340985b03c4ea9c12d44810956c9a20b934bc51e54ba325986c20256f925a8dc7fe9d97343b309a9f542e6c07b3c756fa56caf25d0c401b3ee7ac7ca7349ca9becf03aeffae72df4df651d34275551b4238695e2873487bbbce35069d64b6e8fca0a9a2485ca1dfa8b4a7be575a43bee9b32d791cbb1d06833a47e6537a74f1ec85235890d72ab173c7ec147c8327d3a08e0b5e5feab473590f07a3639597aa372d8e65a8775a56dcb44fb269456c6bd9a1144aa4df20597dd64396a1c0aa3c0604db7f18c2a42dd523224713d5c982fe2733e60d153851f53748f002e8a735632fd106ec1ef2688507a373a297b2dc099354362add2e219fff4468995927b942eac1e2d262ae38e4d4f398554ff4e90ea5bae71865bd2f66be95a4c6815c71d8f61162f3fc84c3c8914592e6926ee762c8a45ff52c0968194cadee2b604372a0e7e81b9b400378190e14a08ee2cefd50b33ff41f9ac3da6c2a0fd529b333c947dd70dd93b4cd6ee9b341e1db5f034d08f77037be7db458f15875cf7685ed209d6b3572084dc555dcfbef75639aed5bc56045b23fe198def0563178dabc7f01f926b83f79553f61a3eb2bb584c6c04416de30985af5041d26abfbfb7d0af926983d58ea48a0ce25440f71340e20aa9c2ae4c41e608f0153d950dc07670c20853447f7a79b7146183ba36fcc203bca379a9b8fbab0c4f78b0d4875630471c360b9a357570df7780c3cf9c4e76b096b36ebaecc87c99e08f6bda9cb9283e4ae4dae8d79821307231020c0c7f69eeea2cd5993bb17dfd18b872aa03553ef08ba0d78c1cfa8b689e4e6d98644290c9a236cd462c07abe3d830763496a069595b56a186c15792d878fcbaba07117ea89153a6dc782914041a47a0fa7a2907cb7f733e97e08f6ca77c73a5026ac7bb34760b2809ffad02325ffbd4bc4a780a5d16ccedb751b33c02f997a7c4261329f6f1fa7b786225e011747887d0bbff276fd2fc0d97f8281df3746efaf0ade94d467d2f0b85cdc3eaf6fa1fab0babd7dba7dde5c219bd74920c4d02980eb1641ca8588e67cd1491fd6bda9c3412a1d5e5c1c4f2bf733795cad4c37ec1b288ef13c72f20336597e4d183ac11be932f228e61dae8b58842a1d460cfcf1fc576b4021ba5c0da4bdf98051695c3196885119c8cabb9080fef8e194ff674f309e6b80427ec2ffa12c4de344c9237bbb7656d416375d4965e8373cfedc00f873bdf0e78b83455c1671c157e7ffeb061322baa513f829c211b74c473374a41a9984ace6a331c898cc67babba50f4faf45381799330d4014596aaf284a6eb89e694b5528421ef00a5dbc4255098f58e8d3502c22856cca08b74b9b4e590837318d867313a59177a993a1724f2e80c7d7d351a42e4e44b3a99e8b9822813272e99509a44a57ab5a324f4fb76a67568b382b89054d2fad7f2d627ab05cbecf1b2652b3806d427aef49a1270c813d54aac7a8096071417b65bd57eb92e1ab130d6812158c727b89bc61f5e52683a8dfac1e95bdc984bc96d12e921af99f0dad9f557977945feaa46924252eaf451a1da7a865d85b6fc03ef6749a252baa1349e470c326a671655c21845a96cb471da3ec7988624cce820526794701f5055c9a8184ac480bb79d938554c3aa7c184be8a5da97c9c0d202402e03ab11156e2af977b8fef99ee4201184827145d310b5d7508e6d30cb0a06a489dfcb962436500a780938e86d7f957bc2f86d94cf5df3eea6e8e70d3c8b62ba311b46eefdd5dbf16f6ceef17cc84f4b273126464db5e25010dbcfa36bab74e02ecc5024203eab0c8b108465b4c453cbb4bf811d49df91edc9b9f0fd4cf670358dd2dbace252856f7f9dae5874ede16acc9420f13a6b5288b46c44005f1ca9af2fd52b4dd272148d8b579f1eb6350f3015802ebb8b416a3ac5844319e56fdd9bd9feb01d0cc809e6dcd1761ede59d64ccf207bac82067988e96628208f8eab539f8383a6f335a03ae51ff6383a98fc20a228ba4c0169ab7131086085a928b221439d92588d5c67b55a30f899fa5eaecf72cfe0510eb56c173ff39f9e1e3f2e08035a5215fc9ac22cb0b71873bd2a9605354b929961489dde388ed65cd490547a1788238d6c62dff3830d93ca572140f802d08f8d2f4d742a440f2704a39c0a4521a816e7533a6c2181777d76c1476b962b4a4b2880c9c2060eb1d90bc6e8df848a2d04ce186629a340404988405839264574c94d0a5c49b21e4e522b4acc6ef803ecebd63c849c87e8bef1ea01ddaa0e1d03dfe5e8e91a1675d2b6974a9cb1e359ae4fda2bce081f5d5854046ef380d78295b6cc281f10624a0d2cc92173ff4728b23cddf704ac740acf512538f545ff55d4a32a0835cae02046b36e302ae8870c0dcc9c997148b3b4dd9818ca99b02174294f5e2b77952ec73475311b08f020bed4b8a1b025525f8d840d57bd62c4b828e31e48245c8a759369ea9e20da9273bd8d2f07134c23316dd8ec5cd8be5556e0472365fbf0ce595d5b4431e58832c361a601daba0049d828f0c1aa0795dc10d6189e2495a01f0f51780bf1529935ffd184b70207f186006edf8f6a0a5d74d7fb359e0444f7d8266f4083da28f38ae3a000222147d6660cfa71ac12b44bbc122fa12445cf8a161706ec1f1ac06768f5b7d40c275135c2e4d0ccdca5a2b29dbbbb4ccac1f32abb077ecef08c5e66e5606c359590f38c03d04ea6b695f3255711970a10e031a1bd377510dd3266dc522fffb26a2d71921593083a83bb6010b66d401f1b9544a4d1b84765c8dc9c15ed67722b42d35f8751354df8d054319b6cf5d8cbe30bdd771ef3d1c4b2945f3046798ee85e34398b985cd073aa46da19e33201ae92111cc7cfbc33b621c71766e300b43d92788b12de112e5d8d8822164511422233a890a62b45dc9a3ad0be317811a299f18628e9991abcdf2ecb9765c0e5150bd3d2ee16539207011d837e28d2eb2af3c1d550da376e8d6bb48071c00d6b7b8c371c1ed8c0bb276438cf3ba787bea1c286b8f11643f2f60c0d3cab61ed7db799dec75069c14cf840d2e9553823db29a8a53c927529b30bfaee1b87a8db94df004191dad79a2bc3dce8164a50a0cb47bc268384188470e08a4599c569dadc72bd291b1f80c7ee905342bca2e97c05a47e847d56a3eb3396c367496f5d5e89f110805f39d5717486cd45227e8f96134c81d03c4e316f1cda0c75504660b4eb187bb301888b245c5916d47f631f321ea184629bdb0160cd358f87e6a9656b56e2f68fb9fde5c3474ae67f4e9ee747928d33253895e5e8920cf8b3cf6f7fad521e8a0c71ffa6bc91d4abae1ccaf21c9267973caf284d4524502307c8ee11d11179a18762f23c4b7fbcc05be0d3c97b7451c2a3567ff5f2efbde7f3b55cadeefd45d66e13e4bfbddff36ff8eef222bc7956381123ee88cbc42321a98548f0228424ea4ae4f217950a45f8af1c6ac945900d29ea9ba442d1cbda85d51205bfdf0a53863a848b205b44bca15aa298c1a71c1d44908d2fea2ca28c5211926361b544b135b6c465f802178894693a86baff132c77512dfb69af3d8ee1f9a36ca8a3b21fed1d4c9ee450cb22076d977d22890290834c67ed9c5f2d5148725b14b2ce99d564c0e9daec02e22f9a609a2148da9629ebd5b6b205d2a19ff30955da0306693fed8736f1f0dd7e706a1e020d2d20ca3208c1ff8636ae31a774d241a908182ee122ec3289cba8b448473a30351c23c07aece3c237671a2641b8172eb52ff0e50c0caa5034fb42e58908e435c8a23866c61b18ac47a9df98bab32106d5344167189cf7009f8ec1cdd1371d83d3fe4185b3c06c462e04d596cef12360d14eafc3ec25ac38624c70764c15a8e203e7f339900ac56f4661d070bb124492b0c96df08fc6cbaf2d037f40f56543058d5a9328f67884e82b823fa03692cba4115866914bf8e7189f94563f009791886f84ba3e5b211bb324bbeab434ff94c83f99c86c39c51f7a2f2d4676e1c21728a7a6bc4320e357f23fa9519af5b0705a10464f72bb14c6d704124825e450473b3277d8226c9248a1e33d3f81a85bba4977957daa2b452307585384cb3d96dcbfff416013f9e1fbd7e47f4ff0b403054abfd70397acdb285052b515cc00fbcb527732fc661f4d5109d0b8c660f54ee34ec00816a00c40fb26585ec024579d8782411abe15cc7f6e13e63f6f56108b05fad1734a7373058911615ba2fdd48392cfa57064e032153673511d81432dce169ff84577c656cbb049a4e29b20386016fd6666863e7f660693561d5a1199a3146512d7701a36619352dd8586a33810a2d7f06c997f44c0341bd45a13d2286e6634b46c345a201a210a66e65b504d0b8c995e101cf560a9be5bf087ee79084d9f4e2a3f34d33e231b4d7d3f7819a7ee2bdfbaa61badf1135be7da3db3e3fcc0b2b6b15addc6b828b7dd4b4366998bc0681814719317ab2c7769eb209bb059f38b96b2273c3a3effd519afe21185e269241d2349a90a2b3708ad89032c6336adb66622ba10c160aa80f63b34632fa21028c8e8329e09289cb6c9784034a3bb3336ef00dd640c956f75273d2c9e44d2d5e9bafdecf09cc10a98b3f378802e2b7f6f11505416307e9da7ed49995369a5bdbbe077b2a0ae557d60ce827ebedf49f97aa040f7691197c13d40f7a68633b58ed1c546d99daf777b4aaf7612eff51dd93fe6252f93d2d97cf2de33ca38dce441c776fbd55ed18e33509793e1d7cfb274905285960eb2eb0a23c6a12b2ebba283ac961ba875ecca151de4ac3118a3c436a247290416c02216afe82037867a77c81ea3d65c0c09cf9c3d5e4a78856e0d85c3e810868265764587c902b62804205f6f03a0f41093197c3ed54d48498aa956a1ad3bd7556a1521ef6c26edbad295160983b862b27a7c7999c51caf9a9c42a40d7faa95c1d4d58cc0f8329fcb81095b32c16510c27e0076c6f8d12a3cec01dabc4e61df6469ed6dde7fedbab94506cf2432d4741a6f8a67cab3b71ae2e664fe746f15e2c31ca4af24a839a646666db1e4ec91a62b689f318c607af1e48fcfbf7bf7fc1ffef87c8a03821b6f8f720ae4c8d70f0e13b30d396585fb4294537d8b2aea0cb91af42b0d4731b71b544e8a0647b1ae529ecaf22393d8f27d1c4635555fe78410f483f8fb71590f2866ab467d0748da9518cd28518eb94d987b0a1c254fb31826abc8dc264c71e6ee98cf5b6dc2a11ba185365e54f0d9e21ad167bc91620e435f8151514132e6cef6b56a323c7af9ff44a51e2977511697ad974c6c6e9051997a37534e2bec30b5e4338873fe3d9866aad9f8e2b32efe8d2b61cbd09514a0433107866ff61db5f6380c6443a98fb5725994f64d44293cf4859b8e6eb67aac7aecd5410cad3e756a063f911fe90a4594ce610bace98a45962096ee0deeb68cffbca3e19c161dd61643668227594cce522cbdf9b65b1a7d55ca39f5949ed7aed4a81f93f7748137d0c76e9445d35463b1500a5a5d17ee9fc0940ca3c457a5c2d31259af9e45db319c412a50f89e371d4c61029416b6afe9643394da21379354b2fe31188df5565efb7615acfa8845781964db47303297e6b096bc0ea6f531cdd996ebfb092f7e6a609e940a203dc3c2c79a3af8bf924663d52f75be0cb4feea1eb11e628232b5f53e56663fbbdf0ca0973b20c6486c248b6d8f28eb78af0859ae9d5636dfddf039e756887cf2a78ccb1a31a6148a327271c2494bc138c19bef0ed75d38a36dcaea19946862d75a6f31381f1ca7a287d333f8bca3409ccde74e72c5228bb3349b6e98d98ec7c5a95bb86643d03b21918e8469241a29a3b333a141f4c22945c944e85fe54a6b7ae2fd0bf076afe5ce1b7ba537097e5571ff6903f8ff0340fe9f6a55b57f37eb9d402014a74ac99ee0f146cf052c7dd9ec20d00072b8dc145714d5f9f16bfda75f52ab56ee068c8f0a1b111b1b1957a7aa444f4f8b7920defcff1710aaeadec6990ffc1608844317d4112acaae15d31d460942c51f32e5ffdffc73d856ad62429807ee34dd5d790b46e3f09a5f83f7c29c9929beb9c22ad5191e452d3b618202e0baf7afe55185fa52972a0456d357a853e3507ee3b5455da455e2975487bfe45bc0b331e701f2ee1a21a7c531433812fe8797dfd256e723618fe5944062ede1a729e2f90be8c8498c88ecac871e4b3d9f493d20a838514009b562ee0a9712194f39cbef22ab3908c2ca1a3b0c4c308ba5677619ecec11ae09a75139db743038020dcbf398412f4f38e815c4a1aefafb55a17d91d51779fceada19af8af3633fb71dc61ee7ce9db5d86d78d79dae8e80c40c53e116d3eb700944d1cc45cd2a14003ea45485bf137b96ddd83b27462b6af251af0b9713bf84bacac34f939c3980285c6c113892837b0c0b07563cc0776d81190c456950c3a406150d92e2c7134ff8f049fcd8088bfb21e5a3f81ef2f7d121bd61c9e3f08d68c8e89d152fb0df5dc067b9652cfc72644cf4150677815817126347570e6b45240d9fb624a209ef6cec8cb8a5915ce6032757ea87ac13fff79445958b298f8be53f3ab1c12b07744351545f99786b24d24b75cd8057f76ff06e07f0688d74c56f8ced82bf672eb8100cbc0b64f485b73874ef2c7451bce8718c874f12a104deecae141e1161e14b7c00ca95f68ad6369e1ee133a854c90f24836d9f7cc8fc4d2a0525f9d40f214b87f2b9b55b030150ea9450061b3855570cce46f50819b6878e1000de7170d82b4cf58c4914512f6803abbba37206fb6d71021dcd55b683f97ae31bfa7862e7d1145a2dee067621f79421889d7a38f858b8892d20cbbc956f0a67fb974ada76c5e83a59d18f5d8770b0729e7ff4255834ac5225d7ecc8b4d5907c022ecbd624abc646cfea1b3983c85596de556341a7cc28756c8bb937a508ffafdc8a6a09c13aec8e0ce612b2c6c9579a689d429a45b536d13f17e71c24339ebac6233edfcc4a5f828582fd618dc78c20fc4aa3f2519be6ec6b5b240b1c851ab97b44f9bb4979cbb4044492ea1c00e9cf3aa1fd411cc782165873fd98aecde3d2eff00e17baa0983a32569feda06d8c5f3d262387c83828d966d4ea7c433055f9cd0a83b19c24659a3377db2eddaae3eb01446d2cbf6c2e5dbab9451c48303ccd52280ffe6d82563d0e4f33265ae2c5189ec88e68848a189d7874cdecfdacbae9026d8642cc6bc637ec9e1b0c9c7207d127495398502477f5fe562355aeb23578c611346da35f39a45493661d223754f2614ee40b58a12e60e509abe7a76d9c9d97cce78342812208a62ed871551bde14ce131ccf6ae2775449608a804c92c063d6fa6274ec3f72740e55f5ad5b9b13e916dcb3aeaf808f8bc7a3d8ac91a8bf7e1e1045f064085c29e3e1aac6612f948720059d0221ff6ff9b12ee70fb5fd1022f8094e28ac6e736558a34f1d8fa5dba84adff4ff93d7aa3d379ad12d76e022f45180452f85013bef8356908d6f8460a1291cee1d01776b39fa59b81c4a4945a2b9faa154dcdb4f6d4106789b279c31f65e57513802b204c692b6706f476c041cd108d69b1bdf32ca7385bd85f219433f077d32a40eeddc48134bd384b4556d7bd83b687db579e86c77ca19af191cfd8967648947ea99844c6b0ecd5fe1ae56dbcdbe5cf1517c0e414cdca573263eed9ac7df2b252c5508d2844cf714c1f6f3cedcab242227cd7d40e08be4af8f4ed66c9b3361229e09544d9d7747771bc16999e4cd718c158a041cda28b917a9dd8fbec9ab44c2a77bd4d2e07ff3c5112763b82f4fe89f3546fd6d0cf0138e413f48c7c9efe8acb744dddaf954be61c6c9771ce7f38356bc0ddb5fbf13330edfd1d9d7e1695d66e58d16a7c5f2212033cc0767bf66db1b35ef2e88b7c35ce16dd8155bd8915f9c19665429d90c0fd0aa5746ba7d72e49c556550982da217289de5d036604d741e81b11d4600bab3ab56bfdcfede1cf6d23dcbb2b1f5001c6036d0f3dcb3490c2785dbd3e090de43efe0b19f37ed060e65e862fd7f19d0c5016ad70b243d0dec63fc2954d97a74ee85b12dafc6e80b544d3fc68300c995310c360dd79d564e4abcdfc6b207ab85e66cf61249bba5de723c9d259a2a6d9dcf79d1b4b3490eeee89cd0b646fc7e235f4b4afe4ece4158e5304b0ee3c5df05d732e4e40fa4ae026b3e38b878cf3c6555c569e1c187ed83fd04334402df93fd4693ff5381b242d1e624ca44ae6b2a935f24aed40115d5e65d7d0c0fdb87b858daa5c22075ae8d4521ff393f3541aab96cb96b25a4011961574bcd5771c3d6f8e060ca453c0f16752602088463fda0901be60fae3c68fc470d50c14887e81583a5a98c5d8751b1d03bada3b302fe741c1c49f4194b1f03bc62963e2e63b0508f24b9af879fe1c1b441a42823b2a4ff31af5fb62f669dd7cfd813bcc5cfb414a815e2f3f347aad3c4daf5b8ff8a6958ae1efd38707a9894456a47735aa6433227cc223c86da1875b57085db2a924432ddaaaa92919941ae8a49a74fd6fe8ade5a9337fd1ee14575a9ea86ab64dfe2cba754752a8de5d7cc447dc6f7faa225f0a23861f2738666dcfb6025af2b16a47bde6763827a1c2fd0eb6e24de69af0f6d13d55f4d11249093b542c136cf9351fe8d986a46fc95b2b8511fb32ee85f5ea0c230f31ef7d261b0ed05f26850667afab0011d9c4feeeee346523ba72e7430c84cb368950d7a86b400eb468f8e7045b788c8dfde44d3fdbe52325101c34d32facc4611da2fb72993cec7f96853efa031ee8a069b23ed584c67089cf004e2b06adee7663299f274111e0a67e321cb4d0b10fd46be9e87421f6f12d6d5a7619c97d9be2c1422f5cb4704a9fe329fbc53037f41124254692936929249324f2cca240cfdfbc99bf0749615db6cf935f7d9d18181c4bb61821aa0a86ec31666817206b72646152a6acbf484e3b6051e48649465bfeaf6d254b38f50130faf1b388540a683d29fac0648601330162d6db5e90b9547448c92a4286ccf50104d7b05852f083fca5808203b55242c2600716d191b37ea3bc5f0636c5788127aec5048f873c9131a9f81e56432dd838e3f70824079f7e9755fb53cf6d3eb38317f0b4124321a9013848f80a106334336afa0e3d6e61d20625ec65dcb42ce19a2bf4fc330763269e6a48c5aa7e1efcedc1af5ff8850b66cc5e500939e03397c2450f150f0f98aaaac3c20852fc508d0ac43f21dbab09d2175860e9f55798301a02d2ad24eb0a242c1f02528461d8d5459014fdd760c13dc47ba14b07f8bf6b751f161b145d66d4624cddbca104c0dbaa4172bd82904d0d08933b183527deba069806e9598abe2ff15ce714a81e96d3e86de53784832340fa3893c06b7b444cd7983239060a4a2220c8353892150384a9eab6c4e0b3a136316922190f2ff96be38eb127f462facd44ae8894a1efb712c5edeb34c748a4eecb0d73e289669a7fa28ad50c145482dfd493a89f2d713a5d15986239fd9168011210fb996e9527b860f0eb13421d143fe7454354f00b2327125cc25c2fd24e7b554662cd92730b9a3c131cf5224bd178cd7bbb4c6c1612b567d291b2035822021417ef3a380c61738986ee0e72579123d1d1a58d3de5c35f5e611a05aa314cacf1606fbbf4039ab4489b1e21110b8dad52960d506194d1b51840a7ed09dc9d490fbbb09cb85c6d438b09f3d9fdda8554092ad471336330067e9f9ec31272a38e27a1d96b322451133fd7281996c488608240eaaf6548f949a868974c6df1d3ecee7e7f38828950bb84eb15b5447d081e4a071c0cfcb691ea51a20581ac3e21b16c7592ede4df2e5a348d13ef5373209407fbb426a0db02588671969129d6da98f042dc5901e584e78c89ccc18cd6c1389df0e2cbdac0db2ae33224ad12409f83069c2dad94135495319e93b10414be2db2aa6cedd3f3f7a75e7a0a8d265d99131210bf279b234e59e37e397d2d8b36324cc334d31aa0d1b379c64b61d87e45323f04debdc57fd52e9d05441f05c1577a40ea3a32a05a241bda683f9668920f2153116395a637a969d940814711fcc76fc4e97b584376111b79c5738ba1526a54f39c7b607e73104473af33e4ed71bba516b52dd074968aa8cf7581c5e892171c508ce363f0aad5939395d2ea9440f45fa453a9411d84d7cc912f9e180e7c422da438ce22380428f5106d04b9ada2384c4b98dc45feb8416af6ef521cc470de58a21f008ae191911a538d1c4b1a8353c343a65e44e4a6e0fd2f4bcc6e0d6df611790e4007143c057f444be316bd2f8da8ef46beadeb4b6c05b4519cb2a666cee10119049b84d2278588fbec06571933a08a31d1cd1ccb9c9881641e42807bc0bab5c8aaf38cfb645fa3341d0fde5574f81baa8cbd47802dce25177e4e1f84b4a9e035225c14d17eb606eb17912668df91389851a468fd5339eb94248a4bd7018c302fb89545b33d3c7291c1f9871782bcfeb796dc6b23a358fcc2f80cd132b2561c5d0b12aa67d3fd21bea874119bb7d546f37080d1a6f5d00b9182313883b8a356569958a5d712ab8b81822c1856acc007e48932796a00148a5d595deee30b4c4cd1f98fae00aaa543bea58c0a34982a0d836ca9216d0429c46f5e07c54264d431b0e6f15b457f78c0d7ee8a8db96d4e603abce52789b248a3040131ca2acd7d1781e14de6eaf7723c1808d92880a1989a6589fa447a52a806ec00450c727757fb0d0aef9449e3f42ab67d46a6d6d9b114bd1559d906b794db614173a58b0d1c5c62b292cce96f86e54d6c0acf90d8c259e8f6d5a43c6415bd97a7a714a960cc8889e6adfcf5bfd5492a2cc9b4a88b465bccb6bd13635ab78d9e5c985ba4d3fbf9ce46bb9fdb43abab82eeca5967430aba8d5611cdf897bd6610074d46d749fda6daebb1e3a1eb80700ff94b36abaeca7b0b06664b85a9b75703f9ec9bed7c7fb97217d2cfdcda7cdc9e62a63b39f8267d385d69c73dcbf374216980d59aec7659614952dc7e855caacc88d9f7c348d4f1b573455128fa33129e41ebdd7122f3fb368e1dae7548662484d196d2b578da0f55cc47ca72597503071446fcb0378dcde2e3fbc7751574ca4e2b1a4c1f12de552dae23ad534abd44dcf1b8af536308a50b892bbb6ad463893180d6a0bfebf0b1c79256377a490bb9b05e3577c99146330d2d2a756f641922d186cd9e73e194458b5bcb105872b2539c1e73508086fde1b61b8f395699534a49949f4b0aff4fffffbdf30e341caac602e7ba574fbc0a9d4722fb5ec6b442f6d98822c4e18f61a2de73c1ef5b0010a7762c4f3eac887a2ee671cab47607d311e761bdefbc0c2981b5f3477a252256818efee3a4a92b5d199e0e5abef48bfe6b1e45916c8862a6083a8d9689c1f4d4d4a9db1c045f05f45efcd2cb172ae0cc76e30a6e1efe993d6ea61ad8ca08c384ea8ddda6915e933deeccb4ebf38e3646a0ba06736fb3ccc38ac052198be775167459ad50618f99d4af89d7578874c05b048b87607e10526845b5950f28a73c750c8e3167523a74474163a0439ac6ef304210d44154a2fb728dbcb522898baccbec8aa4a80bcadf3ee8c5a35edcef8e4449b0f4672d1bf43671d0868be9aaeb7938228fb9e5931f63c5be0769730e16de37450455c107b1f04a0f92c5d2555ef8f7f581eb47967598f9333100d4b714a256bce879cac65b8b89fc74c3a01949e04afbbf7b525ea2dbe57d3675e66f81a0d59ab66b353f7c9a5fd9312c14851967299955d29dab2eb8aa2cc445dd6524470822d4757c281f8d95bee6171e6540397d285ceba7647b671bdd5672c8a61718c062e5408e85eb3b754ab3e27a1bf7cf7b41d3d5e8f6e6f36e39c81e627074b6e83e5decb3d4fa97333094f9fd62cdbfc46be16161fcd43a76dcefb346858d77bf86cc09faae93b65fca3fe9f5630341c1c7dfad9e1812307974ffddba7f9bf9786dfa74729684a68fd34d0f2184506d46d3dafdaba31900cf38bd7d879017421e9ff258dc8781ef0ad19173c7865a5cab54e1109ff0d551d97669da02badd40ca842771dbfbda03cebdf04612ab22e2bafa4b3dfccafb8c81e4b50beec1e57659df90d953f10e61e7099c407aba017036cab2dd84e7c5d514d0bf6b019b38761801ac834b4e40243ec8fc5e09cb069f175fe4a788a18199dbe6499505f94b106ed9164728946f2fb84ab770afbbb258676342cf77ca2357c28fd8c7a5e6358fd7f5de27d885a946911563fabc5b9cf13564e88d5ff5715df44c16f82c74484b37fc45c0f3c161ef7386f5c31085f44328e1586c2728c32b0ce9b78d839384e48c8bb655e4de6ff63c2da21826c7f8c2514321fcac507a0007c21c7c3d3c5c227dd28811e0cb84561c3304f709e30965f31c2b94fd6e36833a8a377a1c9dd383aa1125d053ba9214f5283c55f2f3364edd805b2a3b4f41b49d830de0c002d030bc885dbe8991d3a679518abb957435ebc9b80912a16ac0850ca70f79020ea77d0306f90b479d00feb009db35dc7030ad5db99cda746e38161bcc417c2a8efedfa189976eacd0d6e0d19bfaa8bfd621dad1dcb2fb3be01aecf7ee3ba26cdaa5c545101409e7cd2872395b01c3c815b92e319f7981f8ba1cd43e8dfd41c2010cb09e13d6eff2f2b99b1bd4d52ee64d57f3f85483c01cc6d9f8a1365656ba898fb190843f7acc17d96bd6241fc72367903c7fde72d49628781c1e4d1593cecff36552dca523e2cf92e9805985e0c4ac7cd01a0b49f650d2ca60b6a6aeab17ffe984c726846618c68cd2388d2f98402b8a6daf6769d904fc2c7a06b261e5749b92ae45d08f0441c9571c9c5e5a55dc8e9985279160847900f1da4f787fc007246b3843eef7934bf243963ffe7c5554db989d67b0133a066dec301f094e5a45efc28f77d52b9bd0e08ceab61c63fcc43fa7ebd24c39a5fbf89ef8369a85acda22f130f1c6771aa387030e0bfda3cc64c3c31c56b66d1db38e3d8e1159dc7ebc932df1dde12af1f01c09f3c9991d1e8b526c3fb23d38ab3001cb224b91e0b6c64eb8ba215f1163f1331e6851b6f46f6595af52d29d48704fb79caa2ce2014f1faee0753ca62effbd9418d3e14dd1715590ffd79a9bca5d2643d70a42eaa9f7e180f24491fa5716791d064dc0b3e4c221e1bedee73e8ab6188cd5d4cc71dc2d409fd0d472dc733f7b8ec7464f0f022714f90c150e3c3fcac6200202fc6856f2cdb0c5dd182c578e4368ab445ff0d18af0ae7f2b39229012d92ea13241bdd2b3b4632c5d42f790f3e4f7cb4c574ee71044f53157bd8c316cd070f67169610b9efecb3c76269bf3e44e07b020a3d40a0f96aa03c5b0c8f9acdb93010f5d6e805dd56966af04232050b4780bb61c4b850bb9acc69dff771ac1e8cc117d9e6a3ed5455f4150e7b841f2127c8c619fd9742b70038d9a4ada43e96ddec3e353e2d653fcba9f4397b731645961479f94b2e738d938613096692b25e0a32c76914e2efff41695155d27138935953d423950f8b0cf8ff0340fe54575fb5ef7c09662ca1a7e04075dccc6db43700978230026bbe91762d9970d536c52fffef9bf5fbdfaff2f80d081319e581d40a1370b111ee56d5130d4b3d1302aa57af3e2f11ea908bd4ec2365ffbfd873a2266ad745e621bafa3dada7b5a14008db3bdc37926de5218a23d9d76ea93cb50a93bf6d095236907fcdcc7a57e95598c26ca398b2dc4556e6aa9eb1b2055191a4f58d484656ae184bd9ba28b1c13e9e6de614061a4ccb4e45dc40f2f42de4bf40d30dcba750fdcc1adbdb448ca61040183674a264d964fb656f8c29de77028c96be3c069c1c8e0782df80dc981f9859efa0d2abb721030fc158b9ba07a0a23b5bc3e46a5346b4b444023f83867416c7ea069ac53d289d3e1dffc2d910ccec72723604738be408ffa13992fbc33d59fc735a16494db915e71bc70d2483eb18cc73870c89d66d841c24d7583e915e00568ea13e4e9139c3d6aa497b2a613a512b3304eb8c3226e3a9009a06a03954ee291d8203035df5052356a89186ddc8371e5a1aa35c7b6a761b92eb3b125ca5b7cd8683a32c58a21c428553895908f5ebe9fb2a5356bf2bf1debd07bd35d22d393ecaef8e53b02e253a145b1d89d6f3ee8dbaddb0e3e18caf1183fe55a3fcbe41ff4078b139a2017fc4fc0e90321815efc750a4296332f39615c24a44b139698a07d50442c632f14fca331b357f03276db44ce0a2f95d7e889f22b341d48ff5f5f7d216a4a3ec38af67dd36c5143a5a3044c3fd16b9d0fdfa0a64e53bb47507f5a4aac913cbcf8568149502fdd0054012e1b34e86886ef5c4a8bb116dd04725a3421884647c9aece201af40ec92c1f99424a7a02b448b33a3f09e813b192cc1d92c8add05e3568dcb98a4de929d3e8e44e34bafde263e85234b3f8d92a0e68d684287e945c3f3203a99e3a4f66aae18331ecb3090f3bd53a62e0f56ad13ae98e5b7325a4debc1d07881542cd6039ad80fbb7c0d5c7c90acaeb4632c81f0f0aa8ff5a81b9743bfe3e95535488e4e1cfa957f3745969b185f1e1a5999d3d7c75298cbe4e899fbe90ce863588f058d3af2eeef854a1395a0b976a84dd15616a29f30f3c2b338870ffb34fb77d29840413147bad37b9396d8c4eab15f7c877927e8782dece0e73c472cfd3c34fafb21bf4f39864f831038d3f97478ce0688bea11ff5b6637dcae0efacf4333befe2df56bc95dea670073f175258d97e1d52d8b8a9f39c75a17ae7231ba461c35367a77f9ad46103762f39dd9d5e0897f7a1d7b4ffdd4b29d826b71cd252944c20bea24f7e686089105a7751bc970e39ffd8c4d10c901045d7116792f392135bd4bf0460ec0c7fb807f6588ee98bb6c13cd9221174054d7bf8ceb0ade909af1983693469999037cfb0e8919e6970e7382fda483eed42b2b2a83970d844e3a99241908d73aa62ed10e4756302af3fd2f48714df3ab6408b72a349ce2f074d47440e566660ba818358ccb85a1cf96e464023ae9d8fb3e6c7ca3804a9f51106c143735e94ebd7faf88e8fff524a8c211bcdc44c0c8e2c6821486a5291de77dbf398bb782afc1c21dad5b19de5486d7369e7c70ef12bc8af06c38587676aff612ec45271a79a9865e49d36b67a9ec93b9c2ac599c658291e261844e14f69d18b556803ceead205881ddd1ae6496fbba5829a0af49ad65b7066ccba2b118f3b9a571767e3ec1e0d6dad6903c64565f7fd08d800836b8b9824b2dc3a0d07859c5551d18de49749c9642a1737f728b8ab0956630d5116468db5bcc93c051e895098f3954d34e5d8de5547b42e27a4c89a1f0a9ad150890be732a795fe384a2d96d839fd2cbcae4a921afe720a3f12cf1116fd486a79fbc91f49e70f3f12f76990679bb8507510f0e49956dc1a1aca92dbf0e56db8d21e3599b668eed38e83f5a52c3c1aaee0642074c316fe3ca45846d6ff23e7481913af4660a1ef82b55ae94a17cbb130bdb00d90aaaf83fb6bc8f415ce8ef0658d13de2678c14a46a8d7f824aec614b7c9b0248b11dea73855b9bac00df1e95589394e2fd53ab6f7afb0c5598c2fa3d788e02f2d105e75dea613285519304a78f9affa7e7eb704e98129146b9439ea82efe38c4bc2144131aec1ccd33ab685939ab74bc41786a6920c084df8c58b6e7dcbb776c20b5afeef9fa3f12ebccbe41414a7f9caae8d085aaed26de5db82d8d9e30f18735b02d5faec7a6521d85b253930566ba00a669229e6764aa52ff7e4aa6272ef2ee18aa5d9595dcdcdf5cd0b2304eefb889e69ac8373a524535c6f6ebf645651b0415d441ea246a396259879f66b7a76c94258e2b9bffed5342d81b0841f654fceb4634192486291d910add644528dcfd8a2a55b8057c41e18a0c0d7095180fae3f5eaeaa3a415d816416a52c7812c45e66ae8167f61b16628c59834de4b0feaab4c8a90b98dae466e6b7963d41bdd03acbf0233ec9ff60ecce3609feb0dd311c2a7210ded64dd5b99ec335bbfa8a6b5eeccbaf13646b5d5238c236f5610138d8e7c8cce80c9842073853a582f0c239c6367f29f3531660492630d1f2f33008cad73de8e0feca59e48a422ec1d077ad90e99d40cb622ae21343f375eb0328d35262873595d2f743c83540fb15f1f35aa58d03505599394a741defb237c0f5bba49fcb8cb3464454682c277959bf8e44581a52c440df935099db8b2a566c97cf56e6d084edfaf4bc129fb986027471ca6df067f9fea60f19eb2b7131574982bb8683a3246b43a2ddf151755966147d8ef3ae734a3de77ab9454e864b9416525be99b00cea3a8459b293f5939948a7f9b3d8700de1abac18a9c2a833ac09941d1b0d3d1bb48d3d54bbdc019ce5206edb0d5f236cd1814776c292e7c9c2e83d3280b816219a69433d1961abbfc1c3024476a38c711bd03801acab2968ce265160294af956f509cd52b5afe712652ef7f76209feae4e564e02cd291da8e42c258b57396496ed22ef75972495eddae941edb8f23d058375a2b2ae1ea2c90502e5016d2f8f03b382c7fa5677ce02a8002fefdb6e467005735da6fd0215f5c6f6313dba85096e81029fdec01d6cfc7455023504591b12d91ff60f0f4c7ebc61164abd540d3733c334f64799ab2e12e443e1ac839400dbe1031ec4e987ab3237abb8285745e11e8c0667849e2d182e6abda5f5b7ac838f0b73bbf254dbf1f46bececc07349c4bcc6bd4bc99ee502beb8ab3d8e542defbf4ec4b6d4ddbfb67e87ad90ebc03587eb2e188a22be0e3ae057b0a1f84bcba5d0c5d283b468c6305fc12a0bd0c9afe783e7a77fc1f9034486a5423368d09ed50d9b624d881ff7b2083456fb072678cf15249c234f40c48d9c91c5b8424d8347531208bb835d5d0f4232c604f46285a6d4b8ae91e76bbb0b9219f60cd289c2575eb653bb5e5f2b8741f8d7e9ece360d7936eb323f9eab4d9ab2e7f9253a8ce6a881defe4455eb0ac2834777fb23aab49fe3eed9bacafac4c88c43a6284cc222646142e6f0f99a8c27ffef0ed829977b67902fbed389f856757c17a14ee624f4132fab10b4ad008d51c46ff4e46d5595d3e01d8f40a855fe686e10ac3112ff499ce1f92deace202c5e9b466d36dba345a61c452ddede0ff26946f193b2b36226f9160aa27ac8d440484bb8d76e192707e28b5f0718f9e296aede5c3e1408f8967a8b69fa942198a1185eb1feee2054a4ed5cd104251d7994a9a56c75d87fc3b75774f068bc1f962488a2c0d7cee37718fa24139004ca37bea6dd8506999966762cd4ad7d6937b68a6e68ec90017415a197910aae506a50ff0c98f52ce482b6b2b22002cddb690532175ba8797623d33bfb999de8ef4bb4496033e7ed75a22a85a7de4ca7e23f9ceb06865d2dcff6a41e5eb78ec8614a2dc2aa8ce52246e02a605e775739e4eb62c12f5558a19c88b23832a067660e79748161cfae4be5ffc40937bc7ff99e0af92847398e322859ffe62fd0692d1c37a0dba6fb37cc56521d5989ee63a449e6502bb3759330152d796a32c01dd5ab336bf0e4b545591ebdfc238ae4a60a8f5a6a81e3a67943dac52527563ca8498b3228d6eed41a9965965cda93659e4d90a348a54df79605fbb329516714d0a9eb312a0582cf7349ed2ca7d162b00d516c0d3cb01006987d8bbd60f7f26fad4f7ae2539a8ef54a12b4120f3c73e1df2f784956ae8e9171a7068a12a7a0d7fbe72fd1e48ebc0511f6551202b55df06675499fa8315d3b183efde292fe77109fb731ec74f7023e58e15cf3241d91367bf7f850763fd828e025e4cbf6cb3606ee69dbd1c23a9580d6f12b9ad64175ed20f9644d0278f86f277f1079c3904ae187296455bdd65398fada7fa0b967b03b5cef823ed5f039bde98eef40242cd1c59460eb34f9c4f6482ea4d2666e2301bf01933229892eca8a15106d2b760f870091f30307ee25293de9a0ef9cb0029e4221705428c79a02e69e19becc889427b92188e62c8516dd6a78e933faf06612569fe91da3a5bebe3ec72f2fd6db234c7b8050be9f0c5a6a67079baba08409d7456a292593191d436c4420b4495fc27bf3808f2d5453fafc8c01d5dc9f4a7ea920db6441b982738f55607902acb9b025459ee4a2a5a5e8200149c858a63fda0e93b1d59a24a967e28ac549daca007ebe523663e2337eaf903af1dff8c26e4c8fe57a034dfaaecb68d524bc359e28e2e94c2c26fe24e1fff595bfeab256192101f9076547c23fe9ed81a787efaef935d92baba2355553f3ffd5f817160824651b1b9435daaf13ed1dd443a82c563b6a0e9824b1e8190655511f85f391c0ef4302457e695df6c03776c72fb14ac9270f8fb5f668c614a6a8bd1b3e6333e34211827b6ec43170896cbb4e36b04a506a14610b7377e6d7c6a282290844da97994712d03503f1183a55d14a552f58d1a7c5749f1dccfd1e4267c64fc364033b4da738f64ccd2e24a9117c5046ed4cb6595bd28af3b0ae6303ca8e2e18ee10bfe5991a209a5affe23b6eb8875c153c95362ec23303abbacc7d60487a62be125be969ad8c7772cb0f0b2d1bd1300201d39cbd93e1c6035fe4c8d0ac6ae6e9a0cb9ff15cf38caba6014a65061b104676622ca57b2dbc67faaaf20cdbaf98912e4818cd40429602bb8ec348b2471b98068549b2e873587f423caa22c726e43d8108f264637ffc760dc8bb056816079d91765e03fd9781d3c6a050d48564b0cfc8f61d4270a6dd9c32ea11654cbb129df1bf793a7dc9556a8fa94ee4d3f788bf8d12e6711303d90c3b46239facc3cd475b3afb44d096854f89cbc71445973c0e6152dded2bdfa249a243da91fa2849c179029d8667b6feb9d8167165ae4de8b8e5b43a6e7b11b28da977eecb4c8796bf70cc4be2afbe324ae1e91751d6a1722284d87be710ef65a4d0b00c630a528a9da8ec3a38e120b478ff7bc25d978b7f3500f80db1ed69bd3c08a92a971190f29fb04ad97a0caac58e6dee52de15153be0ebae14b57d072c4a9766b59d89b4daba3b698f2a7dc95082f48c70fb9189f725872fa84e21205570af32cf924649738fa16c684d29994a5fa2d401b36fa5b09224f0a3428ff264a6027ddc89c39f578bee58a17ba78a44c605fdfd59e68e3a8a02452447f10421a2b797ea7377ba3ad2c2b557cd19a3412c0b2b94f241585aa99aacafb3736091f54c089bca9462cc501329d786f838df0dd0af5e67d12901872cf23ad6ad366c03f14e028b3689887896e00f8ff0340fedfebfabe7eefc9366502a12551ff6279d5327d8b6e41c59163802c24519fffff4b4d960e43413a0301f4def73ed0680424db40769a77517a7bbfcc68248ddd81b7d6d4025ba724002e041a394d4e3a4039410124fe18e6d7dcc76ed3e6671a8288080fbcec3418e74519754c11e157324b1866059b43f8a6c5b891c1bd1ef0085cfea7952972372994ee074f244e38bd9a22a1087bc198e8e9819d4edfcbe0dab4ef4fa8a4aa1a9421e25f95d6cea069415f92a2f28c5eb25a10817517eeaad658c1eb392fca33fa3d5bea47b517dbecec39a198bc657562fd58bec754ba5e40e6221f8384a91be54bdbc90b26c6936b96a12c4818eecd4f0c334db1602f2a9756d8be8bc7a78096f812e7c391794816a02b7eebe3fc09b68f8e0f8fec39e17f0f321ad6c98e97f7618f1baa1c41636d45a2e32ead39b74b33efd4c4d3dc9ca14e8d267e4e9ab61883c23ae804bc4cfa05a4ccc76344ea2baf61dd89cb7699aff472e14c1694c5ac9af1669d3405cf645a28dd6e8e07c39c4c2e1c5041a6975aa8ec2f438d92a8db72122a9eedfce95c2da8cbf47249a94c7290d4d3045370d03ba55bde03122d9ec06859fab8ea3cec0bd7231e99980b5f5e172b5ce70750771f71c7c1574ac1633f3c9ee7c8767a2693ed8897db8c83159287399b5b5a502e588f74f7268f19eb0908d9f55b3a1b6243f5da8e675039943147d0c4ceec3c00b092924c722403f1bbaaf4bdbeb4d13983764f952ef16dba57b873a6c59465ba578e726c4f0896e04b17ef157e5b7f7dc594658bf70a67c15c37db648a7327b563f15e710563053b70ab45590a2a82db66fb8e7d97bb6fba9cb8e4c3dd770cd74ba6ed2cbde0672a4a24d7bc6d43a2cd31a5579ae6b777bacd075f551c05c7d460149f7194c788cb0191bf78be81e46248b4d9c8e2dac366bad6b1e596168112c7aaf5aeb214f02fd09d76e3c0040bb143e2c5c9c13175e097862b01701d41a7c227ec9253ad7a1f76491391168a5cf4c4b4d9e666f79bbf2a8f8230252719ba6c9f6cb7bd8148afd76ec9f6d49044e6af430b494e1acfd3ac612b83fe1214eb8c88fd7526f1be731c03c573188cb3b21c379266930be51e878c43b7614b9f889c828b52602d1fd95647a865711a7549364aaffaaab523fc501ebccbb2e516cd8a7e605acd95cf0ee588a58e024cf751043e056fbd41f0fdeeeab63ed9e41e16c64cf02cfc440859fc81684899040910530bcd64b1be43a98205f0fd58ffb58dd8f0bed86a1d6c9604c283702b02030416febbd909b691aec0618dd6872846b9256091a8a8a3538682f9e91e2ef951eb6e6ff6d3138c11ecbb1165921c81e7cba919671c98c01206094f2e7bb3062119c8296a3aa9260780c1d6040992a7fe68e144814890094aa0446592a004da338ec7826e37f29cfaf3bc57f5eb7902a362d97a0894988383612791c27865c16e8141019013fd5adfec1d5075039a45d68a981a21222a98283b0050898db5865547b8a9a920ed68c899373389906382ceba2628ee0cea5c64189e7986d5ddc342b9c78ccf7559e4ac0c627277ef733985c1e6c1bee7d72d593e62b9565efc0d9b17b0aa41b360124b98b2cd6ec3eca10bc7c5c0415b796e297530c79b3e4a628bcfd5e75a6bbe0604056ab13ac6900746a8da4ee3b3c4d31172c06fb69baa92a69ecadc5b9c96d8cdcd1d806193876cfeb798ead4f31f7d6d0e9102605003632265af098b84e66ef5a17173737120fdfdbd28f502d547d03640ece6f747a5225e061e09f2d1c6cd9ec4674de974434b5127463b9a93b0e60271b634cb386889842224f72c533e117097d3781d7a98fad6cc7464aee169717c561799fc48505cf91f00311665cedd112daf69b1cada0fd170aba219e4a939be8296f2d5b01ac5047689d3a559595f8269084369bc7c256ad7a5de3285c09c22a7058303bdff7ad60055d94e545faa103761c164f7423a6a3df008057e9681eb6eaada9ff7a30dbac6ed31538fb8685c36e668ae6bdd4c36fb12b93fde7c87abefcc47a8bfc58fd14a6b76c046341caacc0d96ad1aa594d6a5400bd91954a40183b48d2d4bfdef6e59e7eab1c838bc45ad00b592fc453ae60ee07c9c6492c60048a4c08fea02c00a20407ab12fc61d0db4448baf6715814ab6351fb961a6823cb1ca2861c131f7de264446fe236ef195e25f91ad36f3c5f2df59f53c2736e6bcd0e9d7346e6a2d9662d7994c48547a7c526447a79aa043bb8de3aabffe8c91469d2e490052acfb626289e10f0ca8e0bf23138c7ed456655a5e3bfe32221747a5ce36a137997622e012c64c048747a8264e8aa4cc91d2d8580b727f295ed07fa8b2ea877799f3bdc27166afa8afc99256b5d52326b0f6bd8a0f3be26dee0b08294ab12c09b879e01dbbc851e6cacbb5bfe22aafa9588fb121bbe2202db90768f35acd3ae470dfc665a05956cad2149bd0c2b4104b583aebb468c9c8b86db6e273f2206617ede07684b70e576e68375f429157b0ce2a69159398be319bf999caffb6f1a560f664c82b1c481a3a57e10d548a59ecfd6d97644f61131e0bfe0482d2a4a477d22830e1635d458bdb2012463100109aba39414bcc06fad63834b035a2c00aa09b29de6905c951739b972fffdaf72a9185a54d225e978ff7ca49ba4e2685abd32399224a3f78ce38f51aacd24d51b19892955013d4a30a0034acccaf186f9af2750ccf268177e2b9cda93703d1aa6557a0c7ef6c63c3ab9d9ebf021f403f069493cca34a9a77568ba2a0cd6043b5253e0c1f82700517c9f81f884a6c3e8b1c5cdf194ea9095f30235d0f0c751fdd26bcdfafc99a4e1aa94da0d67f2b29057209e04631f7af0baa94f87362f643fd9af413f4e2642719ec7b606046dc3061e3a4e103a20135c58fbd40be9a56a7ffea361f6a3d7e1857e8ca79d75bd9582ce088cb81e97c806501f82f40379b6828861a1f00ce44fba847459fe9e8f56aa0a8e6c4cf89563526c9ef1e1b4ef375189e117f44636070c345b765ec941f2176e03af0ecc1abbeb5ef4fd5906d38d8517bcf5f1f3178af5e177f18eb0a1ebe808b53f4d3d9f79f7dd8c4ad02c026647f943d22c0686c7f2b641d6dc5cec0794b2ee98b96290034267c81adb46722b4debc2e109a2415477896cc386ce5440f8cd1b66ba2b328bb0a5e23297b71855c89fdc5c6190d711a9685bd21a046247a01219e31d478f29b5b1dd827fe3982b744c2c0eed7cdcb5ce632209fd0dd436bb7edfa5ea4cbcda1c02404c98cec595f7d75cfcb3ff77c2442d51344e4910ca4a6a3d09cc8835da860fe09dd1226c7e801f0f9822fad7b10f6ab99f5b9a9b508e6d63a8f87d0034cd09fc70820e4993f0afb2607a4ffe7f14bb165ee446812fb72dfaa7b11fa38290c461d0e5f9781ce79ed595b58fd3eddfa3e6199e4ad4ac57b9a45a00f273bc70920f4ac0f5d409fcc2090f6024bef9bb80fa8f098615897b33b6b150eb9ae5b9f4e3a4813d01672a98d188e50ab9b0ba99c5c3ad41de665592c24fd571104107a095aaabf68cf796568cfd6570e8f6260cfa4c8043c7545de8984668b59035824c5a6aee673151195eff2209937621aa04b2867f1a64349cd642a3368586617740b88aad4ef41764e1240c8b82d56be819bd0b5b27c0204765fb8d1aa09ba5618c0debec3037c39786f4d3a79364de68c5b4407c7aba055353a88f744a1348e0e4166b59cf4d3f766b93641dba8498ce614769d2259219b1d9353b1b360c0a3ea0b5c5e26e2caf243db4bcaac093fdc07ecbd4662b7cb5f8297afa6f7e45cf56a1ddf686f4c51eb2ee62223d1f000bbdbe36a8b599ade1c8d4f7468c8f4a5685a0c309076ff72052ccd6c0535fd5e37e7acc8f34bcfa8ea3a237e5561c82095b4f471d242faa1a085093ba8434ea8d92d9bea7c61562f110ace64c2a6c921db33acae59a9fa1c91eec8f43ec5e0d85c78eff836e024c725ffa66e4e1faae4d31fe24feee6507abef3ba3967b4a0c5d61fda9072c61207e4aee4b77795a7bd9eae2369e3f30f4d894658f13971bf67191a1b00a11ace5e9e11639807a9a3963f8029cd0e0f838dc357b953305ee6255381da5a778f58858b9cdcad0bb30b7123be903ee2ae29a517347ac4e3b7aa8deca29a62740ac5014d0aa552089b6c668913fd8483865f314973854a8829730df037de9a90ca20c47c80c4b6b1d650680aeca88bc645e488b35f07a71eac3dfb84f681e3d56379f72ef1bb84cb7eda2ef1d6995d021b0f91b73128cf6aa2fefc809986f7186d564ca84b62b17743ab31d91cfa0a18032dbd19f85679e0c972dcfdf88a25046cd0f9db2491f7cc61ac089aed27ce11dc6dafd9c4cce268a6be7247545ba122af7e0413ee9d9cfc937b1ef23a103abc792c03bd1fb73bef3208ab72294eedeb9a5ed24fe3cdda1e9fa2ad847141a5ea46cc465ab33c6563f8bdba045469359c107570763558ddf214e84315ea3b495d1b936c3adce80b5b6ca7d732ea88a53366c63945f91b33fd7046984ba6dea1be2932ba2fd9c823d72fc0c6e5a828c2a5d0b6f828c230334e71d4f696de94036a9a9f4989c887fd249563486ff0bdfb64db4773db49ff9eb2e626f6856e0fe1b293a75e28283b8d4d4c2b1d2a6fc2df0deeef694a42cb7d7e14e69296c389559210c318aa4b8fd08ff4447d50f0d16d626701860cd16ed316ad1e7e1425588d33f0263e4dae7a429f663ae1e9761b439f8b530d2145858907aca997f69ae6d743afc7c8021f84c7de0b263ac509d31bc3a75a23d92c85f3710e063e648e8313d1b938ec21a52d651054c14aeb6054c810b881d0eed98310a6325d248ed554e56ad1fa8008229db88c19404b85c6c0ff648e6d2773a2469e36f1b4155957328290b23a7df7f8b020f5bb4294e375c1325aa85ad5ff0cf64d6a7a386d7e186e1bd1875ec3e82e71b1ba7c450adf54af5298a5307b78f82fad977f6af679f6a60aadd61191122aaca144e25753e9e7a9a748f540412b1807ced74af94102098cb01225bcde62023c4a84168e2b17c741605b28ca6f60bc1c71a4ce56e97ccd985467cee516588a68b324868bac5295f49cf54d044219c09edd9d7c1a0cc81088bad0ac6163357067ae68f03a9d7bc5ea01adc3735272847f0f0c56cf4bebd74e09076db6ca71f9c8e41db9f2eeac339bb8d27da77b2e2e179ea26eaba9cb168c5a3ac751de707d47f3b12f3820d48a1d4d65d09989d59597c3d804aaf39f2294f251dc86bb44e263ac3e093cd9e555e08cd88f8b947ecb9b21d8b82c0a6effc96eb90f4c049b67be1e9cd3e5e1f9dcbea2d3ebc76b59ebde17cb408f1adb7bb406c1105392b424d59c4a4686cd4dca75994770f24f8ec99279984ed772ad9f617e741400d372661d9e2dfdb07cc035525ff9bac5f26a8d59604ddc6a674f491ee5cd6d8defcdf7aeb5f5b049a464eadf8060b290d2f8bbdd8863d9009625fa5bd6f9c6ee2bae7fa8155084f50d7b843dab35561ca2d67432c687a93966e754d0b8a449694cfcc071acc7bfb4fe60467e944aeaf533a9206c9c733ebc13892b442c53b7b61009ddad0ea6d5b517f434ab3e5c67715f8df6a6f9122854b9b4ed964abe073bb3bb572e1d4d836ea6b48ba48ac80ae96534bc009476579d4d26b6b4794eeab6acececa3baec6d8dc1b650e4765703f4fdd45e4ac2dc602fc044319215773af4f470a1e9730cd47854b6d680076b3d559cfc428465c5d68662e76fc59d3cefe9aadd30679cdcefee3e2c67a24056827d792326e6d1fb586224f7a52310946d5042d945a8ba2dccc4aab72194fe0fd7aeec22c43dcbff62ad98f5112201691fa2028b34f088939d568b1a9b5f1d15aa12f6088466fea81310bc1c112275e08f720662b70d6dcf8d3eaadfcfedbbaac1abdaf897516aa80ec336d15a93fa921a029c28e8d1c7edda1d42bb1fed4dc5a2e4e43a7de88be216b36f36d6b9718ae757f7b78845b31107a5a6c9d73de139bbc15a6516652748b63180befa30f19c95440967b7e35f92cf608595dbdcff2f89b64e2459fda11f3d158634d545fa3d20a7b0f1fef969f15569ebda044355459bb7c1a91e2f49419953adb3e8c341071d6a8b47b702667e56a8be9e6a9dbddcfedae5ea78bc3fb1bc10999b5c05e1c6eb2918cda9ab83764b8e50710e1c1df4f911daa26c826a0ef28163ed872dfd1507e52ec08a243eb84ac092705bbfc23bd8fe6e7ea8705cae30dfbbeadfd38e77b3eb0df6d516f3978c7e882c605873768e34823b4b008c1ea44ff5b6705bd3b65e671c94f2efb27318de4d6fb4b97c867159bb60ea1703d17cf563a3920047cb08b91b228db20aee3b1def305f0cd57078d8b3dc7ea1cfd5b3fe6154f70ce2f2dedd2dde0cdbc48f91a259636ec327b68d5f526f0e9d03cabf96b4b43023d2de70ed424f689a49c80a92a015b40a99b5b4d6f52d29ae1137818f15e4e5e07224d30319da90b2319d02e99f61dc47a674fd6b8c78b59b2a3488e64bc36c620bbe4b9d8bb56f9cb61e4bc36d520b5a6f5b5cb33e618a7b39d359e7edeea272ef53302a644db676deee740efa329bb36d340dd8bd030bc10f02344e59fafe9efdc138e55a5decee77ab63afdd79acdad644e540c0dcaf0fa5d8f0b721f875b30c79723d699fa821974e3978692cfcde458d2a0ee2da691976c399c79078fb801c9f95b97493bd3600f8ff0340eef76af6f53b49aed8ef010664b9ddd77ad3b69482a4b13d310602c88eaef9f173fdeb0bd613185b5be1e6cc8c581254dab705a4997b73936c5ef6fd2d11c85f2d488b241f49b546d2329cd4bbae9ddc1a20447419365f0136f8f768fc0da5a1591222f1f6b6851c8d51cae15319437a41f2aeccc21ef5392327ee8811a3460cd2c0a4818caa25ba0c5de00deda8656c4b049674e81473b16c1296bdb6fcd3560ff5ff686c722cabb55f03092d2153df80dc33ca69859ba30f61fa4e051a25485dd7402d46e39fc4b54a740039f78d7d63dbb0c438d29c42412a1d25416d9a7214c37b1cad1a8d1293f7a8adeade8714b7d3ac9ee60d73e34c784d3910a5eed10ad10b87a1fb72db419941b1a4924d9ede2d60a6f919926bdd7fe90dde98a772e2ba79054a6a4563e2135c0a506cacdc465c085bfd913721db465b034cf490e71a8f7e098541c0dd2614b6c295d5365d8a47765de041a44c38564b11c9e3b75d6160701773a8d7322ead7c7fd1775dd1b3403bb6376b4ac8901140800de9a4aedbf9a835590bd5c00850e375bbb9d85b9328a1b5bcaa703bbea811b8747d9a94e8e117b681b5545320f29aec139cf7acdd297ac58c91e5de4000b6c247c5a6f842bc936dac719bf672b05dd55fb5b71dc1274ed0c262613b13b1e4a28283e2b48735427135a277fbc97f6386d02b9ad2b49257880789ea3a2e46015d96821beae35cbbb4f0acdf848043dad08443c6533e706f94077acf874bf0550c5b8e72982c999ab51242846038d6b2444070a3e0a552034a9201e2e4f57f1118799bb03fb7d4c1bd195076770540b51ba6aeee9354e58e6411835eac3f99e2b6ddd0c6506312cd3d4e718bf1eac8e1f1eddf622b853671d9dc723683ef4f82881d145f434fcbb2d400367c28e8e323364c5058b25ed158ce634f14b052827ced7e8481e78fdf6fbe7d51297c39b461ffeeb724ccb0a384cf1f4149a97b2c8f5402aeac0fa15b8f8b2ddcbf023b8c08a18dcb006d25a63170f054ed5ab7eed53506f4e3d3dc243dc5a415ea16b1c16c6004944451e5ce424df1e603b2ced6ed0616a8202a9b2332c786d65f256c08b62cba052dd8cb085a9155d73065c4d9c7520ee2b957ef84b9e365603b94bb9609060caed9f8cb86fa1d63a3b7c946c360422b9c0f84e8138628889598f3da974fd167730d89fe21dacdb16e8f4725b8bcefa7486fd29ce8bd390b6d3afe56ee439be8943c436b80ec49b86d856e627dac7d4b0adc4d800ad74519a11b80436172d93aeeb7bf572575d68cb24083f0cee74a06afffcc938f326aeae22bfdf74c40e2e54e71773edd6544bca47f23cf2be3f85968137b078c1d909bf0e1b40df0928941cfcaf2993988c772475c5697ea52fc7d97de3760b275e9bd7d5cfc7c06576da3f58efe1f4e7faf091b572289c0d04c52b6d3917a4e0b6873553eb0701d7423bfd46fd83d526d160b6f361be5666261b231f2683e83bd821ceba74a5f008512df80d9086fa0847f45fd7723417b99527f17d121d0b80ec3935435dc281756a108990371e42015d000cb4aebcff684c9cf7ad9bab82e44cceb448ade0545fb81f706e812a62a40462004a41fae6eaf2355d4282de49b7c3f1ab98cfb2f41fbef4f7fb4916ea3dbdecf58eff0b9e62864fb180f6b10c840652bdb75971c92cb57329ad381dabbad4702c50276f9577a5582650e0b54a05f4c2b756969d74268bcd54b7919297dd253b443b133b1e3133bd4ae459c01781707b777ef01a6bb0115676cf349df2736425a224539f7717a5a4cf45e851e92975896ac798708406a02872ef8c99aa859648426102e473807569dcd1084b54146ca5dc820a68146de19a245d0ac49b47262b3a73c242a35081556889d3e5b5cce96f2225a4b5eeaee401aeae3e49af51d7b5396002dfa59137342c18277628a0a4766eee3f454e962bae48e226cf7cb389884df099b8cc4ab261e79ad4c95ebc37a8988900236bad46795ea13a8c59ff56669bec1328b3dabcd5a1b5f84ae587cccf65ea044060c3ca191bf52f82f8976d663b291fba7b6e24acec3a1b8d4b503e0bd02c605d665b1e42d0397acd123186adecda728bc689d853ed9c4c9a412239c15d516cb9eea6bb9da275aae95f168e0c5395f9cb3c529c5d340f15dc0268b84d21bf2b13ef2c1d5cfabb886cc450cd7e4c22181134959fdb196939e5f4b31e5d12c893228810db85920cb4b32a0720a341ddc492cbc55cb583713e582e511c41200138a18f4eb84c944365953a9944ab5a43e934610c1ef88cd290a0011a17d9a7c454fd51ecb9c5a652c6cea22d353598c2625f0c42ffc47bd0b79285a6e18b9088e22fee0b8c828924912981f5cb132898196e5a64428f699c1a7c2b412d21a838e45a41e7fb53445407b0b4c02456a452a8163ff0003325b9e1139f39dc4b2168a26a304a8680cbd5890a8c1074fd567dad8cd9b07989fcb7b289aa66d5159ccc8b33db93d82df6aae1a7aef7b7875762ae0c400d50db2643c3c95033521db783f140c46ac0b80bca115a12d865192cc3c186d0aaa994518207c6a031e2f129a490aad17bf7a4bc7f98b66686e521ae82b606f569bbade9f66cc7aa05ac6c067dcecc4e43b007c0aadcc682aedcc677db6de7e9eccd4781727c75ca49dabdd432ac9dc083097ba5629dfd6b3ca5b5caf0ca5bf78bef1b1417df64b3785a5d291d269c28be1568c5a09b621f22dba69b79745a406f7779344d3a40e550d19a576eb313cc9126bdf2e113009768c32a957378d573250152b37cde06cb93ef14eb1aef0f7d20cfd0a9436de6985337bee05fcfbd7f1ed999dde16fdde331bcb31efed26d3523292a0ae0b9fd19fe98c9b51d9a67a6f712da81775376c0f44a8129e6c956544a8a769004a26a276172b01ce7ce39154c192a02e75c8b35643dd083bdc508033586bac27cc130815f891421e1a936b7fc51b16ad75f6110a9fa1d84506b6662b0842ca7e881a5b549228177431d08dd2cda0fb26df5289f63b37b2efd6e1a9b6ddf1af5963abb03f283055b231d669337f4fbeb93576cb2b051a8bd49b28ef89d92d9b90ab2d9a177837f8d7052fb82a9cfeb6ea54132844470747afcde0df292933fe4c1ea4bedc480e9710d94e1129b1528bb6620857a64cf972be4d468b76743130c625b47ccd47c8aba9c33435823e6e20ed675cd047ec40174ae512554b75df1a5d0687a51b4c499acb20a9d2c6087b724eb92a1c3c3de15f0c0a38a797dee0cb63467daeb5d2d36b94cd1865732ab54ad9248ece3a49c2e9ac8b4eecdab6a5564c848ef2d664dba0195d8282daf65199a75ee3db8aaeec2da7ebb94f761e3f39c1dbf8054fe7f4eebd5f2061a8bf08749e725f53997aada7bf1e4b1ba8835a58ebc2229b844b17ab6233a3314d544102018c3414ccb0872097ee9a604d77d95f714ed01aa162c4210598f3da187dec55e369f6796ea112899b33a05a5cefb56133795444c08dff41cde8491971fbe273fa00d7b123f451023709b20446645ef9dad2a1c0ddecccbcaeb3d8589b4ce5124a0fcb48954c7a98d6e542c653558cd88e0c35f996038f1bf3ec1e1797963480ed4d40a5040b696a27cfb085fab694a572c0ba35a157a54703645629dbc9c696bb51a883c95c48262641f26d5872922a901f81b8fc618e9870d93af3c0c1bca11985156c04236dd86e49a78fded8941eb372d77ba0c5023a68c2708fa77d4bf53ab437b05a497d6908daa16ec677c96bf23c26118fd7db2aeb97c25f3c8e70ec5495e6066f6752714adcf91db71ff305d676fa6e29578e1b6d426db3ba0662434102eb1f54efc2c57f263b42c6d7e838cd8b167053130153438fec43a2c1ede0333429c392076b853488d458ba5b1844923b806abc81cd01e687a03c9194c606fef4529693620d8573b641a848b3364e3270d5f3764a64c58471288b199456bcee300aa95d95ff52be3ce04d73be552e44a8b4db886cdd8fd3e35139c428f9c32281051049f74e8a3ca625d483a2d3e8dde73799089a634c196212df887a33f1f5835fb9a6356d548d3986f41417a5cb621812077addcec7a6418103d2efe95941f83505b19344ec6b7a6849ecbef9b41a28f3cfa21f20eb47a1d159c629b7af58e7a397cf9ade0f945fe122eda68b3a270d711ed99cc6027f8eeab3a0cf4c67b998875f238e7fddc6ac914efe0bbc2593578bf5908b1e40e36ecfd840ae311607cb631ec39596559fc103e1627fa19281a49c2652bec063d64d6a48124ad975f59cf8ec61b242af63929fc21fec5f84e7f0ba9c97abe806d5d60ceffc1ced667580eb5d667526a4764f55969e834a75fa976c6f56a82537d7f42ecffb6c589dbf519525cb93fb86c4aeee608092308f7c58a2865964d918433ccba1240746e40e106688efc250cee1c47f19f135e4079f6c2845318f512d768e6a89d83ff4d2f7e3d417bf0d0d687d576e95d284ddacb88746791b097fca613765b771ea7de43c544d8d15ed3a3ffe7ae29410af24b4012ea4e89758fc1857699474e91ae0c43d8ceb604d256a3d84cfb51292948bfa3d34381eb1d4f696b621cfa81d7a4ce619538e304ee73a5a3ae34dde0e75a00ff66ab56ad9a1012c4550696d03c6c3141186f51c689ec5382346ab747c74a2fdefcf4a43d2e2de568fb5e650f46721395fd3823be9699bca6569e3054894feab8aedf0a83e32b19a4a35e45a837e2ca2285e5abfbab066a4b033b3d6562cdd70d7b7334c495d27f7decc32e39f5ac6ce3cf0054ca0a442deec6cb6b883f8b127095afe5ac5e39a1807eb5931e532ae063ffd14bcdef35f08989d8d10a72def1a9f4217e3d440e84532fa217a071522deb74611b9a820a83472c3c6e145fbce1d227db7ece10750814423177461d9eecd2b791687199da69d1659268503377a4a0b0a9ef55e519bf07d46faa811cf52e1f2a71038c6b444df13454bde42e1c2234d2b0698fa9a8d9c6fd18e11262770de5048be4b2808ef5c02af7a924b79bf2083f0d969a4b28df8363b3f48c2d73192d09e2e0e169eebe7b99438dbeadc55a7aa33538181c75961acf1f31bd950d691c96fc1218864155925386e5c19b1a10830d58335e241189852b40194e550a6a056b3b9be64a12a345a34a6ecfdb834b04b405959c43b1a7608ba2a17af7b59f8c54081b9a4b0ebbca0f6d186083044485095942e16e9a4c66b3d5162c4372381f4b93bec3b367bcdea71950d450f656f5a5339bdbe77b007aed8207915dce733160872e3a3c412749d0351ff06b054acce88caa3c746a9fd40500c2e3bb88b0379a53a189f5d04ea29a771a0a143c0ae8bb0bf5b17151959ef5a42d9d91e4969a9df0a642f7a8b33b286e04d0b219df0fb12a1cd085d9aa4ec422ca6b2f28232e721e4daa99c7313b3528792c554ceedd1b2e34eea9062bcdfb1a7d18b7464caf6eced184ce55853b931a2cd07760941aaa46e8c3009ac604f0a74894b8058c7ac521692062da6bf53eb8289c65ab42950a32990afb34bf6d1a0faa7bf08c0f8a8c51674748faf51acad3d4fed9dfbdc4fb135beb5483e92fcd821897645d3914887ec3b7c957d752fa654fcf0f0b197bd65d1570bda48c1c0ef7dd7c48b53fdac3ad4898533ba9d9c97792e040df6093dd5de810c621f355afd5063993458dccfba1b4e42c18d6b2ffcaa978d570c3afab776f0f927fa767b707570763a0635566a6e8128ae6cec8bab28971dfe3ae36288e7ea32d535b23249dc08376b97f8509584b6aa56634faee8abad5203d0052b6500f8ff03402e9be6ebbb49678ec5eac0fdec94e65c6a5d40079a0389208163bf5a7b52a8abb33a6844a2e4ebee114b81034015a29e9e59fc7b0024836053573e8956916677ff3f221d19a152b1612e92337b5ddb75620499406be9ce52474309d439f93504b69c5e3c862994aa1c21ad50554a5078688f423c9a9577b1bf57d8794db4a7a850ed7265cd2cf052c8fbb7b5595c2761fbbd69b0d0d3bcce7aae5de68d07a8e3b9d7835d14ed259828da4c2fbabb2428eea8205b3f934b066e6ed4710020aabc2f21ed1b0d2c425b53603e815c5ffe224538850128b4c2f8e61a42bdc01ee51a9a7a984a2da155e61b4ed2eee909a5946ff016ddbd09b681b0b6f967c2fe85365cd530cd5b576f60b1f24783cf61ff02bb65716a4cbddc34ea2346312e004ba87bf2f600fa5c5714555c068da4f8b99d41b9231d71fd94c311f4df912da3ff39192b6b558dff57cc301ce8ca2bd95d17a949b20aeb18fb97763196039d7e9b3025c3cfd09806e51de43638928ae7087e045d6cc58c3e952ec7065384dddea3ece25659acf8cdfb405d9a0da9913606ad73f19d89212e0b47abb40a992ae67ffa1c1a8af5a2bf37ec2266f9477a5dfd3cf0eab32dfeeb9c466a9359cc3d6958abc7b55117075449266e55e21f1e704e965d8cae827c288ffd427d6b6157f78352accde45a7761d6a2bbe3075da46738aac3a12c7a0db28992b2bc3f85b189decd7fad9f8bd5b5e6ef51616d228265e630044c2440bca30c286b5903ece1455457c81408edb540be26850f57bff6d1191a9be4e71f19cfb050b2f85a88c2dd736c7242c781b549555520615822bdd686650215a4924919159b5c201894ab1e8c4da43ea1587c6249072c69fb4123ab910b2ac29636e1108f6e6724256ae58ba2aa218c0fc2ad407f276f89e6ca108e70545a0efdbd8e4a08dc57bc05e9effc4c5094790fe2925194a46eb5f5d2b75b0f28149a05ac1381f5da2b2f8d02d2ba5f4dd7c2141f93ab1b8cfd093e41487c25b37a2d4b81a59d0a563472448d3e45d1be24345d1afb2b5d044d235e3392506b2f2e41aa4bfecfd251f7c01f8989d21a77bc92b2d495a83437b14b778aa4e9811c2c8f5a6d5af12b3799015131f84f51293d867f40e38884dd09594eec4084617b014e36aa61c5c8df376175c1e2cc5c17b20afff9f504fbcffa0b78b8bf3967e75aaa2ecda07fc48563d64e9707d4a5f1e392d41847f836b0d52b08f8a337c7736ce6b83c5cca974c11f87af21d087d6ff53c90e66eed38e2d14a7ee8e9dbca4eafc97a7c4836f563563dafb9420380fdcd520a2015c5d2496b1b18832bb86bc2ecf2d97620dfdb31f437f7e6bd4d11177bbdd838d8192025465a080b99791cdc97712b472a53171810ac2f6236e3b0a8a10cf672cba5569ac554a3627255d3e70a0855e46736ca87b5aa1b4e731eed3a80c0514d8493292184e01685a99ec598e2ef2a040aa84b057685b628f03370200e27261438cded1419d035c3c326379965439958e72cec485ddc18cfbdc29c809cf7a89dc19a79c4361a9750c504032449440c8fa68bf9d30bc4cf477b48cea92a667d115f580a8731a75acf8f213cdbfe7453a077017a55be56b0c9f98beb7c444b89eae2b6e7a5111230395cf2f7888e3b6ccb91f03bebdf847292b5352b9fedacaee9e313f681467b179966cbb00a712ebccbf7c8e84e9e833b4ebc304af80116eeb7a929d5473e4853f13bb7cae326a49410a8b6d818a1519d960a33c5978b3f2f7f91e2393c83ed0fb02dee65cfec68ce0a76677969cf5ae8d0537c38cedfb857ad92ca793f27e7430d2e28efd89a33b6ee9f03b9a86e2ae76ae7e7bcd5fb7105dd8837a7ad280b0d1e30895088aaa91f93d71e14c831e8150325a1ed316743cc4583418069d1eb4b00f2e2fd315dcb57ff8b9b22e29a58b304554d32ebcb8f73f40be22d300001ae0c0a7480461e86f4cadd6401f615aa8219efe0942c3b7059ba219d59fed0448a8bd3e19f7270b008677c5fd33d08cb103a646a9d103b17243fd2d2762cebac1782c8c3134f4d15f52d28875e918b93796a6f2355cbf0c802e66145a2ac27cc0cfc4ad51ee77b731a9b00ea5cf3f71682c5f5218a6f74bfa708a2823eac34e43466ee10a3991de31a07b677a4ff579411a31cc26dcf02a5d0eb96b8881cd0f9cbe76da791ed101b88e4f90ec960ce3217bd48b316d62a6f2de0cb603da4956333665da756eb8a0608262278007334f219fc7eadb9998f5251c86d3a44809a9414ca8eec15f973829fd57be3104e6dbb89a1e92306c4d8ee5f42e75e5e141049098b45bed5401eb814d8360d85519472da0b9b07f7374edbf55890e92d531651d132883ea211d9cf2a3d47e52726ab416e3f4c54cc105121aba2c24551eb2a3054ba9e07850af6f5fc4c403ca8d096bd0175ad6b0a594bf65eb77bd345115bb70b8112ea1d024859be0d7118cfc87e1ca82168ab7f07ecf7618d782f2c17c881f7335836d8cd21531be8dc67142b360d4b7b91b5ea3c06ae5de1f3d51c122fa11d6a25160da2c1eadc0be4f36f161b3985a5445a1768f168c1dd55ce0f078d553a0c9261e763288eba3c3ffbc0f5e41e421c44a1e44ff4aa32fbb35ab9ee16188c05c86f361c5f47a91c1bd668975ccda91a01c07f9dcebf5b96bf816896a6d51be7c364164b9bbcb057c03d5558820ba798299c8a042e917984fa809f54cb058888341e46af67e4ccc542f0fb3848564c24e098f60b039ccc4f37cc30d64f5f1708ecd666fae1065a37be104c78a6327528b2d72be0620a4a05296927ad795285388a000754444175d052b7834f4999887ac5c825504c7f394fc5f497f3544c7f39666978b90ff5f377211e535a28e01ec34d1754ff691a49ef1cec12a70a04c502ee74f3d72283d6fb8fa3c1306717e9485117f59049254b9a2a2e1a59bac6a7289ef1db375ace5ac91a36757eb69f2cdd288b5467441b147f1a0ba47f05904ea1488a5be0b68724d5cf58c94cf453953d2c2a655f3b50ea037f8fe4ce96e3cf156c52387c03ce8a2ab4448ea96ba3a8685ff9bc0e54e06145a0bb20aa8529b23f0001146fbf2c0547108522b27f884de06d6538538009d18ae67c0990b38ed499015eb1349cb722c28909400d8d9fb17ffbe28804c7490c1227cb42367b783d2548e80eadd07cc7fbe3f3a75de8fd5c1ad62ad79d51c8f04d4d7c9845152984e4f38987869c1d7399f2109cf607c1f179fa45e16691762bb34f3d4aa4716a19f9c9d77c7822f1144530e12a71059cb0831d69ab6396608c8c82688ba3b6158c95ceb60ca6765c620a405836773db24da6851aa9c65c885f560d197d57e3ea697151649b1b65db8fd5018fdb7b4929620db06d87ea009bda64e958acec1ce11d9c9836e5979c570bd1c6cce5aef751ad8d105fbec3ce8310645adfbb163f8265e1bacfa2982351d35020c10608c8c09d0a240f69c8166332f14b2dc449e9464d357d3423e21cd09cf111666a2e828b093ee17616319612cf07d0bc07053ed2822e2c9a8ec4d2fa7b1fd2607d804d1602037967a39abe01e1aedfbcb0fb103e6538afc597af311d3bf88e54552f6ea317709ac0383c87a7f636e085aa05a295754d60056fd793a76f13f09be4df95d32f10f7716f30dba8c83fba09e60eb03a740ff534da98d08298dffce49cef7793c79868394351f5f3768f797b31b80e8d0f7b3637fe80c67eebc32e61bbd0f4ea181a66ec2741e416e20170783938807640c91af9179e790c741f6409acfed40f1fd2e07cef5c5c2c8dbbc963eb0f34c1ddd07fb78d86b6814946f2e399b96f73c97ab8ee333425eb37e3a2c18d179c7895da99c17a8075461af087cb3ebe78f281205a483f7c5a3253305eb26add40d1eef7cf3c2a60c5d2f668b26559494861c9d698e08d126f1d40e64fee7fa69229615bbd917c82c607f62d4a75d19d0801a49ab7d78679b46986e33a51b32dc69b31ca45066e511b78fdd9a6adb6d9a50963af08bb8f15e491320af7778ecd43aab889ed7536301f52704421fce60fa66efe609055c84c2391da53228ee6152b64e6bc44cdd413ab1d432d3ed612ec6a2bdebccc6338dfc5246b36d091d674e863719de7f10c64ebeabb623bd889da47242b4fba7b9b45386f58f3bfb578974040f5a86bb30433046a7f3dcd0ebe18b9ab1619d814a95a28cf12c35427e681d00d64d26f06908cd72eceba499a90497e7ff5c7cfdb6e421a6340c23e840efb390994627fd8cfdb4f8b37d329b62f304ff6b34747d353dbad5116c9dfa9ac1933aa36b23646964cb03a7b1b622bfc91841c37a3e0b8f68d2ba61b23bcfcdd7a1d740ef340ca77f0b0a16833255be7145a9b5bcf22cb59b116adbc91d800b8121e5e46964d809708aaf2c3eb3a890b73b0ec3e78ad2f265b33c32cd6cb1be36ade022e72576556f82f9b0c79fde840661329af3eb9f3c4b70b50774124d561f035925d5407830206aec2381dabea2ae3ddb6f247ab065757921b4e603b82905d712bfc27a3dc650548871fdde283c5b5ea8fd787a886b03b2247d1829f4b63853d8e460d8d3c2d4ee912cfa699baf7fe452fe32090793100f8ff0340fe575d4eebbfd2adea9e0e5c69ed630bd0c396c0d29de365cbb06558b20ff1ad69bcc333a1b0331cc09ea4056e20ad3549bb6bfbee7ea90da5341a184089bd77bfa39fc0a00c8f0d51b1f6f7489c698c25408c23f76c2d553f4a1f4f8b0f367a2370fc27a748ed34e45650138e94bc9be784ec8f11f540af167b510b3b83893953246cd1f0136b0e4ed5c9cd8b7c454deb7e1c620295c220078506254cf8ad4b5596dac3dd0066753e4444921688a94f36fb0ac8f888ea2826a5566e6bef807e6c940742b5b7cd61e2e372a757bb7720e681c62e33fd4fc195a9613f6eb9334d6c82291f6f14a8d024e06d868539922cf0f4d5eedd481e6e35e46d41fe20525c9ff59a483700f5e115ac9f9d0d36a4804601e07fb497225264611825094ee7b2b641abd7670ba041940e79c113d90d12f41228f668adf2fb99df65be4929614902173ba46f7147f4fa2118ea6c66aff8cbad6da6b59d48aba9cb9cf8c3346b9d1baa814d5d9536c5dd11aef0a87ea9d00dfad9aca9b451839da6d0748a1ba4facb3d96f53f10325c8ef048a3947b26209b58d020cb53ac221158f262176379aa4984a96823026429da92e2cd2c9835961479fed4fc5e47e9273392f46c8c611896fc48f2e17fa3c4667a789a5f2f26e8754eb5c4fba82cc03d0734f1f5003e66c45b524e05c379a787b1f0e243c6295e7714965e369f387089d7e67fe6986bd42d4db0db230c6b5461dc64d7ce270ff9bb3c1c659bc6d77f9c29ff5e3fcf6be9d7a420f76eb7c56f594b68e63b847be289f2a849b195993f6f0ba2052e129c3ff8ef882497e3408f677d43794edd70b10bcaec5c7007f1d64f8784ee74227e2c88f83eddf1b471219fdf98c7c94786598b926502d13bb1c8a23d53263b9b5a7a3337692e1c1ea727e67a0b08473ee2b3fe452140db2998cb4fd714a22388b75abb8ca744355e7328e1f18978fca36da2a81cc1801ee96173ed452960acfab6d7859ecdc99f1071dea78eb8336d5804ade71660d05fd497d006d007eed9b652fb0c20ca57d527566d4648d2a2487ab77486352b3e51ae529f9d7d38939c52e0d483ec082a48f3ccf1f18959c489728cd00816e1cc08cfe82c0b6b2d00894b9817c187534500c453a2f0625540c4c67667ca10eb6fa734bb598ef9c7adaf0e01335714cd98839cd20120c146c0b4a626d3c97ae428b0d211fa3e64c352c6d63547db55a7dfbde51edd3bf5cecec4fc03c5accfba6138a6586474b37542ced4302dece55b8354a65f3308a5958c153a17a39e81ff4e1205d9622f284b96b16c7dba8ea4c61a264e6a154b5c6e44aeb734cdf72b2f1b494d718815241f85936d5b8e78b761a44976720f525aec4a5c9fbb7484b825ebe0e98a62452a5a79976c77d7c7c0d687aba0a6fc654140813c607bd536ca7780efb7b41969a3bd8a7da32b3a50f099674310338c3163cd71ff3053daf6d99036815a32af8b9585c0817c52d9b445f279f0384c3064cf3d1b828329595610a1bda0881f9e4542df2e65e31c0a8a3f35484a5a2c938b9166f1c4bd7b75d42895b285916def5252fa32cdff1fa378652db6576228403787fc7e1d2ab797376aa9e80bfd1b62c94c0d98235ce7ee13a4c94a862a25cb9dcb0c49328aa529932349646995c0e4089fd2ae10b8ae279ac111bc3c3eec9610c66ce8a8fafc79910e64e00e63230e28b03b4bb473fe16272bbe176312bbea965f259033789394b81040089940183f7ef76c813392d7e92600ca28b77ddcccddec16f14ca310f2362ccdf4448e52105f642e53a2dbdcd9b5cb1540b5cccc565792f4bbd38e744c926a6c68c8c5c37906ba9012fec26c435a3c5054cbb2e93314fce425c9545679b94aca443dfa182ddad6ce6c7292b9ccf809598ab932a81def3b4b7c2aa16c07cbf52cf7713899f0a952ba12ba77d36a601f6054eb5d89fae4a3621de99dce6a83f356737e71036d33fd296aa38e6f22e985350383f1648a0011b44e160d463bd88ba9216efa01f56111405621c8fb128eead2ab4e29d994c0556141e2d984af346b27c3691c8ff748431a6b843f1bd2f8474fcbfce4abb3ebdef78b81d2f80ae7ce9da72cae35e5f1da8465423f810632b9d2cf9d0d3472279e601a02405726c09b3b93df0e7ae5085c43c6defeb30e9eb04da07b0a4423a6eacfb051066955bbce1912a1b5921c39f98c6acad2fb6344b1d7a7dfd535b18d5d691fe8b4fcde4e9ea471ef60b60141306e254dae49d995c90758e61858a9e90fe6cdf2c0e3fe5f4cc0a3a50929944f6b2a419d594f58753cc1767232cd6713240fa7a44175fa25ffe212cbffab5322b28d63419f063ecbfa750e13cd6adc75168645149086347c8ae3230e4997e633020753f72b24368e2f2b7926b36fd4959e8561d7d82b30828f055a0502ead4983ec1b030f7883f1d4ec193761e73a90a0456380e11c5e09ca3d3e12330d8cffc9c7f0f569656e524601fd3ffc64262cbda767176fa03c38b3f6aa9071bcfaaf932b55ebc27769e67dfd0e78002116e2da3a0483d7a1d962d43a4a821afee88354a9d2c7eaa45b909d0c8cec43181249f43adddfb1abf03769b53e3ad9d9bc950ca35fb8ac5d9e2ed37c6dcf13c960029b6bdd0a94f092b6aa6e21565e39569a196c62e6ccd1eb329ca4888a587e549ecb6cde4bf121093502691e78c6a7d4f136516a7b46c6b5d90a5b313dbde5e17e1da6e4974febda1a8a498c7cf6cabbc4509f81a89cccf16e46026bb5291c7a1648156e4df49098b170379656f3920ac9700731e9ca46fd3dcd2128b1803d2ca33fa2805db26996cecf2b66fb2b8261d86eb6138152594588c16a6a163df822ab998fa0c0bf07cbf5fde069d44b1b10780df521d23c81caf63deb235f0c9de00f14cfea9e3fc79a492c58dedcdf4284668e0a9e428951b9ec05d3d45d978642c55a9eee64f685dc9ce05fbfcaa085c44d0ce9b0f8951bf6f704150b34e27313d3a9c45cf0053b96f72417b075fe041e744dc65dc762bd3b5b69ebf9ea86b312fb6638b27624f0f3bd8364f38d88011440d0158833c519bf28b67ed745ce43ab02e2b6a6c83c6cba726db430627c94b11f86aee8564d35209166e1085e6238a29b7cbf802f67a90e9220f2b9241f62e266627f279cfa22913bebe4de9642d5e2ad7599ecf70415193d7ef1d525535190973c7e363e34bb3d3d6da960f55e6fabba33ca8ee921907481f589a8c32961e5e524d69209c711e6d31dd1190a043954c6000c0ff20cd47a77ba300da5a6dd903069f82631cbae09c51b8768dee920e5b5d84245db8a2c5275d5d9d908e33a0bbcab7b4e0b25ae7285629cc17db205e4073a04af0cc110c76cd163e1b6e1efd023de9c40e1d08a693977da2e5596311e42fbd0584887332c3b10263d7810de089f5f40ce08ea8c60a346887cac17c8835aa1b550c87d20f8018030faad4b88438082d80fc3900eee8ebc217daa55f5e10e3e0ed629b4c2ce2ed14064f549944b8d02e5dd9fc1c681f01f58c9acc798e023885a24612cf6b373d07aec0e52f93bf981d9e8d0f8567a01b78128d59687b1800cd8fc422342f6b33261d41109df1a477305256a10f54dcb98007d8117c08031c96cb882e171446f4899101ce43c0310748f433b4dba289616216d8e078e079e789e479bca3d569ce2a2192e7a8f321175916898413b9568a6cb12df440f28864c23dec829e55e78597d10d7150a15a6c41d506daf4b06ff0aefcb49b582cd76ce8b2c1266d98c1cad262d447a521f5a0702348e0b7ffb68e272935ec94e4675286f062b9b3e8b9c1ca0a5e38264ce470708d17ea3fb385d1527e89bba41557546cafca9eeb3af1e5ae337ebfa9f7db8388d38a2c498409dd6b4ecb7b2ff29baeeefbca4113052a573b63faff7f0b0d7a5b77c0d2f72df9fac6455fee9538ebf848e58b0da1d7b699a73c84626cac61200b4b72540ca35f4df79f69534b6e17c47dbab2ded80ea32be21dd7ea99ba707d90d3d9a601be2516a82094aecbf3702b70733503da76d933112df970e747d9644d74c72ef4a4b48ca32aa6308e71c50005c3a676943c31cbe819dbb8b4a439955be2c99c7afb8277017aaf0e49d0fb63bfa5ecc3ffbf7ffe89e4ec3ecd52c5a3b7642339600668958f2dcab8c4e27409021b8b26619d48903acefd149bb44ae943e978db871d3c302345c030e2787a8424ca9edece2da606b46975b777994c0dc230eff7b9c104fdc9b16f00348fee3e1a078ef3f202a8a77e9cc6dd93f1caaa0778ea74b841050f3d60750091d575d31e333bda51aa9f281a851ad7df656e0ca254d2fdff3a2d5040233c06911f51be1e4ec8caf2c337aebaf45d539b261225279c6daaecdd80fd400be9d01d6573200feb616da01a37bb4e55eddc2502b878f463c2e3c4d249ef3da94617f0758406a37ae81c8da29af9cfbcbc70812758054b1b8b91f982a478bd87657dd2e2439c89a35e374972da5e183a9f24d71b27eaca05e3d4f0d82a10274e31b87d5a91a6220aa820864cbc9eceb58335ad35f65da0ab3bfbc377b3cda404c0599f4cd2ea6b432fdc251add0d438ea99fd4a54efda4ec119a3ae4e98ba35b62451b0a1f34558000e8a8bb5c434becac6bb1b860dbae874ed7b19099e30c1de3d664afd0383b77035107777bff890855ee7202eb70306633a78dfcb4a5f0bfb7ea48b6c02ae02529aca8b151c3bde1df8c47bbbd9901d3fdfd7e22f9e4b4ace27c2985d5a02cb7b55f11499a68cf3b1a2c55cf5caaee1d9c364863f1e31d11bdf42c1882bcf2528a86b290dbb663577fc0b161484177566edee71d27980d3159dd80fb74886965e3575132c00066a04e2e5693287f07747387e65769c522af936571c79fdc28c04e1c37af30b709891e0510fb90150a835d647d87f6f33ef6eae9eed09bb93d998fc06457387e70fef7c1e368ef2ecd9f41e1c24afc458910b15f292686a3dee455b260654d65963b2934c2984792174a72de58983aab1323e3bf64704db292a5497c94c095fc4c69251de4ed2648bb4ce0ee474d176cbd697806ec0877ce72d53628d937bbe41e6ae6c487f943550a37f1b49f280fc3e4cf87699caf58f415906eeb3b687740de384836b6bbb5ab1d0f8c72a2e54faa93568ee788a945c7e1fd12b4219f675485334edec392c55bc84df69621e796eb919f6fa9c3237d300772a89f10876000f8ff0340aea5daebbb49ae7a840ca871f9c957534a4168153346424771f3fba69580dc333304c67bd8111ac1fa550d34d285d9710ab1baba5ad2a67071ce21241423346406d490489a5da700b86d885a5d6fff4e716216490846149fa284ff7d60d884760d754b1388259fb8870d4b1a29f8bcdd3ae1dfdb1fc6ec0aac9743d0b557bfd37e57bb168b6af7e7c2aa14ab88859ccc3d3c2c33b87ea11fff473392beb4aca86bceae7fef6f4f3bc2d60e8ac4da0b200fe568fb2b42cad4389a529ac8815878de668237f6f456c4389f1d9b0612c6ff3f437d065465efb767646529a4bbf425d030547000888178993b12e3e1bb0082d3d5071c986af4ccca0e8887fbdaa93d0449d9f765f8045b67259902331909854992b98b244e2b8404912a7600031472bcdaef14d8631e6e6ca32016e8ef28d887a05c7a651333bc0791be619611da3c38c86de37b110c4999e39bea44e4778c4a60a9fb2a876de52bc61fabe18412700b70cab35288dd4e2bf174d500d5a8439346d7ea0c4bb2cfc24c4ffc0b92a11f0d2db83e0b967ae910a51859eddf1d1bfbbed375657cdfb2a0e246b80c22637c4106513a3ecb89530bfe0c01d2343a0018160aa31a4987af6c6e511d54bf85b23d7a38b5b954d21ae551159d01f4d2a4b04a87cc6c298b5b13086e038c1c4f880df911439b7e82b7f267e94058d6ea1ee11b04273cf6ff759303f62b36cd5add63652fe2b946bfcc73ef54eb783bd33256bc986796e0944d1261ea7f2556085631774fba9e232c0b1a465c49e5d8442d1a7bfbe4351c55d1992495f6ab0334b94be2c305f94e7804e2caabe0b4d0774861ba8012771e2f434c73d4e579b298e778423f069bc61e13d3aa485c4fa3e5782818a2e1440450a6f6f779fd4657810e5fa1196f264db0681697c59774ee2659a4dbba9c6651a8d40f2dc6fd4b29cec9f7913931e60790e19117a16c4bc5554ddb9c04eb7444510d8f1c3b2917eb74934b6cc3b9f88f2b7961df066f6f2d83f59d353538ac02a9fdd6ec062172cf78deaca1d82d95b41027605b4c8aa1f0bf4599168328221d7dcb49d394699dfdff99c46d5a99e762e9f6c5ef4b2a59862d30fb6a049478a8c01ad22127924121efeb34163642dc4bb9a32855533a1f701a0910fe4619553cb9e58455f90a6bcb120a129716232beeeca96e131021ca6e0d02fafb955e3919d41cec00bcd64003edbe44d93e17781e05b603517d064b7e5358f6d93f4282df28b578a82aaddadf45463f9ec8b9058317314b57c135303b6936d5f688170014fc8338993f6e6c8c1c162cefa0353f73edfdf9e84e6f200ff5e6edef48cf7329c56b71ea7b26e57dc06132270575cb21b53f9533246ba034f6a6d443668221875e35eede91e29a5c24801d51d3c6b815283a34e293288cd971666a294ae9b726428956245cca42d0a0e9f9c75eb6db078b4092d8f85dd8e2e89973d58214c4918bc9e049cb4dd4270b0c1dfb6882ca3feafe5390db446d529ee3e73e3148eebf58f09f7c2d12ce722fec7891c0bef37e42c280502487e1bf49847fb9e85da57d710a672e8a66a307b46fcbe4310e1616824554e510c12a14130e474b7472ee8a8e6de41f3ac3ae4fe9fc4d89c03187bb63eb30d79a5b5aa04e4a95fc2a3d70e4e4695ac3a03c725ad339f2234449885ce895d47847f7385eda108779d4ab54ae4e0f4ee65a6120f6ab635f6b931ac17d5bfd5d22eef4e7a457e97895b29ccd4f6d7f6e94892a09424f8d42ac2e9de7381ca2276921110c31e7ab9b521d9db1c19abc970a86911df345c196452114cfa65b766c81aece3a666a5c36ad772071afc666be26fb28d65127093d07be6dfc97b1efd47439e5bbe58bd7755afb6a985a2e592ee577d645085c7ce476f0b2b8af361cd850aabf1b3a5002d3ffb204786ac3454c494c44651130f146045dc728fc7ee237b58919ed4cc600ceeeaac3e843ab95c63c747eeab69f6e9e13e2babecf6a9b8b48d57891f92e4a0ed05ac28de14d2261f23858fa98897ae96b6ef1fc0f6e43baecab33a75fec7b1422fccb08891f4c5e8da285a510ff319a3ecc25ecc4f134667cf0835338e8a045ec010a54fea79cec5d8870ebb3a65f76e607838f8d960bc079f972cfe8119c5c6939a15b5482d6a275ef53f6eb5cff5ea8f8a8539f4b50b62357d4b3f0bf407d7e90e2a01d8c21b0dc2f4e185afdc0dee97f8b2ed8df25dd152d7dd00d89887ad868d2cc873c28ac9791569bef1efb3e842b62490efacf989c347953eebd937a6a4d6f67f9ca064f393b3eb1b3f515fbfc2ccf8e4fecb273a7b382bb0ac2dc5202f67e556d0cba63eb2a1d627053c331f501a8ba63e1280c5f2dfe7f95b4d46dabe5bfaff13099c48357b3631b27135f5a1a1910a59796f539d72e867917cd454d12ef726dd7fa2f72c8e3c9a4a4be8a2b498738e8e145627b0e11ac55420a102685e15d960f8db2dd70f3a71a5887d23182745baf24e08eb84cbf0a09c8e362c2d3bc42ba8ac0d34f4f495c395af8264740c3991a495124cbff220c2afd7e6d5a9b49f40428bea72ab04e61f2e7a66c8b5bde447e2fa5d93c3a43f8c5f2ba799743a224222880cb7af2b91c31fda5edb87bde95a7948a4c6ca0926e27a5ef856c0cf3fd24380e7454d0d5ca8b277849eb8b89a894ead48fa22b04bdf037bffb328363fb9109d937aee4d036b1ccb98be6c4987e1f5c5ccda61619e4df7e4a84dcf6c6b45bcb4fb7179b93eda2f8defb8218faf4871f764d0978cfb638ce376e1ab86fd2d46f830752013b6ee692cc704bc26e5f341dcb7e89d8d513efb629665dd153f34a6025a94d34f64f58f1eeb1f2bc48b68c0ed143df3477dcee3c9d1803e0cc1fde7b1e51b5c17d139346e94588e565f19f5647d2c76e93c59f1fa0851ef26793c828129eacd3fe0b3add37d12c313857eb2dcda920abb55ff06703a36c89d47f2647ead1a2b422a66f6a561673a136f9e9165080638998a0b0607875da00e0505223f9e6c63a1cb3e8f98c166979147cd829a46416b4d828430d458c44accce8c013f0d689008452b15dc6808ac445f0b466fbeff108b519a592601ddc866333e8a44f1d979866d233f6642e5ec8db9e7558f67cc100d86f1ef9f959038c8146285a1a86a20960cfb91f9c1fa6b32c5b5af68a4fe08c76073eb891c3de331198d159729075150c13e104e4360096c97f5b4cb3a0b47c583d4ebaa954077bc1bd54c248581c4472082421b463c93f5a23152b90b4b01174b7d91f6805cd03400ebdb86e77cabffadef523503943f2a546f64d7a8c1ad3b1ea2478a1ff294139977e519b2e366156c42d4c286d81ed930d0dbde973b3a4f51d9b2f3c2bc6293414165f6b681cd6c8859f0bfa766cb587fa2a977ed175d85adf6de0fb2be252fe97fc5114deea5ce2f26496b359300b16447fbe525e6968ac1c9b74363ff38cd033972a15322bc23906b7c884e66338262e7e1e88dfadf92890382d5df9adcc17838b977426d6d120cfe356682dab037096118a04469b503e43dfd08ea762358a29345499918cd77b95b0044eddebed7a36d86148fd2178ac407b89ddb66a1d6a185dfa257ab2b21df6b392a7b50a12d609e6af0f72dbf9e222716f7a0d627a2e019588fe8946c5c5568108f6503e51c058dcc52df8e4e3132db8adfeeb162002317c21cb7885cf998c9eb925429fcfd788ef06463e5c15f8a5848089b699b53c4c4739830f4b148f5ae8be8a3347294afcd66ba431703a0848680e7baa1d7168e24ab379a106ceb000d69b5f2fd56e922994875e3b8f451ec49203a11c3e12961fa3e1bda23d59846d0605eb59db35459192bde0fe5e36e6fab8f99b6ebb2ecf090a1bda2b46630246e44909a774576c7aee662c4fe7250782ba88ad293465b118c77e48a26e71146d501571cd137d01ef8fb38b13c55b8ad43833406b07353a506a119c27a08c73473e3c7d99e781c035b4bbf0cf9760ab4d6f2f728e0000d561c42b8da50d091e813e5d01e8b05306d3dd3a12953afa32b8d2f9fa200255ff6effac54e11d4ee089beec67cc888a8dbe68bc8d72413727894660e1b863b38d6b93dc5a9bbfda1896c7a0737b07e7a8c85dff4d4525db1b76a6676460c84c0e76528f02a4f46b9cc800a9ff1a68944ef229bd3dbf445f72156c7c72c7063b3c96777ce19d1d331a4a8505c62caa5e01969da73dd5b397de45b6a9dcafe3b470820178464e79d67fddc5e9a8bfee9779a81e6dc97e7d27bf2ee6ad1599cd5bd7d0dba0cd415d3b3f315fb54ee0e48945a68ee9ca9b3d94f0849779dc6dc9846a65ed39a952db88796a028ca6106cf0ba0eae8807c23948411478721680096e2ea094b3ba36f6e806cea09eaaba742695c4cfef5a6ce1ef8bfe02de94697b81e7c32fec1d878e8799c4ede703a6da8a9aba7354b0706671a17a4580376da4eaff95fb6e46be9cabb4b3ed602acbef28aa63c33ab8c32b7e84f69126e28b88dc461757938c4e65ecd259dc1b5e758352e813199bb9dec08966472827de3b9b333f5bc629d37edfda6d4fc17e90b7e3dcfa4d3fca30472da7bd6e87ea1b3a41673dc20e73cb934ef65cbedc8c2c796a500c97fd4a70693daa691f31a0ab26812b6b771bb0c835baf0aa3516d5a706875823998f58490fcac94ef7a4482597da10451437984d52b85d8b6b8809c5654016e846133aafbb46679d84532c485056471adf38b704280160268d4d3cf062a5da52a7ce381ad7e8462ee27226e4bc89818bc3e471d28e414dc5582693f6035fd88fd682b7d04907cd061e8b32459e3856a82d154ceb625800392840dee8de53554170b7fab5d7d1c46299a0d85ac9b83ef3df62e8dc7c1aa05bfe6ee43a9a482e034f868b584a159e845a230e77166be561df364d47a902a1381c329d1f13ed6c639df59ffffb54bc02b9fa3dd42a91950040c61414571bb2d6c6a325a839956655f0527883cd4103a153c00b0d9c1edc083294225b9dc5fb56a910c40b491a25928f9cf02cc009c713508e3176a81a31823f7e918d6e89d0d2b9bb70390635a0cec9eb9b387743df5c26b80641907bb85637d2a16658cdbd45f51df6f3e4b2b5b545562c66c638c02d1a600d0c912a74c62eef38e2d16be4fd1a7c8247e405fa71db2a0e31581411182715534468e136125ba19578396f2fc18cf232468c88f758e9a5abf15cbd483b1e4d2e5f00027650be274074219eedcd601894c0b9676016bc8872b1ff2d46c6b8a075da47b89be77989e738c5a0c0c2b15ae9c6cf43b545cfebc1693fdc0015accc63b8081a3a520810c9c1fd3e2048f78101d7ab2bf0739392776b2523bc6decea5c2dab1214e71c61e4ce8e22378453cca7ac9ac7973dc7faaf2755e7bf58f6ff983f569c89fbe5c426ba4333d39a91f70b04210bb524a256dfd041becbe3983600f8ff0340fedf4ffbbe7eefdb6ae68802f6ed664a755e2b999c1d1432b241ae8b189f876bffe94b56a3aa3168e440c492d857029e24b3f8e088d09548d6d9b2d075f227ff5e89e4f5541d0a63ba0c976def527a8a3410b106f612d894774d5fb6108ef3d46f83288815c40cdd20adb24a6b7fc77e5cbd767788db7fd35577408c2c91dc3d4fbcf5d0a298c2412a1b6d312bbbe66e4828270f57d9e354b6cdcc3c804a8f1a08cc667a71955a3ca3173df8b782bf1b83f1e159f2ac143430ae6f1615c73528de2ff37d3d46cdfa5455dd8e56478e62cb36f49d44366df2bb10e7d438d98189e381b7f47b3c9126e483e7928dfa8e05dd315f6fee8ca011697c0a51c63bf02beb3e8c4d721020350bc505c18081a34bc395ebfb983a61944c73ce5305adc00f1f2a43685cbb77145db8a92660aaacc6c7a1d3774e0d528ec03660a7d88b4c7644ab2465bad74efd4f167a44921adf689741a8d2de6f10c29a7e6138d0e6395c7c7275b8f1749faf23a8807a86f47913051c4f145a3d7a06d7fe55c53aecfb20ff8663a7b00facbcad18348ab474ab8e4514faa64ff2e8362a27ae4e4273e6614697c54f1b0234523938d19c89d846d19ca5caa28a9d586cc37812b518888fb8ac8ada12be5918a2e4cc200db5b19ebbfd790ac4b749473123258778421080d78db24b59577a82efd5089c72360849d210a10de75b13765e0b7e21e5c5cdc2876fd43812a165954de0e5d65463093dbe5ef3fc5ba8eefe08e35255d5fc834d94af520bbe3c8e28ba8b9dd578d6dd965faa1522c6df198253d815105dc6743321defac14b496ea479eca593611ca2c29d47b4792075919c99977ddeb333c38d9f0bd22876c83d3bd3cb3a7f1fd482e415049a7d484711c1c32e625199f5569f64ba5349f1dd7b14d2f9417ccca7c78f384fe4661fe76bb6da928b37af4965db26b0ec7249be53d8d8eab1579825b909556dc931ddfb618bd78006831c40497682d351cb618488cb4ffcdfecdd1d8a062fe1e1a1a1cbd55f0813ee0ac9d402135c0a92d97ca0ac1b6baec283fc4b3769b3720a55f0082d36030cb4a7902ddc26b2af7718212117819d0ac6273526186a09bb28be7e7d0b465839756254a1742886a819aec89eaf0251c8c0894592e4b8189e6868864544eac41aecf8a30af09440485d57103831660c83783955456a854c384c492bcc239e250a6c570f40246f8a5887000b4e4b099afc1011dbfa0e59988e0225995ce49b0f4704835fa7751aa82c539f30d9833959004c1e601e9ddb1cef07413f889821218eb58710e473c06f00ed135b88bc8b62ebefb5a8a2563d70d7f1b2f91d28592dc5a7634c8f19aa0f1e085b4b0db104e7e0d5f39abd2f51b58e82a36b17ccb9cfa8ec5d3e1d4e3c8d682555462a98d424d68bdb770e5a12233432dfad3c28cf168d5ac16617dfb207ac1a707fa4de170045fd45e0fbfcf66180ce59a2c4087f4a01fa1859e01ae765af56b2b7e6c042e7d301008bba2154b8ca23ef1cb3954d45cb420e37e08cf197c4c330e50f194b5d105d265aa2d82411c002d6662c26a3ad686080a192e072ec9b1ea59c013ff6e45f368fd7769d26493f14a8daee787dc480320389738f1fe46a6a2b22c809491c0311670d3312e238642de560e730ffb9ca6d9866d9913a906e8e24ac4bb402a8c50c33a8d922d361641cb8686c970b7c48074f3fb40af33efd209725ea7fcfedde2805c561bc523d8578c125db2408f155a38ec9edb2c314e02bfd1ae15fc4230ca859183c549c37485a99dda43c4438c52da5d9ead3a981034681022fddc9b921bb19c310b9fd9f1f3d746eeeb430ad8c6a16f64c0fe5d97757955070ec1335e9bcc6c124e2a2f902272fa8b26b70b4c2a4e0c2ea464ada66033aa976878ecde46c5e6ec28ff3975b05a709ca203eb8415bd82190497e171c15f1bdf202fe04a6e26bffae4784f7c18670ce671335c3516b43588eeb4a208cc0c52109a61989e31b012facc273d0d4161b866ab52215d8cce8cc4ebe62ca992568fdc5b15796c1d9c8542192535aa95fe3267922a5db6e3ba1b13e9653df86539c8c0749062f5d2682db414b56aa0df661130407a52439a05b8493bebc452589e71270fefc3b20c003a4c5d1202ee8a0fb8b866d92538eb025c8ef5f0450cb451f74bd0f5eea8360be87001669b83db0a662c71839b348fee8775874c8177d4c2e396dfb717be84c6d9ee8b4b3f90227beb7329456b6a1430b9b18b6e42fb83d0aa72fd4a91adff5d14acd4c0fcd610aa431a5135d9efcee4d0897efde1c9460b3e1347069faa3214d2b280b14245bb88618faea186c07b2821279e9699613cd8ac40c70637bac111e319c6d50edaccab715d39cad06872b3017f0d0f1214646202e26c4abc37cd47a50ebc0ee72a43e5a4bc409654ef8e9163c1a1e5d03e36e78340de25ae2f0fe466da1c3355609ebf409b4d8173a830aaa3d2a457d77abbc50ffaaf88d1e94f7b89b5185c2193837849fa5e93c8311962414d4aaaa0b8d26e1a921a05675b5d7aa298f4ad4ccaa9f19f3a5a18e693aed43fdc3bce9ab2ee9f3375ba9ab2cf6388e2b8926fcf4e396677f58ba2185a48ef0effd105af81bceab2a23a37b526a58b4915050cf851c8b2da6307e8427747b0af4b21bac5a08ddb4fe3ddf0360394a1017c452823d3deda87df4644f7e00b0f34cee34fd6d1aa06f5eb5fa6ae7625c5be10429b6668c0491b528bfb09e7c253a7593c6c257dd408a36da49c48a5002cf6cf7203ad56f09a26f7d24a306b4da6811d753df3fe841bc7b931c7365b1d5adf3ab99cd515815334ec98558278207f21e250ee401dfd505ce6ae961e1bd3c61d4e32888248e5f3a2fa327454bfe37e804ac05b11bc2a9df4a80e72929c94914b6e3f0b71abacda913266375cc17185052db7820eee15d0f0f0db435b4fe80fc32b98c5f10cc8f6247dc5cd06d4362d246f46ac6ffe3ae08ce316edbcb2f4bcc91e752115858d05c9e3b3d896f008fd2ab1dfb9fae17ee05a574d6334166993786dc8ecda0099a43655ab776799689bb67417734190ac2428575c66e26b06bc404d6b914c6ed69dd0be349bcd960135d3f6c1474570ddb0c9c40b9a75766541518ac4206d05840e1e795dc994220763dedff1c7296a630d93a1872ac5c9ee58b2a482022aa90dc2acc403c4fbcff3487a87f7832c621b322c474363116b3e7a50a19b3846920e36c2a169852857d6ef98ab3a2bc20a26ad1aa8482260c2805083182d50d563da2a443d440cc8d8740d3a3d6c33abb61e4e1420969f23064dcc3670500c22283aa547e40475fa02501b082a74b002725d2bbb50f690fbb3a64136ede0771a4120d36a1a5bf89a67ef2dc34ccf50c67440c5ee9cd93ce6504b79ce7a0e5774e685f61be18c8f5bf74da058a78040d4f11a1ae883ba8ab57b47fdcdd237ab8d06240eba96ca0ba7fa7452ffff3c648687a1a2fe97121163df99292e95ba787a55e0b67073b89ddb40f8a422378037118d725884f93be9b9328a65b56b8c7ccb14ca4350cef86ee0410dd8992d07c9f9f2d60c4645de195cf084bec16dfa5f60cc60d725fb46b1bfbf27b3bd39d8b2beefe6fbbf050f4719ab8d5fe4d9c3b9157cefdc3f5ff28d1a11ba625d4f3afa231f6684fbb0062ed2a7db39992bb7f0710a13e7e4db5e17f354513eef50aef7f61213fa77a5d3680f98a19b50cb4790a06453d4ba40a4357431faa7a0b458b9dc0a2756ff19bac1aa488ec975a6c8ce652e1026ea19487892488719905af7a2c132977d749cd4ba88a8b227b43cf3dc0eb662c814e5cf7857733bc914ea632c0d77361f681a79bfcc57c25166af303a43f28d88ae955f901a908eaef27e8f9e393986dc22e5d33f2c1fe7e267c758c34a8c11574242e0dc6687e0bcb8fb424e6cb98c1ab77985715e7bca56fac2d10a070ec117bd8eff282a9aea619f157627952662081287fa5fbebdb3ecc3c858004f6ad9d70cd65f54cd26a59af3b072d9a117557cc5808597044d6a3d3063e055f1335945b4e4d117c7893ffd0cad9b5dac64c4d578e18ae9f95b2c8b284475af5e7f5366e45acae34afca2ce148a12eb89a5500c4237b20b8dc5c920416f6331744340d90f04271eee33fe39a9c11773756072cab74832904f2c5199fea9617e53513250b932badef8f1484220a3f537aad3b8c158d78d769aa37769a71829db5a6f5890d30b3f58f6679a0545fb729889af9e511dc89bccacacc1b8116de23da2896b2b1dd3150c6d5f564ab8dcc0f68d1e22f66e2f9461cb493481fee7ae189a7002d25c1273d0d59a340e2ac06da223abba7458aced98c9d9c0ea66b1cbec7ca4158891317cddf1b0a08829991ad8c9603056df1ba69f3aa7570788db587bc662d89a4b8272d59129e3a8900980a9221b522f9f9aadae99597dc7a7c3a3715fe362853dd1fefbb99df894515274654ca771dd79741188d56e878587dfff785212ccb2cf237252eb9bea55966b3d9cdbf41b3cfe5024b46a62b4c726656dbb56a68cda91700969e989dde4158d21eed7dce9ad5f7d888ef11cc9946168745fbe334c018c763896ed8524ddabc2a60998b2f3fc24b04355b2c6dd780519814e086d6056964234eb27e1ce5706e39fc96c503d0ec9566e144b7f0d3dd8f19ec9a7ccfa5cb07cc0a9c1a9a1b962e661e73dbe4b8303d8e36ff030c4fdf7ac788b104695e9ce44799f44503bd5c8c09af8883144a55ad8000e3bc8b24fcc8268885856f83788fb09d249600e6c1b1f160ca7616b1633fa59b47a394a576996d541265412ab623a79513326d3b07b601765a52b92c2504beb067df07335392dcaa54c3b15996d9d04eb9f1cdc5950814188852c28616e5499181e1f30740dd8d400d11db1a3c345541773290658d14dbaeb3dd266037139ab0b41d30d316ffb5a5094b37ad4295394ea0917c285dbc287152b288244d891b7e83cfefe781e03c06e65c61b0625a258ba2136be08d644897f4169c985ed8d07629094f74f42007c81622cf487177a0fdd5d3586977eb028daa67b8c205683c672ebca2ee88a051a4d81214060b52ec8c24bd2fe2384769417613787be0d0e8d637781c4cc7ba9e9a17d261f0a814a535b4488f360058fe0040367536adba3d7280d722ae1850886c17fffdf831d7eb36a4967b77879835f1cc574424315aa446729869a211099d559deace696f0714a863c0565d8b341c42d8bb2a8d95431bb4f48eafd9b1eb70e4717b182c53e23f2174503e2ee96070784264251c7a513b7e73c798e9ffbb33d9c403c5c3ac3b030f63e9d4d11a455e3beb99dba2543cdc81c8599f82697ff6c2f47f3b4b294dbfdf40758dbca2a1c3ca80ef3375e31727da6ef1bc999e0eb8311078cf10ced5136db7b03b00d41ff67c55d2037f7699255112705395c333bf7c4d9c0801e9efc68d8123dd4cf94a3aa612df53d0eadb2fc81950481d9c90321740fcf1e5c54d77f2a0cbae74f87419ad807dbaad83773be999dfddf9d7ba0b60f2770eb5913ecf41669ec1c03e4d01f466050e68f19225dc46562fa4bbcb3e66c5d5eae73e15c7fa338321281f6bece1863d75a846a2c43523809972e6762fcde1fac6bb337f30c0777758b0bb3ce18021fae6a74401365f5c5929d8942ba76d1ef31cb3a491d9a60d007bb167fcb44e737b976be8f15d96f9561a055c4d9885a52c1890af88b1c1ca964450bea689407223b4df1ce7ec7d015cb82f90a2c581d24cc6f13d39899d20b5dfc9f3a12291322a814c2800c39c44e8bc22417ab046f9fec02af8b798d21038e39568139c644b6429d37495a7714d8365188e4f6f8594d9c98a254e77a15cd6b1f4543b0f323667b96375d019c7742a982ce6a6ad5284f8a9203dd1e1d12ba85b657d3dc49bb661eafaefa13ecaf5026873254151d6abc996f7aec15b847dac35f761b7c800464c54abf4510d59cf8201ba26bc88f9fa2e72630459005ef4632503b5c211fa0255dd7a63afe7f33f0708dce375c0236c3ac9df0b82eb018432ad5c7b3dfddb202dc5a974f5f14c339c4be6cf410bb73d9fab1982771487b9407f0823346884431a32809e90a8248e5725d16029b4e39d7e1f8b2a299f55baa7d0846ee491ac84abf738cc4bdde97bb39b7150ab8f6988a57979f3b9e055cce867be8ed62d963428c4d1950b77d834c37f9fa7fb7a038e41b1cb1aff48fc6875a5ed5e3662d7c462d6440dedc0b5fb403375cbe1b5deabda06aa86dff12cf7249c942ef6788aee1bf0ed6292ddfdcaad173ee6e987f386cbff122bd910e856238b415819bafe1b03" + "837d3f8c484dea01d0081d3ee7edff97aa5fabed3d9824ff06209220459a13250759d3a42dc74eeaa37e443d026f58a8c2af572005ff0e98b81e4e0a8bb5378b5eede03fbfd44fbe152ddb00982538adc18f16a63440cf7df78119cd80916430630b48b681ecb491b4458e7cdf1b491ee937d969b6b769fbff5d5bebd83fc53fa534c2ed9f74542170d9ed6c13409285e9368656df72b5c5823ae0e4b3e0aa999697565f997393bd2009408e6415995237e70fa0340d9eb20c7c833f24862225eb5ffc908849d689f39d06760ff7035c1ae6b6e6d0b06645d688c640369bcd77d9059b7fb57c5aef03739226755755e2aac73d95fc98d4656f7da71f2e7bc9dcbeb9787be94d765f9fa489a386771d58639f57a0c02b319bdfe00cb8d807e667499a5c42fa176693aca7cbf9d5aa983c9fccd3c45cdcff03b651bc4bd64982fbbbd88e7e0651f8e7d597973e5fbccb62e7d88ce12f84c61bb6d8f578eb3b45dd7c7437ae57f96343f6b998e2bc972d18ec7d405953741e773f28c95a715548aedc8029ac247f4416bbe010866b495c1562ab1141ea176305c17464b3c61b864f3dd3b7f103445f55961561b5368b8b9d443972f61eba8fa3b9525537d505361887ff33cced43380eff5fe3148295d5b1ca16c9e6b77e1b7cd346cdf15a1c0b2af32804231ac55aaaa18e91f58a1fa62924c2515e8fe69be9bbd87611177ffdf1dd5be93acf4a664a280eed5da42701d650c52e66f236ce62b943cd1fdc836b619de334e1bbefaaa50484c29a7599feeebb1401d87e33e22a74ca41113df424b1aca579e49e34a632b53c160dfb9298a4c8691b2ed228d23f6c8e9fd4ec4065942345363849acaf5802cfe70e394feca5dc645f74d21fa71e687a6b46f58287a4ddb2622dee20ae7a48befbb165e3f06fae01ff90ae023f4576860dca9ac42996e439c277551d11556cdc401c7ef56729457ff167971f5ff1578854297c637ecf86ad1c3988ab40d88b230b727ae290e3c13db88f1de3fcfb2daff133df81028350c4df0ed777297adfa1a11e9d3200f2e6ac77d516449f4a96ed517aa76238488d4fb5b3c99ea4caca4836f4104529fb760a3e131c7ef85d6bb62d4adf30a207c1e176a98c387fca83830b7c1f5546630efdcc7770a4b188dd0231a77adf8592d3f0620f8d9b238bc63b6f7dd5313c5d28617bd8f09b50e003b1668773de285d5d98311fc66f0fe2fc25518cc81f5c9226d7c7c1caa7f8e86aa6355917b3e5d52a4d5c65049107ddcf2159ff9034de9095d827eb24f253ccfe22f2534cd2445cdbc5c79f88096bb2fec57d25f9659a0cd5767e60e3e80fece42b87649dbc8b35870469a07fed8fb16f3959bbcedadfa4491ba4145725eb1f12042927eb6452fac9a6b58cd30d93244d027bab505f9995862afe6ee5c4bb47d4e5572569ff11ba904efd6fd224faf6519ab72824eb1f6434d4d0d363219cc71ab95aeca634117d6cbc19d89fcf24eb3d59e5dfa449cbe1b1985778b4d248dc4721cf32368fa64198ac7f91914abd394d22372d076a145554d49beb504c93b3007b1ebfdea4d1b7499aec33ff1d5cd93fb6ecc8c63e499335830e96fc30a9cc2683fa4392268db88cca2d47a9acf8f939d6576df03bfdb45ee2e34e4813d0df1fffe56f52cb40e9ff7192cbcf1e7ad6b091aec98a67a1d49576f4d66a32c076df255128f0f7f36ab62ce653eb13d4f548d452d5992543f8782edb20ca5915c8b0f6d60a19f00260ebc1125aa685431616f3304a6aafdd853b125650c4e9a125db232ae3121b985271b228bd461dfd87df912557b2422345cefc3e8b356714220415c829798ca91e54002036b4fafd7f2254e7b54aaf11a56f5a0a859e8d818ce42b57e04a152b690ac3ba07266e155a92fdc2a60db7d6f70dbba80856595ea313aea648a8d5643a8d41c80274a52465ed9afaa47d329f4ab60a7130be016c9eb984a537b6ccd0c74fafb67604219b6897148c5ec84cabeab3d5fd2e8849e15dd6066ef6bd13e2b22ff72fcabfbe3310856fa334f2d5ae9a1117b96a101f9137b3bbdd738d930f87bdf527cdfb5d1c7ebfe7a012c6b09838329cfd96ca1ea7ef46885ed4b9b0f988d1f967f5c25267181fbd731c51e48bcb225fa6d8586a08736ce9c841ca433db6f0c2370d39830f3f5aa7cd72cb58c96b40d21f7444cf28484851fa9dd737d1c8d2facec046ff589a23fd3d362da693e56cbb077f240d550cf88cb85d037e65f51ebae439c8276ffacf55007df37931d3042cc3edff5889de5b742d79fbe8f9cb4db450270aa28b0a804d05e7115b9c98069bdd173c7aaa2704b67f6395f795e5cb8a1b7192cdf245d6063fc3ebe4d5b9dd3f5ce3766bc12c5fe03ef8799a15e3dfcfc572b59816b6bf912852bea671f86f48cd5fdfc19f6582a527511284189ce42c9846674c4b61174dee6a243d282889b0bd3fa01887ffb35c578ec3ffab85fa14ec686721d78c2d6311e9428a8e0cbeabeaa901203d6257974b434c0d3903d71556f5490f2447df5c8ec61589b14545f46d168583d2c87ba74e7e8fad65ecd8957543e1a0ffe369a3bd048d596ba964b45e3548595c85426f82b1d95e077684a0c1b3779e824911786fb99c3f30f7d5839514a5323aa20ab2526113ea44e3c77bb2ceab997a7b5478ac4c9301ec7fd664be5a2cafb65398267bb1404692effac3b598ce16db014e7fdfabf2c96431bd4233ae78b9a4b2b60d53a610ab4d8ae9cf1c710a1279bbf5d3abd9020fb949dab18bffcf5c2d16c522ddda004d8588c0b06e209e80ba0d2994cc19c96549d672c84ca94eacd7aceb5032e3fa6e8d173b5e828d096defe77cb55c5d3d375eca10457ac53f514aa54134e221213dc6c7e14c0a653d24f8b8d962d789c599b80f65cd1aa7baccda39d02980942f787d7fa739ee9c462603bf8fa0205bbe8aabe0f8298ec37976a381a89882264c813e36e819d0324a618ca5683d4cdbb5b7421fc66c380e67be63327a6f27f2da2a55525b8210b2544416ba0f7cd837183806e123d97138535735ec221bb01767f22e45f03b1fa59cb63782bae81b9a1367188a340ee7b6b35957e2ce47241f13c7b7c61584e03b40abd44c86289b67b814c38a38e9377941cea0f6a767582378cdd11f1854a111470edae9fc3f85f0fc23dba77301a41c276bbb521cb1335592b50e3c99af39421464afe313b01747eea83cec22e6a7aeb5c60bef4c57461ffea48a68aec05b2e6720c532034a121124bea3fc14e885dfc6c514dc48549496c9f166a14a256ec5f2556b7246554d18bc2d4215de954ca5a0cd586595218ab20ee688261f4cd81dd69da2221fb9b1772dbbebbb162ff596a93ad173a7f0f9a7e0c8c39a9c1252c00052cda7e956fd389cb524cb6a7dac1ce6ad9aa4ef6a240619ad1fcf64a109fed9984c568b84d6d809f62cb3186db11782b2103c0711656c0127c1ffa3475b1fad5475bc4b7fdccbf672b9d3c562a65f88a898b31c87f34eac1d2f5a13567014fdb29da7180a72642fc51bbd3fb11b876fb37c310ee72f1b0bb2762f8ec7e17c786262d7a3b038cae0c6ccc386aa9f9bc34f1155f0dd8814d6ae9a04cf2314b371f876d012ca50ebc11ad1a5c17ba320654d5e082fb7406457a1952f40cbc530aee9617cd9f10e6037807d35018d0f5cc629cdf1491589637420db2720ceda747cc1d6d1aee180dbfbcf3a972e06be0935060ab940ad85bb388583f0701cfeb95f93f03592d31c206e84aa40cd37af40b657510db928c78134d103d6865a1f158e29da9e6ec06109f1a0405b5ef731dfbbd63e6a8ab2a610153ee0f31d1a5f1ec6e1dcb50ac75454b063549f096de07820094706eedff6395e51b0bd75bf01b4f627484443b1ac6df96a80ef22a43a9ea207377444c097cd96a0f926371bfa723d0ee7697e8569310edf6ee01da24829e3cbfbeb9e357cffeefe95697ffcc81a159d79e2bcc0a63b59c5cf9b14acdfa6e90adf7dce87df9d300fff67ae168b629932d03b1d98efa721d6187c46e37405a0ddedde6f8a0f560f40bd9f59766e5fd448d1e7ef2d555a4b0b7c003c7b6bccecbd01738036d1864bf8fd2f5ac2055c83e30d5fdebf037224cb2de370f6fb71388b5ec1870d8eb76ae4761ccebb3ebd6eb0be92321fd30d13c2abd48c41678501cbd7b5226cbc5427738d8cadf63a1b812d93324e6218b5fb31e0af89e8319dadc6e1db01d72322ce46c6773bcb8a9654c7e15c87c4bdc3f6fad39b88d472fb713b0ee7d58f49ce26b2ea61654f221c517ac3c88d24ccaeb88b2ab6dbfed3832d825de9bb40158bc5c58744151c1fffe95fd4c79687043150c9f167861c769c2b1fc3c0078c7f2be1965a48a1059111e6f8249bff0102396d29b02b7bb42441f1787670cae65067248ec3b954124c798e196131211504b733d44c36d625050e050173e095cfab80afb4ac96628d8662e450b7596b013fbda85da90a405c0d93b5fd2875709d50c2997b529c578cc3f989103491b888ef3bde4b143cc674589a3e6eb68a9def0e7e81f8e40e99e41d00e607f23ce97e29288adfff5415b3c964f2a6a78b737d7af5e44aeecba2edfc79bbcbd56ab5e0bfab8fc399628945df8ec39933254ec1b164c15942eb95b1d96c41114b7816013397427546f488541e2c438e89c6e1ac7899d4723eb04e149e82b0a536b16be8fd758e2125c8a7c0905f4e36e8f0b60a1253588262065e7591f9308c59cb80ba149663a49f33c555ac113bef0fca7587bc23326720c025f7dbefc58aab14a7da5b56b29c76e777d61bb2f597cced47e6c3387cfb3075f1088099e1d69735257ca3a328d721dc026c0eb9df97f7ef2e3f6cdebcce2737ad912a4ed10b5b93b5dbe8ec8d6eee6ec7e17cc3aeacc7e1fc868fe60083daa762bdabc00e4d95f596d9581e87f39d5ba6a1d748e52179f55f9d105027fd71c9b81407ff300fc99eacdd51797848b00b240ee2a89916b4d2b215c718e9e9f8109e9e6d6fa982f52794deedc544153960874f2351a1f295534cd4a849558e8c1f7f214c26ca9a654c5542550ecc2d5faf8b31dfce7e69b0c7b48dae60fd691ccea37948613e4a7f44efb0fafd7f8ec3b737d3c904ce1b5683c70863921a249b1144e37016c73fd8fa1387390dbdc0e701e1809614cc0bc2544efc6beb6a1e11aee7d21b9efde3f3e6f3db5faeaeae8ac01b52510782e43cbdeaf77b6dab64ebcfdc9dec43f4b09833548c1df65d78b923ada2da5c0cb4abf1c8b61f87b365ba09b712df74bb74f7793463f9b7ac8d7d5ddabb58739412bbae1a87f35e9ec04ff7e6268863118ad92127976a2343b1bb673f78cc6b8a03807f6ed6c87e0f5f6c963810545c65999426ce434f4e8a47fb91a12826e3706e6de704910fae83e803a2a2947ac9ae4f6d246e46f4f8d4b7fc31109753dc7a46ea1c7de21068ef4393df88bcbfa52d3216e3f0afab71f8d6464639a6f0470e6d06ebc4ec389c8bf969dbc27d1f6befe01de6a75b7875b4a818768db56ebaeab53c414b1f32dd823b90cc83811f68469f7208b5285be8d456039f28b0e151d38a2f86080783b027525d2a2175fcd45a7238ada79105171f0a9b33ecac2f0f8a5d8f1bd0b7e7c489d8746655a5db401c5575c622d26aedab2b7d2bd64768c98e8278cdf1c2c7858c9328a7f8e42b8e416b5edfa10d52b242e2caf4385ebeeb36f83608470a3dc4955db3631735857a44a6464b2562df817601956d4a42b907fe7e65e8dcf82e79702ebb3e41df4eb9f0fc98b03e3b869edf4d8b056521fcd8c7d917bdcc455f5e75db662d41ef794df832ab27f6755ecc691b478dc3f9380b28cccf93c79dff88f4393c1f0ba64619d51a1a0e151bd10df024028f072950a6c56b10b4a6d0724849f2b3eda98c1d59685796ac6a449e8a35a39b8af5784979fc6a2253839ac29135b2c16fa7f994f3c5ee19cc0e3cf4a0570afb4e8aa8341c2afd19e101641553c220785acb1a6da7351bf4adb4a4b1eeda601cce6ffd91c6e1db6c329b2b15a87dce9feb88133207b57933dbede6f3389cef834fc9248df96339261ad79f8a23ecbc48a967bfefc8c53c1a7fa6bd538cdba8e9e6f5f40ac69f0297331761e211b7b79f5f3fabc0b459531b3edd3ef091e190ff199aaae39c4895f3edfde73cbb9ae353df66d6da2aa94c37860515bd3d9a40aaa29170583c6c2f2cabebc6a2982b465d7704109527897da0894c202e8db40579a952c623663f17ec38a6fec33f88b5ecce0e87ecce3e406cdd438136a1f749ecacc4af684d30cfef6ca7ec89bccfddaccb96e35fee643a99c885e8f75b9ecd4fc2b05386690008996a445fad1ebc2c40bf0f3c248fc4ac6aa87f487a6c91a343617f8ecae8b0b51d1f3ec97b71e9a6a20a661083347fc7bbc8b4f8e803732bae625b948f42b24a05f5c739afed5c59b36274543792a8782e323960a78d1899beb97903a33869ad4813473662c6e1fc00d5a2965d03f90aaf2a71b5c3ac9203ac59b77238466d177b748de47064c523b771cb2c550c909214d14aed83366a9d764d4301a9dd9465296bf4a1ec00b303d11a903754b36d2b8971dba7570c4c4ad4428ab9e14380dfedc0036bb39958336aa6a370889b385d8da2703ea2676494e373f7afa8e6d0f569bd8a231c5318873389c7fd696b29e2b7e33ffe2b3da3d89a889cc9cc77fbb4f9c0e640fcb795e5e2cf6fd34819bcfa7dbc6c6bc9e63ae90966adedb4fbad58f6b5dd0b3dd57e67e7d16bdcd782b92e7a4bee6da71d6d8f3d2d26cfaffaea246e0dd09d7276e8c1e99c7a57c88dcc4def8c9372ccaa032e923aac5bc972bee9096329f9b9cf339c1543de6b345e07deb9c0ddd4fa3d5e728a723d469e130e1980ce47c59aa1d47084c91ba6b4f410d5ce4120a77b1f1a0e71244fbabb7aec70cad018b0f2d73ac16f2e7dd306aed9a5b2945699e403f94ba005af96edfaeea40eb4cf1cdc40a23be6f4837b702364f3c5e3733fd2b4c11fd9b0329cbf8385b19d31ee8082c6a01e2f59d777db5729de354eb66d6826ebe1bded148d1eed10bb2c30ee3030fddbc5e48f8e9f4c35a0491cd77dabc881ea06792edcfcc6e3aea3f64e53775f4420570894a94c3b514465fb89b6b25a73287fd538de10e9c08a5b1850a3f00bf12e425b66d3ed6637c4723b84efc5905b1cc3eed6b99201fb7568b727c63f8d16dc552afe714d96c4f68bb2224917c7b0e0709fcc785bc96df1a13a50da81a2e09d4af66e5bee9d0bf576ecf57765369d2d171461b1c8f14ea4a438a16940d13bb3e02dd778023f208760a73cae8d3a4b21ae73042c47f06555f83d0c25977dca7b577d4485a28a41842082d7869c5129f1149142c5c2ab3b1e828aa124a46ca17c866ba96afcba608d62e355613f12251c0b5be470e7c693cf5a0a1151b9fe6b4d41d4315404c0f01ba62eb195eeeb425285bd215b9ccabe542d5acf576d22d0e3898aa26923477ee10d83759cd4b0a6b2541acaa55c5f38bf84b8a76a1b537141cf0aa0aa52d548764c6eef3e21cd8ec746e953ce38091fec942140193fc33faec226d5334615bd8af65069526025136c6a6305b52d7ee0d3e46e356cd029551ce36f51bca8296e3714481893e42748b154a83dcba5c2a8617fda8453f197f1fb13bbcbef4fec8a6c925fedb2c93c9bad544fc3fb13bbcbf7aba46e144eecfd89dd1afff73cb4a366decfc9bc58ccaec44649c3a0348a62dab52926f915763fa5eb60636d511838da077d9eb16e6a08bb52a49e6fbda4f47121de54425ab419e03332420c4ced1dae2abc6db2aa79170c001fb874de65ffa1f7995760c3fb390d6119507f6901f700a1a38ca731c589c4de41314b9757ab8cacc20fb85a64256ef7654836458c8c679d3a361c011812ef32e2305377268b1880cf764ecc0253a97ff216d3f2a5a648a40cf0797bbfb00593400959521657727e7dee65c3a1ec429fc54231eb8f9fed38127a4358acdedd46a235b61f81960b028812f3b879671128375d14ab553630710bf212f1819f05120e88062a85b38a93ec0bb3d96c9fe5b86e5bdb873c1bb00b4c072970bf46b40c1c795bf23699ada0b2e6e0cb089d532cb2e9e4a95c11c4742572b8ec797898d2d0db4f431ed45ce40bbc21397416d57ab7f79fb2b9c7569c240c757d9f3e1d64c9f9b1df7c0c8950a0810d1aa662cc94a9e206e86b2c129678726ffde9c1981ea5ccee6ffc909403b5529cc4448b0589e5f830fe9403a4406366698f714a177539de39bc00b38161a45fbaeb4e80ec85538de621060d047803c29783efccf89fd8a3afc9f181c9c4ce953ef8e17eb1b3be42eb35a2e6c0bfbca8636c757d79793a9df229db6269a739c92571e6a4b82a9bc52f08cf84e502e1dadaa21e69fbe35e40727645f85d8be85b93e8d64ff3e5ce18da9769bedcb769be7c278a69b15a61d59cb8b60fada532a698e64b43887c6f9b39047453c24fbe8807505468234653d409eb88fdd154b48bfa5d58380611ad707efd8ba5ba60f69089b3288b35e58228b574e4e08c5a2c9e641b87dc71b0bf2e96929fcfa03a02fdc8d29d5a7a64b53cfdc034922ed621984b9403993b56073a9726fb309dcc73f34f87732e400c524c76a8929d29b202d4cbe064011998033294d30643b5a15427c6e1dfbc2b1cae860c2a8dc3bff130d79bde5123e50714ac294e6b62fdac042ec5d60b7c05ab14120bac9309e24e65e3c13e29ef779f3eb17705a137b20e70c39c8c819b18bba56c7a4de050a68d0a22d1177b593b9dad265287c7692fea8dade15b76d5d1d2eed2df3de1a32db2a9005ae35dcbeef6cb867697d539477dd914d95414e985c6d6f8882c403b719e9b9e4d8b452a61dea79a319def70d93844e29de68d52e46628c7b53331520d9b4c1bfeda795b15f461cfc66dcadc97455676c23be38f1cc85a5fc9204be07d7150442bf6acca4fb5ec8a7e787372bfc45df64db7ee0f8b188b15425e1b978b11db3a52a18ba26ed15891322130018baac60b4a64a3dbcf7734f7306f34212f021f9a8c623245f1923d48ee2849a4dba9f181c340bb0967cb1ed0f4e940001ccad987839a7d38b05984f7b8d3e7abc9f2dbc1cd3e582e3e8da3240a2220f264220a70c491438fc63396f0c7d3f70448ab616e95f970f92f4e8620ba85213bceb2427af90992cbea857c76bfeec82fb3ec6a3915295cde905a175dd0e2d70e5f667265f562f2bc1c2f6913c81ead7eb59c02cc9cb45039e86c5315a2532b544c924435bfc8ead21c1724d067c9b19103db1ee4d0b5940888af78bfd801fd54974df345885119590ffb9e4ace4b7f39469f769a2fb20f9b6778eb23ee06ca6f298a83f32707daf92e869447f51c53908e9dce873b52aee2be79647da34a3c94e9c6c8819c23f401ac61b90f10cfc93ec8dfd555b19abfe1e7b51baa7f1ea75d21ecb17dc31a5d03a8b62b43b6b1f8782a476eecb8e2519e085d7cd749b9ff0bc38ce1710f21480412a5cdbaffac862365d6524397fff40bcfaa8e82c9e6d974b68b9bca95cedf5c7c2b9d98d92d475ab75ec14297620ec3d2b8d38be7cbc5f439718c6555c053e83fb7ccf1b1f45dcc88788db8403130218cb2400c3c3b68f9c0ce7d67a0b4e7d85fff27ba0751d31b71ad3929dcfeef063e8aef346e42b52d8ac7105c83c5e8b7e1f7dbce8bc3b994379b2d0eb74871a139797985a8a6744e206e6981e2f62eb819acab001e1f5119ab3ab1aaa58f1cca430371ee09214128d9eccba5e850b925d8496608951c3b99ad6cdad8ba2c101d9d56f880ce29eda12dfefe3f1525324882359c592a275cc4992ac6851547f1021c354f96d7323a91b2d812935b5969cff3cdec260a1e9c9082e11bcede6e5ef8a6f14e51d3570dc01d54318c8911721929e26963e270227c6c5bf95115ab2fdcc839cdd6a5f9b6e7e889604c48c8f882a69de03c0110052efe5f99d753687a1f3da5265acb51fc1477ad0c3505790df1fae88e2486378a5e7859e48c6534f2c4e615af66e44ce6b6a997b3475b8be807cd0997b3e8fc7ad3b64f7184719b26ae8240ff111c73fef6998d545cdfdfa581b413097ed7e91105a23ea685503b727812c37717a22b6e930ce1f93181f9efe256316bb2052ac43595a2058469b5936552f05e504c761915388391c5e426bb2e749bf1fb6e292637b82e027327b2582d5757394222021e6929b2c6fc9781a86c0327c5284b2daea0757c83c496f7646838f3fbec96d73e60545c6cfdab67f0488a55e59f4a08a79e78aa3baa8238b2c0a26c9a8eef11abbace2cce55744ebeef18c1b3811ecd599b94a9b1ac4a934e19c231428a11584e49962b410dc03a98f947b146125242defe76d2d73514c572da7b904b8e8c50253aa29a4d032d1879142629414f2de5c2f7a7f7835b7e7f6297a5005240c2257490d1e862c5f82db7d46048facab1ee5752942a6d2b69bf340ec4a2bfbc4f49629e9b1e2e7c0b068882c1df4c31c91789e72b282e8abcf87f78a46c8a6c9ea598af60a9273f9d9ece56983ae95547dcb0e5f0babbcf72ab4a973168b6322da63f2630223bcb7b6a2bd0f033faf036c589ae5e0104c7271d1f0335de5504187599fa2e940e543252f6e5ec7cf2fcea8d1aa6177dcddbae754d4dd00d0bae169e42d007f8ff0340ee55575fb5f3f809deb78c1548db2d1b227b77c085cc60c6587f65cba79109576d53fc90fa6afdffdfcf5e5757ad18d4af90156e1f107949048acce7a4f499cebdefbed0bc99bea10f9802a3abeaaaf3c0d6052625d0ac4354eaf7ec70730dcb80443a89f315bb048b911d5fe12740eb07d61e03f16b7bf0a77e38416d843b1871be4421d61f592056578758dde2f338383047f51bf1698817c3f8c28c538edd8c150f875a55c4389d9994c209e354edd1adcfb165a86a57abcca44844d48465fde2da499484bba31e4801f97ddd299cb47806ec2938f983d54f1d39bffa53077ea4de40625453af794a2cd43c05fa5f733e75dc06e761385fd2c5c5ea912201fac28572ae7bf39de10049c4044dd30244b8eb4c21f999baf7f4c92cfb35fe835764c7b0440f8c5ced1a64dcd1cabe2704ad84aadb08ceb9969066e6692380ad118ea6c27f3fd87a6b5bb3e53d16e55ab78c8e802b02db24fd260ac4dea84cf69690723add25fd4f2275e3dd313601dc86986743169da492df8765793f4783f1686846056cdd4602fe5fa449c7561fbd05bdee79bb2cbe34f86347ec83456d212d0e46b8409c215a81da7a6010ac41a96d4b2e175969b4f277dafd9b86ff20711a2810891b4ef33dce1f68d92c5b98823f7beb10eb3993662d1627cbe4a1641c84b51bfcebaf4cc7516e4518514428e7e9893fed4a4a2b41130acda3a1559e421a253917a995317933061333b8ac56d794569e9e7ac32c41937ad5c186247594999d44887a8a22a9bf9fad9b42d25e70ac71f44ad55f67808979ceb45a0bcb493829c969ae236d5f7b944bcda1b43a5f184a0fd60295edf95c293d988a5325589f6ba50753385576e88d180d46faf014d6c4c319211b96e92aa2c5b6bedefc6a4f7542eeef61b6de82da0ccf714acb8e850f7b0c1b50daf60a56bf04cf279b3adab81ad288fedb6ce23e4e0d9d2e58527e3438556b4b56564096ef62a1bb359de925b5fd413be3d2050c10ba05c138c793b1142b57936cf6903f1f93683a96f8f4bfd4750c50159e03213727da04269b9c3f6ec9532f812dca077554b8ef716232d6308defb6285e7ceac8fe6cf0f32b37c57a1b89fc2c8af6bf8841469197b6a2808df4e59eda1760e35c2ec5d9d7263870fcf2e1aadf41732e9770b3908df97b190db33182cb74e7cf3305967748c83c8d2a54ef4eb8396484defd7dde68e8665a995e42e0897b4fdb9d78272f7c27f005cc652a0cb1083bfe916a9b5190a9886ce42ebe80373a05f920e9d0e76bc0153cb699bf8025e6562cdd47b15a61cdd17f40691bdc6f1ff20960d8bbb8729bb007b80217c110371f1c0863c4e2d20d14b057af276f67622593cc8dcfe8e485dd0500725208f472c9b0df545514727a96f1dd1ab87bc9f0085769d9314d6773c99e3a2326eb72a4b47a312f6294e1147e682cdb4dd5dfba4a7c9722b41536535874f45b2caf5f9fcffa57f733f1418af97dd64f4566d4ab88c54f76fdfa7c760257f733f820e1e6d865f2faf68f32cca499b4a20c7e18d8ae7d5a4d859fefa13cccc69bc6515f93abfb9930e283fc99fdf028292ba1539762800667a8de040f926789ea224459ba8958e4b0a7ded5d7b075953042abf56161e649c9d010573525323986db9d133c6b2c354772d7735bc814db06bf0f9e9ffeffd2f3129c7439b296a8ea94c3dbde602c59ded6243c98472f228ee8a8cb6fdd02c30674ef4a52699599d273aa225b152ebda1ff67a0fd04838a4efa8e842e20d9b8e5dc1249dd59e01e0301d39279d96a8122515615891a09e8758de312c3565ab36779eb6d1d437b8b1c0825f097121269dd6914c7a5acccf84fbc782cd85c8311f4ddab075b1dc406437725d06e5d25b0bac0271fb84a60e51baa5709acae0b5176d5e39bc9a0572812e057a258e75de93b5e7860f78165b8d2bb6c0f98d6c64de77d93d0da0cad23cb9d68926c062eb1c9c0dbb02187c7f730b75c36d7aea48f2b4e20c33aa8c746df3951c38cda7e8e3173f61e542cff824760f44f5f08104671deb74dcc1fb949b3169cf56462b34c90c49e6e1b37d4c412fd3214bc77c8527343788b2457911cf34ea59c10fabf3ff8a0347fbeea6ef0ae664c3b896efb6e1cae06534db2741f799849698832b09e8d26ba9542355d138d2701d8e920308367071d99551862275728c1225cb998de29b34a22b451fad6728e22522202ea4a2caa988b1ead8d9eb88bbbc8a8620982677cb7066dd85b260818d871f888407f087bc04e5f59dc4bf4a65765e26da0c0fb8d0cfae747b6c85080f34ab48f38bfafb724d55d60bbe078ac37f5bf112325c614a44a9725e6fc80464d235f9a0d67ec792c965de9cd77c6922f1821132fb9d29bef6e30535a1f967f89e92ee2155f1e339dab0ae2841ab31d038ea7843640e920045f1cc1d3f99d35a1eb807c6632bbc6dbb49ac205737e790a0d86c8091c1dc3da1770b08eb070b845172d45b010e248e540b5ea0ebca94b879af8dddd1aad732436a469961e3343fb498c3a1b3671ebfd4798c934e6767b1e2ef96180aa5fcb0aadd8b008d2f6317778a9d9e98d385f88b90c885a3cebd766767a03e70b984b49722f72622447187d5cdaa0dadc788ea257a3f811737d1107752d2084e304be7a0a4e6f781455a30f6816a1f52a5c174e94d8c1eea8262634240d1dcbee480c0b34f2563536672b4a8df7a4bb3b3788fc8026f8c23a4a614a4bc65ce820bb567e4eb127cc673d08470fdd12a552fc306290327b84912f8c907c9765eb5aa16171b9e4cb9b6762629bf5207b048760833b42de1aeebeed7b2cb55308457a0667a74b78ec7933023ca95ebd1a5ed04ea311e10d596aeba3870d329094149a7385a203a173a47708c43158368c1b6c0d73e9fa9bb7828b15a25c097c66db6125860a2a1bdd73f56839aec24ccd3d34d1053c9bf3bc3813cd6bf2718820139acfc5f000984b2147a321e0e1268c960b0ec53b551483cd610fe5bd93ff46de917047084fa9e1081f71a8b1f052d1ee43f6889d317d7566b4178788bb436ae1d4337f116877b58f37bf4e09c1d712b89edc68020928a688c91678f9c0efe0688b2e21b6b4638e2e011fd80def52fbcab73c44443c5ceda445203bbc0aa26b19c24e14b70e2b8778b666a28c346303d83e742fa0d361dc48abc7c8da6c6a354dd82c550a1fcb360d0257a14bea0f3860daef37243ea2c62249e4f301116972dd67c47e79fdf9e9f70ce22d11f951ccab614ccb0ee7b71bb2e8941670fcf3d3ef4ad5e741733c9da394a0c5c1b2d4cb79b56f8d4c078244de3d25f041ce69009a203d38b81dc444009c8a37fb50a19b6bc01748e6d322cb7011cf7b6e08c26fe0480d0f4042f1bb4e18cd053ad7cbda632af765391d44ae5e45f566e143454a0f3982b0363c74119c2070c6e6f1728a8a6b0c9ecf627d78cd7d5bdfdd59ac52abf71218ba0435751cb7a6d03ae899e4b76daea1f323fb20cdc26e5bd781982bc055d17e1127a67073e10e859c01f1227322b409e623016d4dfe72603ab58bf135a0f968e0e931c234c4584e9cc0fb4bfb75c3e4a252986cd8d89b15e328ccc0e4b6a437bfad309bc88179e002e4b1d4601da939b47b56da9a9804b7a2a8d7e69437917cc1736f164bd70619b97792cb400aa313930e38c2d1f1120be5a97d0d72b0848f58ce7645776153b9a5d9fa0d4644f958bd4726d84a24fa244a8f41332e10764a20d06fb4449145f9e4a962dd15275265324144b7a8acf994096088b6c03c1e8d7820793a02f924c6dfcb161372324969ed22fc4cecc1976eb959645a991a417321184dec6994d9bca30872717498ba3f316ccaced47c9758782d934bad9fbc6ceb704cb5c58629812a66f6a027a970c8e58f8fe5d221973fdeb26622cd7038a247d0df17f885c7b932143771c612a664de627e799a1b2a9881b53aa40b820be9920a8712d2d81ed88bce276c236bcf7e9a6f38216e09628795437eb1f3d144b46228a1833fd59fea071fe9243393a494331c217085aa7b0f1090e1131c9e5e48f38136105942b135016081f988bd76bdcc7cccee4bf0e55076228faf0e7dee681c03d9667d0a37c59471c4961f775248185e6315ba38bac400bdf3a4cc7a676e8bc21e7a004af46ae592f87d133a34cee636ba23e0cedb5c0a54ccf0a2c83ea083b66ae9e19a82a6a385933a28e7c4b0945f183d4e2e791dfa89576ccc4bef796417cf72f91509375f2c1523c4356c9db7878bd1d6e58e3dc4b1a7c57ab0db624f06f5f861dff2a04b74f8565678583582172afd329f3ae5f4802a25d7265aefd982c2294f0702a3bb0880a91fd5375407df460a29dafec6e7dc6f9904cfde62ff292271a49a3f5478f8d73e51f840af2d9ee1cda00c9c845be53b7070c3f3cd95c9e46966d95065bda1d22ccb8672a2cc6f712768a824dfd049a54cf340756ee51b3be9f1674a6b5d8d33427f4d5e7dd81afda6a7743b159d2569f3dd283a2f98e8e4f2ccd7efe21baad1f6bd1183e4dd9fd26e4b1f8e4ac21a27e00d0bb2e8fa6eae1e7be4b1324a6272503159173c9ff04143a23749b426327c5cd2493e77fb6bccf7aae0c474ecf8fa59b9d481c9836a94765b6a04cfd351281e11944c1eed5e511664e32ec28b1ea5b9628ed487e49ea3e8b8e7446688061a0d08d261a7e5e8a808866898cb4789aa3bed96e2feee92a7f1e434ca2be0bd616f689b03d626ec436330bed7e9cdec02ba93493af8c9afa4c10d8845d6a32ede5e88353fc8c866724e6d2827355ff6faa002d929b323c26d508539bd4b7ba2af283727b05a47be88949d09e858aae22fdb7a3e498ee4d39050de8ca88f0b5d4ab76902338ce51bcb111398cd66af814911832cd1a6492a192c55862190e77747f6aa60abc44e53b669073be00971843a76de4f7b89f60d399bc585e17478ae85e36de4ee8c8e0783232e31c980c8a2564a996354c9912e27f67c0bdc4f718148db1e62acddcdbb1d25efe0385240a151d9dae6ee3c85c3e3f3d3ef1fc94cc5d6ad0ecc87c5bd701bc9a5e494b730f44e597b6288a964a7c22518a3a24a63e3cdb5df255bba1a8df827873ca490332f6fe2e9037b0e6268377d435c292298e0ba62edd033b3a2b5cb345aa72ca04db3abb2d73b16389331331913d339acf17b0a45ebb40a3541967c4108de1ce10ab9f8c3066949b9093b79f12c828c0c365e104810f0bee582182707485337cb0387758effc152d7908d4dbce31c50260b289735c98c3ac52fb11ee9a0aba45612f6d56a4e6160e98d307dffe2aeb709ea8fa833423146090f48614111da86a4df224ec0e865bcce2cf741ef7e7eb0b408e9689a4052fc2146c31f7e76a91f48e7b5d0088db13f6f4a3631bf6605a37059d21adcc0a5659ce911ff52de29da30cfa94eb518659d3812dcd758911b16a5651c5b83feadf246d116794d74aa61944d219fef914703331e6478873c0eec4e93d3a7579beb3c9a2485ac4f8b1d575e1fd7554f4f6f26c3a853c4fa543c7e248e426d2a865b9a5a2343e78181c41e36daefc44f67f26e92aa1e5d9aab6b4cf6ca9c3d662acb88fcba7568ea73610d531e4d11c5d6e956f640f3bad15d5c2ea30ccdf3972fa0a855ba4fd1b8a122bdde67038b12035dbd5c367da2741ef07ba7e9c62416b07df08e1a87f8ff0340fe6ce97bbabe717fdb648ab016303837c8b241beb7a4cbfa0cb2ad8990a824b0ddfd70edf4d4fbf5fbffbf5fbdad15c9c6c545c878609fb8b02561f601f1483489d7dd21e81fe473cebdafa8ebf7aadf01441937446aa46092a2aafaff615433326b84516343d4ea5afdef718aed208932c0648bb381d66670666927abc200dc8f96828deff24c5af1a3b3a674bdf62dfa684a2c95f1c1785c7a1df2a2faad8aad5a95b482162135044b8acd6995d92b3ef4fc795846cbae805b2d5167a307f33903faf7013b8caae516a9d1b2c6cb87ad568d5b8f8369b9d95301f5064abdbeeb6df5ed7705304a8781575fe1fbd0f631f5a88ce728b2247870e86cd0f2cd7d676d38e8c66b4c3d7016350acaa662ecd7eda6a685f57d858dd47329f4dc279bc6542ba301adf221b2b675b61b2e113786f5db332230b6ce7cd3c6306ac721fc1ae73d0a6c333e2eaad5713bd938e376ab16323eff643af5a1f0544c6f5ffc3f214452c9c2b2cdd3b11a2453fd3155ce53bf7e660ea05a8ccc1a8fd37a8dd7b32d393fd38eec9a3876178f5372bd991944369b646058e3715ad2efc3b3122e1c0c87cf2d923cc7154fdf16696186b2640c4e08d3f8d7cd4db420582b8ac92891e9b1cfbb9e7324d56ebc1df6b053273b705d86d04b469d47f23855bf32088305c5e2e05d6ab31d8af22f6a6517b711ac8feabe7a8d6055af5faceb6efde1f7cba2b532cc9df9e4431410c36cab404de524402fc68bbd6dd54f14d2d6cfb5c20a6f361aebfa01bb974b9f20fc2bd39b1a39ba0254eb12790a2432407a861d8c4a51628099d48230a38f346faba0c5a4623c7298ad33b13bf8317f32320cd920044ff13a78b8e99d1d2b10ac62c84e81e123aaea4621741e23861526ef42d177e7b7ce630acd3b17dcf2dff4e5519a89cf50662a9d19f9bc6310d5dd71c547fea88e3a6fecfb4092982180045b7879fa1cb3948946287903929edab96abaa29740f994ccbbe2e62d2f73123579c346a881340a17dc4eb20ce18a3c341bfd513c335c82ae32a0b1428201079067ddd1e911d6a9e68975526f739126f1ec735be38de14d3ab55335a6b8478433ae50aaab8f7d916771f2393cdedd8ea8eb0cb26ab4e1012ccb28b854b86ac66eaa3e9744294a0eaf7de11685eb2a004e3a24e8a1725a7092c8885a55dc24ce8fe26cebbb766c54e06485d55cb68f37b7724d8d07b6c93065efc234d39d0c23fa306034c952e7c7277bb19948b271f8972968092c5fabd2fd4bcdf6728e798d478de9fd315dc2cfccd5ab9fbb6b331afa5e6457e883758f05e65611053e898acd99161fa2f318b1a676eab8a4532d69419a6c7d5cae7632d6af929d2842e7896b2b2c570c0bc3b6dd375200138d0bae3d2c658a813c3c7a211db9b197ab9334669f63570572fb23c911b58f40a4717ea18f5d0f3aa8eb036a2dcd3eade2529e5c0309c1327eecb0362ef803e6b6ccaa200459948947c4c582c5b3abdf28542b1d10da4d7babcf7b6dabae375141a4a2e12253bd60cd6b907150d522e47a82e1391d6259838350994e777f0df1126f2c1a1efe07ce66bf7f43c3de9d96068d2d5f368bdf27a80868ee6a9f908278a9d689fa6878fabc11dc2f369ffef93789191834d69f0e49574b8f1d78cbe620b1975e27cdee6e7287c8e90d424e4b7d578a5222b22b9e8e01b06b0ab21e3d1115bc50a40534b73ab49453b9467dd15d9cd258c8c04bee17cbe2c2d55c2a427419b1c582ee919ffef9af2861f471c03ba2b0a62c0563327333da8ff0838b6a1264a03b3305d88948a8bc45e52f78f2be17be0c3b8fdfd33bfdfa6920b51cc2413a5453ad65d7e1cf59aec1eaf6c2272e1ed9efca5ca2bd82eaba0e806052f6ec89e07c2d2b9b70eaeb68f93a6257021f04cdd38ee881229ab2b540af5fdbb6b8c8e5acccf944a2c32ac83e63384858386b7764a1b4247cd97529a7b454b9d5f12380db17b5b556f7f4a92f0cba2b7b76c458c44079826b3cc854ea1757264f61e3d41d62857608cce847c16334e4e07043b41697485f004322e1e5b147e97071fe93123a9fd90eb2725d40270bd36c27549cacd6ec7f7958aebdbc751c5d603ea9aad2a683300bd408cffac66742bd73b2ed9df5d3c6b6d280ee8c053726de6ad5aa9b4dcc4c8ae21af65fd4d7adfc9e4fb2ad3e7f82ac3fb05ba6d98c3a3d7e4555618d268441d82e921b8fcef2acc0bda2002d24cb40aa8f8aca4b84b7a9b02e80dc10f9724e04ebeb2237bd0b7c874e3d73a9c3263c693f4142b62ac0b2b2ab1b6543f0eaa85accf9ff9b2d6eef36a0d5d6a13b3f2bffe784bac7e6197967a715aae9afc75fd381d17f7a5f89eb1d19d1d53f42e1b42a1ea7cbe3127f8a3ebc2d59f52b32c2acd3ff2aae4a0cfc60042f61d5af60045a7f4f499aa6f3bc04aed4add0783d2c6a7f234f6957e790b4b12ef794c7c206b1c7f174b7e51560a67f0f67b5ec359e9d3d5caa1903e14e8ec7ef2461b5a8f1b40c19a1d29909f12a167f750871aac4b7b1d1fe95256902c2b9853c12b6e76c6a1229693d2709feefb25e3aa8d6eb65100667fceaf668c14f8f66050a6648fbef5da9e0a5de010f4e1cd1c44773893bafd664597d5c155ff582befc0c8c1a31030f0465cea7fd90372b068aa6d26322b87ed1dd620dd6c06b40f0e7cb5d1b195de5f8e931ab30bffb08db794519b9082ea361fb01bd00c36390b8ea8073a93528882d9cc3a2609f5974e38eaecfaf8e40db40db51cabf0415ce3e147dcbf9152fae7e0d9bf85298c730cff062198e79038975fbe2bea947d0dd66cc28f9ed0fbb91b2bf4ed1a1541597a71ac97143e8d44e2100b264f97d8b79e2e0f8e668dd1574661ab94cb07c0a65bb4d58b1486edaa3de20cba334f582d19a27c7179914e817af161fbf921a2675243f9559944d4a137017881f6f80e4da951a48070959a4fe72ec399f726060b5b7b1fb39065d966654fbedfb9e5b8531cd1e39248d01835d5db7eb56107b442498fe25cc6714226b8e8158f3ceda597f6c3b6bc9e7f802a8a6efaa5364d404c5b672c9dc443d66e3fd9f0ff75691429464637ca3abfac2e8e8f9c6cfaa53f05615aa2c17cfc1397d7541933c692d946f8f553fa643b809a88b4d3ee8968c4ba38882085aed0a2b485df0d0a76250330d95968010388ab1e65e94ac73b3930ec2ac0d86fc282cc60b1e6884c96934b9db0c6e85159d9809c59a239a1826a3780723e285963af4a68d43088ddb0209210e6206a2e925755dbf6acff9ffdc3860044e8d05c350adf9c39ae920c9e5223e811b6f15c9cadbfe92ef65d7211184f1320e39f7934be985f17ce224854dd0ec8225aa8fa48287da5af3a636ed6c3c762b9dbabc07e5e7f734eeafdfcbe8f9e30fbb1b8c81841daaccfc2827826aba77f69d04a0756e6aae3819e25a67df89e97a2ca3a08db9d748784259a272b76528f69a28884d7176f0ac5436291c074cfc7c85494f83b6284bf5333ca8eee5045f0812e8c6de2c007c94d92b325a56addb5664eed223e6ab702513e2b5d67cfae77f53226217d01a1c655131de496cb403eaab08b1207b0cb5715f86e99fcd3625f9a43471183b352004e392e1b7df34d915908a1cb7472011cd86d08f11012e513a02454bfdadda6abe26d0483822eb1ea6ed3102b28c280541b7b910da526576f3cbc52eb982df0134e44bbb821f2607b53ffc30813f7f41902a109469d1c9b6983fced1c2a9780469da57d883da9d7341d34dc92602b14d4126031356bd0a47097d645feadb8b9d1d02fb583e438edc86c221ae1ed18043815a17b9089012efd9a0016c5bf845ba6c5cc1efe01f9609556cfffc25aabb7cd5ba90314ffe27fced5e5b621b030959b34729c85370ef6cef10c744cc4ab5f53323c5fbe348d68bb970e39dc5441e77f10fcb10cabdfc90238a4f0a9de50c1ac4a5d2d3330d5520dcfd543cc6f018bef48d18aa77ed4037ed6c244e8375cc34192f30177b598b018137a10008021326df22fd4d625858ef090a032367a150bd149401d65106a32f9747a0d143025dcc421e36b7945dd1e20f6dd17100d2f6a69d3892f7c46a755d5edbddeaba7a250b67216bb651c153d70e66e8eda8b4df75fc0ad0f4f696c9c39c4fbf4eb24f7d71e1e8ad50bcc68caa55ed937c64110b62646783b38604cb3e7f92ccb77622be8e03ab437f16e4e5a0f5706931bac5cbdbe3cd63d15dc9652216b0d101f03c21999726a4e7606c9e3469c377e098c4e2f8918a5c282e5a410bb47f1950a3be34a35a95b88ebee1956d265b7086d56f5e7ab12aee9b0f980cb6c82c5ee34fde484e865e572d037e196d8dd030f3d21f7f291e105ee4e050039b79257004722bb87829d697a067a3224450ca04093b130383307469ed986792971fa63e23f020f28c4ba7401f7d048647e2d2b62fd2e03a9d9e6f8f0576177046d99f06424d78856eb59c59058903611f7ebf789db4d319f436f0c0298d27c48a69cdfab365f885153db3de59b7e617083de6408e429aa8ef2da0afea0ca48d615152cd8dc14b09dfbff6695caf3a37c679309e6fc3277a4e1c817d9e571d1c129e8a928cecb397c6a626afd90c1a2241b35ddb10774bc5e549394ed73fd75ca4d5e6d7c289ea623ea872f944ed22f86746e6effb2bec59b1311e5379fcfa9d48ffee41227902fe08ac1e6621bd9bd6679ddd9972fe080c5bed0fd913fb5394d2749ef5e4eab7c027ead97442cf4c264e97acf7004aafc64842d33f95199c4084139a0ed626e4e0dd69d61ff120a119df05ffaf6ed825434fcf98e6738f8740fe942ce2a6814665dac06410e327c256f919ff5a83a66be09172e67f2d1ac84f33fb8a910db437667aff2bb382e8d999fe8c7b625b4b48471c60ae8b86d9f0a0eaa0fa2b40585612c6f35b02dae31a6533fc046688fab32ff29ce59cbb2b18626efbbb2e18cf6fc9b324f5809097e9fc2822bd8e2a5306225256b600bb8b221f0ad74ad2cbd0b4c04200b8ad197386c46545aec24512eef32c01f5a52bc350d759c77068318c9a6e233d7bddb73a9cb10d707448552b98a9cb8c8b66d79ed92363f8b8e4097d5c30640d44476e58b1a6354090296aa49aa6201e2052065815dd7d3ba8da04ed5ab1927578b1aa335854f5b86bf76a850c82e24edbd776d6155e6a8fb82401ee14e25ec7915c363acb3886f319812a5000545747c03c65fb48aea9654042692783fcc98b7ff52528b387bf3887e0ee40ed9d90ad41e587db0cc1ee76a00c14c37ef00138e5093cd0376d0d14bd531ad20838e569fd7ef2c450763f17a1ba87c121b329016a5719199d267557d49f0f7c3769d2754664dd9102a812a59c81557d6a9c4d46a1fc23f07406a32dff7b4b3bb210e7a66e4a76d99c58a1c4119c1919c9e6dc3037e523dcbed243dbb4643afb65093f451597c7e348a78c9eff48b33c59b075494e86f28c76084b36e74a9f24e63201e79269bda7239f036c951a0cdf3cdfd8212cf68a7557a2180b7773b6d0c316997f9ca494cd69eb682cac679ff206b3e87dc00b0986c401acf9d88e6b764033af6b5b8943d8bb03bb0346e77ee6b154a63e48b7818b518d70a8fcb04787c65ef80d35b695970399e7aec50c475445a6f531d814bcf2ab688782739815361bdae3911b25a7486ba0491bfd368ce2e218a95f85740e16e8f551ff4ae8da07835e531608033f2dd1f3b1c16997b60dead4132ac30d5eeaa8e8ec0aa06fc325a196e9ac7fd88eb624982b63c8675e47fce12395afa377d04c5f822511eb773759d55a3b66b55ee392349ea1d187311bae7ba42eb5c328edaf5be0609a83844f27ab991f529363d5bfcd29e34b30d9657b0bde63e499d641679fd0d1668eaf8af2c0676604b2bcdb6a4876f2acfc4e611b244d59f948505b188a1b88f07c837f3591c86c2a13fd21ad8273407e2f46ad0927a14805897f6b89ee206feecf4821d23b6ec7c3d2c6c75e9a0782eb16aa1ae866fb378aa3feaec58c09ca4a11f59b2f8f1451fd19829750a72b6347b2be2f057263f2674c08ee2ed6010a6130d452db0e414f421794c9a3fcdcf7e72e063f70051556169e9d175eb801940947aebcd92008a5bda9e112465d17181b228bf9e795887e207a94e030483f03e3541629c31c2776613a3c84529b972191948bba7aa2b182135810af852c75251fb71e6a07f443d5730d37ab175c5deb06433b5bd5f0c8c9dc00834d4ef16753caf42e16744e172ae48bf6913cec06adcf60773b7ec708eddd524bc51df953c52270e043a5cf86883b626715ced99c1b8ad6409ceda942ae39498da6244e62b82e069b673bf46d68fb9ea8ead26485e78afa0d769e5c472c780e2d97903643834bb90e9274395dace6e9b24c996d7f65d292dd1f3e1b2c7e4984171bedb31ca5d914c194cd02f07bcfa1049914e47afaaaccee97d390a3610f79a0beb871ab7d39e109a3cb0cda62e50a3e25da757cd7221194725809b7152d2ae2ba36a2c544e08cf6086bc8db4613c411a9d52fb15d3fe47ef7aa21ab4c71b1cf6129ca6345bd3ad3939d6aef3a84eca1c2649d938ae22e42c97b672d71942d78dd237a494c0f36a79016ea6dabc2a1e679205fc14218c590d842046c41877e1f3692f66348d85b45a0ed91b09ee640dbc5395804a6cdb85745e88ababed9c3472319533dcb1946715b0d501e7e3fe21f2ab0536fb691efcb990afb78542eb1216975f82bc39e4494fc8a3b6b9d2845f6265862a3738a1332c2691d40781b08dc00f99c38806db1782ca48e1f1112f3310bb5508181cdea251f3cae6d5425ca4aa0d233f07005ce838fc77d6465025e473b610052ebca09663ee24cd5091311bc656c4c9cc9db8ec6604b3ae15c70776332bd7b3e3e64e254fff9c82601dd3d1d20123aaf946a2c429a95c2f80cfb090ba3c86396e9eea6b5f4314f0a6e4b334848adbccd554f112dbc89ec6d39f68fc7e219af43da64b547843174501690f1469df5419ff9f5211dba7b53a55934fb328d84c657b6ae35e0fd4ae63ec17990993308434615f62f1bbcdc0d04ec72e548f2600e269b29f22b40e8dd26354052da1e83097d21c447371f023270f34cc7a9864cd48829ab7ac19a1e30ab8d5d82f1add7ee16398d00cad20bc222356f292c106abb884c11ca843a2f4452f04c2c05e5910e454617dfda8bd5d564ed5d6213bc91f522d318635e79516503e33dc09bf8f1627a268329a1e7338acbc9647aa680dee4fcf9553871109e2715ecce07f5fd4d7cb365f44496c3f788881909e7fe60ade1244fe3d98b8d798a5d6d2e3101b9e35338c33e6b369fa5acae6ee4908d557840865ebe39a0ca622d77dcb8f758f1b4495ef2f9a0f7a0c2ed5d0222663a7a5fd727af8699f3b420db6f0bcadc116793757f46f979c35938498f2a028c73a46dbb1450920fdbea559c9a24a6aadb54ee384a1990751a08ea614b7bff752722afa976f77b4904f5466f5345199d48ee55812e2a57a25d87a25972cadb37da05ba8f247549c0921a8c04ad37d5ba69a9410a91bdc633db2a2fd2b4f157bc6a7d78bc8a0bc5513a0fbf1b74b1794a5a1896301f4586836dadb6fb33d1ecbe36a7a71d247c4fb6a3bef6b10371ccc84f2cba931a63ebf653dcfa294f188f99c82817e5ff0d7236e7311ee5e499dd09b97d3ca6419f11063468cfcd61d12e1e441d3d878c8f51302fee2acb1f928c7e8eb60e7fdeff8c7e3e992ca3be7480ce3f9373ce072da3923d29879caa9aa77d2c9ab244794246a95014814ed3caa8c0b11b3ae9071dbc01f8ff0340ee4dd77bba4e3abc27d996dc4935ecee0fbb1df8fc9436b607ac604b5e49b41c6ec7f8ffbface617b002978d5b89e220dc4ba23a889e9d39871ee2c6404af7fdffaba6aba63785a0f064092b0529583c4a56576f88c72371d82835d3eaeb2e51b32dc4020b03482f1ae0a06e96ba206a4a72810853094c13e9f5504105d5e172604643b3c3c5c8700361d9c3ca1d940de18ad91b3ac0e310b4bc6c36a56d1f63494dab2b5aacc82154a8cc79055012255c9a00ba841efaf8f8e41a2640248a415dd30557125021823d0e93e967563c58293e7c4e7df5d4a26e881b32ff84c3a3e21eade3799282b1657fcbc725df54ab35cfe59cdfbcbef0da9df9ff9f3783ffb74f904bf818571c47328ab238cf6e616e5281534da24d64a432ea4ad2287486ea0f5b8335e6cada9ab3930bbfad2577f006dd93f8795473932ac5b24a45b9430c2f9378ba0858df1a48ac2e21419d041164d30cc9a5ed8d2a5f1a2dc1642352f226d46a3cf6efbca4d981d1fca672113b983db6e84b292b8768401b3ee7ac7ca7349ca93ee692abbfab1ebb8b3eea4aa80eb921d84df3c291437adb75ac31d249668bca0fba2c8a742af41b95f6d4f74a6b28bb3edd92c7b13bc5a051e714f9941f5d7af6ec0a66f25a103b4f999d82af7c320d9a72c1eb0b6e3b97f570303a567954bd2971ac40bd435971c73ec9ae14b1dd65855238907e9b64f5590f59861dab4a1b107cfd611893b6668f48319a384f16aa7fb260de00c78950df20c50b804f6bc65ea26d383df4d1b20763ea442f653d081754362add2e209eff586899d924b1429ac1e2d263ae38e4d4f398554f9cd36da9bab7a497f58198f906494d0072c561db4788cdf3132e234716499a4bba03ab61937ea85912a16570b9baaf800de140cfa96e6c0a0de0653890833ae61a7fa8d91ffa0fcd616d36d50cd509b333c9a7bce1fa27b4c56e19b04ee17b5f034db023dc8d6f1f2d5642ac7ac87645ec20035b757208a4e2e0f7fe7bdd9866fb56315811f6371cd31bde2a064f9bf72f20df04c7d3aaf2276c7775a556d718d49185370ca6563d4187c9eafa7e9f42be09660f165c09e05e420c218ea60b08a4534531b14bec31102a6bc97d48c40056488b777fde8d33c2d819bd336576956f37bb4f7961e9dc2f3120c5c208d28e91e50e8eaedaeef1283dcd896fad25acd9acba321f267b22d8f7a64e4b8e24773d7265cc539c38d40201067cec8f74176dce9adcbdf88e5e3c9c01adeb7a87e9366816fca46a8b48ee9e6d922859a3396ca12e03d6f3ed193c184ba81954166bd530d82af21a877fd75741fbced59328747a8e3923210511d41e0ebc907cb7f733e97e08f6ca77c73a5026ac7bb34760b2809ffa70464aebf72a119f029646b3b82cd76fcc00bf64e2f10985c97cbe7d9cee0d7bbc225c1ce6fb96e695f7ea7f01cefe130cfcbe317a7f55f0a6509f49c3e37271fbbcbe85eac3eaf6f6e9f679b34131af534788562980eb1641ca8588e67cd1a10febded4e1804a87ab8be369957a268faa95e9867d03c5319a574e79c0c6cb8f094d2778235d461ec5bcc275118b50d061c4c01fcf7fb50614a2cbd540da9b0f3895c615cb52caa87464155a89a13f7e38e5ffde138ce61820d73ce1ff5096a671a0e4a1bd5dbb286af39baea432f41b5e7edd00f2eb7ac9af2f8c2ce2b2880bd95cf877d09910d32d0ce00784236e994ec5d0d16c6412a29a0fc720630a9f193c2dc3f0f4ba847351385303a228527ba0282dc3f5ccb3948522c9035ea18b57a882f048843e6dc522b2cba68c70bbf4e814857013d3683837511a7917dc0c957b72013cbe211d45eae044359bf05cc414091c910b47262455ba5ad592797aba553b8b5a24309258d0f468e7d7924f0f91cb0f78c3442e16b00f481f7a52f80923c71e10ea316a02985fd05edbd9ab4dc9f035890634890a46b9bd44deb0fe7293b2d46fd68fcade64425e8b28174983fc1543eb6754de1de58726291a4981c36b9546c7296a11f6d61bb0f73d9d66c94ad9892472b8b6882b5c99640801c372fdd78051f65c44b14cce220b99e41505c4155c9a014256a489dbceca5caad1a8bc8a05f482f2650ab03403c8e5603552869b20ffb6edcff784834490148c2b9a86a8dd4231b6c1222b28a189dfcb96101b283bbc2438e83d7f957b92f1db309f4fcdbb9ba2af37f02c8a7967360c9efdf53bf16f6c9ef172c94f0b273122464d8d32a120769e47c756e9c05d84a148407c561b16c184653cc48361dadfc08ed077647b722e7c3f933d5c4da37099551c55f8f63350158bbe3d5c8d9912245e674d0a9196850890d5b1fafa52bdd28496a3685cbcfaf4b0cd7940a800e9b2fb32484da784708051fed6bde9ed8fd8c11039a13e77f49c87779635dd33c81eb3a0a138c4bc1b00e43130d569c0c141c3780d949df20f7b1c1d4c7e1051145da680b4d54d3130b0c29c1459c590a7248d46aeb35a2d18fc4c7d8feb33ee193ce250633bf899fff4f4f87140686849c1f935bb5990d962c2f5822f0b2e96a430c324757ae3385a73514350e95d208e34b28975cf371b268857a140f80ce8c7c647139d1ad1c331c128a7465e08eac5f9140e5b48e15d9f5df0d19ae10a68091530992d1020367b91b19cdf44195b289c31eaa50c808052178164e598e4d1a56542e06a9075bb49ad3830bbe30fe85cf7e6213c79888f4d460f54ad6aab18f82e474f5b58d4a16dd7ca9c71606639deb45712113e3ab0a809dce692d7821536cc281e10624a0e2cc92e73ff475264797aee2958e9149ea34e70eaf3fe06ea5117841a457010c3d96930e0f4439b06e6eecc380ab3b4dd323194736e43782d4f5cc374953e9769e862311090467c41bba168490a7d35942cb8ea154b1917655c038984b5f869321d5d13449f726e68e1cbc144a69198166c763659be5551e0473d6587e19d8bba368f622a20cab4cb4c1bb4750649d829f0895537955c052b0c4f924a30ec0f51790b9da5326dfea30e6f1907f186006edf8faa0b5d7ce8831a4f0279f7d8266f40837a2ff3c071b003118b91b519837a1c438076f557120a28c9deb3a2c98511f60f04f069a5fed69ce1d4ab86750ecdf55d2a2adbb9bbcba01cd2afb27be0e70ccff065540ec156530b39cf2800ed146a5bbbb9e4e0712907011e11da7b5307d12da2c72dcdf25b546b899dac1847d019dc0583b06d037adfa82c228dfa3d2a42e61618d17e26b72234fd751855d3b80f4d15b3e9528fbe3cb6c0baf3b87f4d4c4bf979cb28cfa50cae9a278bb858d0b3aa42da39e33205ae92111cc7cfbc33b621c71766e300b43d05f156257c40b87435228a58144508895ca3423a2e15716feac0e746f9224473ed0d01e91934de6f97e5cbd2e1f28a856969b7c71ce44141c7503d14f9759579e76a94da37ed4dd06881da0157d5d618af1a1e58e3dd13229cb7ba490f0343860d71e32d81e41d323408590de3ecbbcdf4de874a177ac247249d5f8593d876412de5916c4a999de9bb6f1ca26e8379030c456a5f6bae0c73a34b80a000d347bc2603420c423870c5a2cce2342d6e392e2ac607c4634f915342bca2e9bc01563f927d56bbab335680cfd2dababc12cb83037e985427de19361789f83d9a4e303b420b718aad66429ba30e6004c6a78eb3372b815f24e5cab220ff1bff90490b25806dee058035d73d1ec853ebd2a2c41d1c63fbeb3f1f2999ff39799ee7241b674a706acbd12519f0679fef7fa3521ef60c71ffa66623c1abae18caf22c9267963ca7284d45a450234b64f748de1165a047c9e4852cfde905de85399d7246e7253c30fa6b96dff79ecfc7728d7af6e719bb8d91bf67feccbfe17bcaabf0e619c9b11871475c261e7149ad444206212c510791cb5f149514e1bf38d4c845903529ea9b5049d163edc26a2905bf5f8aba0c7508174136887843b5946206ffe5e82082ac7d51671165940a971c0baba5144bd392b48eb0c08544cadc1d43acff84c85da0643fbdb5c7313c7fc4862a2afbd1dec1e409871a931cf455f689040aa0186418b5737eb5944292db259775815e4d1a4ed74ee7107fd144a61982a46d99b25a6d832d10ba7e6e4da8d21e6490d6d3beb2f1871fac0727f21054d002a62c6570fe57d94c8d39a54307a522a01ae122ec32894bafb4148eb434351c63c07a32c74576671e4c9c702f5c6a5fe0cb290daa502af605c48930f26ab228f199f10606eb11f51b1377d6c52074137492c17d0ff0e918dc1c7dd331b8ed1fc09d05f566e442506de9ec3f822cdaf97598bdb815271f13121d131c557ce07c3e07a8a4f82e280cdaee54229124d9e4b6f9bfc6d3af2d027f40fd6543398d5a9328f668b8e8cb833fa03182cba4115861910bf8758c4f4aab2f049791896f84ba3e53a10b8b24bbeeb4b4f529907f3291d9722abfe0599a8fecd2143ea39c48792b20e257f2af542fcdd82c9c2eb8d1d3d82eb9f1351109e41472b8a21d99bb6c3136490aa1137a7e8ca87bbac9872a73aa6b45234bac28c2c55e4beedfff20b089fcf0fd6bf2372478da81424abfd7430e59b7514849d5566406d85f87bae3e127ff68aa4a80db354656efdcee046ac1022903a87c13222f10920bf7a1a049c3b722f3afdb24f3af372b88c58c7ecc38a5b9b982c4a8b02dd17eea41c9e75238367099089bbea80ec1a116678bfff84577c656cbb04950f145c83960167d176686ffffe40c3aad5a591199a3146512e7706a8b88492956a1e1280e84a835bc58e61f11649a356aad03611437331a5a36155a20ea218accccb7a09a12180bbd6038ea66a9be5bf087ae7908779f4e333f74dd3e631b4d3c0e19c6c1b1cade755c6b8d1fdf3de7ee991dfb0796b585d5ea37c679b9ed5f1a32cb5c044643a3883b3c59653da4ad031661b3e1072d4577787474fe3419af12220af9c348068c24352bac964168cd1c6011bd69f53913f14a14832900ed0fd08cbd8842a020e3753c1db03b6d17f18069467f676cdc01de656a2adfea0e3d2c9e44d6d561de7ebe79cec40ab8bbf3b844eb6abd9708282a0b18bdcad3ce489a5369a9bd07c1ef64415eab7861ce827abedf49f9782047f569c92f43f0023d33399cc13806938df227dfcc9d29337592845edf91f3636ef23229038b8fdf674611979b5650b1dd417556f4e20cd4e578f8f1b32c1d105568e98055571832765d71d9151db05a2e00e3d8952b3ae0ac3018c3c436a24729842c80452c5ed1011726f56ec51ea3d66c0c09cfac3d5e4a9a15ba3529268c5630142cd32b3a7416b04b2e0065bb6d80d2c34ca6cdf9845d48098a09a3d0eeddd4552e15a19c6c2eec3ae84af3b8415c31593dbebcf4624e464d8144a41d7f8aca60ae6a8631bec2e78a63c22e06b83421ec0760678c1fadc2c36ed0e631847d8785b5f771ff71eae616193c9314a166aaf1a6782e3d7baf21ee4cfa4ff756213ecc017d26419d3134b2688b35668f165d01e78c510ba6174ffef8fcbb77cfffe18fcfa73820a4f0f6944e815ef90661c2c474434e59117c21eaadbec519755aac067ca5d1552c580daa40888680621d429eeaf023436cf9611c460d955fe798e0f483f9fb51190f00b3d5a0730758da95e8cd28518eb94d329f2970943ccd6298ac2a731b33c599bbcb7c5e6a1371dd485a68378b8ae66c498ee893de4831abe45c8161a58264c427db37aac9f0f0e5dfb14a3d52eca02c2e5b2f98d8dc20a332cd6ea69c96d8616aca6724cef9f7c83453cdc6079f4df13bae842d425792830ec526307cb3efa8b5c761201ba23ed6ca4551da3711a5f0d0176e3aba59ead1ead1d7006268f8af1333f84af191ae5044e91cb6c09aae58648994e5f486e0b282ff7c4ac33d2d5ad52643e69c27794cce9a2cbdfbb45b1a7d95ca39d7945ec6ae5ca81f17f7748137d0fb6ed441d34463b1502a5add20dc3f852969adc48754e179888ca367d5765433480580ef79d3c12426c06161079a4a369352db62336926eb1f83d1586ff15ab72bb3ea6316e165c0b68e606c2e2d6e2d651ccce363eeb3ade4f7632f7e2e609ea60aa035c3a27feb68e7ff208da651bfe6f9526ae7ab8788758571cad4d37b5f9983ecb80540af54404c90d86814db19a2aca33d2214b9765ada7c77c3e79c5b2ef229ff6554c68831a55094918b134e1e0ac609de7c77b8eedc196d5356f7a004895d77bd4479de384ea0872fce606d00f8ff0340fe9f6a55b57f37eb9d402014a74ac99ee0f146cf052c7dd9ec20d00072b8dc145714d5f9f1cbfe9bdf5d502864361e4536028b45e2ea5495e8e969312f8837ffff0d3154d5bd1d677ec86f4348ef23dc2647d40885b26bc57493a305a1f0874cf9ff37ff1cb655ab9810e6818b777d1e10c571dd490ecc0b51e44575c3dcebb85c9c16c2356f823e3089f45c69ce389032d63b1301442f23a5249950fc2a6f725623c12f20babd6ef0c1ba3dbdc9d0ab6a407f7a12eeaebc05a37178cdafc17b61cecc14df5c6195ea0c8fa2969d30410170ddfbd7f2a8427da94b1502abe92bd4a97128bff1daa22ed22af14baac35ff22de0d998f30079778d90d3e298211c09ffc3cb6f69abf391b0c7724620b1f6f0d314f1fc0574e424464476d6438fa59ecfa41e10549c2aa0845a3177854b898ca79ce57791d51c0461658d1d062698c5d233bb0c76f608d784d3a89c6d3a181c8186e579c2a097271cf40ae25057fdfdaad0bec8ea8b3c7e75ed8c57c5f9b19fdb0e638f73e7ce5aec36bceb4e5747406286a9708be975b804a268e6a266150a001f52aac2df893dcb6eec9d13a31535f9a8d785cb895f425de5e1a749ce1c40142eb6081cc9e13d8685032b1ee0bbb6c00c86a234a86152838a0649f1e389277cf8247e6c84c5fd90f2517c0ff9fbe890deb0e471f8463464f4ce8a17d8ef2ee0b3dc32167e393226fa0a83bb40ac0b89b1a32b87b52292864f5b12d18477367646dcd2482ef381932bf543d689ff7bcaa2cac594c7c5f21f9dd8e09503baa128aaaf4cbc3512e9a5ba66c0abfb3778b70378b446bae237c676c10fcc0517828177818cbef01647ee9d852e8a173d4ef0f0492294c09bdd95c223222c7c890f40b9d25ed1dac6d3237c06952af98164b0ed930f99bf49a5a0249ffa1e64e9503eb7766b20004a9d12ca6003a7ea8ac1d9a81e21c3f6d01102c03b0e0e7b85a99e318922ea056d60757754ce60bf2d4ea0a3b9ca76305f6f7c431f4fec3c9a42abc5ddc02ee49e3204b1530f071f0b37b1056499b7f24de16cff5249dbae185d272bfab1eb100e56cef38fbe048b8655aae49a1d99b61a924fc065d99a64d5d8e8597d236710b9cad2bb6a2ce89419a58e6d31f7a614e1ff955b512d215847dd91c15c42d638f94a13ad3348b3a8d626fae7e29c8364c653d778c4e79b59e94bb050b03facf19811845f69543e6ad39c7d6d8b6481a35023778f287f37296f99968048529d4320fd5927b43f88e358d0026bae1fd3b5795cfa1ddee14217145347c6eab31db48df1abc764e408190725db8c5a9d6f08a62abf5d61309693a44c73e66edba55b757c3d80a88de597cda54b37b788030986a7590ae5c1bf4dd0aac7e169c6444bbc18c313d9118d5011a3138fae99bd9f55375da0cd508879cdf886dd73838153ee20fa24690a138ae4aededf6aa4ca55b606cf3882a66df42b87946ad2ac43e4864a3ecc897c012bd405ac3c61f5fcb48db3f392f97c50285004c1d4053bae6ac39bc27982e3594dfc8e2a094c1190491278cc5a5f8c8efd478ecea1aabe756b7322dd827bd6f515f071f178149b3512f5d7cf03a2089e0c812b653c5cd538ec85f210a4a05320e4ff2d3fd6e5fca1b61f42043fc10985d56dae0c6bf4a9e3b1741b55e99bfe7ff25ab5e74633bac50e7c1a7d1460d14b61c0cefba01564e31b2158680a877b47c0dd5a8e7e162e8752529168ae7e2815f7f6235b9001dee609678cbdd755148e802c81b1a42ddcdb111b01473482f5e6c6b78cf25c616fa17cc6d0cf419f0ca9433b37d2c4d234216d55db1ef60e5a5f6d1e3adb9d72c66b06477fe21959e2917a2621d39a43f357b8abd576b32f577c149f43101377e99c894fbbe6f1f74a094b15823421d33d45b0fdbc33f72a89c849731f10f822f9eba39335dbe64c988867025553e7ddd1dd46705a2679731c6385220147364aee456af7a36ff22a91f0e91eb534f8df7c71c4c918eecb13fae78d517f1b03fc8463d0efa5e3e47774d65ba26eed7c2adf30e3e43b8ef3f9412bde86edafdf891987efe8ecebf0b42eb3f2468bd362f9109019e683b35fb3ed8d9a7717c4db61aef036ec8a2decc82fce0c33aa946c860768d52b23dd3e3972ceaa3228cc16d10b94ce72681bb0263a8fc0d80e2300ddd955ab5f6e3f98c35eba675936b61e8003cc067a9e7b3689e1a4707b1a1cd17be81d3cf6f3a6ddc0a10c5dacff2f03ba3840ed7a81a4a7817d8c3f852a5b8fcebd30b6e5d5187d81aae927781020b93286c1a6e1bad3ca4989f7db58f660b5d09ccd5e2269b7d45b8ea7b34453a5adf3392f9a7636c9c11d9d13dad688df6fe56b49c9dfcb3908ab1c66c951bcf8bbe05a869cfe81d45560cd07071707e629ab2a4e0b0f3f6c1fec27982112f89eec379afc9f0a94158a36275126725d5399fc2271a50ea8a836efea6378d83ec4c5d22e1506a9736d2c0af9cff9a90952cd65cb5d2b210dc808bb5a6abe8a1bb6c60707532ee279b0a8331140201ceb0785dc307f70e541e33f6a800a463a44af182c4d65ec3a8c8a85de691d9d15f0a7e3e048a2cf58fa18e015b3f4711983857a24c97d3dfa0c0fa60d2245199125fd8f79fdb27d31ebbc7ec69ee02d7eaea540ad109f5f3c529d26d6aec7fd574cc372f5e8c781d3c3a42c523b9ad3321d92396116e131d4c6a8ab852bdc56912492e95655958ccc0c72554c3a7db2f657f4d69abce9f7082faa4b55375c25fb165f3ea5aa53692cbf6626ea33bed7172d8117c509939f3334e32e8095bcae5890ee799f8d09ea49bc40afbb9178a7bd3eb44d547f354590404ed60a05db3c4f46f93762aa19f157cae2467dccbaa07f79810ac3cc7bdc4b87c1b617c8a34199e9e9c30674703eb9bb8f1b49ed9cbad0c12033cda25536e819d202ac1b3d3ac215dd22227f7b134df705a564a202869b64f4998d22b45f6e53269d8ff3d1a6de4163dc150d3647dab198ce1038e109c461d55ce0663299f274111e0a67e321cb4d0b10fd56be9e87421f6f12d6d5a7619c97d9be2c1422f5cb4704a9fe329fbc53037f41124254692936929249324f2dca240cfdfbc99bf0749615db6cf935f7d9d18181c4bb61821aa0a86ec31666817206b72646152a6acbf484e3b6051e48649465bfeaf6d254b38f50130faf1b388540a683d29fac0648601330162d6db5e90b9547448c92a4286ccf50104d7b05852f083fca5808203b55242c2600716d191b37ea3bc5f0636c5788127aec5048f873c9131a9f81e56432dd838e3f70824079f7e9755fb53cf6d3eb38317f0b4124321a9013848f80a106334336afa0e3d6e61d20625ec65dcb42ce19a2bf4fc330763269e6a48c5aa7e1efcedc1af5ff8850b66cc5e500939e43397c2450f150f0f98aaaac3c20852fc508d0ac43f21dbab09d2175860e9f55798301a02d2ad24eb0a242c1f02528461d8d5459014fdd760c13dc47ba14b07f8bf6b751f161b145d66d4624cddbca104c0dbaa4172bd82904d0d08933b183527deba069806e9598abe2ff15ce714a81e96d3e86de53784832340fa3893c06b7b444cd7983239060a4a2220c8333892150384a9eab6c4e0b3a136316922190f2ff96be38eb127f462facd44ae8894a1efb712c5edeb34c748a4eedb0d73e289669a7fa28ad50c145482dfd493a8df2d713a5d15986239fd9168011210fb996e9527b860f0eb13421d143fe7454354f00b2327125cc25c2fd24e7b554662cd92730b9a3c131cf5224bd178cd7bbb4c6c1612b567d291b2035822021417ef3a380c61738986ee0e72579123d1d1a58d3de5c35f5e611a05aa314cacf1606fbbf4039ab4489b1e23110b8dad52960d506194d1b51840a7ed09dc9d490fbbb09cb85c6d438b09ffd04bb51ab80245b8f266c6600ced24fb0c79ca8e088eb7558ce8a1445ccf4cb0566b22119229038a8da533d526a1a26d2197f77f8389f9fcf23a2542ee03ac56e511d41079283c6013f2fa779946a8060690c8b6f581c67b97837c9978f2245fbd4dfc82400fded0aa935c096209e65a44974b6a53e12b414437a6039e12173326334b34d247e37b0f4b236c8bace8828459324e0bda4096b6707d5244d65a4ef40042d896fab983a77fffce8d59d83a24a976547c6842cc8e7c9d2947bde8c5f4a63cf8e9130cf34c5a8366cdc7092d9761c924f8dc037ad735ff54ba5435305c17355dc913a8c8eaa148806f59a0ee69b2582c857c458e4688de95976522250c47d30dbf13b5dd612de8445dc725ee1e85698943ee51cdb1e9c27101ce9ccfb385d6fe846ad49751f24a1a932de6371782586c4152338dbfc28b466e5e474b9a4123d14e917e950466037f1254be487039e138b680f318a8f000a3d4119402f696a8f1012e736127fad135abcbad587301f35942b86c023b866644494e24413c7a2d6f0d0e894913b29b93d48d3f31a835b7f877d922407881b02bea227f28d5993c6d776ac5f53f7a6b505de2aca58563163738788804cc26d12c1c37afc052e8b9bd44118ede08866ce4d46b408224739e05d58e5527cc579b62dd29f0982eeafbe7a0ad4455da6c613e0168fba230fc75f51f21c902a096eba5807738bcd93306bcc9f482cd4307aac9ef1cc154222ed85c31816d84fa4da9a993e4ee1f8d08cc35b795ecf6b3396d5a979647e016c9e5829092b868e5531edfb91de503f0ccad8edfd7abb4168d078eb02c8c5189940dc51ac294bab54ec8a53c1c5c510092e546306f0439a3cb1040d402aadaef47687a1256efec0d4075750a5da51c7021e4d1204c5b65196b48016e234aa07e7a332691ada7078aba0bdba676cf04347ddb6a4361f587596c2db245184019ae01065bd8ec6f3a0f0767bbd1b09066c944454c84834c5fa243d2a5501740326803a3ea9fb838576cd27f2fc3e5a3da3566b6bdb8c588aaeea845ccb6bb2a5b8d0c1828d2e365e496171b6c477a3b20666cd6f602cf17c60d31a320edacad6d38b53b2644046f454fb7edeea67921465de5442a42de35d5e8bb6a959c5cb2e4f2ed46dfaf9e5245fcbeda7d5d1c575612fb5a4835945ad0ee3f84edcb30e03a0a36ea3fbd46e73ddf5d0f1c03d00f8a79c55d3653f85853523c3d5daac83fbc94cf6bd3edebf0ce963e96f3e6d4e3657199bfd143c9b3e65cd45c7fd7b236481d990e57a5c664951d9728c5ea5cc8adcf8c947d3f8b471455325f1381a9342eef17b2df1f2738b16ae7d4e652886d494d1b672d5085acf45cc77567209051347f4b63c80c7ededf2c3c1455d31918ac79206c7b7944b698beb4cd3ac52373d6f28d6dbc02842e14aeedab61ae14c6234a82df8ff2e70e4958cdd9142ee6e168c5ff165528cc1484b9f5ad90749b660b0659ffb641061d5f2c6161cae94e4049fd72020bc796f84e1ce57a655d2906626d1c3bed2ffffef7fc38c0729b382b9ec95d2ed03a752cbbdd4b2af11bdb4610ab23861d86bb49cf378d4c30628dc8911cfab231f8aba9f71ac1e81f5c578d86d78ef030b636e7cd1dc894a95a061bcbbeb2849d646678297afbe63fd9ac7926759201baa800da266a3717e34352975c60217c17f15bd37b3c4cab9329cb8c19886bfaf4f5aab87b5328232e238a1766ba755a4cf78b32f3bfde28c93a92d809ed9ecf330e3b01684607a705167459ad50618f99d4af89d7578874c05b048b87607e10526845b5950f28a732750c8e3167523a74474163a0439ac6ef304210d44154a2fb728dbcb522898baccbec8aa4a80bcadf3ee8c5a35edcef8e4449b0f4672d1bf43671d0868be9aaeb7938228fb9e5931f63c5be0769730e16de37450455c107b1f04a0f92c5d2555ef8f7f581eb47967598f9333100d4b714a256bce879cac65b8b89fc74c3a01949e04afbbf7b525ea2dbe57d3675e66f81a0d59ab66b333f7c9a5fdd312c14851967299955d29dab2eb8aa2cc445dd6524470822d4757c281f8f15bee6171e6540397d285ceba7647b671bdd5c72c8a61718c062e5408e85eb3b754ab3e27a1bf7cf7b41d3d5e8f6e6f36e39c81e627074b6e83e5decb3d4fa97333094f9fd62cdbfc56be16161fcd43a76dcefb346858d77bf86cc09faae93b65fca3fe9f5630341c1c7dfaf9e1812307974ffddba7f97f9086dfa74729684a68fd34d0f2184506d46d3dafdaba31900cf38bd7d879017421e9ff258dc8781ef0ad19173c7865a5cab54e1109ff1d551d97669da02badd40ca842771dbfbba03cebdf04612ab22e2bafa4b3dfccafb8c81e4b50beec1e57659df90d953f10e61e7099c407aba017036cab2dd84e7c5d514d0bf6b019b38761801ac834b4e40243ec8fc5e09cb069f175fe46788a18199dbe6499505f94b106ed9164728946f2fb84ab770afbbb258676342cf77ca2357c28fd8c7a5e6358fd7f5de202442dcab408ab9fd5e2dce7092b27c4eaffab8a6fa2e037c16322c2d93f62ae071e0b4f7a9c37ae18842f2219c70a436139411958e74d3cec1c1c2724e4dd32af26f3ff0161ed1041b63fc6120a990fe5e2035000be90e3e1e962e1936e94400f06dca2b0619827384f18cbaf18e1dc27eb71b419d4d1bbd0e46e1c9d5089ae829dd49027a9c1e2af9719b276ec02d9515afa8d246c186f0680968105e4c26df4cc0e9db34a8cd5dcab212fde4dc048150b56042865b87b4810f53b68983748da3ce8877580ced9aee30185eaedcce653a3f1c0305ee20b61d4f7767d8c4c3bf5e606b7868c5fd5c57eb18ed68ee59759df00d767bf715d9366552eaaa800204f3eedc3914a580e9ec02dc9f18c7bcc8fc5d0e621f46f6a0e1088e584f01eb7ff9795ccd8de262977b2eabf9f42249e00e6b64fc589b2b23554ccfd0c84a17bd6e03ecb5eb1207e399bbc81e3fef39624b1c3c060f2e82c1ef67f9baa1665291f967c17cc024c2f06a5e3e60050dacfb20616d3053535f5d83f7f4c263934a33046b4e61144e97c42015c536d7bbb4ec827e163d035138faba45c15f22e0478228ecab8e4e2f2d22ee4744ca93c0b8423c87b0ed2fb437e0039a359429ff73c9a5f929cb1fff333554db989d67b0133a0660e70003c6539a9173fca7d9f546eaf0382f36a98f10ff390be5f2fc9b0e6d76fe2fb601aaa56b3e8cbc403c7599c2a0e1c0cf8af368f31134f4cf19a59f436ce38767845e7f17ab2cc7787b7c4eb4700f0274f6664347aadc9f0fed8b4e22c00872c49aec7021bd9faa26845bcc5cf458c79e1c69b917d96567d4b0af521c17e9eb2a8330845bcbefbe194b2d8fb7e7e50a30f45f74545d6437f5e2a6fa934590f1ca98beaa71fc60349d24769dc59243419f7820f9388c746bbfb1cfa6a18627317d371873075427fc351cbf1cc3d2e3b1d193cbc48dc136430d4f8303faf1800c88b71e11bcb364357b460311eb98d226dd1ff00c6abc2b9fcbc644a408ba4fa04c946f7ca8e914c31f54bde83cf131f6d319d7b1cc1d354c51ef6b045f3c1c399852544ee3bfbecb158daaf0f11f89e82420f1068be1a28cf16c3a366732e0c44bd357a41b795a51abc904cc1c211e06e18312ed4ae2673daf77d1cab0763f045b6f9683b55157d85c31ee147c809b27146ffa5d02d004e36692ba98f6537bb4f8d4f4bd9cf722a7dcede9c459125455efe9acb5ce3c49a7c3700f8ff0340fed4965fb52fce053396906e9b2a64267bda7bb0e43a841158f38dc45a3247aa6d8a5ffedf37ebf72d4b1f7702c4d00c292101e2c04c0dd8afaa06139476cf29a4eaee9ab4ab9422766286387343b833a734f78cce484236f44374f57b5a4f6b438110b6258294e56349e6d800c5bfff8b982a0ae938da932612b54f122db28de4b0f210c5914c8d5b2a4f2ee3e46f3b423119c8bf64e682afcc324e61b6914f59ee43955ad63356b6202a92b4be11c9c8ca157d295b132596ede3d9664ea1a3c1b4ec94c70d244fdf5cfe0b34ddb07a0ed5cf1ce17a9b88d11402087943274a964d765ff4d69ae27d3bc26811ca63c0c9e1b83f8435c88df99e990b1e2ab37c1b33f0e08c95ab7b002abab3354cae3726444b4b24f00b68486771ac6ea059cc83d2e8d3f1cf9c0dd1ce2e276743b4b7141de1df37a7e8fe708f1efe392d8aa4a6dc8ab38de3312883eb18cc0b470912ad3b1672903cc2f189f402b07a0af57188e60cdb504dda6309d3f15a99c159679431e94f05d03400cda1724fe9101cc84cd51702b1420d0cec46bef1d0d2e8e5da53b3db905cdf01672abdc36c3838ca8225ca2e543895980557bf9e345499b2f95d89f7feedccc64ab794f828bf33cec1f994e8506c75245acfbbd7eb76c38e8733b6460cfa474dc5f72dfa1de2c5968806fc1ef33ba098c0a8783f8622e3149399b76c2056228acd49533ca826103296897f529ed9a8f91b3869a3650297cdeff243fc249a0da27eacaf3fc95b908eb2e3bc99f39b1453e868c1100df79be8c2f4ab2b9095efd0d6edd493aa264fac3f17a251540aa4b10b8024c2679d0c11ddea895e772386411f958c0a611092f169b28b07bc02b14b3ae753a29c82ae102d2e8cc25b066e3f4882b35914bb0bc6ad1a973e49bd235b731c89812f49bd8d7f0a47967ec60a829a37a2091da617039e07d1c91c27b557b424c4782cc340cef74e1dbb3cd8744eb862963f94d16a5a0f86c60ba462b11ed1a47ed8e66b60fa41b29ad28eb102dcc3ab94d6a36e520efd8ea757d520393969e897e1dd102d36097c79704a4a4d5f1fcd612e93a3674ef319d047693d1634eac8bb3f899526aa4173ed509ba2ad2d263f6116c567710e1ff671f66fdf8840413547bad17b9396d8c44ac82fb6c3bc1374bc5676f0739e2356be0e8d7e01e8f9d2183e63b8c099cea7c3b32e42f40d69d2db8ef529d9df59e9a7b7c1c7bfad782bc9ba70073f157358ba7e157358bba9f3acf3b17ae70317a561dd5367273d4deab001bb17bde94e2f84cbfb9034ed7ff7620eaec92d87b4142513882f9b53181a58c285d65d15efa543ce3f61e26806c888a25b8811c17929892d6a5f023071863fcc037b22c7f4b46d30f79b2782aea2690fdb19b6353de13563108d262d13f2e619163dd20b0dee12e745c7a24ffb10a42c6a0eec36d178aa641064eb0ccb583b0479dd1aa7d71f69fa438a6fed5ba045b9d124e79759d31191d9d20c4c377010ab1957cb23decd08d4886be7e3ace5b1328e816a738441f0e08c15e5e6b539bee3e3bf961363c8463331139d230b5a08929a5424f96e7b1e73174fc69f2344bb39b6b3eca96dae6dfdd8217e05f9d51070e1e1e93a7c980b09a9b8534dcc32085e1bdb6896c93b9c2ac599465f291e261844e14feda117abd0069ccd850b107bfa15cc93de7677053515e835ad37e1ccda5557229e7634af2ecec6d93dca5dad691dc64565f7fd10b808836f8b9828b2dc3a0d07959c5551d18de897be2899cae5d51e057735c11a5843548451135ade143c059e089754b3954d34e5d8de5547b42ec7a5c89a1f0a9ad150890be732a7d5fe384a2d96d839fd2cbcae4a921afe520e3f32cf1196fdc86a79fbf11f59170e3f32f76990671bbf507510f0e49956dc1a1aca92dbf0d55dbcd2049b4c5b360f69c7c1fa52161e7557703610bb61037f1e522c234bffc83952c6c49b0958e8bb105aad74bd8be558985ed80514cbafd9fd3514fa0a6747f8b28113de3658414a46a8d7f844ae26286e5360491623bc4f322c7375811b62d3abe2739c5eac4d6aef5f658bb3185f46af11c15f5a20bceabc4d2750aa32a097f0f25ff4fdfc6e0122009194af51e6a80bbe8b1126109188f2710d669e32a92d9cd4a26d22be30349564806bc22f5e746b5bbeb51756e0f27fff184df0f19d1253900ceb955d5be1b85ca5dbcab715b1b3271f3096b604aaf5d9f52a42b0b74a7260a2d64055cc2453cced984a5feec955c5e4de5fc42449b3b3ba9abbeabb1e022170cf27b54c631d9d492988e2fae0f62be6140507a80bcf43546fd4b20433cf7e4dcd2e59082b3cf7d7bf99a7251096f0bdecc905ed5890249258640e88566b226944c8d86248b700af883d3242415f274401ea8f37abab8f9256605b38a9491d07b214996b4cb7f80b8b355d29c6a4f15e12a8af322942e636ba1af88de58d416f750fb0fe0accb07f3278b08f837bae374c25089f8634b493756f65b22fd8fa45235aebceac1b6f6bd8383dc238f266053ed1e8c8c7e80c984d083257a883f5c230c2397126ff591363412039d1f0f11a03c0d83ae7edf8c05ee999442ac2de31a097ed90492d602be226a2e6e7260b56c6b1c608652eabeb858e67906a21f647278d2a21e81a83ac51ca3340dedb237c775b9a497cbfcb3464454684c237959bf8ec79414b51f01af26b123a72652bcd91f9eaddc6e08cbedf949c51f63ec14e8e384cbd8dfe3e8d82c57bcade8e57d061aee062d09131a2d569f9aeb8a8b20a3bc27edf9a6145bdef572930d7c9729b52257dd33305750dc22cc5c9fa7e66d269f62c36dc44f455518c5461d405d604ca8ef5865e18b44d3c54bbd6019c95206edb0d5f3d6cd1804776c292e77ed1e83d0a80b816219a71433d0561abbdc1c31c4436a38c7e1bd01801aca929682e265ed09297e2adea139a95ea5e2f2415a5dcdfe912fc5d1f554e02dd511a50c9594a14af4ac82cdb34ef75972495ede6e941eda4f23d058335a2b2a61ea229050295016daf8d03b382c7da5677ce0254025edeb7dd8ce00ae6ba4afb052aea4dd8c774ef1646b8050a7c5a037708e3a7ebe2544350684322fbddfee181c98f37cc42a997aae1666198c6fe2873d5459c7c289c759012601b7cc083387dbe2c73b38a8b725d18eec160f046e8d982e1b236585a7fd379f8f8606e579e6a3b967e8d9d1d9896442c6bdc9b94ec855cc01777b52791aae5fdd789d896bafb37d7efb0154a1db8c1e1ba0f4279115f071df06bb858fca5d572e862e92c2f9a31cc57b0ca0274f2ebe5e0f9e95ff0e1009161a9d00cc618cfeaf2a65813e2c7bd2c02f5d5fe81099ef8828473e40988b89133b2e857a8297b342581b03bd8d57527241398805eaed8941ab734657a6d774532c39641da2bfacaca766ad7eb9be53008ff3c9d7b1cdc6ad2adb7482f4f9b4975f9b39c42755643ec7867cf7541545168eefe78755623fd3eef9bac2f2d6d4cc87964842c444c0c305c3e3c64bc0affd9c3b77366ded9e609ecb7e37ce69e5d059b61b88b3d05c9e8c72ea84123547318fd7b19556775f90460d3cb157e991b86cb0d47bcd0a7bb70487ab38a0b14a7d311eb6ed3a5d10a2396ea6e3bff37a17c2bb0b37c23f221124cf58475201101ee6ea35db8249c1f4a2dbcdfa3678a5a7be97038e063e2696cdc67aa50866244e1faf36dbc40d1a9ba19822beaba5059d39ab4ed907fa3eeee7e90189ca743526471e0b3c0f85cf918e900308deee1dbb8a1d2322dcfc49ab5ae9c27f7d04ccd1d93012e82b4327216abe506a50ff0c98f52ce482b6b1b3c002cddb690c3983bddc34bb19e9edfdc4c6f7bfa5d3ccb011fbd6b1de258ae3e3265bf917c6758b6b469ee7fa5c0e2753c76398628f770aab314899b8069c179dd5c64922d8b447dd55206f2fcc8a0aa811dd8f93594058714ddf7e90f349937f6f7047b15259cdd1c1729fcb417ebd7918c16d6abd37d5be42b2e0ba9c6f834d731b4529c766fb26602c4aead445902bab5c1dafc1a2c513579ae7f2be3b82a81a1d69ba27a704d307948a5c0f2f6a4389fb3228d6eed41a9565965cd6964b6c8b3156814a9beb3c0be76652acde39a543c672540b15aeea93fa555fa2c9603aa2d80a7d70200d20eb177ad1ffe42f4a9ed5d4b7250dfa942578240968f7d1ae4ef092bd5d0d32e3460d04255f51afe72e5fa2d90d680a33ec2bca0a494a90bcea831f507cba763b3efde29af16e812f667031d3fc18d943b563ccb04654f9cfdfe3576d6fa051d05bc987ed5aa606e169dbd9c4052b1c6bc49e4b6925d78d1ec1c8aa04f1e0de5efe2f7787b884c12ca48166d7597e53cba9aea2f58ed0dd43ae3f7747f2dac7b6bbbd30b083573a88c1c169f38ef6586eaf59366e2b018f09930229892eca8a15101d2b762f870151f30307e625293de9a0ef92b0029e422d30221c6325097b8f04d71e444a13d510c4731e4a836ebc3e3e4cfeb8148499a7fa076ded5e638bb9c7c7f0b2dec316dc1423a7cb1e1142e4f57e701a8b3562595421513496d432c344754c97ff28b8320dfa8e4e71519b8a32b99fa545d728c2bd106e609cebd351184547953802acb7d0989cb4b108082b3507eac1f347da7234b54c9d27785951a252ae8c17af98899cfc88d7afec06bc73fbd0939b2ffe528cd372bb76993d4523e4bdcd195727808ebb435c77fd696ff46a23049880f483bcabf117f4d6a2d3c3ffdf7c92d505ddda1aaaa9f9ffeafc03830c14051b1b9435d9ae93ed1dd443a82c56336a7e9824b1e8190655511f85f3e1c0ef8302457e695df6c993f36b97d0ad68918fcfd2f1342684a6aabd1b366333ed4131a27b6ec43130896cbb4e3ab07a5b2582388fb9ab0b23635141e48c2a6d43ccab8960cd44ff860691f4529657da3b2ef2a299efd399adc840f8ddf466886567b4e50c62c435c29f2a298c08d7ab9acb217e57547c11cf2832a1eee183ee79f15299a50faea3fe4ba0e391f3c953c25c63e04a3b3cb7a6c4d30b75d092ff1b58c487d7cc7020b2f59d37b0100d291b39aebc30156e32fa85121b0abc74d86dcff8a2946455d302a53a8b05c9c33d38bf295ecb6c99feaab48b36e79a20465202323a2147028b8ec388b2472398768349b2e870d0ee987154559686e4358178f264637ff4736ee45d850816079d91765e03fda781d3c6a050d88564b0cfc8f3ce91385b6ecbc4ba805d5726c187ae37ef294bbd20a559f34bded076f113fdae72c014d0f649e572c479f99735337fb46db9480810a9f93378e286b0ed8bca2c55bba579f4493a427f55d94908b223205db6cef6e82b7f0cc42f3dc7bd1716bc8f43c760345fb92a64e8b5cb472cf40ecabb23f4ee2ea1159d7a1762182d274e81be760afd5b400600c538a92aa6d3f3c6a2fb170f4782f5a908d739cbb7a00dcbb5badcf03294a22c7653ca4ec13b45e82aab0629979d32de15153be0ebae14b57d072c4a9366b5938984d6b92b698faa7dc95082f48c70fb91c9f725872feb8648272a614e619f489cb2e71f42d8c09c533294bf55b80366cf4b712449e146850fe4dd4c04e7a2073e6d4e3f92157bcd0c5237504fb525f7ba2ad5309259122fa8310525fc9f3dbbddd5b636559a9e2fb4018d2cef6f8ff0340fef7e7fabe7eef619b66484803d43f2caf5afa16dd12358e3903099b20eaf3ff7f6ac99385a1209d81007aef7b1f589681a79c13cfa6cd2e4a6fef3f7dc9b2ad990e665b49afb4554a026020b03c699ea40394131440e28f61faff3e9b2ecb1a8288080fa4f5182a60f9d2276a45216ba626f3fe13cf800f1ae2446faa114b71a04cafdd9a601a38cc427d727b01c090a7bca44d6eda1cfa87041c95560d2b2344bf08c67956461d3344f895cc12faac607b08dfac183732bcd7431e81cb7f5a9b2277d342e97ef044e284d36b28128a7010f4899e1ed8d9f4bd0aae4dfbfe844aaaaa411522fe7569ec0c9a16f47752508ed18fa41444607df72f556aace0f5848d728c7e4fa6fa51ddc9367b5b4e28266f591f583f96ef452a5d2f205391f641c2d48df2a9ede46513e2c935cb5016240cf716278699a658b017b58f56d8910f87af012df139cebb23f3902cc050fcd667b92b1c9e3a3edcb7e584ffdd4968582f395ed18703aeab72048db535898ebbb4e6dc3ecdbc531b4f73738606359ae273d2b4c51814d67107e064d22f2065daef23525fdb8675272edb65aed2cb853359561566d58c37ebbc313826d342e976733c18e6640ae1800a32bdd442657f196a9444dd969350f16ce74fef61415da6974b4a655280a49e2698dc41ef946e454f9068f138a365e9e36af0b0cfaf473c3231cfdd6c27335ce70750771ff3c2c1574ac1e3282c6f63643b2393c976c4cb0dc6c20ac9c39ccd1d2d2817ac47fa2793c78ccd0484ecfa2d9d0db1a17aedc631a81caa9823686a67761e0258494926399281f85d57fa5e9fdbc23983f64f952ef14dba55f86e4d83294b74ab1ce5d89d102cc1174ef605decdbf6e3165c9645fe02c98eb66db0c71eea4f64cf605573051b003d759e4b9a0c2dd363b75ec87dc7dd3e5c4c3cebf7cc708bd64daced20b7ea6a2440acddb2e24da1c537aa5697e47a7db927755c551724c0d46f11947798cb81c10f98be71b482e86449b8d2caedd6ba44b1d1a6e69052871ac5aef2a8b01ff02dde9d60e4cb0103b245e9c1c1c53077e69b81200d711742a7ccc31ba96aa75fe18351169a128444f4c9b6d6176bfa587f22808537292a1cb4ec9763b1888f47ae3a66c4f034964fe3a3493e4a4f13ced1ab632ec2fae58674ce8af3389f75de418289e93609c95e5b891349b5c282f70c8387417b68c89c805b8c805d6f205dbea08b52c4ca32ec9465928be6aed083f947befb26cb945b3a21f985673e5b3bd1cb1345180e9de8fc027ef2a6f1062bfbbfa8d4b3679848531133c0b3f113c8b3f100d29932001626aa199ac942f28553007df8fcd5f9b880def088dd6de6689131e4458111820b0f0dfcd4eb08d74058e6ab43e44312a2c018b44451d9d3214cc4ffffc911fb5fee1693f3dc118c191275126c91178bc5c9871c68109ac6090f0f4b2371be093819ca2a6936a7200186c4d912079e68f164e1488b84c500225aa920425d09e493c1674bb51e4d45fe4bd6a5ccf131815cbd68353620e01869d440a139505bb050605404e0c4afdb47740d50d6816592b626a8488a860a2ec004025b6961a561de1a66682b4a32567dedc44428e293aebdaa0b833ac73916178e6095677f7f2f909333ed76599b3d2c5e4eef6753e84cee66edff3eb962cedb1542baff80d9b17b0aa41b360124b98b2cd61c3ecad0b27c4c0415b7961297530c79b314a622bebe273ad351f0241815aac8e31e48131aab6d3f82889748402f09bddbaaaa4a9a7b2b80bd31287b9b91d183679c8967e0ba94e7df6d295e61c29000635302652f69ab048686e55ef1ad7371707d2dfdf46a90d14ef5edb00b19bdf19940a78197824c8475b377b121f3595d30d2d459d22dad19e84359788b3a55dc6412b24149edcb34af984e32ea7f13af424f5b39ee9c85cc3d3e2f8ac4f32f991a0b8f23f00a22ff294bb235a5dd3629db51fa27eaba21de4a93dbe8256f2d5b01ae5047689d3a559595f8269084369a27c256ad7a5de3285c05c20a51983037db0bd6980aa6c276a2c55283661c164f7423a6a3df0f0023fcbc0753755edcfdbd1067d63f798a9475c31361973b4786fdc4c36fb52707fbcf91e5bbe980fafbf258ed14a6b76c04634ec55e606cb568d524aeb52a085ec0c2ad28041dac696a5fe77772ae7eab1c838a245ad00b5927c231d0b0770290c324963002452e0477501603908903edf17632f065aa295ed4d45a0921dcc476e19a9204fac328a2f38e6dedb84c8c83fe2165f2afe15c96c319e4cff1d15eb31a962cef34ebfb671531b3115bbce6544a2d2e393223b3ad3041dda6d5cacfa1bcf1869d4e9920420e5ba2fa69618fec0800afe3b32c1e8476d55a6e5b5e32f23527154ea6c137a93592702ae60cc843b3c4235715224658194168db520f797e205fd07aa4afd7036b1ae5538ceec35b53559d229b6bacf00e6ae55f16117789bfb02428a5c2c4b026eeebc631739ca5c79b5740f5ce535b5ca636cc8ae38484bee01dabc56b30e39dcb77119689695b238c526b4302dc41296ce7a0d5a32326e9badf89c3c11b38b76703bc25b872b37b49b2fa1c82b5867b5b88a494cdf98cdfc4ced7fdbf852307b32e4150e248ddcaaf0062ac52cf6feae4db2a7b0090f047705416952d27b711498f0b1aea6c56d1009a31800084ddda2a02566037d6b1c1ad81a516005d0cd54dc6905c9517b9b972fffdcb52a9285a54d22de948ff7ca49ba4ea685abd32399224a3f7eca38f51aaed24d59b1989215af091a5105001a56e5578c374df93a816793203af1c2e6d49b8168d5b22bd0e30fb6b1e1d5ce827b001f403f069493cc834a5a74568ba2a0cd6043bd213e0c1f82700597c9f81f884ad17c1639b8be331a53133e6346baee0c751fdf24bc3faec99a5e1ca98d53ebbfb59802850470a398fb3779554afc3931fba17e4dc6097a09b2930cf6dd1998516c98b075d2f021d18086e2c741205fcdaad37f7deb0f8d961f2665ba72d1f55636160b38e272603a1f605900be04e866130dc550e303c099681ff5b8e0331dbd5e758a6a4efc9ce8146392e2eeb1d1385f87fe8cf8636a03835b3e745bc64ef9e1b1039783c777b6fad9ec5745976d38de453bcf5fefd3d917dbc91fc6badcc3e7b838453f9d63ffd9474ddc2a006c42f647d923028cc6f6b742d6d155ec0c9cb7e492bee898024063c217d84a7b2c42f3c57682d020a938c2b364c661ab207a608cb67d139c45d957f01a49d98b2be54aec2f36ce6888d3b02cec0d013522d10b08f18ca1c1ca6f6e75609ff8e708de120903bb5f37cf5399ca807cbcbb87d66ed7f6bd48975b408149089219d9b3b9f8ea9e577ceec54884aa2788c82319484d4fa139917bbb506efe09c31226c7e801f0f9822f6d7822ec5733eb73536b112cac759e08a10798a07f1623809067fe28ec9b1c90fe5fc29b62cbdc8bd020f6e541a55e45e813a430187538fa58063acf6a6eba82d5efd32f5f139649deaa54bca75904fa6072b49c00426b7dbe7bf4c90c02692f3075ae0efb800a8f19857539bbb754fe90ebbaf5e9c58334016d2197da88e108b5bab990cac9c3e7f28e7959160a49ff5504018436414b0d26cd2daf0cddd1facae15174f64c8a4c205257e49d4868b698358045526cea6a3e571151c52e0f927923a601ba8472569eda97d44ca6328386657641b780a84afd1ee4682501848cdb62e51b84095d6bd30780b3fbc28dd64dd0b5c2002e9cee7880af7ae72a934e914d93456317d1c1d9ca6b558d0ee23d9197c6d111c8ac56907ec6de2c3726681bb589d19cc1ae53242b64b363722676160c79547d89cbcb545c597e687b499937e187fb90bdd748ec76f94bf0fcd5ec9e9cab59a9e35bd81b53d6ba8bb9c848343cc0eef6acb2c22c4d6f81c6273a3464fa52342d0618487b743a039666b6929a7eaf9b7396a5e9a5675c719d11bfaa3064904a5afa74d242faa1a085093b68424ea8f9cd9bea7c66d62f120ace65c4a6c9213b302a5db34af5390aba23d3fb14ddb1b9f0def16dc0498a73fe4ddd9c3e51ce873fc49fdced21f77ce77573ce68468baddfdb9072c60a07e4aee5b777b5d55ecfd691b4c5f30fcd884658f93971bf67191aeb80500d672f9f12639807a9a3963f8029cd1e079d8dfdabdc0518cfd392a9406dad87a758878b9cdc6d08b30b7123be90bee07b5d4a2f68f488c76ff52ab28b7a8cd12914073429944a216cb299254ef473ce1a7ec5242d142a21a6cc35c0df446b422a8310f30112dbd65243a129b0a3ae181b9023ce7e1d9c7abce6e612da078e578fe5adc7c81d232efb51c7c855d61c23d87888bc8d41795613f51707cc347ac268b366425d128bbd5b1a8dc9e6c857c01868e9cdc0b7ca034f96e3d6e5164b08d8a0f7b749a2e891c3581134db4f9c23b8df3cb2899985d14c03652fa8b642455efd0826dc3b397991471ef206103aa2792c9dde8f1badb3198455b914a7f60d4d2fe9a789666d2f9ea2ad82714195ea46cc475cb33c5563f8bdbe045469359c50e8e0ec7ab0bae529d1872ad4779aba36a6d974b8d117b6d84e6f64d0114b67cc8c738af23766fae129612e997a87faa6c8e8be64a3885cbf00ebe7bdac0897bc6df1518461669ce2b8c32da32907d4343f93129177fb496a9790dee07bf7f90e4bf3dcc9f89eb2fa26f699ee76e1b293879e17949dc626a6950e95d7e1efbafb7b9192d07c9fef87b9a47977629524c43046cad2238c233d511f1462749bd859802143b4dbb443a3871f1512acd61978139f26d73da24f731df174fb8da1cfe5a98690a2d2c403d6d42b7b4df3ebdeeb09b2c007e1b1f7b2094e71c2f4c6e8b5d648b68be17c5c848e0f9993e0440c2e0e4748694b1904d5b0d23a1815320461207478f42084a94c1789633d56b95aa99c4704914e5c1619404b85c620fe648e6d2f71a2461e36c5692bb2ae64b890b2067df7e26141ea778528c7eb8265b450b5aaff19ec9bd4f470dafc30dcd0a36fbd8685bbc4c5eaf225317c53ad8a6114c3e8eded5f3a9b1735fb3c17860aadd63181122aaca144e25753e917a9a748f540412b18072ed64af94102092c60252a78bdc3007894025a38295f1c07ceb65094dfc27839e2489dadd2f99a09b1ce5cc82db014d166450c1759a53ae9391b980084d2c19e3d9c7c1a0cc80888bad0ac6163d5b9b3503478bdbb7bc5ea016dc0735272847f1b7466eba9f5eba08483365bedb27c64f23bb98aeeac379ab8327ca77b2e21179ea26eaba9cb168c5a7a9751de707d47f3b12f3820340a1d4d55d099a9d59597c3d806aaf39f2294f25edc86fb44e263ac3e093cd9d555e08cd88f2b28fd963743b07e9e65dcfe93ddf208980036cf623db8a0cbc3f3b9fb40a7378ed7b2d1ab2f96811eb5b6f76803bc21a6246949aa39958c0c9b9b96eb328fe0f49f1cd325f3309daed55a3fc3fce82800a6d5a4b278b6f493721ed7487dedeb16abb33966813571abbd2d25799437b735be37df3ed795834d0a4aa6fe0d082633298dbfdb8d38960d6059a2bf6593abedbee2fa875a014558dfb047b850698d9580a8359d8c89616a2eb2732a685cd2a434267ee038d6b3378d3b9b911fa7927afd582a08eba79c77ef44e20a11cbd49d034442b7aab36974ed053daa52eff65ee1b61aed4df3c52954b9b4ed0ee7fc047666ffa45c3a9a05dd4c691749159195d2cb68790128edaf3a9b4c6c694b9cd46d59d5d9470dd9db9a806da1c8ed2e05e8fba9bd9484b9c15e8089ac272bee7464f5e4bce9730cd47854b6d680071bad2a4e7e39c0b262eb42b1f377c24e3e6bf5d0b69b334eee77ffe49733919395e058de888979f43e0e3392fad2e10465eb4a28fb0855b7859958f50684e2ff08edca3e42dcb3fc176bc56c80100948fb04055448038fb9da69b5a8b1c5d551a12a61f74168e42e3a01c1ab01215207fe28672076dbd0f6dcf88bfafde2e95e3578f52afe65941a6ac0b04db4d6a4bea44600270a7af471a3b6e7d0eec73b53b12839b95e1bfaa2b8c51c9b8d0d6e9ce2f1d5ff2d60d16cc441a969f20d0f78ce6eb0518945d929926d0ca1afde279ef31229e1ec77fc4b8a192c5fb92dfc7f45b4752ac9ea0ffde8a930a4a92ed21f0029852dee9f9f155f95b66e8c375455b679eb4ef5f89de495b9963a09ce9fb5d7beac70ef59c0cc8ff3c5d76ba993cded2f9bcecec6a72bcb0b91b9c925e0375e2fc0684a5d1db45b72844a70e0e8b8eb25b445d904d51ce403c7da0f9aba07f6ca7e00cb92f8102a014bc26dfd1267e1f0bbf9a1fc653ac37cefea7f4f3bde4f1e37385256983f67f4436419c39ab30ba411dc590260f4207daab785db9ab6f52663a1947f97a3c5b037add1e68a19c6556dbda95f0c44f33508b54a021c2d23e4768834ca2a786075b8c37c325423e061cf72fb853ed742e59e8cea9e415cbef0b28b37c336f18b48d1bc31b7e113dbc62fa935e7bb05cabf91b4b43027d2de70e34c4f689649c84a92a035340a998db4d6f5b5290e89abc1270af2727cd993e981f436a46c4ca740fa6718fb9e285dff1a235eeda70a0da2fdd2309bd8826fd3dd86d2d556570e4bc36d520b3abb2d0ecdcf19e256ce74d6dbdd5da1dcfb028c0a5993adbddd9d2e425b6673b68da601bbf76021f84180c6294bdfdfda9d8d55b6d1c5ee7eabbab4da9ec7aa6d4d540e04ccfde6508a0d7f1b825f37ab90273793f6895a72e9948397c6c25f4f293500f8ff0340ee4d977fba4ed2794f12928c69392d9be66caf833d80828a23c9f0f9edfed72afdbd681156644464225cd17b6918313b87b31b8623aaaaff7f4fcf6c1f300b7bda04b4e8ee0352a7e312e162435cf1ff54bf6cbbda082130d83d60f49d7ac0ae46e6214fbcad5ef2159a75b7c1e1fc94d4da236fd87ed03a6cd011875cd92cb4e5e14624d7bae79fb7731672382234fbe71578bdb47718c91484a70e8a2fe66a6b632d248520124dad8a0fe38261d851be5b5e253a1b2ef9b258357ebd20deaf87772dabac21c70187641a9235b0d8127aa7b2eb35315b2979e02e9daacdc736a6660cbb34a547aa45beaa7236781ee4a7fb8585dd2185e1cf36daa90ba48c01ed5a66f58b7bfe4d81a29ed164285301af10cb80f4dd23e3a834e221424e4e8dd106562b4f2070357290e750ea95957bc42c65b763c00086f18d06190da7307599981eed7ae52ac6116ef3052f65db82afe4d15d4a1f9222ef12b1c971296d6e6bc542ee9a7d97b8c5ade3b50001083fd7b0734dc0cb02e6369e570c7758ad02a6187cd707064af27866c792c3f3dca6b61dadece30a1ad58eed31abf6b7498f58db3448a551a2c8b8b12bf6d87a2ca3460d9392de5960f4f220c9b7eb50bce8a8d4bf4ed534410334a34f9644ea91c8e0e93f1093c46cb9216617ac4b9931c26a1a536c1d71bd108a1519a532aa76c92b2e7efca6ee6f94a26a76c71aabae3403635b8f4100568492110f7cab3b48f28525523e4a644e30d9496a4c4cb954587e0e991900c46820778dd1a35778c97fbae6d132af36794f7e95dd41766c9180bd451e3e2dbae73dc6d3e7fe7cea757998a3e1e15a53d87b63cb890d291f316ff57a64f017c37f1d6627483988e6d7d9d1b98e019b8188a57bd093b22c35bb5671b963b78e8caec47a65e0c489c73b602a7c591b43226fe490be62bad2e8143398a3ffb0b214859c15624777690be4d449183c5d9c93b64bc7afc543dba5dea048ef5d73381c78631d2f91ee3ed266e438291dea30dc1987023cf77b2298e24c917939b4fe268139fedf5f493df826c41c60188ccc1758965f92256ad5e5fdcd14b79d330e4d839468b563da50bc38b23cbcfd59365268e4dbea964ba7f0e31208c023896a2ffc43b1f108401b016f851dd748ce5cd2e480170113dc3743787cfbf3eac7374de3aba06bc94e7f245186ad49f4f81674179bc7b29912706143db264ba6f216d9d65b8a046d17977e1b4b8c6e62f190045f3feed535b56b1efbb84aeacbe1e9fc201c65a419c1b3cb8a84be45ede5cf877eb33041bd713df767c79cded081254e175c5a6c0739314a51ba9f51a3460ec73aa6edf944bb13fa4bfa0ff2bc42cf4fda2e4d9f10ec00df840e073ac95113839a95a53393138ff98e28ad2ec5a4f8b597213480195d7ab63f211b4fe1a26cb4ceebffc1e4434ed8981449441e88b994713a42cd69e1baaa281f58f03ba8467ecedfb0d5528d8b4580cd06b19958c08c208fc653d84bc8b13c65fa0252d0e906b48df01b93e88bd77fe713749729d477111c821ad7117892a8861be4c42a642173c81c59a4041a205969f994a80f76d633d5ebab36525e2000ef5d80b71f88ac0497306401323a4280ebe1eae73a9ab9299416b04d3e8f2097f1fe6b50fefba3df9da7dbe0b6eba00d9e1e738e82b39f041f56d1b281324dd0acbd6270f96aa8391dd7747ff86c04891e6060ebc24fbc636bb3da14d780a7b237b085bbb4b62d21349a41425c466aeff4143d50d0f61f7c7c87dab7942d6cbc27d76e3fdea399ee07529cc2e693ce20a884b4049272ee5a7a528cf512831c52955896d8b843382d353487c6f9c912a8598c088de32e47340e6c768621886883d434d703c454e890dbaad55fa479b1b77242a3a72a242ab5880cd615113155719525d3bf1e2081fa18b966b9dfde1463b4931d35d14e2844f00e9ba27ceb9daea5274a17c3257314d2c31729bcefe4e02c4848a71febbf1feb30f9aa12e647191589e686f96e3ea3673d0723cd0559181fb1c14ba5486d10c4752af16da3cb95d2cae7a80c4c8af4a9aacc8495cd594bff15c303d6a8e76a39b808ca0a7eb18aa21f1a8838f931a9ec018da48e8256709e3e88b5133b3f4a570b36116ffff8ed1d93a3f68ee161fcbb32daaf4483dd76d824b610a92d83857cf4265c7396c8424eaa0eedde2cd15d4c33d7d4c65df87b02baa8d9c9a00335dc8089c14c61dee8a8250328702cf1f39c2b39f396e4d48e977e8d96e282eaac79b2c0e139a8fce82b398b1f2ed862740ec0539cb4a95466a237a3ba02fc8b304f3de0b517dee2ad72034115a2a71a8f644eedc848d8d447a627b2188e6b60899fff57b3337928926e1895088e82fdc16191512093c4499f854f569836d092dc9400eb13714acec05242da8d41c522428dbf6a6672247bf3f805c186ce4829706c1fa023b365bf8c87efc4c85ac09b8ceca0a2217cf60589003ed85b8f6963571f1ea4fcacfa4ca268da16e69622f2ac4fae8fa08f9ac986deb57f5d9c1c0b3802a03a6fac010f0fe9400dacabc42461a3dc00d6d0b2d016b55112601e0c5c4235930803749f5ac1fd45025d0533f9d3ab377518bf684a681535ecb319b0b7b4c6bcde1f651a190a32063ae3624790efa08302179b2cd313696736eab3cdf6e36426e05d8c1c73c63f5456a85f4492b91260ce79ad52bfce6795b35caed084bf78ec422c509fe7d25562a9f4a4741a7fa8db895e2b011b22dda29f567b6b69ed36d9bc67865c9fda55b5a4977aac47f7c444972876c58eccb012708c12b3573ff557dc51250a2e525dd9a2496e9a22ca507ee2bd624de2ef1973f5c2dd9993da78af1606f6dce1fce77756c666d749bfb77f23d9e79d6b3c29e5020de675e17e7d4a675ccca46daab5165737f59c35268407c2cb84279d6519013649e88092b925cdc50a0d67b5fe489ac182a0ce79c8b35b0d79236ce8c8cea632c9b11e5f18c420e642dbcc5582526fb722db2e3aebf111f2263ec64586fb43b498094efb21286c510ea21cede296b576d34ba7b6b1153078826da9c0e459197f67e768dabbf01014d83b53ba1b94aa047d214cf4eeb5917f84fb3c7046a0254b066858f1ad31b38506f79e2872f89cf1b9457358f0fdff7a63bce0ad59ce1e54c7ec3685ff7e5528e0d4349fc71acac174c13b1071e0d6d3f96ef329c1c3a9b9bed6698d40d31b241a4b9abf9863bdd6e3dd8c85159395fb0c36b14d41c426a530e70633e01277abac5b93cfe02969ec558ba78a2c024c7656dbce683859a0dcaa2f5a8bbb61e727a7064aa79341de81032abf8c31c45a161ee510071348a1b6310393abe759e7568f2d2201b9f0db14ab2644ccecf6a7e60d5cc61d238030c0b0131688500467aed7a905817713b638b26b205727e395a3aab5d7b66814174f21efe07693d4eb5a5f0593bac29d33557badeb0712489b544d8aa6514b694437a918ba0c162526a3c60d2648edbb85389a927080aabc5f1f3610ca374ad2a5e806a014867dc4489fd57eff9e3b35f1672c1e5a43f8e5f89e3ef7df8fa5a627d3890fc3462fc2d26d75bc20cd56c1e0d386cf5088fa1e625ee331186b9397b1bdf0b00c54caa4fb8bd91f309aa86248383204f22d391e370a0d1b7b3508a26bcfc141104e304f533b5886cddcb7c8eb891d2da05b637e55783448ccaa659c6c84dc0d5c1d0c702149621c06df86b6a08b02f90188cb2fb39baeead6980772e60d088dd35318046943b8258d3e7a85293d8472d75aa04592d98020b5dac3be35f5dab537885a496c697071a8ab190643c019c724fcf1fad3dc86a5b0178f3c1c3b5225dce0fb8ce7dc24eec396e3c73cccda9dbe5b8895e37c9748dbaccc8108288803c819b37761d9a7842364784986d31cb180ab9c0818a1796457888636fdafa14911531e9c2ba4b548ade5bb454024953750ad07d8ec6c7e70057ea41436f08d4b598e0bae203c67dcca498ba47eb46b0a15b1ab9e9653023326ec87626050a239e86043fe010e645b8ac6baa36701ee7620677014beb5a1c71a9603929158f97e7d03298a995b4a9158d44898fb9fa51f87a9672b082a3dc97d863572dd5593ac7e9818685f8843d89a21a07da3109ce5202585a705018d0fbf1fd921428d87d4bc03e7f910854c881233890b730c293daba1dfc1da64a5730ec9370b72953065ff9410520667f943d798c016383226a284168b689af695597a3420ab7a9f00bca019dbde3bef1e8c07212f014c868ea306765abe7719a564ef28ffad7e7ec01933be51368c88b8ed8070efa836ca1e16f06c02abda306a2c90ee0145703a8ac17f072a144a638a2944556c9c5536d59f51fc15ec5e55c7d948c4e0a20683787d946de452bfda86d85448b1a37e039e15cab6042f9a828e0f894f2fe8fd505f2e0beafc8b6110ae160eda4a8b19a65c3f67bdbfbef5e6f403f0553f09491c07f2f49f609eb755bf09fd463ae6622ebf873ce02b876bdaa8739b600de6557fe9641d3af68ef7eda36d8d6fd0527f79cc565c6939ef31900e44d94603394b0941958480a587e0958a4f246ad976fe8aa4ff20668e6c27ba67041ff79fc242be55263f3d77af52632d86879ea3e6967164f1ec0e1802016890f65696a6cb72790cd46c71680894a42f3e9f9ff6063abdbf521e1366ce7fe6b278db94d85142b85d51549ed05aee41d03c8a710a2d77edf0e844fcef07a4216871e7d423ad7728dab3e0eea7821be9a98bca65ca59011254d3388bed90127d648c9a4a34e46a403f9a50144ead5ff9e8d1a2cf749753ac92b174e5b66e678893ba49aebd9969b641629a2af3c0263081b00a59d8d984b803f663cf2528f96bd18ba07c1c2c67c5164f991abcef0958bd67df046c1cd50a3d7f6a6c085d947fa5bd174909dacdaa0c11cfade44ae315041164abb67cd9a5fc333c5123cf12cead4881c023e79ab0acd7e6853d8bdc8c0eadbe269671bc1e070f6141c167fd54d410be5f4fef0cc11cdc560e81974c4bf23d70b4f4266afae67a1b39dda21b83cf8a9af396b6e48f8436e1bdcbe0d54c6e437c2e48277cf61aab6c8054501971103bbdb4fd20090c5e2196d09f35576a6ecad824a6143f2a35e3d76749ec9416949a214bd985d514439f0dfa2a1f203610111ba9841050764d13a27b94268476c56b78d67584445d368994a65a659441c4c2c88174ae93637131807caf705eafc6601e4d23ae68fdbc2258621bb42ae9224de3aace2717906f12eb97080e09a52cf194338c2ce3bb26e65b3495952c7bb03d7bae5194e180b7faf8bc0a4cba1b20bb9c5ee50455fdae5cbf43af9bb34312de0b7952bacf57f18829bcc4085e3c87ce41e9f0d10cc10e7a087c9f323e1a8140511f097b1570082527beac6b4105e0ff6d1e3c83bd8a3731d20faeb478ec421961d0332b3aaeffa32fd7d5457572dc7fb5564016b43dbd69bf498aac8d3e933b3be11d1e15f7411de97e1e67d0ef885ca7388359f0ff8ea18ac1edfe738e2683f164aad2fdf14dd8bc4acfc3644a96b2fa72a826b2db7aaf26f2fd984865f58f3e8d8c180798ae68e7c56022697c75d7b7d96d8ae89c4ba8420915b80bea75647602c36869856b59fa132afefb933adf62446bc9867ecdedd21ab35fa6b00afa6aa6d7d11883f61efc3c692f1bb42986664bb8715cab75818e048bad842b83dfd0e9f4abbbcca4a48f77e695fc6aa13a2b145c606df6c41727a06dcfc8bb8a980c19d73be827b4b7bd4af6b2f596ad7c3167996b28a9a1cb2d4b200843575a13690461a6bfb63f7e18d839c56ddb8cf6acf1c7c200f8ff03402e9bdaebbb77dd135696a0e7e738a59513b0018d85c4216107bf9af609d0dd51ec0cb8117d1d80c23ac5d0d333a3d5ea528cd475c56d63644824fde0949009b78dfe37feafaff2cb3eea16b13080ff43e05c64513c4fe2dd3ab2a64baba5a4fadf6171d78a25e2b6840ec8e9a36a1da668133e10bc3005eb7c5d6a11d48adb8dff0212d024a01a51c730d35120a02e442714208830ea509456ed9c0ac664d54734bf7319a80ca935216783d68823838cdd4397af3301345b568d2ae5eff516951dccfd72ba211561a7c8efd3b17e4030e29c49b676a9fa7f72c5c28885a873a4163532045a5fa3aebfe6e2485c45b9b8e52804df2a61243b1f1e5221e8cc4081884050dfe12ee72d1c91c95056dbec707b91b198d7cc71e9f872a45256cf888833a798ab34d40ff4b40b58b8d8f68f2bfd3f514bd6af10ee7970ee4fb202d5e064214eb74f990f985ea353730b672c5b79ea1f5771a8a638dd2ec63cd0e95f08d38ce367e85052821b59044753f1b07ab6fe4e726cb795d2a565f763bde9c216f7e8bb782a96aa7ef317a0e8cdfaa4c77808bbcec944af91a99bb655760b99904d2e91e73b9cf619e1cf1537161ca4847fc49866e01970b0f2f92fbefaafeda65162e98a7b4de28a4bb1de60a572cdc436fb46e73e261c0c6e803cd5c5a0152d945dfd12645a2546d78c83cc13dd656038aae25026de32c264b293445ea0f8ddc06d22be36b2357ab8097f4d677bbc2876041f140627a2ef610e868c89248eb7c329642cd49921c3ece15d5497ad2008ebcd403d168b0f3dd20f747282928afffc737a82417ac2cf48121e9f43d31f3a0c0c4e9a1a1ac91a3ded77ed582cd0408999e4ecadc71d85d3a24d077b13196718e9b6689302bd91a64168ac3d814b690b90fe1bbd18ace53428f1b493ecfba9d156646177c331e97d2b6d7426b34068cc31379ebc98fdfbc525a32445b9e6d2cb2e9fdfc13046b34064b0e8168d9746bee72727122645980a5d51a8dec07e5ea0fcc69a0158eaf980b712b13cb3411274d313e0e43b9082a62bdd7a25f5d29c2caaf77bfb99996c8354577eb143ebf3fa36ce4b3fbab9c8a3284bf2304f449abb74eb8dd24f03bf464315ab1cd49ef8c88ac1ff4c1c27eb9134d2fd4552a795d214097f117295af74d034412e311f6b17569703429ee36fe1a0c0fff741f87b757735e289b8c86c84773ec8fedd42d2bfcba0e83279c1dec5d0355c2860d8c815dea5d87142715d9f165489663206cc28f502f7158c489ee89d4d8c77911a3a69e214d0d9263ace0e55ca3c78ac51b8c5e4293323af020ec3d8c14c58c4a5899b0f538a68e0775d745ebe5eb5d234a46df32adfbc21ef70a0cf815c4be27d19041a8250664e8e094ce27e0003f12a2d6314d1234060c4e0c67e69f61232312f894cb5b53b4cbd1e5d93b79ab67e0dee3ca7e15bc1ad5f51ecf6dcfcc141d1fbf594853e5a71503843726968eb30f915271414f4dcaca3ed8630b0d9e7caeefd49e4515e5a11f55a4d24ba142d8030b9f2c5ce346fd76c0d7b1bb89cc592b94f9be5b066aeb5d6c62534216080228948e1d1d49c3fdd49bc3fb58764bb71cecdabe13b2be1665c4d4d73c7149e9dbd7b2ad88409db1a9c35e49d325b8f79ad4a16aa8b5e9e432324607268f1f7c81e77b82c2bbc58de7f7d54a4ea777981b224f348ff38619168b43fa174f2d14b55c2f92b32769167d56ac10ba787ef61e7be484daf3e70224dc3275e454c1348c9502c36bf41a13174538399e29d256e55dccef016a282cbaf64d5ddcb35ab537356707556b7dc6555c850efd267f4147f1b173f7855ad91c1b9f9f8baeb70017f4380faab60eb7e3228c27ca5084aaf7c8b4b7b3de5796857f0c13e8f114bc00326150a4923f5f58ac2f101b98d56c7e614462bc00f1a4ccb26515fc562f5cad787b856184d333c15a3ab15c3471a9a54e414853afa05f516d05e8a1415a14407680569486fdc4d16605fb15b06e31d5c4ae5845aa51bb2981592524b0c4e47f8958383209cf1b1a62308cb103aa2d23a21a625288ea7d0763c50931782a8c393609b2a5a5b300ebda216276b3fdf46a996e19505ccc356b22e8488763d11be5d68d8a3be37976e0a60be6bfede2761508dcde21bbbee293640633facd2d63466ad10a359becb6b1c70be965f116504894378dd40ce26ce2df35553656b1f31bc9c45b6436c2092f73b94d26b425fb56490663dac55decfe0a1250365e5d87655d76939673101011b6080574a2b90e00f47cded80aa4e29b7299ee0e1917019291abb5a27c17b82dfd5afbbd66eaa79133f6a623e4c5dfe2574eee543018df6304ae4bc5a6940447b0c8c436794b453fd4ef6add23795b4d9ec5090e9cde98ba86be9c51ad180ec679595a37cc164c36717a6898a9b222a647f7dbc2b9a394f0c95aec3a450c17503a164e4830a5d72850175adfd865111b1f6ead5db2a8bd8ba550a94d0ea1040ca0a6d88033da37ab9a156c8dd131e80378d1d1d1e850743e4c0bb0a6625d6bd9d6d1ba8ee338af9e18ea5bda85a753661c6bac217a6c51ef112faa956e2b54144a95674fdc2a7c5464e2194484f5839841b5c0f559d59a465b14a87c1410cd50fe55157608d3f363ed29710376250f2a7f62a47d2db439bdd2a0246916101f29ba74ecf1cf9ffa9d151c8d53453a800f09fefdf2debdf40364b53f4c6f9662ac2d2a6669cd8fa56610d2e5c62a66c650025e7180957f19beac11076d2725ec66065648d8132998a98ae18e11b3741dcb8ed170638914f77cc30b66f5f4d0476ef62f6e5eeac13a8975c921a3b14d9a7abe0620c7a05e969476d7ad2843a8a081f534247b5cafcb243d89272231a7423bb21e6c9af3b18f3e4d71d8c79f2eb7ab394977b751f9ea4f118d34e01470c4f5d50fda73c075de100ec12ad8604740b38e8eedff3196d7df83a3a0cbe7e978e1275312f990cb264aaa2d9c8d2a5dfa278c7bfb896c36456648b4ae7e78d0dc995d1446cbe116dd0fd49028ec093837f051bdb252539f634126b65739c1e89fa9ef8ea1a7548e627962c7ca36aa56f127f8fa4fff2186c45c090d337609b18db99c87a93c2282abaaefcf204c4f66389447781e73ac45a0b08a0f8f20f78eb5197b4882c1fd7065e7c863305bb663c544ef7001716513a3390582672de430ebe98000c697cabc5e5d12d121c2729489c3c6067ca059e941e0abac36e68fed2f5e9e1fe12fa8aa932ac35ae3ba393e1a75a98348b9af81492af3b1e1a911766c362a2227f545ba6f237a59b455947669f56948865f801697433f0cd53134f5904131f1237c006db5b4adb34848b931862534d7b7981719e39dbd29bd171860471dc7ccde960073b2ead9199ccc5f8650dc9e842e9d1c84139956d4a657b13f31d3cbd7c5094221e81ed45c877e0a27eb3b43e9e2d8ef015544d1b8f1ed7d6340ab1c60ad66af5d1c44688ef5fb1f32004999e6c54851fc103f673cd62d267a2a6b3e7291b2020843b93481e32919de862e29751886ae9c648b55c4a346c07ca091f616ecd457131c1273c3bcb184bc9e703189e86fd3f65063d21341d89a5f59b6e7c4bc6c23a622106f26aa39a7d02f1a5df9a01bf8c5866b27d674500955f6b03426c2b1a7af11c7d025f13186b06f0d67e01048b47819865ed173813f37a72c56d04fe59057a5381b4d3404c132207e646983bc05bd05ddd1db5b1900131bff94629d3cc3b83cecbe11b8a6ac58cd951c1b5185c87d6cd35db6bfe80d6e2d26b6cc3e562e2d5296d98733d4922b7180f004dbc9eb6c304d00e5ab256f02b4b1ec32c570981d5777a31d6b7ca344ab981a49e77062b7fa009ee86159f5fc642dbc04d46f1f2ce7c63ad3c19b8ee2bf4c7ec8689b0c4b560a2f1caba3283f580d438b0803fec717bb477d3207a483f7c35e229e322e379dc4031ef0fbf7954c08a65f355820d3b2a6c094bcee8026f947ceb00327f72fcb9952c25b6d54f4be3a1f181fd9a325cd42f420019e6bd4eb6d7546638ba885aad73bc19deb9907d4934077e72227fa9b76828ad73170d5ebc30debcf1f5cea1f9489526d83ecd09e6cf44185a41472ea5719c034157746a788e3c9d24d27c4a7468de6d8e3cdda1b0e0dbf49a2bc6667c0c5e918e56025e624208de212548cc063a7c4c873ee7c6bed713c87d3b3e0aae6aa993f323d25423cbbd6d96ce1b9e6bab56276524a17acca359821502b5ffa4ec157c3172a8e633b02932a350961283a813f340d8093239f700908c1f1f14b9735b488bd8beefcbeb77d5a1d4cea2c4c6da1a9bde87a8c57e8dd7ef6f8bfbfd26b72f20aefaf55325bb7daa47a78be48794159ca7719146459a46190f7931fbd1c759f8ef1102dc8cd24783f1a1b2377ee4ff79e8b21fbc174c01116cc60682243cc271bb94f52689b1f5b30b43e49da170ce049ff5f17ce08f83733abb7ba10e942c6ab5b5777351c25aabdba61b52f897aea9ae958787e137a52f19d109e01196dcecb1204c4e987bb10fd1171a8abc48a0e84c595b5175da7ebcf39bfd072052a02cb982ea5de0106ab011805c571d213c820f0f94125fb234c249cd8d1c567afc66ff611c8a7b55afe3e53f20adfc005c544ac66499927e27f0f7e26239a36195c1be93d81bc41c5b09112c446af901a3dcf48388269894f793fa2ec1819c2ce1e5d09059b6fec42d3df397cc3729c16dc3e21a54669a6b4b1f0b0acaaf66bce2cf6fecb08a4c405a443886c41afd1bdbd9b03cce3d74f0314fca8dcf5744b307385bde32b9fa02fc2da5a3d95686296d2d6f0cc14a2429be5162e8e0c3f0f73eaa998e113125214c62eec2853fe281df800d825896cb6209884a3a1e6110264b2608e173cff146b0382f2ead834165b04986c02118c5ab1e66b5a3a4506dca3da08189a3216d00f8ff0340fe74fa4eeb4bba8b2a208453b1936e52fb33c8b6ee836423d98465cbb06558b20ff1fbd6faf7f880d56854848e70b7aa5aecce7e82470184eaeaeec17def03a10a90fd429b99def78922e322641671abbb7781a10b691b51d4a40047156fcbd75aa1b71a34ec84562d064a3d5ed184fd2f93844d28e8e0185c8ad7a65a5343edadf3b56361cf0b0c629e7426adc8f83818d537f0b47a0a9798673177af8420459990318c6f332993a7ce4a9b823b54577850cb4ebc41bf9977ad7566b2d34b349d8253947fb9c59c2f9f10324c60b5c734f790c2dc46c356599e8262b4f7911c7f4ce6a92e11a6ac8d48254bd196d674a88c5fcd1a2d75a03f4dadfc1e8ca3aba30da45f767cadff1b453753c2f5fc56bdc7c874aa49de7506eed9a389efcee17420d193662d183ebc6dc0da0a2899a8782b50b872bbd993f79ce3b5e1233589736751c2f1ad5729a7be3e2e78f0f596051822abbae9e3abf43d9eb2627b2b88d7bb4efd4e5fcd33e96b1cb2608a85987d77f9f0a062d95a18a31e8e9c5c99889c14cbd4f68436440b5c44187ff0df11aa90b3265bf452501e4fa7ca8e5db7ab73ced6903b3f1dac3cee447ccc08f9fe325a63366c7ce3b6b84c519120d6226791404c9e9a5d8e1613a76740aa043babb5f06668d45c8fe4ba25731d08e76a3c39171f226b84ae55f1ad1282155e84a247104b5bbbac4805395e5320a19744b532b1afe4609cefad008908c30286901dc0d03b807919aacd7c393aceaee3534ec1d46e04afaae2643c008c53e5746790fc943d029411bcf4fde21188077ffec4b2621fb0ed597020386a9e7adac8ff1406942726e519c2e8779a55cae299c62c5307a8c53b3ba650ebafef455bdbc3f2d54929e74b1412676692648a6cf112ac9a30fb32d601464f8827036b135759e61be68c6d2f2612493d22832eedb3cddca114d0d985c329c82d962cd01ee2b790669ff9f5ba029c3d85f0203ec8d75711bd22b4b57b724d1c0aeea6ec63403e960f97dfe2c903e7a64f58429c351e0042b0be3d82f2159923def20862927091642c3f3f5d47d36157264e4a8b250e5723c7db5dbe4cc109ab8df432d85554dbf681fd1e939493ecd412729aec4a1c9f8df1a47dd6e9f8a5e2ffb235e891d65d92dd3d5e17b63ebcd471ee347b249e64e1da1bbe37b1037c7f60ddd63a1b8d233c6bea0e149cffe648c50c63ce583f98fc3cd7f8e19b236d02d53c062ec628334079a6b299d45f70393c57cf16bf3992fbbc224c73c2b30e24f1c3924868cba5047e3d4d7dd5202869a1482e069ac513e7ee8d6d6f4cc8166abebd4b89e9cb6bfeff10b8cb6bb2bd223d71b93de4fb5928dd5e51d088ff065f3263cde774c779aa4298ac64aa52a2dcd9e64092c7581ab338120596ba444d8e30795687a8eb7a8219905a871eb39313c77a68ad7dfe79910e64e00e639b5099480e2da977ea47fd3a59b1ad1813df55a77f1b404e674d52a42200e73281a0857cef992208c95b639b002821ddf6e1c589c19908100721e46e989be58914a6203ec84cc0082fd456365d959b484c021dbd841aab34e06243a18b2e24875f186d8873c7877259d67f8482afbc2846f15191ae923c89d0286320b4d2416c7294b8ccf0808c86508a94cbe046af75a6d86cc849c3d224506a1a2ce90d628ecd8be644e83309a9f8122a6de109a8db14c11fe4cc60948d7ae6a362dee95d5e7682e87d8efae6a40a67ca63e0467edf84060cba049d506558ef4b3050949fa34dec4504113703817ab20820691164b40d3b746965ad94644d80a81c92251614bfd6c49d5c66e3b8bc479bd08c537c21a1d9478bfbfcd4b72fdf95ef9b7366f28e60e69de150629d72d0e39675ea433f870eb4bcd6e79d0534782700234d0da0aa5860e59d17f70ebae5a8e8863c39fc0b01bed63c81ee35105d4955d7c2de38a46d17c62060847428191c88e518964235d957dfdddb4966f6c8da46a729fb7689c4c9ce4d6cc23ac0ce312e9306dd24ef4ce615a86b2f59e09b500587cd49e9816118e149b51993d1dc904a529e153d246ea28b58d2739d33cc2fb3dca7f3fa9a67e81e3130502c1caa908674f91487e728a30ecd2be2464ddd77c8da38bea2e45a6acc5f1d6901366363af40083e14b44a09a85363fa38c1c2dc23fe448d8101f99a5873a9ce0d507a1c2288c13147a7870fc75f317fef78c75959961585f343ff0d45626d43bb38fba4e16dd1ff28d845e489deef3aaaa9b58c87f7d77956887a170a776bb90a8ad4a5d76ed972891415e4d6ed62be192b526e2a686463d5988a249f5dadddf70edfa1769b63fdad1d9ac8508a357bc7e5b5e21db7abb9e361a800c9b6bcd07852481fd2ed908e1e484133e52e240baf8cf3743274605fec31471e2be0e1e411b9ca8cb7e9fd2b156212d224b2e8cc609a9e30b318c6a5b1890f802433978f938323dbaecc5bd26952bc6b2031769ea9646f5af8cc4a152d4ac0c788447ea6288a99ec6a4591251205ea28de897f291c5b67169d63a90382be04f2214592aeaf9a5b5a66b3b820ad3cba372e462f98a30f7243ecf27edf64714e3a3cac87b19c88148b91621a7aec6b98948ba9e7b0003faeb65d734bf6c9fd7557e0b794c70812c76bb8ba3d71e593bd0a8433d943c7e1e34839f31bdb5ae98995b0e18f059397928350ae7a0077fd1464e399b158a6badb5fc1ba9c8d05cb7c55002e30cd65510287a0dff7b82068d96883989eb67cfd7d2e68f974019f6d4cc44dc46d8f32d7b5b5f46e6f8ec5b8d8ce030ec4e636236c9b17987d8711844901d9df3ad9ba6661593b3d2e721e58dbea1cdb402ad966d206224087d1d0f4e86c422958b841148a93374f6697f1b9daeb41287bbcba76d9c93a2f02426476429fb780ae09f8fa8ad24559dc54a6b13c5fe282a225b7dffba46d3b321366cec787e69706c788b0929fb3ccf54f47b94fcb39130e103fb1d41b3e033dbda49ad24030e334d8e275478016375006804101fe3b6a3e1aeed5e6a5ad35697ac0e00bb0c64d988f19056bd7850cb2065b5d84285a38a3c5a7bc7d5b918e33a0b3caa7d408454f6d1827ac6abed80f9034600e5809e69fc36ad79cc073c3cda605f4a4133b5f29359ddc76ce1ba8ae45105448e1b552cec90177069cd703eb8a27d6e2338029a2ba56a0013b540ce69dab826bb619c321efdfe1b8cc21add9a51007ae05903d07a83bfa716d2a71ebe206f1ec3f6e0e6aba08b7534157546912e144bbac699a9f037c62ea1ad56658ed14e6e5148a1c492cd97031064674397da7353c6308cfc2f6f0d53852bf87012081928d287dcdba1de90882e08a27dd8311928e7668c8c383fc169e84018ec8650a97335a46f42f840f85c031e5fb00e5b6686018190536900c5e70ae248fe31d910f9e9322920727f625175aa7427120d75c2422c9fa018ad8dd00a3c5d6288be411c184db10e63dabce8a97d10d7160a16a0ecdcf0ed8b421f6f5ae3c17f6be966b56e9a2c1266d98c1bcd422d447c58d75d76412c06ffb6e1d8e6fa7db29894e3281485102f89a321eefad57adb4b3f605954e51459bd36a82ecd12c6635a48bb2a652f663424f1e0e6ef002fd07a6182de64bd824adf01ad3e46dda734d23be4c3de3cfb8b0be3d8738a3d04a11139ac7ec97f55e6437dd78692b072d14a8fc62d6e9ffff193a8cbe1b8185ef5be2f58d83be563678e8f848658b0d55af6d718c3806b9e83b86892ce8131eb1a88516e33fd3a65a3e28c49d6b7d94c5c3d515f17e18ecc11c78fcb45c858abef02da1e28baa745dae873b4158aba950b2cbde895469d6e39feac59ae08e9de945699947554861b8c6155d2918169da1e49151464fd8c6e5252da8dc122fe648011be280e8bd3a4439eeeffd967209fffffef94792b3e75c8782486fc977f48211a0aee85b9467128bd125086dd46912cb491de37c8a4c5ac5f4a178bcfd8bed2c30a32443ba19c73323a8343c72bb0e182fd462e0dddeadba1008c3b8df57567b8cd5da36005a47372f8d518ef37203a8abbe9efbdd9370cbaa0b78fa7c33a18487566175a022abc77d7bccececb7a17e22bf13c6a87f97b131905249f7ffebb040a11ae13189bcd1c47c3821a0bfa3f7796a425f25506e9a88949cea6c5345ef06e8075a4887ce2813e36fb09bdc401561759daabf63b708c5c5a32f132e27944f7ef8d5f4b62e5f4788df52179dbd4d542bff8987172cf0246fe0cac642603e23215e2f4131629c4bd30331d4eb3651c3f6ccc0f928bade3050572618c7bac7360272e21881db6714792e62ddebc89009d7d3b176f0456bd56317e8eacefeb0cd6cf3cc623734bc123c0f557593a3e328e89abb5bfca17e52272db005327bb8a60e997bfdfc03b0a20db9279a2a9400686d3c5c4153ecac73b1d8f06dd743c375a882358ca1e3ba35d92774c6cedd42d4c0ddd23f11a04a5527300b3b633670d898e094c09d3aa52df085704431aca8b9510f7bc3df3c8b76e7c89967fc3a8001aba33e5d295d05f22a0a0be850aa56833cb3b5f9543c483aaf722558c9e05f394c09fbcec199cc3dd1df3212c24b4b7e21802b9ba8e2c11532da764d88103453e9303a0aa8532fed5f112d065eea7dac0ba2ada14bbb5a7796132b1494edbd6441bb98dc3b79580bb03adc3768e899b95c69d70269f2fc4b01ce09bc5ba9f0ffd3941b865e227eebe5bb870b7ffa103e2a53ba1855db9bb3fc4a308c2c103345e2657c774e92a94aa2b3c320e85f8067e9c75b4808d5cecd574d561e9cf3d3c493b49fc5088208dacc369269f912c9c3510ee085ec2ebc589257bd2fc66585fe79561a3a030c473201839b081cc98e07551430f33721ce53207946685a334b73ec3cf86d752d2b8bd9d8732a363cdcf95ec1e0ec70adc14dccc5bd1153243f37d02c2aabe89e1eddbc74a0610755a5a3df9a3c0210f595e841c48d6b5435ac3b5938e0b86b3e6ac03af27c4615247dcc88fcfd1254dbc7d9d49f8b2864ce46d68cc50e02cb406a4a936b5ac56b98ab2e03df3ba748d8ce7b0cef9c203bdc784c3cf82ba26248afd291b9f2389b2d55c83f3b9d220af61e5fcd8e6e00f8ff0340eed7f43b5d674bcb1302a891dd5bb2f597522638fef082e202a6f97d6bfd2bcc3fb11a35cb2859b7aac5ccecfbb42f04545d5d3d0b0f507c20d42192912ec2469a99d90d91f0f888b9ffbf67dacb92380e61db5948c16026da6a3ca2228d2238f7718615401bead8ab9bbb434fe7f6e4f00c3e3d42f7e3e7fd24e68f07b447e65ba6f1c61e7810dbf9ec58343cb9f3e5d9d46798aaecfd7650399968ee2ebd069a860af5fb6f58bcccc4df78fa4e0ea7f7d180c33179cc98ca1b209eee1be6fa10a4c6b6e7110b6c9d03242f6626a3a0308933774c16b4427010a96607308c428ebdfd4e197b0c4a0b542d705ed1406a295304c3a8965e59bf0c6f41946f98a58436cf1ce46117c8031065ccf94d7522f2dbd66440b3d6356c2be31a02cfb3d89d50029e012554de0ab1eba9d19eae1a2469368828b25427b624fbd48bfd2424ea93231f0dd4d536bff1c2212a31b2dabf3b16f67da7ebcaf8be6629d88db00e0263bc220328ed5816ac6c317e0d01d054ee1918161aa31a4587af146e511f549fc7f896229cda5c7aa8686d9b4acc0cf4d2a0304c99d95c16cf6690c2d630723c20561407b4ebf4037ca87894a6a5a5b58fb4d33cc0f7d3c85ff166ebacd7b54e4c5947cfe7137c342dd776e2597df099ce1ddc7396303e2c6387cb999ab162679e9983531649a4a9ff64b2d4b242eef6b95c10b8050dfd842472ac6f96534d33780ddb5462c649a527c821b15d0a1f2ef07752b6559e848b142cd3772861ba6025ee563a4f31cd36e7a79933cff101fda808d72d910ad3aac8ac02d47c3c940cd1702202a8b8fe7df6dfe821b0e98b69c6aba14b16cd786cbea43bb719e095c7b82d14a28a42a50f3731ef5f213b27df46c6c4181f408547de4558b78aabeaa1e07ef2714514b14ba8b193ad4bf25e4bd6380ce7e23feee48599adbdbd8bc13dd668ac9ec16e65486db7643730917be6c3260dc16ea9a285d8055f53510c858b459516832c226d7badd8d094619d7d3913b8ed6c52146ce9f6ea67b24e966143a87c3d024a3854400d699713cea050f775da4a2bb2b8976a4751baa6746ba2c348d049e2514515f7af156055b1c25a73020d894bbe0a4ba891fad772c78faa5b830cfdfdd4680226b300df81ea35d000bbef31bead059e77816f40579f4093df4e64fe29d82662015bca79a81eefdadf317d5865e4dc82c13e87d255700fccf6e7db6e7bc41300657d232ee68f27e70ebb25cadb69c3cf5c8d0d3eb8d31aa3d15af3f667a4c5b994e0b5b8f43d93147560988c4941dc722a189235401a7b51a29099c69043ae1a9377648e7a4c327664a8f56e09a34091a1119f44614cc29929a52825df9a0025469188481199064d8f3f0eb9e10c388124b9f1bbb3a63e32e76a042916470ea13f4314225c7911f5c90243e73e9a4ce52f9bff0a7c9bfa04ed371b173131486ebf98f19f6622c259ee85638514d077de4e281810cae4300a4db04817f8981653a2c0e1a4f3478c951ed0b6adb2fb386858081a5195bcde5e6a261cce9668ff34c435b18c779da1bfa70af1a644e298c3cdb165986bc92d43204e4ab5fc2add71d45bad33ed9ce76827e91cf511a2265410a94abec5b16b439ce651af50b93a233899ab8581d0af867dad8d9f0ab76df1df0371673c27bd42c77b1ce5ac65f254706487ca9ddd93ba2a82d0eba2d48b2b8e73ec8a6704cf9c0a982ff25530284267acb026ef59c1d0ab633e15ac5996c9df60d52d535b4357271d35358bacdcb19cd6e58a3356f3d5fb5138df7582d059f85a71dfbf19fb064de73379377ffdba5da6fca7fd629c302d04b62d5f29de6a3b785e8a5ddf611f55efef820e2331e9227340a4365cc094d844541501136e44fcb146e3f713bea955cca84867cde4e6d93db43fc4346aa5390f5d9fbac30f2f9ed3c4757d9bd53277b16a1e45e69718eca0f6801bd39b04c2e47eb0e43113f4d2d73ca4ea3f7818ca655f9d39fde2d8a310e027f9f689c20fa6a0a8916329847f94e3bbb9828d588e4b3cf8cd1cf61aa8895a03057ab1e883a977290870ebb3a65f76e507038f8ddc05e0ba7c79e5100902aea59cd04b5481d4a265af63f4ebd6f8daa8f8e8539f7b08eb992ba22cfc2d303ddde3167a76c61458ee977a0cef6b284b80ff2d48b03f4b96142d34e801b1887ad06892cc873a28ac1791568b7f77ecbbcb3dec0c8174edf2882539e93f6162d21455b8cb8776ec5deb83172f0b1cc2c9e1917741f7504f0e8ffce12f6b972a4c10e69292b0f787a6ce51f01a1fb26948216ad86eba07a2ee98390ad357e3ff7b494b645bcdfffd4884d1281fbc1a1d5b391ac5d2d2a88028ed5ad6475c86212d9ac19d4d41e24b2efdc6fe250c79cb68d4525fc505a7439cf4f022d33d870cd62a2605309342f12ef38746d56e38c783353f4ac608ca6dbd8706778c981e282bd0208fbb99e27585f42483879f3ec01a0ff61ebef211d074a6b6a428e2e53f8692e1dfae4d4b33891e00c5b75205d6254c7e78c6d7b4e453ecf70adde2d119c22fe6d7cd5b0fb19208a300d6b5ef29f654fed276de3d5faab8103ad70ba8a2db49c97b211dc37c3bc9a70fda2be86ae5e90951d0fa78a62b631af3bd6c4a2d567eee9bcf3338f46f363c3cb9c6ae9ee7e9f3255631e7da6d7077351b6b64907ffb363176dd3a57efbc3ade9d6d8f76cbf21bf505d521da1e7cd87548c065db51bfd886a3a67cef7e1a4a3c0236dcc4c599e1e6845dbf9e1396fd1cb18ba7dfad53cf48d13b2d2a6d13496dacb1bfc2ea77bbab8ab2d8321a040f0728a7b51382f9c35bcfc3aad6b96f62d0285484985f16ffb538081f9b0d16bf7f00167ac09f0d22a34c78b24cfb8f696c3b1fdc8a52880ee8bcd5cf913f0b186d4ba4fe9b82c54a4e694548df4ef349792cd42a3f830b2ad89708090a0ec3abd30600a7921ac537b7c5a67d1694cfc849cb6de0cd1f424a6a418bed2c4a6862244265cabd48df5b2702102ac57699032ab210e093cff65f1109a6ae4783e0035ca76333c8a44fed9738cca465e8c935a9025ff6acddb2e52e9760bb79f8e7270d630c12f69a0ec4b0e7dc0fce0f3b9779ee5af6828fac1d6d8ef9e0460d7bb7d3d4d129ce24eb223824c269905b076826ff6949999b32f261f138e9a1521de80553a90491b03088e414488269c7e27fb4662a1680b07020a63d6757d809b94fd101e0d06bd4f3b4fcabef5d3b68ec5df2a546f44d284699b42565a7464d002fd09f129073ee279984431b4d4139f86058f0ca478664c26b9649ed3b365e7873520988372cbe649111dac8059f0bf2766c09e7fa2a15efb6e766a376608ac195ff39bf3785b73a97b8ec2b0b394b66411cd756aa2b0d6d2bc72a8dafcf3c23f5cc952985cc1ec31c13dd6f10f689bb1f3b166f3ede0b5816ce93f075522c2717ef69dcd047837c1cb7b2d6b2b7679c656445025b9b503d9abea1e3d2c57e32a7aca132dd04649196ba3247f556259b0177faa1f51e6d703ffcb607e0b184cc39de8f55eb10c3e8922fd112dfc0b88d803da35580b046207f6de0dbce671789a9e935b0e9b9185422f8271215c7ad1311ec817c228071f6c626359816d18cdbea7fd7009d88e13b65ae3a7cce44f4cc2591fa7cbe467c376ca2c455015f4a3098689d59f3a3729433f0b044f3a805f2551cdab2288d4b8fa073703a0848480edbdff7d40d7165d83c6a0d6718017ff3eb85da83440ae5aed7c163913bb152064f761f08cbcfd1f0b5122d890d7f06046bd9d83505919254703f958db13e1efea6c7ae0b0f8cc2e07fad914518fcb416616d97d444b136b07c64bd3cef2b73aed3f84e818ee080f7f263a488614429bb263c8102855e2b5ac654c082215bc43550fdc8225738c1001c54099553869a78a0d78ffbe9082f8f1c52bf24811f978c83c8a4c197ba74f19057f5bc6fc88b29fb92a7c8dbf152d262ec1ea972ed7bc1a83fde01156b369e6d83d1b412d9e9209ce59107f104f156e7a0424a7c22891c6298891e0457418c4c08578252871f0517fc048f1d834b630ac33fdf43b555763fe6d4e606f46312fbf64beb228324f4e90a40a74c3728cb57ff3c0cf9cec185fad3bdb212fa713f8a3139f9081ec4538d9aa86a041019d351f5f5e694ad09748ab719602d09c93f999f34567dde25dcfa3f0931292b6efab0313d73715da6e4b331924b10e4092bce5279e801e20d15c587ca84526b4a2d5a592d03c6f6f377b4ce408a12820d51d7c115f14438272988124fce0c3021cc055472568f0e2d85893388a70a27989b5974f9f37b946af80b9b0a087e57c5c70b7c3cfc481b3c2fe6742076fbad894a6d451dbab34df2706671a17e4540346da4ebff55f86ecad8ce553a167fd00fe38f12d5f66993e2da15df43336c88780cc3dd10f26a92c1aa38b9c788ca331bf7d3909c3c79c856634c6a9729b0a6412f6b0a6fc0f0ea283151b098765d63718b5209a997feae3d04fb5ad1f70b1fb76d8f694116c7adadbbee1bdac5e0a3851de692571c6d383fd18cad1457b587759f0cce7d2431eda53474d50470d534dc063cb50f125e6f638beafe291045bde01d6b8c600236b227852bb9b28a28a2ccb3afc2e1e51a6f4d4c28ce13b2402f3459e7f5d221f880706c0b1284d591c437ae2d012a0098fedc171e787f8d054285ac1389f323202317833b1372dec4c0ea70f03849c758d5049e4cda0ebcb26fac86e8a1c100f32ddc1715b73c718b2169a9405acd06c84103f246b79ee202c764f5472f073734cb04a51f55e6f519ff1645e7e6c30064f997b1cbc10d6c1d7830dc25b91078127a8d38dc5878d2c3b16dda39a149846277f074be476cf0731f7cfcfcd717fa15c055370d27191993f92ec5009071088a6b0c59ebe0d162d4dca9c8ab4cc1f002ab8335844e195e68d8e9c183204328f21847ba9a59974210bb9954669c8f5cf02cb0138e0f40d9cef9ae6bc4c8fcf1bbfc109cd715dad6e86a0eaa43919ab6b1730fe89bcb6ee74e60e4ee2eef461a340cab995a54df6ebf959d8fb6d6c84b1580c60e6ec1006b7f2751e86cbbbc638f07d5c8fb35c40a8fc00be4e3464909825344409c54fe212185db208a0f655119bc9660a6f71bf4eb45e1a111745191a61e43ae798939f029caf784115d83cc56b7e4e339c366c1bb84d2dbdf42648c152db331b5f17c9c97448d53140a8cf6dd4ab7e5b1ebb6e8adb60bda0f0f40c556e62d70966f6e9410208a83fb42206178a3140a86e5fcd1fcdc24e7dd52616adf8d4d9d2b6555cca36beb9cd680ec14f309abe6d92ecfbefee3e1e2fcc7e597317f2c389fc897bbc287d434469bd46066f20340c8b25a12e9ff1ed04e3ec5d9a70df8ff0340eefd69f6f53b49aee07d48684433d749a966e394eaf5bb15201b9d41c30961c2e15aa12f590f2c2ca091031159107b25e0c9248b8f705f209684b2ce9685ae9397bdff322b12cad4c648ebbe97aca65cec0823c26ec2bc44c672b9a2af8878b2a6929bd01e96801a7aaba2480b9d1ca831115d2968c89ff9eac086d06bfc1d50848e06abf6a485dcc5d55f4ee650290f000503a51df855ea0f9a3537604f1c8460befb686b68746d18e9c34c8dea75eb219511e404b82c81b1a668af7abca467e107f66bb18ea847ebca02b694a5f8de2af4ef241ae7e923603fadf33be047d59ae9edc1510f4cdbbc05b8f18437175df495879ad464ff59e9a82b5dd9166f879cf1b2705a1dd2aeb9e825360bcaf7c960a37df2798aff4cc89f5340c17b3fc2705bbc2f9546a2536f837ddeb7a399cc6fa94adbfd5090ab4383e423b0552b1af6100882eb6df4bd8b13945bfd070b3d68a9a6deaf2e83e14f4db0fb0e26ace907c38188a238f8f495e6c6d3bebf8db004d4bf48ef37dce0787a21d7a36770e5df8244877d1164dfb1ee147713ca9b8b41a648a45b55105184677d1e19ddd5eac7db99e2efb759acdb24324cd804901d7e5144585f6b2f9a1be346beb647198621c0c921384daf0df62a4c77132c381ff6ff47476a89e9de0e395b10cf006417005379ed8d6acae7dedca8817b7b906a764379bc871a7bb7faa17a12057b8198ea25631563818a12b3593be60dc9442605d02c4af3bd8680fa563bb88a4c1a60509a562271e4ffb54e4688611a4402a01994c444463d81de991d5a6a3a16d8ba960010df042e36cec05d114f5fea90d53984d0fb67f9418f2085c4246b135bbfedbbef61ab188c8622fa0b2d1d6dec8b141baef549e63b65f31fdeb25881617ade2dcd13c362daa8e2b8cb63f674ff9655b6ab02cbb644f29dc0c14e421f9ac6990a555d4ca57a3cacf75458c1201b5092ebe07444d06840c46557f96f6e748f4745cf60b7abf87275e760c235934ccdc9c1a5c099cd07daeef6d92174c2bf748ce95749a1013242f34dbe84264ee0c23e45f1f58a8a123265d8a9a07c52b1ef4f422f8a2f5cbe825ed9766ad4a843742886a9195264cfab010a19ec819764392e72b5109e613d823ab1024d480519784a24acae4b004eec3381413cde52925b21330e532b19a23ee1418e09a66f5fae55c05030d30f219c7ac3c2c9163f136ca36b437ae2b4202c1116d784a6467fa9ab4cb828302b244a0486b57b447df2605aa6e24296ea9305e159e35c433687e89e9d65f540c75e001386ba5cfc5fe1c77cc7d0fcdf1ca02266db7b70720ae9f719d78474a86ef302365b723e1d00309006b140a48cdb7b2bebf0939fce59a87d7bf6477dc9402d0b97e104aee32158ba12a742b71605e45bcbd49b35fa9bae16c9cef50b8de73e653b60bfc864ce8369ec87d34cd5a7f215229a81169cf3204cc46abe655590b2dffcfdb0ae4630d2d0090e0a366de26f36345f06bf4eb034b103a04ba911c39c2c00a61f7a5a5baf76fe02e0c5100b559aaeda1c0c1f50e93586c9e6582f816093b1ce69dca7897451329f64f153cf16bfdd31ded8f563f23140d99a8177371810339038f7f881afa636387b4070e218b0386b189110ed90bb6a07876a2ffc859966b95bf19f6c5a12ce358a0d2490099e320c521d4622071084ee72410ee9e0ee61b93df7ee212e4b98312e41b007b46ef04675e448e20bdc3808f121a3b1c9eda22117e02bfc4a604a32c2809b8599878ae306b6c6ec26f11021e22f8966abcbb8060ee8040ab6fe498e0db9150d5833f3fff5963c346e6e8ceab399cfbd50a0c5b8fa4d4b120112fb444adaa1528444ecbcec9e1021d3e14ef365689c4bb0ba3d05acdf749d947b40a78c90fad78de565fcf2a6c175022b1d38ca5888101ce8f33568d4cc77da2bf81350dbd7fe29b7041fac8960bb2fc66a867b2d0f6118d533f2b031f1a543bef4631786e82f2c2373d0a416b70fd5c9454a889999542e6e6bb890a8095a7f702c95a571364ade32f987f30e956f0f8f5ba1b23ed6295f8523234c244d0a2f5dc3e155a525dd6e22d55b4d109cb46ed989dca25cbbb1c7b848e2590ace9f7f8f0ae80449de5f83041df4783109ad588f8ed025c80f1f875ecba50f26dd478ffa209a1f318c95d69c1f38e3adfe2156d1f320e5a39f64c9915cf4294ae4b4cddbe3a1307565a25364f38264be375c8842eb7b69a961132396fc2aaf2eca99a7fa9a8c4ff9645b234c0fd5610aac31e516765cfcfd3e8467eff78d12cc36540597268f14695a62b140c8f73a9ec2770677027dc3ba0822a1a00c97903916c10cd0e775d463bd3e4bbacac95bc3458694e0184743ae0690841801544cb01b8779f4daa055a6672b6e8f364bd92a3dcbd2cda5253c6a95e276d892ce9cf743c13563616b3412d6ea9c67b12bdc082a48f2b8ccf3536bedd5d2aff2df784179dbdc554cc01ca14a334eaf9de68793b0820ace483ec63337ba2c25d174f8a952d32f53d4168f0454cf54e391f9ba421c0ba59fa771fcb4121c53d516aca2c9af0e0a7f7f43d8e194b248ff14f302f633dc7a5614294bddb49c4e74ca6e5741f2a32145da1dd8357ea19e3b441270482eb609b9317982e7a1282f3896c313cbe12ebe2e66049eb56bfb4cb95a8d6dcb87de1220ada7ffa7e9943b53dbeebd2475b630bb7b791ceb8614941d909ae572cbb34cdc4d1672978d8087ee0da16dada3181cbc4776f6c54c2495f8ba2ed59c51c6d161830dbf7d0ff1c9b6a6480369370d0fc15b755aa7fb71f5afa0e52db815302bb73975b9f8ba59fe1e324c92972a78ec6f2c4bb37152c238437d19239cd0f1f10b69bafde9495176b6d8f9a9f8d8459ec6716506c98f4fd822fa78e4ea8ae5603fe1ffbbc13af943b38ec764317d0b39036e4849f9640994945d085b513bcaea454c64e3dff33d00a518f4311904189f0ee9f1587e674f7e001039adf17030fd3692d83513be3fd71335aeb5728ae58f75c90aa8d7c845b92efe5c35fa6512e1373b8ae5b5c1a408a27299c23bbb23612cf36df57a206b7aa3a272eaba9d19d4fbbd7fdd15f9e3e5b97e3c737f51564728057baad689d1897da09606b6a3f765806d6a7ab5f0051719cd382a06e6f323e73c7a96d7ecff9e9ceaae450e6ef15411e83ecdc8c3fedaa011934d0af035c27cdaee67a4664f3db27696c553cc1e9ebe9b412c988805fb1cf78de685f20244d5bc5e120ad6300a0520462025c37806dc2428b9c9c94d85a1e951fee19cdd30b2905042aa3c0c05f7f059018064fc4085a3f8483691809a04c06b4d16cb9db2ed2ecf9e633c1c4abb743ae51844ca449d069b50d3dfc453dfdee73ab3eee18c88c134973ce85c70b8e73c062d7fb043fb0af5c580afff25531408f108f2b49c4f5d110f50dbd096bed3c32d79786ad44076974a81ebfec9967c7be1d15c197e1ad7e86861963cfb9ab0e15b7577a59e8f660787969ae9180485fcf56accd1ec8d3dcfa749de8f49e4d33dcbddeb4c2113690c79f3420702207a1fb64c6447ff6c0125268705de78cad0b15b7cd7da3128b349bf6aed18f7fa3b1bd59d8b1bae5fec0616db8245d1dfa46028efb5ff10351279e3f49fdae5f853ef1716cbf32fb362ecc9dd4501ccda83d69bcd9cdcfd1100ebae006b340283169af82ea895bb5ee1bd0803f9e566877903982f98599641a89f8241500f8994e0ab116eaa7a8b12792430adc41bfc64ab07bac1dded2a3626e75ce102eea1c4c3440862349d1096375aa0c0e85a89e6f482beb9077a1e01a69b71009d688f85f730bc93aa501990eb39fc1844970504f38558d4e6618f7f547d2ba654e55748c92eff6e26de7feacca89ab048ffac0f14214a4d8333dc078f218a8c8d044f3e9f1751d5d5f79a15859452a5fb026fc293b21c9de9e1f30855dd376b7940ec1f8822bbc131bb24c7a34b0b019518e5db5899bb04f37bf8478c59bcfd408fd7589c3c5fe23fb2edec6a63a34ed78db15eaecf2a30c8cd98e492d6302b8fd1176275b059b14d63b614ea5c2eb30ae874491f08da3697d840c37ee68a88a701325ec89fecb09bd99a9c491eee6c58cf7aa93b4c26902fcef854c79db55fb32b69983c50fbfe3fb4891066bb8bd2af3ed2977213907607dc8d70c778af59916ed3dd0899b89c5d84ddf20e72224ef105c626b76355c78e98645ce964245f5afb63955ba9e5bab08df3fb7e085c623c3e76a39fd87a95765fe9c4d66bb6fc8aafa376eb07081996d89489c8c88a87dc235e891aa7bb90f244525fb94515dc184a90a36930bbb67a5ad329bf49876e1aacbafada0bacca2a60f63329a4daef297e65234b2d124d5d55544b5f735ccf83ea0d5965a261f5ddbf17c3d0cb2cb27d88bd2e5f5143d21c76ec6f50c5b92e603cce3c34ce50adb63729a1ee4fbd00306e6c223d89615c1747cf53adbea34afde0309fc557efebd9392ca1d4157f0088721ecb172dda3256e5e41501dd282b945ddeab2960328802dcf0baa015d98893ac9ff070217aaab7e1a474e1168a522d9c683578f4f0a307bbda1fbe747956bf8214aa7a07d2c5d4cfdc363e2e4caf4757fe019aa76fb545525ff6a6ec92f82b99e4c59f20efc084c532210e1208553601c2422e4e61b1bcc8fa63b78d6d02bc47384eee7e01a807c7253c2eea1962c7236cdd3cf6bae5a4a96d5432654136b4934e122778da76062cab5cb7a4d23425047686c07b1fcce80532bba41a36ca37a65c3c7afff439040a344429a1438be2aad9c0f0f903a0ea4ca0028b6d8dbe3b3580ef6424bab727db761d77b38007988918937c40b0b2feaf6d8cc926572823c20278243f9e2e5ab4ba6a2c22b60a71d46ff0e5c31c08ce63602a9dc17051c4a4d0d62a78c30eee92de8013d30b9b105ac2cc131d779003b085c83352dc49647ff53c569a0d5da059341f52b8008fe7d4d94fd3491c2acd8acd12182c98044b48eff3e84c09d000ef26f096c0b18983a9b11d4c6d5d27e51978060140ee9df395bde77725b043b458081528c9e083dfff7eadd7556a993b33b836f1f4fb9e798288249616a9911cbe25c442a3045673a6ee79baef00e39001ebbb3afdfd713cca01c2695f70a6c12184bde3b268679bb0da07b1e5c7ae433943f8f3f09492840aa183daa3e3920e734677a9b26a0614b5f19bdb61b8ff22c975930f24ef66dd1178b05dc1e8cc2ced28e635455e07dbe96d51822abf392e0bd761583ff672fab79d354a5326137b7903a96b9415193aac9cf57d264d7ae64c763bbc6c67e7236e1d5cbce715ceb533d9ede0eac0a2fe4814ab921ef8b1cb288984f05095c333258526b5852ce92771ebe0d87653be92e654e2950d50191cd058f17f350272cacd5341e5c1259e96b2101d09367c3b4e76c09edcd6c9a79df42e6eeefc6add0d30f93987da487fe420334f67604f53007dbcc0010d2f59466524a9e43d5df6312baed680741736f03a781982d221c6763760dc21d387d8668465a6dc3c2e64055cdff8eaf47706f8ecb66aedae204c18a2fffd9428c0e68b2b2b054bb9b2d7f63e3791d346664d1b401acff54e1ed6696e0f0a1d3bfcd332de6a3382d012376384cd51b703aae4f91d5149f99a560219aea47073421a3856582e6c49b46a7120cc39dfbe0727a26952fb9d3c1f2a2af546259009852d8f93089d7724480fd628df1f98827f8b290d018217b0fb620f9a644b6429d34c25585cd3601986716e0478e5711c19fa9bac58e27436ca33c0d25b5db999be39e38ed501308e012a182ce6d3b1cdb85f065fda59fbdf3a1cafbd3c8870afefb8bafde36e2199db201e22a10810ae3d2233abb755cf1d6f83de91d566bcb888ad3517948a4c57ca796c2cb9a587412a5372e3613d016620d7066b2d0a25a12e0afdec5c092f537d0aa173185716d456efdafda5c88eedd1f4362cd1c76cda67c61a9237aebd67b7d5fb75b17b7551cd19bbf78f58aeedb9d0d4fba7d606aa2959fccdee8693d2c57a34b2638713189b11dff34e050786a20370de70f95f62ad1b02b6d7c8b69af06feb7a4e4561dea266a777cb7d29cf7949f99779a512f1891558941543abc07ac36d3ffe685447e8237f37940ebf47dd52ddf65fa5ac096a1d7ccec82a796a32b8f4278a2d127bce0141a00f603051271c3567a8f880878d0452cdeabc5f4fff3648e2f439208d0e17f3424a2d2a21680fbe8792f8c3810414c3b77f0303" ], "rawHeaders": { "access-control-allow-origin": "*", "cdn-cache-control": "max-age=300", - "cf-ray": "93ecb9839aadf20b-LAX", + "cf-ray": "93ed4992bd5b0906-LAX", "connection": "close", "content-encoding": "br", "content-type": "application/json", - "date": "Mon, 12 May 2025 20:39:18 GMT", + "date": "Mon, 12 May 2025 22:17:39 GMT", "server": "cloudflare", "transfer-encoding": "chunked", "vary": "Accept-Encoding" diff --git a/src/api/providers/fetchers/__tests__/openrouter.test.ts b/src/api/providers/fetchers/__tests__/openrouter.test.ts index c05649078e4..4be52c69cd0 100644 --- a/src/api/providers/fetchers/__tests__/openrouter.test.ts +++ b/src/api/providers/fetchers/__tests__/openrouter.test.ts @@ -6,15 +6,15 @@ import { back as nockBack } from "nock" import { PROMPT_CACHING_MODELS } from "../../../../shared/api" -import { getOpenRouterModels } from "../openrouter" +import { getOpenRouterModelEndpoints, getOpenRouterModels } from "../openrouter" nockBack.fixtures = path.join(__dirname, "fixtures") nockBack.setMode("lockdown") -describe("OpenRouter API", () => { +describe.skip("OpenRouter API", () => { describe("getOpenRouterModels", () => { // This flakes in CI (probably related to Nock). Need to figure out why. - it.skip("fetches models and validates schema", async () => { + it("fetches models and validates schema", async () => { const { nockDone } = await nockBack("openrouter-models.json") const models = await getOpenRouterModels() @@ -95,4 +95,40 @@ describe("OpenRouter API", () => { nockDone() }) }) + + describe("getOpenRouterModelEndpoints", () => { + it("fetches model endpoints and validates schema", async () => { + const { nockDone } = await nockBack("openrouter-model-endpoints.json") + const endpoints = await getOpenRouterModelEndpoints("google/gemini-2.5-pro-preview") + + expect(endpoints).toEqual({ + Google: { + maxTokens: 0, + contextWindow: 1048576, + supportsImages: true, + supportsPromptCache: true, + inputPrice: 1.25, + outputPrice: 10, + cacheWritesPrice: 1.625, + cacheReadsPrice: 0.31, + description: undefined, + thinking: false, + }, + "Google AI Studio": { + maxTokens: 0, + contextWindow: 1048576, + supportsImages: true, + supportsPromptCache: true, + inputPrice: 1.25, + outputPrice: 10, + cacheWritesPrice: 1.625, + cacheReadsPrice: 0.31, + description: undefined, + thinking: false, + }, + }) + + nockDone() + }) + }) }) diff --git a/src/api/providers/fetchers/cache.ts b/src/api/providers/fetchers/modelCache.ts similarity index 94% rename from src/api/providers/fetchers/cache.ts rename to src/api/providers/fetchers/modelCache.ts index aefc3961a50..9ab4b851fc5 100644 --- a/src/api/providers/fetchers/cache.ts +++ b/src/api/providers/fetchers/modelCache.ts @@ -47,6 +47,7 @@ export const getModels = async ( baseUrl: string | undefined = undefined, ): Promise => { let models = memoryCache.get(router) + if (models) { // console.log(`[getModels] NodeCache hit for ${router} -> ${Object.keys(models).length}`) return models @@ -82,7 +83,9 @@ export const getModels = async ( try { await writeModels(router, models) // console.log(`[getModels] wrote ${router} models to file cache`) - } catch (error) {} + } catch (error) { + console.error(`[getModels] error writing ${router} models to file cache`, error) + } return models } @@ -90,7 +93,9 @@ export const getModels = async ( try { models = await readModels(router) // console.log(`[getModels] read ${router} models from file cache`) - } catch (error) {} + } catch (error) { + console.error(`[getModels] error reading ${router} models from file cache`, error) + } return models ?? {} } diff --git a/src/api/providers/fetchers/modelEndpointCache.ts b/src/api/providers/fetchers/modelEndpointCache.ts new file mode 100644 index 00000000000..23c486e4204 --- /dev/null +++ b/src/api/providers/fetchers/modelEndpointCache.ts @@ -0,0 +1,82 @@ +import * as path from "path" +import fs from "fs/promises" + +import NodeCache from "node-cache" +import sanitize from "sanitize-filename" + +import { ContextProxy } from "../../../core/config/ContextProxy" +import { getCacheDirectoryPath } from "../../../shared/storagePathManager" +import { RouterName, ModelRecord } from "../../../shared/api" +import { fileExistsAtPath } from "../../../utils/fs" + +import { getOpenRouterModelEndpoints } from "./openrouter" + +const memoryCache = new NodeCache({ stdTTL: 5 * 60, checkperiod: 5 * 60 }) + +const getCacheKey = (router: RouterName, modelId: string) => sanitize(`${router}_${modelId}`) + +async function writeModelEndpoints(key: string, data: ModelRecord) { + const filename = `${key}_endpoints.json` + const cacheDir = await getCacheDirectoryPath(ContextProxy.instance.globalStorageUri.fsPath) + await fs.writeFile(path.join(cacheDir, filename), JSON.stringify(data, null, 2)) +} + +async function readModelEndpoints(key: string): Promise { + const filename = `${key}_endpoints.json` + const cacheDir = await getCacheDirectoryPath(ContextProxy.instance.globalStorageUri.fsPath) + const filePath = path.join(cacheDir, filename) + const exists = await fileExistsAtPath(filePath) + return exists ? JSON.parse(await fs.readFile(filePath, "utf8")) : undefined +} + +export const getModelEndpoints = async ({ + router, + modelId, + endpoint, +}: { + router: RouterName + modelId?: string + endpoint?: string +}): Promise => { + // OpenRouter is the only provider that supports model endpoints, but you + // can see how we'd extend this to other providers in the future. + if (router !== "openrouter" || !modelId || !endpoint) { + return {} + } + + const key = getCacheKey(router, modelId) + let modelProviders = memoryCache.get(key) + + if (modelProviders) { + // console.log(`[getModelProviders] NodeCache hit for ${key} -> ${Object.keys(modelProviders).length}`) + return modelProviders + } + + modelProviders = await getOpenRouterModelEndpoints(modelId) + + if (Object.keys(modelProviders).length > 0) { + // console.log(`[getModelProviders] API fetch for ${key} -> ${Object.keys(modelProviders).length}`) + memoryCache.set(key, modelProviders) + + try { + await writeModelEndpoints(key, modelProviders) + // console.log(`[getModelProviders] wrote ${key} endpoints to file cache`) + } catch (error) { + console.error(`[getModelProviders] error writing ${key} endpoints to file cache`, error) + } + + return modelProviders + } + + try { + modelProviders = await readModelEndpoints(router) + // console.log(`[getModelProviders] read ${key} endpoints from file cache`) + } catch (error) { + console.error(`[getModelProviders] error reading ${key} endpoints from file cache`, error) + } + + return modelProviders ?? {} +} + +export const flushModelProviders = async (router: RouterName, modelId: string) => + memoryCache.del(getCacheKey(router, modelId)) diff --git a/src/api/providers/fetchers/openrouter.ts b/src/api/providers/fetchers/openrouter.ts index 27b6c3f9dca..f8e605aa08f 100644 --- a/src/api/providers/fetchers/openrouter.ts +++ b/src/api/providers/fetchers/openrouter.ts @@ -4,42 +4,84 @@ import { z } from "zod" import { ApiHandlerOptions, ModelInfo, anthropicModels, COMPUTER_USE_MODELS } from "../../../shared/api" import { parseApiPrice } from "../../../utils/cost" -// https://openrouter.ai/api/v1/models -export const openRouterModelSchema = z.object({ - id: z.string(), +/** + * OpenRouterBaseModel + */ + +const openRouterArchitectureSchema = z.object({ + modality: z.string().nullish(), + tokenizer: z.string().nullish(), +}) + +const openRouterPricingSchema = z.object({ + prompt: z.string().nullish(), + completion: z.string().nullish(), + input_cache_write: z.string().nullish(), + input_cache_read: z.string().nullish(), +}) + +const modelRouterBaseModelSchema = z.object({ name: z.string(), description: z.string().optional(), context_length: z.number(), max_completion_tokens: z.number().nullish(), - architecture: z - .object({ - modality: z.string().nullish(), - tokenizer: z.string().nullish(), - }) - .optional(), - pricing: z - .object({ - prompt: z.string().nullish(), - completion: z.string().nullish(), - input_cache_write: z.string().nullish(), - input_cache_read: z.string().nullish(), - }) - .optional(), - top_provider: z - .object({ - max_completion_tokens: z.number().nullish(), - }) - .optional(), + pricing: openRouterPricingSchema.optional(), +}) + +export type OpenRouterBaseModel = z.infer + +/** + * OpenRouterModel + */ + +export const openRouterModelSchema = modelRouterBaseModelSchema.extend({ + id: z.string(), + architecture: openRouterArchitectureSchema.optional(), + top_provider: z.object({ max_completion_tokens: z.number().nullish() }).optional(), }) export type OpenRouterModel = z.infer +/** + * OpenRouterModelEndpoint + */ + +export const openRouterModelEndpointSchema = modelRouterBaseModelSchema.extend({ + provider_name: z.string(), +}) + +export type OpenRouterModelEndpoint = z.infer + +/** + * OpenRouterModelsResponse + */ + const openRouterModelsResponseSchema = z.object({ data: z.array(openRouterModelSchema), }) type OpenRouterModelsResponse = z.infer +/** + * OpenRouterModelEndpointsResponse + */ + +const openRouterModelEndpointsResponseSchema = z.object({ + data: z.object({ + id: z.string(), + name: z.string(), + description: z.string().optional(), + architecture: openRouterArchitectureSchema.optional(), + endpoints: z.array(openRouterModelEndpointSchema), + }), +}) + +type OpenRouterModelEndpointsResponse = z.infer + +/** + * getOpenRouterModels + */ + export async function getOpenRouterModels(options?: ApiHandlerOptions): Promise> { const models: Record = {} const baseURL = options?.openRouterBaseUrl || "https://openrouter.ai/api/v1" @@ -47,54 +89,21 @@ export async function getOpenRouterModels(options?: ApiHandlerOptions): Promise< try { const response = await axios.get(`${baseURL}/models`) const result = openRouterModelsResponseSchema.safeParse(response.data) - const rawModels = result.success ? result.data.data : response.data.data + const data = result.success ? result.data.data : response.data.data if (!result.success) { console.error("OpenRouter models response is invalid", result.error.format()) } - for (const rawModel of rawModels) { - const cacheWritesPrice = rawModel.pricing?.input_cache_write - ? parseApiPrice(rawModel.pricing?.input_cache_write) - : undefined - - const cacheReadsPrice = rawModel.pricing?.input_cache_read - ? parseApiPrice(rawModel.pricing?.input_cache_read) - : undefined - - const supportsPromptCache = - typeof cacheWritesPrice !== "undefined" && typeof cacheReadsPrice !== "undefined" - - const modelInfo: ModelInfo = { - maxTokens: rawModel.id.startsWith("anthropic/") ? rawModel.top_provider?.max_completion_tokens : 0, - contextWindow: rawModel.context_length, - supportsImages: rawModel.architecture?.modality?.includes("image"), - supportsPromptCache, - inputPrice: parseApiPrice(rawModel.pricing?.prompt), - outputPrice: parseApiPrice(rawModel.pricing?.completion), - cacheWritesPrice, - cacheReadsPrice, - description: rawModel.description, - thinking: rawModel.id === "anthropic/claude-3.7-sonnet:thinking", - } - - // The OpenRouter model definition doesn't give us any hints about - // computer use, so we need to set that manually. - if (COMPUTER_USE_MODELS.has(rawModel.id)) { - modelInfo.supportsComputerUse = true - } - - // Claude 3.7 Sonnet is a "hybrid" thinking model, and the `maxTokens` - // values can be configured. For the non-thinking variant we want to - // use 8k. The `thinking` variant can be run in 64k and 128k modes, - // and we want to use 128k. - if (rawModel.id.startsWith("anthropic/claude-3.7-sonnet")) { - modelInfo.maxTokens = rawModel.id.includes("thinking") - ? anthropicModels["claude-3-7-sonnet-20250219:thinking"].maxTokens - : anthropicModels["claude-3-7-sonnet-20250219"].maxTokens - } - - models[rawModel.id] = modelInfo + for (const model of data) { + const { id, architecture, top_provider } = model + + models[id] = parseOpenRouterModel({ + id, + model, + modality: architecture?.modality, + maxTokens: id.startsWith("anthropic/") ? top_provider?.max_completion_tokens : 0, + }) } } catch (error) { console.error( @@ -104,3 +113,97 @@ export async function getOpenRouterModels(options?: ApiHandlerOptions): Promise< return models } + +/** + * getOpenRouterModelEndpoints + */ + +export async function getOpenRouterModelEndpoints( + modelId: string, + options?: ApiHandlerOptions, +): Promise> { + const models: Record = {} + const baseURL = options?.openRouterBaseUrl || "https://openrouter.ai/api/v1" + + try { + const response = await axios.get(`${baseURL}/models/${modelId}/endpoints`) + const result = openRouterModelEndpointsResponseSchema.safeParse(response.data) + const data = result.success ? result.data.data : response.data.data + + if (!result.success) { + console.error("OpenRouter model endpoints response is invalid", result.error.format()) + } + + const { id, architecture, endpoints } = data + + for (const endpoint of endpoints) { + models[endpoint.provider_name] = parseOpenRouterModel({ + id, + model: endpoint, + modality: architecture?.modality, + maxTokens: id.startsWith("anthropic/") ? endpoint.max_completion_tokens : 0, + }) + } + } catch (error) { + console.error( + `Error fetching OpenRouter model endpoints: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`, + ) + } + + return models +} + +/** + * parseOpenRouterModel + */ + +export const parseOpenRouterModel = ({ + id, + model, + modality, + maxTokens, +}: { + id: string + model: OpenRouterBaseModel + modality: string | null | undefined + maxTokens: number | null | undefined +}): ModelInfo => { + const cacheWritesPrice = model.pricing?.input_cache_write + ? parseApiPrice(model.pricing?.input_cache_write) + : undefined + + const cacheReadsPrice = model.pricing?.input_cache_read ? parseApiPrice(model.pricing?.input_cache_read) : undefined + + const supportsPromptCache = typeof cacheWritesPrice !== "undefined" && typeof cacheReadsPrice !== "undefined" + + const modelInfo: ModelInfo = { + maxTokens: maxTokens || 0, + contextWindow: model.context_length, + supportsImages: modality?.includes("image") ?? false, + supportsPromptCache, + inputPrice: parseApiPrice(model.pricing?.prompt), + outputPrice: parseApiPrice(model.pricing?.completion), + cacheWritesPrice, + cacheReadsPrice, + description: model.description, + thinking: id === "anthropic/claude-3.7-sonnet:thinking", + } + + // The OpenRouter model definition doesn't give us any hints about + // computer use, so we need to set that manually. + if (COMPUTER_USE_MODELS.has(id)) { + modelInfo.supportsComputerUse = true + } + + // Claude 3.7 Sonnet is a "hybrid" thinking model, and the `maxTokens` + // values can be configured. For the non-thinking variant we want to + // use 8k. The `thinking` variant can be run in 64k and 128k modes, + // and we want to use 128k. + if (id.startsWith("anthropic/claude-3.7-sonnet")) { + modelInfo.maxTokens = id.includes("thinking") + ? anthropicModels["claude-3-7-sonnet-20250219:thinking"].maxTokens + : anthropicModels["claude-3-7-sonnet-20250219"].maxTokens + } + + return modelInfo +} diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index 39694c8baaa..2d9c7f8b8a4 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -20,7 +20,8 @@ import { addCacheBreakpoints as addGeminiCacheBreakpoints } from "../transform/c import { getModelParams, SingleCompletionHandler } from "../index" import { DEFAULT_HEADERS, DEEP_SEEK_DEFAULT_TEMPERATURE } from "./constants" import { BaseProvider } from "./base-provider" -import { getModels } from "./fetchers/cache" +import { getModels } from "./fetchers/modelCache" +import { getModelEndpoints } from "./fetchers/modelEndpointCache" const OPENROUTER_DEFAULT_PROVIDER_NAME = "[default]" @@ -57,6 +58,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH protected options: ApiHandlerOptions private client: OpenAI protected models: ModelRecord = {} + protected endpoints: ModelRecord = {} constructor(options: ApiHandlerOptions) { super() @@ -168,13 +170,29 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH } public async fetchModel() { - this.models = await getModels("openrouter") + const [models, endpoints] = await Promise.all([ + getModels("openrouter"), + getModelEndpoints({ + router: "openrouter", + modelId: this.options.openRouterModelId, + endpoint: this.options.openRouterSpecificProvider, + }), + ]) + + this.models = models + this.endpoints = endpoints + return this.getModel() } override getModel() { const id = this.options.openRouterModelId ?? openRouterDefaultModelId - const info = this.models[id] ?? openRouterDefaultModelInfo + let info = this.models[id] ?? openRouterDefaultModelInfo + + // If a specific provider is requested, use the endpoint for that provider. + if (this.options.openRouterSpecificProvider && this.endpoints[this.options.openRouterSpecificProvider]) { + info = this.endpoints[this.options.openRouterSpecificProvider] + } const isDeepSeekR1 = id.startsWith("deepseek/deepseek-r1") || id === "perplexity/sonar-reasoning" diff --git a/src/api/providers/requesty.ts b/src/api/providers/requesty.ts index a8a18bd4ddd..05ca1e67f18 100644 --- a/src/api/providers/requesty.ts +++ b/src/api/providers/requesty.ts @@ -12,7 +12,7 @@ import { ApiStream, ApiStreamUsageChunk } from "../transform/stream" import { SingleCompletionHandler } from "../" import { BaseProvider } from "./base-provider" import { DEFAULT_HEADERS } from "./constants" -import { getModels } from "./fetchers/cache" +import { getModels } from "./fetchers/modelCache" import OpenAI from "openai" // Requesty usage includes an extra field for Anthropic use cases. diff --git a/src/api/providers/router-provider.ts b/src/api/providers/router-provider.ts index cd30ae03736..a0decdcab41 100644 --- a/src/api/providers/router-provider.ts +++ b/src/api/providers/router-provider.ts @@ -2,7 +2,7 @@ import OpenAI from "openai" import { ApiHandlerOptions, RouterName, ModelRecord, ModelInfo } from "../../shared/api" import { BaseProvider } from "./base-provider" -import { getModels } from "./fetchers/cache" +import { getModels } from "./fetchers/modelCache" type RouterProviderOptions = { name: RouterName diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index cde453d4fc7..1f17d221a62 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -34,7 +34,7 @@ import { TelemetrySetting } from "../../shared/TelemetrySetting" import { getWorkspacePath } from "../../utils/path" import { Mode, defaultModeSlug } from "../../shared/modes" import { GlobalState } from "../../schemas" -import { getModels, flushModels } from "../../api/providers/fetchers/cache" +import { getModels, flushModels } from "../../api/providers/fetchers/modelCache" import { generateSystemPrompt } from "./generateSystemPrompt" const ALLOWED_VSCODE_SETTINGS = new Set(["terminal.integrated.inheritEnv"]) diff --git a/webview-ui/src/components/ui/hooks/useSelectedModel.ts b/webview-ui/src/components/ui/hooks/useSelectedModel.ts index fb1b277981e..0bfa136b39b 100644 --- a/webview-ui/src/components/ui/hooks/useSelectedModel.ts +++ b/webview-ui/src/components/ui/hooks/useSelectedModel.ts @@ -34,32 +34,57 @@ import { } from "@roo/shared/api" import { useRouterModels } from "./useRouterModels" +import { useOpenRouterModelProviders } from "./useOpenRouterModelProviders" export const useSelectedModel = (apiConfiguration?: ProviderSettings) => { - const { data: routerModels, isLoading, isError } = useRouterModels() const provider = apiConfiguration?.apiProvider || "anthropic" + const openRouterModelId = provider === "openrouter" ? apiConfiguration?.openRouterModelId : undefined + + const routerModels = useRouterModels() + const openRouterModelProviders = useOpenRouterModelProviders(openRouterModelId) const { id, info } = - apiConfiguration && routerModels - ? getSelectedModel({ provider, apiConfiguration, routerModels }) + apiConfiguration && + typeof routerModels.data !== "undefined" && + typeof openRouterModelProviders.data !== "undefined" + ? getSelectedModel({ + provider, + apiConfiguration, + routerModels: routerModels.data, + openRouterModelProviders: openRouterModelProviders.data, + }) : { id: anthropicDefaultModelId, info: undefined } - return { provider, id, info, isLoading, isError } + return { + provider, + id, + info, + isLoading: routerModels.isLoading || openRouterModelProviders.isLoading, + isError: routerModels.isError || openRouterModelProviders.isError, + } } function getSelectedModel({ provider, apiConfiguration, routerModels, + openRouterModelProviders, }: { provider: ProviderName apiConfiguration: ProviderSettings routerModels: RouterModels + openRouterModelProviders: Record }): { id: string; info: ModelInfo } { switch (provider) { case "openrouter": { const id = apiConfiguration.openRouterModelId ?? openRouterDefaultModelId - const info = routerModels.openrouter[id] + let info = routerModels.openrouter[id] + const specificProvider = apiConfiguration.openRouterSpecificProvider + + if (specificProvider && openRouterModelProviders[specificProvider]) { + info = openRouterModelProviders[specificProvider] + } + return info ? { id, info } : { id: openRouterDefaultModelId, info: routerModels.openrouter[openRouterDefaultModelId] }