设为首页 收藏本站
查看: 7874|回复: 0

[经验分享] KVM基本原理及架构八-KVM内核模块重要流程分析

[复制链接]

尚未签到

发表于 2015-12-24 15:34:21 | 显示全部楼层 |阅读模式
KVM内核模块重要流程分析
初始化流程
如之前描述,KVM中主要包括:kvm.kokvm-intel.kokvm-amd.ko 3个模块,主要的初始化流程如下:
http://blog.iyunv.com/data:image/png;base64,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

主要过程包括两部分:
ü  通过module_init宏执行平台相关的模块(kvm-intel.kokvm-amd.ko)初始化代码
ü  进入kvm_init执行kvm核心初始化工作
虚拟机创建
内核函数kvm_create_vm(linux/virt/kvm/kvm_main.c)用于创建虚拟机,用户态Qemu-kvm通过如下过程,最终进入内核的此函数中,由该函数完成虚拟机的创建。
ioctl(KVM_CREATE_VM..)
à kvm_dev_ioctl
à kvm_dev_ioctl_create_vm
à  kvm_create_vm
kvm_create_vm主要完成KVM虚拟机结构体的创建、KVMMMU操作接口的安装、KVMIO总线、事件通道的初始化等操作,主要流程如下:
http://blog.iyunv.com/data:image/png;base64,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

1、    kvm_arch_create_vm()初始化kvm结构体
2、    hardware_enable_all(),针对每一个CPU,调用kvm_x86_ops中硬件相关的函数进行硬件使能,主要设置相关寄存器和标记,使CPU进入虚拟化相关模式中(Intel VMX)
3、    初始化memslots结构体信息
4、    初始化BUS总线结构体信息
5、    初始化事件通知信息和内存管理相关结构体信息
6、    将新创建的虚拟机加入KVM的虚拟机列表
创建
在通过ioctl(KVM_CREATE_VM…)创建虚拟机并获得相应的fd后,可以通过ioctl(KVM_CREATE_VCPU…)创建VCPU(相关操作通常在Qemu-kvm用户态进程中进行)
ioctl(KVM_CREATE_VCPU..)
à kvm_vm_ioctl
à kvm_dev_ioctl_create_vcpu
VCPU的创建过程只要是创建VCPU描述符,即kvm_vcpu结构体,该结构体内容较多,包括硬件相关的内容。具体实现由内核函数kvm_dev_ioctl_create_vcpu()完成,主要流程如下:
http://blog.iyunv.com/data:image/png;base64,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

