Không có chuyện sử dụng GPU tích hợp nâng cao hiệu năng cho VGA rời

Không có chuyện sử dụng GPU tích hợp nâng cao hiệu năng cho VGA rời

Nội Tâm  | 18/04/2012 0:00 AM

thích

Đừng quá ấn tượng khi đọc các benchmark và review về Virtu MVP nữa. Sự tăng về điểm số không hẳn là giả, nhưng ý nghĩa thực sự của nó lại khác với FPS mà chúng ta từng biết.

Đừng quá ấn tượng khi đọc các benchmark và review về Virtu MVP nữa. Sự tăng về điểm số không hẳn là giả, nhưng ý nghĩa thực sự của nó lại khác với FPS mà chúng ta từng biết. 
 
Hẳn bạn còn nhớ điều tuyệt vời HyperFormance đã làm trong bài viết [Benchmark] Virtu Universal MVP: Đồ họa tích hợp tăng tốc cho đồ họa rời!

Đó mới chỉ là những benchmark sơ bộ. Rất nhiều điều cần phải nói thêm về HyperFormance và Virtual Vsync. Kết hợp hiệu năng 2 GPU khác loại quả thực là điều cực kì khó khăn, đặc biệt khi hiệu năng từng nhân của chúng quá khác xa nhau, khó thể phân công công việc hợp lý. Chúng ta đã từng chứng kiến công nghệ kết hợp tương tự trên các bộ xử lý Liano của AMD. Hiệu năng quả thực có tăng, nhưng hiệu quả giảm dần, tỉ lệ nghịch với sức mạnh của VGA rời. Thậm chí đến một ngưỡng nào đó hiệu năng còn bị giảm đi so với chỉ chạy VGA rời.


Virtu MVP làm theo cách khác với AMD, phân chia công việc riêng rẽ một cách hợp lý hơn. “Người lớn” VGA rời làm tất cả những việc truyền thống trước nay nó vẫn làm: dựng hình, đánh sáng, đổ bóng, tạo vân… Còn “trẻ con” iGPU chỉ có mỗi trách nhiệm sắp xếp, lựa chọn, đồng bộ các frame mà VGA đã render ra. Cụ thể ra sao, chúng ta hãy cùng tìm hiểu.

Hiệu năng tăng đột biến trong Dirt 2!

Virtual Vsync

Trước khi giải thích về Virtual Vsync, tôi sẽ nói lại Vsync truyền thống. Vsync có nghĩa là “đồng bộ FPS trong game với tần số làm tươi của màn hình”. Mỗi màn hình đều có thông số gọi là refresh rate (tần số làm tươi), phổ thông nhất đối với màn hình máy tính là 60 Hz – nghĩa là màn hình có thể hiển thị tối đa 60 frame/giây. Cứ mỗi 1/60 giây, hệ thống sẽ lấy khung hình trong frame buffer (bộ đệm frame – nơi chứa khung hình GPU tính toán xong) xuất ra màn hình. Như vậy, nếu GPU chỉ render được 40 frame/giây thì điều gì sẽ xảy ra? Hoặc GPU quá mạnh render được tận 100? Xét 3 kịch bản sau:

Kịch bản 1: GPU render nhanh hơn refresh rate, Vsync Off
Refresh rate: 60 Hz
GPU render: 100 FPS
Thời gian phản hồi của phím/chuột: 1-2 frame, tương đương 10 -> 20 ms
Trong trường hợp này, GPU nhanh hơn refresh rate tới 80%. Lúc này tại bất kì 1/60 giây nào, trong bộ đệm cũng có 1 frame và 4/5 frame kế tiếp, hệ thống lấy hết ra xuất lên màn hình, gây nên hiện tượng rách hình.


Kịch bản 2: GPU render chậm hơn refresh rate, Vsync Off
Refresh rate: 60 Hz
GPU: 45 FPS
Thời gian phản hồi của phím/chuột: 1-2 frame, tương đương 22 -> 44 ms
Trường hợp này không có gì đặc biệt. Hình ảnh xuất ra trên màn hình hoàn toàn bình thường, chỉ có điều nếu FPS thấp hơn yêu cầu của mắt thì sẽ gây ra hiện tượng giật. Ngoài ra FPS càng thấp thì thời gian phản hồi của phím/chuột cũng chậm đi.
 
Kịch bản 3: GPU render nhanh hơn refresh rate, Vsync On
Refresh rate: 60 HZ
GPU: 60 FPS (lẽ ra là 100 FPS)
Thời gian phản hồi của phím/chuột: 1-2 frame, tương đương 16 -> 33 ms (lẽ ra chỉ là 10 -> 20 ms)
Với Vsync được kích hoạt, toàn bộ mọi thành phần của hệ thống như GPU, CPU, ứng dụng… đều được đồng bộ lại, nhắm đến việc xuất ra đúng 1 frame mỗi 1/60 giây. GPU-load và CPU-load đều thấp hơn so với Vsync Off. Giải pháp này cho hình ảnh mượt nhất có thể mà không bị rách hình, đồng thời giảm tải cho toàn hệ thống. Chỉ có vấn đề duy nhất là thời gian phản hồi của phím/chuột bị chậm đi, ít nhiều ảnh hưởng tới các game bắn súng cần lia chuột nhanh, nhiều.

Để rõ hơn về sự phiền toái của thời gian phản hồi chậm, có thể lấy 1 số game port từ hệ console và khóa FPS ở 30 làm ví dụ (Alice: Madness Returns chẳng hạn): tuy hình ảnh vẫn mượt (nhờ motion blur tốt) nhưng chơi cực khó chịu, có cảm giác phải một lúc sau khi lia chuột màn hình mới xoay theo.
 
Vậy có cách nào để hình ảnh không bị rách mà thời gian phản hồi phím/chuột không chậm đi hay không? Câu trả lời chính là Virtual Vsync.

