aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATcAAAFWCAIAAACD6E2aAAAgAElEQVR4nO2df1gTV77/55/93z/2ee71j7vdDV2D27v1Flu7e7eX9mtB3GdLK3sfn2vvftvbx/02S1v31tJYKdXCItCIuuAKqBtFxFJrCIq6/qi/ABFRTDfUqqRqhaDogKDBiBlEN98/Jpk5M3POZAJJ5iT58Lwen2Q4c86MmRfnzI/zDuOHH/iBH7p/GAfrBACAZsBSAKCdCFiK7aOr6nZ29HbJiqUurvH7/brvMwDEF5GxNHVxzYLCXX6/f0HhLl5F18XuNdVWZTGwFADCJWKWpi6ueW/DIf6F3+8fal+5efXHy1aUL1tRXlhWeaKnAywFgMkRMUtf+3QX36PyKvpHTwZAfsBSAJgEEbN0V+ul1MU1u0/1BCy9czSA3//ap7vAUgCYNFot3bzbWlJWgv0V/hbP0N4AQTnBUgCYHJos3WjfbDCm/CjlCVKB98zb/QNf8Dy+3nB0z+dFJV++/+GO9z/c4ff7G0/28Oer2458Q7C0PIMJ/BjMdtkShsm0iMVSTNZcA8MwDJNhdTqsmYq11Auo1mxWFgYA/QltKa/ookWLVCx9w1Tnd2/xu7f4Lm9dWfzlhuaLe92PBdAu9vdLdylWL8+QiyFdYs0M6lSewTCMMdfGBvXLLnewTkdbriGcAsSaxcIppjb9PxsA4AlhqaDo66+/rmKp3+8fOrvN3bBw6Ow2v99v6xlXYm0ffitv7+HzZ+WrWzMDXhGX2E1GJsPqDPR4AX+wr0MV0FSz3WQESwGKULMUVTSkpe6Ghf5H37obFvr9/nrHfRkbDg8u/OOBg990YVbXZKk2CSdjqXJFsBSgCzVLS8pKfpTyhEBxSTG2mN/vH2pdy7mKFqQynKtoqHWd3+//a6tH4LNd/S/9976/deMUZZ38aDPDGnhtMtsx49KAWlO2VFPNYClAF5G5E+NuWChYynenaQsOz15waHbO4V+9/tVvTPtPfOdQq6QtcL1HejmHcI1nSpZqqRksBegiApa69+ePtL7FuYrOb03nXEUjLW/178/XfccAIGGIhKUNCx9fKx45aV6QyoycND/+vtjdsFD3HQOAhCEClp4uffof12s8rsoDVb/1uCr9/TWnS5/WfccAIGGIgKUDnXWnS59GGeis033HACBhgFngAEA7YCkA0A5YCgC0A5YCAO2ApQBAO2ApANAO1Zaa0tN03wYMYU1tg3lwwJShwtL2NXMEHKyzOGu6kgg3Ks44ndy6GsTjmwBLgSmjv6VNS55Ep4lfd35VnDX94YMj7OmqtW/M419E3FKbOSXagQwxaAJIEqJuqUpgkoN1tpfO4dhNHLvJ46pkuy19rfl3e08XZ01nT1edbywypafxLyJtKToDJkrEoAkgWYiupSEDk46VpnGeMygfv/ZScdb0tW/MM6Wn8ax9Y15x1nTsOarNnCKdg8ZnLyC5KphEJcW0UvWcJHFWXXASrCSfhZCWJDSBDq3lVdlNRnEtmzkFWUXaIpDcRNFSLYFJxwrTOLYZ5dGDXmHEa0pPUxvxYs4t7SajfJKqcthpyRYnnYfKSbKbsoPZDkJIkixmCZeWJDahXpX490LIdsEVA5KbaFk6ucCkprxZKihW5/tJdGApHOtOB4vLamFlbmuZNa7osWV9qXLuuLz/FE1TdP7BGkIUA5KaqFg66cAkrm8TFrbbgrOUh+8/eUNCW2ozpwR6P9YZ2tK2XIPQGwsihbJU0oRkLUVVrNOSzRjMdvFSE6EYkMxExdKpBCZxLosMoqJtuaaAkMhwEbUUk6ikLKA1zcxmTtHWl0qbEApjq+ILGDMzhH6YVAxIYvS8E4MNTOK6i1BUe1GnJTs4MAz0XTIJFYlKbbkGSe8acsTLd9QMwzCG7ExNfamsCfS8VFmVsFzs3knFgORFT0uxgUlct4i6opOAH15GdafkTcCoFZgyulqKC0yqNRlRItqiDrdJxfsrADBZ9LQ0wQOTArdeoSMFpoqelkJgEgBoQf/neAEAUAcsBQDaAUsBgHbAUgCgHbAUAGgHLAUA2kkoSz944Z903wYAiDjxbWlL8TNtBT8X2LDwCfRtS/Ezum8hAEyd+La0bflTV1pqB85uHzi7/e+Na2qXLkLfti1/KpqtK57sj8oqAECxpeqBSTwty342cHb7+OjRkW++6Dm8sXbpIvRty7KfRXMLwVIgRlBqacjAJJ6jH/xs4Oz2kW++GPnmi56vNvGWCm+PfkC2FJ8tJIYkMdKZZYEsJbE8UpIcsCSNXFCuAgCaoNFSLYFJPIf+mPr3xjU9hzf2fLWps67449deQt8e+mMqYUVstpA0JElcLs1Ski5H8pPQiaZMhpUYywR9KRAu1Fk6ucCk2qWLPn7tJZ7apYt4Nix8QuWqrzxbSB6/Qsp/wC0PJg8KPwazPXQsEwBogy5LJx2YxF8u+vi1l9CrR7t//1P86thsIYyluIQUkqXEQSw5lgkAtEGXpVMJTFJePdr1Vgq+IXy2kGLEi2RwCoknSHnZiFfUz5IdCF4JFcsEAJqgy1KNYAOTlFePGv6vgVADKVuIfPUoO1OxPDhmJkddK2KZpKsAgDbi0lJsYFJnXXHt0kXo1aP610mWhgV0gIDOxKeluMCkutd/smHhE3Wv/0SgY1VEvlgRLAV0Ji4tJQUmRec5XrAU0Jm4tBQCk4CkIi4tBYCkAiwFANoBSwGAdsBSAKAdsBQAaCdJLd1X/m9YdN8wAFCSpJbusTwz/vCRjAv73ok/UdtyDVH/iipAZ5LUUvtnaUpLLx9fcVGTqLJvHJ0EkXtSAixNAhLH0kMth09d69RY+Muy2b7xRzyd7pHUxTXvVR7rO1Nx+fiKC/tyd5XOVlu9LddgTJnat5LC80xAGCSOpeusf15rXXeip1VL4c9XPTvmmxjzTTzgJgRLx7iJB9zEGDfRUPKsyro2c4rBbLdkT0UzsBQIg4Sy9NjFlqKKPx3qPhKy8Lbi57wPJrwPJu49EC31jk14xya8Dybqip8jrxucHS6f+a09M8lJsBRbA7o8xWRWTDdHc1vks+fsJqM0hIk8yQ6gmYSy1ME6T/S0flSyfE/nXvXCWwqf83gnPN6HnvuipZ77Dz3eibv3J7YUziGuK8qJZh1NJTNJvQZ0frndZFTMTRUtxYU5SeeyB9TFZD4BVJNoljpY51fnj+V+9G7Ld23YYrLApOF744Klw6MPR+6Nj9x7WLPieVIrlmzRJfH1VDKTeEg1yJYro1ukGWjyMCfhT0mIYgDVJJqlJ1xt6n2pLDBp0CNaOugZH/KMD3rGN3zyS8Lq6KBUPdlMc2YSD6kG7ZZiw5yCf0r4c2kHuRhAMwll6fFLrernpdjApHfrOnhLb46M37zD3Rrh1i0nWCofIgrD0alkJolV4WogjHiFGzC4dDWkIf6KdGaGMTg4JxUDKCahLA15jRcbmMQreuM2d/02d32Yu357fPVHv8KubsmW3yZFloSVmSQGLyExSISrR+LFHuTqkdJSYpiT7O4uqRhAL4ljqZb7pdjApEPnb7iHOPcQ1zfEuQc595CvxPxChLYq0ndcQp2XAglJ4liqBWxgUi/L9bI+nmus7xrrK/6AHkvtJqMk4lAcFbNOB3p/BUhckstSbGDSJ0vTVyxN5/9d8X76ivfTC5f+R4RajERfitzelCgaCNSHjjTxSS5LITAJiEeSy1IAiEfAUgCgHbAUAGgHLAUA2gFLAYB2ktRSyD0C4ogktTRxco/CZYoJLBDgogdJaqneuUdOByt5XIGJ2aEPlsYhiWNpXOUe8U8OIYd7W64hiskJEOAS3ySOpXGVe4TORwsSxeQEsDS+SShL4yb3SDm1JVADOndcmZYkaSX4TC9SGB9rhGyYMdcmmUOD3ebyDH6KnPLJYRZilvQhoSx1xEvuEd5SSZIDLi0JbZFQGB9rhPSlomZqSUuBs27lWSjELOlBolnqCJV7xLNx5fPD9x6OjD7UJ/eIaKlqDos1k5H+GMx27GhWEWuEs5S4zbK/BSRLsQ1BzFJUSDRLQ+Ye8fzlk18M3h0fvDuuU+6R+nlpuG4jhfGxRhot5bdZm6UQsxRDEsrSkLlHAn9e/subd7hO98i7dR165B7xr0nXeElrSdy2ZOOUxscaaRvxYkbyQUshZklXEspS7dd4LR/96vptrtM9kp63U4/cI6eDVblfSl4LcyUG0/EGxsNIrFFgzKn96lFISyFmKYYkjqVh3S8t/fAF9yDnHuIOnb9BX+4RxTdOYNSqB4ljaVj86YMXelnftUDiEW25R/RaCjFLupCklhYu/Y9P3k9fgSQe0ZR7RKWlELOkH0lqKQDEEWApANAOWAoAtAOWAgDtgKUAQDtgKQDQTpJaCrlHQByRpJZGNPcIfaRucpRnYO9D4h+vjxmBh/syzLFKUYnx/sZPuEySWjqF3CPl5OxYWGrJRubhaDqUkWd0JxXRZDOnEGeZRolJ7i92urwGwNLYE5PcI9k3cysnZ08OTZai81pDiGfNlByy1kx55IIG0BZjxGT2F/uJJBqJY2ksco/acg1qSSiTJjxLxV6OWFsEHjCkx1K1/cV/IolGQlka/dwjrACSoCDkeMLNC5PnBgm9MXY2GYM7amVP+SqSkNTO7rQGHSEDzkwLfrJbismciSQbKXdKEciECW0Ka38luUrB3cR+IqTgKOkmSf7/sVFPuJ0ViGEEVEJZ6ohN7pHkEA9+lvJTOEKqUAhLZfO8mVDnabgkJKKl4QUdiZ5IJ45LpqqHspQ8bRWTWRF6f6WdrRj1Jv9ESMFR0uXS/cJ+gpidFZhyBJT2YzvRLHVEOfeIJzCpWpz/rZg2TUoVUrdUthZhBCg5FKQ/BrOdaGmYQUcYS0mbp9aXIoVDbmrI/RU3VX6OIP1ESEE2yvQZbOwb7hNU/q9OOQJK+7GdaJZGOfcIBY1T0WKp4jObtKVCiyESQ6WEGXQUeUuVmxru/gbDkAlnqsInEltLJxsBpf3YTihLo5571JZrkJx2qhzlhFQhZEgpDTRSHVKq9S3KJCRFqFLgGm84QUdhj3iVO4U5f1Zsarj7q8hVwn8ipOCocCwNubNTjoDSfmwnlKXRzj1ySEYs2PulaOge9lKNWAOSA4SM38SRoeSKheQ8LUQSkqyeUBe0wrAUbU6yebidUsxlx25quPsrPX0lfCKk4KiwLCXsbOQioLQf24ljKZW5RwmNTo9GabhFFIWwi1DnpVElcSwNi1jlHiUY6GMD0vFzzNDkRkQsDbGzsYyASlJLY5V7lHAgo9bYK8oPgzXoF6G+lLSzMY+ASlJLASCOiEtLJ37xC4AedD8eEp54tVT3bQB44LOIAcliaddN547TF1bv6ym0uQAlq/f17Dh9oetmLD4LIFySxdKtJy/uOXfz6pB38L4PUHJ1yLvn3M2tJy/G4LMAwiVZLF3V1DMwOuYevd971wsocY/eHxgdW9XUE4PPAgiXZLG00OZi7/uu3fHykHKPhAJJCHvfV2hzxeCzAMIliSy95fVdHfHyqOQeCWXiiY6CnzIz/7djSpXc8oKllJJElt70+q4Me3nUc4+EYjL+8hoj/3mtnlRYA13/a5xiDUGClk6lkptgKa0kjqXqz/EW2lwD93zfDXt5QuYeCSVx1M9nctarFcDS9UcjM38rsqSj4EnjzCcnU1VUGLgHllJK4liqPiem0Oa6MerrGfLyhMw9EkriqJ/P5FSoFcDStcTIzN8iLtm/bOaTy7oqXpUs1JEbo2AppSSUpSq5R4U2V7/Hd2HQyxMy90goiaM+i8lZJ18SnOO0rItfuHfZzOCynHVIAcZYsHfQe2Gw613jzHdPei9Yc4JL5FUxYitd7xqZLKv4qyyrdJNOFqQIhU8WpEiKdb1rlG4V35y8mLffA5ZSSkJZ6iDnHhXaXH13fedZL0/I3COhJI76eUzOWsnbme+08a+73jEy86ze820FKZIyyK/4t9YcxliwR756/TyGSTF3iWUClXS9Y2QYoUJxeRCxua53svlqkWJiW8I2YIr13QVLKSXRLHUQco8Kba7eu77um16/3z90dpu7YeHQ2W1+v5+Ue9R900umPpPJWSO83Zwju6KU8mFX9836TIZhmJm5rcJaXbkzmMzNgbdrsvli0tebc5gZBU03latI1lW89Xa3FqQgm9T0odiNrwls8Mzc1hDFesFSWkk0S0m5R4U21/cjvq8HvH6/392w0P/oW3fDQr/fT8o9+nrAS6Y+g8lZLbzdnMPMKGjEl+z6wwyGYWb+oSXwOmOzUIPsJ2c1pqquP8xQrqt86/26pcDA19BSYGAYw4ddkoUD3tWvMIYPuxo/nIn8Sl7s+xGwlFISylKV3KNCm+vKsM/v9w+1ruVcRQtSGc5VNNS6zu/3Y3OPzl33kqnPYHI+k7xlMjYG3n72Ss5n173njheYAku6TDP43wovvOc25jD4GuozGMaQ1xVYvjGHmVGwK1gJ80o9v3xX3szA6scLDMxM03H+Rc5nklWQYnzJGTkZM2aajstqFotdGQZLKSWhLFW/xnt52Md3pIKlfHeKzT06e91Lpv5lJqcMXXK8QJgu/PLGwMKyV4KLXqnnl+zMm8kwDDOj4O1XxIVi4cCS+peRDjbYStfbM5iXX8mRLz9eYGBmvn2cf8Ev7Hp7RqCQ4ZUcg7QGpFFMsctgKa0kjqUh75d+N+Rz788faX2LcxWd35rOuYpGWt7q35+PzT3qdHtpouv/zWDm1pALHC34CZNTOrVWvhsCSyklcSxVp9Dm6hnyuRsWPr5WPHLSvCCVGTlpfvx9sbthITb3qKPPSxNdv/8pM7eaWODzpTOZnxZ8PrVWesBSWkkiSy8N+U6XPv2P6zUeV+WBqt96XJX+/prTpU9jc49O9XlpomvxT5n/U437VTU/DM5ZNeVWLoGltJIslpbucXXfuD/QWXe69GmUgc669l4v0Om+333jfukesJRGksXSbe0XbGdufXtz7NKQD1Dy7c0x25lbtScvxOCzAMIlWSw9M+Dc2nZxVRMkquBZ1dSzte3imYFYfBZAuCSLpUCUgM8iBoClwJSAzyIGxKulAD3ofjwkPHFpKQAkFVRbakpP030bMCBf1wkAMYAKS9vXzBFwsM7irOlKItzoVL7WTqOlMfzmPCCx0d/SpiVP+pGf686virOmP3xwhD1dtfaNefyLiFsqfo961IhBE0CSEHVLN++2lpSVkH7bXjqHYzdx7CaPq5LttvS15t/tPV2cNZ09XXW+sciUnsa/iLSl6Hc/R4kYNAEkC9G1dKN9s8GY8qOUJ0gFjpWmcZ4zKB+/9lJx1vS1b8wzpafxrH1jXnHWdOw5KvJt7ei3xJdnMMKXuovfUS/2bOL3OpdnMCkma+BrKjOs4hfIi4WV3zMv+6Z3s2IVSROaNkmxI5Ji4kJ0FC39xvhQTWhsFKCRKFrKK7po0SI1SwvTOLYZ5dGDXmHEa0pPUxvxYk787Caj/EBXDjst2cJX0CJHNu9ndrm0ZrspO/h9z9bMQM0SS9FVxM4TaUK5SUKx4JfhYnZEuuWYpuWWqu61xkYBSomWpYKir7/+uoqlfytM4/rqBJryZqmgWJ3vH9CBpfRLoMUODUFydKKHL+m1os+R9aXi0R98LWlCsUnSH4PZjtkR+Zbj1JL3peS91tgoQCtRsRRVVN3SprynOFclT1PeLK5vExa224KzlIfvSfijLbSlNnNKoPdjnaEtbcs1CP2SYEUoS6VNaPjDodwRjKXC9kzKUi2N6n0sAiSiYmlJWcmPUp4QKC4pJpVsWPIk57JwLktT3iz+hRKiom25JmRUmWF1yo9XtjyDEQe3JrMdV0DVUuT4tplTtPWlsiZUNslpyQ5UqNgRxYiX3wxkXC1uT+i91tgoQCk634mp/Z9/4brzm/Jmcd1FWFR7UaclOziGC/RdigNOvPYTFEzSq4Qc8fJdDcMwjCE7U1NfKm9CZZNQc2Q74sRfPUKG3+L2hNzrMBoFaERnSyt+O70pbxbXnY9FXdFJYMnGXEyKLDFoAkg29H+qodZkVCGibcFtUiAu0d9SAADUAUsBgHbAUgCgHbAUAGgHLAUA2gFLAYB2wFIAoB2wFABoBywFANqJY0vPXT7aWfW7U+Wvnip/tbPqd+cuH9V9kwAgGsSxpSdWv+IbvvLYd/ux7/Zo/9dt6xdFuUWYOwLoA72WqgcmnfvuUHvp8zc7Prl7vsx7vsTjKLx5bJnzr//ZuX5+5/r5Z6z/da63LdKbBJYC+kCppSEDk9rXvsx2Wz3f2+712u/12u9da/Rcsd29smu0t3m0t3n40o6ODdnk+jXEHcmDgpB5ZOJUT/lcMACIBjRaqiUw6eins7nBgyoc/XQ2uYmQcUe4oCBJX4rLQwKA6ECdpRoDkw598gx3o5FnrLfhyqEPurYsaF8/t3393PbKue2Vc09YftlamdlamdlSmalYXUNEAyYoSD7ihQw+IDbQZan2wKR9y2fxgWZ3vqnoqPn14N/Xc7f2crf2cbf2cex+jv0bxx7gBg/ecdUfsaQrVg8jSAUBsRSbhwQA0YEuS7UHJu3+8Ofc1eoRR2nLurkj3RWcu55z13PuHVz/51x/A9f/BXd958j5qkOr53Z8vUuxesggFVxQEGopNg8JAKIDXZZqZ9fSfx3u/OSo5cXhrmLuygbuygbuShV3tZq7WsNd3ch9v2nY8dn+khdPOb7Era4h4BN3cSgwxDXm2rB5SAAQHeLV0oYlPztQ+PztjmXcxVXcxRLuYil3qYy79Bl3ycL1rB7s+Li5+KX2c1hFASDOiFdLD3y+fMeSp2zmZ2zLZtuWP9uYP8eeP8eeP6cxf05z8dyDte+cuXJM940EgIgQr5YCQPIAlgIA7YClAEA7YCkA0A5YCgC0A5YCAO2ApQBAO0lqactBCxbdNwwAlCSppccOlI8/fCTjwr53oiUq8r2jehB4njHDHKvNUPteY+2UZ8Cjl6zTkbSWfrVvrdLSy8dXXIySqFOyFJmAPqkvGhW/mzxmfyzA0oiSpJYeaK7gxh/x+MYnuPFHvvFHfWcqLh9fcWFf7sHmP+u+hQGsmZIsCGvmJL4cVYevVAVLI0qSWtrc9JcxbmKMm5g5/733/rR5zPfovT9tnjn/vTHu0QPu0b7df9F9Cx2sUzaBbtKApfFOklrauKvG+2DC++Bh2abGmfPfu/dgYub898o2NXofTHgfTDQ1VpNWVOQz8JNOxUGpGLkiLDfm2mRZLWaVmKUUkzlTTHshHuvIMFg8lDGVW7KRYpIJ67gW0QLia+m+SFvHJkWJ6VCS/7dAzZZsfugeMn0KLA2QpJY27NzsuT/huT/huf+Q93Pm/Pc89x/yS778chN+RUwsA39hJrhQzECSLpdYyijOEtE+024yMqEsLc9A9RAbxVaO9KXSzcC0SLZU/rdAHgolmzcvt1TcDHGntKRPgaVOR9Jaum3HlpF7D3l4Rcs2NY7cG+eX1H9uJazIdxfoBRhZGBI2ykwl9wwX4GIN1ZfKl6OqKCrHWkpqUa0vRQorQ6FIFar972lJzABLnY6ktfSvdXVDnnEeoS8d8jzkl9TWb1Ndne9b+CMpmpZKCiNgLBUO65hYqjQQLI0mSWpp9dbPb90Zv3VnnPfz1h2Od5VfuKm2Hr9iW65JctoZeCHcIEHOvsKxlDT+DFSIiBq4xqsY8WKsVrVUbcQbWIu4L/hQqNAV8pthM6fgthYsVSNJLa38684bw9zA8Dh/jffG8Dh/jffGCHdjmKva0kBaUbwYEzDTbjIyGdnCIFA4qsKyFI1ZQq7l8KAjTPF+KfnqkSZLiS0Kl8eQPCdFqD82MVzcTtnlqBRTG3qmKvxdA0u1kqSWrtto6x/i+oc49xDXf5vrH/L13/a5hzj3bZ97iKvYrD0wKQpfSxGZ2xh0twiEQ5Jaaqmx9w76ePoGfX2Dvt5BTni7tsamuaqIWGo3GSU3SKJ/ezP2LQKTJ0ktLavaXbZhd+mG3WVVu0ur+H/38AvLNuxeXaX9kI1QX4qMIWMkTOxbBCZLkloKAHEEWAoAtAOWAgDtgKUAQDtgKQDQDlgKALQDlgIA7VBtqSk9TfdtCAOdw42AhIUKS9vXzBFwsM7irOlKItxoZL/Am68NLAWiQ7QsPdRy+NS1Ti0lm5Y86Ud+rju/Ks6a/vDBEfZ01do35vEvIm6pzZxiMNsn9eQQZpVgbfp/nEBCEi1L11n/vNa67kRPq3qx9tI5HLuJYzd5XJVst6WvNf9u7+nirOns6arzjUWm9DT+RaQtFWZdRMRSwixQAIgQUbT02MWWooo/Heo+olLsWGka5zmD8vFrLxVnTV/7xjxTehrP2jfmFWdNx56jqqUQqST0BKaAIJO/yIWlTShXUZlCjc7tspuM0jrFVRRTwABAShQtdbDOEz2tH5Us39O5l1TsWGEaxzajPHrQK4x4TelpaiPekClEhNkelmxZhphQWBHnQ2gCNUqsDQ03yEYclscjIDPIlcUAQEF0LXWwzq/OH8v96N2W79qwxf5WmMb11Qk05c1SQbF6qBQi7LRJiXhIeWycT8gm8BEkTgemnw/+FQhRDADkRLkvdbWp96VNeU9xrkqeprxZXN8mLGy3BWcpDzmFCGepGPTOOuWWEmdCE5uQ1Cbo15ZrYDDxCEKkCPIrXIoCAEiJoqXHL7WGPC9tWPIk57JwLktT3iz+hRKiooQUIkJCT7kJc1FXNuJVxPmEaILQr1plASVIZ2vMzBBSVEjFAECKztd4a//nX7ju/Ka8WVx3ERbVXpSQQoRP6An2cpg0Z0blWo6iCWQVWW3yAFuGkaQHBZdLe3JcMQCQoPP90orfTm/Km8V152NRV3QSRPa7GOS1wagViA76P3tUazKqENG2IntjU14bkmEJAJFEf0sTgcD1YehIgagAlgIA7YClAEA7YCkA0A5YCgC0A5YCAO2ApQBAO2ApANAO1ZbGWe4RAEQHKixNkCrV41sAAA1CSURBVNwjvf8bgUQFco8g9wigHcg9gtwjgHYg9yhyuUfaWseFMyDVYpMfpHPiQjWhsVEgboDco8jlHmFa11KhdCOFACSypao7qLFRIJ6A3KPI5R4pW9dSoXwjcWrJ+1LyDmrdCyCegNyjyOUeafkboawQY6kixCwsSzXtBRBPQO5R5HKP1FpXqVAx4hXjXQJGIalIIXdQY6NAPAG5R5HLPVJrXa1C/NUj5JIPkooUagfDaBSIGyD3iJbaAICE/s8eJUzuEQBECf0tBQBAHbAUAGgHLAUA2gFLAYB2wFIAoB2wFABoBywFANoBSwGAdui11OM63Fc3zeM6rPuW6Ib4KK8ez99eWlO78s29lxTLT5mrK9a0s04He3hvRdbOU3r/LyUB9FraVzfNcya1r25aiJLSSdjij/iErXQ5fqal+CStfg+jY5/RjbWlR7ZnVa/Mqt5ePyVLT5mrVxJ+dWlN7cqs6pVZhAL1OwO/xTWtVoN8xcCOBDY1vtE/94hEd9G0vrppobtTeVRCYLklm/wIvhx0HondZNQ+YTqy8qjUFlNLQ3SPISw9vLciq7rCvBMvcP1OQS3MX4HDeyuyavcfDrSy0nwEswH1OwXxLq2pDZQhrChuanyj85wY5u3Dc1bsnlW0P3XVV/+8pmNaRdcPqr9l3j7sEEa8ral9m1S7U4KlDmumVksVE2U0A5aSCpN+Vb9TNBN97XSwqHXqlaOtvLn3EnlFsFQdjblH/5S1Agv/2+6iaZ7WH7sqJ2Gp3WQUJqyE1ZcqVxebCJWBhI0gSjFZA1PJMqxilgJuMg12xKuIO5IMyxUxSJhpa2iZzAzcfqGbIVoqOfSF8SQ6jER84Eeh2+uD9RAda9//ZnXFmna09xM4ZUZqcB7Zriggp34nv4WkFcFSdTTmHjlY59PVb5HgB72uStVBL/68VJ6BIv5gJ1gqvyYYOYIDyUYhMpBwgUMs4g/fBN86PogohKXi5gnZSPIYJLspG8lMI60r2y/pZuAsRYap/PmezNJTZsVpZIhutnpllnJA277/zbAsFQoQVwRL1dGYe+RgnT8omp9/eIWSHxTN97gOd1umsYd/7LKQu1NcX4qclDq1DxcDXWVgRcG68ozAIa6agUQMHBLKk17jauMhBakQsymQvRD/6CjjHWT7JQFjqexYl414t2NPIDWMeJXnpeH0pUe2I1039KWTQ2PukYN1/qBoPgkH6+wumsYe/nF3EdFSJHmIFI8S1kmduCKfhS1NNnISM5DwgUOxtbQt1yCMpYnrkvYrQLiWVle8ibsUTLBUWpXcQ8lv1c5LJYqqrAiWqqMx96gt70V1+EFvdz5p0Es8/7SZU/BXlZS05Rok4SZBf9pyDcbMDKP4VjUDCRc4FFFLpZEuIcLKyFFJiv2SEmrEy5spHfFeWlMrv60idUzoNiX9Z7BacaEWwXAntKQVwVJ1NF7jPZ777OXtH5A4nvusx3X4TP40tvmfz+TLu9NAlg9xZCsc2bL7pZijExklyrN20R5SLQOJxV65CdtS8YfPVUJNyxYG1YRsUaQGtagkxX6h4K8enTJXC3cj92Ov8fKXl8xHxNNO5JYmImf7/jerZXc7UXXFe6HY2zDolkhvq2JXBEvV0Xi/9OCiJy+U/4bnW+mLb8t/c3DRkw7WSbI0BiRqspHKfhGu8cYnYGlEaP71D3n2/vqHzfOD/PqHzfMDSxys80z+NJ5Yb16iRsKr7pfw7FHwlom+Wyu9A0R6nkllR/TfhQhA7xOC+sIPbhMvulbTfgVGlXHekSYQYCkA0A5YCgC0A5YCAO2ApQBAO2ApANAOWAoAtAOWAgDt0Gsp5B6FRu07hTWDfFEqQCf0Wqoh94j05dbIrM7ooiVRKZqApclBXOce2U1GxmBMkT2SKnkCProopqTE+HGliFgKUE9c5x7ZTUYmwyx7KtVuMqaYzLE5fFXmmsUEsDQ5iOvco4Akkhke/IGLHr7yCWWSTCNkGiohtcgcTlKRYsapdF1SfFFYrSN5S5Ihw2RqMJjt0r8sykqU4Q9ArInr3KOgEtKMn8ASYQq4MgoIE8JCTi0Sk4o0zNsOUSEpvkh767K55mgwWhg1SP7iiJbiKknUiUFxRVznHkmOfoPZLuonHQoqeoPg4SgcgqFTi+wmTLgB1tIUUxupQkIwivbWZUNcdH8nVwOr5T+BwU6dB2JGXOceyWOHTMLQVzgW8VFAgUEynwAkKS8hfEsJfyYI5ZU9f6jWVSydXA2s1FLiWS7pcjoQC+I690h5EqjIs8RHASmzf0KmFmmw1JrJMOoVkuKLtLcuT11DT6rDr6HcJDkvxVWCSXsCYk0c5x5h4siEDCRcSC8SBeSUCeNgQ6YWES3FXcghVUiKLwqndXFcKr2Urb0GsWTAQwP6x0teCSbtCYgxkHsUS6A7AiYD5B7FErAUmAz0PiGYiIClwGQASwGAdsBSAKAdsBQAaAcsBQDaAUsBgHbAUgCgHbAUAGgHLAUA2tHf0nOXj3ZW/e5U+aunyl/trPrductHdd8kAKAK/XOPTqx+xTd85bHv9mPf7dH+r9vWL9L9PwUAqELnOTHnvjvUXvr8zY5P7p4v854v8TgKbx5b5vzrf3aun9+5fv4Z63+d6yVOHweAJEHn3KP2tS+z3VbP97Z7vfZ7vfZ71xo9V2x3r+wa7W0e7W0evrSjY0O2yuqKEAYkWIiYZgQAcYbOuUdHP53NDR5U4eins4mtYCJ5pMFCyowfAIhDdM498vv9Q2e3uRsWDp3d5vf7rxz6oGvLgvb1c9vXz22vnNteOfeE5ZetlZmtlZktlZmK1ZWRPIrwBAjCBOIfnXOP/H6/u2Gh/9G37oaFfr9/8O/ruVt7uVv7uFv7OHY/x/6NYw9wgwfvuOqPWNIJlaCRPGApkIDomXvk9/uHWtdyrqIFqQznKhpqXef3+zl3PefewfV/zvU3cP1fcNd3jpyvOrR6bsfXu+Q1YCJ5ZBM4FRk/ev93A8Ak0PMaL9+RCpby3Sl3pYq7Ws1dreGubuS+3zTs+Gx/yYunHF9ia1BE8mDD5hUhQwAQV+h5v9S9P3+k9S3OVXR+azrnKhppeat/fz53qYy79Bl3ycL1rB7s+Li5+KX2c3hFASBJ0PPZI3fDwsfXikdOmhekMiMnzY+/L3Y3LLTnz7Hnz2nMn9NcPPdg7TtnrhzT/f8IAPRFT0tPlz79j+s1HlflgarfelyV/v6a06VP6/4/AgC0oaelA511p0ufRhnorNP9fwQAaEP/p+0BAFAHLAUA2gFLAYB2wFIAoB2wFABoBywFANoBSwGAdvS3FHKPAECduM49iupXmMH3owG0ENe5R2ApkBTEce6REGgUmOqN+bZ5lRgk6dfdy+ORyuWVA4B+xHPukaS7s5uygzpZM9GwMlkMEiowoq4Qy0KaUA4AuqFz7tGhT57hbjTyjPU2hJl7JBeJECkYLCALWBHeWjMZ6Y/BbAdLAXrQOfdo3/JZXF8d11d355uKjppfh5l7hIjUlmsQ4gLFbEHNlmKGtWApQAt65h45WOfuD3/OXa0ecZS2rJs70l3BuevDyD1CRUJMs5lT8H2p2ohXLGbJxq4LALqh8zXeXUv/dbjzk6OWF4e7irkrG7grG8LKPQoMcY25tsApKMMwjCE7E9+XsugVJunVI8yVJ7Ry/T8nIJnR+X5pw5KfHSh8/nbHMu7iKu5iCXexNHa5R5ADCsQJOj97dODz5TuWPGUzP2NbNtu2/NnG/DnRzD2ym4wQew/EH/o/IRhTkJEtKArEC0lmKQDEIWApANAOWAoAtAOWAgDtgKUAQDtgKQDQDhWW7iv/Nyy6bxgA0AAVlu6xPDP+8JGMC/veiStRyzPgyxeB6ECFpbay2UpLr7YVx5WoYCkQLWix1Df+SMbVtmJeVFuZykRwegBLgWhBhaX1q54b802M+SYecCK+8UcPuIkx30T9qud030INgKVAtKDF0tGxiePOvuPOvp7+O6NjEz39d/i3o2MqliKxRtJJZ5LgIkmiSorJGniUN8MqpjTInulFZqg6LdkMk12uYV2wFIgWVFi6ceXzo2MTqYtrUhfXLN9yYnRsYvmWE/zb0bGJjSufJ6wojTUS446k812kyyUpKtnlDhbNdhCxZDMGsx2Z3RZyXbAUiBa0WDp872Hq4prnlmx9bsnW4XsP+Repi2uG7z1UtxTpP4Nv5RNHhWJoChnptQDfG4csL7wGS4FoQYult+5wfEeaurimoumc8HrQMx4JSwWRwFIg/qDC0jXL/523tKLp3Kuf2lIX17z6qY139dYdbs3yfyesaDcZgyNPycmkYsSLSfTEvW7LNQQX8iNemzlF67pgKRA1aLG0fyhgKS+n8KJ/KISlGdmZiqtETrWrRxostWQLcUfCHwKwFNANKixdlfdC/xDX3HHtjOv2Rfdoc8e1i+7RM67bzR3X+oe4VXkvEFaEmD8gKaDF0l7W18tyyL8iYCmQ5FBh6Yql6eoQVgRLgaSACksBAFABLAUA2gFLAYB2wFIAoJ3/D8eEwkgV4XFkAAAAAElFTkSuQmCC" alt="" />

