一、介绍
使用IDEA搭建maven web项目,整合框架Spring+SpringMVC+mybatis
项目结构图:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAf4AAAN0CAIAAADaud3lAAAgAElEQVR4nOzd/XMbeX4f+PwLqbrEd+XEvqv4LspdnWtn1rH3uBAIgEM9jCQKJIeiKGpFAqRENgHwQaQ04jM5M3oakQQpQIQ0Az5IQzzsAGhyd7TDsClhVrZjrcXJjCvxQ+wqV3I+n8+7SZ3jh7tbJxvrfvgCzW9/+wHdAAiA6DfqVSoR3f3tBgi+8cUX3+7P32tpaak72wkV6MiRI2fO95T9MACgahw5cuTIkX925Mg/+3uI/oqF6AeA4kL0HwKIfgAoLkT/IYDoB6gozgvcqdbD/Scpjf6GTqhAR44cOdPaU/bDAADiYvfVxnZv2Q+jEIj+QwDRD1BR+q/NfOfK9bIfRiHyjP4zI4unh+ZyOjXwYdkfYRVA9AOITrdcvnR58LJn5LJn5Dvdg2fOXSmwwcmZ96dmPjC0yeytBW5oRufKF1z9Pd5rXP+7ZX/qaHlG/4X1l+88EHJqXnpa9kdYBRD9AHUNnSeaum6MzywtLS0sLMzNzc3NzS0sLCwtLd0YnznR1JV3s2MTs2OTs4Y2CSx/PDKZo1/71lkX+c/V65Nzc3PBYFC8vz67KD9c/7tLS0tLS0vLy8t5P/A8o//k6Ecnri+fuP7g1NijltCzC2sv5Vo/eoHoLwpEP8C5S547dz/0+/137n44ODI+Pz8/Pz8/eG2C3Hn37ofnLnmMtnn1+uTo+MztO3dv37k7Oj5z9fqkzg0j0fjkzSWNFTqvDL1/8/bJ5q66hs7ro9Nzc3OBQIAsGn53cnTC2DsNo8d7jbzzLS4u0tF/ormr3qn3TcVA9H/88cfR7O2Tx2ufPF6PRT7ReAynBj5UjP7ztxK71E0ITeXx4H0hQYgvnD/TUcgzeFgg+sHkzrb1kJ7+wMh4XUPn2+90+/1+v9//9juX6xo6B0bG5+bm/H7/2TZjfyZnzl25fecueRe5fedug+6/su9///s35x6qLW2+2BcKhebm5m7eunPv3pzf7ydJvbS0dH10yu/3Ly0tcQP5j/8oRn9D65W7H354srlbZyNM9HdoeLAc+lh6W1tbuzY2Oz5961sNXb9yrv9XWkUDjrOdp4fmmpeeyts5fyshxOfPn7lU19DhODMwGxfEH/XzhfLZitn7YZGN/vIfCUBZTEy/Nzc31+O9Rn481ZKJ/tPnusk9V7wjc3Nzk9PvG235RLP79u27t27fOdncpX+rzz///PbCI40VrniviaNS8tvs+zePNbryfjak0e+ua+g4d8nz4b17S0tL9c5OnY0Yjv6HDx/1j0wMXJscuDb54dxiXUPH6OQH47O3v/0O983zA99sHfhm68CbrYOOBpee6K9r6HC452NCYtZdoixG9AMcLk0XepeXl2/euiPec7zR1dt/vbf/Ogk+4uatO8vLy00XerVbe/To0XFqq7qGjrff6Xr7HUnuH290PXqkleybm1sf3FvWWOF4o/vuhx+SgPb7/cFg8P79++KPlz0jhTwhTPQ723oePnw4Nzd37969cDi8Ir15h24oNiKJfseZDg0k+h8sh8R7PENjjz76aG1tbX19/a2WnjfPD4rRbz/jOjU017z0VN5OJnxPXyI/2l3zUSEx67pkPz31QBAeXJ16IAiCsOI7fYmsTA8NiY34QgL9o7iauKHi/bNxQbG1Unr7ncs3Jm+9K3Nj8tbJd7oVNzly5Mjpcz1lOVqAshu6Nn7//n1379V6p+t4o7uuoZNeWtfQebzRXe90ubnh+/fvX70+od0aGXi5r3lbWlqam5vTaOTTT5Ozd4KKi445XfVnXZ1XhsRev29o1HGmo7XDK/b6Z967ebzRfbzRTT8EWv1Zl8ber1DRTxpp+Y7n3r17S0tLb53t1NiQlk/0+66Ozbx3a+a9W+/fvOM407G+vr6+tvZWS8+bVK/fQPRfXSG5TKKfzm5faP/HzNJsXtPRTzd4/laCftugN5+9NSDfe1nM3Jzb2tpKUbetra2Zm6ovNUQ/mNnM7Aeks7y4uLi4uPid7gF66Xe6B8n9ZEh99v1b2q21fKdPJ41GorHvTt26r7jo3r174sGQm7iI679O7pmfn19cXPzoo4/I/fVnXR/cvH3//n3yQBYWFs60XtHYuzz6HWc6yFj/iaYunc9qPtF/quVyc3tfc3vfOxf7jjW6SfTXtfS+cX7wzdbBN1sH3zyvN/pJoEdvDTD/F398cHU/o8U3CQcV/fbTUw+ExKzrErOVfHP53svo/Tt+nudJ7vM8/8Edv/YvCdEPplXs6PfopNHI4yeR8feV/2aZ6L937564SC36iVu375CH2d41oLFrx5mOK95r9+7de3dsOhAIiNHvONNxoqnrYHv9jjMdb53tJE40da2vr6+vr59o6rafcYkcZzo0op+e4aOW9XTQUytkUn4/+q+u7MpuD65ekm8u7r0Sot9xpuPRx2ubm5ubm5vLj8I5f0mIfjCtq9cm7t+/7+q5Wn9WdcDnmNPt6r0aCASuXtM14JPzpj3g8/HK43enlVc43ug+5nS5eq7uD/hcVRjwOdHUdbzJTW/Y0HolGAx29gzlfEKueK/dvnPXcabjo48+oqPfkHyi/2LXQN/Ajb6BG96hUdLrX1tbPe26fmpo/tTQnMj5/id6BnxEeUe/YsRXfvQfa3SvPf5kZe3xsVy/PEQ/mFnTBe7Bgwcf3Lot3nPM6er1Xe/1XT/m3B8Tv3nrzoMHD5oucNqtPXz4kN7KcabjZHPXyWbJOMkxp/vhw4cajQRD4eHxOxorHHO6797d/5r3wYMH9Ne8VzzXFLdytvUwb2yKyhb9747PLCwsLCwsBIPBt8661tfX11ZXnAO3m+9vNy89pTXNbcrb0Rv9rvmongEf2WrU5vsDQTn3XhaN7X1n23r1/JIQ/WBmk9Pvk8md5EdxXv+plszMiMuezOROoy2faOq6dfvurdt39I+SO850zC8uD9y4qbHCZU+OyZ36R2bkDiL6L2mgBnwk95MBn+ONLu3NRdnwvcjcbz89+UAQHlzdv98XEgQh7Dt9UVwavdW/vyg0qbxatnHJ/a75B7f6HWcu2a+GxTsPiyNHjpw+d6XshwFQLg2tlzOndA2POc5cOtnszpzS1dzlOHOp/+ro3NzcwsJCQ+tlQ82ePte9f0rX7btndG9++959z/Cs2tKm9t7sKV23mVO63h2bJqd09fqu5f1sXPGO3L5z13Hm0kcffaQ/eBmGoz8cDkepWyQS+fjjj9fX1080uXXuUn/0k5WpbwX6xfvp6Cc/ZidxSmJ9//7sHu2n+8kUT3rzCofoBzh3qe/O3bvkQg4Dw6MkrwdGxqgLOfQZbfPq9YnRieyFHCZmrl6f0Lnh7M35nsEpjRU6Lg98cPM2ScV3x6bn5ubu379PFo28Ozk6MVPIU3HFO3Ln7t2z5688fPiwONFvP31Jg/xsXvG2vr5+vNGtvXlxeUOCEJos5R7L6MiRI6darpT9MADKq97ZSS7fNj8/L06VIZdvq3d25t3s2OTs2MSssU1m7nR5x7XXqWvoIP8ZujYxNzcXDAbJj2S8pZDnodd3Xbx827FGV36NGIh+z9B4/8ikosFrU2815P/UG2XrnI8KQvDqxZLtsbwQ/QCit5u7vtM9cMVz7Yrn2ne6B069011gg5PT709Ov2dok76hiQtdwzpXbnP5enzXe33Xy/7U0QxEfyUgob+7uxu92V/2gykZRD9ARWnt7G84z5X9MApxyKLfnBD9ABXl9LkrJ5oK/bRRXoj+QwDRDwDFheg/BBD9AFBcTPR/ByrQkSNHTrVcLvthAEDVQPQfAoh+ACguSfT/z29YAACg6kmi/1T/JgAAVD1EPwCA6SD6AQBMB9EPAGA6iH4AANMpRfTPzNz7YPYu473ZDxsGUqf6+bI/BQAAZlOK6P9BoOf5spuRXnaHP7xR9scPAJWp48G2IHw+5EPv8ECULfqfL7tfPOp+PHdNfUOFX/nbdz4XK7cwLwu1RYovoLd9n4UEIf7ge+I6TGF34clnZf/dnOrffHvsaVzIVptJPe3w8eLBS442u0h76dCT/ftDd3jVHWUfu/xpkT/tpUQfj/i7y2NbQdi+Oab1emA2VHv9HNyLRON4ykj7WSr6X5BG9Bfr+dFup7rTppzR/3zZnQ51vVrnXj1mpUNulZfC/h/t22NP41RIaS7K/ctg4oCkJJOPpSePfvo1Jw937aV09DOvNkkyakZ/GV+s+UU/eQ5l747sS6LjwTa9juT+kke/xvGUl+azVOS/IK3oH3saL9Jbo85HVH1poxr9dx7wobWUmtsPDBylRvSr+TzYw/6y1d+ftd+68/tlnMrGaHnTPxNb2eMXe/T0I3rb91mIvCtoLj2VfYUJqW26zVP9m2/7vnczJQjCdjwlyKNfsib11lKuPil5FDr3rj+jyVMt/3WXK/rVjqe8NJ+lIv8FlSb6FR+RGdJGNfrfGdlMqdySyVTzsIF9kOjfCXa/N3v3g/fvaHhv9u5OsFsj+hX/2LT/DvP/ZZBApHuLSqMip/o3h54IgvD5ELU0dIcnmyv2kZkxGY3fNxv92V0oPw+aS0+J0f/kc7J3cb/ZfvHnoVzRL9kL/ZagPDCVeQaE1NMO6ZNzivoIwvS5mCdH/rszFP2ZX41K35n5FQ89EeQdQD3RTx8zfWBaL5jU0447n4sPX7EFxePReP0ovGLJPU8+U3wqxPYNvYDVn6X8/4IUHz7zzIu/d/rDK72+xp9V5pi1fx2yF2F1p43WgM/9j1M8zzO5z/P8/bCxtyYS/fI0N7Sy+NjkQamxqJBfBnM/3dFgfv3Z3jT5G97/HZDjYXoo5O1d7Uf2oan0+uWJmXPp/nE++Uz8j/gwd3d34w8+u6kj+k9RqU0eoMLYpfD5kPSpYJaGpH+9+xmqNGAl/zPWeMbkT4hG35z5e3t77Glc9jLIGf3MXjoePKXfp9VeMEJqOy798kalBeXuoeLrRzv6mX4l/Sdg7AWs+izl+Rek9vDpZ54ZEpH3+rX/rDIPUNqF2n/VyR6RGdJGK/obBre2traY6N/c3Dw9kONPjlGU6BefAu3UU+yPKKbJLtu/UPhlvH3nc3K/wh9VdtGpzPswNfZHenP7XcL9bek/RZFGz5SJ/lPS8fpd2TeWepYKTz7LHCEV0IKwfXPsezqjX3xKQ3f2u6uZV172tRh/8D3561LcMLtryQiVfMBKcQjLQPQbHBZQ/O3kjn7lEQMjLxiVURT58Wi/fnJEvzSA8nsBaz5Lef4F5RxqIy8begU24HL9WTEPkPm1Km5e9WmT42ve0Tme7vjzPD86Z3g0ylD0x+f7eX9ffGFAbYX9gQJZb05xUSHvw8yrU/5ZXhy7kI9+KHze9Cm0w/xe2QOQRf8pWb4zOaixdD/6qbymvgXNK/pV+unCk88kAz7SAStmtkMmubJN0Q+H3hf9KA4i+rO/C8nj1dvrVxoW0/uCUWpB8Xi0Xz/a0U+/DjP/p+/X9wLWfJby/AtSe/iZZ15pEFzpg4jWn5XCkI70j07+iJi/pupLmxzR3zC4mUzSo/zJMwa7/Kd0RP/FO0L/J79FXN34jauR37i68Rv9n/yWRpv0px7tRQV/BPt8KPskygMuv18G+zpW/4ZHMfpPUZ3rzItP5eMqs5Qe5xH/nx3t2e+k6xzwIc2qdXO0o198sIrRL+nfye40OuBjLPplm+h5/VDff0g+sGu9YJgkkrWgsSO110/O6KfeJD4LUe0Yjn7lZyn/vyDFh7//GVHe71aKfo0/K8Xo31UZ/pKryrTJPbmza2qTdPx5nu+aNNzlP6Uj+i99uDsUeymn3azaM8gsKvSLF/UP9ZLnuoS9fvkrT+2dg1lKR392zGc7nhnt4XVG//5fKTXZVLkXU4zoz66w376R6GejUA9mtp/Ka0MhKbK/LK1BDOb1oPLrlg1NSJ/AvHv94mEznVyj0a/7WdL7F6T48DN/udJxeXrNIvb65Y9I4VVRXWmja17/40gqlUqtR1KnB7Y0fnNqDij6tRKTWpT3L0PyrYvSqFk+v4zCxvrpmZritmIyai89xUS/7DthPdEvprO8eysZbXwibVBn9GuM9VOPy9jkTs1v0ZU3kfaI1bpOyu922T+23C8YlZRR+LBPHY++QW32pciOSKSe3nwiuTOP6GeepQL/ghQf/n4vWDqcLX+W8hjrz/mI5C+kKksbXdHfObG5vb3dMa73j4dBov8HAfUBnw+f5Yx+5jQc6bcZqovy+2VQ33yynxAlHQ162FT3X47id+6qLzj1GT70TZ7m8qWnpNF/ivpMQM8PkUe/4k0+5Uayx1Q+0S8+G3p2pz/NM7tgpxIqfy8q/32dkgWHfH5ISOm70xwvGOk0PsUW8nj9yCf8KIXmdjwle30ajH7mzkL+gtQevuSbWPbLTHbulvbTwgzLqP3RUaFZ/Wmj92xe7/sGPjIzSPSnQ+492Vm7rx5zX214rgc+1dPrZ6JN3jNSXFTEU6slZ2+z0WBkqJSesavSlaDXZKYiqMWi9tJTsuhnPl/rjH7FZ4ZZk5ntoz/65b9KxcQxFP0KbTJTO5SHktnRALVn9RT15qf4B6z8glH6fKb2emCOR/v1Qx9q6I7KHCH5BH/j0U8fVeF/QfKHw/zlZl4qshPX5d+4yJ8W+kQKxd+g/BFVfdqU+UIO5Eo+1wKJPAZ8zCDnWL8J5RH9+e2lQq7jVNzjIdFfrGev0p4lrePU95XPYXlEhStF9M/O3tM4g/fme7f7Fj5D9CtSPEvWtOju0kFHv8bYblkU63gUT8gq+1EdNP3Rf1geUeEqolTLd+4KAxu/JVf2Z6fsEP20UkZ/tTJPr5Z91Kb/82FURPQDwEFjxspNBdEvh+gHADAdRD8AgOkg+gEATEcS/ZZaOwAAVD1EPwCA6SD6AQBMB9EPAGA6iH4AANM5ZNF/o8c50dfEGOMaa+3lPzYAgMPikEX/08UO+QXg0svu0OT5/BqssbZORQUhOtNstRldCgBwSFVD9JPLf4Zn2vJoENEPACZUougPh1canE2Ft6MW/c+X3V+Eul6tK9QDSIfcee8O0Q8AValE0R+LxZLJ5EYkYrXXFdKORvSr+cFSZ967Q/QDQFUqXfSTwu5bW1vzC35H/fH82iHRvxNwjXONkx4t41zjTsCVM/rl4V7jCYpXBg54ZEtbZiLiVZSDXrqp5unoflUd6SIAgIpS0ugnN57nk8mkr3/AajPcDol+nR15PSsz0U9yPzLdSpZyQWF3d3d/actMRBDI0hqrNyAIYsTXeILiVvRqAAAVqAzRL74BJBKJ7is9hto50OjP/J/qsGfynV4q/XwgCNGpFnYsCMNEAFDhyhb95La9vT0xNaW/nYONfllvPcfSlpmIIAQ8NmmD3oAg+awAAFBpytzr7+nrM9ROCaKfjnL50l3ZjawvfkMgCEHOauOC6PUDQOUqz1h/KpXy9Q/aHIZn+5Q9+pk+fnY1b0D6gQDRDwCVrAwzfBYKnuFzYGP9km9uLdkhHbVvApjVxHcF+huCsv+CAQDkShT98Xg8lUpFItG8Q58gaf50sUPXyv5OxehX+Go3G9NkgmZmDMfaOhWVzvCRzv+paZmJKL1nMPOCAAAqTYmif2V19WxTc+HtkOhPh9x7srN2GXuPuXRI+ZQujei3UNPzBSE61aI1619tvn9kuhUDPgBQyarkGj4HdDYvAEBVOmTRP9rr1D6JV26011n2wwYAqCiHLPoBAKBwiH4AANNB9AMAmA6iHwDAdBD9AACmg+gHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTOWTRf6PHOdHXxBjjGmvt5T82AIDD4pBFv+Ll29LL7tDk+bIfGwDAYVEN0f982f3iUXd4pq3shwcAcChUSfQ/X3Z/Eep6ta5w4f50yF32wwYAqCiliP6V1dV4PB5TusXj8XB4RX9TuF4/AEDhShH9Z5uaU+q3BmeT/qZI9O8EXONcjsv0j3ONOwGXWvSTkopiUS1yZ6a0licoKcqYLdOImosAUDVKNOCzsbHB8zwT+jzPRyIRQ+0UpSw7U0q3eXqGs9osmeiPRmRlF8U1a1pmpjyIfgA49EoU/Y7641tbW0z0b25uWu11htopTvS3zEQEISALcS4oCEJ0qiWb+7KyvQAA1aF0X/MuLPjpjj/P8/MLfqONFLPXLwQ5aaZzQcmdZDVxOAgAoGqULvod9cfpLn8ymXS8VW+0kaJEvyXb8d/d3aW7+Zmxfuloj/zDAQDAYVfSyZ2+gUHS8ed53ts/kEcLxYp+IjOUn01/xehHrx8Aqk9Jo99qsycSiVQqlUgkbA5jo/xEcaPfIs13Nvox1g8AVarUp3T19PVtb29f7uHy25yk+dPFDl0r+zvVvuYNZPvyNZ6gWq+fLN3d3cUMHwCoMmU4m3diairvbUn0p0PuPdlZu4y9x1w6pHpKFxfMTtVXH+snxG8FMK8fAKpG9VzIAWfzAgDodMiif7TXqX0Sr9xor7Pshw0AUFEOWfQDAEDhEP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iHwDAdBD9AACmY97ov9HjnOhrYoxxjbX28h8bAMCBMm/0K14JLr3sDk2eL/3BoDYAAJQSop/14lF3eKatxAeD6AeAUkL0K/gi1PVqXaEGQDrkLvthAwAU7pBF/8rqajwejynd4vF4OLyivylc+h8ATOuQRf/ZpuaU+q3B2aS/KRL9OwHXOJfjiv/jXONOwKVR8EsQghxVzCvgsZEBnExtr2x9R6J5Orqbve2XfpQO+GTatHoDgnIjAACFOGTRb6m1b2xs8DzPhD7P85FIxFA7xarwTmo9ktSmEz/gsVmkZd8ttfYaT3D//9QiefTv7u4KQpCz2izZEsHihgAABTp80e+oP761tcVE/+bmptVeZ6idIkY/XeCXreSu/v0tvUip10+1iS+BAaCoDl/0W2rtCwt+uuPP8/z8gt9oI0WN/kz33JLty5Mu//4K8mrv2cEc9ejfb1OtEQCA/BzK6HfUH6e7/Mlk0vFWvdFGyhL95DOBOJgjLkL0A0ApHcrot9TafQODpOPP87y3fyCPFkof/aSnTw/ZI/oBoCwOa/RbbfZEIpFKpRKJhM1hbJSfKEP0SxeRdwJEPwCU3mGNfkutvaevb3t7+3IPl9/mJM2fLnboWtnfWaxev/gNsHxqEKIfAErjEEe/pdY+MTWV97Yk+tMh957srF3G3mMuHVI9pcvYWD81/T8y3YoBHwAoi8Md/YXA2bwAYFrmjf7RXqf2Sbxyo73Osh82AEDhzBv9AACmhegHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfQDAJgOoh8AwHQQ/QAApoPoBwAwHUR/EbwzMH1u+ANGy9CsNa+rSQMAHDREfxH41tNDsZes+I9ct1f1N4ICvABQMoj+IlCO/tjL4cRe11xEZyOIfgAoGUR/EahF/1Ds5dX4b49+//dGP2MNxX9U9sMGANMyb/SvrK7G4/GY0i0ej4fDK/qb0oh+Nf2Pvyj7MwAApmXe6D/b1JxSvzU4m/Q3RaJ/YOM3zl19r3X4Aw3nrr438MmvK0a/fMCneTq6m73RZR0lRcGkWyluAgDAMG/0W2rtGxsbPM8zoc/zfCSid4CeINGvsyOvtjIT4jWeYGS6NbOoZSYiCOTHGk9QEKJTLTbFRYqbAAAwTB39jvrjW1tbTPRvbm5a7cYmZR5E9KstIrXd9yPeE2Sq+OZsDQDA1NFvqbUvLPjpjj/P8/MLfqONHGj0k6zf3d2VFG2n/y8b2JFvAgBAM3v0O+qP013+ZDLpeKveaCMHNOCTGbIXgpzVRse9OOZDIj7gyQ7+qG8CAEAze/Rbau2+gUHS8ed53ts/kE8LxY5+ZlTHIu3pi4lPj/ZobwIAQEP02602eyKRSKVSiUTCltelF4of/S0zEbo7b/UGBEmOk3EeerQn5yYAACJEv91Sa+/p69ve3r7cw+W3OUlz33pa18prenv99IROZuCejPlEorKsV98EAECE6M+YmJrKe9vMKV3xH8nP2pW7Gv+RrrH+lpmIIJCx+8h0KzN6kwl66dwe7U0AAESI/iIoytm8mejHeVgAcPAQ/UXQMjijfRKvXMvgDNOI/HtaAIADguivFMxpugAABwfRX2ZknGd3dxe5DwAlg+gHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfQDAJgOoh8AwHQQ/QAApoPoryw3epwTfU2MMa6x1lH+YwOAqoHoryxPFzueL7sZ6WX3w8nzZT+2ioLiwwCFQPRXFsXof77sfvGoe2X2QtkPr3Ig+gEKgeivLGrR/3zZnQ51vVrnXj1mpUPush926SH6AQqB6C+CldXVeDweU7rF4/FweEV/UxrRr+YHS51lfwZKD9EPUAhEfxGcbWpOqd8anE36myLRvxNwjXONkx4t41zjTsClEf3iNUHZ4o5WbyBbzGt3d1cs8WghJX+FIEdV+wp4bJJ2VCrJ0G2KJQcU78x7F5Zae40nSB02G/10kTK6EaN71Hh+AKoGor84NjY2eJ5nQp/n+UgkYqgdEv1imlvrjtXWn7TWHdOzMo3kIF20fcpjs2TTcz+dpT/SFX3pcCTxR9qUF5NhygI3T89wsvLC5M68d6F9qMyGGmWKc+5R+/kBqBqI/uJw1B/f2tpion9zc9NqrzPUDp3mJ9pcvrVnI4kvfWvPT7QpDOirRb/aYIhiDchMpziby3TZABJ8++8fas22zEQEgekdK96Z/y5kR57JdyrQ5WXryV707zHn8wNQNRD9RbOw4Kc7/jzPzy/4jTZCp7knvCPW8vWGBe2VaWq1HhX71LKU3I85eXwrlnpXrhGvdGf+u5AduSSy5UupZvXvMefzA1A1EP1F46g/Tnf5k8mk4616o43QaX4t9ZUY/df5r7VXpqn1uJW7556gOPqRXy6LazK1xhTvLCT66dXk0b8ru+UX/cMMd3kAACAASURBVBrPD0DVQPQXk29gkHT8eZ739g/k0QKd5u2TS8Of7g3FXg4n9i5OLmmvTFMdlD+YXj/TPtNHZu48uOhXS2f0+gHkEP3FZLXZE4lEKpVKJBI2h7FRfoJO86M2e/vYgm/1Wfu4/6gtx8q0wsb6849+i9q7C3VnQWNK9Fg/eUdRH6NXfIDae8RYP5gHor/Ievr6tre3L/dw+W1O0vzpYoeulf2dqjN8mC8zNWf4iDloOCWzneUA1SDpIyvemfcuLLX25uno/rQcsZa9OMOHeVwtM5HsIkNvNtrPD0DVQPQX38TUVN7bkuhPh9x7srN2GXuPuXRI65QuyTx3tfnv0qGMvHOZTKCUD+sr3pnfLizZ9M82qDCrRxzlp+83+jlD4/kBqBqI/sqCs3kBoAQQ/ZVltNepfRKv3Givs+yHDQCHC6IfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iHwDAdBD9AACmg+ivWjd6nBN9TYwxrrHWUf5jA4DyQvRXLcUrwaWX3Q8nz5f92ACgvBD9VUvtIqAvHnWvzF4o++EBQBkh+quWxvWf06GuV+sKNQDSIXfZDxsASgDRX1lWVlfj8XhM6RaPx8PhFf1N4dL/AKAG0V9ZzjY1p9RvDc4m/U2R6N8JuMa5HFf8H+cadwIurYJf2YKIbMEvqzeQLWjFFDLMlL4idSLF8od0ASyVUroAUAKI/oqzsbHB8zwT+jzPRyIRQ+0wRdutdcdq609a647pWZmWKYCur8yv+CMXFIRoNCIrfEhWkJdZB4BSQvRXHEf98a2tLSb6Nzc3rfY6Q+3QaX6izeVbezaS+NK39vxEm8KAvlr0ywvkSu6XZjddBZcLCnRhW3k7dK12ACgxRH8lWljw0x1/nufnF/xGG6HT3BPeGYq9JLxhQXtlGumei335/fupLvz+nVSaKxZDp9eXl0cHgJJB9FciR/1xusufTCYdb9UbbYRO82upr8Tov85/rb0yTS2gFe8nYz7kzsxYvzT6d2U3RD9AWSD6K5RvYJB0/Hme9/YP5NECnebtk0vDn+4NxV4OJ/YuTi5pr0xT7N2r3c/2+mXRj6AHqBCI/gpltdkTiUQqlUokEjaHsVF+gk7zozZ7+9iCb/VZ+7j/qC3HyrSCxvolc4EU1geAckH0V66evr7t7e3LPVx+m5M0f7rYoWtlf6fqDB8yQVPfDB+xX89Ev8L6LTMR2TsKAJQGor+iTUxN5b0tif50yL0nO2uXsfeYS4e0TumSzMdXGcFnpuvIo9+STX95OwBQYoj+qoWzeQFADaK/ao32OrVP4pUb7XWW/bABoAQQ/QAApoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfAMB0EP0AAKaD6AcAMB1EP+R2o8c50dfEGOMaax3lPzYAyAOiH3JTvBJcetn9cPJ8Ic2qFQMAgIOG6Ifc1C4C+uJR98rshbybZaJfrQ4wABQdor+ahcMrDc6mwtvRuP5zOtT1al2hBkA65M7ZLBv9KsUgAaDoEP3VLBaLJZPJjUjEas+nxKPogC79j+gHKBdEfzWLxWKksPvW1tb8gt9Rfzy/dkj07wRc41yOK/6Pc407AZdWwS+qUFfAsx/9XFDYpW77dRyt3oAgUJvgWwGAIkD0VzMS/eTG83wymfT1D1iVyrJrY4q2W+uO1daftNYd07MyjSnPS+Jeo9evWP4XHwsACofor2Z09ItvAIlEovtKj6F26DQ/0ebyrT0bSXzpW3t+ok1hQF8t+jPDO9ny7pZsj14t+uXrW0jJXyHIYUYQQGEQ/dVMHv3ktr29bajgO53mnvDOUOwl4Q0L2ivTFDr1mmP9ikP/NZ4gU/8dAPKA6K9mar3+nr4+Q+3QaX4t9ZUY/df5r7VXppEopwfr9UQ/M7hPxnww4g9QIER/NWPG+lOplK9/0OYwPNuHTvP2yaXhT/eGYi+HE3sXJ5e0V6blF/3o9QMcBER/NaNn+CwUPMOHpPlRm719bMG3+qx93H9U6Rtj9bF+b0CQjvW3zEQw1g9QDoj+ahaPx1OpVCQSzTv0CZLmTxc7dK3s71Sb4dM8HRWHa0iyS2b4yN8blGb4YLQHoHCI/mq2srp6tqm58HZI9KdD7j3ZWbuMvcdcOqR1ShdJ/93dXUGITrWw1/ARZ/0zwz7UJsh9gCJA9ENuB3Q2LwCUC6IfchvtdWqfxCs32uss+2EDgBpEPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iHwDAdBD9AACmg+gHADAdRD8AgOkg+gEATAfRD7nd6HFO9DUxxrjGWkf5jw0A8oDoh9wUL9+WXnY/nDx/cDtlCrlwQck1PgGgEIh+yE3typ0vHnWvzF4o1l7I9frZUi2IfoADgOivZuHwSoOzqfB2NC7anA51vVpXuHB/OuQ2uhfFiowiRD9AESH6q1ksFksmkxuRiNVuuB4vrTTX60f0A5QMor+a0bV55wuuzbsTcI1zOS7TP8417gRcKrV5ZTW5qOq7XDBTikus0oUBH4CDg+ivZiT6yY3n+WQy6esfsCrVUtfGVFq31h2rrT9prTumZ2WRdvRb1MqyI/oBDgCiv5rR0S++ASQSie4rPYbaodP8RJvLt/ZsJPGlb+35iTaFAX1EP0DlQ/RXM3n0k9v29vbE1JT+dug094R3hmIvCW9Y0F6ZhugHqByI/mqm1uvv6esz1A6d5tdSX4nRf53/WntlGqIfoHIg+qsZM9afSqV8/YM2h+HZPnSat08uDX+6NxR7OZzYuzi5pL0yDdEPUDkQ/dWMnuGzUPAMH5LmR2329rEF3+qz9nH/UaVvjNWi30LiWwhyYvS3zEQERD9AGSD6q1k8Hk+lUpFINO/QJ0iaP13s0LWyv1Mt+ms8QTJx05JN9t3d3f3ot3oD9DsBoh/gwCD6q9nK6urZpubC2yHRnw6592Rn7TL2HnPpkNYpXc3TUXHyfsAjGfCxZN8bMK8f4KAh+iG30pzNCwAlg+iH3EZ7ndon8cqN9jrLftgAoAbRDwBgOoh+AADTQfQDAJgOoh8AwHQQ/QAApoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqIfgAA00H0V60bPc6JvibGGNdY6yj/sQFAeSH6q5biNdfSy+6Hk+dLfCS46CZApUH0Vy21y22+eNS9MnuhlEeC6AeoNIj+qqVxpeV0qOvVusLV9tMh90EcCaIfoNIg+ivLyupqPB6PKd3i8Xg4vKK/qcq5yD6iH6DSIPory9mm5pT6rcHZpL8pEv07Adc4l+Pa+uNc407ApRj9bDVdqsKiRaWuOimzRdfeykS/ylIAKD1Ef8XZ2NjgeZ4JfZ7nI5GIoXaY8ujWumO19Setdcf0rCyq8QQFITrVkol+Ul6RqaYb8Ngs0qLqTJVdLijs7u6KbyFMNXYAKD1Ef8Vx1B/f2tpion9zc9NqrzPUDp3mJ9pcvrVnI4kvfWvPT7QpDOirRr/VG9gP9NapqBCJRvdD3BMk/2fq6Fqk7xlcUKDfPyy19ubpKP1hAgBKDNFfiRYW/HTHn+f5+QW/0UboNPeEd4ZiLwlvWNBemUYP6dRYvQEhOtVC/rVZSIJHZ5qtNrrLn9mwZSaS/UAgH+tnPkwAQIkh+iuRo/443eVPJpOOt+qNNkKn+bXUV2L0X+e/1l6ZIfbQazxBITrTTPr+06012f9YpKP89E0j+sWlAFB6iP4K5RsYJB1/nue9/QN5tECnefvk0vCne0Oxl8OJvYuTS9orM2paZiJCdKrFxgUzQZ/t7O93/+k+vhx6/QCVBtFfoaw2eyKRSKVSiUTC5jA2yk/QaX7UZm8fW/CtPmsf9x+15ViZke3de6eidNAHucyHAJtFNtWHIR/rx3RPgPJC9Feunr6+7e3tyz1cfpuTNH+62KFrZX+nxrz+5umoEI1GxG93yXe/0Sid9ey8z5aZSDbcMzN8xPcJjPYAlBuiv6JNTE3lvS2J/nTIvSc7a5ex95hLh7RO6SJhzUzVl8c3WS0zc5/q1Gf6+NRS5D5AeSH6q1blnM0LAJUG0V+1Rnud2ifxyo32Ost+2ABQAoh+AADTQfQDAJgOoh8AwHQQ/QAApoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfcrvR45zoa2KMcY21jvIfGwDkAdEPuSleCS697H44eb7sx1Y4ungACgmASSD6ITe1i4C+eNS9MnuhvMdGF47PD6IfTAjRX83C4ZUGZ1Ph7Whc/zkd6nq1rlADIB1yl+YxyivCG4XoBxNC9FezWCyWTCY3IhGrPZ8Sj6JKvvQ/oh8gD4j+ahaLxUhh962trfkFv6P+eH7tkOjfCbjGuRxX/B/nGncCLq2CX9bWqaggr+RFxm0Uy3hxQUEQghy1glgvjBQLE2/kDYAuCkZVD9ZsXyX6yfsKs1O1XQAcIoj+akain9x4nk8mk77+AatSWXZtTNF2a92x2vqT1rpjelamkSQVM7SmZWbKs1+td7+ur/THTGlfsTKwvAiwtNfPBQUhGo3QCZ6rfcXop1sm7xz0Ww6zC4DDBdFfzejoF98AEolE95UeQ+3QaX6izeVbezaS+NK39vxEm8KAvlr0k/6+vI+cuZ/qU1v2e/rZOBaiUy02xXaUo1++vnb7suiXH22NJyg2y+wC4NBB9FczefST2/b2tqGC73Sae8I7Q7GXhDcsaK9MU5uKozhYL8vZTEwTan3z/aXU+rral0e/bCtyDxkpkh8SwOGC6K9mar3+nr4+Q+3QaX4t9ZUY/df5r7VXptHRmfN+MiajlrO5o182Xp+jfZXo35Xd5JsAHEaI/mrGjPWnUilf/6DNYXi2D53m7ZNLw5/uDcVeDif2Lk4uaa9MU5uKcyC9fln059frl79RKe4C4NBB9FczeobPQsEzfEiaH7XZ28cWfKvP2sf9R5W+MT6Ysf4Cor+QsX7pVmq7ADh0EP3VLB6Pp1KpSCSad+gTJM2fLnboWtnfqTrDh8yG1DfDR+xx54h+6dwbi1Iu525fcYaPfCoRpv9DtUD0V7OV1dWzTc2Ft0OiPx1y78nO2mXsPebSIa1TuiQz5dVm0Esnz2hHvyWb0ey8fuazhXb7avP6sy0zR4voh8MO0Q+5VfLZvACQB0Q/5Dba69Q+iVdutNdZ9sMGADWIfgAA00H0AwCYDqIfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iH3K70eOc6GtijHGNtY7yHxsA5AHRD7kpXr4tvex+OHm+kGbVruAPAAcN0Q+5qV2588Wj7pXZC3k3i+gHKBdEfzULh1canE2Ft6Nx0eZ0qOvVusKF+9Mhd85mEf0A5YLor2axWCyZTG5EIla74Xq8tAO6Xj+iH6BcEP3VjK7NO19wbd6dgGucy3GZ/nGucSfg0qrSRdW9CnjY6G+eju5XxZLWxSWFGKlt8W4BkD9EfzUj0U9uPM8nk0lf/4BVqZa6NqbSurXuWG39SWvdMT0r05hqt1xQoAsf1niCkkK4VLF1xeK6dCl2ADAE0V/N6OgX3wASiUT3lR5D7dBpfqLN5Vt7NpL40rf2/ESbwoC+WvRnhneovnymorrSgA89FiTf0KJUsBcA9EP0VzN59JPb9vb2xNSU/nboNPeEd4ZiLwlvWNBemcZ05C3qY/3i2E4m+mUbWmrtNZ4gU10dAPRD9FcztV5/T1+foXboNL+W+kqM/uv819or00iC02P0TPSLXwOQ7jwXFOjoZwb3ycoY8QfID6K/mjFj/alUytc/aHMYnu1Dp3n75NLwp3tDsZfDib2Lk0vaK9O0o5/09OmuPRP96PUDFBGiv5rRM3wWCp7hQ9L8qM3ePrbgW33WPu4/qvSNsfpYvzcgSMf6W2YignLXnv4aAGP9AEWH6K9m8Xg8lUpFItG8Q58gaf50sUPXyv5OtRk+ZO4myXcS6PsD+tI3BvnkH/kMH4z2AOQN0V/NVlZXzzY1F94Oif50yL0nO2uXsfeYS4e0TukSZ+4LQnSqRTrW3zITyc7cj0y3igM+ZEN6KYZ6AAqE6IfcDuhsXgAoF0Q/5Dba69Q+iVdutNdZ9sMGADWIfgAA00H0AwCYDqIfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iH3K70eOc6GtijHGNtY7yHxsA5AHRD7kpXr4tvex+OHm+7McGAHlA9ENualfufPGoe2X2QtkPDwCMQvRDbhoXbU6Hul6tK1y4Px1yl/2wAUANoh9yw/X6AaoMoh9yI9G/E3CNczku0z/ONe4EXBrRLym2RZXbzdba9QZkS+nq7ZJ7qGqOghDkqJYDHptYAJLZUQ21C6bUO4B5IPohN6bSurXuWG39SWvdMT0r00juk8BVLsabrbROF+PVE/1Ujd/9xM8UAVbfafP0DAq7gzkh+iE3Os1PtLl8a89GEl/61p6faFMY0FeLfoUE9wTFKrtcUKAr7tIr6+v1U9t6gmofGsjbAOq5AyD6ITc6zT3hnaHYS8IbFrRXptG9b/oeEsTZAZ/9UBbLsusd8JEWcKfznWrKGxDYHQGYEKIfcqPT/FrqKzH6r/Nfa69Mo0f56Vspo58+DPqDAoDZIPohNzrN2yeXhj/dG4q9HE7sXZxc0l6Zpj3YUrLop9dB+oNpIfohNzrNj9rs7WMLvtVn7eP+o7YcK9OYvGZoRL98aSa4C4h+i9IAFIB5IPohN5LmTxc7dK3s71Sd4UPN27GQ8FUJdwszSiOb8EN/kWtgrL9lJiDunfqSGcBsEP2QG4n+dMi9Jztrl7H3mEuHtE7pIiGemW5P9cS1o99Sa2+ejlJfD+Q/4ENmgmKsH0wO0Q+54WxegCqD6IfcRnud2ifxyo32Ost+2ACgBtEPAGA6iH4AANNB9AMAmA6iHwDAdBD9AACmg+gHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfRDbjd6nBN9TYwxrrHWUf5jA4A8IPohN8XLt6WX3Q8nzxttav+Sy0Kw9+g5ugaL4lX1AeAgIPohN7Urd7541L0ye8FQU/QFlpnyW5IL9Fu9AdRRATgwiH7ITeOizelQ16t1hQv3p0NueTu5C3VJK+gi+gEOCKIfcivW9foR/QAVAtEPuZHo3wm4xrkcl+kf5xp3Ai7l2rxUfS5SXlFtwEcspEVukoKOgiBuLrac2dATZCp/AYAaRD/kxlRat9Ydq60/aa07pmdlGtPr1xrrl/X66XvINwGSAo3RaAShD6Aboh9yo9P8RJvLt/ZsJPGlb+35iTaFAf2DiH5mTYu0qDoXFFBoF8AQRD/kRqe5J7wzFHtJeMOC9sqM/KNf5UMAqb0uL+kOANoQ/ZAbnebXUl+J0X+d/1p7ZUaB0b8ru+1HP0Z7AIxA9ENudJq3Ty4Nf7o3FHs5nNi7OLmkvTKjwOgnQS+H6AcwCtEPudFpftRmbx9b8K0+ax/3H7XlWJlR6Fi/jlmhAKAHoh9yI2n+dLFD18r+ziJEv3QOjyU7N1TyOQBXgADIF6IfciPRnw6592Rn7TL2HnPpkN5TujSi30KdB7Af99SZAfSaiH4AoxD9kFuxzuYFgAqB6IfcRnud2ifxyo32Ost+2ACgBtEPAGA6iH4AANNB9AMAmA6iHwDAdBD9AACmg+gHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfRDbjd6nBN9TYwxrrHWUf5jA4A8IPohN8XLt6WX3Q8nz5f92Ah58V41uMwngAXRD3qoXbnzxaPuldkLZT88C6IfwCBEfzULh1canE2Ft6Nx0eZ0qOvVusKF+9MhdykfKaIfwBBEfzWLxWLJZHIjErHa6wppp/Kv14/oBzAE0V/NYrFYKpXieX5ra2t+we+oP55fOyT6dwKucS7HZfrHucadgEst+rmgIAhBrmUmIgik2FbAYyOpnam9Ja2+S8o0ipW5mLLsdNGugIeN/hpqL3SziH4AC6K/upHoJzee55PJpK9/wKpUS10bU2ndWnestv6kte6YnpVpXFAQayvSiU8ynS3FzhTj1fyRbplpiinzi+gHsCD6qxsd/eIbQCKR6L7SY6gdOs1PtLl8a89GEl/61p6faFMY0NeOfkGITrVIqu8qluplqvhSmwc5paWZfKe3lZb5FfeL6AewIPqrmzz6yW17e3tiakp/O3Sae8I7Q7GXhDcsaK/MELOb/Ej65vQwjpjLzCeAzPrZBJcvlbxtyJdSO0L0A1gQ/dVNrdff09dnqB06za+lvhKj/zr/tfbKDKPRrzi4H/AoLJVH/67shugHECH6qxkz1p9KpXz9gzaH4dk+dJq3Ty4Nf7o3FHs5nNi7OLmkvTKjuL1+7ehn3jbkuyj7bwegjBD91Yye4bNQ8AwfkuZHbfb2sQXf6rP2cf9RpW+MixP9Ocb6Jd/cik1pbCvfRdl/OwBlhOivZvF4PJVKRSLRvEOfIGn+dLFD18r+zsKj36IypUdcuXk6uj81KDtZSHXblplIdhGiH8CC6K9uK6urZ5uaC2+HRH865N6TnbXL2HvMpUOqp3QZin4LMzefmhpEkPTPLlKY1SOO8tP3I/oBLIh+0KPyz+YFAEMQ/ZDbaK9T+yReudFeZ9kPGwDUIPoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH7I7UaPc6KviTHGNdY6yn9sAJAHRD/kpnj5tvSy++Hk+bIfm0Vap6XsBwNwKCD6ITe1K3e+eNS9Mnuh7IeH6AcwCtFfzcLhlQZnU+HtaFy0OR3qerWucOH+dMhd9ocPAGoQ/dUsFoslk8mNSMRqN1yPl4br9QNUGUR/NaNr884XXJt3J+Aa53Jcpn+ca9wJuNSin9TUJZWz6JLrkmpcVE3dTEUtT5BU2roekBb5yo7zNB09x5boypZsZEp0qe0IwGwQ/dWMRD+58TyfTCZ9/QNWpVrq2phK69a6Y7X1J611x/SsLGJqqTdPz5AQJ3FM3gmYdbigIESjEariLl2mUdyQGevPlGjPNlLTMjPlybEjALNB9FczOvrFN4BEItF9pcdQO3San2hz+daejSS+9K09P9GmMKCvGv2ySrwWpW9o6XzngoIk663eQDa7s2sGOauNbkTtK1/tHQGYDaK/msmjn9y2t7cnpqb0t0OnuSe8MxR7SXjDgvbKtExHmxqxsUh74vQ95B2CKeNukRZV54KZbrs0+iVvDzp3BGA2iP5qptbr7+nrM9QOnebXUl+J0X+d/1p7ZYY41C52t+nBd/q2H/3S/rvYVScRT1aTRL9KoGvvCMBsEP3VjBnrT6VSvv5Bm8PwbB86zdsnl4Y/3RuKvRxO7F2cXNJeWVFmLJ4kuGbXWyH6s4kvjvZYlKJfrdePoAcgEP3VjJ7hs1DwDB+S5kdt9vaxBd/qs/Zx/1Glb4xzRr9F/g2tytet8ui3ZMd5xNEeCzvgoznWj+91AWrtFkR/dYvH46lUKhKJ5h36BEnzp4sdulb2d6p9zRuQfEObHfPxBOm5njUtMxF6NF8e4p6gIEQj0f0uPDvDh0wGlc/wUd8RgNkg+qvZyurq2abmwtsh0Z8OufdkZ+0y9h5z6ZDqKV1cMDunXjq1hoSyfBq+cvTLvi5WmL1Dz9+XzupR3BGA2SD6ITeczQtQZRD9kNtor1P7JF650V5n2Q8bANQg+gEATAfRDwBgOoh+AADTQfQDAJgOoh8AwHQQ/QAApoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqI/iK40eOc6GtijHGNNkf5jw0AQA7RXwSKVzdLL7sfTraV/dgAAOQQ/UWgdmHLF4+6V2culP3wAAAYiP4i0LimcTrU9Wpd4br26ZC77IcNAKZl3uhfWV2Nx+MxpVs8Hg+HV/Q3hcvZA8DhYt7oP9vUnFK/NTib9DdFon8n4BrnclzFfpxr3Am4NIpYCdGZZlJfUCw3SBecokrLkmJV5H66Cjl9/+7urloVQ4usXK3y3q2tU1GlclcGjwoAKop5o99Sa9/Y2OB5ngl9nucjkYihdvQUIhf9YLHz+bL7c9Xoj0ZkCUsyNFOYMOhl/m+ptTdPz3BWpfKz1I/6ol9h7wpFbg0eFQBUGlNHv6P++NbWFhP9m5ubVnudoXY0ov+o7J5Jb+t7vtYp73n5ylxQoIvWKoR1tpo5CV+xRy9Zn+qDZ9sMclabrujX3Ht+RwUAFcjU0W+ptS8s+OmOP8/z8wt+o41o9/r/XPhfX/9r6+v/PPb6/2t//W+P/++Pf/6vXvwvf/LkH/3sX32LWVOMafIj3bmm7wl4bPLS5IrrW+hc1hX9dK1zb0DWWh5HBQAVyOzR76g/Tnf5k8mk4616o41oR//vzP/TH29842f/vuOnPz7/F5/+6g+Hf+6PFn/ph8M/9wcL/4RZMzParjSeTt8CHsl3AGJXXfmjgCdINtE71i/du7wLb/SoAKACmT36LbV238Ag6fjzPO/tH8ijBe3o9779Pw2c/MfT/UfeGz0ydOoX+t/6+bGGX+h/6+ev2H6BWVNn+NIyw/HUeEtBvX6Vrxnke9R/VGX//QKAHKLfbrXZE4lEKpVKJBI2h7FRfkI7+v/sizd+9ru1r//f8dd/cf71H5740+/+47/67V/+Pz/9xZ/+zv/GrMmGr9LYvZyY0dpj/RaVASXV6Nce69d9VGX//QKAHKLfbqm19/T1bW9vX+7h8tucRP/TxQ7Fpb8zlx3w+UnbX3z6qz+8+nN/5P+lH179uT/0/xKzJhO+FvmMnZYZMgOnpmUmQE3j2R/zUZrhsz+/Uzbhh56aqbZ3hRk+Bo8KACoNoj9jYmoq721J9KdD7j3ZWbvf97se9/7SRu8vPn/y5q9/7xsx7/9w7+w/+Ljj5+81gkxgEQAAIABJREFU/IO5xv+WaUcevpZszspn1nPB7LR6acJKZtzLwrd5OkqNzmsN+Ci0Jp3VY+ioAKCiIPqLQONs3vjtjj/e/eafv7T81Z8M/8c/avoPe/W//8kv/MkXv/wHn/z3f/qb7AwfAIDSQPQXwWivU+303cEu57+e+6c/fvKNn/27Sz/9SdtfxP/5F4P/8A/nf+mLwX/4R/7/sexHDgDmhOg/cN/v/0f/cvIX//Q3a378+7/62zP/ZKPt7/+Lgf9uo+3vp7r+m7IfGwCYE6IfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iHwDAdBD9leVGj3Oir4kxxjXWOsp/bABQNRD9lUXxSnDpZffDSYVavqW3f6lnVGEEOMwQ/ZVF7SKgLx51r8xeKPvhMcVeAOCQQvQXRzi80uBsKrwdjes/p0Ndr9bZegCvHnPpkLs0j1FnfS4AqHyI/uKIxWLJZHIjErHa8ynxKNKIfjVqhSGLDtEPUDUQ/cURi8VIYfetra35Bb+j/nh+7ZDo3wm4xjnlAgCica5xJ+DSiH5xXJ4tsGX1BrKFt+jyjZb98Zz9FfarM1Jluej7AeAwQvQXB4l+cuN5PplM+voHrDbD7TAV3q11x2rrT1rrjulZmcaUXFctqyv9kZRXFEfz2ZXR6weoFoj+4qCjX3wDSCQS3Vd6DLVDp/mJNpdv7dlI4kvf2vMTbQoD+mrRn8loeaFdpeymv7nlggJdU5dpB9EPUDUQ/cUhj35y297eNlTwnU5zT3hnKPaS8IYF7ZVpZEhH7K3v398yE5HdX+MJinEvn8BD12pH9ANUDUR/caj1+nv6+gy1Q6f5tdRXYvRf57/WXplGIp4exNe4n4zqkDsR/QAmgegvDmasP5VK+foHbQ7Ds33oNG+fXBr+dG8o9nI4sXdxckl7ZZpi717tfvT6AUwI0V8c9AyfhYJn+JA0P2qzt48t+FaftY/7jyp9Y3wwY/2IfoDqh+gvjng8nkqlIpFo3qFPkDR/utiha2V/p+oMH09QMjVTc4aPOASE6AcwCUR/caysrp5tai68HRL96ZB7T3bWLmPvMZcOaZ3SRYZ3FOb10/dT83ksiH4A00D0V5ZKPpsXAKoGor+yjPY6tU/ilRvtdZb9sAHgcEH0AwCYDqIfAMB0EP0AAKaD6AcAMB1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9AMAmA6iHwDAdBD9leVGj3Oir4kxxjXWOsp/bABQNRD9lUXx8m3pZffDyfNlPzYAqBqI/sqiduXOF4+6V2YvlP3wAKA6IPqLIxxeaXA2Fd6OxkWb06GuV+sKF+5Ph9xlf/gAcLgg+osjFoslk8mNSMRqN1yPl4br9QNACSD6i4OuzTtfcG3enYBrnMtxmf5xrnEn4FKL/ky9LaogV8BjI2W2MvW5pMW2mqeju9kbvShTpYsu7KV7qYWpCCbfkFSRlNUQBoCDhugvDhL95MbzfDKZ9PUPWJVqqWtjKq1b647V1p+01h3TszKNCwpiqtKJT8rwkkSmK/Tu/1+6KNNOtmojWSqGuPZSuqkaqzcg3VCIRiMIfYAyQfQXBx394htAIpHovtJjqB06zU+0uXxrz0YSX/rWnp9oUxjQ145+uu4uW6WdVNlVSl5mEdOOpdbePB0Vs15jqXwXNZ6guLJ8QwAoJUR/ccijn9y2t7cnpqb0t0OnuSe8MxR7SXjDgvbKDKbAOumAky7//gqy6Cd9c3oQRr4am+AqS5lPD8wxyOu/A0ApIfqLQ63X39PXZ6gdOs2vpb4So/86/7X2ygxD0U8+E4hDN/QixXAXB440ltKj/PRNbUMAKCVEf3EwY/2pVMrXP2hzGJ7tQ6d5++TS8Kd7Q7GXw4m9i5NL2isz9Ec/6enT3fOc0a+/10/vkT08RD9A+SD6i4Oe4bNQ8AwfkuZHbfb2sQXf6rP2cf9RpW+MixP90kWZ72PVx/rZNwaVpZmxfumEH8VGAKD0EP3FEY/HU6lUJBLNO/QJkuZPFzt0rezvLFavn520Q4U7/SM92pNzKflRMndI/cMEAJQSor84VlZXzzY1F94Oif50yL0nO2uXsfeYS4dUT+kyNtZPjctHplsVBnyyXwbQyZ5zqYX6FoGZv4/oBygvRH9lqbSzebUzGgkOcEgh+ivLaK9T+yReudFe58EdD6IfoCoh+kELoh+gKiH6QQuiH6AqIfoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfAMB0EP0AAKaD6AcAMB1EPwCA6SD6i+BGj3Oir4kxxjXW2st/bAAAcoj+IlC85lp62R2aPF/iI8HptQCgB6K/CNQut/niUffK7IVSHgmiHwD0QPQXgcaVltOhrlfrClfbT4fcB3EkiH4A0MO80b+yuhqPx2NKt3g8Hg6v6G+Kif4vHna9eNRN/PBRdykvso/oBwA9zBv9Z5uaU+q3BmeT/qZI9O8EXONc42Rf45W2k+f6bpzrHX6bu9Xq5kZ7z056msi19ce5xp2ASzH62bpaTHVDaalbuq4WXf82E/0qSy219ubp6H7ZLN0b5mwWAA4X80a/pda+sbHB8zwT+jzPRyIRQ+1IyqPXHX/n1trnn48Ju/f+5Ov+XaG/rrVbdWVKjSdIlzgnGb2f9VZvIFthkeQ+eVdQrqybfQsha+434glKKuVmG8m5ofZSADh0TB39jvrjW1tbTPRvbm5a7XWG2qHT3DYYbI39u/Svh/7Lny3+5Hevvf7jS5+lbnzrjEtxZRoJ8Wygt05FhUg0up+2niD5f6b7T43q0O8ZXFCg3z8stfbm6Sj9YYLanaQd7Q31NwsAh4Kpo99Sa19Y8NMdf57n5xf8Rhuh0/zo4r95/mz6v/7J4L/50Qd/+W+9P/76yp+96P/lxhuKK9PoIZ0aqzcgRKdayL82C4na6Eyz1cb01i3SkuvysX7mw0R2X96AINCl0rU31NksABwWZo9+R/1xusufTCYdb9UbbUSS5ou/t5l67+/++OLrf9/509+7dPGj37wU2P3VS7PKK0uJXekaT1CIzjSTvv90a032PxbpKD9904h+cSn5vzh0Q6+svaH2UgA4dMwe/ZZau29gkHT8eZ739g/k0QKd5tYPdk+v/WEgFX39u5efRObPPv5D++KXlovXFFdm1LTMRIToVIuNC2aCPtvZ3+/+0318OY3uOT2gJF8ZvX4AU0H02602eyKRSKVSiUTC5jA2yk/Qaf5tp8t670ftyz/8yxdXXR99cfzBV9+aEdRWZmR7996pKB30QS7zIcBmqWWn+jDkg/JiajPvGZnvh9XH+tk3BvWlAHDoIPrtllp7T1/f9vb25R4uv81Jmj9d7CA//vPTHd+a3f3Ge1/+6p29Gm+QXdnfqTGvv3k6KkSjEfHbXdJVj0bprGfnfbbMRKiMpkfwJaM9inOBdGyYcykAHDqI/oyJqam8tyXRnw659x5ze4+579656B856796ZuHqmdDYO7/x8eW97Em8e4+5dEjrlC6SqsycennOiqP2dCJbxM44tZTekP6eIDLdqjDgo7Kh9lIAOHQQ/UWgcSEHNQd0Nm/etAdwMLwDUGUQ/UUw2uskJ+vqN9rrLPth0xD9AKaC6Ae7BdEPYDKIfrBbEP0AJoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfAMB0EP0AAKaD6K8sN3qcE31NjDGusdZe/mMDgKqB6K8sileCSy+7Q5Pny35sAFA1EP2VRe0ioC8edYdn2sp+eABQHRD9xREOrzQ4mwpvR+P6z1+Eul6tZ677T0uH3GV/+ABwuCD6iyMWiyWTyY1IxGrPp8SjqAou/Q8AlQ/RXxyxWIwUdt/a2ppf8Dvqj+fXDon+nYBrnMtxxf9xrnEn4FKLfrqu1n5hRapKl6Tio9UboKp3Kd5PV+bK1AemruXJVAxW3ru1dSqa3Tu9rcGjAoDCIfqLg0Q/ufE8n0wmff0DVpvhdjSKthtamQsKQjQakSUsyVC6Ti9Ts7d5eoajCvDuVwCmftQX/Qp7F1eoaZmZ8tjyOCoAKApEf3HQ0S++ASQSie4rPYbaKWb0C9GpFvV+uidIViDhy9b+lUY51WaQs9p0Rb/m3vM7KgAoFkR/ccijn9y2t7cNFXwvavQHOaUuP31PwGPL9K+plRXXt9C5rCv6qb1bvQFZa3kcFQAUC6K/ONR6/T19fYbaKeqAj/J4On0LUKMuu7u7Yldd+aOAJ0g20TvWL927vAtv9KgAoFgQ/cXBjPWnUilf/6DNYXi2z4FGv/b4SWY4nhpvKajXr/I1g3yP+o+q7L9lgKqB6C8OeobPQsEzfIof/Upj93JiRmuP9VtUBpRUo197rF/3UZX9twxQNRD9xRGPx1OpVCQSzTv0CZLmTxc7dK3s79QZ/Rb5jJ2WGTIDp6ZlJkBN49kf81Ga4bM/v1M24Yeemqm2d4UZPgaPCgCKAtFfHCurq2ebmgtvh0R/OuTek521y9h7zKVDqqd0ycPXks1Z+cx6LpidVi9NWMmMe1n4Nk9HqdF5rQEfhdaks3oMHRUAFA7RX1lwNi8AlACiv7KM9jq1T+KVG+11lv2wAeBwQfQDAJgOoh8AwHQQ/QAApoPoBwAwHUQ/AIDpIPoBAEwH0Q8AYDqIfgAA00H0AwCYDqIfAMB0EP2V5UaPc6KviTHGNdbay39sAFA1EP2VRfHybelld2jyfNmPDQCqBqK/sqhdufPFo+7wTJvORpiq6Gp3ZurfBr0W6ZWTmesn0xdnpgsoqpFezHm/BXmhXaYGi8YxAEBxIfqLIxxeaXA2Fd6OxkWbvwh1vVpXuHB/OuRmGmHKqliyKc/eSSWvRjmU5ukovYjkeI6qitLWxDcDtuKjLPpxaX6A0kD0F0csFksmkxuRiNVuuB4vrSjX66e785l7PEFBCAaCkjvpTNcf/aRx7XKJ8ugXhGgkKvvYgegHKBNEf3HQtXnnC67NuxNwjXM5LtM/zjXuBFw6q3Q1T0eFoLd5OsqUwRJ/NBD9emqpK0X/VIs3IGiVa0f0A5QMor84SPSTG8/zyWTS1z9gtRlup1hl2SU9emvrVFSITLfWtMxE9u+UfDLQGf1qBdYZKtFvU6jEi+gHKAdEf3HQ0S++ASQSie4rPYbaKVb0031zMfFJ3FN3CkyZdfomJjLzNa+edFaLfov02+acX/NqDysBQN4Q/cUhj35y297enpia0t9O0aLful8nnQz0k9k1XHa4v3k6Sk+5MTDgI+25K9KIfsm0IvT6AcoE0V8car3+nr4+Q+0UK/otmf51kLPaOOrbXTHxmS8D9Ec/3TJ5g6E+EGTeSzSi30JNQEL0A5QLor84mLH+VCrl6x+0OQzP9ili9GeTdH+Qx7I/+JMZ/ZetrCv65feo7Fo5+i3imweiH6BMEP3FQc/wWSh4hk9xop/MwgwGI3SPm3zlK73Tkm+vX+3AckZ/ZtgnGkX0A5QFor844vF4KpWKRKJ5hz5B0vzpYoeulf2d2u8TXFCQnxObuVOa3SUb66ebZb7LRfQDlAyivzhWVlfPNjUX3g6J/nTIvSc7a5ex95hLh5RP6RJlrqBAncZlyWa34p2KM3mKciEHeaaL3xMg+gFKD9FfWYpyNi8AgDZEf2UZ7XVqn8QrN9rrLPthA8DhgugHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfQDAJgOoh8AwHQQ/QAApoPorzgeX39Y/Ta/sPDW8ZNlP0gAONQQ/RVHO/pXV1eXl5eR/gBQCER/xSHR//jxY67P4+sfEHm8vkePHl0dHrl1+3YgEDj+9umyHyoAHFKI/opDoj8Wi8kXLS8vDw5dddQfX1jwB4NBW129Ygs6i6cXfduDawoAigvRX3E0oj8cDn/3u99NJBLhcPjJkyd1x04otoDoBwBtiP6K093DzS0u3X8Q0ljHHwj67wctDuVefyGQ1wBmgOivOPf7Wn8S9P6HB74/W+L+LxU/eeD9yQMv+f8fz/UUce+IfgAzQPRXnJCn9a9D3r8Oef/vB57EtY4/+LDnr0PeH73fHR/p+PWZrr8JeYVJd3T40vdHXf9p2fPXIe+f3+eYFpj4zpbS9QYEIVOBS71EV8DDRn9Ny0xEtiEpxSWt9i6wzUoPo4Y6ALEyFxcUhOhMs9IuAODgIPorjhj9P77f52puejbp/j8WudazzluX2y63NP3XcP9s1/nRjnO9rc3vdZ3/zx/59EQ/XYyXKa7L/MiU8yWZTpZmaqkHvfu7yLaZSXCrQglGcj+9raXW3jw9wykem9JbCAAUHaK/4jDR/3zS/Tu3r1xsbPzpI9/fhLx/+5Fvtuv8zoTr9z/saW1w/uzjfn29fqquuiSRW6eikqjNZDS9lP4EQJXPFd8VyH/kBXslO1JZhzk2S6aQr6RkPAAUHaK/4jDRvzvp/stl74z7/MXGxr0PLv/s4/7ZrvN3r7SNXGzxcxf+Vl+vnwlTsZNOd+rl2yoslSY4Ce5IVLmfrtDrl2W6/OMCirMDlACiv+LIo/9vQt6/XPZ+Me1ub2z8j0HPbNf525fPv5jp+k8PDI31q0Y/3RmXR/+u7LY/xK8S6IqHIbZGJ7ti9NO7AICDgOivOCT6f3O2Ozp86VyD83fv9vzL97r5dzuT1ztaG5x/8cAz23V+e8L100c+8g5x0NGvkcLky16172YVJwtlRvOz6Y9eP0BZIPorTsjT+jch7/2+dl/bO9sTrr/9yPcHH14Zbm/pb3vnq1uX/8vHvjtX2nYmXP/PQ28Rol/67atFjGaVbwIke8m+MTRPRxXDWm2eKD2OJB/rV/zGGACKC9FfcT72nvu7cP/rlf7XG9defzLy+snI6ycjrzdGXm+MvH4y8vrxyOtPRl6v9P9duP/14+HXT0b+5iEbzfqj3yKdpkk2lMzwYaYDtcxEZN8A6/p/y0yAmlNE9/rlu8NoD8BBQ/RXnHMXLw3emLg2OauxzvDY1PDYlPjjUelSQ9FvocdthOhUi8KsHnGUX3XWkCdIhn3Uot+STXnlsX7JiQXIfYADh+ivOOQaPisrKw8eLKvdyKU9HfXHy360GrTHiwgM7wCUBaK/4mhfr1+8HYbo9wakc0PlEP0AZYHorzicx6va26dujx49qvTo1zFXB9EPUBaIfiiy/e+KdczRRPQDlAWiHwDAdBD9AACmg+gHADAdRD8AgOkg+gEATAfRDwBgOoh+AADTQfQDAJiOeaP/Ro9zoq+JMcY11trLf2wAAAfKvNH/dLHj+bKbkV52hybPl/3YAAAOFKKf9eJRd3imTX87ei5SdtAtAAAYguhX8EWo69U69+oxKx1yy9uR1y43qvAWAAAMOWTRv7K6Go/HY0q3eDweDq/ob0oj+tX8YKlT3g6iHwAOnUMW/WebmlPqtwZnk/6mSPTvBFzjXOOkR8s417gTcClGv1h5itwkhQyFbFEquvKt1RvI3i8Wp1VsAQDg4Byy6LfU2jc2NnieZ0Kf5/lIJGKoHRL9ih15QyvL++z0PXTdc6YGevP0DCmaiF4/AJTY4Yt+R/3xra0tJvo3Nzet9jpD7RxQ9DMFaS1UxRKyprz2LKIfAErs8EW/pda+sOCnO/48z88v+I02clDRr/IhIOCxZXr90grpipsAAByoQxn9jvrjdJc/mUw63qo32siBRv+u7EY6++JSuoIVoh8ASuxQRr+l1u4bGCQdf57nvf0DebRwoNEvH9WRbyKmP6IfAErssEa/1WZPJBKpVCqRSNgcxkb5iYMd66dm9SiSfBWM6AeA0jqs0W+ptff09W1vb1/u4fLbnKT508UOXSv7O1WjXzpvx1Jrr/EE2Yme0Zlmq62mZSYg3pn97lexBQCAA3WIo99Sa5+Ymsp7WxL96ZB7T3bWLmPvMZcOqZ7SZclmvSTus/fs7u7Ss33EWfz0WL9iCwAAB+dwR38hinU2LwDAoWPe6B/tdWqfxCs32uss+2EDABTOvNEPAGBaiH4AANNB9AMAmA6iHwDAdBD9AACmI4n+N779JgAAVD1EPwCA6SD6AQBMB9EPAGA6iH4AANNB9BfBmauNzuvNjLMjTd+0/krZjw0AQA7RXwSe7w4MfG+E9f2Ri/Od+hv5Rs3p0YggRMZO1bxR9kcEANUN0V8EytH/vZGhH1zvCHbrbATRDwAlg+gvArXoH/jeyOD3r737fEJu4PsjZT9sADAt80b/xyvhWDwWjUXlYvHYx+GP9TelEf1qPJ8Olv0ZAADTMm/0H2s4nlK/vXWmXn9TJPr7+atnR5rk3/cy3/36UlcVo18+4HNqamO/1Fegi9zpDgiCsOjOrsNspbgJAADDvNH/xrff/GTjE57nmdDneX4jsmGoHRL9OjvyaiszIf4NbnFj6nRmUfPYhiCQH7/BLQrCxmjzG4qLFDcBAGCYOvp/zf6tra0tJvo3Nze/edTYpMyDiH61Rd+o6VqkMv0b3CL9IUBPawAApo7+N7795r35e3THn+f5D+fvGW3kQKOfZP3u7q64yB0QJP+XDezINwEAoJk9+n/N/i26y59MJn/N/i2jjRzQgE9myF5YdNe8Qce9OOZDIn6Ryw7+qG8CAEAze/S/8e03e3y9pOPP8/wVb08eLRQ9+plRnTf+//bu9auN884D+L/Qnnib2tvt9nTT0xd7ThtskwsREkI3ZMzdgMHYDvhCQNhgY8c2xoAdxwRjQImEMOZmYV2wJYjjhJJIiZu2OUkbN5t0m0uTs9s0ybancXab3b7KOds92RcjDc88z8wwuqDbfHU+L2rNzDPPTOhXo2cezU94pc8nPjnaI78JAAAJ0b95S+HWQCCwuLgYCATydQ/E0ULyo7+mx0Nezhfss4cEOc6N85CjPWtuAgDAQ/Rvzntkc3Nr88rKyp4De+PbPJLm1zuVrNy+0KXwqp+c0EkN3HNjPh4vk/XSmwAA8BD9ESd6T8a9beQnXbeOn7gt8sNdgdu9XbeOKxrrr+nxhELc2L2nbzs1ehMJeuHcHvlNAAB4iP4kSMqveSPRj99hAcD6Q/QnQbnYQ5vllXdXUY2w92kBANYJoj9TUD/TBQBYP4j+NOPGecLhMHIfAFIG0Q8AoDqIfgAA1UH0AwCoDqIfAEB1EP0AAKqD6AcAUB1EPwCA6iD6AQBUB9GfWY4eKDnx2DbK8VbrVu2WtPcNAHIGoj+zPG/f84qrhXLb1eI8vSPtfcsoKD6M8waJQPRnFtHof8XV8rPJ/VcG6tPevcyR9ghL/HF7aXlgX9rPG2QIRH9yTE1PGctMibcjFf2vuFpuT+x782rbm27a7YmWtB9+6qU9wrjqCAlFf8ItAMQN0Z8cPr8vGAx6PJ4thVsTaUcm+qW88HScxcWyGqIfIBGI/uTw+X1cYfebN29eHBl+WF8QXztc9L/kaD7eaj3Rtk3G8VbrS45mmejnnwlKF3cs2GePFvMKh8N8icc8ruRvyN5CVPuyt+UJ2pGoJEO2yWeZ6Jtx7yLvkc33t9mJbtPRTxYpIxuJdY8y54dsM0y8Vg9Zog/sqZBqQf6UrnGY3p7SNjv3n/vIM4Iibvwn5baHS+nzJvV3IrEjyA2I/uTgop97LS0tBYPBgx2tcXwD4KKfT/Mtuofy9Y9s0T2kZGUS9/9bsmj7qba8vGh6rkaV8J9kRV8yEbj4k7pKpcoCl/b1tDDlhbk3496FfFepDWXKFK+5R/nzw55hNpTZPkidCrmDVbAJe5ghr8fDnxBh+Qd+Q9E6oCJ/J9I7gtyA6E8OMvr5D4BAILB73+6Y2iHTvKiurmMufCzw60OzLxfVidzjlYp+qcEQ0RqQkYviaC4L8oK7hORzQarZmh5PKERdHYu+Gf8umJ5H8ogIdLZsPbcX5Xtc8/ywB0h8xZHsg9SpkIt+0VMa02EK7yHf32bnjkLkeKXOtsSOIDcg+pODjX7utbKyElPBdzLN26dWjvjf4NimX5RfmSQ1dUQ0a5j4IEYJmAASLfUuXiNe7M34d8FeYpMRJnEBzjWrfI9rnh+ZLsn0QepUrH3VT53SWA6TOpMtDv4rCBn9Sv9OpD69IHsh+pND6qq/ubU5pnbIND+++C989D++9Lb8yiT5y0z6WrLNzo9+xJfL/JphYa0x0TcTiX5yNTb6w8wrvuiXOT9sl0RH+dk+yJwfqdu87CZrH6bwvK1+7SjYZ48eF3vepA5NakeQGxD9yUGN9S8uLrZ2tObrHoi1HTLN63uHu2/cOeJ/oztwZ2fvsPzKJMlB+fW56qfap66RqTfXL/qlgimVV/3y4UidCiUzfMhN1j5MKvqjic+P9oieN6m/EwR9bkP0Jwc5w2c44Rk+XJpv1mypP/VUx2y4vmdos0bkQQ7rM9Yff/TnSX26EG8mNKZEjvVzmSg9Ri96gPJ7TMJY/1r3QgW3T5VN7qTv0MocJnPeuHEefrSH+tuI6e8EcgyiPzn8C/7FxUWP1/OgXnw2jkJcmj9v36No5bG9kjN8qJuZsjN8+ByMOSWjF492we3EyCUq+2bcu8h7ZHNpn2d1/ISvZU9MaAlTkyzJYW7FHzYy54eeG8N+Gkn0QepUUC2seUrXPkw2xNvsoZDH4109XvooFP6dEDuC3IDoT46pmWlzuSXxdrjovz3Rcof51S7ljrvt9oTcT7oE87Kl5msLhzLizmV+ljo1rC/6Zny7yIumf7RBkVko/Kg0+X6s3zOkzo/ovBduNeqjQrQPoiecbEHJKV3jMBXcgRc5Cqm/E4kdQW5A9GcW/JoXAFIA0Z9Zug+WyP+Il9V9sCTt3QaA7ILoBwBQHUQ/AIDqIPoBAFQH0Q8AoDqIfgAA1UH0AwCoDqIfAEB1EP0AAKqD6AcAUB1EPwCA6iD6k+DogZITj22jHG+15mtFnrQMAJB2iP4kEH3m2m1Xy3jvjrT3DQCAhehPAqnHbf5scv9Uf13auwcAQFF19E9NTxmEsM9eAAAYoUlEQVTLTIm3I/Ok5dsT+968KvK0/dsTLWk/fABQLVVHv8/vCwaDHo9nS+HWRNrBQ/YBILuoPfr5groXEy6o+5Kj+XirlXuG/sm20qOt1pMHt51oKyWfrX+81fqSo1kq+iOFlriaeXwJPbKIElkOsGCfPfo+Wd+VfJ8svihSnklYglV879FSiHKlvhT0CgAyCqI/8lpaWgoGgwc7WuP4BiBaHt21w7r11CN5GnrlF+x7X3G1LNulot/jYRI2UsWbKOVKlXUt7etpkS4tG91cSfSL7F2kcGuMvQKATIPoF7yWlpYCgcDufbtjaoeK/vzCLS/urnyrpXarq+gRv2GzRfBZcrK98oyt6lR7FdtOiyO0ZjFYvug5VWA2j4lyok17i1ipW5Hol917fL0CgAyE6Bd5raysnOg9qbwdMvorDA+/s6/2/QN1bzbX5DuLCpfN+rC1pffBLz/u/Pqrpq9/Z/nE/fd//dk/fzr/nb+99RDVjmgBccFgTjRb2XLbouvnkbmsKPrJ+t377ExrcfQKADIQol/kqr+5tTmmdsjoH68peX9/3Xv7V6O/cNlsndadfNz4f39p/PLGA6923/uR/b5Xu+/9YPSfqHYio+1i4+nky94muAfAX6qLfxVos3ObKB3rF+6dvYSPtVcAkIEQ/auhv7i42NrRmq97INZ2qAGf85XGDw/u5KJf+6Jl64BG+9APLhz7wcCJ+w5bN3UYNp4s/06HYWOL7ttUOwrDlxQZjifGWxK66pe4zcDuUXmv0v5fGQBYiP7IDJ/hhGf4kLd5H7Nqf9Vckz9elH9cc9yW9/ihrV//b+/XX+78+sOS/7j+D3/91Y/+eOMfv3rnYaodOnzFxu5ZfEbLj/XnSQwoSUa//Fi/4l6l/b8yALBUHf3+Bf/i4qLH63lQTw+7x4SL/ufte8g3Cwu2/tiQl/fI5t+O/fDLhc1/+3jvV3cbvrzxwKtH7/1o7L5Xj9774dh9VDtU+OaxM3ZqergZOPfX9NiJaTyrYz5iM3xW53cyE37IqZlSexeZ4RNjrwAg06g6+qdmps3llsTb4aL/9kTLHeZXu8+N7b3a+v1rj333FXfez2/+2G/73nD5hqk9my6Wb7hY9XdUO2z45kVzlp1Z3+KITqsXJqxgxj0TvqV9HmJ0Xm7AR6Q14ayemHoFABlF1dGfLDK/5vUNNv1baPOf39D89dPu//yo+os7pvevfffTn/7og2vf++y1B9PecwBQJ0R/EnQfLCF/sktqb7b85tIPP5+//28f7/nqbsOXC/k/7frWhyP3/bTrWx+N/SDtPQcAdUL0r7ubhza9dua7n7328J/fz//lwPevNXxjpfPb1xq+Edx3T9r7BgDqhOgHAFAdRD8AgOog+gEAVAfRDwCgOoLot1p0AACQ8xD9AACqg+gHAFAdRD8AgOog+gEAVCfLon+osWq0qZpyaVfVdktR2vsGAJAtsiz67xxueffIAcp7Rw4EDjSmvW8AANkiF6L/3SMHftfd+lxrk/J2Sky2iVDI/0SqDzld+wUAIKUo+mdnpxvqKxNvRyr63z1y4P2jBz891fEZ470jB9h2Snb1+9MS/WnaLwAAKUXRv+D3B4NBn9dbatUn0o5M9Ev59eF9bDuIfgBQs1RF/4Kfr4L7tH20oswUXztc9L/duX9kV9VYU7WMkV1Vb3fuF43+LlcoTLz4IN7zhG+18pTLRq4f8vfv6XSGw+GQv3+PSWu16Eo6nUQLtvP+EL/IGo14qimp/QIApFhKo597LS0tBYPB492HrbFPy+GiX/RCPqaV2avvkk4n/09qaZcrFPL7/GSydzrJ7OYyffVTgdicG9zn0x9X/QCQCdIQ/fwHQCAQOGQ7GFM76xf9gqWmWvIqvssVCoV853dpBUuJrwWRfPf37zFpqW2tFl1Jp5PfHNEPAJkgbdHPvVZWVs6e7VPeTgqin8tx8iq+yxUKhZxdwsEcwTcGIu5Flu7q94dCE52IfgDIFGm+6u863B5TO+s64BMZmg85u0zayPg+H/3MOD4X5ZF3mOgPMy9EPwBkjvSM9S8uLh7rPlxqLY61nXWKfna6fYLRTy6V2S8AQFqkY4bP04nO8El+9Avzmhy7t7LRL7xzy28uGOsnlsrsFwAgLVIW/QuLi4s+nzfu0OdwaX7ncIuSld+UiX5q4o3wn9SMHSr6rdFpoJExHFPteb9who9w/k/Jrn5+dhD7sQEAkHopiv65udnGndWJt8NF/3tHDrC/2hX5He9RyZ90WYnB/cgsTGKM3v9ErcyAD4f8EcBEp8isntWfCAi3pfYLAJB6OfIMn1h/zZtc8oM8AACZJsuif3itH/GyhndVrXev5G/tAgBkmiyL/gzR5aJnB7EjQgAAGQvRHyfygTwY6gGA7ILoBwBQHUQ/AIDqIPoBAFRHEP0anR4AAHIeoh8AQHUQ/QAAqoPoBwBQHUQ/AIDqIPoBAFQH0Z9l2pyhkG+gRluU9p4AQPbKwugvKi4sNhUazIXFRk2RQaM3ag1mrcGiNZoL9QZNUXF0BUuhwVJYbCosKk5/n5MH0Q8Aicu+6NeXVpfu7655fLis7ZShusG6x1Z7+pn6J2Zq+5zmhv1a0zZD5c7Ko0/Wn52sPze1vb1Hv60y7X1OIkQ/ACQu+6LfVNNUfWK44alrtaef3nHavvPJ2T324O7RG7uGfTUnhiuPnK/tdey6tLB7LLB79Eb9+ZnS1hNp73MSIfoBIHHZF/2Whv11/ZebRhYaBt115yYruy9UHn2ycejarmFf41PzO8/P7jhtrzjUV392smHIu/eZparjF9lGIgFaO+CNVuYKOTvIFQq0HY7Q6rM5HbYiwbYhZxuxrcNWVKCt7/OJN8Wp6feR7RTUDnhDIW7NmBpE9ANA4rIv+q17bA2D7sZhX+OQp+yxEzprhaGqcef52YYh7+6xQM2pUXPdo1qTtar7QsOg+9Fnnq2WiP5wOBwKOdu0RRphEGt0+gKbMxwOe/vrRf8Z2dY3UKMVBDQX61xT/Mo8bk1+j2SCx9Qgoh8AEpd90V96oPvRZ55tHPJUn7LrS6s0Or2hvLb+3JXGIU/D4DXr3g6NTl9YbCo/1L/zwtWmSwuVXefYRtqcoVDI11e7GqA1/T4ulyMZLbxyj1yY86lNbMt9MKx+bHCbi6UzH+Lc/+C/AcTUIKIfABKXZdGvNZrLbaebnbcaBt3b9h3VmbdpdHpDdUPjkGfXJX/1iUumHU0anb7QYK46frFxyNNw4WrZY6fYdtgALbA5ufwVvWznl2qEHwOaaKDTI0IS6cylvFf40RJTg4h+AEhclkW/vqym8sgTzc7nGgavmnY0FeoNGp3e3LB/9+iNppHr5bbT+u1VGp2+0GCpHZjYPRao7ZuwPnqIbUc0+iOD7Ezykks1iUU/dwuB3DzWBhH9AJC4LIt+U+3empMjjzpu7jw/V2Qt1+j0WqPV2tzJzefZ1nxYa7JodPoia8XOJ2cfddysOTliqmtm20nXVT93s1fkzi2iHwBSKMui37rHVtc3vnssUNfv0hrNGp1eX1pdZuttGr2+e/SGpWGfRqcv1BtMO5oaLlxtdj5XefRJfbnIcbFj/XykKhvrjyf6+TVr+n3k3hH9AJBiWRb9ZY+daLgw1zjkqTr2lNZg1uj0xurG6uNDTSMLjUMeQ1WjRqfXGUuse20Ng/PN47fKO85w3wMo5KQajXA8RyMxw0d4V1ZRUpN3aKX+d0wNahD9AJAMWRb91ccuNDufaxh0l7WfLiw2aXR6S+OBurNX9tiD9QOXDRW1Gp1eV1JW3nFm17Bv/+TKdonfc0UC1OYUnbmvieZvZHCG/X4Qe/TLTONB9ANAimVZ9OvLqk07mgxVDUXWco2uWKPTa83biivrDdWNhoraQoNZo9MXFhv1pVXG6kbTjiZdSbloOwhQAFCzLIt+GvtoNpGHtYk8vg3RDwBqluXRHy9EPwCoGaI//Z0BAEgxlUY/AICaIfoBAFQH0Q8AoDqIfgAA1UH0AwCoDqIfAEB1si/6bYcOT0u/RkZHjRZr2jsJAJDJci36Z2dnXS4X0h8AQEa2Rr/b7W5rtx063MmzdRyanJw82n3swuCgw+GwbNue9q4CAGSmbI1+v9/PLnK5XF1HjhabLKOjY06ns8hgWr9uyNTgVaFEzgZ+WQ2QejkV/dPT09evXw8EAtPT0/Pz8wZzyfp1IyuinytLwL7i6zZXXZKqX5b42UD0A6ReTkU/z+12u93uYrEiLepEVZuJsxGx0pWJQ/QDpF4ORn+xyYLopyD6AYCk0ujnxi640Q8+yyIZRNbnooqnRwt7hXwD1YV1YkUWV5ulqvsWEBXBvP0dItsS+3XYIhW+qKboel7CYRbBJkzRedHoL5A4WPb8UGNHdNl60ZKTCo5Ig+gHSAc1Rj+Xa3z61PQP8PXWw+Ewn61cLApi1+fzCnOWDDvBtmLVfcnPGDKdyX+S+cglNXmtXWBzCqo8kouEvS2oHeizrRH9gs2JcyJ1fmSu+sXPhoIj0iD6AdIhB6O/yGBaWFhYWFjQG82iK7DFbzlU+VyNTl/T7+PTnC6uK3KdK7408r+Za2rJbYmyvUxTghutBTYn170177Ky0c9uwn+uSJ2fmKJf4RFpEP0A6ZA70V9RvcNothjNFqO5pKyisqyi0mgu4d4pr6wm14wkLzFywmEziLzKlh9soZaSrbGJKb+t8rLsbU7BdbrMKLxI9LO9iu5X6vzEGP0oNA+QuXIn+o1myyaJV7GRnuDPj3GTF6ei0c8nJrU01uiXueKOKShXr821HY7oalLX6aIHQp0B6kU2SJ0fRD9AzlBp9HMi4+Pkdb38VX8mRH808fnRHo1sKPMHIhr98nN+qPOD6AfIGaqOfo0wztixfpmEiiH6hXdN+Z3GF5Sa6DgPP9rDdkbkMKXG+oXTkOTPD6IfIGeoMfoLagccgjulq9f15MQbKi7jjn6NTl/T71sdS4nOeIk7+rk+e33CbxLUrVQlM3yoaUi1A97o1xTR80N9honcykb0A2SJ3Il+g8m8cePGoqIirVar1Wrz8/Nlrvr5WeoiY/3EBHy5/I0l+jXR9I82G39QaqRvUwsm6Suc108cLPXFgj0/5Pre/npEP0D2ytbon5mZGR938a/JySvbyys2bNiwvLwcCAQCgcDg4KCSAR9SyjJI4WALAMA6ydbop17Xrl0rq6jctGnTN6Ove+65J3OjX8EtVgCA9ZN90d9m63AxrytXrmwvr4jjNq+g5XWL/jYn8Tss4e+5AABSL/uiX0pZZVWx0SRqe0WVkhbW9aqffAYOhnoAIL1yJ/oBAEAhRD8AgOog+gEAVAfRDwCgOoh+AADVQfQDAKhO9kW/6E+6+NfI6KjRYk17JwEAMlmuRf/s7KzL5UL6AwDIyNbod7vdbe22Q4c7ebaOQ5OTk0e7j10YHHQ4HJZt29PeVQCAzJSt0S9am9flcnUdOVpssoyOjjmdziKDouc3qMqaT/aXgUdsAuSMnIr+6enp69evBwKB6enp+fl5g7lEph3B84qFD0CWWhR5Jj7ztOTI0uiD+PnnspEPas6QRzgg+gFAk2PRz3O73W63u9hkkVqhpt9HV52NhrLMIr5GinilKpsz5PORj+SkmtJEn+STpc/sRPQD5IwcjP5ik0U++rlnZ0oUGpRcpIlGv8PpYxOQu5p29A/IR79GumpK5kP0A+QM9Ua/6NiLzCLNarXCSGF0waLaAW/I2VarIPqZIRdBdS1i15FaV8RSh62IH1Zih4+4zouWGJPae0y7QPQD5Ax1Rj89KK9kkYYoVEuWROdwT+QvUBD91PuCuufCDx6yVjAZx5Eav8Ii6XShXeE/qQMko1/5LhD9ADkjB6O/yGBaWFhYWFjQG81S6/AXyGJDN9KLotFfUDvgpe4HrL6/dvSvtsN+AxCWiRfcdaAKr7OlcZlPI5H6vSJX/Yp2oUH0A+SQ3In+iuodRrPFaLYYzSVlFZVlFZVGcwn3TnlltWhTq8XHmREe0UVUZPOXwzX9Pm61mKNfeFlNtaC8uDnbjkb4KbL6JuqnA0AuRb/RbImvQCM56CG/iAzTApuTC03uWwI5QqJswMfZFo3sMPOKL/rp2w9i95MR/QCgQfRzpDKaWiSI/uhcoAKbc/WzQfltXrFvCRRc9QPAOkH06zUSKckuolar6feFfE4HMfKjJPoFnyViY/S8GKI/obF+RD+A6qgx+gu0HQ4y7wT3SyUXaZjo54JSJjrpX4dxrQk/DOiZObUD3rhyWXSGT2QYir0hjOgHULfciX6Dybxx48aioiKtVqvVavPz82Wu+qkp8IIbrTKLmC8H1CxPNvqVPMhB8NwIIltjymV+hUg77EcOoh8AorI1+mdmZsbHXfxrcvLK9vKKDRs2LC8vBwKBQCAwODiofMAHAEBVsjX6qde1a9fKKio3bdr0zejrnnvuQfQDAIjKvuhvs3W4mNeVK1e2l1fEfZsXAEBVsi/6pZRVVhUbTaK2V1SlvXsAAJkjd6IfAAAUQvQDAKgOoh8AQHUQ/QAAqoPoBwBQHUQ/AIDqIPoBAFQH0Q8AoDppi359sdFx7MhYe+tYe+ulA81ny61pPxcAACqRtui3mC1/CXg+Gx/5zDX68cWzb+yuTPu5SKJYH3KZsiq4bDVgAFChdA74fBlj9JMPN2YfcSy+SbSWVooPTSa7+eqMwn4i+gEgdeSif3p6RqqgeUxu3boVDAZ9Pt+5c+deffXVhYWFubm5p548f9c395nz0mfjI78fGni9qWLNdmRqaUluIla5MAVijX7lmwMAJE4u+v1+fzAY9Hi9Wr0hkX0EAgG32z01NdXT0/P888/PzMyMj4+f7Tvz36HlPwe8nwe8f5yffKdz75rtIPoBAJJijehfXFxcWlq6efPmyOhYsckS3z5Eo3/gzJn/ei7wJ/eVP81PfTox+rZtd/uF8f0D9v1nn97bc9Ha0sm2IxX9XDEsvrZUpG6is6PNGSJHh6gKumzZrEjg2pz8UFK0iNVq3S6qzBZZh0ukqQQHfBT3c+2eRFeuLqyjBnykzgZZrSz1n50AsK7Wjn7utbS0FAwGDx3u1BbFvI9gMDg/Pz89Pd3b27u8vDw7O+tyuc719d31X+XH+t862Dj3zhdjv/jE/ton51febbgwx7YjFf3RmreRPBVUrGWu+sl3uHTj867NGQr5fF5hicRwOMy3zNa/pT5O+H8mHv2C/UY/zKT6uVZPVlemqw1LnA3qzNT0D8h/TQGA7KI0+vkPgEAgsP9ga0z7ePnll1988cUXXnjh8uXLr7/++vLy8rPPPjt9+fJd3xwf/W+37vrJv//P9d98fuM3n8/98vcdc7fYdtjbvGzeUdVlqRxkb3KSHydtTrpmOvWOzD1S5fdplV71C3tCbsUuVd6UTJ1e8mywRXoBIJfEFv3ca2VlpbevT/k+bty4MTc3Nzk5efLkyVu3bk1NTTkcjv7TPV8Ir/qn3747/PM/XPr5J2eXf1v3xDTbjvxYP5dxXp9InXSpK2L+HS7jqBrlku8wmc6PjSQz+oWbMx9R4ncLxHtCFl4no1/6bESu+te6JwEAWSqeq/7W9vaY9iEx1t9LDfjMvvPFyC8+Gf3FJ0/85N3687NsO/LRL5pWotEfZl6r0S8MXPno57+FcOuQi9Yj+mX6qbwnbPRLnQ1+aay31gEg88Uw1r+4uHjocFdRccyzfda4zeu+8unEyL92tcy+fTeR6Ofvc6551S81jhFT9LO/GFjv6Bdc9QvSPIaesNEvP6oTuc2A9AfILUpn+Iwme4bP6uTOoPeP85MfnGyfSSD6+RSr6fcJhrZFx/qFs3R4sUU/dVOB+86xbmP9cmkeS09ExvolzgZ1bjHJByCXyEX/wsLC4uKi1+uLO/Q5omP9fad77vqv8j/peutA/GP9MrcuqZkqGnaWTu2AVzqv17zqJ2fdJHesn2yNHO1hG4+pJ/T5kTgbBbUDDmIiE676AXKMXPTPzM5WVNckvo/1m+HDRRI9iYWbwx6NQn4rclLmagvCqZyxjfUTY+Xe/nrlAz70UTDT7cnJ+OT4u1Q/lfdEdFaP1NkgT3La/1IBIIlS8Qyf2Of1vyc6rx8AAJIiFdGfrBk+AACQFKmIfo/HMzU1NT4+/vjjjweDwYmJibGxsd5TJ//gvvKh/akPnx5678KZ1/Y3XH7jD0+FPhgKf9D37J3agctpPzUAALkKVboAAFQH0Q8AoDqIfgAA1UH0AwCoDqIfAEB1EP0AAKqD6AcAUB1EPwCA6iD6AQBUB9EPAKA6iH4AANVB9AMAqA6iHwBAdRD9AACqg+gHAFAdRD8AgOog+gEAVAfRDwCgOoh+AADVQfQDAKgOoh8AQHUQ/QAAqoPoBwBQHUQ/AIDqIPoBAFQH0Q8AoDqIfgAA1eGj//8Bq+Lu+BZ/OkkAAAAASUVORK5CYII=" alt="" />
二、搭建
1、新建maven项目
2、创建项目结构(如上图)
3、配置pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SpringMVC</groupId>
<artifactId>SpringMVC_Demo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>SSMDemo Maven Webapp</name>
<url>http://maven.apache.org</url> <properties>
<!-- spring版本号 -->
<!--<spring.version>3.2.4.RELEASE</spring.version>-->
<spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本号 -->
<mybatis.version>3.2.4</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
</properties> <dependencies>
<!-- spring核心包 -->
<!-- springframe start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- springframe end --> <!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 阿里巴巴数据源包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.2</version>
</dependency> <!-- json数据 -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency> <!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
</dependencies>
<build>
<finalName>SSMDemo</finalName>
</build>
</project>
4、添加配置文件
aaarticlea/png;base64,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" alt="" />
4.1 jdbc.properties 配置数据库属性
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
jdbc_username=your usename
jdbc_password=your password
4.2 jdbc.properties 日志属性文件
# DEBUG,INFO,WARN,ERROR,FATAL
LOG_LEVEL=INFO log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=utf-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n
log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${catalina.base}/logs/SSHDemo.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
4.3 mybatis-config.xml mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 命名空间 -->
<typeAliases>
<typeAlias alias="User" type="com.ssm.demo.web.model.User"/>
</typeAliases> <!-- 映射map -->
<mappers>
</mappers>
</configuration>
4.4 spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties"/> <!-- 扫描文件(自动将servicec层注入) -->
<context:component-scan base-package="com.ssm.demo.web.service"/>
<bean id = "userServiceImpl" class="com.ssm.demo.web.service.impl.UserServiceImpl"/> </beans>
4.5 spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 扫描controller(controller层注入) -->
<context:component-scan base-package="com.ssm.demo.web.controller"/> <!-- 避免IE在ajax请求时,返回json出现下载 -->
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean> <!-- 对模型视图添加前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp"/> <!--进行静态资源的访问-->
<mvc:resources mapping="/resources/**" location="/resources/" />
</beans>
4.6 spring-mybatis.xml spring整合mybatis
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close" >
<property name="driverClassName">
<value>${jdbc_driverClassName}</value>
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
<property name="username">
<value>${jdbc_username}</value>
</property>
<property name="password">
<value>${jdbc_password}</value>
</property>
<!-- 连接池最大使用连接数 -->
<property name="maxActive">
<value>20</value>
</property>
<!-- 初始化连接大小 -->
<property name="initialSize">
<value>1</value>
</property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait">
<value>60000</value>
</property>
<!-- 连接池最大空闲 -->
<property name="maxIdle">
<value>20</value>
</property>
<!-- 连接池最小空闲 -->
<property name="minIdle">
<value>3</value>
</property>
<!-- 自动清除无用连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout">
<value>180</value>
</property>
<!-- 连接属性 -->
<property name="connectionProperties">
<value>clientEncoding=UTF-8</value>
</property>
</bean> <!-- mybatis文件配置,扫描所有mapper文件 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:conf/mybatis-config.xml"
p:mapperLocations="classpath:mapper/*.xml"/><!-- configLocation为mybatis属性 mapperLocations为所有mapper--> <!-- spring与mybatis整合配置,扫描所有dao -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.ssm.demo.web.dao"
p:sqlSessionFactoryBeanName="sqlSessionFactory"/> <!-- 对数据源进行事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/> <!-- 添加注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/> </beans>
5、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Archetype Created Web Application</display-name> <!-- 读取spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring.xml;
classpath:conf/spring-mybatis.xml
</param-value>
</context-param>
<!-- 设计路径变量值 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>springmvc.root</param-value>
</context-param> <!-- Spring字符集过滤器 -->
<filter>
<filter-name>SpringEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 日志记录 -->
<context-param>
<!-- 日志配置文件路径 -->
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:conf/log4j.properties</param-value>
</context-param>
<context-param>
<!-- 日志页面的刷新间隔 -->
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- springMVC核心配置 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 错误跳转页面 -->
<error-page>
<!-- 路径不正确 -->
<error-code>404</error-code>
<location>/WEB-INF/errorpage/404.jsp</location>
</error-page>
<error-page>
<!-- 没有访问权限,访问被禁止 -->
<error-code>405</error-code>
<location>/WEB-INF/errorpage/405.jsp</location>
</error-page>
<error-page>
<!-- 内部错误 -->
<error-code>500</error-code>
<location>/WEB-INF/errorpage/500.jsp</location>
</error-page>
</web-app>
好了,一个简单的web项目就搭建成功了!不多说,该有的注释都有。
省略实体层、sevice层、controller层、view层。
下面下个测试类试一下
6、测试
package com.ssm.demo.test.service; import com.ssm.demo.web.model.User;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssm.demo.web.service.UserService; /**
* user:ouym
* date: 2015/7/31
* time: 11:55
*/
public class UserTest { // @Autowired
private UserService userService; @Before
public void before(){
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:conf/spring.xml"
,"classpath:conf/spring-mybatis.xml"});
userService = (UserService) context.getBean("userServiceImpl");
} @Test
public void addUser(){
User user = new User();
user.setUsername("ouym");
user.setPassword("1234567"); System.out.println(userService.insertUser(user));
}
}
测试通过,大功告成!
这里有一个小问题,注意到上面注释掉的@Autowired了吗?单元测试直接@Autowired是无效的,运行会报空指针错误。
至于为什么,看如下代码自己思考吧!
修改后的代码:
package com.ssm.demo.test; import com.ssm.demo.web.model.User;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssm.demo.web.service.UserService;
import org.springframework.stereotype.Component;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /**
* user:ouym
* date: 2015/7/31
* time: 11:55
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:conf/spring.xml","classpath:conf/spring-mybatis.xml"})
public class UserTest { @Autowired
private UserService userService; /*@Before
public void before(){
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:conf/spring.xml"
,"classpath:conf/spring-mybatis.xml"});
userService = (UserService) context.getBean("userServiceImpl");
}*/ @Test
public void addUser(){
User user = new User();
user.setUsername("ouym");
user.setPassword("1234567"); System.out.println(userService.insertUser(user));
}
}
自己动手试试,可以将shiro和ehcache整合到该项目!