Received: from localhost (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 7D13D63241E for ; Fri, 16 Jan 2009 20:02:24 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 19546-09 for ; Fri, 16 Jan 2009 20:02:18 -0400 (AST) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by mail.postgresql.org (Postfix) with SMTP id 7CF9A632416 for ; Fri, 16 Jan 2009 20:01:29 -0400 (AST) Received: (qmail invoked by alias); 17 Jan 2009 00:01:26 -0000 Received: from a91-154-107-53.elisa-laajakaista.fi (EHLO peter-eisentrauts-macbook-pro.local) [91.154.107.53] by mail.gmx.net (mp044) with SMTP; 17 Jan 2009 01:01:26 +0100 X-Authenticated: #495269 X-Provags-ID: V01U2FsdGVkX1/eUhcmLdLeMhHxSEIqAXwXE/QaM7CjVVofnkl+mK v1V+aiKuzE6rZQ Message-ID: <49711FCB.7060404@gmx.net> Date: Sat, 17 Jan 2009 02:01:15 +0200 From: Peter Eisentraut User-Agent: Thunderbird 2.0.0.19 (Macintosh/20081209) MIME-Version: 1.0 To: Bernd Helmle CC: pgsql-hackers@postgresql.org Subject: Re: WIP: Automatic view update rules References: <2849137C693B65CC8E86411C@imhotep.credativ.de> <94CF655A8D0DC7D5B4B81D8B@imhotep.credativ.de> <603c8f070811112006q906b3a6o59a66228b7fc997@mail.gmail.com> <7F84532C73CB3279DE8436E0@imhotep.credativ.de> <603c8f070811131344n5c087057p11f94780dae80885@mail.gmail.com> <603c8f070811252043r75db3e83v2eba1611452ee62e@mail.gmail.com> <3073cc9b0812250943x23547116ud956d8ab111e55bf@mail.gmail.com> <61043.91.48.33.48.1230474598.squirrel@tooney.at.xencon.de> <3B3B2ACA2DB4AF9AF585FBAF@teje> <0163DD949AF0457BB1DBBD80@teje> <496B3C2E.6040908@gmx.net> <566CB90F49AFDB29D12D3D21@teje> In-Reply-To: <566CB90F49AFDB29D12D3D21@teje> Content-Type: multipart/mixed; boundary="------------070606030106070800000406" X-Y-GMX-Trusted: 0 X-FuHaFi: 0.58 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200901/1306 X-Sequence-Number: 131950 This is a multi-part message in MIME format. --------------070606030106070800000406 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Here is my updated patch based on yours. Outstanding issues, as far as I can see, are: Critical: * Updatability check must reject views where the select list references the same column more than once. * Various scenarios of REPLACE VIEW misbehave. I have marked these as FIXME in the regression test. I think all this would behave better if REPLACE VIEW dropped all automatic rules and reassembled them from scratch for the new view. The infrastructure for this is already there, so it should be a small change. Important: * Array support should be clarified. checkTree() appears to reject most variants of array references, but other parts of the code try to handle it. Should be cleaned up. * It is not clear how automatic rules and manual DO ALSO rules should interact. A manual DO ALSO rule will currently clear out an automatic INSTEAD rule, which I find to be illogical. Optional: * The use of must_replace is create_update_rule() seems a bit useless. You might as well just always pass replace = true. * You may want to consider writing the rule qualifications WHERE ((CASE WHEN (old.a IS NOT NULL) THEN (old.a = vutestv20.x) ELSE (vutestv20.x IS NULL) END)) more like WHERE ((old.a = vutestv20.x) OR (old IS NULL AND vutestv20.x IS NULL)) for better optimizability. CASE will be quite bad for optimization, and then you might as well go with IS DISTINCT FROM, which is just as bad but simpler. --------------070606030106070800000406 Content-Type: application/octet-stream; x-mac-type="0"; x-mac-creator="0"; name="view_update-petere-20090117.patch.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="view_update-petere-20090117.patch.bz2" QlpoOTFBWSZTWWuSVl8AfUL/tP9/PwB//////////7////+ABAIQAAMACGB3XDvbVKBKlV7y nry9j3YOYHrnk9ze+9987j77b3ntt3i++h7etOgD611ztt87vd3XRr5712vV987dM977gHkJ VIpXduqAkqgCCirTsLuD6+++7vOvh1rw3vc9VXD6PX1fPgKTn3132fcX3vaemcsOet92+8ur 3aQAXY1KvbDPV6PpLNbc4G73HSOtWQKHvbvZApZtS2rt9y7neE3b72oi9q11XQrre63XTU73 3YV8+LwADopRVurb3bx3OytW3u++z7ub7ze3F7fPPffWpPqfVis5bfb14dPOevse23sZvW6b tdru9evAXe8K95bambHu8nRq318emdvJXegb7e8917sntTPZYngAr3ue1J11xvAJOxezyduw 0XaWna7PffB9630us0obtkvk73gSmkCACACAJkyGSYkxiE2Sm0E0zCp4k0aAA0bUaNDQSmgg QgSYSZoqfpT/Uqf6VP9ETypvVP1TbRHpT1AAeoGhoAA0xAABJpEkgTUwTU9JT20npI8pNtGo aHqnqZBo009QAAAAAADQBCkkJkATU9TBMET1NlU/IaZNI1HtNKeU0HkjyQPUAGh6mj1AGgES JEmEaaGk0yGmmSTyn6kzU0n4QoNNNqeo2ptT1NqAaBoGgyBpoBEkIImECYBBoJhJmmk1NT1P 0o08U09Q9J6mg0PUA0AAANO8PWckWIPQaAyCmBmSUiBJ0Eq5gwhg0VOGK4rDDiGKXyBpNUlE FFGgwFwmCiWExwyckEQMPWQTJK/uIXKlpmLFVm0KqUoUkWCRkGNtS1WmmgpgKHq7qA/wz/u/ IYVPy/0FImqKWRylMJKXYlX+HE3O/YyiHoliCKtEVFalRFBURBiosRBapiGpCRomoMMExWnn jqzWlfQ1rWtpaN9H+/DxGf7TqwZGIRiKUkTFNXGxgj+GGJL8+IYlREyFJ0zkdeiwNBURMUVh WYVPVKJFBEUiiqIiz0wZQtCmYOxpxOOYFxneGrDAmRwK34vXJ+/cYk0NIShbsMCUiXm43Azt jdkDz5GJvCKKmmiqhpiYibjYRRVFNTDRVRFVEVBMRVEREFFEUFTMUFEQUqRkIYwQIQDmYFRF EUVzLb8jRnpay2qZKWCN5QDFRUJOWolZWSoVUFRIMLZKwRRIqJLHMmkoKWKkOOYREWsEUSwl hSqQUVVV8KYIAuRSKzDESaJmlqDIxqQmKJyxCZK3Y4wRREhLEEUGqoVFEUgv7DKIoTjbTUxK 0RYnpIyQlmKZSaYTVkNhOEJLULRCDYiWSFRJCpBqKjjAkK8VO4g+iLDno98/kdwOQ9RxP+ua pBhEp5fwt/faPJBZF+fh/2HxFevfpCYev4P8m0rk9tTP8W+yE5Ok+/kzi0v5uYKC92JaCyzX 6IRdNPj+s2w07/CB/cmW1y5M3H/j6I9P5/h8PjzazWeQYx+MfLwzOGLshI8/TRrLNSs/l87f qJ/3f8f+kF1hzf6+eJs3o95+OpjLui6CDulk7Nm5vOBpkwdKC6BUA6NMXZITEanvERba+VTh FKopyf9cqbCoNPeN16tl/ZjNuqw86RY7sC713CHqotM5CBEzLMrd4xHwa6VDZixvTGBlopLW /m0/y3PXR4NL5K9gZpjGc9ktTpM6cQX20Z8tmiXCxXrKb9uYYTou9V3ZzaYDiiJgrWpjn8+l 03lRMZMJ7/y5ErWruP6ldo2s6ZmxhDPQ2vp17YTq4PohaQ40ugVoW6zBfbO/jnifC6fh0agN Qagqi8ewYEwUxlVLi45jmZlTy4ZjNkwz73VuB1nEzh1HGUixVVGKiU20RVRVTePDaCRNQsrP npV0tKmw+8kOnDuTJAhM2W9vXcAhAcYmPXl5b6K8pr347pj338tN4o70eeF1dkrE65MmGvQf oTG0DemG3p0wG5G1fM2OrSsRWIltuSkrERURlsxhUysqpjjgLgZQqKLWfNEpixG2spbRqrE9 2ZMBUQbxxkuY4ralbUURYFLRopdPJJJodJHaBYMQTWcQwSQUIsC2gJI05IZDEU0UFOZiNCUZ UDZhBDTBVEh3/t4/QO3o/wcueo4pyhm8tHNLPwu3IhXiY8ZSaTM1w7wTqOEL1dB2ljs5bNZE 29XTphm0YaZjVAoWpwJCbR/ww9xYe8rpYT+X3uzf2W9fLo0+ROoJh+pz9ybVrcOU/afJttXN +7192a4b8P25VTZjlR5Ex+CDoX/cR/nEJDa0MRwP7vHLvWTub6NVDQ7z+3HuzrJqNj8t3qmX qPR7MIhqNGjoRbKmiomh9Wv+zpPzRZtqAkg+nzjK450H3B3lwYxNAfmDsgH2Qbmb7MD27h98 P0xH8cQTTq3WJo01w7q54/x+iHu+L357AiHQFZJU9xrQP6Nne3c155m7uCZ0djDzYFEWTHgv iB/QBA/+/+//nUhrA/kIfSdweFVJbTTcXD32hy61XC3PdmL9KqrXfN7OK3cuB9hBQjn8VdBb IqBWm0kS438lOTlxqNn+0TfpQDpId3ZIY4KH3TNw7pVwxgrjaxKsERViRBURV542TB5Sdflf QNTmtmIr+pefR0iqqgh0UUCgePr0OcPOl2ebQP6oft5FUlVVNG8vtA2vz9fo6eC2fZrqhD32 9PfXCB+v+fiMN/92Y9u0wz3zIRFCMPff6emNisp7N/CH3+uqpVN5IeeEc+aeLRn1aa1IkuRl 2r49uei7p5urW5W+GrPuZ9X6Xu+gOx7/btz5dxd3EXXG5o7v4CeRBQQD8QCG2Cp6Z9UMQOmn Xan6R7P18h+zBvC8klhUD93uaHBBBCkzkkoSg6M4w68oKeRDlfcD+hIOnu7ezMzXE5koKObA g/VLQgE34NLO0H2JIVndZMC3x+5jduGTZ86ttZra/UJIWj6+dB+TRWKTb39qcTd6b7TruDFH V9bhsp8ni2UXg6MoEoDjuiMtvyf00o8PnhsGLbCgkJF9dtX0pvJdKDwzuWTGynU8X4+HZ/77 fLyO3wA5E+ceLX0EPjda/S62U+7DQ+gUCeYgjwzCQ4EYKsGV5Mwq44435rEpoqtwYZCEsfhh NBrgHJzwkochNmcM82prFyf9KB4YHbLBnGB70pAZo9zN/H71s8+K8ovpQgtPo8/pqqqqvSRT 4eXSGp8H/VGPJqv5k9lH7Xui7dtuf6TaTqIu5E+SUKVI3G3qchkp+Qcp0YfeeP59wzqyva/b khr7+i9owEMTZh4y4ANAsqqJmFdtZn/H9+w5tO38eGelqJCDqJ4w/jCEIPYQ/Ht6rDWPhYKI BZK833i4f3GBEx9W+2VeGQ5xBzfMCGwpO+adkGkvGGadAaCmjC6IgaPKeDZ3X3HrtouiRkSc KPp6QgfuQGQs/Fw6Avi5BhsLbjQMTWSDWIOcEbQBSoAaHNlSEhkME/mM7PD2YDxOXi6cB3Vy 2dA6hDwwAexIB1Y630oRV5eg+kwhopyh6hxFUUQUQX4kkCwwi2sKaWIgiAu7MlvVBkTUEFEh FMfVOE1VFFETRqyaSvSDgZQzFFUWrGqiiGKIwRUF+a4mDEFbaKwERRRMq7jc34G7d/4RQqJc d0Eg49KoJeUE2CcGEXDiIthaHYZzq6I13eGcM1HXVvxrnE0tBFhlXBwrK/2XiHeVMP1Wq5Qk kUma8d/dtQFqU76Kl3Z1p8xtfENO1oSZu4Ybpk9W39huWui2F7ceEWtzh1bniReGW2PdrRoU 2w7M7NUXHnuZldlTEHJiCqZCP5wQXbM4nAkw83HJ9xTXC80JASjiRlzNZiMLIF6cDntHX4w+ Y+x830VYV6KpC+4f6kBBNPzOzqUn9CJRca0b2IN951actPCRJvw32/J7vIFDDB/FBRn9G7bY EIYNoJCGQ3+46m6Bmb9gwzZZ9nq09HZEtLhWezNMRUe0KHy2GV/cxQVTcIQkjzh3dNGamVaj 1nNrDvH4gkgQ1VSYkJKThf09V6Pb9XT3Sfs83ZV3yROjz7uN4Z7ts+IcmuYg1MzbTebt/+8R 0QZigIZE0XeHojWIx0MQIY39+dCRAh8FMa9xLSY9WNGGbHcGFaPV6LCjNSg04kWa4gmRv1nm 8+3lPQ2BswzoiyvEVD2p+k6jtKgi5zW9y+gcmykOyZJzBKRhL05KIpGZN6PYoajmK2wLIlZU IbEgOH2y/wGzxNcfMsGyNE/L2XzrkXta8Hd8C54ipbZbhfYjRCuCKjH1xqt1Fmqwg9mRmVoa tD4leSyylTSQrM0MGhhjUFZjddC2jU1Y6J150GoxKTTcczLXeo985pSKiopqjL7ig0jTDYNu U9tHqtBtQq0rhmcYQxqAiRIjRDkYyTUA1IFdTG0IznQu2Q1GxYKmDJMiLefzBwfz+WJ2dTuX vBOmJTj4RHTVSdiadNIToovr9Xx6Pa/efwfd88oc4r+JFp4hNNX8/q7z9jO+hYwOdMjkcA4/ b0QZTcZkyZMmv4cnLuv48HiqKjj5ISgwXEe0RYkEOeYYBQk4hDkmjzLA50XFdsygn3WkToOg bpHF1pQCQyCBDdSIUMsiyEIHs/l5/UnZ1x8/Z7s1MZhOLPPun50PzMGZ089pDsqytkFEXIH9 UIBemjC68Pcm+YZgEJlQ2yUJSiwSoBND6bDU5Lm9NDkIV8I7wilucz06Dk+KZQT64QgNwX/d r8EV+X3nx7/zm/5N6fPb6fT0Xy73j6neTIEzLz9P1Ws1qvMzd3oiJF2+Z5qfy1RiqnHFJ6nj FQjZKyM+jNJJY+rqDl3Ju05tPTWgKhm5Ek12STxK/4munh0w9oVVELmkB7xc+o7eCYxzK4Ms 2TzSSkftiDB9LRGw4rONdIlApPL8dE01Ewu0tQoaaWSieQ4CCB+zR6airLaW1OjerBGWciHB piGcQIQ2Rl3bIxdyZaVQCS7Tyjxp3Y9vRuz/MdBkfE97v+HYk8KR/XhU7ER3VnmqJ4qjyAB0 iugD4Q6gsMIMkiXQGLpqRqBczI5VtPaev2p4NY2uvy1/Rpo+r4h3a0ZymfYsmnZ83+sO9os0 Qm1QGKK7XkvZAbqN/MaveKhR9+NDI6EeiAc7+Q2+2CbRULioVvM19zuYSLtPs9Uaw3kivjY7 V7U6Gyr+lFV9jT89yMgWMVOGihA9RXOD/z4u8+CqK+L6Q2b9hzUHb+G7jIf5oD6iUtrfvNhP WhSBxFdZCQkwwvHrktfTOsbST8WG9mXVT2DDNjZyvO5ydzYSl9HZDrrOYZhj+WvWKbXwN0Hw ZsZY/vP2POOZNO3arExX+BT5+1uZWO4w8NINWKFGEdnhz3/Lg/LBzvVQOn5/DHpT3T7yLiQm Y955iEEFnDH3tsDSEdcNs4vvE00JN2aD1+LWaR+ePs9oqGJ4RRRRRfgxyooooooooGkoioKS iuJ0H8Xy9Pb8R9dP1fZ3Hf2X8SfniZlouJUVtqxfudbgY8wIegD2B6/hpB4RRry9pAOwCeXa bPWYOk4UnQmFNmmH4j9ooQ+09n7/xPngALFUEhmSGAL9+GZyeeyA3L2xm8TwdPf+ZDqUnJXD KG8DeJzHOFgWMD5Ozsu+e9fw70zOAPaHAGtzgPEzpYuJa7HMYMXZFwis69ToZM7rqd4X0Nnx OTqydI5uMi6+bx77fhU8DInp+Wn8QfFgvtIlMYHKdSx+yQTZDNM+40ip4Q9GFKsxrvAqQ2Ak IIPmpElCUJRf6uTwuYPoWTkmPPwsey9OGVB+vNpPzVVOE97icfByghDGsHKMx3PZ639e+Nr8 3eh39x3ARLvY+ECPEJ0bVVVVUVVVVUVVVVVVFUYAcuMfLzZpGld0XP1IuTdWY9DKFfxkbcCd PeU1xW6ZGEFHCMja76by00HBiIf+mcYj3npb7z9wtuhed8mVuPZWSEoa5ZLx34q3LwOUHzwW QUgQJCaFtmnyLEs872FvHcj1q5vOrS9b8Ojnq4iZm0KsRvqalJMl8IH3m8MlNPOtsPlS7+PG ySSWOW2Mwi+9rSVW1Vz12FVUP9h4v3+HHbdVouhijQx7Cs0kxVqZvP7w+1IQlZh4PM2owtxx /o5JtUFbGPnqYYbqQFg3GVthqzNleKcFQqdveQH0jtUkGST2hgo75ggjEru7TEDREXvPm6qq 8V0WVVVV0yqqr8VVVVVVXVefjO7uGTyOvX+a+xeVJzTC7U6QYayOBKyY6JFnEA7MLaK4gyBM kasx3YuZjythyPQxTDxcHBQovLkMQLh34mjl3M3CSGQmcqtqUhs8MpY340PBN0wNVHbOj2qP Id5WzoSBJuZbeXAzttsu2/0FHnIif6V7N3BUmWo71crXtxgwX0jFxExO8FyG+qlKttNZ8erb CHq31XVGizBTeZjMUTrWT5EKhKdIVEDN9Uq6p9eWroyDy30r2DaEig5+KLi8CkNNWeV8ekDs w0ljTss4LIv3iJRpPCz5C1kx6hCSVU65xZjB7GGZsVaD4FyLPw/RWrS+BrHp0JrXsX0Y9RVo 86NMyYJUoa/qv41p3vrI+CGaPVB9uy0+NlQ8fcx3+1b3xDkJeB9h7uW/szlRys7yOslrk2wO HTA16R6KtJJEeOGPH8RMTSnzcegb6vudpXcLRdSNyhG1pxugE03HmvrrVSmlVUaCba0W1Q2i PC+0e6n2XvCuytyGnyEe1uS5vFs25hix9cjgsADWIq1q7lz19YLUUTc43qf9Hr1q2NSsd+y9 x1GPWLXSPmQ8ta3h17T1f28Youn4fX3SZ5TdxWo1T9wd15s4JHuEfichOE9MuXjU7TR9wJpS Rd3YfI/5Nz8zbStjOKV9/RbPA5DknBwltesaGl81XwXPAvsTqvvYZmyQTf1RxLaIOihv2VfZ 4TE8j64fGcu0/d56Ik1Xjg+navvBIFbuOkh6Y6cqo3SA1UyjFuRFeNr/Cli2OvWCLldoS7Pa S87u+GIfeHXhVVEypwGvvjE2EOWkOtDxtUClai/02/b/lj1nAm9fqetvxiya1soPZ0IlQOYm zNBZPvCpWwg2rv5jP1wl2f+5+tfvi3dBjFHDXoMTSgbTSDwhkuRaUDxM7LO2lVisKrFDQ7m9 5qRRc/VGEk0PQeNoZJmaFpVjpgWI7L7kZsudM57JjJg7Tsx3K6E/Pf2xGHt4Y/Zi+n0eM764 w8K908oQupxMjMv+MGC7dWaBX7xgu8doQr1lzNYlWOn4vA8qaEHfQ5cnqDWKwI4I1Hns2Lxv tKtrS3D4zLELESxEmyvwDdcU5bJxhIr+z8zm/uPLx9uw3BO5W7Zc22UMlBETnwN60Vd1Pvg8 vpZkOkCTT5NcMVvm5s4e8PI+WUwEghnGEJGcxCgCgytP17CqsTCiUKJ8CyzqHm93iP0KG7Hk V5CumTWmU52IfL6LC6iIwct474TTHG12XRhxMO5i+jbpixWBmHEIA1t7H0bLW/L3tDFRnndP fZTMtwyWvUToKtSU5xiqyuVOmaqHoj6oEja8bTZ7vMnU2iL+l/0djoMZv1PmZik4JknSASZw TO4/0uQIG5aiI+N+VeI7nW8jNGyVVURaV9UAc38e0bnldYXOPZA8lnvPpw/T7q/VR9SMnctv wspyuzz78p8fIcacCzgWWsrG4wLlHCubmOEXhKyc4YzeYvnrnd5JLG+4vOUOTFVWHPRz3e5U lXAaaZuU4HP5Uo2+BtsCVcNnyY4aU86fRaRJOTeqEeO7OU+55+d+SvXK16EqVPVKwHK+ORiS PG+dVjkEeWMMNLYaquC5bKrs80RmbMbozagmDU7a28E2E52ZY5yMFzKE3bETEU2iY48vaziz aMoD4U993bGHLnImLi8l4VX1i6V7F9XOQ70bh38O422G7jIc/E1l7WzDztcUZ7S+Lprz8Mcb o6ywVdxWZNqQge5pa05XofiH3+37/il8fOkiBBfbF/2/fnma9GHVnw8Vp83m6nqT+a/55FGm 3TIqqSm7vIeo+7LRBHQNqLn3NhtnZwmM5M2azUbWPiZzA/RRWfd29MOhSqKhDs6Yl7m7ZN3s 2nVFGzTEMQTFGGDCZmI31seez88ds+v0q8mrp3IwP2eh+PWSdOtQL0xTGKO27PIqUxJj6xN6 UH5yy0Lc8h8nY83GldMMeZ3ezPvnCj0xvbfjp5cXhsbmbJJZQrilGCeAtlXoD4VvsH0fN4SO O6dCRcNolFI1JmSJ7HbT2QyeR143SiNYhIPWmdCUxdVVXwA+fp6a+NfRyNy47D26MxuyrhoL d+8NxHXIM3er5bpRaaao4HsJxq0p2Ql9blaVkUQHEzPDGkQhCKeBQ6QtPexOsx195W6GMvCc M+imUTy6jjkj0COsTO3DcRC41jmZaHmssGj3fQPPEGzOgpVLgszBkJkq3vEnbqOpAlva3DzJ bfQfnY7lxx9CZ/NrzWlTOM5c8qoJ35tWyMoOztY7S6CyWnoXfGZNsXmzp9uCGUzg31rci2k0 WV88c+OV7RvxnMPK2mNibT+76cVrOtQbo25ybTO/w1y2w+uma5XtSd9CUKNPl+2Mk9bdKxFZ i+qiqdPyFGzqb2HvF5fnacDmHQ+ERapv+xvTRtfu7crFtnB02yunl2U2gOSZ5Ije+vHbLSKc fkubRrULeIWMU/PjbVtGqS8zB3II6qrF4eTm6nXb11666zJPwh5oZSTvrJRgh3T3pvLxt7Wv VfNFeOQeNPK9dYVp77z+X4PV98EQKU6gzl5K61xFUXwnJU/RHv5ctjGzPpxyXcp3BHW1SQTJ AOk7vrP0sed/ACzd5H7HJZ2nPmHu3di+elNobt5PKc/PZoZqnQazl82ZnuT7ao84uJvEAyLt 4GFbebTX4IKkTJ/pWT140VOZF48PpN+etW6vQp2yhDSDakE/Os1v19wdcb435HRlthB5wgoE HHlQ9Pxp5CmdZw9YWIVD5iTw30oj2pYnQ0yQ6Iq9HeiMKiCEQFYJjV1xqiFDbnMpRpiLeF8M JXxoLLR1GqctXHM0lsD6XPIuDcW6PB2r52YQSG71m9IDcGIwGBP0szVQdB3ABzJFIQTkQLA4 iKqquhJQDehlORo84HDYaUERBLKIjCjOTDiHBJw5OCYBgJSiAjBGYJRKJRERERMKWUwpTCwE GEEMEwThhhgYaIfM+joPsn4d/P6HzbvLIQlClfcvNqJjt5RCx77TNObcTl9u8iwhX+Hsj5Kv BUTQrfqZiwznMp4Lq6bJGzKrNRlhCzq65VdUIMaDEbrbV50hC858jB0gI3Eyz0WNAkBIL1lx 7MsWvQyNXn71mNg0eDDoO53RqUl7p+2HuXtXR7nAY00b+mAxFkfN6bwsGtDCA0yjK4a8DuQY hegyxbRHENXH3a2LwO+8KmPge0kzDf7RIEJkhISXeJn29OhMD7MkDnw9VjHFE4qEVP5T29Jp IQP8es88DqDjSlXlZqJqDen6GoU3qjWayDSQ62Pb6n0BjK5nnKnwB8WefLzTQfV1Gs+CHzy2 IoRgLJJEwLCSpBED8/2WW1S0owFEUoiCp+Mw9cP6jy4n1jH2qQH7SE5R5D/H+CS/rOAjgd3d U0v099fp9Xr8hyJAdpeQPUK3xml1CC+Lt298xjnYrCK5+OanInx9F5prVivBPbOyC/AyY/bE zunNx8Nl1Ey6E1xfthbnnKFSpPPbbNS6ZfQ5L6VfZ869gRdh+bz3C489BQxhGLJL2nIgMIUi IWIooaKIIKDaIRNyUFkL3KA4nKZGEvIljCb98RwumXrwy0BJ+GrTTMH5kMk+7ibixMsyLBYg ZIwgbIJgH2iAsxVQdOR3252M1dj55YaWGSQrATTtP1v1E0Q7nAWzGD2Wo6qvif3G5SN1/X+v 8rScddEbmG0UT2TG5TgX6ViqHE0v31mYAkDpipWiPf0VzHjNuraTF6RUCRA3v0+xSkf0NdGs ZFksVxA8WxbpDokH+h7tzm7S3cwDGKnfWkDOFJGmth3Z1CYD8XbTaGZDmYTib/YZjklPPTdu l6YlGur5jL285mGLeEeWBvNADG47ud67lz1/t1zgUN1Kd5OmHLkKUVq+2ERfl+uVcSjaro38 ztatee0pEfeobjlhFK+T+irCvKV1Ui3KlXctdlWItVJ9zuWGIoYXzIhVO0l9RXXtfNJJMzJL 6XwVfkuH2eR5IUXi5u1yJSXz42ywwPeNC27gFnytuU2mrv4iB0m2W4T5n8JBCCwSCbQKKPvK Cg7RUOs0G/s5aq5oOA1UMydlSJzCoUFmmIZRz82272Xs076DLwV0TkhYbJSpECqdl15wJu0d DxDMlv0l4oPjv1Eo1ltustQwJAwhFR7GJlRc5NnfkuvXWLbRyq/1xpnTdO9p9HG0tPOujZ75 7YaZuw+eHl1zJ+GfPPv02Y13zcXObns0XaEdDt8K8z8JtT6Cno43ROFIGT7NV+hnt2p+Wys2 X1218njHG1Y87Vj3Oc3xPrOmLDTz53scMq5jxPOOSjoOb6r5e6kJ0srHnCKL/1S0VU0+GnO+ dzX0u1EJSNWqOrOqAOjuRnOYraVXd0jl6ZxOH2m8nyqVsnzZR7cRupztg8s7X05PTneggPaJ gnrRXMfXS5JLSrtkd0Xk8oH5Zmt1nR7mPvVdZH3RPUHIWmkpIjy5gtUlmBhRNLKSyxNCRKlF FJE0RLRQglNRATE1LFVKTDfdMpMliSqaAoU1qMBEWC6OoGIAooKowk64MhaSICaZDajExNjW JqDMwRqihpCkT3BCaNjfpPMSxKp1QP9TfzOiY4GoxRQ2hPOQEQnxnu0urC/wUXaPxwJESrJS Gdl2gSSSF3aMByBDCBf7CCgpSgDDCK/MVhUBApAOxoV7Dx+0uNwPun8tVQnInIOpMGzAn+f/ h+/99+/cI+3sEXsTQgAQYqr5fXw8rPrH+Anw9VOMfPK8rqf2NYv12yPyoPmsaPfhHpFm2k/a jJxFcTtteiR8jsc+kwC0WZaNh5TKJd0+qy6x+/9tuMYhn1l8pjkeBgh2cTDTMY6TusylL6Dz EvO35i0b6D0lA+QLDZM2mOnBjhrPlbL5a9Ajzbw1HEyC/Yxc0DDPc8Pc7OLRVL83JV6rK+Qs ndbz28f4uYROYts122wOgZhqyA0R183t8jJnc5vJXu6GGGrrU7wnpevaFrMc6yBRZABXm34C zFIkMNfw3hdXU+ieMpzhsQKij0Gu1MklVoHe23goWjuWpkXaapQmwWiObdhDYyeeuq765hNs IufNXKKnCRGe67PO3INIzAhLq04NPPCNA2mHvlSp8jaXZBklxo8s7X/Pk5eZ5xyO/GQ2Oe8J rOgWv388FMz4E7Eb3OyfbAdpFhcV1vYS3msrg057ua2yvKojX2dTx8rlWzS5FGBMw5o2hWnL 3kbAjZqDvOu/u7W8tPpSeMVV7zguV8rcTNjCM3MzYUjvC1SqyTlQqcfNJJ3mnipxCvL6eSrW dyWUJIozJi16+oQPnAIGAgPviMBSolKBj/NYgOpSCCBhGF/AEosSkeTQBKDJpJKaIREFhBGP /7MM+mG2kosMlXArEiDwkQDyDfLsnJ5Fl9HmfvnWZMP3g2kvzLvw1OfBR5yheCUaU3lTJI+Q v2q98NQhJJhNDzu+991drtatEGyFjbp6igDVDfG7n1UZ3kMlwFNiEkIQgLBDzsmIiuJ2Oob5 h4nJnSL4OZezL4nk+i0Sp55lzEcbZW1tvJb6ZD0D5Xw8wnIZm7JWkGO6h43upOKmXfF+DyWM YGVd0ZShD4w76+rvtXGErd3EKzHh1jBhB1v0x69rUq8ZmR8EWmPszb1XiNXCRD+O0QynLvDO niP5k/bFWmMXhzM7olcralt9Z+rHjJY+uT2cs3aS97Rm3qtzuY8MMY+zJH6bDdIzqnm8J+Tq s6dnJH6WnWvG22kHh6HutjXieKAmmGl8qj8PkNHYI94dpOCOhdD9ARiVQpCQoLmeDNsglCaV T6iJSQYMGDHNJJZh3lCYSTvOCd9LbUFUWqyuwwBgkaDSm0nNJjzGLgEtUUKCHnXuT6muZRZc ugYCB3gXNZzQN6Z0s78/VGZ6zfjved79bBtqVPTLcZ3Mhezoe1l746VTvaXCUtzCrHv6FGDC EZLlNCzU+l6yxc3du1m3U3amu5vgd15+xVq1bx1kvwMMhk7+x3Cm8BEPeFCwSKIRHyCK/9IA PWZ/DX2m35sQH6ES1KMSVVBQlBU0WoDNJ4z3PWHs/To+e+A3hgEKHIOwP3phD3ByB1f0CEIQ lwwugCaqGgWRsH9sMWWwd5J9gdwHiB4jmD1hyDziDx0GwEEEEBBMq8jAwPIJgWfl8/kGtERE RFERERERERERR4EaIiIiIiIiIiIoiIijw6DrhAmTAwOwFnfM+cPVPqh/UB63T8M+xOH6Z9Yz ElzLbbBKUav6P7uP0dB6YEJmPxTfmDbfX7e+OLTJUD1Tf1qCA/e9KL3KDYILyMzK8uoo42/E 8vXscpzOs6QzNZdD5rJKpxDUZSTs44Iw0PLrqlOdfdA/mjsb+D+lupmQglcHHPty5/G/U2DR o5g5oooaN1VVEqZ3Ndm7wPj3TpaXhw7YE5GoFTBNMNLAKI9lnNgqFbMjZDyBd3mmtTF9+yvN RkMQUtduX+oYLRqhN7JBbSrRdvTajVhclQY5LLItmJJ7BCiQKMKhWVlpSSnVnvsP0pq+ngb6 nEVqpVw8cijnxkcKqYDBVsZ78smMLFhMkkuhBOppDu8NDK0Y6Yps7Odb6FB6yIsNwbc+nRLt bMoEyXVDJEHq8oEiUYQPQYsoZEUvLq0VGa0ZMem3by1l4aHRvhRtJtX89zYVsOvy3/30LZK+ TZhvDmMCJUWznOEIOnTQpA1WxEIUUAQ0OkzS+nHSdz8qtuzDVzkEq+Zb9ER6XF0GTDnSYl/N nGLwv7K70rRm764DDNpY8cV6+ugo65Q+UiFEA2EOUpIOcMeEwY17+eS1rvl12TrZ3OmHnj14 m/0c5ifHeFHU7vFOPPSDDvWQGK9gnKfgM840vW7ZZDy9odcQOZrVadJcePh5kb/NdyDuCCTM RERDu8eodhE7niCYbqjMDa0Quy1tjRszePjc9o8C50wFbL09khvI4VG7RxttoFI1QCkeSN+/ TfPVlw1QKUrxV0p8j4JIEbxTFDlx1vo4yLRmb+fGzR1yuNYhwSd3TvwaAFNNg2QOaB2KWW5Z mra88MGwZjdsUpvDdVNgtlLZEYupmQZoZVWcgzNhNmjyKzdXdbVMQruiUYLRjcxlnxyuhTVj jLRwduXQ6y5XzMmRJxG9kDJiOKNttdyrjlblfpnSw04T0aFqWqVL7M9tV9mqsTFkNFmzTnKN 1bGzMYDBXNiCMpg2pGw2QMB6WrKJjN6nwjRIolUMzWaNM6QgrYY0nVgV6Y6HUvJyasxbbtbL ZhuizBghkkmxa7axazbHM9tkdUaEtGGyO4g+S2zm9cNlbyltcd1v015iNDVYat+dUdMa68tp 8tde0NWqMYti1cNpfDTRxbcGtx2z2Edm3VaiFKqsAxI1FerRu167NdqNjuXNq167n0xuJ67h 1Dpy0du71erHjAz7KO3eRweG5J4cVXLOZC3E0rQ+76Tx9P6+6ev6YP2ZggaAU1CEIpA0xuwJ bH90JfGxj/xN3g7GrcfKHsDKo+Zu+12j4s7SYWeyH1ufpVFMrWhFMYQkiK9byPGJ8vtc8UFX +Dz4OhGh+Ho82FeeZU9ljDzMiFSKJhqkGepyYhtDcjneg/Vi0NjxmHN5++re67/ocLxnft39 fTBHaVDQv6sdYZnRFSViGw6MkQzjoev1PVPnHdou7KbgGmkc1rZYQ2+9WjGJ8cW8rbVrOL2R 06RsjhMvoqSW/qGMYd6puSZavffblcux27O0fGomXVClECY0m3IpQyTfF9cB1pmk+yLttVW6 7RE0rajFVO6UFKMIFfJfPhffNX739XEsJNVrQbe1zqvbw6WFlUhNPrzFnprqU6GdDOopkIOL u6Zc10OmL7ym6FJBVaPVJHrRjfjiW1h864ZklTbmJbXqej8lwO5A8Pt8eEtTuCaFcVfUOWYY uz9evjiwd86/7zglfLwn8qkKKsWCfXLKUnTTZThPOJERAowxwuz51s5R47qGmLnC3ZyfCfro fBbVGoH1jum2OCQ5qGEkM4hthykSCibCAEDkIQ3OOq2fQzz0ekY397L9Zmg8/3jfJPWv1KVZ f/EKnbk5PJDmhQapKr9ghJ6xoxSQbNG7YnmYjv9+wJP8BP0WQzhTYwhZ/klDdigiSyFjLREU LI0RVoQJCqpByugRbiDI1FENnKd5aAdn0ftJs9mNlwqTPXbqaGTW5Tx7SB3evLKMPWark0Dm mQWTFYujuQTELioXBWQMo6RQQxRUiCTuz82M4T/QCLsQ/kEWKDxg+FX0i/LgOtUT8nXn/IzJ f+1RwPyWqnXD+wyH8gZOAUX1iofXIuyAEVBoglCBFUCKiFPE/pgYf71zf8zTQ938eIf8agqq o9gj+t/We/YP2X6LZQL856U6Ddh++/2q8ohYJ3oJs++a+IhkUQsnvTYfiyFQvhOxo2I2SwRP 5uo4sJmg+NJ85AIBCBEiRIERFEEEAB80tKGCLdzG8UXkQJSCf0kBlqPM0HJOKp4UCx3SuW7H B6ToB0YO8+ZNXgrXhyA0g2nE0oOs6Dq5UEpFhRQhUVYFQpaKBQ5XtBsyvYAI8ohoHgAxQNpQ wLhf5oFaMRYI5vIrrkeNMfrzEVPCJmeoDKLIJvaT6c3Oh6BTuB1bwvjFjxGkfthANXeokVX6 F3KptCMEQ2Nnqw2gmESYH2SoPCFiBAMUhBEQQRIdEkBuhCgMDpPjmZEpZaxJIF0pgZB/isLl GEQQG9WGIWQW8GEzwUABBBICDhAAPe/AQ7dBRT/0R2+40dn8xouT9u1dEFS6gDS84qE0Q859 YKhpd5TIVCs4rx1LK6joIjpXD0C6h6CEC+iiptRHOGu28iKXUAeH6C6AHAw9aoJ5kblNOh6N wPn3B2BhN1n7JsYB4h+BGMSEhAkmiZaDAPcnL3nq/pPnMvG8SD4zNRwu8pUkxcLvzjzHvda8 zc0iD8ERAcMHXG9eVkoH6oM6Fh3cGYGLucYHJl9qduPS4ePhrcVdRuIn7jJehJr2CPuEYMGC sFYBAIECBBUYewIaD05HRDonuJPQfDQETqQxD0iIlFvSZL1jQXDJ9shkFj1jn9WuvGEX2om2 3eIcwJ3BBDQlAyph8og0qMkOk99lRMwtSo7jXZSzjcFQ+oPgJRvMYFrN6j3/YU99jRH8xPR3 3tQRDz8N1pfaX+eD8rvSb2G+2DnV9SfeNBR6/auB6R+gj75bsDCAondJECiYM/KE6YcF9y57 QD3gAcglJqlkNkFTU6rLUAZoML3YHAoDozb4GqFQhgJJlR2ud8fg8V7g93jtZ3IasEpTM3IF +hA+wodoiLzB7ORB9Au8bcOImeh7U5ww6Aq2Oc3kQKh7dKqeqSDYxp2pqbbPRm7SxgMKhREI ChRUX5I7mkRMx0qLoLobBU5iLzyKLBcwyUEDTE1hVKjhABxJDHK7Sz1k45qBgU0XB8bge6GD B6ew9oesginuAEPcEhwNep7kxa0HpgfMOsGs2+cERdelwgvlAQpIwMBlknC2EbInpaQ+yPNM 58DDxBFMw8fIDrz6+o2pYhELT2w4PXVUH75fT53lmvflPgmmwiXnkHpOEJIHT6rgCPnxk+Rg XBm+Zp3ntzTbEz14uTz4H/GTzBNpvFNT38piQ2ECRR6q+i/AGgQ2oxiJq9FPUkVwCDaD4oAB sdIwbEcs6V88wkBWdLqYCvuLUABsHXP7BEXyTaifcGEziJpsGgVTQ6yHI0FTrnGObcX6mCic 8lHBei92FMgQIUdQ/QiQlzYdRBydqp6nD3MWIuGDgCAWalIYfDSxYH3HfBxMUeJMdAUGTJ4R eqyE44OUXpX3sYMbNLAHKBAT49wKhgQR9V6MEUKMhh8hULFQvuOIXbEJF5DeNEAhBG0oIQJq BcCkig0EIeNPnw96ipCp6XwRPL2448DXpPANgFEHmzVE6A0IJmwvjKJ1dX2fU3Hty+h5+csF z+5Uy7UDBzEVEp9jKj7XARPFsdm5UwDBGVZCAmV2l0yamJDeWQRpEwiaKIRfgDeGGqPk4q+g 4BBMELC7gspRJEWKqqiKqqqqqqqqpmmgqgFDDyYOmakVonIUMRIBtM5VkZjCjZjBcjSZWlHY qJTkhtTHm2pmVHIXIVDQ1ICJv4hvQzcETE0hVDIExMTLDBMkxMREpEIxuzYvMYJzcTNigGI7 HULcsPA8AKpJI+USBOl6VTtPlcUcBScER+SAOXQaDL48n5VnbYbFPA+43Kj7hC0FPCKA71xZ 7tO8O5E2ADCRbEA+UoHQLio6MNxPznmfaCB6eCJDkafir7/ZZUdR3VUQBIEci4eJ1DebHc/X AZwz4iPMxsvBiLCcIwhwbAKKKCiWTP0AinAuKAboCH4wG4EBMpIewbSUMR8hZwgXW4G/rXuE PZsbwnr282g6Yq5/5J0d4nrlpKDEhh/L5B/AhZ9YU8udWS/Z9f0nU+ENKptFOwDdzFRDGFC2 ASDi5+19WbLUWbez9GeE1T833N0vq5IN6wGBr+NqSEHLaPeBtKfYHOi2HqEg9JCMn5C5jKSF uBmGmRGGh+CY1CR61UO/rBNYAUYtGttQkKQN6A9oJpxK3Pyaaus1OY0ZY9ssL0XJ2XdacuME zGwhxnH4R2hoYOEIVgQYJCBCEaTFNnLXCQsYMoFGx2VdtTuDb9+waP2UURA3+POG9I8cDqG9 i4E2oQDDFp3KBhLO8uSM7cw7BIXGhuoFtDcWLDGetA4w8sCDYHBxMEGIs34/y/j/Xot/L8l/ mqk9J0qoVYSKLe3EQJYMGaG/aeDdCDOg6A5w16ZJqPEB4FwLYxOgbDVcQLWIdBRYFoBV7SJN 2LgLknhIRb8An+Ggxyh7+aUYiH2Yoyi+AmynKAxJUiCTTMwhg4MOEEQzFFBCODAhgboiF4cF MX7CRHaEvuceAIbwjcQ5DzMGlwaCaoDSsUBqIDTDhMwlMFjIeH6eYwAv6e35c/Rs9XLjk9Ww phHqVOSlWwMHGO7CCyCGcVTKCgeAEAOmFndPVYK6SGgdMSEjER3n7tI61Dm/XIrIhV+fk8AL 90th5UfW0BDj2i/g7tHkHb4CQiJi9SvALkDdfulAXeLD+H8vThNxMfX+FHfPx70faMgfxeHt SLn4QMx/gRYAwfA/AgnQFPjarUO3MN84afODaDXlXoT9YS7j1FvD6j50DxHjkGESG1IeSWQr PfVaUVDgHMpkF6ToEbH6IA+MI6wG5+ZB7gigP42AKVoBN/oam3PdOuFRIkCE9EIlEoSnqPYn xuet9MD/bCwgOQuw1P2jvuEA/SqRNmNvZ6Ame9dvPd1Tk7ntrQM1yBqtu1DlLB2Q8TAwYWXy ERIWQI5hinkQCB4p2n0cFDdB2w8HWjTieo6lD40AqGJaFMR2OXf2GA9MxAvSm4+El+WKKKNx /XeRTbCQ0XzbOqgenUeVhOoIKtEaoaYgSQ7eVruaH72KsEItNWgnJZagmB+RduI9R8jrlSnP Bz0DQtBFTSeRD5YiBYalOMLE0M1kJWJ0nJlbuyjnYYpJTaAxj4oTGldiRd0mgpkmihpGpIqu IFFmFzoQ44DyhnOQHl3KjwaQhYCiUgSB2OEw75RMfBmMTlKgG5fBkHbCagYiwgWR0SpoT5gP P/L6jz2tvrd4VVTNZa6jeFu+L2uYnDVuCjA58NyTMYWekPrDA8BPInX1zSMtByQDmQQ98rgn kD0QP3YNbmc5Y8m88WYVA8FUWS6oGiqU82OHbfbvxdKvXAv1QSISTMMAzDAgQhKJKwR48MSI lgV/FdH1/1dxn063bUFAFMErJ6/630Avqdj6ZQL6/KrpE9nXeyMNJQ0GFaPonNjZcuvs2N2y gfJCRE5vCBXLx+3Vmu4DM3HzgSPSg/bVMwE98AUCgbpQ8Dp7kOIUpQ+3t13bXj36P+LX5H+B 1SjMbrPWMPzxkx3HQbrjyoGhgvt16aH4IXs+3eBoGA3IjgBAsvCgbypCiCk3t6QzQxelmen7 fd078wQNYKGBkSrmHGnn6+yUfq2vC7tzoUyIFyGdjCv094aWcOoOAanzcNPYR2JALQPPDKEI Pw/rvgWbJMn4o6rKXAkGTXCSEy2sBXv2sfZ+d2/WwinNQb6zsEuamkpHEUfflx3J1yoLUGod sdNhtLtJHo/MnA0Ey6XsuXOeuo3ezK1LKKxRYBKITZzpF4QOrNBsA7p9JVVDwF+kw26TWoak 5rduWfMjfmrWkHHFtYjCQZBuUoRGkW7C4tnUmaHkhToVd8kUIX12lco+5HMGxQ3+RP4k1NJy ZJpWTgdWB4migKWEdx9hDgB8OG2jy78A3nopDlgpZFeDwVWklU8IHttQCBB4jxvnzoVwKIE5 5QaDUOEqGhw0MFSERTUFUMQ6zKXyas5/q/cHbCyKC8Ed2iGqLFGdqLREuGRgU6Sod8QxCmL2 m5uik/iOCwnO/8Jh1D+j12ZpF7FOWlH+Xl91Vi/wMjpJVmpLBoTDM1msbDwiBMmUG7TiFJus JFZNl2BtK5mimpsvZw1mlm5YatXMC4VB03RwFMzM8sqcoVnEwcYI1MaxqUU4mv+5k5mucVC0 3DJwuzv0oolSj8dsnZnInZyKohpaahTDpK9OvQSSH5lRwN6QFAEoQEE+/5e3t+fdz92/OFbB TvPE9bipUNPGTgwShfM0CmTSDCncBvAsHK4MhNQwtgjBuuH4359TrQyVUNeTTKd32/ZyO4hP r07lWIsmyJRLkUClD2Uuo4oPm4fJF8fq/ML58J/7+j9H/2EH7SD9jpQsJro2hHqQ3ySEatCu RN8dDkneGagndvK3kfxiua8Hq1+k793AhcTRxJQGs0YHjIu8GKbiEgHdmU+AftCUPeQzCZwu nqBcIbcRlxM6Dd3E0AW9QBRyYt1M+mdpvH8+Lv/athX/PRDOO4fhPKqWnNEGsRRQ9mcwmvZ2 PvVGBkFDYYA9QiEZVkEePbmOyM0+eQZuHLTgF8p2BIpwcZrWjjW0YfGWEZAoyZa8hgNsCa0t iyMyZJcc1N2SaVNiHTDbvDXQ06ZjDX1VmuT2ILTLNvgwxKalZ3QgmWHES1M7Q/GUIXEfgw0p 6fpnGyuFReFWuL7Qk5zZD7X2ZcRrKm9ncj/9YggeVDLY2dnQkQzG1aiqz/b7udi9oEQuaB8z vJa8hAZ6YhC1OHcyTZ72uM9GuYTPTlxfYQPFnO2ZUj9Noly4kCQIjHLgphQVh6EJWcctrzxi AN8Nz1wXu1rWnlfii6rmit3qKGbWz1q0OpjZ2pN1m2eSwgSbmmErQGOvO96LxDJoIYJOusdE 5Csb8y7mC9hWvJmIjWp0pLziFqYshnL14QPJ4iiJWpjKii8PHrh268EhkmzmkmSEISboZgLP poubLaKpxthMHqVLkC2RhqvKmGHUMO0IQGUxAcK1aZ4Y46dIHWVe6cFFYvM26LlObErKKh4e c62KRT9DWh48Lx6wzyLPLDzevFDc7OEFiLBKCg5iOWLK5nESTZ7bPsXyWL2L01nYjg5XY0jC 0kIuisECEOOI1eaQtPkNCYdNvReMst0sOM2GCS4KZhmXwGnLOdcwI2SdqRyxWKeS1i7WvDtZ 1YuWiVRvDdamMD2eBSogvWJlOomHyyHE5d2Z8TWLPhEhdmwrhZ5tRERYSmoC4izNdynvJTu1 QJ737ZJxnbd6PHrpw4vDsyZsUhaNgFxPDTUGFF05WI1h6DQsEWTQQlEQj6nZfL7eNunOMuW3 MtztTdratS20tO7LyN3m7attVwIu4IFgpWgQ3PMzI+FFrD88v0cCfk4/d9Njpk59gSquixuE K28mWNmdQbltrnz5ZO9w4aJWCQ8xXQkazR6NHXBcYp0zIzksNrhDmBqrDQo3FYJkES4BmHDn YZ+FU7zJ2Q0RJ1ApIdgQ7ODVjC0EL2YhZpSgCDZSKFQDevTc8HNAwh0lWEhhJiHMQnZk/yhu A5H5S3pvlRCYXn8Qn4IO3mEclXR+GcCL5ao/OaKqEYQIgSCF4FMMwEvWBk5fl0c3VL341nrN Rg7iIabpqyeSZoP02q6EwzNa9o9HHgN9vmkzlwrPIN9GmEk1hFlUM9k9F7g/DjohTfO1pxuo nCpoV9rfCWZg+GgzFumSWTHMNm5CAjpOoO8DgJwgCkpKRQ6/7kKae34AMg8bCL+CxumRIJIH y3RYOBpiQHyGaWLgQigYekoR5lsZHQcwWFqDXcZNl1D5BwN4ZpsdmaUw2QUtEGEkki+EZKaD 76Lp0FJLEIQNNBIwsyhFKMKnlXO0V9Mqm/fsA4yQuGmZEf2nvivciPqujvD7P0wkQvyGOWyH cYr1OGm8VhmfJGeEgUhxkX6IBY5k67OEi55QkKMGaYeNQnqyEoUiRoQ54PS8OXOxy+Idb42u PrwtGUSNtl3DNjqfuTjhhA7oj92Jp74vSGtDhFYP4sOU9y6AHE77nMbDmqUUsKKL2qrQ06im 0GUlJAliQeqdBu3hTEQEZPT8n3BVtdmX96zDCsq+yMP6cwKJDM9q/MvGcRs98dxZtOmcgQ53 uo8URCRXyDSZstX9ug/SiVAOe3pN/GD6pOaF5YQhJKSd5wJkZ5molu9Dk2RJMkfJ8FOY97Bs IajD2rOwbItzGaKJkXYhkTUtC6kPRFHYOZ2rEA4Rf3H3vK6XbmvdC9ckk4TWJB+lifBu8Kc7 CCX2zn0rK4h+5hyCA7YYDnL7wEkVQS1sN2pgaSm6HAaIJJRsi4RDo3+K5iylh822TSa4PDky ezbe5ObR0nhmh0t33mJthzIX2r59tVWDlMxm0OHJxwoQ4kMygToZIBJn0zz34ISSjBUc6HUd FovhzeMTgRB3j37jXCVDjKQEKcv1pDQcbCBUXg48rAACKm19X18Y3FYSrpou4P78q1wAsQur soWyIOyHEeVtSza7OIPHWTkGhyPssld1F0LCt4MgjIyQmAC2ofIuS6HOtfBKMIkSCTwhBI3N +PeWFg0qCS/Dr8R1VXRKlRqfZsp5uNdy2cO8zvJ03cjkvVFSSURFKBBKNJEgUgyoBMFCQRBC sqNKISkiknQnha0DwHjMMohQkBABoB1A8yK7YDxaRKIhyQjGAT4FQt0dHJt077+hrj/x6cxk VEN20Ow9taFA8/rVUg4KGcDHpXnYIgpJon1E/s3U+c8YfLTw+R8FGH608/YbkKSTf5mHgJnC /1koGGJRa2VqGHbDIMHXSUuSNoFUSNEpRB3QzjL5okkA6ZgenkgHwr2lH+BKGyl9KN9kfjKN qkrP32t+IgbMyBxvu+2oBiADrjDD9eApOyZi43FvxGoV5csGHC84kBceIIdBmFJIwEO+qVf1 09ohF8LJd0zDBcgecIKnAzPYQBDfFSDu2pdfgIiiXUYC3y0VshjaatbYLrBDx9iWtgfXk9MF OkSLUPdkC0G0eY4zO8mAjlN4Z7hLs0YFI3DdASkLDakNQXg00yAjchDRwjfZFA1Lh9VtNVJQ WaWQAjAFmnl3UWXNxVVkNGWKZGVTUxuMlLNbrPq2tqF/UK5Abjsy5gHNSMTG3sDlJygjc6eF 9pwWOdDzhYOjbSBrg/B04UQEpphQ0NQ1lJJRMY0i4gZQUgdRibzSxlIn8h9boRDfhE+MFhGw pbimdwcQkUkBWUUEDQUpRQ0A0gtKmCHf0cMu6DuvvW9HogiqgaA5ipb9X05keOGMwJ1KSlsq VRNbMbCmerrYmaGkPRsjhpMna6XtHWmmqImiQiKsU3hsJO6TIS7cwkwqEO6E6uB272xI23W4 he8j+oaGssVxuMhHA9J+ObggQN3qWx2M9ZxKQMhBPTFMogEgkxYNTX7UMPjke8fOjJCDeHHf VSMbXWgjASmUtpjbdTcEKjLLZ5WjiUofAtJwLt5nG6WG3RC3FOBnEhFStVOOKwQQOsRH8sij IJCQhJSkEAlIPN1HiQMkYhpSl9smQFUFQJLvfBkUb4QwiG7WQBr79m02AHNBDjfAwdbLz6wH k0c5BIpDSwi7g5fQviQOE7sF4G/lx2Tl0HQpLEm0U1SifjdoHGvBP3hWfrJzouj5KE5PvHli S1oT+NE8JQdNoYcHTlcuqYcqw5zmDSLtSAmZWQejcTl08H16YwZJt/1g846XSwgz9EiaIuGR Ckwy7LnGZM08b0FyBticjkGsDmM+8o4nO0q5YZ8A90OiModxm6z3fosmMfw0ApFRYhHfR75U sRyUruiHDoTe3uuKoW7CEQCDzhdKn3dhxReZlAoQYqRWgEkIVppYgShpKDkB8J3hrnHR8DsP w+Ij2PhDInr6A4skQVRFERE1FEDKMMURBRJ4u7xYbOgTOl+g1RPeiP1PSB3D1BQd5MkUUCfJ p5zQTDaPzH5z02JkJAFNJIQBJQUhUQRjmNUSBAB35p0DRIUBlkejQdorYnmIMifehgjrekDz kBAL/UN1E5ghG9wN3MYq6+ft5zg5AeDWrsHEF7IdMZAYjuDmzAy0HMhRl4I3LZ0+3o/URdpk GENXzFDW3u3C9toYrfCB7F07KgbZTtgeJlZNTzyxTiotGDBI2w0TQEC6x9QWPpBSxlNlkyGw LmaAF+jtM9mFCZGMx+Tk210DWDQgLCfdoEJuGQOBIf49ix8ThqF6vqLYHbmMvHmZM2mRn7eH OrJWhSmmHdO6wnY4WUYZbMVpE+q4YiKWFos6cQFwuC2Wzvyk1SkYzSwGBBqV0TkxmoNSaLGF sIGa4VAbE60DWZ7iSEMgabwSoyklVQrUjy81CZIFIIXA8iTkECJZNEVYHHbYOuSUIoAkIlSx MtQ1nkKKWnrYmLDZNS8KJLaaWEJTAtkEEjEQWBVSoZ4hlKIiMCNY+GSiZDLRYwGCDaGYUAYk URUnuZJTKglD20NwsSZmq3EOJMQ+MzIGI0RhUEjhFdmsWiKEqhknhgYQSRtBkS2yLIhIpqNe uoKhkG0rXVhzDkbAumgYz1DMLtyQIjFiUrnYzz0HJUTEAkEkSRHfNIaYhQBvL2hgNQh3LzG4 NtLVSVDQbDyh+LswTshpiJ8hDa1aHmfACqooHIHznwQYZMTBu4eehToGmDtDBpDMl0pMtVKU 5BaVCIWHDUD45e2NikYJIGQFJIRN/iNyGsf2A3ufPMQo38uu4pBwECkKUOSiB1NnshNoeLHX QOOhkGxHboJHRnJWqgGt0xh3Hco7ImAci2GX5ERipogOtmgtvy0amR76uw2X5RlqpiVmeGF0 KefDZ7b64Ho0UA6HRBiwtUjFpGzLKKyl0GakHy/U4acEInCZMIjMAsAcQSUKRsb5JRScoRHE vpEKTZDigaBVMw9ZZ1NImObwA3IGsQvEqnFi0RAhE7cM5NG5Ld+hjvEWQy63HwgQ2lBwHKBM i02GND084D05qGCbEB5A0Tf/eoDYImIPPKdyaAwgJPESzDyA5SzORCFmJvvRRIjZdF9cl/YD 8vtwFTRPbs3aXAr67r5beRg/f2eo2DErUkqAcTghzrCYBvJZMPbZRmJxHlsu5ghmMsO10TII VonJAoXLeG3g7UrFKvKdM3KazAaCbt6V6YTHDBuXO7ex2vTLYWlrOWiUarEOMbTiQp1f3UwA 6nCFHmqYbDLHOxk/6uz4FRBKdsoixQRkONYj3vYwpCUBBL3BhPwSKmQMc4m1mAgmQF99l0IR kC4z5eRbmetHKilcLFnex4IKrzaDBI92dkhEBOm6HdRozM8lpmImlptvZfRl7eJM8wqliPl0 oPamL4aygXcGboZgkV3RtJQagzLKH2WSG5DJMkGUiT48DSHDfDKBEtQ1CmnvF3gaNatJG7Qm whUlBQRCQMsPL0ngGrnwqZBloXNuYX1hA3xCRSKQEkRjIhQIUNLEBEJ2+I82iPvY+LfHvaGW tuXzjvdTkpzxnqPJZAqEA9QQKwpTeAVxNS4Uy1AdRGg5huQIaQQP8hatCFbjXYJ4R1hwhQF+ w7k5jvtbgwjAOe20EwtaFHVKyrIeuaT9e/LEX9+m1UHtl8XsMDmGOx+PTpTzkRLTQgEj481L w1t77m8J19KwIQh5RKYG2gmdF00ojF2lElrNt9Du8hSAcsphQDuGCtWCdrNGwCXAxFZjbYGq TKLRDIWkooigpWGGKFjHARTMCiCRkEhOAJ9zMA4hsk+AMhoGhAyKxX9xCOBhlEKwkRUFEFUK xCEHDA1YGKd4dnf+PpX0BzddNW7jNftjRe+OpAqmBtOdIm5MQ09flW1PvoYh8PxBYTq8xSdN kRAWKB8pdpnY2VJOx+ayVkDEOyw/RZghoyrtLGKQzqFhiGMgagzC97N74V72PA/QSDoEl9mL uvcFGVYZMgw94MEyEMFhPe9x+vWnmBhNuB+L8YbEDKU1ewOX95UoNb8UGwpIhSBUFvjRdYHL DYKPlHq6rrdPRC9qofKCd1VcGQfNV4dJZa6vsd6/rj9gW8PHHEylnAzE9B5R0oeAEgV+MwMU 3w3aCMoSMwKwJAECiggKCgn23259txMfbmB96Rs7B9D3ghyBkfAPOdKAd8tIxgqm3qT2VGbo ThA7/uAdFSrSLvhMGpWkOvDEoCIBqQ92AGBLuSUfSEhcU66pFeAXwWrn4qJVB8I+yr599snT CTXqPR3Rsro6RQLulQoSQpJTD4H4QkMztCIdyAfhE5hpLwQNaTnKenpopgPnmevJpfs036+j Ac9hjSdyURXGfZZ6w8SEBMmVHOFDUUEgBA4eHPqYUA0lcAtl9ah81953TezNGtahgwkc7anB XtMPQmGYu5GbtUPDiFeV+7hDOJspAsR7/Qjok+IXHlkAghlEqOocNd4ukThCvaG5djg5XIK1 yC2DD3UCkIlVUgqUSfEDRniHZugogPl6v8v4agLbR1eIk68bAqJ7lwO6JMDZNmhRze7tMp1o vCCabS1aOuZuxyqGQbpXWc/PM5tlGoRL0Fn+SaGbCi6J9A18zZYfgSerSsqU2gpbdf23QRhN GWgwoHBRgfP1ZzgfuF+6TF/MCPBCg0UYQANw17eRT65CPrEDuCQgjAFaMuwp04b/c++1j3ee g5o+HKggdKkGJFDxEA5hHeAnCBYE5mKbgkmmxCccsLTiDYHHk2ARsqFENtpTTECxfgnh0Os4 qDm1nA1N66wBJyBodehSEBvz0bDaGxrAldWEeR2rA2hlRrXGTPk2QkaR5EoiFDzKKYv7RoAw CYKCM1BHUN2EC9c5KHhA2uCsHN42LoOX/eD/UjzI9nSHG7KAraTttuHPv8O3zfVkA7EvqOJa DOOQtKU4tMMwy1bR8fMB7/GvgaO6g8YapMAtmaJh3c2GE1Qhu5s09HnmqPTO3eUNe62UiKq9 xmChiYWxlywwKt7dG5ylkURGKGsoLFkUVj2t6ZQWdDDRM0zAtTOhQS9FoYhW8owQqGIGHMom Wlk7qchNr3AhUmSRIgRXrrVStSabNZSUmywwLIWSGBYWhmAPQnyxIZI5GRIsgsBuXwIG1u4G Zm3LsUxpzsMFgB0YNQyBIOHfClnCl97WYN2yY5FsqtlBTJmVqNv2QoLAOL9uHzzf2JygdeDo CPMj3xSSMaEklFIhzvIejoIO3rjJ7vcUsie+TKCg8bgTUCPk8fD5fjLAPizPjDM87wQg7yBX aZCDWQcXM685g6WN77KootBWYqIUzDIoLGLP2dm9NmzqTv4Y9nG9vkcApQ6NtKl2QgsdChyN Cm8gDumWATPkJ0JNKGQWsnYi8qmCQ7ym8eXY7udTpZ1gM1DruTjiHZ+LDlbV5sA90hvGbV1o zY9j003C4JUTkuINwS1cOy2rmw5iBz63MGtMJgCT8p+sjStiLxCg8wcHNMDwcciZdgDoYIgJ hjMU1B3EYcMQyI2QIJI7HvPyCMojXC+Qux1vSgURGEFelGPeGk1JDA55oZJ3PsVQOr7sZBnt ISQ83VMIXGEQCBGO0TuASkgGxKrBBdCYiLSFBQmnEewBPoMAxxDk84n5yBokIw3HHyP1FBx1 Hr9ElInEF7FMJzvOKTdZXiQLFLv1Wwaclt0WyYLJRORPqFN5oTYgyllIIR5oYzD0RolaXEIw nr9x7+v3NmDu404XtGQ4MAERGQC1Z46KIRoxTaEhkdzs0C9JIu5T2EENBzNe+x6CKuht2kIy OZeTkPOSFsi4lyHO/nTMw2yF5hnxKaa2E1CSKIMkEg2g8A1vNb6aKonenr+bknUzU0KQEwsw EtETQVdmdtma06sUMBzFqYqMsD9M4QEBDAkpCCsUUk2FoIH2cW4kParAFIX3Nv61/In2YdPN lrjDIIlQCnwO7AU7tTufvO6n7XMyOOfQRfDqEFl6H4mBWa+44W9jqI4uFNO8FtVLU71CT4gm SzxFcniXcSIT7ag1TuI5Xbmvgs0ED77DtNfCN6e6enHYZmSQkTa/8FoO5Svjyw9nCaTP2cdc 3pI0jtUpQO4wnO3Ec6gnrxMS7FhpvA2EAVVW3hXTd0WJHHNzCUW3oKRqzZFCbSMM8K0kMMs0 ZHcTJmWE6l8Q8OPCfi82osu36cRe7pcpWNT11BeY+uHk4mCc20txVfaP5V922bVN6oKCEmfn 4khLJDv2UGx3M3inGDzVZsPzsFiBy1Zl08wXTolQ8kGFFDtlhXva1ivCIgkUI7KBFpNsjsb0 l3IiVaI7eqB0FJEvUO0J2R6fJnLsbVrbTxCgfKBBmUG2R9gX094Y6XfLKYXJx3eUnM9aVZ8A bt1aZOOxDEN4XCF1athY0xjvG+BV1BATcaMBRntPIcO312nHjTt3u5w/P1IZDr9bjgaOvG8l eayWqBOyUYqsy3QPU0mIyEQQLcOnNXRZyJmm5hmVMslYRJCYwI9jwvBDYPmYVgGy+eA+/Pnh iD2z2Dp+RIrWFBlTUkIziHuo3Bs5QsXmkW/IRn4cFAufUF955Be0CihGEDeDGw82vSdFxZZ2 PJqB67h0GidO3yE0B3g73rNR2xkDoIkIg9OCtUoIxzD5Bdea9HZytgkAKouRuvYcsm8J6iIo iIiqXRmVz5+Lm3nWF3LCbu6iiiA1oXt6ttLHkhTDk3P6Z7w5XN280sUXXsdMICMgwnaCFPMR ezZEjFzCjtnCBmSe/rVIlzbbMMkwuNKgXKQuSwlR6pkQ4QEIatRSNOpMQFSmUNjBMVMcACkI KvIZEU+5kRCOlkG/pUz1TLRLQGt8ey5RnY4WkQ4HWY0RIXIiq/GgwHmLqlkpeop3xJLeNdAY zlhMh9REzLW1E3wpnppjr9bvLZ6YFnakNSGFiFfYCBoD3ZMQk2C7OIeoITctFSKFClnhx71h VTeMFwzMCAaUBbwCvdDZp2tQO0jM2bvw8XthERm97sRmpGND4toRAFy3BOr6a906wTkvmH3t CMmKzTD2sxBUozuTVJDvceU5YxDARuBmritgvHftqzbCGSSZI2zn4ozVXlNfRirPA27lJ0xY xisajMze2d7VTzc1WCyT4fKvqIGIRjIhJsREG7uFswrrSe9KSQ0TQMEoNK1Onxdk1X1ReDcx JXHRm/pnVPCduHi5CyWx8ssA0S3ShcllkWkO/nyYHbtV1cycHac6OvjvLZReN5XKTkuE2RMI cwma5GC0lpHbq8kJOZ5jhHzi7A4z4uLAmoF0aKCkMpW3CMyt1aulrh0mdW+5iMDDQI/BDSNI hQ3o9PgbTRgAbhZJu2SBp30xCBXzToQJEQhqbA9PpcJO/RximBS08SEYB4+WqigsALNsCe5G djsOQ0ic6LO0LdK4O568ANDAbJhJMQ4wErQEUXOAvKDnJDYRVjslnrtbMQIQ3yMKIGCUARtA 0bJsZR2UZNbZQuE76Zli6QxlJPkGaHgBbIchqllD8hIh4TxkhqN1vPdWSI6m0lZcnlVQmgBW RyEhDqd2lNwnRLyit5DJwuItHI2NKCg5Z1TM1gT1wSTYkOucyakZbVTWGoZk7/RrCmGBRESs mqVFAQKcHM0wPCFdJBs4GIHJYFQMNKVANmYaeLRG6O1Bjz8KFXWDZG9mVmWMlQuktKepdcGO aFUVBKyBNIR0CchgaYD4pE7/Wbj4tjq8PMaTDtxrulpO7p+LzHbz+Lp2XIYgjEcPlOPF86b8 uSeOCfH8HpfJnGKT1CDvE6JQYhAIlB5pMkAiAWIyVjcB8ZNHTbrd7klUJhIoluxjQLNhsdkB SEIBQIzKLQJ5fIdabwmCo8cHSHwJy7zlHdU0F8XCoGI1xXwhV+5Ar5ZUAoTv5hiLAz8eBmoc XaBOBC8QhyClh5AECuXfBcHhP1XN+RAjkWOwZd/CO9+bmwPlPXIew2HZFo0KFCK1K04sNBhE NFSZEXAg0VqUkqJSiwWSjX0uMy1FVtpWpWKFcuYo2lS5SsAMkqVKVpi8QmjRKRREUSRNRw5u IPsPN7ctQ2B3Ibi8G/EDX+jE2oPTB4EOXKR0YxHAPhnWpKoWild8mQNJS0UUEwtUFoEzgYKp mXgZ3IVzJ7AgmXW9VOZA8WorwxSovtnKdDv7TbloKbJCwa6UXTF7I5ZaLgNyBFQuGL8nQm5M 8wqlCCZqFgDCEgoFc+8yLvnyqzms65pkpSeM26wO2jDuDoM9oFtIyCQT4REhAA81sZnPoHJY zE5Tyc65TnbbAEM0VWlPENQTebYEh4R1NGfGYeYlzbFS486Mrvp0S72FhxClTPmeZHokyNi4 i55tbDeJ5PWf2puIgBVJzht6trgIq8DHEZCBFER8XAzZiWOXIdDhEs2HQVQATVDUQNDSoQxs IdB+D7SHseffrYgcQ+bcA/zek6AgjCBwhXCIZKUCCGGaBQpFpAhhSGUOhT7AgDfpfWdY0JEP bdVQQG9ENEYSzkInGgOtA1ca/LQLxLaG6dB1wf1W8o5I/gcTdaxyFwvc0T6syaVAiqfKAeUB y2VSxGC5uV2hMUNRSMDu+TWsccYdD7wjpRh3gIcAD8sTDs9/kOM1QyCkFZ4vc5EXTnsPmUV/ tpZt7zhJPggz68MogkD5URAOjm+kPcEm86URfmST7OZ7j2hycO2MqpT68cQNcsGjMxMhmWZq ABrAku3EABSNaDWkqFEqiip+TIF27BPLEjBv221ndFPFeTwsP8HbnOWqsaYWpsczn826IixZ MzNcMKzL1LMUsk8EIcZCl/Btq3dIbR1YuD0yRLg6ViDzZrHZNJMhNfojAijhhDTIsLMF7Ni4 AbJbs7i14feSZYXbKGpD4JkZR28+PDM+qOvsMXzhxA8rEw0jATAUFcenecAOBGZwZE/HQC30 hSELjOrOs4mIkInm76U6Q6Om6SSejdSnIZHzBDssiulCEJWFB78EwSEhICAc85gBoiIUYgBD CROgF471aEChWkiKVKCgCqBIIgkiVVYEgAUAwh6kPmuwwCHIt4h6ZoVJJYQGyVBTH2jt85hX CaIblbQtBQ3yG0BQSJDzkL2jDbjCIBggfoC0oCBZD1shTTT5NC6cMzARU0BBBDIiHys+dARk BYGHrZhgCTJKEE0EsxEAEMCfUSnoJDqiMmsJzExqgowxA6g5/c/D3TceJ4AhDuGEg00wJ5go GEUQ92DDqsM73fM5CKa5byLj0qcVKIhMK21TLuJlSzA6sYIZlDhZNGL0icXm5gtYlhjrmGBL vexO7SHgeIUA7MGLxafznBIHYIwgWoeOS1uWh2HUk1h9g+QCGzClpYx94GzXpQ6KS9Kd8QkA kWBIEVDMLPY5AyJoakHlOoHr2o6dxUH4yRyAT0KNiH2/ZlAH84Qv6GF4BjiGJjguJMlShokH b/C6dOFQ4SgbcA5tGaJQdCkBrImH8sQf/xdyRThQkGuSVl8= --------------070606030106070800000406--