1、    kvm_arch_vcpu_create()创建kvm_vcpu结构体,具体实现跟架构相关,直接调用kvm_x86_ops中的create_cpu方法执行,主要完成相关寄存器和CPUID的初始化,为调度运行做准备。
2、    kvm_arch_vcpu_setup()初始化kvm_vcpu结构体
3、    判断当前VCPU数量是否达到上限,如果是,则销毁刚创建的实例
4、    判断当前VCPU是否已经加入了某个KVM主机,如果是,则销毁刚创建的实例
5、    create_vcpu_fd()创建vcpu_fd
6、    将创建的kvm_vcpu结构体加入kvmVCPU数组中
7、    增加online vcpu数量
8、    释放锁,结束。
运行
VMVCPU创建好并完成初始化后,就可以调度该VCPU运行了。VCPU(虚拟机)的运行主要任务是要进行上下文切换,主要就是相关寄存器、APIC状态、TLB等,通常上下文切换的过程如下:
1、    保存当前的上下文
2、    使用kvm_vcpu结构体中的上下文信息,加载到物理CPU
3、    执行kvm_x86_ops中的run_vcpu函数,调用硬件相关的指令(VMLAUNCH),进入虚拟机运行环境中
Qemu-kvm可以通过ioctl(KVM_RUN…)使虚拟机运行。过程如下:
ioctl(KVM_CREATE_VCPU..)
à kvm_vcpu_ioctl
à kvm_arch_vcpu_ioctl_run
具体由内核函数kvm_arch_vcpu_ioctl_run完成相关工作。主要流程如下:
http://blog.iyunv.com/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAicAAAIaCAIAAAB01nr5AAAgAElEQVR4nOy9f4wcZZrnmeo+mhkWGmth3V4QKbM4SmZ78WQJMZLHsSuneuXukYzK0Za6xzpKbYg56zp9rHxXoeoBsT1WtcKD+FE9QAgpGS+YDmPWIyuttPugoH3EULTx0YTWtyx3eyENy4qTk7mTRyzOtUa2ehX3x1f1zMsbGVlZVZkVmW9+H31kRUbGjzcz4fnU875vRJRSRk5s3rz5008/LboVDAaDYVSUim7A8Aatw2AwGH0PWic3aB0Gg8Hoe9A6uUHrMBgMRt+D1skNWofBYDD6HrRObtA6DAaD0fegdXKD1mEwGIy+B62TG7QOg8Fg9D1ondygdRgMBqPvQet0iyiKgiCQl67rRlFUXHMYDAZj5GOsreO6ruM4tm3btu04jrochmGapr7vYyFN01ar5ThOmqYUD4PBYKw6xto6CN/34zjOLgdB4DiO53m+77fbbSl0WPEwGAzGqiPXOlcvf/nXb/3m/WdPnj3wrJH8H8cW8EnzrJMkiW3bcRzbtt1sNrEcRREqpKuXvyz8IxBiJHH9zGfnP/7tteuDTn+MQqKzdf7vM+df2Xmofv8Bg4kOH4vjOI5jz/PCMMwup2lq23aapqh4UPRAS67rLr75vxX+EQgxmJN7f/o3H32yrumQsS7RwToXX3mz8P/g1oHw0ScximNZlr0Usuw4TpIknuelS+6JlYii6Mqly4V/BELM5uj2g5eTz9Y7KTIGHLp1vvj086PbDxb+X9s6EB0+ho/sum7HHrYoitC35nleHMeO4/hLYds2rUPIOnBq38/Y1WZY6NZ5/9mThf93tj6IdVDKIFTrpGkahqFlWUmSxHHs+76sdxyH1iFkffg0ujjIHMhY79Ctc/bAs4X/R7Y+wDpRFGE+NCJrHUynDsOQ1iGkEOL6mQGnQca6hm6dMeleq99/IDp8LAgC27aTJJGPr1onDEOUQc1mM4oiy7KcpWAPGyHrxl8tdUswzAjdOoX/F7ZuRIePeZ7XbrfVjx9FkaxpNpuyPkkS7SYFtA4h6wOtY1iMtXXW8sXROuvA85MPF94GUji0jmFB66wyDLPO3Ld/qC4/P/mwugY8fu/38W9WBnhLY8+dD2TXP37v9/fc+YC6zb7yjo5N0rYkYwutY1iMr3WW5bZv3HLkvn2FN2N92HLzJpHKxhtvnfv2D3fcvnXXt7bJBjMTu7fcvKl+/4GNN946uWGzuu8jd1c33ngrdn9+8uHH7/0+2PWtbY/cXZWX2BgueWrbQ3vufGDPnQ/s+ta2LTdvwvLMxO4dt2/dcvMmsPHGWzfeeKu83HH71sK/JVIItI5hQevkMobWeX7yYfHHzMTujTfeKhvsuH0rihKYQK2EJjdslr323PmAqEJ1Bg4FqWy88dYdt2+FlrBQu+e7OPvct38olsLuMxO78TJbe5ExgdYxLGidXMbQOltu3vTI3VVZiaJHlp/a9hAWHrm7KpXH3Ld/CK+IdaRbTJWTlEeywfOTD6N4wpY4uLDj9q2P3F2t3fPdLTdv4ujOmEPrGBa0Ti7jZp3JDZu1Xqxd39qGTraZid2ijY033qoKA3roaB0pgOqKdXAiGG7H7VsnN2zecvOmfeUdohYcDW/V7z8A8aguJOMGrWNY0Dpf4eltD+3+x/eD3/36N76z8Z9h+Sdb9xTetoGC1K8WN/X7D8x9+4fSMyZ5X9ZIh1tdGRYS68iYDXaEQjBys+tb2yY3bEbXmagONQ18g7oHPW846Z47H9AGk8j4QOsYFrSOzl033Vb6atzwta8//dX+H/OANlBnqOtRr6gDPFh+attDMgugnrEOfCNHfuTuKpwxuWFz7Z7vSjG04/atUM7khs1itdo9391X3rGvvENdmTfPjYwDtI5hQevo/PieXZp1vrPxvsJbNWhEG9K1BVCXqGvEQJhEgLpEtc7khs3q5Le6UqlgXgCmq0kZtOP2reIhzJ0TmcFJ+8o7pLQiYwitY1jQOh1Qy51xKHTq9x/AWAuWt9y8SbSBTraZid2ypVhHHeyR3dVxHe34WJCrcJ7a9hBmIuwr71ANNDOxWz3IU9sekjqJ0wrGE1rHsKB1OjAzsXusCp0+krUOSh9xlVhnz50PYGI01mMZ7oGNUGNtuXmTjO6Q8YTWMSxonc5UNmwen0Knjzw/+bBWkaBXTSZGPz/5MExDl5AeoXUMC1qnM0/cu5eFDiHDAK1jWNA6uTzwD+9hoUNI4dA6hkXfrHN8/5PNFxrnootRnJjBW+9/VHgb+siZ+tmTMy8e3Xmo8CRCyIqgdQyLPljn5V3eO+c/jtOUDD/vX7p8fP+ThecRQnqH1jEs1mqdozsPXbj8ZeHJlKyIEweeKTyVENIjtI5hsVbrvH3mfOE5lKyUC5e/ZFcbGRVoHcNiTdY5uvNQ4QmUrI7Tz54sPJsQ0gu0jmGxJuucOPBM4dmzL0y5rrYgzAbBYrsty9q7i+12GMcasv0w8/aZ84VnE0J6gdYxLNZkneYLjcKzZ3fKllV1HI2KbVcdp5EkskY2U7fHESq2LTqp2PZcGKpqqfl+xbY1ar5f+AdflihOCs8mhPQCrWNYrMk6Z+pnC8+e3VGdIcyFYcW2ZZtGkuTVOvUomva82SCo+b5GPYpgnTCO1V3COKZ1COkjtI5hYb51ar4/7XlTrgtbVGwbL+GMuTCEJKY9b7HdnvY81SJVx0FZoylHutpwQK2QonUI6SO0jmFhuHXQUbbYbldse6HVWmi11ConTlNYpx5FkA0UUrasKdetR1HZsrBeq5YaSYLd61Eky6CRJCiDhhxah4wKtI5hYb51plw3O3IzF4Z4V9ZUbHs2COAkuAr7wjHayBBKpexQkIpmo2GD1iGjAq1jWJhvnbyFOE2nPa8eRTXfn282wzie9jzVOgutVnbYRmOh1VIPOELQOmRUoHUMC8Otk52cJguNJJn2vKrjYKgGk9PQ4SZzCmCdMI6zBQ02aCRJdlxnJDxE65BRgdYxLEy2DuqYOE3nm00RiVbrQDnwDcqasmXNN5uadbTRoC5eQc1U+GendYgx0DqGhcnWkcGVim3LCL9mHaglTlN0ss0GgToqo9Y66hw2TUKxMt1gynUxaDTk0DpkVKB1DAuTrSNSUTWgWge+mQtDyEZmUTeSBAtqraPOYcvWOuhbG5Vp07QOGSFoHcPCZOuQLtA6ZFSgdQyLNVnn5MyLhWdPsjrORRcLzyaE9AKtY1isyTrHHnys8OxJVseZ+tnCswkhvUDrGBZrfb7Orz/9vPAESlbBL/b9rPBsQkgv0DqGxVqtc3z/k4UnULJSWOiQEYLWMSzWap36/Qf+8rG/+ODK1cIzKemRt8+cf2n7wcJTCSE9QusYFn2wTv3+Ay/v8t4+c/695LPCU2ofOXHxYuFt6CMXLn/5zvmPX3/0ucKTCCErgtYxLPpjHSO57Ru3HLlvX+HNIGTMoXUMC1onF1qHkGGA1jEsaJ1caB1ChgFax7CgdXKhdQgZBmgdw4LWyYXWIWQYoHUMC1onF1qHkGGA1jEsaJ1caB1ChgFax7CgdXKhdQgZBmgdw4LWyYXWIWQYoHUMC1onF1qHkGGA1jEsaJ1caB1ChgFax7CgdXKhdQgZBmgdw4LW0Xl620MTt9wxccsdN3zt6//kH2ycuOWOf2X9YeGtImRsoXUMC1qnA5UNm0tL8c0bbgom3cKbRMjYQusYFrROB564d69Y5wd3bS+8PYSMM7SOYUHrdAblDgsdQgqH1jEsaJ3OoNxhoUNI4dA6hgWtk8u/+Ef/lIUOIYVD6xgW/bHOS9sPnn725K/e+s37ly4X/qhmkuWDK1ffOf/xmfrZV/f+tPAkQsiKoHUMiz5Y58SBZ3796eeFJ1bSCx9eu958oVF4HiGkd2gdw2Kt1jn24GMfXrteeDIlK6Jx5HjhqYSQHqF1DIu1WieKk8ElxzCOc/NmkvSy2SCo+X7HZmgsttv1KMquX2i1sFCPoo4brAMfXrt+7MHHCs8mhPQCrWNYrMk6R3ce0tJZxbbhgDCOy5YliB4qtl11nIptY6FsWVXHAdhmLgzFIrJjI0mmPU89UdVx5sJQTirZvx5Fs0GgblmPovlmU5anPQ+nRsafDYKa7wPxgeoVbLPYbstLaRWasdBqSeNV5sJQOw6Y9rwp18VZOm5Q83053WwQzDebs0Gg+Wk2CBpJUo8idWOxWnZlltPPniw8mxDSC7SOYbEm65yceVHLZfPNZsW2tZwrSTmM42nPw7+wCywVxrGauEVdkt8rtg3HTLkuFCXeqti2qq56FKlWwL5I2XNhWLas2SAI41hUhIPUfH/a88qWhS2zR0B78Ik06+DIEIkq2iyy15TrQhgdrVO2LJxuLgzxZU57nvr9LLRaOFrN98uWpR1kynVLpdKy9d+56GLh2YSQXqB1DIs1Waf5QiObzvBXthQTyNrzzWYjSRZaLcgmjOP5ZhMGggPUAkUkhNyqljVdUCskOXUjSXAQ2Cibiyu2LVl72vOyXlGtI1ZDs1HPybLWGPhMW6+WVtCkvJRm4Jg4Eb5M0YwcBN9PzfenXDfbWmlwF6I4KTybENILtI5hsSbrnKmfVRMZKg/0huFv/3ipAKr5/mwQoAACqC3UnAtVqGu0DZCC1coGyRf/SqpVzz7teeia05rU0TpTrtvdOuigQ8GUbaF0akEY+DhVx5H+PVhQLIUCThWYWGc2CDRzSLUXK9WbqEvewhdL6xCToHUMi35aRxJ0PYrwl770hkkpMxsEU64LB1QdB1aoOo4MzKia0QwkBYfqOZGEpFq1MihbFo6s2kVrsHT6lS0LQzt51pFjqsvqiEs9ikQD4gZ80my5huPIYJLa5my/2VwY4sOqn67m+zgLOuLQ1IVWi9YhJkHrGBYDsU68NHQhNYT2x7hmlGxPVEc9yGCP6rOsdaQaUNMx+rI6HrZsWXBSVgBZ66g9WnCMWkKp/YphHKtzHLTZELBII0myg1iodTSfyQZSvYl15PPK8BKtQ0yC1jEsBmUd/MUdL41wyAboapNuJTDlumpaVzvQBKl1ZAKCNvyjplqMfEy5rtRYMjKfbXDWRtoIkHpqlETSVIhNdIWBq5rv40OJkNRiTvWi+v2o1sG4l9YMiFOqN9U6cJgck9YhJkHrGBb9tw760NRUKEm5F+vkIZkUngB5tU681E+lHWHKdZGyMe04zzoYGkGzMcSC9RihkekJcN58symdfjXfF+vgG5CGaepVKyQMCMkGIhtUPNpwkXYcdS9pBq1DTILWMSz6bx1cwtJIkinXxXwqdUijew/bYrutCUkde88b1+mYatVSQ0vTyN0y6KJd36OKRz6O+hZMoF4kJOeCA2q+LzMIFtttmV2N7VWNqdflyGdRCyNtEkTVcdTWiuC1k4pcaR1iALSOYdFn68hoioxwLLRaGAuZDQJMHMBsAhWsxDS2HmcTQGkygVjGeNYBSEubHYBEDz81kkTtG1SHZyAzeYluNBxwWU+sFE3h2nWjtA4ZFWgdw6LP1gFacdAXJCn3PTuvlGwGH040hWtzE2gdMirQOobFQKxDhh9ah4wKtI5hQeuMKbQOGRVoHcOib9ZRL08RGkkiK2WAoXsXGeaAYdQkO7lA7drK3oRGBWdR13Q8nbZe7cfT2omX0qSOu8tm0gb1ZgSy47KfZbHdVs+unjQ7zyL7RWlrOnZ40jpkVKB1DIu+WSc7UzleGnhXl+Vmndk8iKvuMa0Ac6kx3ati26VSCQvqPQ60+63JwbGAI8iOecP1eReE4qTqWIjcdgHtR1ovlUrqZ5EZ0nLjHJnIJw3DXIPszeLUy0jVKdHx0pxpnFTufCrHjJduAyqT7rQ1spLWIaMIrWNY9NM62n1fcGFm9jKUOHMZpqTajrdKy7ohXrrOJptM1fnT6s3N8uhiHbXxceaCITm+Op9NrKOdOnu9jvoSk/rU7bUN4k7XFUHSUGl2++wptA1oHTIq0DqGRT+to13/X7FtefCBZpqOlzGisunYHaS5QW51I3dOG4R1YEHJ9XnWwb/oLluddeQqV/W+QctaR712Z1nrxJlbxtE6ZFSgdQyLfloHuRWpDZfuq9lWu+S+owPwJ/+052lTk7Xt5dLO7DWemnWkh61jn96y1llst9X7h3a0TqxUaauwjtzWUxZ6sY56VWn81f40eWRc9yPQOmRUoHUMiz5bR25AiasjNeuA7E3JVOSqUrWI0dxQtqz5ZlMGfrpYJ+/5Nz1aJ1aeU9fFOvFSYbcK6+DuajJihE/d3RkYB9LuM1RZuj1dXp+bOipG65ARgtYxLPpsHVGCJN+OPWzLot3PRs3geCSoOqKeHfNXrdP9ROrNNDuqJV567k5368AE0vXXo3UwNqN+Fhy5u3VgOPXdZXvYcCJVVLQOGRVoHcOi/9ZBbw+GKFZkHTX7Y4C9o3UqX70bjXanspVaR31UgVa7SJZHylbvPJ21Tqzcuq1362iNl8dvd7FOxzkU3a0DF2rDQrQOGRVoHcOi/9ZRHzsWLj2MoBfrYLyn4zCMVlJorlLXqI/qQeoXOj5fB09kkFJDagjteTxoWxjHcKp03GU76OThC+oEcfV7kFbhUNmH6OBONlrL5aTqepmtrm2vthNfqVYb0TpkhKB1DIs1Waf5QqN7JbEKirrN2iDuHTfM0DpkVKB1DIs1Wef1R59bddbTbsycd6VOf9GeFFd46i+QX731m8KzCSG9QOsYFmuyztGdhwrPnmR1nH72ZOHZhJBeoHUMizVZp37/gXfOf1x4AiUr5YMrV1/e5RWeTQjpBVrHsFirdV7e5X1w5WrhaZSsiFOHjxWeSgjpEVrHsFirder3Hzi+/8n3ks8Kz6SkFz64cpXKIaMFrWNY9ME64NThY2+8di6KE2P4nx87/Nb7HxXejH7xq7d+03yhwY41MnLQOoZF36xjHrd945Yj9+0rvBmEjDm0jmFB6+RC6xAyDNA6hgWtkwutQ8gwQOsYFrROLrQOIcMArWNY0Dq50DqEDAO0jmFB6+RC6xAyDNA6hgWtkwutQ8gwQOsYFrROLrQOIcMArWNY0Dq5fPOGm2gdQgqH1jEsaJ1cSqVS4W0ghNA6hgWto/P0todmJnbPTOwulUpYeHrbQ4W3ipCxhdYxLGgdnae3PXTD175eWoobvvZ1WoeQAqF1DAtapwPf2XifWOc7G+8rvD2EjDO0jmFB63RAyh0WOoQUDq1jWNA6nUG5w0KHkMKhdQwLWqczT2976Kavf4OFDiGFQ+sYFv20zrEHHztx4Blj+LO9/0vhbegjfJ4bGVFoHcOiP9ZpvtC4cPnLwh/PTLpz4fKXjSPHC08ihKwIWsewWKt1Xtp+8N2PPik8n5LeieLkpe0HC08lhPQIrWNYrNU6b7x2rvA0SlbKmfrZwlMJIT1C6xgWa7LOsQcfKzyBklXw4bXrR3ceKjybENILtI5hsSbrnDp8rKi8GcZxHoM76UKrtdhuD+jI6/wFnpx5sfBsQkgv0DqGxZqsM6DutSnXrTpO2bIqtl2x7arjzAZB1XGqjlOxbXilYts135/2vKrj1Hy/6jjTnlfz/Yptq4fCW+oaHASHrUcRToeX2KCRJDg7GhCnKc5Stqyq48w3m4vtdn8lNxeGWrPXgeYLjcKzCSG9QOsYFmuyzttnzg8uLcIiWlqXNT1aB4KBXUDZsubCMIzj2SAoWxaKjLJl4bBhHJctazYIsDFWor4RLeG8Nd+v+b7sOHJwaIeMCrSOYTGM1kG1AWGg7tGss9huwxxhHNejCFULXs6FYSNJsDHemg2CKddVrSOekMpJVlZsW5SjnhSCwYLqQhxhsd2eDYJ6FNV8fy4M4zSdC8Oa74vtZoOgkSSzQVDz/YVWa6HVqvm+nAi7y+mwGY5D6xBC6xgWw2idMI6lngjjuOo4SNOoaZDlpYOrHkVlyxLrhHEs1qk6zlwYLrRaZcvKWmex3S5bFjbGSm1LtT3oBMPxs9ZBhVTz/flms2xZU647GwRzYSi1FPRZjyLpzcPngg7DOEaJhgbg+JpuaR0yttA6hsWQWgddZ8jdyOzTnoeMD08ga0vxASAqVTCqfmTltOdNex70oKoI8ujYJNhivtmMlV4+1TrSs6eOJEnnntrLJ6qTvWQBDVPbLwaldcjYQusYFkNqnYptwxMYqoFvstsgTQtTriubYdgG3XQyL0Csgy4vNb93qXUWWi3MZZhyXZyiu3WkDRh8ipWuPNWFIjnZXbZXD07rkDGH1jEshtQ6ah2jWQdFw7K1Drwl3W5aZ5p2RlmJY2rvolJBBYPBmwFZZ8p1WesQokHrGBZDah30p0lCV60jmXrKdbUrdTAODzdoVQvKlI7WQVWEdN9IEvS81aMIwzAQSfzVOWzis/5aB2fHwaXBtA4Zc2gdw2JIrZOtdeCY+WYT2X9Z62AMRmgkCd6q+b52pSf2UkscXB407XnqRLIuM6fVSWjQlRwHy7NBICeVEy2221hWd8e8iSnX5Rw2QgCtY1gMo3VgCHEJ/uQXNzSSBPOSuzCIVol11DGhKdcdXCcYrUNIndYxLobx3gRkHeC9CcioQOsYFmuyzl8+9heFZ0+yOl5/9LnCswkhvUDrGBZrvef0h9euF55AyUrhPafJCEHrGBZrfb7OmfrZwnMoWSl8oigZIWgdw6IPzxI9F10sPI2S3nn7zPnC8wghvUPrGBZrtQ44dfjYrz/9vPB82l+iL74ovA395b3kMw7nkJGD1jEs+mMdcHTnoRMHnjGGm77xu4W3oY+8tP1g4emDkFVA6xgW/bSOYZRKpcLbQAihdQwLWicXWoeQYYDWMSxonVxoHUKGAVrHsKB1cqF1CBkGaB3DgtbJhdYhZBigdQwLWicXWoeQYYDWMSxonVxoHUKGAVrHsKB1cqF1CBkGaB3DgtbJ5Zs33PT0tocKbwYhYw6tY1jQOjo/r+yfmdg9M7H7m//dTX/8T74zM7H7yH37Cm8VIWMLrWNY0Do6waT7zRtuKinxxL17C28VIWMLrWNY0Dod+MFd20U5lQ2bC28PIeMMrWNY0DodUMsdFjqEFAutY1jQOp1BucNCh5DCoXUMC1qnMyh3WOgQUji0jmHRT+u8uvenpw4fO1M/awZ//sRzhbehX5x+9uTx/U8Wnj4IWQW0jmHRt2eJfnDlauHPyiTL8vaZ80d3Hio8jxDSO7SOYdEH67xz/uPCkynpnQuXvzz24GOFpxJCeoTWMSzWap3GkeOFp1GyUqI4KTyVENIjtI5hsVbrfHjteuE5lKyCkzMvFp5NCOkFWsewWJN1frHvZ4NLi40kWcvus0Ew5brqmjCOu5yiHkU1358NgsV2GxuDhVYLGyy223ir40vsUnWc7CnkUFm0jac9bzYI1sc6b7x2rvBsQkgv0DqGxZqsc/rZkwPKiWEcV2x7LUeo+b52hLJl1aNITfHTnifnqjpOzfenPa/m+9i4YtsV2y5bFtbUfB8Lcnz1ZV6bp1wXx8GhZBloTppvNqdct4uW+gg72cioQOsYFmuyzpn62RGyzrTnqdVP2bJQ61Rsey4Mtd3LliUtwfLqrKNSse2sSHAcuE2Ql7QOIbSOYTEy1pGKpGLbko7xsmLbqFqgFrWYUI/QSBJxSSNJ8G49ijqqQraU5V6so1Yz2d42tFytt4Sq40hXHrYcnG9oHTJa0DqGxchYp2LbyNeL7baUKfgXa+I0nQtDyfXo2srmfRxERlBqvq8N/2jWmXJdHLPHWqdL/xiKqoptT7muNiY0F4ZytHoUiURpHUJoHcNiNKwjpQmQ0RdMAag6DiRRdRzpK8v2sMXKFIOKbaO2wO4drQPESX3sYUMf2nyzqb0LFUnbaB1C6rSOcTEa1tFewjrzzSbyuNQ6UsrkWWeh1Spblnq0ehSpnWmqdbQ1mGugtWF11sF5NetgKsGU6w50OIfWISMHrWNYjIZ1oAFJ2ehhEw2oA/5SmnTsYUPqrzqOOkEZXV7yEgVH1jrwE95Ve/lWZ52OoGhbh0KH1iEjBK1jWAyvdaSPCwJA0sdAPbrRMDsAzhBJyGC+jMdozAZB1ihI95jcDCF1LICmPU82y057W4t1UJnNBgEKuCnXXePlSrQOMQZax7AYUuvkkc3F2cpg1fm6xx3VzRpJUnUcAYWUoM1T6GgdKFPrVcPAT0dr0jpk3KB1DIs1Waf5QmOdrTPSyI0PVLr0pw20q43WIaMCrWNYrMk6rz/6XOGpnKyOt8+cLzybENILtI5hsSbrHN15qPDsSVbH6WdPFp5NCOkFWsewWOs9p3/11m8KT6BkpVy4/OXLu7zCswkhvUDrGBZrtc7Lu7wLl78sPI2SFcHHHJARgtYxLPrwLNGXd3l8nOiocOHyl68/+lzheYSQ3qF1DIs+WAecOPDMmfrZKE6M4X/4n2beev+jwpvRL9489e6pw8eO7jxUeBIhZEXQOoZF36xjHrd945Yj9+0rvBmEjDm0jmFB6+RC6xAyDNA6hgWtkwutQ8gwQOsYFrROLrQOIcMArWNY0Dq50DqEDAO0jmFB6+RC6xAyDNA6hgWtkwutQ8gwQOsYFrROLrQOIcMArWNY0Dq50DqEDAO0jmFB6+RC6xAyDNA6hgWtkwutQ8gwQOsYFrROLn2xzqt7f3rq8LEz9bMjyulnT5448EzhvwUZZ2gdw4LWyWWN1jl1+NgHV64WfpPpfnEuushH8pBCoHUMC1onl7VYx8hHP3xw5erx/U8W/ruQcYPWMSxonVxWbZ3GkeOFG2JAvJd89tL2g4X/NGSsoHUMC1onl1Vb58Nr1wvXw+BoHDle+E9Dxgpax7CgdXJZnXV+se9nhYthoLx95nzhPw0ZK2gdw4LWyWV11jG4ew28l3xW+E9Dxgpax7CgdXJZnXXO1M8WLoaB8v6ly4X/NGSsoHUMC1onF1qH1iHDAK1jWNA6ufRinZ9X9mtrVm2d+WazHkVYbiTJXBjGabrQatV8v+b78yEYbNcAACAASURBVM1mnKazQdBIktkgqPl+I0niNF1st2eDAHvVo0iWVbBXzfcX2+2a72OlLOMI9SiSs9A6ZKigdQwLWieXXqzzo80777rpth/fs0vWrNo6c2FYdRwsT7nubBAstFply6r5PpQQp2nFtiu2Pd9szgZB2bIWWq0wjiu2jb1qvi/LKtgL1ilbFlaGcYxlLEA5ZcsS89E6ZEigdQwLWieXHq1TKpVKpZK4Zy09bKIELEx73rTnaf6QcgRm6tE6sldH68he054nxRCtQ4YEWsewoHVyueum2/7JP9g4ccsdXdj0OxtKStx1021Hj/ybVVtnynXnwrAeRVOuC1uEcaz5Q9ag561H68he3a2DY9I6ZKigdQwLWieXp7c9NDOxuzvf2/R7opzKhs1P3Lt3LbVOPYqqjjPluujmQjWT54+q48yFIa1DjIfWMSxonTWBHjb4BmvWOIetbFnigEaSlC0LalHHdcI4xriO7DIbBBiVWdY6sBpMQ+uQkYDWMSxonTXxxL17xTdgjdaZbzbViWT1KJr2PKl+MEKD8Z6FVkvkhKoIswyyx5wNgsV2W15idzGZNguOswnIsEHrGBa0Tp/pYh1MVhYwM01QxZBHdqQnyyoOuyJoHbLO0DqGBa3TZ7rXOmEcC4vttvqyl4zfi3VWcVhahwwztI5hQev0meYLjb4negFXhhYLrUPWGVrHsKB1+szrjz5XuBgGyrnoYuFfMhkraB3DgtbpM0d3HipcDAPlTP1s4V8yGStoHcOC1uk/v3rrN4W7YUB8eO36sQcfK/wbJmMFrWNY0Dr95+Vd3oXLXxZuiEHQfKFR+NdLxg1ax7CgdQbCq3t/+u5HnxQuiT7ywZWrpw4fK/yLJWMIrWNY0DoD5PVHnztTPxvFyeB49dSb//rI/EBP8eapdxtHjr+8yyv8+yTjCa1jWNA6o82PNu/8g9smCm8GIYOD1jEsaJ3RhtYhxkPrGBa0zmhD6xDjoXUMC1pntKF1iPHQOoYFrTPa0DrEeGgdw4LWGW1oHWI8tI5hQeuMNrQOMR5ax7CgdUYbWocYD61jWNA6o81KrfPS9oMnDjxDeuH4/icL/31JndYxLmid0aZ36zRfaPz6088Lv7POyBHFyeuPPlf4Dz3O0DqGBa0z2vRinWMPPkbfrJG3z5wv/LceW2gdw4LWGW16sc475z8uPGsbQOPI8cJ/7vGE1jEsaJ3RZlnrnJx5sfB8bQYfXrt+dOehwn/xMYTWMSxondFmWeu8eerdbn+/J4m2JozjwvP70MIBnkKgdQwLWme0WdY67yWfdUmjU6477Xnysh5FFdte51Rej6L5ZrNAlyy22zXf72VLPtSuEGgdw4LWGW2Wtc77ly53z/hly1IlNBsE65z0a77fY9IfEGEc9+jaM/Wzhf/iYwitY1jQOqONZp1/Zf1hMOmqG3S3TpymZcuSfrayZS20WpKIK7aNd2u+P+W6VcfBSmxcdRzpjitbVseuuWnPwy6oqHBY9Tg13y9bFtA2QEuqjjPteR2PPxeGZcvC9rJ71XFEZrJcdRxsg6JqLgyxFz5C2bJKpVLeR6B1CofWMSxondFGs87ELXd884abfnDXdnHPstaZ9jwooR5FkqYrtj0Xhmo5IrKRTrmKbXe3zlwYTrmuHHCh1UKKX2y3YQLUVWqtI8ecDQLsW7FtOYjKQqslh5oNAlVaWpulgJN3pbXYnbXOkEPrGBa0zmjzo807v/3Nu2YmdoO7brqtVCqVSiVxz7LWaSQJUvaU68I0ska1johBcvSy1qk6zpTrYl9soFkBx5QFnBcvUSRpZ1ERLaFJXaxTtqxpz5NmQLRVx6lHkfaJaJ3hhNYxLGid0eYnW/dM3HKHcNPXbywp8S/+0T/9q/90adlkCiWIabJZWLWOzDhY1joV254NAsgG73a3Dt6V7dHvl2cdmKlH69SjSG1GvNTJBm/ROkMOrWNY0DpGMXHLHfBNZcPmJ+7dW++hh03+9pfutaxFMK4TL/WwocMKdYwk/awb1HJEHS7Ks452XnR/5VlHnQchPWxqt9uU6+Jc0pUnzZDlrKtonSGE1jEsaB2jmLjlDvEN6MU66NqSHqc4TeebTQzUV2wbswlkkF/khL1kML+jG2QXpHVttB+ygT+wXiYIoE6KvzpnQQNewVQFMRBWqk1tJAk2k+JGXkq1hAZwNsFwQusYFrSOUTy97SFtTS/W6WIjzRBqrZCtHjqy7AZdzrss2RIq74zaMXs/Ba1TOLSOYUHrGM5arCP0eEkNuulAx4lnawFTt4U4TWXuQ8W21+eKH1qnEGgdw4LWMZwoXs0f9RqzQbD+V4/26CFtkvdAOf3sycJ/0DGE1jEsaB3D+eUrbxauB2Pgc94KgdYxLGgdw/nFvp8VnqzN4P1Ll1/afrDwH3QMoXUMC1rHfN547VzhKdsAThx4pvCfcjyhdQwLWsd8Xtp+sPvzDkh3Prhy9dThY4X/jmMLrWNY0DrjwvH9T7556t13P/qk8CSepR5F0RdfFN4MjQ+vXY/i5Ez97Mu7vMJ/vnGG1jEsaB1SPH9w28SPNu8svBlkOKF1DAtahxQPrUO6QOsYFrQOKR5ah3SB1jEsaB1SPLQO6QKtY1jQOqR4aB3SBVrHsKB1SPHQOqQLtI5hQeuQ4qF1SBdoHcOC1iHFsyLrNI4cPxdd7Mu9tA0jipM3Xjv36t6fFv6D9hdax7CgdUjx9GidV/f+dDivch0qPrx2vflCo/DftI/QOoYFrUOKpxfrvLT9IOub3mkcOV74z9ovaB3DgtYhxdOLdXgP0xXx4bXrxtzIh9YxLGgdUjy9WOfC5S8LT+WjhTHlDq1jWNA6pHiWtc6xBx9b55QdxnGPK4eWt8+cL/yX7Qu0jmFB65DiWdY6Jw48I3m/6jhYng0CWe4jc2FYtqyKbVdsu5EkshJrply3cJ30SBQnhf+yfYHWMSxoHVI8K7JOxbbjNJ1vNrHQd8qWhZpmLgxhtXoUDehctE4v0DqGBa1DikezTjDpPr3tIXUDzTqNJJFCpB5FUn8stFrwRNVxUAlNue5iu111nIptz4VhNjVPuW49itTjVGx7vtmM07Tm+zXfxzYd91Wp+X7VcaqOI1tiL+3UstlCq5U9SMW20Rithai0Gkky5bpSflUdB8s4KQ5L6zCGP2gdUjyadY7ct++Gr339OxvvE/do1tGyc9mysDAbBDBH2bKQ6JH0wzgO41g2U5lvNkVUOCZOoSbxim1Pe17ZsuSwWeXgvAutlkgL7Vxst3HqRpJAHthssd3OHmeh1ZpyXc1JOA7KL1mIlZqsbFmzQQA/qR2AtA5jOIPWIcWTtU6pVCqVSuKerHXU7C+1iBRAIpia7097nqTvjtMBkOhlM7hh2vPEbWXLQjaHP7JlSsW2ZaX0y6mnm/a8mu/Xo6hsWeLLehShnNLqG1RyHZudZx31y6F1GEMetA4pnu9svK+UHzd87ev+Qz9RE2sjSSTnIn2jPpCcq1oHvWRdrDPfbIoMFlqtsmWhEJHhnLy8ny221NSvbinNwHAUNkAZFMaxWvdIuSMqonVoHcOC1iFDh9Q6pVKpsmHzE/fu7TibQC07KrZd8310NK3UOqiccFj4TASAZXVcB31l2SOgVw1lDcoUdaXWJVh1HGlVturSSh+12TJutNhu0zqMEQ1ahwwdsA58gzVZ68Aosoxxl2zxsax10PeFjI8FTI/GwbEG+pn2PG3gREDXGXwjTUJNgyEfrJwNApxO7WdTyZOirIdrMSWhVCrROoxRDFqHDB0/r+wX3wCxDsoRNU1L95S2HguL7XbHDTomerXLbi4M1e0XWq25MOxylSg2UF0CW9SjSF2JI3ecwJaH1mzMSlBbq7ZK3ZjWYQxn0DpkBFCts0YwOQ2s7pLPRpKoB8mbVJ3Xobdu0DqM4Qxah4wAfbTOulF1HFqnL9A6hgWtQ0aAV/f+tHCLjBy/eus3hf9wfYHWMSxoHTIafHDlauF5fLQ4/ezJwn+1vkDrGBa0DhkN3j5zvvA8PkJ8eO26MY+ypnUMC1qHjAYv7/JY7vTOL195s/CfrF/QOoYFrUNGhhMHnuGz3Xrh7TPnX9p+sPDfq1/QOoYFrUNGiaM7D/3ylTff/eiTwjP7EHLh8pfnoouvP/pc4T9Tf6F1DAtah5DVMzOxe+KWOwpvhtnQOoYFrUPI6qF11gFax7CgdQhZPbTOOkDrGBa0DiGrh9ZZB2gdw4LWIWT10DrrAK1jWNA6hKweWmcdoHUMC1qHkNVD66wDtI5hQesQsnponXWA1jEsaB1CVg+tsw7QOoYFrUPI6qF11gFax7CgdQhZPbTOOkDrGBa0DiGrh9ZZB2gdw4LWIWT10DrrAK1jWNA6hKweWmcdoHUMC1qHkNVD66wDtI5hQesQsnponXWA1jEsaB1CVs+KrHN8/5Nn6mfPRRejODGDd85/fKZ+dtDPkaN1DAtah5DV06N1Xt3703fOf1z4w0YHx7sffXJ8/5MD+pJpHcOC1iFk9fRinZd3eR9cuVq4GAbNh9eu/2LfzwbxJdM6hgWtQ8jq6cU6v3rrN4UrYX1496NPBvEl0zqGBa1DyOpZ1jrHHnwMGXmx3V5otdQc3UiSwj3Rd04ceKbvXzKtY1jQOoSsnmWtc3LmRaTjuTCs2LaaoMuWVbgk+s7pZ0/2/UumdQwLWoeQ1bOsdc7Uz6qakXJnLgyrjlO4JPrO22fO9/1LpnUMC1qHkNWjWeeJe/c+ce9edQPVOlXHmQ0CWZ4LwzhNa74/5bpVxylblrrcSJIwjqU8qth2GMdqfq9HkbzbSBIsz4Vh2bJwBPXgFduWjaXGCuO4Y72FvdCequPIecuWheWyZU17nrST1mGsKGgdQlaPZp0fbd5ZKpUqGzaLe1TrqJ6QdI8UH6fpQqtVtixoadrzpj0vTtMp150NgtkgwEuNim2jeJr2vJrv4wiqnGq+L2eccl0cpBfrVGx7sd3WbKdapx5F2FKr2GgdxrJB6xCyemYmdt91020zE7vB9zb9Xmkp4B7VOvFSJ9tcGMI0SNw1389WIbDFYrtdtixtQEiY9jxYCvqZDQI5bPbgcsxerCN75VlHOyatw+g9aB1CVs+R+/ZN3HKHsOl3NpSUuOum206+eEpNyqhdqo6DWmFZ6yDv5807QMdaI0lQcNR8XyuJ1INLpUXrMIoNWoeQvoEeNvjmx/fsqn+1h01Sv5rru1sH1Qw60DqKp2LbU66LIaJGkpQtCz1jcnCpfiA8tX9sNgiWtc6U62IZiqJ1GGsPWoeQvvGjzTvFN0CzTrw0FL+sdTCMr44Ddby+RzPHtOehRw47YoQGswlkAEZmHMikgy7Wgcmwe0frcFyHsdKgdQjpGz+v7NfWZK2zDoifxB/aBaorpffdaR3GskHrEDJATj97so8uQYEC0KvWHbVq6eNhu/DGa+f6/h3SOoYFrUPIADlx4Jm+lzK9g1nX63nGU4eP9f07pHUMC1qHkAHy0vaDH167XqB41pljDz7W9++Q1jEsaB1CBkvjyPHCZbA+/PKVNwfxBdI6hgWtQ8jAORddLFwJg+bdjz55afvBQXx7tI5hQesQsh6cOnzs/UuXC3fDILhw+cvmC43BfXW0jmFB6xCyfry8yztx4Jl14J//y++uz4kGMZCjQesYFrQOIQZSKpUKb0O/oHUMC1qHEAOhdRhDG7QOIQZC6zCGNmgdQgyE1mEMbdA6hBgIrcMY2qB1CDEQWocxtEHrEGIgtA5jaIPWIcRAaB3G0AatQ4iB0DqMoQ1ahxBzeHrbQxO33DFxyx2lUgkLT9y7t/BWrRFax7CgdQgxisqGzaWluOum2wpvz9qhdQwLWocQo3ji3r1inR/fs6vw9qwdWsewoHUIMQ2UO2YUOnVax7igdQgxDZQ7ZhQ6dVrHuKB1CDGQ3f/4/sLb0C9oHcOC1iFkeY7vf/KN1869+9EnhT9CzTzeSz5789S7rz/6XN6XT+sYFrQOId14afvBX77yZuGpeRw4F108uvNQ9iegdQwLWoeQbpypny08HY8P56KL2Z+A1jEsaB1CcvnFvp99eO164bl4rDg586L2K9A6hgWtQ0guzRcahWfhceNXb/1G+xVoHcOC1iEkl3PRxcKz8Kiw0Gr15TjvX7qs/Qq0jmFB6xCSy/uXLmfTYs33sdBIkoptg6rjYOVsEFQdp+o4WKkuLJtw61FU8/3ZIFhst+M0DeMYNJJEtmkkSc3358JQ1oRxPBeGNd+fct2Ohw3jWNosH0Fd00gStXl5TQ3jOO8UcZpWbBvN7vihwGK7PRsE8jL3e/jqr0DrGBa0DiG5dLTOXBhWbBtZeNrzIIayZUlCr0dRnKbTnoeci4Xu1gnjGHKq+f605yEjly0LSitbFg6C40Aw0oaa71cdBx6CCMV2jSTBlmXLwkpQtiyswTGnPW8uDKdcF3pTm1rzfTmgalAcBBtjvXYKII6U76rqOPjG0H5aZwyD1iEkl47WQa5HsoZgYAipdaANuEH+ru9unYptq+WLdsx6FMmy+i6aATdgWS1rOq7sWOtAABXbDuN4sd2u2Pa051VsG5vJx4GBsICSTo4w5bryVWjIEeAbOQKtM7ZB6xCSS9Y66CBabLe1vDnluig4pj1PKFvWlOvKSyR6FEZSLoRxXI+ijilYTNNIEs06i+021syFIY6DKgRdbVnrZGsddbOKbc83m1IAoVWyO44w32yi8EIxp3X64dQdTzEbBKh10DaRVpfOOu1XoHUMC1qHkFyy1mkkifSqqUUAVKSaCdlctpFSoGLbWIYMkN87pmAkbhxHKqHZIED2V2sLqXvyah3poIuXutSwGXyGo6HWiZd62GR3CFWqGfTFaeNAWqEz7XnyiTQVSZ8hjknrjGHQOoTkkjebQLLzfLMJA2EMQ83CMhcgjGN4KFu1iHU69r/BOlOuq2bnxXYbdUPFtjFtDFoqWxZKihXVOo0kQePjpR42sQ7kKg1Qazj0v0173nyzWfN9ta8Pu88GgfZZMBMB/XLZvkRaZ6yC1iEkl+7WqUcRfCCJe1nraKPo0sOWHbaJlR62jnkc9QqGYVBLwYKrGNfRrCMT81C9qZPQpKSTz1t1HExG0AoaLKOEgqLEylAmVtI6Yxi0DiG55FmnHkXQAOYLYLaYbCAD5oL0aMVf7Q2T5YptawVNnBnX0eYlo1us5vswTV4Pm8wxU+e2yUt10ppW68RLswxkEprMQ4sz89zUWkeOI+/iXFivTYGjdcYwaB1CculoHfQvoZtoNgjQeaVeI4m/4lUgJ/lLH9XAlOuqfVNSJZQtC0pT8zK6uWQYRisUOnamaZPc1OpEJkl3rHXwFqqoWJmEJvPQVmodvBQLqieldcYwaB1CculondkgwF/9qGmky0guT+lY6+A6GzkILJX9e1+VQR7ZbbrUOmo7/z6tRxHMpHaXYZaaemkO9qpHkepUTEXraB3UXmXLUreXWgcWlFOw1hnboHUIySXveh0kXz1X5lywojHfbC60WgutljYTbC3Uo0j637SF+WZzWXstO7yvstBqhXGsekXOjpkOmhS19si7Xfyq/Qq0jmFB6xCSSxfrrBr87Z+tPwitMyZB6xCSy3vJZ4Wn4HHjw2vXtV+B1jEsaB1Ccnnz1LuFZ+Fx492PPtF+BVrHsKB1CMnl1OFjhWfhceON185pvwKtY1jQOoTk8tL2g7/+9PPCE/H48OG16y/v8rRfgdYxLGgdQrpxfP+TfIj1unHq8LHsT0DrGBa0DiHL8Oren7770SeFZ2Sz+fWnnx/f/2TH75/WMSxoHUJ64tiDj/3lY39xpn52JLhv4r7C29Ajpw4f+8W+n3X55mkdw4LWIcRASqVS4W3oF7SOYUHrEGIgtA5jaIPWIcRAaB3G0AatQ4iB0DqMoQ1ahxADoXUYQxu0DiEGQuswhjZoHUIMhNZhDG3QOoSYw88r+2cmds9M7C6VSlh4ettDhbdqjdA6hgWtQ4g5BJPuN2+4qbQUN3zt67QOY9iC1iHEKH5w13axznc23ld4e9YOrWNY0DqEGIWUO2YUOnVax7igdQgxDZQ7ZhQ6dVrHuKB1CDGNYNK97Ru3mFHo1Gkd44LWIaQnju489PqjzxV+h+YeOXrk3xTehh45OfNi9kluKrSOYUHrELIML+/y3jn/ceFPoDGbdz/65NW9P+34/dM6hgWtQ0g3frHvZx9cuVp4Uh4HPrx2/eTMi9mfgNYxLGgdQnJ5afvB95LPCk/H48OFy19me9toHcOC1iEkl1OHjxWeiMeNX77ypvYr0DqGBa1DSC5vvHau8Cw8bkRxov0KtI5hQesQksugu9fCOFaR9Y0k6e+JGkkyGwTZ9fUoWmy3u+xY83315VwYqi8XWq16FOW9uzo+vHZd+xVoHcOC1iEkl/cvXc5LjlXHqdg2aCRJI0nkJTL1bBDIGtlM3T2M46rj1HwfVGwbb025LtJ3I0mqjqNRtqyyZSHFa+vVl3NhOBsEcvBpz1PPJQaq+T5sp+4uHwFnkYbVo0iWZXfVNFXHUQ2EQ+G8+AZwFrS/C9qvQOsYFrQOIbl0sU7ZstQaJYzjim3jZcW2pz1vsd0O4xhZWytl5sJwynVlS1C2rMV2W5TTEZgsWwkttFpqxpf6Rlo4F4bTnicvG0my2G7XfL/qONOeNxsE6u5hHMM6okMslC1rynVVaaH9skZrAz6guE1eZptK64xV0DqE5NLdOh0zbJdltSaAErRaR0oHrV9LaqAp19W8gmJCyggswwFqqaRugEpI2jYXhmhJnnVQKpUtSyuVFlotEZLoRO1wU62DxpctC4eidcY5aB1CcllprSMViSTxrHWQrPHWfLM532yi7pkLQwyxzAaBZhck7mnP01ZqJ5Uts9KqR1F2d3yK+WYTVYvqGO0IHd0pH1MqrarjTLkulhfbbanzWOsw1KB1CMmlu3UwVoEcGsYxqgH8RS+dYNl8Pe15KDVmg0C610A9ikQ52qAOhnPUNdrBJZWLdZbdHdqoOk7HHrZ6FOXVOjXfX2y38fHjNMUYkrQBsoHnZC+O6zAkaB1CcllRDxsyrDYqk7WO+lKtMNDxJcrJ1jrZCkY9uCxkt8RhVS3h+Dg7Si4ZfELVBa/IGqi0HkVqeTffbEJOVcdZaLVU8+GlNK8eRQutlrxcdqqb9ivQOoYFrUNILqsb1+myXryStY66GQZ+ereO9Nplt5xyXbyF0gojSdgFdoFCuvew4d1sv99Cq4XyRZrdsXmYTaeWPt2na2u/Aq1jWNA6hOTS3Tpqd1OP1tHG21ErSM0hnshWAx2tEy9VRRirx3EwPy1e6uma9jx1TrZmDjlvx9kEohy0J7s7vgdZqVlnvtmEk6SEyk7no3XGMGgdQnLpYh1tkGOx3e54Gaa6Xq1IVCHJtTsYLNGUA4VgfnP2+KIWaZV6wZD0a8E9jSTBBlOui8N2r3VwcLU9cJuswTLmc2Num3TBoc9QXaNap/tlsNqvQOsYFrQOIbl0sc4qUK90QSmACWzijKrjYEaZCoZkKraNwRJ1d/hDW4+LfqSewKwEzWRSb6m1jjaugy417eDYF8WNdljZSyvL1FkJ2ctUaZ0xDFqHkFz6ax3SI9qvQOsYFrQOIbnQOrQOo+9B6xCSy7noYuEpeNy4cPlL7VegdQwLWoeQXM7UzxaehceNc9FF7VegdQwLWoeQXI7vf7LwLDxunDp8TPsVaB3DgtYhpBtvnnq38EQ8PmQf6VandYwLWoeQbry0/eDbZ84Xno7HgXc/+uTYg49lfwJax7CgdQhZntcffe6d8x9fuPxl4am5R05cHJl5EB9eux7FSePI8bwvn9YxLGgdQgykVCoV3oZ+QesYFrQOIQZC6zCGNmgdQgyE1mEMbdA6hBgIrcMY2qB1CDEQWocxtEHrEGIgtA5jaIPWIcRAaB3G0AatQ4iB0DqMoQ1ahxADoXUYQxu0DiEGQuswhjZoHULM4eltD93wta+XlHji3r2Ft2qN0DqGBa1DiFF8Z+N9opzKhs2Ft2ft0DqGBa1DiFGo5Y4BhU6d1jEuaB1CTAPljhmFTp3WMS5oHUJMA+WOGYVOndYxLmgdQnrlpe0HTxx4ZiT4yR/+sbbmgc3/7MSBZ5794U/273DU9S8/7Gtb7t/hZFfu3Pr73c9Yq+6T5R8+8Ic9tnPn1t8/uvNQ96+d1jEsaB1Clqf5QuNfP/3n056nPo6s6jgLrdaU6065rvaksqrjzAZBnKaNJMm+G6fplOuqR9M2k5ezQVB1nMV2Wz2yLNejqOo4ZcsqWxa2n3LdRpLIBrNBgGbEaVq2rDhNwziu+X4Yxzhyxbbnm021YdOeV3Wcjp8Iu+N0grRHFnCEmu/XfL8eRXGazoUh2lmx7arjVB2nkSRzYSh7/frTz3/5ypsvbT/Y8cundQwLWoeQbry8y3v3o09gAiRuEQNeVmy7bFlIryKDsmXVfB9pumLbWesgZctLbTN5WfN9MYoqjzhN55vNsmUhd+OkaEwYx7IxUv9iu43j1Hwfe017Xj2KFlotiErdXuyliUe1Hbwl7VSPX4+iKdcN4xhvydey2G7jE0mDcUD1sBcuf/mLfT/L/gS0jmFB6xDSjV+99Rs140sanfY8FCsV2572PDVH48/5LtaZC0MUBJKCu1in5vtq+hbrqCuFjtaRGiWM43oUqTUWqiVYAaapRxGqH7QQZoJUpExRraN+TDENaqlpz5PG4Mg4LMqvrHXiNH0v+Sxb8dA6hgWtQ0gurz/6nJoTpRRAfkdGRrYVGSy0WhXbVtN91joV224kiWT8Za1TjyJ5FyfSCi/1yHNhiFIjjONpz0MzVF3VfB/+qDrOtOc1kmS+2cSOavOknKr5/mwQqD7LWkf8UfN9nBQ7Vh0njGMcR05atqzFdrujdeI0Pf3sSe1XoHUMC1qHkFx++cqbakJcaLUk6YsGkI4lv0+5eV04YAAAHglJREFU7lwYdrEOtCQmgLq6WweHxYIMz3TsuKvYtop09KHlU6670GrhmAIGjRpJIq6aC0PUK2Ecy5CSqge4RKt1cHwRkkhIrb3gbBQ9edZ55/zH2q9A6xgWtA4huURxkk3r6KSSUXpYBy6R0Ysu1pn2PIyrq1ZY1jqL7XbZsqTE6VLrZHvYcDT0sEGQajGE7VHNaJRKJZmbIB1xUqbEytwETEwQzSy22+jHw8t6FKEl+Lz4RHnW+eDKVe1XoHUMC1qHkFzev3RZy4mzQTDlutK9piZ6TP2SbJtnHUwBkKqio0WkK0+OEyszweS8Yr7u1pHzoj0ywUx6wGR7daBI7XPDp5sLQxm8kW9D7WHDBjAQutTwcrHdlvkFWOhinTiThWgdw4LWISSXrHXQVaXmSkn0mLomw+9q15NkeWyjSQj1BKRVj6LZIJCVqjawjeyOI6NYwfSEHq3TsdaJl3rA0AunKQe7Y3KBekx1WeuCqzpOdrKDuo18alpn3ILWISSXrHXwB76aT2eDQAY/pPioRxG2waxi1Tra9THzzaYcDdfQ1HxfCik5jjhPlRBeYhdspjZG272XWidOU5Rf2pVJaCfeRZ2HgR+RnHS7YeIDjIVZFQutFkqiKdeVS3wwjCQdkrTOWAWtQ0guHa0zcjSSBNPV4uVqnXipisIYVfZQYilIS66ERfcarKlepoopbbNBgE5F9VBTriutonXGKmgdQnIxwzojh/Yr0DqGBa1DSC60Dq3D6HvQOoTkMgzWmQ2CRpJ0vJ8b1mhDRzK2lL2Es5Ek2WlvcqgwjrXbuNE6jEEErUNILgVaRy7blGEYmXYsAyRyR051qEa7mGa+2cQVQrhtD+7fI7MVBFxYo+5O6zAGFLQOIbkUaB3M+5JpZtoMbLl2B8P4WevgNmhy62tURbg9Wrw0/q8iN4Su2HbHm2TTOox+Ba1DSC7D0MMmVYg2yVjWaJOhsRI9crjNmiaYjtWMdusaWocxuKB1CMllOGsd1CvoN8OMZO1KUiygdomXrpvRtCS1EVAHhApH+xVoHcOC1iEkl+Ec15Gr+nE7A9zLAHdOk1IGz7kB8vQB3BJNbkWDO61hL9wqrXDf0DrjELQOIblk7/65/nTsYZsLQwztxEuzBrAG26NXbb7ZlPtsombCjbHVHja5vw52KfzDxrz75xgErUNILm+8dq5A2XSZTaA+LEB62FC1YHm+2cR63CFbtQ4eJKpZB7uLgQq0Dp90YHzQOoTkoj3VbT3RblrTfeY0bneGm6SpR8Djc/BcNXTBoattsd1eaLXk/qG4c5o87rPjvdHWjeYLDe1XoHUMC1qHkG68c/7jAlNwnD+HTayD+1jjgQIQD+QhNkKhg4EiCAZPpZOHsKG4wUrcS62oD/v+pct8grXxQesQ0o2Xd3m//vTzAq2z7L0JUMrISmwcL92JAEM+2gGzV4kCzDUoqoftwuUvj+9/MvsT0DqGBa1DyDK8tP3gL195cxiu3emd6IsvCm9D73xw5eqbp949uvNQx+9/hda5lqafFf2BCPgsTa/SOoSsnpd3eScOPDMS3PSN3y28DT1y7MHHun/tPVvnb9L0ZJrWh4RW66k4frzVempwp8g7/qDPu0JOpunf0DqEGE6pVCq8Df2iN+v8n0Xn1q/4xnEmbXsLcJzJVR+q3X4+Seay6z1vl2VtzB7f83bJeeP48cK/CoWPaB1CTGbMrHMlTY8WnVX/HtveEgT7VAmt+lC+v8f392SVY9tb2u3n8dJ1d0A8cfy4ZW0s/OPncDRNL9M6hBjLmFnnXNEp9e8Jgn2uu6PjelGR6+5Qlx1nUnZpNmuOM+k4k81mLQj2WdZGy9qoVUuWtVEzmWVtTJK54bZOPU3foHUIMZYxs86JovPp36MWOnH8eBw/ji4ytWqx7S1YdpzJMHwE7vH9Pa3WU5a1EUVMksy128973i7P26X2lXVUi21vkePI8vDxCq1DiLGMk3WuFZ1MOwsAUsEQS0frwDEwUxg+gs0sa6PqjGwPW3frpGkdh1rLYNIguULrEGIm42SdK0Vn0q+A6kSVRJ514A+s9/09qJCSZM5xJmGjjtaBmbJrtEkHjjOpji0NDbQOIYZC6xRFFM2IM1TrqOM90sMm/WkaQbAv6yrVKOrQkWys4nm7sjsOAbQOIYZC6xRIGD5iWRsxVCOdXehP87xdrrsDJU66NBvN9/dg4zh+XPbCBuguU4sn8Ra2QSceCh0YTk7Rccp10dA6hBgKrVMsrdZTUTQTho+oEwFarafC8JFW6ynMFMDKJJkLgn1qbRQE+1RhYOAnewpsqb2Fo0XRTOHfAK1DyHhB65ChhNYhxFBu+8YtJcaoxc9//oOirUDrEELGnjGpdV555Uf79/9B4c0YMLQOIWTooXUMgtYhhAw9tI5B0DqEkKGH1jEIWocQMvTQOgZB6xBChh5axyBoHULI0EPrGAStQwgZemgdg6B1CCFDj/HWef31P/7TP909NfV7lcpdf/qnu//sz5zCmzQwaB1CyNBjvHVOn/6xeoeCQ4e+U3iTBgatQwgZeoy3TprWK5W7oJzf+Z0bPv/86cLbMzBoHULI0DMO1pFyx+hCp07rEEJGgHGwTprWK5W7TC906rQOIWQEGBPrnD79Y9MLnTqtQwgZAVZtnd+mr/yX9I1LaTwq/McvosLb0CN/m577u/QkrUMIMZDVWefz9IN/l/42TlMyOP5zmvw2fYXWIYQYxSqs85/Svy48I48J/yG98t/So7QOIcQcVmqdv03PFZ6Lx4r/nCa0DiHEHFZqnf8rvVx4Ih43rqUnaB1CiCGsyDq/TV8pPAWPIX+bnqN1CCmeNx597lKcrAMXF36tvvzotXOFf/Y+siLr/Nf0dN9Tas33sbDYbtejKLvBYrs9GwTrn+sbSYL21KOoY8PWjUtpTOsQUjzho086jqP+/+V5XrPZDIJAW4+3XNfN5tQgCOylyNtAO9qlOCn8s/eRFVnnSnq27ym1bFlYCONYDKQy5bpzYdhIkqrjqDSSRLxVse2yZVVse9rz1tKYxXZblqc9by4MpWHzzWbVcRZaLTSpYtsV2646zmwQSJPks9A6hBhIdPiYZVlJksj/X5ZltVot3/cty/J9X/1fz7Is27azOdX3fc/z4jiO41g9VMewLIvW6WMyXWy3a75ftqya79ejaNrzqo5T8328FOVMuW6Xg1QdZ8p1IYOFVmu+2Vx1e3BqeVmxbU2HstBIkprvT3teGMdopDSG1iHEWKLDx1zX9TwP/3NFUQSv+L7vuq7qGN/3HcfJs47qp3a7LS+jKGo2m+12OwgCbAmZnaqHhX/2PlJsrRPGcdmywjhebLfnwhB5fNrzkNznwhAJPS+bz4Vhx7fUPrHZIJDluTCs+T4qGFgKpkFnGuoVnBr1k+yFegumwe5S9yy0WtIG2WXQ1vnii5/TOoSsN9HhY1EUof5I09R13TAMRSSO40RRhLds2242m8vWOu12O01Tx3FwHNu2kySJ41hkRuusTw+bVnNMe95sEEinljDluiIJDfUIFdvG8rTnTbluGMcV24Y5ypY132zWowj/inUW223019V8v+o46L6r+X4YxyhuFlqtim2HcdxIErVjcB1qndOnf1yp3PXKKz+idQhZb6LDx9I0lU420Q+sE0URxmPCMHRdV+SRpqnanwaXYFwHNU2r1bJt2/M8FD3qjuxh67t1FlqtsmWhG61i25g1oJYjc2EILSG/h3E8F4aS8Su2LV1qZcsqWxbyfkfriN7qUVSxbZwa9YrmKhQ0qkK0ImbKdeEhtAQDPBjX6d4fuBbrwDe4eTatQ4aa/75sT9xyh3n8yf94KE1Tz/M8zxPHpEqnmW3brVYLRY/IA31ovu9Lv5k2AoRjisOy1vlg8f3CP3sfqWzeurNb/POdOyeEf/m9+9//u7/rVzJFvkYPW5ymqCrQ64U1880mNsjuJdlfrXXkrax10JUnw/5wA5QmdpG9MKegu3Xwbra4GUS5879/ekZ8g9i6dZP6u+zcOfHpp0doHTIs/MFtE9/bVJmZ2G0Y//ZPfp6maZIklmVJ95oqkiAIZIBHlYcaWeu0223bth3HgZay1vnrDz4q/LP3kT/f/ydRt/hfo2hG+PXF5/qeUkUqKFwgkprvL7RajSRBZ1eedVD3dLSOTGaDdVDZdGyAKETr2VP9IcM52rs4uIBuur5/RZfS+OLFJ/bsqYh1fvKT76m/S6VyVxTN0DpkWPiD2yZ+tHln4c3oO9FS15BlWVKaaCKxLAs26mIdx3HU6gcCa7fbmBGnWafZbL7XeKvwz95HhmRcR83XGCmRl12sEy9NYp4LQ0xDwFuNJMGYzWwQlEoluAQlDvroMBUbe8k0OYweydQD1R+Yt42zq1VO1XHQ7wdks75bB9+/uEfrYdu5c4LWIUOE8dbBNTryfxn+RMeyFEAyFU2LKIr8pQiCQN2s2Wyqc9iwhrMJBmEdFDRy/Q1yt6hFrLPYbsu4jnoETH5DkSTjNCib5sJQncOGa2tkM7hNvQRVLXc0f0y57mwQyAbompOWSNsGN64jXLz4xMWLT9A6ZHgx3jrrHJxN0C9gl2nPm282tf4rrNSsg2Geim2vz50CslUL6iq5UBTCE59hToG4c3DWyULrkOGC1ulv0DpknaF1yMjwwD+8Z+KWO2694aZNv7Nh4pY7nDt/v/Am9RFapy/QOsMPrUNGhh/ctV2dbfnEvXsLbxIZNlZknWvpicJT8BjyN+n7tA4ZDYJJ95s33ATlVDZsLrw9ZAhZ6fN1/n16tfAsPG781/Q0rUNGBil3WOiQjqzUOv9P+lHhWXis+Dj9YtmHWNM6ZIhAucNCh+SxUuv8t/Tof0ivFJ6Lx4R/l/522UKH1iHdeH7y4fU/6Q/u2t6x0Jn79g+HsLVknVmpddK0/nfpyf+Y/r+FZ2Tj+ffp1f+SvrGscmgd83l5l3emfjaKkw+uLNPBrT4VCleQ4UbuuK877hUoyJNF5DI07Wa6uJQa67PXK+BGufISVw/I7RTjpXvCq2vUa7+zj6WSO+lqj9Kq2HaPVySo1/31yPuXLv/qrd80jhwv/FceH1ZhHfD/pe/9dfop656+czG9lqSXLqXx9TTsRTm0juGcOnxsWdmo4Io2JGt53KGkfrnHBm7pIU7CBc9yP3aAS6PjNMVB1LPMBoHcQhH3AsGdP8QcuFOIugZnCeNYfTqINEl92Il2rZzcmXFZRDlozIr+x3sv+ewX+35W+M89DqzaOmR4oHWM5cSBZ1b6Z8tiu41bZWi1DjIybh0IJTSSRO5XiESPu3fIoeSu7ChN1HJHu3Fv9iHzEIzaKvUZjtlaRx7sCJ+ptY6cKF6q4WRZji/+w7/Q50rrnguXv3xp+8HCf3TjoXUMgNYxk5e2H3z/0uXekyayLW4mKI/mnfY8IDesVe8rhZX1KEI5ot4lV703Im5rKC+llkLh0vHGuhCb+igR9eEi2Von/moPm5Qs2FFMhptfYQO557zc7hdNwpNI8FWs1NlvvHau8N/deGgdA6B1zOT4/idXmjSle2qh1cJ9bdE91UgSlCOadfDvtOdJWVB1HHSy4T6GYh1sLM7AU6rU3rmO4ilblpRTUsRgFxlPUp8VP+W6882m1DqygL4+9U7yuCM9uhPlCFJgaZVW73xw5Wrhv7vx0DoGQOuYyelnT64ib0odMOW6cI+af9UeNphAe4KhvFQrGCxjRzxJVzI7Hl2V1xg0QO7QDlvAebhXbhjH0KE4Sa2xtIdcqc9PxIfCM7Lkpo1rt06cpscefKzwn95slrPO1TQ9O0wsc+XKeELrmMnbZ86vzjroMUOhg6GUmu9nZxMstFro9dJuvqv1p6kGQu2C7SWzly2r+x15IQlVb+IhGYPBWJT0sKHN0vhYKcJUoE/1GY5rt86JA88U/tObTXfrxHGsrcGTv+M4brfby24s6yW6Gq6XOFF4ih9CaB0zWbV1tOe916NIOtnkER1I6NLZpR1Bm8wm1sGQiZbi1YJjodXCwmwQoNcOJ1VlIwvYUYZtYB0oUwop6cHDZ8FcbbRNqiKZWq1aZ77ZVCd20zrDQ3frWJYlDytKl54XjvXyyHBEGIaWZXX0imVZ9lJAWtmIoqjZbNI6tA75e1ZhHdQuMkcARhGFzDebSMoyiRkVj8yQBlqho9pCnfY25boyGiRPmxeH4bxojDpoJMZC+SUPVRTroNstax05pkwTkAbgaVramtXNJqB11oHu1vE8z3Vd1R/QBkSiKsRxnC7WWVYm2UeJ5wStQ+uMDauwDqwA32BcJ07TxXZ7ynXFFsjvMIR0Q2kToweEzHRQu/XwdEWUMupcu+x0g/WB1hk03a2TJIk4I0kS9WHeYRiKkPCWbdu9WAcPBXccB7tAOdZSpGnqOI7neZZlqc5bOh2tQ+uMDavrYevdT+uZygs8Ka0zbCw3myC1bRudbJ7nycO8Lctqt9siIdd1wzDsYh0IBp1ycRxjdwgGx1RrHdu2IZtWqyXGchwniiJah9YZIwZqHZLH3J5HZyZ2k8Hx5/v/JMqJCxcupGkaBAEcYNt2q9VSyxfXdeEMvBTrOEshG6uzCVDr4C2RjWYdsdeSbFLscuGCH0UzRKNSuYvWMZBhs446K0ztH1O3qUdRl566xXa7x3682SBQrzDNnhfnWt18gS5EX3zxe3dtnbjlDjI4Kpu37syJP/qjP5KCQ1WFaKbVatm2LcJYUQ9bj9ZBx1oQBHj3j/6ounPnBNH43ve+/fnnT9M6pjFs1pFbAMRfvY+nuo1ckaPdwVO81fH+nnIrNplBgIkG8hJ2wWWkantEhI0kwdQ7GSKSi0xXOouaPWyDZtkeNmhAusI0kWASAWqgQVgHL5Uyiz1sXaB1zGLYrBMvTctW7xpQKpXkShptvnVHaeFaHG2CAKyDC3QwS00DU+xkd5kmp+kEChS3ycWttM5Q0Yt1giDQzCEvoyiSnjTHcfKsI4F+NtlFZBNFkczG1o7juq4yS5vWoXXGht6tg4tj5NEDc2FY830RwEKrhUwtvVuyRob3Z4NA3QXJGptl7+wZd6p1cAcd3AKuYyNRqXS8q7RYR/rrGkkiPWzSSJnYBmll2ybWwXS4Uqkkt76mdYaHXqxTbGCqwtIrWofWGRt6tw4KAlgH98eUZxmID3B/M7mH9HyzWY8iXNGJfWEF6cKShxfgXZQ48m7WOhAeUrw8Z0ErViCD+KsTo1WLqLfqgYFw45x46XkK8nnV7eUiJNwEQW5mylpnOBlm67TbbdRAyjpah9YZG1ZkHbkXmXrTaLUjC/eekbtESyWh3vcs/urTDbLHwZMI1Mf2lEol9bJNbCnjMbjdNQZmZOhF7szWsdbByBBai2OiRMNeqIFke7kRHMoy3HBB7h+K3j/1QQm0zjAwzNYJgiAzVkTr0DpjwxuvnevdOurf+zJEDxmgIMDNbNR72GT7teKv3l0tXuoZU62DMX8cShZwdSo8pDZMPXjVceabTVgBd54WpCX1KJoNAnmUnJQ1cZqiOJv2POkJlCJGDIpdZKacPLlnRVPdju9/svCf3myWs85v0/TSMNHr4zXHElrHLP7ysb9YqXWyT7tRnaGNcKB60O45na11NOvESq+XVhJln3qgWgeSwMuOPWzo0JMqR7v/tHwEOWPebAL0sKk3D13RbRf4YLdBwycdGAStYxbHHnxspdZBskb6ngtDPE8TozjyzGnMbFZHcfLGdTTrLLbbVcfBkw608iLrp6x14k7PbVNlJvvKHAFtgkO8dGdS1C6adRbbbYxFwX9qQdZ7rfNe8lnhv7vx0DoGQesYR49DO7NBoCZWPIgak9DipZtjzoWhbIZbn0lyx+OltQdRiy0W2215SgIOi7uIArmqRrMO7nuNDrGsdbK1DsoaTCIQ8GAFKVYgRYwzTXvebBCIYGTWg9pxJ9bpfVzn5MyLhf/oxkPrGAStYxxHdx5a0UOsB4c8wgDTsnFzaJmihgpJnRKNYR7URh1rHW1cBwqRZzRowHzqJaLSjQbkLDBoll4+49tnzhf+i48DtI5B0DomcnTnoSG8XNQwPrhy9dThY4X/1mMCrWMQtI65HN156PVHnztTP0v6y+lnT3Kq9DpD6xgErUMIGXpoHYOgdQghQw+tYxC0DiFk6BmQddrt5+P4cXWN9nKlJMlcHD8O+pipW62ngmCf7+9JkrkByaDVespxJgfsG1qHEDIiDMg6vr+nVCo1mzVZY1kb15JSbXsLsKyNtr1lRfu228/7/p7s+jB8xLI2et4u399j21tcd0cfHRAE+8RkHc9O6xBCxpHBWcd1d6imWbt1UOW0289b1sYVVTxx/HhWVFE0ox3HtreE4SP9coA0eB2hdQghQ8/grOP7ezxvl+ft0qwDBzjOpG1vkSIANYfjTFrWxo6dXWoSl23C8BE5VBTN4F3P24WqyHEmW62n4vhxy9pYKpU0x6htAzhamtYdZxKNUQsgtdmt1lOyGQ6rnhRv4Yx4KZ8922D1sCut4WgdQsjoMVDrwBYwhGReSbioWuRdrPT9PR1HQWx7C7rCHGcSJmi1nrKsje3288jdOH4YPiK7B8E+LHesdbKVjRxElY20VrQXBPvwruYkzY6aJvMajAWsdJzJINhH6xBCTGbQ1mk2a8j4SLJJMqcKACJJM5VQmtZdd4fjTDrOJLQE66CkEKmoxQqyvONMStEjh82zjpbiZTNVGPggSTJnWRulgMtu1mo9BSNKRZW1TscGq22TL43WIYQYy6CtA38Ewb6OAuhinawkkMQxYoSFbBJXu9q6W0eOk12jCgMtxBFkEp2IEJuhiGk2a63WU11qnY4NpnXIanj83u+Dp7Y91MfDzkzs3nPnA4/cXR1cy2v3fHfXt7YV/gWSAlnOOtfWbh0kZfGKOr6i9rD1aJ10qdcL9YfWYSXdX+lyPWxolXSy4QiiEymD1BZKA3BSaZJ6/C61TscG99U6V2mdseDxe7+/8cZbt9y8acvNmzbeeGvtnu+uaPeZid0dd9ly86bJDZv33PnAjtu3brzx1sfv/X4f2yymmfv2D/eVdxT+HZIC6eFZoqfWaB0IQLyCyWMYPJekr1qn47iO40xKEpdhf9/fI4eSd113h0yzlt0xsJ+9hEi2tO0tMs8bw/sY4ZfqBNOssSWcpB5QphKoNZkM/MinyzZY/bxrs84J/Fq0jvk8fu/3t9y8Cct77nxAlntkz50P7LnzAW3l5IbNO27fKi8fubu60sN2Z+ONtxb+vZEhoQfrvL+Gv75z6eNVmR0PhWlmPaJt3GXSc5dm937GwVyR+le0zrigWmdfecfkhs1Y3vWtbSiAJjdslp63yQ2bsRJS2XPnAxtvvBWox8xaQcqdjTfeuuP2rZMbNm+88VbpfJNzoYhBk+TUWJA6bOONt5ZKpY033rrnzgcev/f70mCtbViz61vbtHMRw+jBOr8dt+dGF3GpzRoJ0b1G64wF6GHbc+cDSP1z3/5h/f4Dj9xdlWwuKtpx+1Ypa3bcvhVdW9laBwfUzrLl5k3YXgQgmz1yd1U8seXmTU9tewhvwVLPTz78/OTD9fsP1O75rthRji/K7Ni2LTdvwsqZid0sj0ylB+ukafo3YyUe190xuBvkDIAwTS/JT0XrmI9YR8RQv//A5IbNMxO7ZRukbDVxz0zsRrrv3To4oPrWlps3oViBM1A5YV6D2iP3yN1VKYbU9tQV63RsG46v7UIMozfrpGl6LU3fW90YDxkYJ9P0vTS9pv5OtI75SOJ+fvLhjTfeilpHJAFWZB1sqU2HkzVZ68B2Mo+u/tVOv13f2rbj9q2aimgdIvRsHcZoBK1jPh3HdfaVd0ivl6yc3LBZiqEuPWz1pXEa9IxhYzmadJ1JSaSeC2ZSm7Tl5k0YztlX3tHFOh3bRuuMA7SOYUHrmI86IF+//8CWmzdh3GXH7VvRqSW5HgP72og9hkzUI4Bd39qGCdmYPiDrsTHWywg/1uBfrUmP3F3FLpiDoG6PCgkrO7ZtcsNmWsd4aB3DgtYZd7LXja7oSlL016kg+6/xsL23lhgPrWNY0Dqkz7DmIP2F1jEsaB3SZ7J9cYSsBVrHsKB1CCFDDa1jWNA6hJChhtYxLGgdQshQQ+sYFrp1Tjz4WOH/kRFCiPDekdcKSY6MAYVunXOP/cX/vwFPZKNoFI2iUQRHV9ccGJDCcRTQCKDXOlfXHBjwRDaKRtEoGkVw9P7+8wEpHEcBjQB6rfP///8NCR0Dns5G0SgaRaNopnHaycnr6F8sjgKaAgDDS8T6utFu+wAAAABJRU5ErkJggg==

1、    Sigprocmask()屏蔽信号,防止在此过程中受到信号的干扰。
2、    设置当前VCPU状态为KVM_MP_STATE_UNINITIALIZED
3、    配置APICmmio相关信息
4、    VCPU中保存的上下文信息写入指定位置
5、    然后的工作交由__vcpu_run完成
6、    __vcpu_run最终调用vcpu_enter_guest,该函数实现了进入Guest,并执行Guest OS具体指令的操作。        
7、    vcpu_enter_guest最终调用kvm_x86_ops中的run函数运行。对应于Intel平台,该函数为vmx_vcpu_run(设置Guest CR3和其他寄存器、EPT/影子页表相关设置、汇编代码VMLAUNCH切换到非根模式,执行Guest目标代码)
8、    Guest代码执行到敏感指令或因其他原因(比如中断/异常)VM-Exit退出非根模式,返回到vcpu_enter_guest函数继续执行。
9、    vcpu_enter_guest函数中会判断VM-Exit原因,并进行相应处理。
10、处理完成后VM-EntryGuest重新执行Guest代码,或重新等待下次调度。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155840-1-1.html 上篇帖子: kvm-qemu 设备IO虚拟化 下篇帖子: KVM基本原理及架构七-KVM内核模块中重要的数据结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表