package aoptest;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; public class AopLog {
// 方法执行的前后调用 public Object runOnAround(ProceedingJoinPoint point) throws Throwable {
System.out.println("begin around");
Object object = point.proceed();
//System.out.println(point.getTarget());
System.out.println("end around");
return object;
}
}
/**
*
*/
package aoptest; /**
* @author Administrator
*
*/ public class AopOperation { private int num; public int getNum() {
return num;
} public void setNum(int num) {
this.num = num;
} public void queryOpLog(){
System.out.println(123);
}
}
/*
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ package aoptest; import java.io.Serializable; import org.springframework.beans.factory.annotation.Configurable; @Configurable("configuredBean")
@SuppressWarnings("serial")
public class ShouldBeConfiguredBySpring implements Serializable { private String name; public void setName(String name) {
this.name = name;
} public String getName() {
System.out.println(this.name);
return this.name;
} }
package aoptest;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith; import aoptest.ShouldBeConfiguredBySpring; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.ContextLoader; /**
* @author Administrator
*
*/
//@ContextConfiguration("meta/springConfigured.xml")
public class TestAop { @Test
public void aopTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("meta/springConfigured.xml");
ShouldBeConfiguredBySpring myObject = (ShouldBeConfiguredBySpring) context.getBean("configuredBean");
System.out.println(myObject.getName()+",wj");
//AopOperation aopOp = new AopOperation();
//aopOp.queryOpLog();
}
}
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:spring-configured /> <aop:aspectj-autoproxy /> <bean id="aopLog" class="aoptest.AopLog" />
<aop:config>
<aop:aspect ref="aopLog">
<aop:around method="runOnAround"
pointcut="execution (* aoptest.ShouldBeConfiguredBySpring.getName(..))" />
</aop:aspect>
</aop:config> <bean id="configuredBean" class="aoptest.ShouldBeConfiguredBySpring"
lazy-init="true">
<property name="name" value="Rod" />
</bean> </beans>

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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>commonproject</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>

