Tại sao mỗi lần cài game bạn lại phải cài thư viện DirectX?

Tại sao mỗi lần cài game bạn lại phải cài thư viện DirectX?

Tấn Minh  VN Review | 06/09/2017 04:10 PM

thích

DirectX là một phần của hệ điều hành Windows. Vậy thì tại sao mỗi lần cài game (từ Steam, Origin...) bạn lại phải cài một bản DirectX khác do chính game đó cung cấp?

DirectX là gì?

DirectX là một phần của hệ điều hành Windows, gồm một tập hợp các hàm API (giao diện chương trình ứng dụng) mà các nhà phát triển có thể tận dụng vào các tính năng liên quan đồ hoạ 3D, video, multimedia, âm thanh, và gamepad trên Windows. Rất nhiều game trên Windows sử dụng Direct3D của DirectX cho đồ hoạ, nếu không thì chúng sẽ phải sử dụng các hàm đa nền tảng khác như OpenGL hoặc Vulkan. Các ứng dụng khác (không phải game) có thể sử dụng DirectX cho các tính năng liên quan đồ hoạ 3D.

Windows 7 đã được tích hợp sẵn DirectX 11, còn Windows 10 là DirectX 12. Khi các nhà phát triển làm game, họ sẽ chọn một phiên bản DirectX nhất định làm nền tảng. Game được viết trên nền tảng DirectX 11 sẽ không thể chạy trên Windows XP vốn chỉ hỗ trợ tối đa DirectX 9.

Kiểm tra phiên bản DirectX bằng cách: nhấn Windows + R, gõ lệnh "dxdiag" và nhấn Enter. Phiên bản DirectX hiển thị ở mục DirectX Version trong thẻ System.

Sự phức tạp của việc cài đặt DirectX

Đối với hệ thống 32-bit, các file của DirectX được đặt trong thư mục C:\Windows\System32. Đối với hệ thống 64-bit, các file 64-bit được đặt trong thư mục C:\Windows\System32, còn các file 32-bit thì lại được đặt trong thư mục C:\Windows\SysWOW64 (thật là ngược đời!). Các game 32-bit cần các file thư viện phiên bản 32-bit, còn các game 64-bit lại cần các file thư viện phiên bản 64-bit.

Có thể thấy, thư viện Direct3D của DirectX có rất nhiều file thư viện với các phiên bản khác nhau. Một game có thể chỉ cần một file thư viện nhất định, trong khi một số game khác lại yêu cầu nhiều thư viện khác nhau; và nếu thiếu các file thư viện đó thì game không thể chạy được. Ví dụ, nếu một game cần file d3ddx10_40.dll, bạn cần cài đặt đúng file đó chứ không phải file d3ddx10_41.dll.

Tuy nhiên, Microsoft không tích hợp tất cả các file thư viện nêu trên trong Windows, và ngay cả khi bạn chạy file cài đặt của DirectX mới nhất, chưa chắc bộ cài này có chứa file Direct3D mà bạn cần. Microsoft đã nêu rõ trong tài liệu dành cho các nhà lập trình game là: "Windows Update và Service Packs sẽ không bao gồm các thành phần DirectX không quan trọng". Do đó nếu một game hay ứng dụng cần một file thư viện Direct3D cụ thể thì chúng phải tự cài đặt các file đó vào hệ thống trong quá trình cài đặt.

Vấn đề đối với DirectX cũng xảy ra đối với các thư viện Microsoft Visual C++ Redistributable. Các ứng dụng khác nhau sẽ yêu cầu các phiên bản thư viện khác nhau, do đó đừng thấy lạ khi bạn thấy một dãy các phiên bản Visual C++ được cài trong máy bạn.

Tóm lại, mỗi game khi cài đặt phải tự cài đặt các file Direct3D cần thiết để có thể chạy được

Vậy đôi lúc, bạn nhớ rõ ràng bạn đã cài đủ DirectX rồi, và game vẫn tự động cài lại. Tại sao?

Bởi vì chỉ có bộ cài DirectX chính thức của Microsoft là có khả năng kiểm tra file thư viện Direct3D, còn bộ cài game không thể kiểm tra được có phải file Direct3D bạn có sẵn đúng với phiên bản nó cần hay không. Do đó, nó phải chạy bộ cài DirectX có chứa file thư viện nó cần, đồng thời "tranh thủ" giúp bạn sửa lỗi các file thư viện khác bằng cách chép đè lên các file có sẵn luôn.