Trước khi render một frame, iGPU tự đặt ra và tự trả lời câu hỏi: (A) frame này có được hiện lên màn hình không? Có cần thiết phải lệnh cho VGA render không?

Trước khi xuất một khung hình lên màn hình, iGPU lại tự đặt ra và tự trả lời một câu hỏi khác: (B) frame nào trong bộ đệm cần lấy ra?

Trình tự hoạt động của hệ thống để xuất ra 1 frame.

Virtu MVP chèn thêm vào 2 khâu trong trình tự truyền thống.

(A) chính là nguyên tắc hoạt động của HyperFormance (sẽ giải thích sau), còn (B) là cách thức mà Virtual Vsync làm việc.

Khác với cách làm của Vsync truyền thống, Virtual Vsync vẫn ép toàn hệ thống phải hoạt động tối đa, phải render ra đủ 100 FPS, chỉ khác là nó sẽ lọc bớt 40 frame được cho rằng vô dụng (trùng với frame đang có trên màn hình chẳng hạn), và chỉ xuất ra 60 frame còn lại. Bằng cách đó, hình ảnh không bị rách đồng thời phản hồi phím/chuột vẫn nhanh.

Tổng kết, Virtual Vsync ra đời nhắm tới việc khắc phục rách hình mà vẫn không làm chậm thời gian phản hồi phím/chuột như Vsync truyền thống mắc phải.
 
HyperFormance

Trước khi cần render một frame, iGPU đặt ra câu hỏi: (A) frame này có được hiện lên màn hình không? Có cần thiết phải lệnh cho VGA render không?


Trước khi render mỗi khung hình, iGPU sẽ phán đoán thời gian cần để render khung hình đó (dựa trên một thuật toán định sẵn), từ đó kết luận rằng khung hình này có cần thiết phải render hay không. Giả sử nếu iGPU tính được rằng 2 frame tiếp theo là thừa thãi, không được xuất hiện trên màn hình, nó sẽ ra lệnh hủy bỏ việc render 2 khung hình đó. Hoặc một tình huống khác, nếu nhận ra 2 frame liên tiếp (cần thiết) gần như giống nhau hoàn toàn, iGPU sẽ quyết định giữ lại phần khung của frame, chỉ render những điểm khác biệt như khói, gió…

Như vậy chỉ có những frame cần thiết cho refresh rate mới thực sự được render. GPU rời đỡ phải render một số frame thừa (nhưng vẫn được tính là có). Bộ đếm FPS đã bị lừa, FPS nó đếm được thực chất là thời gian phản hồi phím/chuột. Đó là nguyên nhân khiến FPS trong 1 số game và điểm số 3DMark tăng vọt không tưởng. Trên thực tế khả năng render của toàn hệ thống vẫn vậy, HyperFormance chỉ “ăn gian” thêm vài frame ảo thêm vào bộ đếm cho oai. Cách thức làm việc này cũng đồng thời là nguyên nhân GPU-load khi bật HyperFormance nhỏ hơn vài % so với bình thường.


Tóm lại, HyperFormance chỉ có tác dụng lọc frame thừa không cần render – nghĩa là nó chỉ hoạt động khi GPU nhanh hơn refresh rate, trường hợp ngược lại thì vô dụng! Điều này đồng nghĩa với việc HyperFormance không tăng thêm chút hiệu năng nào! Tác dụng duy nhất mang lại chỉ là làm thời gian phản hồi phím/chuột nhanh hơn.
 
Sự ổn định – Độ trễ

Cả 2 câu hỏi (A) và (B) do iGPU đặt ra đều được giải theo một thuật toán nào đó. Tôi không rõ thuật toán đó hoạt động ra sao nhưng chắc chắn rằng nó không ổn định trong mọi trường hợp. Đơn giản như, nếu thuật toán tính sai thời gian cần thiết để render, chúng ta mất ngay một khung hình quan trọng!

Nói cách khác, trong 1 số thời điểm HyperFormance sẽ làm giảm hiệu năng game, còn Virtual Vsync gây rách hình hoặc khiến FPS thấp hơn refresh rate. Trên thực tế điều này đã thực sự xảy ra với Crysis Warhead mà tôi từng test trước đây: FPS bị giảm khi kích hoạt HyperFormance! Đó là còn chưa kể đến những lỗi như treo game, game tự tắt, lỗi texture… mà tôi đã đề cập đến ở cuối bài viết trước.

Bật HyperFormance, FPS trong Crysis Warhead giảm 10%!

Vấn đề thứ 2 là độ trễ. Việc iGPU và VGA trao đổi thông tin cho nhau, cộng thêm chạy thuật toán để đưa ra quyết định render chắc chắn sẽ gây nên một độ trễ nào đó (cái này chỉ là giả thuyết, khó kiểm chứng). Hoặc nếu sử dụng Virtu ở chế độ i-Mode (iGPU xuất hình) thì ta còn phải chịu thêm độ trễ từ việc copy frame trong bộ đệm của VGA chuyển sang bộ đệm của iGPU qua băng thông của khe PCI Express, thường là 2 MB/hình cho 1920 x 1080 và 4 MB/hình cho 2560 x 1600.
 
Bản quyền

Virtu MVP không phải một phần mềm thương mại giữa cha đẻ LucidLogix và người dùng cuối. Nó được các hãng sản xuất bo mạch chủ trả tiền để tích hợp license trong BIOS một số dòng sản phẩm của họ. Vì vậy cách duy nhất để sử dụng là mua một trong các sản phẩm này, bằng không bạn chỉ được dùng thử trong 30 ngày, và cũng đừng mơ tới chuyện crack!
 
Tương lai cho Virtu MVP

Có thể nói, sự thật về Virtu MVP gây thất vọng cho tất cả mọi người, đặc biệt sau những benchmark trong mơ mà nó đem lại. Sự tăng về điểm số không hẳn là giả, nhưng ý nghĩa thực sự của nó lại khác với FPS mà chúng ta từng biết.