控制台输出结果如下:

十月 19, 2014 8:33:57 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@15f550a: startup date [Sun Oct 19 20:33:57 CST 2014]; root of context hierarchy
十月 19, 2014 8:33:57 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [meta/springConfigured.xml]
begin around
Rod
end around
Rod,wj

spring aop例子的更多相关文章

  1. 一个简单的Spring AOP例子

    转载自: http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html 经过这段日子的学习和使用Spring,慢慢地体会到Sprin ...

  2. Spring5.0源码学习系列之Spring AOP简述

    前言介绍 附录:Spring源码学习专栏 在前面章节的学习中,我们对Spring框架的IOC实现源码有了一定的了解,接着本文继续学习Springframework一个核心的技术点AOP技术. 在学习S ...

  3. c# spring aop的简单例子

    刚刚完成了一个c#的spring aop简单例子,是在mac下用Xamarin Studio开发的.代码如下: 接口 using System; using System.Collections.Ge ...

  4. 峰Spring4学习(6)spring AOP的应用例子

    一.AOP简介: 二.AOP实例: 三.使用的例子 需求:在student添加的前后,打印日志信息: 0)spring AOP需要引用的jar包: 1)StudentService.java接口: p ...

  5. Spring AOP 学习例子

    http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example     工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. spring aop

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...

  9. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