Như đã nói ở trên, chỉ có bộ cài DirectX chính thức của Microsoft mới cho phép các lập trình viên "thả" file thư viện họ cần vào hệ thống. Các lập trình viên không thể qua mặt hệ thống bằng cách cài file bằng một bộ cài khác được vì làm như vậy sẽ vi phạm giấy phép phần mềm của Microsoft, đồng thời kéo theo nhiều lỗi không đáng có.

Tất nhiên, không phải game nào cũng chạy bộ cài DirectX mỗi khi cài đặt, bởi hiện nay nhiều game được phát triển trên nền OpenGL hoặc Vulkan. Một số game khác chỉ yêu cầu các file cơ bản của DirectX vốn được tích hợp sẵn trong DirectX 9, 10 hay 11 và không cần cài thêm file thư viện DirectX nào khác.

Có thể xoá bỏ các file thư viện DirectX không?

Rõ ràng là không. Nếu một file thư viện DirectX xuất hiện trong hệ thống có nghĩa là có một game hay ứng dụng nào đó đang cần nó, việc xoá file này sẽ dẫn đến lỗi ứng dụng. Bên cạnh đó, không có cách nào để biết được file thư viện nào được dùng bởi game nào, nên bạn cũng chẳng biết nên giữ cái nào và nên xoá cái nào. Tốt nhất là đừng đụng vào chúng, chúng sẽ không chạy cho tới khi được ứng dụng gọi lên, do đó bạn không phải lo về việc tiêu tốn tài nguyên hệ thống.

Khi bị lỗi DirectX thì cần làm gì?

Nếu bạn gặp lỗi liên quan đến DirectX, có nghĩa là quá trình cài đặt DirectX của game đã có vấn đề. Bạn không thể tải bộ cài DirectX từ website của Microsoft, mà phải chạy bộ cài đặt do game cung cấp, thường nằm trong thư mục game hoặc trên đĩa game. Tên bộ cài này thường là DXSETUP.exe.

Theo Tấn Minh/VN Review