Virtu MVP không hề làm tăng hiệu năng game. Ứng dụng thực sự duy nhất của công nghệ này là giảm thời gian phản hồi phím/chuột, đem lại những pha xử lý chính xác hơn. Các hệ máy console sẽ được hưởng lợi nhiều nhất bởi chúng thường bị khóa FPS (do hạn chế về tài nguyên). Vấn đề khó khăn nhất LucidLogix phải đối mặt là tối ưu thuật toán và khắc phục lỗi.


    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.

    tbuhOxFDmTcNQBwQrEJmMKFKeSbNII6jAHGYO5EXhBadpcWJ7YXTOjX04psr63atsE9bOP8JIph60191vmJE eZmPryjlRr Kykoefre68IaSb06rW3S9lZRYJtGmL3bLbMjdWQfJXgTnEYieHZ1i9uTyMQLZAqoGDXQz1HaVcaeThVhgaj8K04PyfmQgqcicmeWvFXTKlhEsAs rWMjKb6U6Dubz9mAoANNfYLQpyZMFXBcMyt UEEufLZu41zH2Nyt3uQHwL8g8RNZB0YUFzzQw76spdTQXAvEopQM6FwI3yMobEv7ILjtarC7ByRPJ9VIX uZhR3DkLj8M9IiDrvaFJr9nORM5q1bZNoWS3w5VrQr2 pK4KDzsMk27DYwltybhwC DZXjPZaF9nDNJAmtYPIotHSjFmnHbSxWuN79dt0OG77Ps4fu080WI5PVLgczHpt31YujliT4QjW3g7iBOjHVuc5XZQ8AcTpg7OFUEYaI1ji lW59sNl0Egu0PTtfV1hGmnqnG7B Wx0kSt5Palzx2tIh0NV1i4RUOfTVGD0vVy wTxnFWmc5QS5kn66H0Azp79dOqqyxjrze7MzKQR958W5Kf8vl7EJ5zmeuXw1G3xhwSx8uDZjjgXn22m8shyvSzuVB1kUoTY9xPGmCEC8Aq7HJJinAuc64qRvlJDna7HuQ0MPjIcPU2dGXafa1RhhKnBOCaIfLz 1DEafSfYQZX8VwI E0Ot1aHHig8hhXqxzZFnXh7cpsIuZvjWseJJxUdtye9Hj96G2pemHNQgzjaObH3f5iEf NiLfP5ZDbndJt J43TmEPfSAOoTkvAtm0GLLYvreugv86OX3xOMLO5Lx3L3WYF3M0c3EFaafvp0vuDvRxXpVFPCFzhyWnJ Zj8A7WQPW05NH1pPlqI8pAKN1lFm6qaq4g65VC0kN8NVaXElXKARZg41pk uEEUF6U3CfxYixsJR2iun9fc0W6aom6BMJkMSx6JFSfrBRNNqs8S RjRHglcFgGZkR5VcoSPTcfiJTLUrOOJx0GO7HlVztVgYgznoWUwpPS5LEXOdmj7REilY2 pDRWneFmp Esij5DoPidJXSacWRRIoAQWWbkn2dOxNwyqyIi CQke4w2MC14i9MjWmXoIkRVFrOtsXb6cxlZq4kbdkj ZmrEC 8cDDG H6Si5Z1ec0Wt1gazfR L9ft3rfwVv93A1YbI8JwttuTijwV8PXe96tuhttZBDjL7jXen73aMBmNlG3DaXHRtaGbzIddRm5wBp3V Hkl4b9kEGO7mMhgNkQGC64wGjgRNHUPD2pPSnpXpslEil9GTyLAspf7OpIrIzvFqlx4FOy0y4ltq6Ccj36t7BRYQ1PL3IgAzI4It953clzI66v6CT6PA1VUHUqv3armcsLTrYoo8ff3PbbHjSTWSLHmi6lZo2bVPCdjo6wVgFJ6xbdNkGUdwI6BWhxY1YaW3cHWFdd65qg TwKdohiVn dyCRumfPBCy83nepxaa1eHBHClCbpNuaxzRPogfX7zkwVFAmkSE5njwHLo5JzseGIU4pA8Qeau4ZOlYZhSXLVWh3CCjFmF2CgRECUlMSKxA W 6cMZ03G8vGnu7hux1cM6J8xqUIzBwYpPB7DZVt71lfENZdtdz8V vwjFfC4 QSNTsxarb9yVsMoaI5KCvGlaS5un4uq1Gtwhm U87Kq33T7fgCnW6RQJXxW53QzoFCiKZeCU5oYPzWdbntMti2HzwY25yQMLKfBISHNzB K4wrfQXm59KIq8K7r7DWGuxIbOq4VUbVNXs3scQGe5tBrFOqee3fuqgfMOsVRDwYpG5T1Tx ZXzPr9dqIlL0WK ce3Q6AmN5JjS78MddCTc2iPeO JO1EzEJElB4JyPw hb6AXjnHnUZKHlP5qmnxvMMVIUF1RI3RqfC1CBYam6MjJ2JvxZxeyPjxKg960ghEPOqC5qQqQLDiF2jIS5VX53W1vta7a4zEqSN8iYDmwpgzgzDvR7Jljb3jViCCvXsKe2p0ueKIJaL05UCKDQdYiaisfSvdgc948gaGqJOWxPsie4XJ RhjbcMDUDZjoww4HSbDIPrUwWOtaZQTBycgJJhg0C S2qLobQZpt8eXCOkHOskLjgLkDTDV9HUDPEkq6IwIb8Vejd6EGxI0MjC4F0KlPnbftOBd5siEAFwPbeoLAjJe gimKnr8XRng LKnriXH2INacnBlvYT9g7b1H6QskO7JzEtn97CIHtFGGbTEQaIRl1Oyh0RW1dBISPyQVCx3hldBoW651RqBPVHZAGvfgHa1KUcSUsgoV3YiQ1ZyDB991WXjsNcoCJcibWclqUQsF3YHa21tdO0k60B8i1s4pfGbjDnrvomXNc0bphJQL2tcNM3XtI kN69tiEjMewrC2nFPbqSTlOPjqtVLCtjycZRzK9xmLn5AhNh9sQOLslkPJUMoVfFhRywwviYwifmlGQ8co5Dya3SmlZaTNAzvXjz2cq3vhm1jwcAlroulaimGAqy1xapL3FUx9yR6lcyNncPNtcnUUdCV1hjfV9AfpwhxKOW52eHT5dfmfCFHQtBq7ub lMCD4xbhug6pXS4ALyfOYjpbNCwBITpEXOAX28jWylevJt BJjGUDfYa968Di6EOx16 oAXQhkF4o6JZqot B5F3jO1wN6kgap8uzpp0Y4ytTamuIcncxXxJjEItB85SQZzm9XCslUysHm MDLyzKWttyrGQUW6HJTtb1ocPyYwIXgpKRDiiPc0Mb3NigHjjfyf4WyEpj7wfZajut79tTXX9A6cYbk6upwGKLSh35WlljKs5sdtEhsEQYVgHMzZfdTiNpbOxg2fMkWNa9m6WsH4wwCVUEDk8FJ28hqyZfa5dFBSg9ZA6HErykv8jaZAwEmmuLaFm4naO3ZkLuFAljXwXeg1vQs4Ks7LTlKuNpw4QWz36badFvrVitluF81YDNXS77ij8eh8sb7h6fjNuhn3ZFut4XqEKGdhylzimuYCNKwVrV3HOys2aKXKy3zz 0eD Yc6OlnSJpycABIMplExANtHcpt2ZbzMpHRlZgYJPAUsp2dWiO7yQ2HRy9a9vgv5q 6UrxCZbECOMrKVESCiD1O7SDgGLYerCdQHlBEtnSAR9v1TLwAHNw pJG3Hmc7eOie0oQVBkfSmjFhdskh42j91ijCXQpj8k1V1d6tDJUlpOmSrQfF2sRvqUit2cC76dwuWXFDx52VeS7YtgmdLdoNFDtqWV dmxdol0Jigi4QEGw4xv2kSbSS9BjNgM2EUMIbFhmvqP5TyrORLhsrqVZuTsJDKOqMSJzZi5F1uftvy1bwkr0ZYm1CPPbt7bcqFNyG51dFabsz8m3bs2dfFe0eCjCXTaLz9kClH5A9hJd5JLCVWSZ002VvfslfEJPNmn6zEtHfIjNcPSCaNo2UQgNrtIb6fW44OGxUm7DnFxX0C32iSwTARU0zWl9bCZExGwsRZO698K1t9i vGa3q95AVGEI8AS7u2JRvnO9Fdicnn sX4gUT2L74iHWFXiQftkeEpgdDD51oOCtYMz1vQrnF6hcx2Hh4NXNCpSxzBeFB0Pzjz0pOOrAfJz0aKW5q8ppCTcek1JZTonjd4Hia0Zbo8UfsyE22 EYmtahzTS7ZrbN32djiD QB8kOgIjdJhvYq6TekwTEb3xqh2d 0gAEh3mdfD6LLg9q3aZ4sIT9Q7kODw3w40ycSy8Y6meVm9NYkwHb VXjU3u7HTn6YZiCoWfWQGwCAXOtnDIHlAKKhznQeXgpnCrg tKWtfGR8N poaJow5RA2cF4l6YorQlcfxRsrhg 4YAfBEsYkgcWWYhTc14ExV9m8mqUd uNsVW2Lz4lWakS43eidlAaoAAr54dL3xCQg4RREF ZJB05yhKr3dp0itiu0Hq0eG7i0IzhZYWS Igiwa6dSHT8u4z7EJDuuZAvS nCFBj8uyqCVFvqUzABMsLuvAtfetYjmX2qVK5WCiRJHnXo0wr8yMrh vhrF6bmMkOxFxLRmrtOOpSZPmcPXfUWz3uxnzHmXrju3 9eaP4FEfnfuQgiX1c2Q8J7A0Dv96hwyqvbbpuk7J Jn6I8p7S3GUQg0i w0QO6w79 uoHvzryfGaqjLMEbRKLPhpWhc7AXwQNrRcfhh2JldE0weoH eOaYbeHzIWrnXVTPrjhbdrwApQQCHutj6ZCiEZNki8vbiM1q5HOoUvapXw28O bAyKpQPT9huPykOx57893OerxPC85BJGJkujAmdB3d D3mH0CIN5h78mnwTV5yrH7PhbsYk9WWnoxzJ4qQREaYLEposMOGwdykp oMqjEkYuOnu0Bi0Xm00TrWRtcleXkDFOktOFFZdTV5BH8BsjpXMVkvXE91UZQy5PZcOU MDhInmhicdFZlMdyChmJtVfHZ3JobJeScrdHgN6uhD8Yq5aF7Fyf6H7uN5LC6MRQBJPOharsf15Z58EpOmAwltOkpLvJO t6XPiSwK9T5i5gAq6YceHmQuX0RanGKcGbzHrDXkZ qegg0xhMBxtCWQvxEYF t0dTyjpCVUxN1pr7H1ARX4znZmD5dV6Jxp2PZb8t4I Lxq6MZTJgojJRNfs9R6FqACNJ5KwiC3RLwxpI1DAVGziSzyFI7sPt7c1VlMuK x 1KQmQOY1KX8u2QoPIPYYciO NUGd7NtmxtUmxby7hp2DTFNBw4dYlDtIbxYtWYi8acHZswaCndY3fkV1x1xIATOgwVG4sym502NIiPUsQUjmtPo0Lv2OtXsOCtnkM0YvJoH21KxaaY72Q1tvOLNtZSf6Xn47oU2qJaE82spIJPDxEKc7x MJnhUSOL5i6PVFdGcQmVCUJGsp6SdEyDJc BHVXLSfUfEHleGXmiFvjOXxaZUdWdCwDssHNgYSlEnDdbVPU1DWK5fofRQgi6fhO9Oy3SgWaIAudCX60aaomNW aU0rE7GNj6oTrrOFqJvTq8QNGB64EPPqxG MCz6gERXNDP3KDTYlAtVqxJuVGO7GJo8yPijg3bc2XFsg741MBrBZr1UjAelxLazd4etPblQbbANymQvyt7JeUbJVB7YoBOHQP2JyEuXY7T1m3jaqvGF7QsIIwucVonG8A0q9auFfrAywZoF KMVFkDYK64xOA8I NINVHRzfxC7KypytyLsdtkflWAZQhjXaNgltkYuMlXtQ2Qa1m3rn7hwvyDpAcwoKR2agW1gAgbm79lN7lK02wnSiOcEeT0sRNdjr8sw7glV1YVdG083cfqsFwZ5Iq77hTM55vYIobhwLS8vXMItdzOIW1y9wOKNVWN9h38dO9uUn4909mCpBXNw4w0dHZZVwjE8K8zvjobAEn5D7 cV7t5o5NriA73ja2YXc6XNcEb12jOFe1auMR7y235DWD92hArShLppIb a MVrrxCWeILpNWG9vvO87eODHipasDL6oIO4qE6 BTk5PbHl5Hmnpx3Lf70qmnm0Hys9W 1C254CuuJkSbCxzqRif81O8pT UKNtV3QnBbiqKiBuo1m53Y9Dgwsp5s sWGmVxJiJp8mAsAH1lndmvuRjzhVCYqBprHjwiWJJaQi8vulMhkfdoNvQq7Vv2USTCH5Itfb7wfpKvmerDxB0uWPEOuUmYfZcvGM67XFDNmMomPFQNegx5 pgt2jCSj GBBVkhy0ZgaBEBFJLqeWNpdqB4ntHbOURiBkvBuE6v9kqF0Bl7K3vfoIojDmRixXVh84SbHId25wjE7ExLELIt cD6Le8ALEqPCtibwqINNa17juGfP391WJcUO02kxomzACwztuD9ayyIXL7FBpB qsWGQIIfWL5JyNNRclvvOJ9UjUqMrl5mJQbBGurA7fOmTtiTr73RYgGcmD74PmaRXxzT4dkZIUYmdZlMDCazk7iz8xKDgIbXOS7a7eut5e2bEmvWdyXsDtO6KuZP6UoTIA0W9hWXyWQ138ebDjSj2SxxtErP3PW4oJTYN8mfX9WmT63q0UsoHU9AqgKUdijJqK9dLThJk6K1X4LW8Bfl4TfellJt1Z9yCgLqdESrca56zsWaEGZGaWMJ9C44qMPd8z06XDx1VdTOVCpLX7r2MJL9m3ubgl6pfYD4v71RnzRUW qlupMLUb9CrwB8wHqgCh5sbzkDfR2F9Lc0Sd9pCEwV3wtkn3sCZZOoxcUMd9hEw15nCN5d9sLjGTqUxZ9MpyNJITkUGJ0hygwybdiUtWtlIwEtL0pVp6k5q079J9kBiYQ9XU3PKSimD8IJQsJ1Z6wTt43OTgQ55cjcP UiT97UJzdfZYxSB50lT9kNT9qyWgqb0GGrZS 7Be1NDR61idlW8U6knNQ0qGDfY9GAS9H7L3ZELFh28cG7vwYYkJafHqCqtZ5Soh5r6FrEpBr5SDNwSLexGZK7yw8HMCa6GiyOK8voZ7kz5a3mY qI7jN2CJ7smMxiHIDJOO 4EoiY01TOGBvXZwmMg1wPTRFpszuwVWsrQQO9toj4XPvRCgkqoux71 0lcAO8brhhlUTrkNg2FmdmGeRJJHZG7YI0VG9zw9lrICW7PLNbxoPaYqhi2N2f8CJEISOxB42 QW6CTNte8XCjUcN1b8C4OK3oU9PxzRA1 O5ioStbZBSlbxhZokpUv4geFWNnVxCQsFXY6RGXxX7sFXfgSx v63CFgTQEu6y0yNAnxUip5XJRtEJN16vwXuz4Osb0gNxm172pZAFTBild0r4JINO5r0ILa5vqAubzi91CpnXSkD30xc9WLpUrebZv9GqDjWuSps9QyGugmVuv jYVtCTfk3BxmpvqJURrYV68Pd6KCbTmKw2ecz6Wy 4pHUclgCz79EQrff2ZQMmrIkmuUvSKUibIXe91kSaVtKUNh1DsHlkMoVfQwcrH2r4vSB5tBEdBshEpGb meg7r7LBBxKIIrbwFN0kYMS4fZIEA0WGuaDZIIZbu8qIVzgTltO77kEuBPomeunlZftqBhgLL9KhT08G5Aou2pWmtlmN5VQuWxvX9BSOdI7OUBCGmPittrcmUd7a3u4vl6q689EfMz3ryEf0Lji9bmCtxHnmVbAkilJe8yWfiAdgFZI7k7f7b1cdVIwuvX2b0VcG65dCyak8fEobvn7la6Y q92jqytifkso2xcwMvZ6qd7rueX8KbXm0 IcMlBmd0eqrxJpyBRxVaTLsao5Q0d0yuSZIcpVBf3dLGfm0RUxGbpcnhccxRUZQGOAM4Ghmm9p8MHia jnrEDqt04hGbqPVdMDjQU1kAjD4ySuxsmKU4wHK6ro6L64ZcURjshPF3wpBGvtYG51H3vltp3HJBSUD9PLaHCh5EgQN5i3iySgYvrchDuMbe38IiLYXadZEq9a9OdrxCNqWErWspWfCjlImyWt5UTYi3OqavXteTYDly8Wy3xxKsB4aBMJqIrW7Y6Hws392F4lnQUdHOnniRcrzMzWo16rX0DorcL3zqNpKcGzgboHJb6Jg eWGz6uTE9W8G6RsxlEPsLiP6ehL2VM4yEhApZ0TbEYC9MR6ZpB1aBvUgg8xq8JsnDqbRGfyTiwYb3kBgrvaXbAFgj9jc6BYViaMuQssNXnHFOVWlNYfcF2W8RAbAZaADPB1s4aO7k1hyuVrw Lzn8XgoZNgWoqNvLkAH34aU95 5UU34U3vDs0dG5vPE LQRiw1U3Rq 6okh8dTypOGBGTqNkcAPxfyjRnnIGvDEZ8CDvK5RScYTvfoFUDcap4zXuA2qd0GhWG0UVf3ZS0LBEV8FzIYH7ydC7rkg6jTRVzJBa241DYVqzgviijhNLclg7qSru3AHQaILfyiv3l6ulXlxWAQKoPoG8rsmRiFAMFKmpH5wWwTP7wD nzjVktRZwjra7vNrrTXH3WYPPyXf3idvtKdlOMZu5HEX0pC6jKIeZ6gyB C669qUn3ly DpmlqlktF2z9Sr NOfREmJQVvta 4KzO1sK7cMK LDA1w2RGIq4MJ9zomKi89RAHwnW6RjBC VOHUHb7S9X7QypmnWamQKlnKOcKtOaB7qM0fErbmoEYlxRVrIiYMUHjjvTfwzCOrQpvETRE4W63HA5HJNMCc4ADhPGBjmTuzuC7cFzksCXXAh8hscYyThU3XLNduWYI Txn0KTNFPdLRrCobKQcXlM9D1y3ugF7A4qk0wDyi0xJbh5J3ejxjxJ5Dl3RtEobGc3r0VViiusdsietYM1MoWkbS1A1PMRC3Fw2KRZEcCcQyObEmIkfShVJZBkM1RWkLDx9pyiFQPxFPjRf85BsWNLL7XEMnVJb0GJ2jrFbky3QGjPcPT5BWYz63KZ2WsDdFNZJvBordN0viY0ZLyWB7rLrO59bCqxCCM ldEu1jDnL YvXyoDULpbYKxAAVyhdHzizLyWpXYkBnTSE5BO8Xu8vuWxlBkgxoVQyuqEj OORdiECM7 mSb1r8idfpYbz7TiTh8rqzJ 18fXnrI LjmxuEkfAglJfKNCZC6W0smggVdu0Tdtp1W5 h4e51aJDeZfrB4PYxJkPI3NFIKOGwSCd1ECJ0PxXtHjRiMIvvlTLOmVUJqKqN1MR4FU5Pqr4HhcRyuXiNe6OqZGh74YyzQYLDeLzgJYt1GoKyBGSrTQ9TixTkJN4fq1Fy5i3fzOAUubxBd9Ya31uuH47WHuPnnUThd6l4CkIgzkjAKPWFpAEXwKMhFFn2Ix nk1fb9ISKvbT0Jg6IU0i4UJ3PRcosKrz9VnaHuSsqD5AJbeijrKWhzxdU4VrjND2WQSQO 8YZI1W2VI5RzUV7APwdvefMOByeHpZHB15nXGFPqi4oEb0DsLUVSezbJ0IRRRBmChb49VegjnRHcFzQ86Lcij57z lkrYaiwDbGDB Kb7vX5zNp9ooNO4aAQkN41TR2lfz70nnS1lP0HZ5UVirKwvGAtbNcWsrSZcFr9zcF91VCoYNszV5ymfXlZb675NaoIxraH7UXLIPcmGWYr8uASEeJBJfR67NezOTuInUQFnILjCdzrfCiUnL0yWSQepQSbV4ByWG2pr7IKHwjQsAK6KjLRfnSfsJqLQf11vbwRNxA2mAkMJdkkDzq1D22KgM5wW5kaAkKP6VNNUqthVsvlHWQiRvGVoStFokzNQMR8hUoW5fxSMtMcAYxwqNGcK24XIGQtOVLZagcYdKwQrA308LzmPNYu6xwOcrM4swKWYsMSXyTTr4HX DMUigEeDT92See78yP904urDsHQteNyQ3WOMaHtZgRSUgq97ZmmiCEqTC9wFLVeuEz1k7V8e0x7vYf MiOjZCc0EFAMuHjd4CXviRBS3syN96crtP46lpXyZqkD9H2BIyufadeEfcB9QFmliBqcRuBe 4xtiiQcWscDweIxteJy6Guq6IfNSGabO1c2voBI59wY73Y8GZs35Wz0 065T9CuG8jTJpJG nEWj6W2emBadhsAgsZDy4c93gArf tiXhw0vPePrTgjPgzKfpcSuOUOEcWIT6amE6Mb8uDFgIbA9Fpncfy43BYyax1h8Wh00fWxMAmRfgr03TlK6AD3EDvpL1hiGPRQVV jnWz0fecIkFJ3 MBkuJL1pBlrWB8x4aXBbI2S0 Lq5XG5KU2DkYuZ4PZGeLb6SfBdUJqgkkLUfk6nux3moJVVLo iBd5NN9E5P7fmMAMHhzJgGgnWTBCVMfuTbr0t7ZH375m1Ga7HX4hGZ0vzceu1jKQ0MxLNHSZCQLQalIgsooG4hYzzHewncRHE Mw w6E4AYDEQV36yj7nO5tznnrogQIfjtF7GxZJqBn9t7QYQMtDWHc9gGv9BVjFh4frEUeFAYGwY4i02NTeBekURX7wHEJfSharjwnTaBf2 KUMm9uE4ywTG9gygwElJ3iugqkn6Eb6z1dU5TU4gSVnx5H8j5vMvr4cROxA4XPWbUSwaPZZT88vPw8nXqhKUNfIbTShlaF5QbnBv7lHEu6BXsGjLvTa3xr2YAMwdIJsLzb6KS8iWjldNwa4XO5D7ykOMTJMUHwgw5dnTMdNhIRKk6EHuzjiEN9UVZeXhcM6zX6djy8Y4Hpd7YESff0lPXZZcH0pUYDcQbjcltHleaX1VAhmuS1b6e38nKv2VHsDI4ebJmDQnfhS5uwvsApZ9NO04T YWIsqRlg2o132h7rXiKGgZk33qYffBlhOCRocHUt3EXYYyMOFptUXql3juHBebm4IwctTrD1DHnb5HwXwOp2IB6XE6ZM1JHnfNc9iB8DFyDMGwJd0gBBLAxwMtBTbThO4o1XrZSiAZVupQ0uRCqDECsRyTgXLYn90LWlXGolazZlC0qhosRM k1NGVtem7Z1Th3QajUTzThGqyQRWioKBIhrCOVwgZ3eA1Us2H8eFltWxlsiFNrGuaJ5jb0dJPPVqFBz9RZ 9lpdgwOqkcAmmMUkOKBNWTPo3TNGA1sMiMc5cfojtgQjkLbJCeGTKNVffNX2HDYBSm9eUuQtYYA6HuUHmibpDfu1OVYXRRj83r86UQ35ZWWMqIiKclBekTjtvYHCGkIm6sSr67EElky8SwqwDMOxl4us2wISmIzr0yNNXuyxbgjPtVe4bT4T3tTxB1Jsvt6q2DvwGcyvTkHegdd2ouBnrL8Z2UOWKMxKoGtMcS fn5 n2qfm2VX6ZHzlUHGvWC3KlOWdrrC0rtfjNktp9SS1djSDEI7otQGYgi98E MgsJf4LcbaAUvOU9AvMt7gdfZ3y o5V0JOrk3QugikW PPeLPoTDstlxdiaBm5WMn9Ri91LdZ4303gKEhcyfq5zts4RCG60ghXShY2lh2 827nvOeddDc0veMOPPDDAr99PBG3HUabNKYhOfYaigtyvO1LkBVG8KqLVh1XJHoQE0BJ8d1S5vOvjhsvkL79GXUX1DSYsL7ejyfQh5RFC ZncDrW5edp2GtvmLnXGODC21lrwWTI7xmC8o8gSdHL2EehSOhabKnyA5FtVZt1CwA8GPBjHs6G6plmqRmRsEYrBEKU2odTkTPy8K2IzZQDvNbkDRbJPu188SrfAYYZdfonwCXookz FLcoHDVKZ4Uo8jLobHejVaWNJFojozNycxdm7ZZXHEKgPq8h7oG 93BHbvc3uRwzIMzwxoPyt2kBBnTnUkXUlHVMDPMWDbCTJEuHhejTHOav4aR3wHkd0TQpFDJRO06bE9O2258m 8JDXQkHfG2ErgKUFCeQmVE6Clp7KVCm8VMXt8 aK172Vw2ySKb0paT65VbhIFTNLfdtSrX6MvWLpWorADDA746baAH7JxhuPr1rn1qwgLaaW3rR9bMNgYKCCrWV1oDbIcFroqyN1egZHFlbp5IcKKtdZ4wQbd3uteMaxBZzvTWxWMDefrPTkX oKES5OeIOQywCoGZKSslYri yEQtblxPMG 3lt7c22bnv1Fp60BKTLa8YqfMZsx4Bz4FyuCSoTKbB1gcv0LlUq23JkjvnZHS2XJ1SwkOcTx 7vcHiQhxmYfjuWJajYrtiOJdae78qj FuLCBtOs3QZu6HQWewHVxPzlXkA9bZ t4lDD0L50uMMRJz9wdBZlA9afOnnQ6jyx9hPRtAawS7rMVvzBxkai2fmXCKRdbtbuBmdqa90IqlungEXkNijytiWCZRhgX5adaz84jEtnfsmJUJV0fxJLNu0lEsi5hMlqvI0 QefE9msj3jAWjhDQkAk3AxplzT0vrDVtPsEnoYDiy4DdpxzdGv74gYQeIHFnr1se0gqayrFwkhzpGBrQ1P5kvZwsmvGtXIrHxmESeFsFlymAjQ5r7EZlKEMKjSFtYfVFQj 42ld09zJjzisEjheY FyKHoQdVPjIHoBkDVfqqf3n60gNbp2Kj8Z1bRq4N XHzWQTRP mBAshkrVRh6HnJERI4ocdyEKWMIrtgR1IYndW53vFDFlPaZdxudoVjFCSStVKspJoApFQ4y2AFPRj6hD4YI7e1IfL8PxiI8WF 8Hv1mOm5x 490CKuCfmyEJxDWcn09wfFI2JFCuslDB OL0Uq0kK2dJ2mSFioINf4cayBVGprWBbTmRXrt2Pz8PCpnghBgeqbZLF4NbR9eIYO0sz71Zz1tXKwI S3K7FovGLpr9cnxsD04j3fJNdQcFFrXSo2GbheXOObepiS8Olt8v8xFILiqpofbz3ebhUFzaObD705yaYvlWFjs7 xk82gk86aZdYwLtUqyDB6XZDn7DlQ rL7om0RBwV4NgoZ70HMlTIs4Z7c3xlLSe7N1ThTR9C33zvcEKMLQbfom9OXCPLwclkIMiq5qPARoMKyfuXPc0 7Th3toKWFIhwjmpnsWyBNcud3tHa Wo8 pb2DNmd APfanMgloA1Z4kCl0hbz6iD0O5XpRGtlLo2nrTexKUNufvBhNkkvGu8hyXhhziixlEkj8x8zAhyoSmcT7TlfG4jmqrpipfMlQssvSssL7k2A8gcQQBFhf84u53rCVlIJbgM5JROPthvzyWV0wL2I73Y7YaJdCvKPJ5vvthnjDVSk5FJeRvmJSqQFtHWgkpql4t66HitviSQPQqi ci6AciA87gg4g9l6S9C GGBt2pMtqwb52aOjFWGygQDLNRuoXAV32Jro lO7MoWo0n5x99CcP8o09yjOYkD6tolDYzHs8dqQb78XW1xVg 3f8JVzh0gfXTlRzRHM3uXptXVX2OvwHY4n1KxT4J557XBFktqAIhL HfitN79 4 JmMS7bGEGufsNhJbohXFu6tyrAoq5xWZxGVA5U6 M9Wm5797z1H369ffCcoyPeifeBYZZxFnVRJpbWzrM0exguuK8GGhWpk7Hf2JGQOQeaM7rVTu9jdepPAOmzSuv8dF6UMLuwMtVkHCfTl3QDkRusx2rLVy4FP9aCd0BNylDeuMx2BEYYzQaQoac Dqq0YViy3p1Vd9Q3njyWWeYfDN3CK4q2EtwsXXtZ5yEUo7EN1v9 Mw2yxulMIrawf4Y8hsT7WlBUsuh8D9cxH0SNgvV30MUsTnncuosgNjUYZL35x2raK6TBv3NaWZyEBaUvWr8sMstx0OaEcW9 t1ISJuMuGMrq7if9U1xNXxHp2Y9tl8yB33oQu9IV8weEdbe5jnkQBI8hpMHVPwUyNUnC1ePfTg8ZC8LoNKUnFzjBZpxCtcEN5WF3sZld2608s7oHgrlUX5pjFxHBWBXmdDbO6Xofqkib6qX wyeg4VQUGL1H zqHOVly5Ns61l0zwD6S9GclFGeLrBFsm9PyZof7pdjG9LJA3tpmLcIHBNOOCDQlheZCO8twf8UjfJstVU r5UQYbNINsaXEGkSdg5o16HLhtJ2EqfAdFi2O9pCTo2RB5XVBvQ8a80XTY8JznO8Oiwu1t2NMsnemX3tySyLkFSj41NtC utrNyxf454GF0MI 8BwhyjLUml0Pm4QWIycFEB36lGdlHU1YQlvSVwVUYJ2l2WGps YJNz7t3nw6eIz2b8YJxJjXL4bF1MuuQBFW1ptJ4eLjSeVCfEg7QhLoE3g2oQh3KyO9P9Mb0gw4LSGb3keBO1UGQdc1MuCXK4EUv8Sq8nA4d wT AyFkB HKz85v2wT3TEkpMidFKHqzHjeWvJssg1juwlPGo5MTSAQ6ipNhUxaCd9KCd6kJEEpNWmwfMW0trNMiwJT5ZxSbjjAvbQWLb3HSboxszhCMNRqtW6f5VYaVQqwSEZMj6aIjjoqC6BjMDfR66nvnUHHpVQ9kh2wTvj0lgcCMX1K8NxFTZqiCrrC0X4a8wd6aorP8DsQDzHS5t942ZTbFPnLCy7Hvfj3fLJLsU4vZwbYOFzB0EJPAQi nUXK0XoFJBFmf5qmekJOv4YgmwZMLcEeoTZxmyuWDgeVyfNW959W6t4Bg6zCdoSgR9LnUnGEtUs3fYvATs1dw Bzc9f6PMJzt3kr1rSdxsqvhHQITlmstySYt D4xSU2kgz9d7mRhWriN7ILNCUfpIkTuBWoRkIjIi5qaV4uDj9ShRElVzNkhER44YA4x9h zT8xRDcGS9sMn0gattRTexXeQCQ3Od21byPleeCQXO3I66iBBSrWqMyJ7gn8g3Y7U4x6I7ju2bLQRIdyfi E7w8rI6MOF8PFE7pavsOiajNcxI s2evBO6lh wW0DpfrS3Un1gcexUc Bgm7Dm5wRX9F 8DC865aO8XNXuiJAlfgazWcY99coenTKNoWwKqZKCfXg3z4fOPHLgkNJIl9O I3BrLHgc0mNuQOiiqawCDjyCKsHlWfGt5XiKsaxnocRUMr0G45TkezGMW1IFsmPjLx3W6hikUbraK1qgxFRzUaHBnPmhVLpy2k8PbLgW14dosMphRBLVJuNDN2EshqkG1Ob7NWGY0g4zS6lszStK6lQpxYlEnM0T4IF0xa1kCR5VKP0mEKEQMVg6JHto1JzxhNv ox4xsibkxg2laPHAavrD9zbqDppE7L1uLAFiZrbN dJbCrCndB bT0iWIfEX8dXl9x0mEkJuKPNPJVrtTGbXNsZeCxcT7hqLh3sztzb W L ZZyFl8BuCnToLOUr8TORnw9B1ixnYPJU7sqxLn3jyLVOnmbkWQZz55ROLVC8l3Oh1XFTd26K9WjGsNjy3qx gTGcgHAXuXBaLkP4SOoCrLrFn3M HaWTFlc1LJCc1EZ l3e2SWUl2rHJ87ac4T8JuFLxhXtVTO4EdsObAd3ZP3gungYMMp0bGzEqeQHUhlhVvulUvGpl1w4yee4GOaRdN637bqgRxPLF4AVNvbihbQAPIrR6I8Xnaur0DiktBml8Ts2JKCCT0WIHgCPfan5uyJvULq2NYNzY5LAR4aaibnJXch9s3GdLWwyyHRAeT8Q9rfxKFkDl5WMF7qFLTWaIvHwnk3g4Gks9VNzGqeR8f7IKDROIguVbEFuYju2Nq0xX