随机推荐

  1. underscorejs-each学习

    2.1 each 2.1.1 语法: _.each(list, iteratee, [context]) 2.1.2 说明: 依次对集合的所有元素进行某种操作,原样返回list.接收3个参数,list ...

  2. Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )

    Asp.Net Mvc: 浅析TempData机制 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0 --------------------------- ...

  3. 个人Python常用Package及其安装

    为了避免每次重装系统时又要东翻西找,现在此记录一下目前常用的Python包安装过程. 1) Python: 2.7.11, 下载地址:www.python.org.由于个人喜欢使用PyQt4(其实是不 ...

  4. TCP回射客户程序:str_cli函数

    str_cli函数完成客户处理循环: 从标准输入读入一行文本,写到服务器上,读回服务器对该行的回射,并把回射行写到标准输出上 读入一行,写到服务器 fgets读入一行文本,writen把该行发送给服务 ...

  5. Linux——搭建PHP开发环境第二步:PHP

    原文链接:http://www.2cto.com/os/201511/450258.html ##### PHP 编译安装 #### [root@localhost ~]# yum install l ...

  6. UIAlertView的使用方法

    UIAlertView的使用方法 1. 最简单的用法 UIAlertView*alert = [[UIAlertView alloc]initWithTitle:@"提示" mes ...

  7. 转:7个鲜为人知却超实用的PHP函数

    PHP have lots of built-in functions, and most developers know many of them. But a few functions are ...

  8. poj 1364

    http://poj.org/problem?id=1364 #include<cstdio> #include<cstring> #include<algorithm& ...

  9. poj Cash Machine

    http://poj.org/problem?id=1276 #include<cstdio> #include<cstring> #include<cmath> ...

  10. CLOUDSTACK接管VCENTER,意外频出,但最终搞定

    没办法,第一次吃螃蟹,总是经常住. 还好,我有一颗不肯媚俗的心~~ 但二级存储,和 存储的性能,也必须纳入考虑范围了.