Return-Path: Delivered-To: apmail-jakarta-velocity-dev-archive@jakarta.apache.org Received: (qmail 24487 invoked by uid 500); 9 Sep 2001 13:25:01 -0000 Mailing-List: contact velocity-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Reply-To: velocity-dev@jakarta.apache.org Delivered-To: mailing list velocity-dev@jakarta.apache.org Received: (qmail 24474 invoked from network); 9 Sep 2001 13:25:01 -0000 Message-ID: <004f01c13932$d026b430$0d01a3d5@diablo> From: "Attila Szegedi" To: References: Subject: Re: performance questions Date: Sun, 9 Sep 2001 15:24:53 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_004C_01C13943.92C10580" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------=_NextPart_000_004C_01C13943.92C10580 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit (I've redirected this to velocity-dev, hope you don't mind) Here's my stab at having Introspector detect class reloads and discard no longer relevant ClassMaps. Right now it might seem a bit compex, as it discards ClassMaps at class loader granularity. However if it is not granted the required "getClassLoader" RuntimePermission, then it falls back gracefully and simply clears the whole cache when it detects what seems like a class reload. I'm including both the diffs and the complete modified files (as Introspector underwent a major rewamp, I feel it's better comprehensible from complete source than from the diff.) I've run it against the test suite and it fails on single test, but I assume it has nothing to do with these changes: [java] There was 1 failure: [java] 1) EncodingTestCase(org.apache.velocity.test.EncodingTestCase)junit. framework.AssertionFailedError: Output 2 incorrect. [java] at org.apache.velocity.test.EncodingTestCase.runTest(EncodingTes tCase.java:170) [java] [java] FAILURES!!! [java] Tests run: 1, Failures: 1, Errors: 0 [java] In meanwhile, I'm thinking of making a test case specifically for this functionality. Attila. ------=_NextPart_000_004C_01C13943.92C10580 Content-Type: application/x-zip-compressed; name="diff-introspection.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff-introspection.zip" UEsDBBQAAgAIAOd6KSsZOand6AkAAIYhAAAWAAAASW50cm9zcGVjdG9yLmphdmEuZGlmZtVZa3Mb txX9HM3oPyCczJiUyKXoR2LRlkeukrRO7TgTp820nX4Ad0EurOWCAbCkZY3+e88F9s0lRbXJh3Ik PnaBg4t7z31h36SR+DRlH/k115aP1iJRobQ3Y6PD8Ue+5mOlF2O+4mEsxuXNzMpk/Ca1WpmVCK1U ae2X0gFNPD66+N9fx0c/X31gc5mIKRvHainG4dqsslkiSboHiyz3izxcHx9pYbUUa5kumMaHwUA2 Cc6PjyI5n7NRxkYaP1nHdkej0R+gxi8en51NxmdPxmfP2GQyffp8+vT8CyfQ6enpH7feOf7Y5Ml0 cj59cnZ8dHnJRs+eDr9hp3h/zi4vj48YO2EvY2tX0/F4s9kEfrGA1n0VuNtjvEMtcrlS2jICD0iC 4C/cxJbPEvECm6jfNSLMNAQNTtp33Dy6CkBWv5HwdBFoMU+wg+CdsLGKXuwdomBHKfQLv6fnz4aT x+z0+dfDx4/LXfE0Ygb6EBGbK838xUueAVyzl5zFALvoLblMrJp+XPP0801yuRJa8pUNQrXsvfqB G9AGd9g/b5KXY/5qP8ZMzS43Ql+L1E//k5qxd+GvsdRWaD/9dM9081ksRCT55VwLQdeCOOu9em2h M84++Js1IdZCO1Z/9Saasg4fILqzDtaxfKvsu08r9lVpYe+NLEy4MQ043LuF+RleKy3X3ApolVuM LQngZ3mzveMrwy5YKjbV/f6AiNCBMJcpTxim7EHAz0Pnv1U8glYOnDxTKhGwbcjTPwt7VQF4frop fmj+4zb/pNd4zL5XOhTMCmMpyhDFeosGTo/9nKVWLsVPQi+lIWsFTYhfYmnYRiYJM8JuC8KsYny1 0gqSk+BrnmSiDtFc7yfsDyEWPOnT/t/PPsKA/UFQjOoPSlXc5Z9kftKMN36uGG8GAvff+m42C4fs A4Iq9prypRjm+P/6N1txzZdmkGPRy8ZabQwYFooVxaf81q331snZ2fAZ3HUymQyfPsn9tfXqNRhd iTKYMi/N0gt5LW7YhhuWZkkyZT126oRjtNES664N7gNaaYeT+i+41ps5NgDD4M/GAiTTxjKyI6wk aP/urmNccyJGg05akK14IeES7CRyVJMoMjUnujDFpGUyrXmVmufjKyQTNCaOa7/knPW/bLkR4lBq uUzNX8VNPxwMasNv60BOC60LEOutsoakgDkFjyCHXMSWzQTbxPLzZ68JrbJFzGKhxXAbwCi2ESwC i/EGjokRckt4jYiMVHY9JJwwZipNbrDztUrWwnSA3KQhlknlZ05cwiRo2dKKj6BKYsCIvCtg7PVa yagDIVIka5StQHKyzUZpLE75AfoxVmehc2HlCA2jb2QotlFgGzAdDpIlXDPN4fyYHkkSantRMs2W itk26i8xKXAIVYFfc5VcG2b4DfbHbUtnI9IZ5OzanzDpI4uoFwpjuJbQJ+1xxM1IfCIfgsYh/g9I DIy8sQ2wzBIrRwg0IUgWxjIVpM5vc9glvxZE33RhCNZ0WXqWIU1nxpayxCJZMTjmMoOF8XmjskcQ YskXQAfVtyE2KksiWpbrFEXbSGnENGeXOYTPzQRVB526rl+oGIN991s+MajFTxdKqvSDLxcukryo jamD7cOqZwd61SD7xTqDtn8isPVDev8RUasWnyun7lc4XrZBa0hrLR9+igXh9G1IkRjRCrjtWHB4 ONmShJIaMqKLeD54aZStFDxGBGk3yl8WhsV8LboRxG8Z0jq9UZEXuZBu4LDGZEvRgHXu0AVBzu2y EOMbuFNIRS35wFw50ThSbiEHuVo3CEnoUoDh5bqJS7Ud4/Mk6Rby3y9Ku7gUXN3pbxmlsHVt9peY PujIjF3GqjhQ2WqVgVpDVwnV2NC5Mr20WKq1+O63TPodXnnt1EXaOReq0iLPe3nG4qsdY++h6tb4 u9a1+u+7mirQ8GWIG6gIo7xUoM27QiWvT+rS177mE0tT1RDa00sB8q/jkzJpnrDvMa/K+oi23GOW 4ao29tJhFpRx7yj1jOA6jLdG1YouCoV+ga1RzWpMoOMwxSZP2JXTtClEKmsSqq/gYnnZP4QuFtLQ 1LwWAfcrEMcE51gYi07UIWLcRtq44RxBYaIyMLcq77zArGn60Aqzq46vgniTTznmoCo+RzvifuE0 jVDNOmM10WDUSZ1i4D4C7U88TU+tD+/07SptDEuYxqzSTL/CQrU+oQXecoAaz0fNLsHRvcjWV1SU GCrGqBRzURL1w1pGCLO+kKLuPRFLkVoi3kKuUbZ58lYEyRuCr8+Hz9APfDMZnj9t9gN3rbq942su f3/JXub4JkhEurBxR7tzWm6koPXrisy0CaeGR63k41gvbVn0F3NzvvuOQTTaZuoeUmXZQvOUyq9V 0ZzB0ysAHlLF1vAeuCHVUDSZSq6y3SNn6qI/1by7TV05wVYL6/JNq+PcV9DUG9MwAWF3dp/bRcdb hJW8R6dv8DP6HNS7du9fyc4SyE/sroFud9VE+WrkWm9liiKaLnSn34YszsGSYQWyNeWuq9yjkQGP op013d0BhPzZZWLjapQyTsCLtMTFuVbLrcOSegUDTqGVLPkQ+fDcWcRQWe78ljJ9VAv0bkxf53LQ kFIO38kWc4p+FnFAwCoVVx/qEU1HaDuYIUMgOXpZoAqJLbp0dJh37Kpt/o+cw2+hyz9QfFVzl9SC kZLRpJOjtMa+QW7nzhS2qE4dZWV+fdsz0KEnoi9tEHPzo/gE39ndf1T5KZcW01I/p8sHqmbkdB+W s3y/Ecq7vAamquqbnN+u0s+rMDTa1K9H4M8nEWaudkGNVgGUdIz8sJk/ojDK1ULoyrM5KiUJ9hFf XWtQTW5ae/vcD1130xeK0rDmL3RSIiPqnXMJ81OodJdo7riJV0Y+KVuabOVzGYUQOEJ47ZtrDMZ2 UgGcYgtuiRL/Xneqb3Inw/2p7O/oXEWGrw9/7QLGlSKlJgmScKRqInRwlHJANeK1O0vod5H5dkfn kh+S+qKU6ax79j6EQ/b+ECx31Kpv7hlxH0K9BgyaRu3vbPl2pcGtyMBtGPc/5E+EygNhJga/g9R0 2PD+2/dT9jcjWPF4DM6/cOdFgkfUL324wddlILQODoCsjQb1U5uk/d4VTymkRmiqQts61ZiJkGdG 9A6AxuuU9djfCzkRUUnOKqyUboho9Q+VPQDTxM69XWZtxyLtYxFblcHoAcAIE0ovioeChYr9c7zG U9igHt0esACimzvnc7FautDapeegdy8Ti6cyCV9QKIWTIZJ21deBe+xyGJp7NuMsvF3OWOWrknqX fA9arJK8cPGn2LJglWlud3gYXo3l/ogbePAtWHrk4PI0OONGmkPIv/0A6oLNkTPEi8NDSPv49KFB Y9+9jmrhv5Cia4W7h1QozTXKQyH8/wdQSwMEFAACAAgAFXkpK8XbL8BNAQAAMwMAABIAAABDbGFz c01hcC5qYXZhLmRpZma1kdFKwzAUhq9XyDucS12XpdmmuIpQGAhDdqNPkDXZmtk1JUmrm+zdTbpY QfBC1EPhT3L+9P+SLCsuXlPYsWemLcOtKFUu7YEYnZMdaxlRektYzfJCkL7ZWFmSZWW1MrXIrVQV WZTMmBWrx34Tiu5+Xyh6XDzBRpYiBVKovSB5a+pmXUpP9mNc+T3uqEWRFlZL0cpqC9qJcSagYzpB EZebDeAGsPZz+HJQjPEfX95gkiSUJDeEUqDzNJmlEzo4o8Rx/D9hc/cBnfqwqzmKsgwwTaaja4i9 0BlkGYrA1yloEDIcOqxuOITMXWKjK7CFgNyngFrvXCq8FMoI2AtbKG6Aadf2mBzWB2eWBvYOp/8P CaMOFLbCLjpzN724DM23D7urEOsij8fbsH4KGqTjhMB5LysODFYdDzTGP7pnPgM+iMOntdaqlVzw cb+EondQSwMEFAACAAgA2AMpKxdqnp9YEgAAt0MAAA0AAABDbGFzc01hcC5qYXZh5Ttrc9u2lt87 0/+Aeu7UUqLQSffuzG7cZCzLcsKubXn1SDabyeyFKciiTREqQVpVMv7vew4eBEBSj7jb/XI9bSyT OA+c9zmAljS6p7eM8Ow2oEsazVnwwBIexfk6KPI4CeI0z7hYsiiPeXr84w8//nD07McfyDMynjPS lRBkxGf5imaMXMQRSwXrkA8sE7CevApe4WIJ0OPLdRbfznPSitrkl5cvXzXiOOdFOqVILSCkmyRE wgiJImOCZQ9sGpRIh2waizyLbwqEIDSdkkIwEqdE8CKLmHxyE6c0W5MZzxaiQ1ZxPof9yt+8yCWa BZ/GsziSZDsE2ViybBHnOZuSZcYf4il8yOc0h38YIEoSvorTWxLxdBojkOIPARcsf12y9yqocCgI nxnWIj6F5YXIYV85BZYRN73hD/hKy0pigZ+U5yDbDiyJBUkAIeKx1OU2fdaAapTQeMEyK61f6uwA WUc8hh3Y87QAFv8ijoCqQYNLpjwqFizNqdHhEaiHw5uMLGjOspgmwqpB6g9eGgzufuxW/yWQ1sXS 6QswiKxCI06jpHCRwZ5dPB0Szwx+mq47Si4aqrIt8KCUrxJ2yxD/awMGPwdjlI2SZQktQP3a1KcM fW0JbNys3R3hz2a3IK15ni9fHx2tVivjs+C+R+3gwCDoJiC1FESXrLWCfCZBrGtCl0tGURVyPyVT cS5YMusYVPFManIFygBuMyKKCAUWZ9MXS5rl6wpmAXaRLWiSGPxWI39XGknpAmRwgB9/o/eAgpLr jN9BgDnokIMPOvjAZyR7UBGD4cpK40CpBqyR3DD0fbA6jmrnmcCwhuJf8JwZNQiQehZDDDGoZvBe yagUgY4MABJjnMgwDqQqIgghA9O5fW7w2NcdskwYFegzYG+geaWkE6srK5R/DXD3HmNNHKG+9BYj EC4rJXNg3TGTq8xzX71xpuXeuLX6FtCXcxuc32W8WFqmx+/DERkNzscfu8M+gc/Xw8GH8Kx/Rv7x j+4IHhweku7VGfz/ifT/63rYH43g3WBIwsvri7B/JpEA7LB7NQ77ow4Jr3oXk7Pw6l2HnE7G5Gow JhfhZTgGqPGgA/T6BtQBk1gG5+SyP+y9h0fd0/AiHH+SlM/D8RVQJedAtEuuu8Nx2JtcdIfkejK8 Hoz6BBiX8GfhqHfRDS/7Z5BtwisgTfof+ldjMnrfvbiQlLvX3R78Kvd7PphcnXXH4eAKtiSRhOMR 6Q2uxsMQuB8MR+S0D/x3Ty/6igEQw1k47PfGuFP7qQciA7YvlK+Nrvu9EP4AifVhr93hpw6KDPCO +v85gYXwkpx1L7vv+iPSqktMInGlBkrpTYb9S9wNiGk0OR2Nw/Fk3CfvBoOzESIf9Ycfwl5/dEwu BiCtwblEMhn1O0Bp3JUMABqQJiyBz6eTUSjlGl6N+8Ph5Bql0CbvBx9BaMBrd4KKBgUo3VzJrYMM B8NPyALKROqoQz6+78PzIYpcSq6LIhmBBHtjZ5lCM4TtDMfOnslV/91F+K5/1evj2wFi+hiO+m1Q azjCBaEi/bELdCdjYymoTeBQfXRMuCN1TsJz0j37EEpbVYvBVEahNistnNGk916rQToEefN/8GM9 y/N6iB8CkpKsGR54UkA0gTyNUcXm7wWFhATpYwFpSqKIIQNDoiwwZ4Ij37A5TWYVf24utjCoLbgO snGK9YBKODzdAVxGPMEU9K/NKeqtFNkRVpHxYsmznNzRB6oKzUu6PG54fAECaHr+nop5Tm8SdlzF ltD0NsjYLIGUElwyiHfT420rZOnHMl3bKj10IcziXkFsXgHsiQU+EUrwFdaOBGobgfWUyGkaMWUc /8HWgnw7SeL03iGtmHok/AbTnkD1UVQr1J8s1SKflQXBQq6W8bssqlQwx4ILicJHWZsu6D2kwKVc AckZ1kAZIGzcPqEFoMrIr5TMYftvDhY0TnL++u6Bpl/XyckSS61lHkR8cfD2NyqAD3hD/nud/HpE 325FccNvTlYsu2epgj7lN+Qy+gh1ArCwE1p8hfJhGtOTWcYYPgvmxcHbbg6KpmSkXu5EcgtZbnHC lzlPQd4sSFl+8PYdpr5LepsWArfzWxZYPA+6SflbOH1NeihIsMEA1dR5wM7lF9mkHL38t6NXr8ir f3/98u+vf3lFJBnS/2NJ/qaNeVncJKX+DZ4ff/gGrzGpQlIHvRKBpWdEZlBsJ2Yt2tglZFzyjTxu WW3X9TAV/c9lCCH4DUnZyr5qtY+3YBhISyOD098g92hQ9UzCKUgwfqI+YbcmOVyidU3RB7i0KoxI eQbVCsjf1FpUlEC45IZCzJK+gX8pUwfLlOWDXHVk6BlOFSkQydevLi+WFeOKChm0cIDcSqJD7tla 1dDKVUrA0mWgCIN4CO3ZbaGKVMM7SAd2l7u8uZyBHjVOxYMSXBl6HNmVEHK1hcNPCqp840u8ZHYE YWNKs6kr4ypbytCMibUcwbXVCm1zqrGKRSDfAQNGuOblki+LBPi9tJsrDUhbYp3DE2hTi0zlAmXA KoBBc8AF0xsWsgmW0VO3NbGoqh9/K95vWS6JT+WfrfouNEmX/438naMyqTG5QmBzhrwqxiAUlytN L1kyVb654PzetERWgzLSp9BV5Nka68QZPIHc1ynB4vwwSQiLZc8KRTr17BPwreYx9E0R5sgVK8EE ZCXolG6h7Ie4Le1aYZIo1EYseAmGaDqAx0jHMeByDfAIDcMcZSDdEdnFXaUIJ1sm5RRInpdQ6Cw2 4TlSME2JY+FBs3Vq8aNnqY+tEZQrwAZ6Y0dHnc9fVIISdY3r1aXSwHoxr12av1sKjwZ3bFrHOGl6 fdQUQlr7DsDWWg5a64W6zW25kG8cBbbtModPxzrTIkkcRh63I8bVm1E2sI+yRnG2lAj99Vt/lJCI KyXrOi6HpM4iafvLvtXputJdFq5092HSyWVVBh/9P1ki2F/MjLP/Lcx4mj06Ip+Y0POVhRxs3qFf ge+i/AK7shbOWsqa2w7ZXcHtWkds5YMQkyAfTuMMLX4e50LOVoSNLBiEc3CbVDku+LmqCpWP6lDt 5G2oHnmR6bCuw6PYlBYfeDxtTiEbvPm0mM1wmGc04rne0TNH3s8I5gTJr+IVB0lRxISIIeFWGPfL CfxRzEB0McnoDaLrlgh0BdFSOXMbG5CyZDRUfQDIbrGRKGaHFkRNEgO5l8fw61dDP0hYepvP4dnz 55t93hRJ6pdxe/E5/uJxWONSCyzlKyk0VPChp+HDjhvCpwy2nam0TEkdjwaFnbBsRiM5PZMGEZDW DYsoDtblQFhVU5i75MwPFFxHpiwJJ1IylwE+aFSDIKiuPKruUAtDMXNpRAL7u3aeGO+uRPFNEopz TILIasbAoJZcm5OZ6OPYEyeXvn+gYuu4rECF6tJioTfbigMWmOJBbbgDW/eKUg8RRbbSw5zIqffa NOmlAgRqQBTQlkkCDftyCwsoFG5TLie4UKMMcFurGB97prxT/jIdeNL/qZaztoZgTFd0Oq0gqUbV xpBdyfQehnbH/3NLlK7nusemivsS22XqlASmacF6LDVGIOtIr8Np6tS99tyuXi+ZMCs0Pr8xbwqv pgLyZOHFiHqclfWzqaoQ+1iSNrEEi59r71XLFeCueK1bGPdlqx3ghBmqEkvhCvC32s2IyyB5p4Lk HQRJn9kyVt5ti5UN7h0q+ZruTkqdyIOXeBHnWFubundF07wGDm0gaPSBZSoFOlCIR4BTUUjajOgW uAYf8SxjYoknX6A1XYUqWF6ZHjUFFBNL5EmUTxwfQiJc8exeUYnyZN0UQav+6wv2892XIBbXBjVo aKcnNyNhv+NUsXXKecJoGow/XferuHzXBtMxVnJgx18a/qApJGCpt4P6OmdPJw3AT6Tbm8ObCF48 mXiJ4YkcnHGIf0/fuwJ/Iu3zhNP8yaQl9BMph5ANb/+E1DX8E6lfcEDxVNII/ES6oznPni5vCV2j /FhFsavLaiRTZ7kx8j82E6q1QhZ/zlV+cQdRjSPNxvzojQ32HjM8IdH5FefGtLZnOiuNACXZMB3w O3m5Rk9xa4Vvs6aMhvSAzVVWs4Ye/6Sy3ApryGARe4BE5jee+uhENxdhqgZjdq4oi/HcjuskcAe5 0Oi8pCmw9LJ5mgq8w7Cp1ZXtsH5nS2smzOjLVN6tWFYVa8L+iEXeDsgpFTGevdspYrEEtoES3osw s2dTJaQMOi05ZKs2r5uqPm3cZQfb2Ldunfg2NL9yJercIGguzqotuIwfJIqzqIDWyZTFrTlfshnY 57oNznfHsziXPQsqT6gbIk71a/vAr19lNSZlXmmi66ygQ5gjOaxaJFTL7kO/gp20d87ltBw2jeaq u77iJCmie/KiZomlBUJFt2KHsM9bbqbLCQR5CCEr6lVmTWOJMJ3xUjv4h/COBuRrf27wpRpryjFD bb7w4gV5iwFos1Acup/jLzXSLTt1aG8cZgJ1ZfU9XsDnbdOVjkuwQ15unbZApADX4thWQR2f0TW2 tjIoCL4oW6c5nWKT7syDImSDZXgTabP041nLZbo6nNklMV9Lnx1UX7bJSSWEZu15QyIpoFKRz5/H uwZFCODAltZgVHtcTTEt+z5Q7O/by0P2eP78i0chWJgj9c1D0q1+2JgpwACiIhPQniRreXYgsDOn eTSX4YdR+GByO0TKDIdO9vKe9NWOab9Ti1VAGI7mxlVtvK9E+/rxCTmR2VOHLxV2sVGcs+i+tsj1 aGW9EBXLFMXkMNbhhKuN1dC4RgrCyLCXTYvFDUQXH9+cPjCFg00dLOasTCJACLWimgKb8w6aZqMz u8eznY2RrFONDfX0hAsS31iN1e+Tk2Jv1lYmFH2oJRWjzESPW7QEy3yt0RymPH2h+GTTw1KqoBTB ZE1u5Es9LTVGFbJnotoSlBuiQkJ+/pn4ASupxoUNTptn6/rDb839w96xpBkctv/TrrCygwM/KQXA /ERiwbKyHNA3AT1uYsqR2vPnDcCP9UcRKrl1xUdFNFci6f8RsaUc17D23tKsjaUck8MONEWE8rRV DWmnUGVAabVgNBWbIWHFisoJsTzANbNlExyapsKbxkIN23/cZ3Tul4J4GzhJnFiUMS30PebKXhaG VmePibIOaQ7gvodzlehB+n/QRZyy5nG6z60KeGahvT+Bbj0qwVvVA+SWA/HTrmPePaooB12llnLD 7PE/kRKNDp3EDUV7jlcqyJSjtzAc3MP+XOW9qR7HIip50RL+A0/ES4ywF2gby5Th3NXT89wpZ6oT KE+9fHx4fGPZ6pA5X8nr8uYOxm0BKR7eMyGdGse6EltKZgV2rcF2a4Rk6/Smjj2G5dNWe2Oz4Mjr O/qFPUzUIoZU8U9qpBsBNx7ly4u21Dtlcmcbdnjhn327vY69p6csWTdI0q4SvMKkBizlYzMlwVMq C4pFsJ2blMfDYJS0PiKRl5OM8bOpe0ysKzOLWJ8+C41TflNKzXokt85ODIuxs2ecsuD1us1VuQay G5QX0GoIPELS2X8vGNZ9Qb1qtrcjNiHQ4xsVcdTh7cy/alsVANJUX6epnL27N0bNBZISgkIEm2LB kNtRE0SJNDJfcGq4dOUNj2qH5fucHRKT6uxx3plRXq/Md7vL9IbZkZ0bqXNQOzpqV2dH1mAqWCtV /9Zmv7EIJz/bav16cnoR9tqYpV/uOUQ63u79VYl7ExA7c+1sOY7dOkiV9xKFudvtubW6fs6cC+LW pc1dhDgTuT+Aw954X9dmxnlL2KY2GRvkcmzm3ggl8isNhfrqoA8mWS5Pz71z8tpa+a861S7pqMP1 2sH6PhPWmsq8Nte7suidrUsO6j70fd0qXjODjhMv7cT5/4Mp1/rCzQmwMjF2b1uqrW+/qvc97VQD E41t1DNijviVNMtaTPbp1mS0cFN9DTfORTMyx/BTebFXzmsw7To11lweI+DA9/ciju4hdikBNaOs VpjburANt0a/pxCW9jPf3sz86X6GtEi9oyE7b7FZmI2Xt+ySDtllX7XSroZ/7+tJWu5VBE/UgT9B /CvLdz0Xaqji9xgWW7CN6qhU8d+tkSqF71VIBf776m7Hi5oz5wS/6mGOsGKgROX9GvwyOpcHd8uM Y40t1/iHhjuO6tyv8thp2oZjuXod4eSY410XuZwFN+r2jG44Gmsy51CnqfRrShD4ZZHy/mlDZJIJ +k2toKmsetrtM9tsAsSMJoId7ziOlheQvXlh/WDUbi3jK0EaU9KOk5/6AaqbDsvNtJtl1SDFmnwa 1pSSyLOiQRDwC/77X1BLAwQUAAIACADdeikr2W5ubwkNAADUJwAAEQAAAEludHJvc3BlY3Rvci5q YXZh1Vprb9tGFv0eIP9hVigQKVHopA9gaydBaJl2WMiSV5TizRYFdkSOJNYUqXJIK27R/77nzgxf EhUr2O6HJdCYIufeuXMf554ZdsP9O74ULEmXFt9wfyWsexElfpg9WHkWRlYYZ2kiN8LPwiQ+e/rk 6ZOT50+fsOdsuhLMVhLMSxbZlqeCDUNfxFL02UeRSoxnr63XNFgJDJLNQxouVxnr+j327atXr1t1 XCZ5HHCazWLMjiKmZKRSkQop0nsRWKXSiQhCmaXhPCcJxuOA5VKwMGYyyVNfqCfzMObpA1sk6Vr2 2TbMVliv+pvkmVKzToJwEfpq2j4jMzYiXYdZJgK2SZP7MMBNtuIZ/hFQFEXJNoyXzE/iICQhbR8J rkV2Wpr32tqxULJkUZjmJwGG5zLDujIOk0k3nyf39Mr4SmnBFScZfNvHkFCyCApJTzW7WmbTNMzq Rzxci7Ty1rf75mDamnsKc7DmIIeJ/yOLMGuhhoYEiZ+vRZzxIoYnCE+CNylb80ykIY9kFQYVP7ws NNTXUy31O0tll4iDl0iIdGeOMPajvK4Ma67r6bNwUejn8UNf+8VI7SwLFRQn20gsBek/LcRwdabk G+3LUloi/CbVA0G1toEZ84f6iug6XBasu8qyzenJyXa7LWoW5XvSszqFAjuC12K4LnowAWoaCbc+ ML7ZCE6hUOspjQozKaJFv1AVLlQktwgGrE2ZzH1yWJgGLzc8zR52NEvkRbrmUVToryLyvY5IzNfw QYduf+J3UMHZTZr8CoDp9FnnowEf3NO0nR03FFZV3ujo0CAb2VxQ7SPrEgp7kkqCNXL/OslEEQYJ r6chMKRQtcB77aPSBQYZIBISTqSEA7FGBCkVMF1Wzws91es+20SCS6oZ5Bsir4P0vopV5ZQfLFp9 w7A2iyheZok+nCtKz3SqckzVqOJ5M7xhavzeurT9JVAtZxU4X6VJvqmMnn5wPeaNL6e39sRhuL+Z jD+6F84F+/e/bQ8Pnj1j9ugC/31izj9vJo7n4d14wtzrm6HrXCglkJ3Yo6nreH3mjgbD2YU7uuqz 89mUjcZTNnSv3SmkpuM+5nMK0ZqY0jK+ZNfOZPABj+xzd+hOP6mZL93pCLOyS0xqsxt7MnUHs6E9 YTezyc3YcxgMV/IXrjcY2u61c4Fu444wNXM+OqMp8z7Yw6Ga2b6xB/hTrvdyPBtd2FN3PMKSlBJ3 6rHBeDSduLB+PPHYuQP77fOhow2AGy7ciTOY0kqruwFcBrOHuta8G2fg4gc85mCt9uRTn1wGvZ7z jxkG4iW7sK/tK8dj3X2PKSV1ryEog9nEuabVwE3e7NybutPZ1GFX4/GFR8o9Z/LRHTjeGRuO4a3x pVIy85w+ZpraygCogTcxBPfnM89VfnVHU2cymd2QF3rsw/gWToOt9owCjQDo2IzU0uHD8eQTmUA+ UTHqs9sPDp5PyOXKcza5xIMHB9PaMK1mguVMprU1s5FzNXSvnNHAobdj0nTrek4PYXU9GuDqqW9t zDubFplC0YSF+raWwn0Vc+ZeMvvio6tyVQ9GqniuSSvjHG82+GDCoAqCvf0LrqqyGlUP/JBoSooz 3CdRDjRBnyZUqfr3mqMhoX2s0aaUihAdGI0yp56JQp6LFY8WO/XcTrYI1NaJAdkwJj6gG04SPyJc Ip4UWvpNe4t6p1x2QiwyXG+SNGO/8ntuSeHnKTHO52fNF4qBPj/bHR/xeGmlYhGhaVjXAogWnH1p hCJ3Iq3rOch3Pfg2Xs5wKw3brUVmzmXos0Ue+1kJkngMViPBpCR1HlC5PAWJYdouJZvMqb0RwcJz 6pqhn0fAZi23BOhrBxNEk1JOJLIQLngU5PAafV1NQ0/0oKKBK/pGwjEbq/l+/qWWVngfpuiTGeiX Gu6WvB5WIWygCEyNNYvJmJ8KMAh6rh+Z6dZ8o1ZS8BUzPma/5ULqTDonNykOQDPtSuv0Ir0fuMz4 PBKaXRiPGW9JRabvxINmR1zPlcTg6CLmWa1HGc3KeYWzdLNLFpWF+Kn4+5rfgSZsdlxa9TYqAvGZ r5HQ/TIQFU2saJ8Ml7AjT0XF9jf5PEJ+3CdhYAS7Op0YB7ipu/N8sQCLmvdKoW2SRwE19jV17IIK 0sorxR2trcNesE6V31pj60M9TaeJKzQBGUOcVKSUL0Q2KCmxy6o8qYJpgl5moESamNHq2XueY2zK 3nC2Qp297ax5GGXJ6a/3PP79IXq/Ida+ySw/WXfe/cQlwoU37F8P0ZsT/u6LKubJ/P1WpHci1tLn yZxd+7egnIjUo9LydzDRIOTvF6kQ9Mxa5Z13doaC5szTLysl92af+o0bnDZKwiKP9u+xgftRbVVP Xn138uoH9vr16fd/P/3+R2bWyZzPG/aNATUTfp3vdWVPn/yBIUSwQPCQv/AmMhhAgo1XxK5RUEpG 5z9+SvaWxWJL9bHCz27v7BjxYYJWkB4pO08SIHYMNhlfiWxQySvQIwE9UN8b8+k6OaESoa0hVTuy iVKis2zo6LAJehWQ5qaizA0NKh23IdJOimzfBgI45GqawGiy+Z5HuahpaM52g5WFtP8IurRwDX7d nlWM6vYKH/yp/xiH6GgZfxjsgYy+6ypR5hd1qxClXyKrhg7Zq2zKVmmylcgHX2wInfYch41U1wdb YHEeRTXB2pBSj4pgqYp1WXOM2ls2srWyu3fKBnXABY6wLZdq1lNGYKGAsnCJcsuu7iIF6FLKqhTF jV5BTV4+xD6sjsPfEYKdTD680Jq+bjFJb0ea1tX16d8RjK4CWfm0W6nZ82zLTLqnFdN1/V2FIpKi +eSPfX2UwEh+lfm62FNQCA7gfElRzrZJ2XJW/F60KhC/gaAx+oeoie5eEg1HynwtGlqRfK0adKuj ZOFb7Pt84jKBom0lptcbX6sOMk/v/nk5a6SKan+4KQg1jb5/W3pW1Vr1prvr1iJWNeG/QbolVi3u pisV6+ReOL/loTZvoFdW19g2p1lmKnTcCyqiOEjL9RWJUoOTlp+12+rOMMPSZ4DvwBStBheDKRVY 6RvNQOl6zga7nMyQMcIBOsDUj/uYa4mNA3WDMDMEsdShfKbSB0PBfJVCDFMcp54DBeJSb2tpIRUy NH1lEqW3h4CtUAKga/fyLhRs8gYU9EstdaFyRbdYTK1HNFXvRKKtOzScvhL+nSSSqo4kFXMsDiMN tQ+JL+rzL24Ivcbf0oe7f9l7Fe5CAV3E0s1PNECfZrV2h2ut5AI13IB8MZxyoSZi1lldt7UlFLsH WRkvgr2QN5pkQRqq1Zr81W3RGF+2zMrW/VwI6RDyrK1MtEq02IKNvjV6aw296ndNrKnuqCi6a8i+ Ymdszd4U2qxIxEvk+Rl78WJ9uDlRs67MtxRaS/NE/rz+pdaSeo/2iznq4+7sMFg0W+9B4OjuL6P3 WOraVYWXW7FnO21HQUGYyZLxa1GDAcxd7O8XQ6lOI5cpj/UXEsPAkIilPPd9IWUDUABMQSKU7AoJ 8gi+qG3UwYI+iDKqz+wQysOBrrNOP0K+HOSWey1gSN88NPOmO9AY+turc3HNX6JDtEXLtfKWPw7Q GDMVweYwjO9EQA9a+23DDgWeUb/S0Tucj425LB4EhxjYn48k30Q1bamoSIn9gg6v8FAdcu9ue2pE RX9MK8Nf24LvcRWMMtt5cIKg6nNqSDc1VtCI0gpzgGFEzFCo2QpEokLQr8z9Zs7vVJIk7wueakvg hpBO+NQJ1BF1cIgA/X+Ugba+pRJAzirR+occKonmUBd0hqsAZAXzVAkamud7RbBdweRumFkrLkfi M6rk4N6gYhnGUkjFWuSsldXt7xN2FalYd79I5hCcismZVNZnhOqR/lymPhKLz8LPFU2L1UmYli9T L9Cj5lHi3/WZTBTpk0zmC1DCkL73ITcV1y9lm/Hd36/TmW8j7bVJ9crYChaEQfwsK8zTh6Ew8YBh yPuYwKBZoViVOY6jI0NKevAYfSiGnpsA6vQnPbNXUR9UjfpjCKpZ4MF81ocof1EZFZ26PthWmDCg Q/skitBRg6Q2/X5GErRXA2x10tw9fqdkGJthZGneKvsF+SMW/RWa1IlG+vDlAY/I1xm71Yxj99Cm 70Bb26t+nvmrrmc+P1QHLqL3X1tMhwTji/Epm0nBik8MqPIlCgQ7Mx7Q8bX3gNu1JdLUelxjbTAS Pc6iuNsZ8JgAMxAZRbt5GDEXPs+l+kL8+PWCdVjx7R2lRmVcg4+y4gBKn5L8eJVypQpZNctdzEk1 5tS+Oh+vF3hw3P+xZNVB7Hj9ALEkLfA4VPjZ5mOr81gCFkemEV8SYKKsgJdt1NhSh6JHKVMHpyq2 ++yEdoLUeWo7/keUrbCnM2cCWwLosEgn2Vxr/yh1teQOEvWxIaNWghi/VNpMm6MPafKInN8/Gn7L FmgL4uxozNg5rPxKlPjCq30O8PUWtKj/82jKsa8ewyHxH1BLAQIUABQAAgAIAOd6KSsZOand6AkA AIYhAAAWAAAAAAAAAAEAIADAgQAAAABJbnRyb3NwZWN0b3IuamF2YS5kaWZmUEsBAhQAFAACAAgA FXkpK8XbL8BNAQAAMwMAABIAAAAAAAAAAQAgAMCBHAoAAENsYXNzTWFwLmphdmEuZGlmZlBLAQIU ABQAAgAIANgDKSsXap6fWBIAALdDAAANAAAAAAAAAAEAIADAgZkLAABDbGFzc01hcC5qYXZhUEsB AhQAFAACAAgA3XopK9lubm8JDQAA1CcAABEAAAAAAAAAAQAgAMCBHB4AAEludHJvc3BlY3Rvci5q YXZhUEsFBgAAAAAEAAQA/gAAAFQrAAAAAA== ------=_NextPart_000_004C_01C13943.92C10580--