Xuất bản ngày 05/09/2017 14:20 GMT +7

    Tham khảo XS Kết Quả để xem kết quả xổ số.

    Xem lịch âm dương tại Xem Lịch Âm.

    Xem bong da Xem bong da 247.

    Công cụ tính toán https://calculatorss.us.

    Tin tức game https://gamekvn.club.

    p84hd7FZnTAMpVLYRu12MrlJ027TWrmN7ELss8k0y5NjfSggfpZKmacxQ9vOvgmuZ a0qSvpsPPgZnt 9UhAvSSpLdZ33gRV1DipK8iEEoYmOE26xujpJut1uOst71v38CmDBr8RfcIW8b6ddeqGBBbAnrzHLn4LjG KRyENYY6sD45o0lNPkRdJCZSbW9ZQ2XlvrOl6ev6M84C8NZ4brh1TcgPQto6 sXShH8f47sKslXe1eDILeRwbMHivmSI6Kvr6zEwqywq9fMnndW3JoRK0bLX TaImss5nCgP1se tyYxX67SkVDXpdZliJ4aoSneTvRywLhiFqUpSKh9nYYH0osvTuGxpvzaEynyAXDD6X70Pj6iFiB8VaE7haB8 duUmxFkuGKTlhbX8lyxlTT4YtQO3Kq13kNRsKO3P6ppkXx2oQEqiHxi520V2CmF2iVVyAcabirwaHIoU WeAmxdbyk3WeburlIdLStVdv4vI4dILWh9q5ap134MloqjK8RsaeEtNKNrXBUAN8andCku89EgpFAQIK3b5 hYIHXAfnLZlwTKp7mbtw7wjvuys7tTGyKWHqopyAB9KOnSECBViPWlflxz2oHAxG5sTnrjbgppuotI9hUth6PTCnatbO3rZefFajNh2KBSEdwvCN0NJ3cLwTWPBtIhGaYHQfqqWmkbibZLfxMu46SUIFQU7dVZ1uB3Ict1bcwFiYnDhtAXVhwKipwYU1OrLSD0Lt7X54HegjY8ztC0irty3i7gE0R8VPcaM8XEahR5PRqkel6Gf2GnTx7N9gjHERua2mxhe8yNhecl7quzAfn18egrNfbHs6jJiRjuKHhKm1YkHG4hskt7jYlm7ETY93y0b2I7w9ui9Q4W P hHPX8Hj9aKNsGkiHfVPx8uzDdYnDV2YRTAARKyXMyah1TfhfAo7Vyrp1Uklea50mYeXWxUHLWJc T20jbNxamCFYX6Xw4VlhGLAoICQT5qpH1fFop4W49cf7F05LaQu4pbLUhouzfk2ZoJ590RGSse24iKWhX4fI3Mxdvfhx4z3AgONn5kcxKlc6t0mBtQGYe1A6tZV9FnFS7Du PElKPtux7qm7BT8S krSBtFogRU2zhIOOI499V0Cnbi4afnG2sHRjJlM0KfKMLVZyIupxwj7DqYQddCoXudCgDlT6e5537sAhVsyVS2fiorMB8bpRh6HYuCmSHSSdQh hj1Bs971pm7gBhxzFESJXpOiUGq43QNTk6mlmXhxi01U3PvXyDy1L1xXcMc90qcQJ r669cZkIHr4P99egZwRheu2zjPcNHwi1yQP79X h4lvNvj0sboabRxJbA1GxYcyPTxip3JSKb5kxQGz1JHOLNZZ4 QbtpH5sA3bIQiXGdMkdVerpZiCpf319 lJBxTf2TJrizqyVdux10Zmy9LgXOMI8 82a9mcOd p7KWGwkswu8vo5cjvlwOYE4ozsM09FMRZajrqA goCDfyyGfKl11qc9PsmzSDI1zV2v5K5c66m7x1XUY8ZdkXrJ7nicXea3 NUhuSpsBuFzkkdh1l7YdozfhGYf8p 9WFPPWqKdurZ4FTzxsEE0sGSvzgje22U7pEjxZSfsY6qjpPdKOGauIciOxHjepu84mYy8ZtObgfF5CFl1cjUKDMGFyUddSYmaNCzNVkZIxvVHJVhQ5W6iAddBfFnp6qUo3VvcsESJg 15urAMxG6Q4ZeLXcTGp7YyxTbBQzd R9kqjLfXCNrWKCQ9mVaaGWUTbsAKoFtYU6Hh1jqIdZlhlJsyoFFTNNGP9Ruo8cO5M7Nyv iM2j4E PVJxZ8K2TQvObRopyk7cWfL5DJeC5OeP8r1dWvOq2c4sSJMyBKvYAbQ8EsbeyeJ5jVGn8fvuVBbmyoBD5LCJvwI IL9rqknWjng9 aDtACVNP5klcA0HRKCtBGtBMm5YcGMDYYnINHNyzPwMZu8QjXaB3u4tSgdryUiy5SX1ziImOFYgq373IzZpuY3KGSTFiAbnCUiXKcoJ677VgmE7GtkiZ3klTrCEztKfJZDAEH4agpJwC4e7j5zQ3eRUQdOAduXGtHQ ZgyxDfij4LODnJ2Hs4by9J 6P8bfd4pdw Yklo0bFvLzXeNOVIcQe0GTYuawXBQtBVFpz5cucbyaI9NyJGr5AGCJ4qJTonfYPQHKi7vbkvzUuVVk455LKKy02FMzzEFCujhx7OUdIJ6FSJLAE9GPcXmA0ZtROD2S1ZOyTZd6AK3gNoo8Q5hQ82iE1SZiG4wW teRwNWpWfXsSVpifWuMymTFCI9u8JN9a GAVW819iJ1lvmjwpDMrcFGKdRhbb3IRynS3GYGEWD021GC KOf61WK1CwzptBJVOnmY19fFDNxlo579REPp52248ul2R6FcNT3EZ9ogV0tdTaWKW qRdWYQPhXB2GuTOjilEf BQgVoW4ggj5AkDmVqUFEwtzIxLoKA52Zmuh321lzPqzWzxVNKANIjRRJGd3cgxXSq7INwGnHFAIgEhNKSESHkYemyLYXXiScLkgyh5jan8B6e16Y3DETYE8OdwrrIFaFjf32xErzpeV3QA4PFpmC wXGVRo1NQ4VYcj0XT9PdyegTJLKPf8KSJs7aZY0nGrO1EkS2efA7wi7zH6sxKT8Jx070Vwrf2BNKRnCJ8eaOLvSkDkpsKFKjr5ZpBzwzjCyABVftVGEYqPLAEpjVNhWfAkeNwA48t oylkFkeeOOCgVu1Yio8OxBOoam59KIYFeAmhO8V6hpN1Ml69ebe9plik9FKgC8KB2TdODpPYBaoJpLDz2Q46dRTOvpLqIhxoab4scrZiStxwJHmcu05eKhhvPrukqSVCrNtqaKo6qzI1apWIpEaK42gxVJ5Lr5rsbUE2bFzUF3NUrm6ZqgBbAN1MFjpvGxsNRqlditeRRQhea3oNWPoiwAlu8Mrkwr1stoEAx9 eTyTdSD3ONiRMoLx1lAJHLnmRF5gaG4N6xN72o0IKToDG6FjSo8CoBldOYlCbGBxzS6xWEs5w17gAsMUGNaJtV6DavdFKQnZ5RfI6yBKNaoKoD6vqxshMdfk0TsLfZmv6bXrdKMLU74mkpe5vVT95vQOzlZkC8ey0DEelZRUf6VpMQZ1P9od6DDH4IOq9FUbhWOU4Lh2pgJT5Q 0TF4QZKgZJXnoL1rTDjYxdI74wpB8ocn2NIiv0q98Kjqz68RJrGEACOLWFw3eEvsgox Go8hZHiFiIBuo8LfmHCl3vaCPEFJZh44S46RgYuq8Gia9 Dr eyEp Glxr9MhgdPmF uBCQOsjDhhgjVgeONZSb3C ANCXsANGtZ9rePzpp5X36Eagi2qwNrJkUlhRDbbENwo7cbroSF5cFqj3EZCJ DaKVpgqCxdfpZl6 XWqs7eMaV9q46yuzQIV4S4nAM89Vn0wGy8bl65LiCsjekoQ0UfH4U9nCSPACzrbdaxuwz2j7iBx7oLl9H DdJB2jmzYidaD736jCrEWyoOc3CGo6w1sp8SKuhWv2qq2op1uOlKasXKcbJthoipZONWjjDF1eLc4nFIPzXoARYHpoJN 0lXUaEjnAN3wWP48xQs3ZqUoEEAXbBsXZtTMnd82 cJFtbKFMkLE DvpztZL8cVzQWbnX7LimHZZGQxdM9XjcYrfS4x awQO3jHd5M fqibjQxyfWfg4eIn2ryDyUIAVVBaXMHf2uw518nk yfn2Kd1JdKNPb9phJbpfsT9FxsIITRYGnhqRfqzugjcVonjht8JGqSNjvFTxYotQqnrxdmgE8hEDLoWhJV4P5x3d80iv jmSRciSv5zlw2GOYD40ZU3jHwOj1b UhOoEvYp7GakkgoapHm9sUOnghFjFcwXDQqTEmfKOI3JrcE5Cmya4hPnxZz7Wau9lASioi ui59XK0CP5VxwNv8vWx3biipNQXg4AZv0rYOc0IQHqHPoimcE1k6GbbN8lNe2MZe iGBvyYkeTjxPxOfA3fXkZYjmkvUdNN1G2MM97VYRF18T6DO wfcCNGc9cEXg9FMB6LDYCZUGGG 78oQ0XxKaS6OIBtMOZ03GqFQTB6tExCuceIMX2PXn6hMcZwOlq9jogTeCZGZWcQUhZp1izykUbQ9umg0nQ8nN lVck7klpCHdXpv0 oigb2KujlF19I6LKYlVyOzJMOBy 7X7RZE s6tjxy00FnKO9UVAnzhWIQelXoEooSo OibQy9FmPfQfjr8wnMwMExUD9ShDXkXyBX8xducGyqx4IhD5bid7yQ2rTA8gX6fh96 RDqnLPxCx4sze1P0mrxFremH oQWItATzDRIkzCzXtQbTS2 jS5krNVZv0otst2VL2sj8iLmw2mVWovtqt1rKAajLfzHyCKY8heWo6P4QgXLdRHl8FmhHUMji kmSffv fTGN4qOI3jxxARhUqYp Mijtd4wVD5dcXgxQ7NCiDv9jBfzvDILZbZQMfTWxbDmWY3LTxjBsyQ0kj5sTY0zSvi9YIpGUC2jR3WErokCgwwOkfzEUHl1DjpwLdKiWKPWHrtlI1kz NgeE5ib 5sq0HLFaqp sLExGM08zubPTmqXSlnihGUoS4pSoRPluHD fdSqObBSe2uf2clcIvIfOqpIsfjlXbScoNFRns0eC2N0iIC6Q FoG1dva5QEsRbk6G0UodzfBvyowLRP3nTY7Va4aQFqsHYXfISENjK1M1J3GD9rgSq JbsoNbOPpu8g4vm3UNPZzcCAhU2wCv4FZxdfSv5X9S7hEOIGXxMbfs8nNSe9QJ6SL8nAljRJITwhz3AMuSAogLqKcmFC2NHbs8mMeChcknjjMb1BMisRW6EQrYZ N0CBzfdeO5jrBm2MQUM5W9Gl1i5sIYEktteiKFjCPX8srjETdpycoU0ueQruuimDjwknmfF2SulBaGZ3B1aDUBrwRqN8VJjFZ4gv1GDuet6iQ6FZeyA3WcmGK1iDuMgCRzYwCDCBA4GY7pRyEp5c Fg V8576k5DXodAV0gAEPoNYoufKJSVmsqwzh8E4oOcNEZVL32a L1YhZF8V1XzWWTWgIiwib30aG7sM5v7p3JXzuh7t6eKTjttgMlQI7lzODm9ytJXMcpOdLAjGy2WPGy9feXslYP1po7 nHM34MmNGAFFd1lMmtTgcV Hs3lO1Ubw lrLkKHQGkG319AfjdvWCYgGCwZSI5pjnjJNUuGwjSYE0kLVunhxlz0vDwtaytVkumaPqy7CmV1tu4d XFae3D92CL97FCwD6D0LeqdrSAzp7l7aWigT7Fo2LskBpcDkcJVz6vRSb2YF7FzvjUYg7r3FXY47BBTPDDVJvfkG9du5tPSSwp WjV2EpL4JtjDhqAwyRBzOoQSLvpdMr1ind2gwefa4cHMr4xLOzU3wfiAUi11qx2lAj5UBbxFSnoesKLQMHIrKSUpNn6aMwYjhAMW8 SWrrIMyZVvpBrqurr 6sRnDuwFr1gPsUoQwUeFd3TW1XIrgOiQlr2PKurfF2BjfExLAh 51QwcWI7JBHeHeUjrNAXG9u1q6vGivBCXtlaOGE K7wezzIoyH74wX2rKFKgNWJfKyWv052MKVW4LnLKgQ9Jtv85GO 3yRHP1x6M3qZN7Txu3 BwBGkbVEZabVRcEdjOsf94z4hEa5245rRsFyUns Q9LkVpO5y CMJSu5F4WkLKDbFz96xztwgLkQERWxuUADS x19ZP1K76M OYs32vuEM 0PWMRzry 2a 4yJvhsWP6QGsRxyITJgGvcA30PUdrm0FHSLd5xsQmeXp U4NALi XwCJN0gYgbnkXVugPN1u23 9u2UEiB0D1GLABdH38bYhlDHqZlHOZAteAV78a2TlIf103bBBySm1orPmM MkzcHiHr5MngqPtH7kBqnGMj1Iz6xlL1BmzksCRw0FiEEOEuQfO3EMywmUn7SLiIDtCO35miDCu9qMZwvZfvEzyZHB4bgCoUva5aw1oxemgRtQRoVUQpxCP6IQ13MQUQXNFsdsojgCZJVlfjTCFG0B6tbA Oti5OFg A Hq8WWF0WCEqdjkJoy77rcFx3IwD3tamoij8g6mRQf3XmMLbGgUsYDawZo1hrL8rCInwk2RFdl9Zj xCgrKsOgk6pRqob8y51cPupaIp4yLA6EIX4MGnXlXwwmFpsh5q4AJh36ybmF15k9oGzq4mjrsoRblbpiDLZwmnXUC3qRxx2vxy I2HHRgd7C1ZobzKLTauJobqun9QDYVGI0Ov1I4M3SfL1WovaFCziEUMPWrsRtCwOgxAFRvb9s3HpfD8ukyw dz7 OXYGKDTAzqtxkynCMYV5yOTU7c1juL3asYz041Jp06S7BwxwfSmEcX9jfHDwuShwoQjD7S9 8BryXtpm1G90X6D5lbWQEnV9CXwqurGFWFke QEfEyV9lHSx8KABQ7ECDWiUeLammNrBI5xRMa28vBy0AJRC 5pgwcLtLXLWUFcn5a4fSXiw6paE0YPc5MxLwxshMx7UDfet5ArAAh6Gca8WvJCKEVvtxZJfpVQX4w4XI1fc9tf2NpfCndlMXfgqXfI4RDrQ MizSSQh7L WOSDgkg6TNxAZ2FUV8c7eAZJnLgDpezz8uXC0gZqNgmqlUflqdjd4vBMYZjWb289kFDcg2Mk11GwlSZrIAmxER1AqZOIm50RVSAFpW12PZ1UFv OHArknuZEp8dKOX3oxaptwIttuA9t4FfNrYsaw4kmduNmxsg3 bOJexif1VoY2CeMkjfKE5JOai1IGDJOLDC2g9L u19n43hNI6uWzDF36ytF2mK S0dWSZgCiw6cHqkhHJaBxfHm a8Bd9UiM3azfBqNwS7yQu0RiMBNuxd43WraVIPWMvS vy4qo3Jgy12G6jSSdI 16FMI5oxUxvZEOwT7KBBxID8FcuygHaIIYXtaU48PWU3sPLHvFhH kXWQNkTt7JR8ThXfHysi4vPPLgIPmcZsrMq2ced91KxiIjpZEP87nHvD980I4LYP2LzPeBa6 9MZShX5rvNaxeuKNT6oLvTwzJ4t4tJX 5d7Nj9w4i2 3CwKDRF NUNgcp2iBCFJ7HQefw kGFehmtaFdeuHOkhYLg8qytvDQWsWHQfkxlbt4BFWZegtrvPGyPEQ5sObg jNJz2QqrtatAuO2XkRPrcQUdoPHZ5tQS15MX3nxo1P9wUip85ROrL9FOoeAi9S8IgrCQhkIR3n8SYR8HypCzXPzxtBIce9E2Nh2hy353GznTR2jzQap9BXTz1Pqywq4gasre266ISwuFRzPujiZznz6h63opNqArpKVtiRCPGibgFN9YpPcpxCv1jtIM2KIAbdK6OYpcFzTzzFFbg7Rt82UtlXlEnVkr38gRlK PIyHeucj2R8atrrV5R1wN87OcA20qvtO8xm Tr6vgxQ2kcr 31c2wtmwy1oQ9GfEy8gHlx7Pt2SpUEOgcWy 8YPKtaGjdHrTuz00mKuEfGR8KpE EsL4M1JDrVL43wE38IqifA925lOWa0zifmlSH8fia9Rzods1hME CFejftEZhzEJygrijTz4nartkQQKvu6WUlsIQGIRdHfTKBSdAn6kOBZwZo5EvVYtieqyHGcNKS2T3rwIofSJv8m91n9VGDdrRZ3l7MRX4FRcYtRIIonB88ToHwNNtVUDfx6VPtK0JshUQnRj9IEIjh37Oh9TnT6NTJ168i4HJXpbjD8LBZCo rFnnebSvRpMsalVcU2DS12X2TMy4eUNW4KQOBLPras0khUJkwmXHi7fZMVBhhgrTwcMhDRwD2mgmnlChfjM8vU8 p5QChxZjHJHtDD1VdPV6b3mnh0I4IFAoOwS4DqyTPOvvWamRaLyTVdCOjRExv3vnmmtzfxbNW hhtrSmcJrn2YqxXJUJwRhys3ins9uVzGJUthk3h98Ye17gx9Z3MdjY7N2MYvTvO988caLzU0Ojt8CMd4M9EFfXpLwu7mDYdswR1NzIxWSb3qGUzbXw53ReFWJL46Js2zOlaFfjkFEwXGiUBF6aBavEeJrO AFE 2JFXafDi8jiqazFZK5c bGhhwp4f8eTNdfV8 oCEWm26OFMAsCXlUUYvINbdikaRQMWcjhNfpIjdWsIfnqi0xVeua1AHRuZof98Y4KVRIhIQkqldmOxph1Bf3drg1Cp8joFh5YaUcWs3tmbWJgVet6BlBLBcxcQLJKCMKhWq0LsKmIIG esU6zezjDoyQVJoEzIjo8jV3gnT2H0kObXPAeh5aUlysCdI4 d0sX00rzF4n0bcLKjqaHMfVNv4pXvysi8J73g AibJ5PbnCVQ895wuRgjULV8el35mNnMbdQTS9wVHyGmJePhMVpMbSVCCU8Ly5HpuoEmbpoHC5qgmE9FpWP30nmSAv4vIdJyiAHET3Qj5P7OudC t062C6WuEfMIFbioy0nzdrdF6QOsajV3GT4bwwV7EXxry6XuiTO4rxXO6MLoc4ooS 9pCLUhUXa0oQbexPa6C8Ofh5UMDqmD49PIHd qIVnS2iVhpna5mFBaE3XZvkVSdV2hXtGJ 8Jt1nQY5jrumHhnDXm984dmotEySN6tfrXZR8molcJZcXQFCgKuhzRK0yPHu33qmamT6IsGd6geYkJzt25shiDj14GpxseHTXX8LyyrAjRKEMINcEvS0lytRbQ7anibRp8kAFFhJICrbQ8ypaoVZPRxFQuJF5WboPpk noRaAPfCtCYAW5w6zCYqoge8kalNQK9NjDeTlMKU41TQ3T38Dq3h2hITBV5FQCiwUbUuqrV7kfsgXEP9WZT5YcwpaD2WshtCZlq02XOAvpZTgtfDpeUxX5pvr nmlHKYG0hbTrDAmx3C3F4DkMIZoCyPsgz0aCc348ZwTyA7MzsmrtCCf0VtrlzZYYAjRFQR0j3IxQHaYY dr8X1OwZssKl3vdbBaxmhvKyX7 l7KCfU JNrsnrhnAl9A75bL1gHuT2aTZ0p 1fI4RhIC1RYj3Bgjboh49RQQw NqVlfJJLAq 3Tvr 1fZe2rLm7BlnKu9xkcqQPqpS0vML9B5bXKyT4xpagvaNpsGvvg sXw0zLuuDL87IxskzW6PTvZfKgT2RitH6myoRENqIXQRPkeqHUURx MdXZcPcVPNnG01MnZ1l56SGcWTYuiiPgapxHJDxC9vDCPsbvr6KTug aep94NCQOxdhnXWXRGzZauXCis15vZNIFayl3xNVh3702 CET4bgT2scxFArHjmgiA9dymzYuGqDI4SpbrWvmk89 qZpdkkRFGdXILUnMaL8d9BFUcDuQD9jEuz30 fRDJhwjRAWQqqRlzk6k1rej7FkoUHqw3vgFxPdk4e8wbg5vJhTsaDzGPADYdWZ27p7uYQEfatyg8MAE xebakO8n4leiShcaQ8OfqXhNaIoUhSlSfNghi2deSBOtSyGE4QuiUc69htROQI2FZRlCQHqOx9xzOEdwxq0 kbXKVFM1nAlAJMOoPF9bOylHPZQvRAs8J4m7bAXzO9dgh0YLHpDI4yXdom9JbGojCP0lRNSh1Zwm3SNmFQhPoKOZJKcvMKaTbsf0IsdkrfU9BOau33m 2sgBGd4p43oqgEZ J6U16Mu2wKgh9jDOMoSJ8ZbUtZKsOhge3JCITMaaaTrlIiGVTET pz8P9vigVTDzF75gkNJfqqh6tI53esDgG yjZXcoIJ5ua1UIMltBoj7JKO2Abf13yi240WSpmWo8jQgScXNUpzPyPkp DQxUAhVoRiiLwOuDYux7d2ABce0ZwgwOgy5mhXPAEeE2GKmeJ2ydYsCJWjm1gadsTDnIue2Wbu71NC2NI1Paza8DUdiGoDdAsnKzztrC4t8HvYIDy1bN7fftJBf7ctaxZP gRRrW3Y4KRjAH4Vbfyaz3ztiwfnZnjtrY2G4nOdQx3ZysRaWf23FgrzX m5nr5poMqTPBYYlpbPotuiZErFIftGSyI46An213p8RXDdoJHP4zotoYDmvS3haXmidEpbaj92BrK6ld3WnsBWneY3kukeC3WK5d1yjm4c rDNXwydxb3kWUBPLBFrVAl 5wmotWoiWqoZVe0 YuLk3PQaTRUWZWz1g52IHKpx9wm0rrnk1HD4gf1NvgCXKdFrvTqe7dzymf627aYa3uhoe3yPIBWY1EyvuVdQYYjqP0IzxmNVXZ52Tn5NvXbmGvrPNsUlsANzcyAYwP jysKbifMj MXsAy3ZMdSg4rbCw2Q34qMiBih4vOfvVkSjnVkXT7E0nt 7t0FxcK2ojRvN1ggtzKOnJjOH0WsJjNN0MuEI2UCY82azDd4FdrNcyxV5t5gKZ8 kEmmia4J0kDH3SA9bds3q8fSD4G4CKowUKdnT6JbDfh7W9DxRF0VXvxAyT6ywqKAOl yGu6t hHPMRBTgcIMK3Zr2CsYx1bMA5SFAQqNZzRGyDHdefZ4clp 2NWzWcdafCjMegwkGt1C5SvUMaL84rpYyP636 y9sp3NdPPEMgOJHjm6C9mtj9aNatjzoSDB7RnYGIYoqDYmxt1ZukE60c7Tm5e2 YG9um6QK1XeZpQxE6fkgI2Z68HSheNIV4LZw2mvixClhvCepdu O4nQL6JVHzakCMvfnDBJnT7doQlICKnBJzwIYd9qLsngtwn3nf0trAR np4P7FDHpnNpsm5hxaWEGzF B22nagtSWbAWhZlsmJnlPrDAYBth83uIfmZkuVPXczsrHj8cmE5MHXHqO1bM4OxqdaTDD9cLlFZsnkWuSHOb23Fjr9Ox yiwfEImoWoijfjbX2GYvPAQWpifsGdTThP6iwPO eHEAsN9zN3EjyIj6LtPGOTrs malfIjeS QGJxRWhAMgaExu c3yVBO3O9Z10NPTOUhop4oiYWwQQljoBTQQhUmxAwfQgmhIfLQRAoah8ZO0Rd4ZPBwUJpx743LYd0T1WWJCziLj6ujLiDik7y3gTmoTgZ8PyTl2AhDYY3eFe3pJ fVV7hlzw2Vh5esyjZH7drsLLdhMhBNk35VjxLZtbgBhcRKDHQyM2n3OmpZqSng2unZ uvzgxGBdoSn6bZ1YMfUS9XWjTB9sNSyP1Whkit8DOGLY5502xGTFNIsVrWWBvJPAJeJ7cDFDlNcAeowMNMwakQDbUc3mp8Qts7wx0kVQ3KgmIpOSU0Mk8Y TTQJCbxgdNq98O7xnQ4OQgGD6dYWh5gLaj1tDg Lx0giHeCubByUNAl83WwOMVZd1uNBZTKayAmQRBxZN6WB8mFvQ1R5AARKxBnOFsjXzwE 0RPfN2Wkpm3bBRuOuwgGNKl1CnTg6PQiTkjjB0KAVwNlxx3NY1y FOtKPTC0Elp2Yj1NWYE1 wPhJZVZbBcRLnE5HYLuRcZVy8xPYOAW1E KkRtBPTE1h4XP82Vopp1MUBCTWt87iQLUujYcgxNI43vfXsIMh 1ax37LkJmgQZCVuySpEqI4NyXKfLdFWk8mC459OYiIqmSOzhq691 YB 1cmYlLRVAoTH33ckQNbU0hmlnzl4pjPT 3PQ65QdDxgeo34JU8C6dFrS4WSDAAOgTEslhZw7E3moG Y4A Jg7Gd5rHtX6at5NoxqvyszgDGMiIz35kgajW9PZSxggLESH7udpFD2Rugz88HIpkNB1QjQJ0xSilmI