Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bz9bc-0006HG-Ch for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Oct 2016 21:50:00 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bz9ba-0005GS-PF for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Oct 2016 21:49:58 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bz9a3-0003bB-IZ for pgsql-hackers@postgresql.org; Tue, 25 Oct 2016 21:48:23 +0000 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bz9Zw-0004wf-5n for pgsql-hackers@postgresql.org; Tue, 25 Oct 2016 21:48:22 +0000 Received: by mail-wm0-x22c.google.com with SMTP id b80so188763095wme.1 for ; Tue, 25 Oct 2016 14:48:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to; bh=hXZ8coxWapNaYwkl2xb0K3Reu9GJ7o0l8/nX37hMacM=; b=taP3izBQ0jwIkt3JVUv5uByIvcR3cnU5dfpGbqiPxbgQhmmkoYbBQZVeBwErycZNpV C5oaKC812yBT/S0/IJcX6Qv/UPURTtgG6E0dSKZ1Jewin+5A6A9O6gxMX8X+2xJgixp8 Osjc5V90RzYX9M5qOg+b64HGk/zihJykLM/9K9EZUrS7ioFar4e4FzAk50rY8z8ZutcW gfjZK6q0ArIq9r0gfC1UfcOXcIfvN0Mlb+QZswe7o1Lvb9VBoyhrkHix7SeotMeg8zw3 mkeygFhdklfDk0gnRroHODHQy508I/9D0YBlcxU2jtqi5pDdX2Yl4JifSJzHodzbIr2Q 2Xyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to; bh=hXZ8coxWapNaYwkl2xb0K3Reu9GJ7o0l8/nX37hMacM=; b=BKw8eqVc10Fqh5USfUX0+ENut682nPusvWi/uiv1vzFgZjAGNs5b8gQNsj2sXtIyfp kmpkiqpwdlks5kGBNSuqgf7lmvNIiJMU3Okz8zS1cN1HmTN4zTJXnitN7d3GBqUJ7Tvy KCES2tLChcub5kZmrNl+nazKpJM9LHIn86vw6xD7DGGSVgaKra40sOiz8NqryDGw1MCv 1/bPr6xD9fjLO7pptFSS8rab5TKeMtqHcWE1bVCs4zgcrcXyORqhKxpnrA/sMpS2XPh7 FcQjuizDbltFlY6CJfj6m9XGLctRv+NG4CxAqC++619srnUfZzqFomf5p4mGLFmqf2eX 7p3w== X-Gm-Message-State: ABUngvepXHe+Vo0bqJWooeGP0Waz6DWDnP+iAxwZ02yEAsoImn0edgIL2PuUtRuTKLuGiywNn6R1DNhRtZgT2llyLRI6lfe9scuRLDeInCBpqK711cUisIhmAcX4b5QPf2kY6E6v9XdAAsxotrdk+cfhU2mOvUVLl5BlN9IweEk3vCnAWDB51nc3Tg65UV15DupcYm9cJnYj X-Received: by 10.194.24.199 with SMTP id w7mr18605769wjf.197.1477432094010; Tue, 25 Oct 2016 14:48:14 -0700 (PDT) Received: from [10.137.2.17] (ip-89-177-44-58.net.upcbroadband.cz. [89.177.44.58]) by smtp.gmail.com with ESMTPSA id b8sm27214202wjq.40.2016.10.25.14.48.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Oct 2016 14:48:12 -0700 (PDT) Subject: Re: PATCH: two slab-like memory allocators To: Petr Jelinek , Robert Haas References: <68b837a3-ce55-f9a2-f685-9eafac536f21@2ndquadrant.com> <885540a7-ac72-5a21-6dae-a4d5b50672da@2ndquadrant.com> <03110c11-ea72-7b4d-027d-6f19eb300b2a@2ndquadrant.com> <11821eb9-95a5-353e-ccba-13e8e9351e62@2ndquadrant.com> <9818b54a-fcb6-f018-0b16-96d6a1d1da27@2ndquadrant.com> <34a6d4ea-7f3d-a62c-fff1-7a9108c078d7@2ndquadrant.com> Cc: John Gorman , pgsql-hackers From: Tomas Vondra Message-ID: <4f176a6c-c197-165d-dee4-5de8f279f1f4@2ndquadrant.com> Date: Tue, 25 Oct 2016 23:48:10 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Thunderbird/46.0a2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------D6F2C19DCB329AC22A653F8E" X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------D6F2C19DCB329AC22A653F8E Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 10/23/2016 05:26 PM, Petr Jelinek wrote: > On 23/10/16 16:26, Tomas Vondra wrote: >> On 10/22/2016 08:30 PM, Tomas Vondra wrote: >> ... >> Moreover, the slab/gen allocators proposed here seem like a better >> fit for reorderbuffer, e.g. because they release memory. I haven't >> looked at sb_alloc too closely, but I think it behaves more like >> AllocSet in this regard (i.e. keeping the memory indefinitely). >> > > For reorderbuffer, from what I've seen in practice, I'd prefer > proper freeing to 5% performance gain as I seen walsenders taking GBs > of memory dues to reoderbuffer allocations that are never properly > freed. > Right. > > About your actual patch. I do like both the Slab and the Gen allocators > and think that we should proceed with them for the moment. You > definitely need to rename the Gen one (don't ask me to what though) as > it sounds like "generic" and do some finishing touches but I think it's > the way to go. I don't see any point in GenSlab anymore. > Attached is a v5 of the patch that does this i.e. throws away the GenSlab allocator and modifies reorderbuffer in two steps. First (0001) it adds Slab allocator for TXN/Change allocations, and keeps the local slab cache for TupleBuf allocations (with a separate AllocSet context). Then (in 0002) it adds the Gen allocator for TupleBuf, removing the last bits of the local slab cache. I do think this version is is as simple as it gets - there's not much more we could simplify / remove. The main issue that bugs me is the name of the Gen allocator, but I don't have a good naming ideas :( The basic characteristics of Gen is that it does not reuse space released by pfree(), relying on the fact that the whole block will become free. That should be reflected in the name somehow, I guess. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------D6F2C19DCB329AC22A653F8E Content-Type: application/x-compressed-tar; name="slab-allocators-v5.tgz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="slab-allocators-v5.tgz" H4sIADvRD1gAA9Rb63fiRpbPV/grajw7aTACA3617Uyf+NnNxo9e406ymZnD EVIBFQtJkYQx6cn87XsfVVIJg+3O6S/LScdIqrp16z5+91Gi3W53mmngDptu EESem0VJK3Yzb/LN1/u04bO3t4N/O/u7bfsvfOt0drZ3v+lst9vbcHN7D+53 dtr7e9+I9lfkYe1nlmZuIgT8lcnz455//v/0c5FEU7Hv+sOh395563Z2d7qe 3NkZ7h34cAH/2+kOdw7cg31/tz0SV1Eo+jIWnX3Rbh/Sf6ILOqwimUNxF03d VPwYhX7iiu8yvPo+Hru+r7ys5UXTd9UzN5MwbiYd0d0VN14G0zt7ort92O0e 7r4VjTaQq/Znw1+llx2Kf3w8vjv9IDpb3X8JNFKRG2m12mw2qyJNvK2h693L 0N9KZBwoeKiicCuIxvA1gHtR4stkOBuNZNLyxL+FeNsVjaWZs0wF6dZ0Ok62 rtx7OVKBFMsfmCmenYn8wQpPP/8WBzuwszUfpqdCL5j5ciuMfAn05JS+tCYr yC1xUp75zDQ9syOWlrTFVhbXxJ7Y2X2ypN68nNKX9cwe4JL7AsWaCm/ihmPp O+LgoC1UCF6FK6e1Rt0RewfCl4HkG816VXiJBIMRU9iV6ACI7Ow8L/1q1Vej kWg2xyoT7taXWsfwS2dUVejLR7Hn+vty32+1drvtUfdgV/OKJvrlXFTBKP4E J99/L5qd3T2n0xYN/Lsv4A5gW6Y84YE8M9FXv4Mo3ccBqyAdqHAAyouShfi7 2Gkf7B1VhdiEEb9GiRhGWRbIUHr3jpBpLD0FrrcQ84kMRRqrIFDhWGSR8FV6 D3fRY3zpRT7eHmL8IFrzKLkPItdPW3i5VW2uYcj1JtI3fGluYHoXOHp2RjaL AwkiKM2pVLY2xX/eXp28vGKWuGHqemRwQGK3AyuCkVcFUGi+7kP7jBM1dUGO JaWIdBbHUZKJJAJDDWVKOurudJw90ehuv3W6XdTRLc85oTnHjG+y9hApv46c VJhY8x3sIJOPGbAZyvnAyx5BONVG8ZiENyhG9cEjTvnqlNyopuc5MMt8Nk5p 2oZ9r395fDI4O784/nR5Nzi5vDn9YdDv/XJuD0lBjtGoVmKdKdXrR9WGxVb2 GH4xT3c/X38NhoDME25mscUNCbsvs1dwhHYGVEtsHV8CK/3zu5y1q971Ml9P xvSue3cvDro6/hnHEPOiMnHTCXAUtO7lAvcJnOvt3hXm2/NhtDVWhlmyNHpZ OCeLnn8eZuV5E49Es2R0R2y6ux0HAll3bwcs+CXLzWU+XAzQCAI3zQaPygfi vfDBDZRf4v5ozQz4AjOuP11eork38zFhssaH20crRxXY0raXsshYUIJDrEHg vvA1Z4NEscei2O9+iSi8WZKAYgaJxKQzGxjEHARpWMjl58tofCu9j1nCbPiB AkGoUGW1b3NDjoDbBxkMQFYwuY6bXjVuhYxeGqslRWaRPkPSyKvOXCYymyWh NhwtpIOO04HgD6k9CGtZSu9lBkZYtkqxmQxBYJ+B3rK1ik0wBbYBAGdgwbsX 2URyWkg8EdxX1EjUkuFaA3kn2nUY9Rn+VdYPazZRSBU2vieOIzaRREULEV3E BXhPnoxzBKZjDo2t5OPjKB5MpOsP8GHtW2RilZZITX/APxmk0nD8AkNXFM01 nJEVkii0EzvrgMCs1XiOfmM9fQvjn10DzQQSjlRmNZjiiPYLo9GGtnd2nA54 2vZOl1Oa0tBbMrqVZuSIlRaE7ojbbL5T7G2uAQ6NMSCHko1BxgNmlmCuE88y yFjhy5+wu+/WpR2vsMZGg6xRm88MkBrtZ63pOOJb2iDaF2m28uPx5fvb3vUZ BJYfzgdX51eDT9cQa3rX52esiWcNY8V0M7lYKKdRLL3SguNRIiUOym3OviP+ 4OSLVb+3x/Cxu70aPjjjeB2C8Fixyej2p3DEAONqhemnGjn46okvGS5egR88 9EshxPC4UvavYurPYEiR+rFKX1zoGTAp57EvrWdBiqcFtgZVrDkmVhlbQGPb 2d5xulAb73TazsEanFlnb0tQUzY1ApzKEHLL+6+KLiah+W5FBfW8ib4CTvRI QBL+9lowMTp4yUiegxR7xZxSiY1ngEXLvIwt+U2ClyYBDFZtACHCDcUsnKXY kIijNFVDKHJjUJZO4fzlMKILATFSWYa1rpsRqUBCsipcQVmRiEbEN18NoIwW NfmIPROcgcIGjUcPMsGv9RbbH+RK+2B+u7srwhymSnrhVdbXL62FBkeCEZXP FOyIpSdR3WzkdW7/bPgviiqHjB0/QqwOKnrZOraEiqFQ8PSuPl0Nji97769v LkSDG320naN8E813fJe3qoubfODR+t7Pqv7e8KURurcz7O60t2Wn1drudrpv D0brezuraDzt5awaRb0brCQaHV1PpLOhrxKs3VZOrQJgxIPhTAU+D2u1tsx/ VaH7c+K/avaoOrFh1myNg2joBugPNyf/3UdBAoi2IjGFAhD+YOPCDQBaW1G1 8dIIgisYKJbXhhXzlc0uvGg6jcLW9P5V+tJd1bUy1H0/KNqpv2i3CrUC2/xp td52D4bDtiTNbfnyYSucBcHzGtLUUT9tBxtrDrZyv/++2tjafGV/6BUdpIbY xH9CrwZfwSew6VG0u4UPWoMyDPO7Vj6BxqgUcMebpVk0FSUPFWoKfjKFgpNy XCCRqnEofTECeh4oMwWgIjrytxl295roUr6IqPleLENDPkbcpxWnUbxI1HiS iZpXp+69Aw/TbJzI/v9civdkVuIMi9MoxsXF+ySaxTmh3tn59V3vond6fNe7 udabfV78Fh+VO4iI1MtzgbIWD26O0ACv56nAbaqR8nBIikKgCxrmhr54cBMV zVIiF8WZmqrfdRGQTVwgmkhIujITDiSYdN4paokLlaRZsHDEHPiA4DGGGJIo n4mNKHb70WxI7VFczHOTB0m3h0DiPuUQ701m4T2KX8hHyNoh5uAIFivuhMjV 4mAGug1gNyjHukNszSHQIHHu3LZKglEhqHaqdzqMIKHA+GdWA0OZQqJJyaaP Dd4JRK+CNUENBWSa6DE+gJLZmOr8uCXuJopI5eJxU6JBi7AaarjxbELMpxFR wxHhbDrEwDcyDMVwRUvXkeBIPUq/2M85ZCKaMY0paOekTmBYZVM3FlD1ePco jPlEwWhNFhWIEX0LN9/SwqHN3wMNAJssUQ8K9kaKwCwMsiswnVwroSUUJIZ0 nFwwIIYwI39h6eLY+SQKzIwaM4NuGUzBMdANjazmCoRujMkhci6xBN6bAHO2 ukZ4Mods5YZD+w/HQEcrB4djFlcvxHbMGjVNTlIaGStIRLwxE97AvhJ3gRIg GZo1xuiqaBwLIlZozGIMfADwA+yWNGEo/qP9L0YivCAdR/g8kygmwlmgx6s4 xaSOnsSSI+nkeyyWdITMPNvSFVuW8Xft0KLszE3COcMnH1xIN/EmaDDwiGjZ i8xZlwXmJnKGIJnGridZHficdIpbMkIbISSwMhWbziSKJYNJGk0pHcS7gUzT 0sS5gu8IIJas5DTOWPjkRVypoEZQS7o4uOlbCidl5L5CuzBeDj4KX7i6wHnE qCVXEFGmvfm3mcoYdcAjwLNwbS1dECzMT+9VTNaIhCBB9iQls+hn2i5ASwGI P3QRnti0S0hcGFMQRfezmCx66oYLwRkB0HKhbIrdDFgGK+uxLOcRMM2cQchi hgE4EOhSxB7FwjVbBXgkmCyQrhDVT1KXVJQYUPiz5EKS14IBbgqZihoNuAC5 neLTunZcEJExZKZIBpfrFmyZqwLbqWsgoJxQCpCe4yMYyxxjR/gmExMXY0ak 7ZV5NCvhsswWMglFxIJOVTgdr2tBBejzBoZIt+AIsQxT9SBLcb1yTGHi9PLm 5OT8dnBxe35+huXYze3/HuZjeiMWe7qYDqMASVI2gsURWgSy5ut4hA+xspkn UB+Bx5EY2o/7F29SC4kVWpUEV9CpSMZOGQfgaDoKJxKqBRl66I9QjvmLpr1M a4l/5nhwenN9d/7z3eD0w/npD73r98UW+gpJEQwydAPQkXv9NpMpx1zgKTae EiJ2xtGc7bXr4M2E/QM3OMKtkWtz7aghQk2n4BUu+bE7Qmt0zQowxnczF8OJ awQxA5cB60U6USh1eGLwJn+QSRLR+ihMkg9a03zCQXvx5oEZyldwtG9GEGmm KONA3SMrsKdxBJyCWyhwW6gVWnAFWRZnKy6f6powDfFuU6VghZsCfRPTDbNB Bx1v4oLnDqXnYkAB5jCJR01lWjXsGyZpQSN18cASlZuh0zoCNsWwSJ0PCdM9 SKzEXcSWoG0N8k2TVOkt8f7WqJrAH/NADqRgcufiV0iKgdVFpCM35Vi5Plhn uHX0ImE9JNkhWIMlMghBjgZmw05MpNBgHM4mZQIIZ8yWEocFuBuaeOi7U4A0 n4NPkSQpDvT+Kk/81D8fmOYI0f/RDcaJwkwyUChQzWNa2HY+AuT0oDBP2iiP 3QDb8pJIsygfdXvOzhbRT3MZTTDC5VRrmB2Fizqo6FOInYu/2Dw6qHZfDmfj 1gSEPxuCe8w0XvNpF9QV5CPMg4XGKJQEzJLiCFE2a1IUm1OGL65vjk9Pz/t9 AzCJHCPDlL4OJexA5mjMPmfFcBiIhpULXrdeQP4Zoj3l6Gk5ommXwjUcMQSF ULXrEXxCUYTO5GImB38xtQAU5H4d1CO+m/ilhTjDUDLwU2YjIX5NOuawXbgP rgqQpiNKBsoNDpqe557okSnIGMeAdGJ8tSocA/GlWZTtQiGcC48lpdOJIj4z t1aaALdAdjIBkh8A/sC4HbydSH8GzlI2K0wdRxDcdepDbnMv40zoVh7G93JK TZEQo1i5bCEsln4T8NdzwSsVxGEdmplBA9ouasDFhBEy6qxZaJlI5Ztl9cEW eqOSW2PdOJuCf6C2VSp12QVbUonJAi0YVJhJgLgBkpjiEeiBQatkTlNAUBv6 RxEmTri8AVXwOkxenMKpKPXDPMWHtM8DO/c8BBwGK82VXxJCIbK+lJz+cqyA XDOhnGstVFCiRWacE/mqzYstfMfir6bzsxFzNyBtTTbKD/L3xTRebKx8qF8m o7kwgFMNanXwux8fzm77v1Sujn+mZmFNdxkxBzrBtOgMwmy9vjTx9MOn62cm UjZmJmJvx7Q7UANLBIzb+4hzKcCtbtu0SA5PVx18/HRy2Tut/LPaqNSi0SiV 2fKq3OWui4ZpmWJD93WsmKYyuKIKOEfQkEDcqBHwsy5kruQWsP3seV7LULOC 679S9/nPEV9LMoQ8AwWSLaA+hT2lWTIDvympXWzml/wSGGDeHEG5SCZRKitI 5BwwCbo8Yvlzow1ufmSUJBesHAfcSsvLDkq2EQmG4JwYq3StAwmE3aWSDH0W F/iOCK+qF1heN+/mUf+D38SjPt1Sew8WK7X/lheyt8sjqo3PoIvSJJIB49oR SrBv4hpH36bpK3BUI/o47LjYYuwm7lRiCUfJPSVzetYhj0el4mEkyBi/sqqs 9pE1CKvl02JgeRxDh3WkwkWryTwtMlQvFWtx+VSsBWKvaIbSjzLRBgQD13es 7Imlko7mwR2xsndCTRyI4U9ohFw2Mn/FVF1M5qdRucB7kLvpFh9mvFg4F4Oo C/FU7MY3Klb7hdjNwzLUp7Rik9pGdZr3h20xR7YL2sZJBrxsubljss/0yQBn CZUNeZvHtPiWGt5Fkxvh9TBvaEVzyhdpfzSVxkBAf3CoajvklgSaHvVhF02A xXu4Y/pSRTdtqYlGhEK8OlyvvKV1y42Bw5caLjSHe5dxljwdjgN1a7OW9zYt DurrXdqS9Wet7EoFRQcmhTqmA2XKRECCqbWPZeNAUeo5+JUaa7mOkMobc00S XZqNKtCzqYZeOTO1pmrzx02aeStlbw0uC50smNsvpXaO1eZSdkOXCEEFlOC5 42auDPY8SyG2MsgPKiUxP0HpvDSklBZEN1LEEfWRYgXlBV6ZLgnCQKG33Nav Tw5ZNVef+ncQTrAcNhBMK3zQSJe3YKDaFMupE/mOyd+Fyt5Y3XrcGWM38DBK ojAzYlu1Dg+lpLjoJ5GDYa3g+8sWTCJ+LvCYOMtWmmOx7dWsM1ITxkZWE0Ey zyBLVly26Xn8toSBotLMlHGJJurKyA3m7oLn0y29/1lKhZ1u5dj1uhVJcMLR y4kVLkfFHWW64+K8hpucDufv1KswvQWrMZEHJqBiGrS/yyTiIwDLsC3GylnZ UZEysd3mgj/itNqy3F76I74Hp203mcHmRyPMVHBZekVuTQaTJ3gFkRo8rgud yNj3Sql8kevQS1zAWQ08sE6ZIX5qRVZYr9Xw9Y1EbNZpTF00l7PgUrJv5gFh vQRMv18mrR/ZxHEUJp4riOfSAsdOAV5moX6nL0/AuDFVOns9/tijINS3TDM1 ktO/SShSP+7elinkb0DR6x2UGB+Vp+JMxMF1E5m+dtHlybTuLb/o8ioCLzDS w5eEV9JZNfpW4itbrx5+hr8KWrNPazwxiOONXfXRmb9UPMMoCrRRn+OZwOvZ BAjN0nXLwTLmOI5WiKFU1y/WiLLxnEazkBLozSzKACn4RwwvYc4yM6d4tLme 96Kkyq2bkQZt+UElBErG1kVG2PiSQZcWu5LZJII4gxPM978Lk5yQxTv6Ao3Y fNcmaS7RrIpHqcwv2CTMVUnh+VzWn7kk7bwCu51cehaK6ngvyp0PcYb4rlub dONJZ0Qv9+H4x/MB/dCjd31xU0Ys3D4m9LWBh4YyIHCvC8asEdnJqJZmEJDB CTfMjEPxtxT+xY74m//PcMPR4ytEpd58x0VRK4RqzBE1TbT41nxHnlzmhLTy ZazQlK/Gy1LrYK1wXsW2beS5IlYddWnd/qRiWT7NojIiD+HxLIE8SqbLGF5t zGEm/paupjElS7iVMeCjpTqnO8+9OZlPQd80r7TSTTw9sx49JWL6nmUaf9i7 /wLsgAuZDVJsioYy0BsaUveyz9nSiAP6ZzuPhqXxFUMdTQWOh2DKY/knWC9u vkPb05Tw/OY1u+3orZbAG7fA7A+i+xr/8u+FfdAY5t5sxbr1dEMVXAezrrW7 W7E3GA2UeYEv3CLPxpeWeclV2r09vj67uer9onHm+G7JvgmfLrDx7NLRWLPo GCzXJ3Rsu5FAQRBNN+jkEtvZWEhgz5pej6WDPkHnzzzO4fM2PPKMJTek+ZzC k+bNjkCG42xCZSjWJImaSqD7E1xyhcGvLuDPTPHsB5sbwBIfLECBQafirhhH ER11Dd2hCvCogA/e5pGIaUNvGIh1Vp8C5NgNlUWGb3Tgr6+Ivn75HpktDjJp v3lNRicUfOik+3tGP3h6T8e2yGNuzbr+xAKJjI6OcfHYwuxxhCpQeOR5YX5H ay+hX1LS1FavQaTcMb7jQYde2OUkSeZvkwM20pHJU/YA0vKTEsVMjVyV4PFK AvVu4iYLPOrLx+NZEtYpIKoHGdLBgskDTPpYz9+O0oe6fIiUssrCiMph7sCu SIGrDTYgxEvE0NwNV2GonoedgBSIDzzy1g46Eg9Gp5xqlfJPH4+KFl/G3dUK zzIEVnvhOmzmHzvX8lWaTf5RWaOC/BGANRpAXROmV/cbDVzxnejudvjHDxbb f7y8OhQ9fOCcM2HtndfJAQHQGELZeizQxzU5IHzElxW94jfKjeUBT36zy5Ui f9eH+3ZSWHhO7KI7Heq/RSaMFvjp8pJe3Ylibjaap9yFA6c9pP/zm2ScvNbK 0RhSLGwt0Ot/6FFDNFEAMr/ObTbT8z20y9ei9UuD8iZ0aVDRY9bSKOW11cbT XzGXs2zer/mFrxB2KKEUKH9CkSjndOl+zpw2fbLhpS61qf/LjXLTAMyDr2mc O1bTnPqtunNe47dBfT+RKSY4ofLoJRY+5fi/9r68u40by7f/lT4FrDN2yHAR Re2W5bQS27Fm4uXFyjjnzGR0imRJLotkcapIS+rE77M/3AXABWohZTs9Pf3M 0x2LLACF9eKuv0uKYP8deuPVW9L0bWkLuJE0bX+QMOWgDXa6OXCoZaXInJ2n wDOG1oPdYVknx32Cw2Xnj49JsSuPlN/3lqJjGI/Ty8bTn39+9bNmZoVV4P6Y NMhW1ZSmKp+gr1OaGY2kLmTDwd0SilWzQ9UU/F16zb5uVBlGilcBx/xExn2v 1KhBQ/7O6C7lDoAOHCvVONC7uWomhF1UP9hvqk0qX5wU22U9r+Tg/M0cO1my HjZWyToefpOh74gxU5zkAO7R8PuLtLJiExgfOTfkJmvHwKqezH3PXO8l/lB4 t7uXtlQj7EeLJuJAWhu9uVKPjt3RdF1+QoMG5WYH1M4zTXXJFyObS2qF0CVA TbCbObJ++IZmIOwTBTk7F1RFggMANTeMmm3c8z0Enb6xbbpqgYnV0F7rMuwP m5RtsIcK07TVbHr9eSAEeu+BT/bwJ6B2PHW6L53HboOKuT0yT4eCuAwlMcOn IfkpkDzXhuv+sSoSTCzHBjcK9uffPEMeP3GMt0/kmyo3jLivTZ0mc74gqWAH dwrabS+QcUnmaMClzcHXbtczpo3SGBltamcK8qgmHXP0kdTPs6hNjvvImYH+ sZSpWqKUMxp4/R/oOvpHlmxM436JCuh45DmXU4Se8Vqlhozr6ih1fQZvmodk hzCtvfq3LpbfLM4ganlo6LAaaP20colzrfeMnbG6TD7ETjttGfchhANh0AB5 6+fWh9nZAeWQOs4J9yqOwQ+a5Bz4Elvn3jRzgwMnSxRBKhehTtcpbvZEXtuO WFgEjpaldifZZSNUuq+mIwQChpotusjSLFvMbFyMJvBXufEUg8mC4Vn7HqkT SxWIaO2Ixlfo+WspTG6plJxv4iT0yxsJnjCVAJ0tObr6SatluWpLmpn4cxVr yU5+Q147/NGG9UMvDedOLdyjR8gH4CsCK6ahUJpU2OlHG+FLcJocs0NXFsO1 GAf2xVpVk27Fqov46vRpo5xc0LqBhp/CZHCMHv2CcHPqmZkX7u0ayhUfHemt IG58f/o08Zju6PBkksr1048mcDcgCoKLiPXaWyOunlC/rNQOoVZv7ckFcVKY DZqVR63WTmBtjqinyKAp7+zbrU5vEVudJ0Kxqx3YfoRHI17CHUWOV5taLkw/ wB/0j9z3vswL5eJzCCs5N63gqaaZCjY8mQ/QTH6ejkduLHGCAncCQQPoGOnZ 7FHWQsLrDOPWJC+M8IaL7jyG+ngmxHc6AoUDQVHGhVNnO/lb2REi3tJ21zkJ tNViNoILBwK0NL8ddmxKS2g7Bt+pe+416LtAgE/uB0cDZFX3q9Qe0tLolTyf pyusilsGVHtcJ5oSgFUch2C88WeCJmq2dupG5s+b6Rz88FuzOK/ec3/k3ph5 dDWVHUtV+li0Wpwb3LTJ9JO3bOm2x+pcyVWAboZL4Urac+mRKLQEEF0hzIbc 8262pImJliY3TJ1QJWz1EtSC8xteaIEQNJ+oY6BYrdGRCHnR3SSfCEO8nEdH at2PQXsY3ww1O/eQ2jfy8fmTV29fNgDxC5C/rInbebsWjd7Y9gnELLKmDaIx IjVZDN91xhi3ArFYZTwJ9OsOJmfhTlTBloh707ppWJGCpFWngUtGN+6LXerV mBtzVzVK7rPHcGWpBw9U2cNHZfxFqSpCM3/pFBUfehKRPwLnbBklJE4vfLsn eRfW1QR6hcWUYgdi9qOQLoygaGjYx/pb06oUWOHnN266TLw2ubeDtgRDlssc DeObhMKF+XQNpdaO/digKWDVEIDEUq6xCV0jurUYXuG2XlP88rKJRsZBH4sI PcxEz2RQnOhlm5qCMJsrUvGDmsRrEvyN8F4YmWBldowXQW9WlHBUtaRfhpU0 jJIT95sTUmMX2TCjv+U6gmU0UqFgL5mIotLomMVDd13hsMs53eC6FRdW+Y1l f/Y94RxTR45DvkMhhE1CfJ03j6Qy4NasLxyO71g1nDkPZwk0Br4Q31F8GKt0 K6471xBURzTScV6hj92aMXyGPUJUnyXvci+D/wJ5BHdg7zb29zQZpVzcNwWA NnRPr6bpNTdSto0Tn/dri9sf4pbgtgABEsbLrYjz1qWfNosXfMno5F28Vs7H V20oj6NvOVsDkbzLDN1BjdBig5vt5DQgzJ1jIa8Nz8inmnWv5ZJYsZO/lRNa q9m7TMFqSJ5mRpcISzMxcaF0dqS6zxfhjgI5pnD45RmUpb2z6RST5p6B7f9t k971SIV7UjbkFS0ck8eldVlupt12Zw9WfZE6vjfwiK3RrvJ7jGcfhTCiARWl hEmUga90ZA6DnPMGvNLds/Ct+mI1le41Cmf5P3TNzYPflG6jd9PbUo8eUWP3 4Qw3vWs5uxI9j9jzFNZYbVmP02Qut2PJe/44LnuRs4tofm4xl1MUGovQWNxw wYX0M6nnm0Inb+4U1qUWNkWZklkqS0FLDf37VhX1nc3g6v+FZCXXHdrDQ/Ac a3MgBEeI+adBz+J1jKHD0MwoBoYAZpXqgyzuoTFwA8lkMSl3zGZmwAQEs2kf 7nGwH4A1wHVSXNSW9VP+6ZRSGnxH/UY54Quqicl56+4aI1PK04WXqThc0qrQ BabqmmeHHJ3lvSFrJFbGRl/ZubK4LsI2A3NjNSNTQejEaWx21St7gQA2AgfO UE+pESreseSCjyxK0fq9EHQ0SBlohuNug+AEake/fIGBppLjkpARAUtBt98U dTnW3TRguHwOh1mtShal4r5iXcLvzC4UpqGKGrZF1C+RTbBQ0fXK+r5Gq1Xa mWYF/XIaQRBgMZq7gtIC33HkSur1qCx5H0saHWI+T2fkIH6bLsBXY6R6qsFg Auxzx+YcmOF7qkhFoV8eEQVK2GSCwnCDpAXkKZ2A1gvV8xeIfWAZMOFLHlyM wRjula5e02MsJmYXSkgcptWEb4RcaMhD0esLyoVKxYA47cDmGW8XPu4eqWir pBt38W1EBqTZ0lI5agtE53xeTulQIYnSoSEuo5TOoQ3vFwIVMDWI9dLwmEM+ vO6QSs6KJ0hvYD5h+o3f6CZYC4oqdm/SCMUB7chA8TWBmXbo4kb475XlIlbI I0uxdaTwaq9Syo9uSC2/VqLC0g9Jc8Xnp5xwsw7A26a8gar7WXVQ63TbEDyL 2ma0SFnLm7zr2TGVZqke2RLdJ4JgVt6K+NBKfuwzaSyE5qmVO81jy9ib6iVu FSuadbiFAAXAuT/V+Bg+KK3rrLgOyLG0IHF7m8izMMdmcDyG43TAx2iDSNsG R9f4OpRHSkyAWVTngVoe00EOxHlgLlnBExIDHhM2AjqFIKOBADV4b8mh75dm xeG79GhduLujhzKSNCrNPqGgRqhussQOA3s9sMJ4ak2pmSR968hJeCKAp2A+ WT2YRNot6TgvVREKfSBngigEAblQjFCpaAz5fIyO7MRa93B/Xlc4M7UQtEuO xEon4gyukgtGuwGuJB9myYCgAdNpAB00ldcwHI3yI108K8gfSH9nG65T0Tsc Bmoo3578/FLPRVttEAoFINVkgBWFQEPUn5h4v/u5uj8zukkixp5Pv5143yps hCuP/6aG8ahlmFoGWWcpbAkJ10hRhgFeSapqgkaoKET50v0d5dI6sXTqBNOe FExJEmOmpCCn1Yut/1UltnryEWA5typ57RfJtJyVa8Ml7Gs7ynQhpc/KOQPv 0FUYvq3ZO9yiRaK5iiMDmmlD5Bs9+z0BPGMRPdNpwGtWXZm9wiYGlk0LygD1 QeBbyPlZ8dgpZQRTChgt5EMXSKJFiZwQfoysA0PqGDsEtRWym4x4x2qIiPU3 5WHT7M1hJFoKbknB4Qjh9SwwDQrrDIVJKs98jpECmfXc4AFHLJGWv69jcFGN 5V40aliuCBBakQzmzOa+kiwy10ymw8wFV6LcCrHOuu9tA9okNZPUEHUaI4On fJsb7YXsJSk34THEAJjiRMNWYZq9A9HZalpCLK3o1lyA6jJPkc8Pmgp3F/vM C0cBwz9DfPRizhsJAZ3cwhNqEbs1ofclQ/GBWkDIjqF0XsVI17DSeF+Qqb+s FNEgJwISyxFql6Pg/C01BAdzbOnvqdz+qFW5LgBots1MdKvVFBUTgTMf+twU XG7Qu8ZMSr2Rer3cyeZxhZMNx1QwzAyFTxLkokBvNs7q4BDoYTfzBreRPJrQ sy8d+fJS6A5557nIc2zO2ay1nKulR9YrXQKEW+wAQdHizNRAghdjoA2hMLOF hKN6ELbTpwrM9Npq2OuuemvkaGyG4nFypE0XUTKm8Bm02eB04o+IJpIpYYzz hjFBgVqPAg+8ycdG2NfYlCeBoKIVEI41WXzH6Al5HE8oSCaL8Jji3YXogB27 NmDxnEvfcPIDJpBqBxUIYTTgIkfN0awToAIZQgywQjwdR9mlEFPdmH799Vf1 mkEYgVa+k64JZqkQGBvfaDwf9UyRSXhMjmsM6QDvYsxWelsDwG0hA4IZZFMz N0M92aAevK3xJvjUQPIK9wLP6RH4SNy8sGu9LUtrCGI3YfVpEgCuTuHe9cXN 41KTPe+gmcBg8s34KNwLPHb20XVJ/kws1EbZqfbik+lA/oiOJ5FyMIlOjmNt A7DlmcUYxGBwkheoBfCIHw4XM0CfbLjAAeeUJxDyZL4JbxXfYJjLJwbNu+W7 k3Tn5F6p+iiAL5S5V1NIN43/NDcoKmyuQryt21Cq/84fMEWILo/v94B0Svem 9QxfyXuSw8/JNZzEIuhRzjBOLLITRuHMOEPy+BwBwGCph3q36W2TQyGKnmr0 0Kyfzuh788jBIGHQNkpgjBTWZcikBGKz5gD4AdlnsBR1CJCHMcS7y1QCQAge AhsCGx6IbBsN67L7aA8heghxIYxcUKlp+LOQEqoWzVNGIGBKEADAeGP6Ch96 rA/9Tq2jpF4o7/3MXk60x/80N+cljsw8NObLZOdbx4Ftmkq4YZgCYTxNaKPz pqpVtOE5NxvB+AZuyUCRcWnt8L3ZC6ePtoSdrxI4AqU2iF0LnmDpDUQo+NuC ySjoNP7G/gb5ET5AxrABv9K4mvQzHCTANBDsr6f6cNPbVjzzxH7yb26iuAmx Hh1XUJhRYGLsfqaZoa+eQ4eBjJOP/UVx37xC/n5w3wot2TL2C/fxo4eoUCmk BwBZ8ZABst6SISNLF5cuaQPAlqKwCBRQ7/V4Orx1fKxwqHx19hToH166NrZa WV3Wt5pGfavw1gbO8NnJ2clPXSVEzNt08Q3lIyCzif6e5fH4gkG5kikmWkFL LNvo5hkgycV42QJD6ozdHD/NUTw2DjUGogR+FBihjW0AL6GGY80oAsp4hoDR qQ0foEHeq6KWdVAuVhOrRAAJGyIKpM/iNWBs7TGyTt52riJcWK6OckEH3rOR 7qiClGEjPi1bJ9vkNEWLFcyKAdmz0mI+To1AS7bQgZNZYWjJdBGHrnpsi7kn jTEwF2W6TwuYTiB1iGQySC8XOX0F+EB4RqMQSlA6/VLMc65nLzzPm3JVScNz 6jHuJOj0BGHY2M4szTHnT2gulU5kBdlWjzpZeaTlfbs/kkN2zC4h0tmluT8q mw3uhxXkk8L0vASnA0kEXPRnm3Wj1jqdTuPcObRw5gduB2HkIe4C5gjx2WNM yMG6NGSBoL6bLvjDuGKSagP3+nva6++r9/p7vnWsYgZsrQjKNsAYXqPzBVdG coAlXlh4XrH/ktDNFHXQ70MN9HvWP8Oq9jzbquW61RfwPkLno/eMtlnhe7S2 JG1frc1kNbMJFUe3OAgmRry7adpxbshZNNUb0ES6foZZc0XLpu0QHwz0nyDs eZxYFLLhLLF0kyNeB11kWIxsHhO7+dakcccycIKk3YE+UfWQQLFWXZAq/3h6 VrKgQ4ZqOmL5ueTyzr1hhXuZ76IBcDR++WYbyAGwU74zorvT/MaZv+4wKvnq TxzWUmPGFxt2ONpPG2wARfmZq0nmBKuJM6ZKzeJaJzSX46xscHUmUPXgAffD s4EWvDUojKZVaxNdaZ6WWko/YapEsOfHQNtu0Jmlj5a5wYxTt/PxKnAf1zE6 IqG7v4kyqeBGwKYCkMMYt7lund999iTkOyzD4XlY/5m8B1+xq3EezuHbCC0S I6cqk4weXiEzJacp2ISQd4TaxT+67zh1ZNVjk0M06u0dDofd7mE/2t/ZPyjm EK1swKWnrCwC2SkP9yB7KP5Xfw2QdwsI7+sInqEMhJ733MRd2bx//7mu1hru K6sbwKj1n+udNdU4zU/c47bNbmdwEvBwLS2l/vhDBUUEIgI0onR//cV7+erJ 0zfnz1dYr7rF8lfq4KB/uD8YdLv94WBwEQ+XrdSyZZJr1N/fhUWCf/blKsX6 HGiWeBSfRZd6rnFp1s7OfXHvWO31em18EMwdnIMAPQSyYkOOYzjDZyc/vlHP tDCsmaVfniqcNC0VgT21+65ZPXNawh5z1kz9N6bwHWAK38I81pTkWT2M+73D KO52BwcX/YteXD2rdW0V57iuNGaQ396CGYd/trYxrS4dCC8lsZ6mUsn6yEwj WpZfWPUsAp9SbkGA9oZVBBJGWVNV4+zXlyDEcHZuDK/ABMzUMdToEAENXuql PT8qPJ/fTGseugzM1jcWFx/TOeQWdx8pL6bA6+JzKvTW+cFtjmzmaxKubN2c oP4uMko9BBlQLcLdILm81POIM77Ta2/t6Cnf2edExuUzDkhxU9RX66nzl25o zgDnSceM5EEWbj3HlBedkpjD7bTGqcv1JTbNI0JohjTgrO21SdCD59Uv+YGX sOI9vMJlr3CPcAOVD4ETYed03PPiOKCAnpIc8l8XBuEeVh7gEBU+ODvhYz6q 8d729k7U73b3t/cP97ZrCGChgeL5LBTBRNfbSAbhn60+bBG9a+NsGuJn+0Su FmdNsTj3hrjVZP69UW8HzybRjX0EecUR1AEORXeIZ7K0J393tDc4wiZF/c8x JAMEiKkRIP5HizFnPRZ5VrTIuUgcQPOG3mXJNMpuNyy1wqbQ24fY8HcQeENp ISMF6jXI44egl7hA+1ttfYS39vfpnvr89fG4DXTJffNUX1lPX5/8fHL29Pzs +c9P3zx/9dMTpQ62DvuwLl7yoCdPn5388tMZBcSfQ5z82hoCmG31+jthqqef Tn7+8Wl5UVejwEv8cnb6E/MSeqOv97u73d319b/88396vV6/cxlPGdgkGnes jbs7A477y7yjt7e3A/9u7e/25L/6s9/b3d3+y9Z2r7etf9ze079v7Woq9BfV +wLvXvpZgMupUvrfOKsvV//8f+nnGfhm7QwPdvsXh/3+/nB/7/Bge387jva2 Dnf2D4f93kG81T+42N89GO6oF/rSfhPP1Na+6vUe4v9UX6/mOjTzUJ2lEy1G /ns6HWWRejSHb3+dXYKCdjjvakL2eF0zJPFDzXGM2rqe+tfFGDPIq/72w529 h9v6Wujp5tbfLJCZeqj+4/XJ2Q/PVX+z/5uSm9Q5YqzDzbTuJZCXXKEWQvWf 44A7HKo/lNJiWCusKnLPgxB9AWbW8KOrqr6uWllTd1S/oeTzh9qHIVZ8Ktvj C6qsPdmTShG1ouZORc2aalxzS7X8inWygqioGcPgjQUepeKNu/DGA4jbiHNm lfUO2t/d19c9+IIBM9doaaHxYNdiSeWNjpYaGfBiAjhwxMrULtt6kZ+6y7Ya 3LUGc127/d5F/3C3240ODg539/tFrusubTpG7C618OrfOWxv6cmGf8s0CR4L +yTJr4hJ5hue7ZbEABmGy3DDENfHPi7Haqd3uAf8V0ezOR0SQQjABoUM9FpD ZmbCqcJ83yvgcpwg4tx9sCmSw4ApIt83QO5Dryi9e26c+gtNCzI1GFppyZO/ jQ3pnTXX/LiaoTNok3G6J1311voNR3Obw/w6za7GaTQCY3QMCWMHwLmBBIiN TaL3kBs8nc/HmoyBbirmVH7jW85NPzNg4Kka6ZlV5OQx0s2gV9cALmNsy76q C181w1Ix74GowNOuG+hTsqv/e/Die6wP3KZIXFGf71OR79Akwly8Ygs5TzgD Ja3U6s2igmTnoL2liUt/+7B9CLvP226cYzBGi26TGXs0hJXziG1RhO08oRDZ RCGgs0YD6DwWcrSerXIWdxpfnw/nN3qP2NY3jDC3IX+1fK7p2ovTl9SvmjKn L0/PlhZ6cfIrlKFgkNKu/xhPK3rdCnqdb8jfSjnoJmlC3kX5O93GuHsV34rw Qj2tZ06kPoXoXFEW41D90uEifH97Ono6BZw93AN7O0iB+rvbLB7WbwIz/sHt OahIIFL//CYBWIHTKUbae507qqih/7DwOnJDlEjcZDjuiIb0dtd/uvrBAxdX osQz9vo8z2IMeTo35/x8nE9d53/9Kb3UIuBrgHiH2qSGABG38cCufDpDz6hz PSBduQkaibykXDgQXlb2YaRS+qePuAw7/d32juYtdra2ypbhx3hu9ry/nurb bMD+vfiic03uUHe7hlQavurR2Ufg84m74nkczbBFSjx3xNofUDBr+QzykWOd nAJSYvBDfxHd2FoEvZ2nnFm79MqgtuYASQE+3gubCM5qvCzIddh0V71M5zEn msB+UGPMkrKjpRaquZPg6j6IWS9mwlVuGVcWTch6a3TSC8hNGXO/UrQkpePF ZAqEfY30TmBkcTP3qNCzJtAJObVhAVRxkZJLt0Ug5vEUnC7abKZGh3urGCx9 bbFZUP9ng9IDAl36HbpV8RziJ/RT0oqCyRK2KufhiLNGqZasTVjDjihSrVk6 Q53ZOTxtPIAXFnqD58FEYODPncc0NNqFxie8MLO6HhtuId/9yZs3T38WRtuO xap6wI3iP5CuJzpsG1pnW6SwROxKXZR50FZlK2wxNNPIFbqajIDC97hc1Qi1 aQZWHltJ6zjCg7aqmMrlYyxts6Y1O9aP+v9oGeX9ZXZQ+ZZR3+LZ8DXlBBgH +0Tcl25bOY+Q0iabWgoRRfU1fPrilxfn6Gjw6pmmZfbINI/E2hR3myt49Flr iObi5dPQWm0WWitPQmvFOWitNgWtT54BcYHhT+7+2t9p9zUrubPdIyXmZ11f 6InpN0HoonWtVCwHdX1d/c6WB6TB1y5xD6IwmtQKji63MYCDgrz4lpligBJc iJZm34G+gedENZHWV02ZDLGMtoPLecdS54VmAoE8l1PmtjLUDqj3l6cbK7TW rt/pVa2E1Jpw8LkpOaZVGwi7HzZWGB4ffp8ekqDqEwf/N304FJoWKpUcZQqw wbISrMTY7m/1Dw4vut3B7mhrd1Ri5a1ro6i0KCuFSoo+2o/6bGBcDEYJZnMq rboORsbzwSIZj6hYt7tp/rfO2VZi9S8NWaqJ3TDv7FKecOBIX33/r2+AdIGE n6rJ8Ab+AZk3GusLU/+Nqrp0veUXBM1SXXEVdkS/3nbDDAnsQOm0O7laafFI B1k5n6TrgvhpXGGhHeO1JNV8r9s9PNjbjrYiXMTNUfxhc7oA5/m6xaLGYaV6 7Z5eqDZoPf/6VzC2ragNWEFfYMIB6GUQVqBA6i3REFOmbHQRzl0YwY9PXyJw sxou8nk6CaxbNrMvxc55sbcUPZpeuARSHEuaJ5NkHAHy8gVES0zdy16npKJU P6SzWwJ5agybqPpu64f5/DKL3/yfn9SPlJH+CYhz6QyD33/M0sXMNnT65OnL s9Nnpz+cnJ2+esnDrl0GrolFMcPrxHNkgDkYROQnTYg4uQ0/I3HHQ8mh4WJj KMaEQ7ZYW9HcBna4ymNAA8RgcPScwLB3bKsxuFXzZBI3KYICPb0HJhUngDlg zVmW3gCo9a2JpsVQ1cTFEWNbSMi7Lpvt7Qy0nbhyH6IMofH/exEv4g4m7gBh kQJiqecU70EiHrQWUeI7Un+Czll3Ygg5skaMnIkRy1l6PVWRFia7Yq7jcKoX sG98FWc00+2hFwmjN1PIzSSaRpexzeyydsqqSFSGUqz7jYBqxZEYbVWzTbPL yGvg0odA+6j2pBm6EIticnSYte1i2hTqholOGdx6RRjKENvKYlSYYjOYhEjg 6UaZWcKGm9upe7VmStBBb9TEaOS1EDUOQdHc1Lrw8HA/KrkXsSm3HzGWBDSm 7MByHXNotP4ZcunoWSaYimjmL54BaAtIAS8i6ZIZs4agkCfR7QDBFzgoOxpF M5okc0rsake5Xa62RanY1AyXbBEB3PV6nNpgdGwMOzCKRwnNAMeDof7BMogm lAITXXi7w40RIslP584vd5bmgMpBUGkT3dEPMYNcSh06Z0EzWw/UKrilEDSd nzq3ziweWoy7nEK0E5NEFGKhODeFXh4DwgdHTsRz0FZP5u5gfdEbZJO8s/nu 3ZgRJc677zb8B9ZMhdkH8XHJQ7ZhbXBwHDsl6ItGIPmvhUnz9J0lcIv8as5z uawaxmeYaujJwtcMzLxfHYAaIIx8BHqnHIBsyKZI6BiFV56//uX7n05/WIMk zi6NmHwl45yJuBJ2o17aDxOkrglTguaOGeVN6crEOZWe8sWuAgpfbUcDV+9i l4Oc03dourJBgx4UWM/kWqtvzTcyxuiTBElclU2UivNRbMC+HhvAb0fyVRTu ph+9FkgGHIbprALE+kDUY2e+wFSpSDtozYTDk4nfLumHSYb5e+iNiJ0jf/Ej GNmbuSa3MDTGJDDXIeIe5Q44yTfwD50PEbs5cX4e9IRz8csEkuOoJjdnJpdT UpAnvSHpiHLBxEnaD5sSYNtvIecmkOpBHuGxBetZb30UE+IthphwWJJgLexe YKwX+5uBA9UrMxdJmcneqFnPAapKR0CZHfu7howVZzJoYrpmk904R3gjfUNg Hl+zbQBZBZGJ9T1NLZh35iICRL9jxm0KXgF+JbNoV7kGLdAM45GQZoYwTUzH AIgg+ZCMEPGkHRpZqQWCysoZMogCAuFCmVpsaugJshOC3XCPqRXHfpQwFmVd c3fjmndSeTU4HyfqpiROtr5LONoQXfAEPgfc7F6Q5yC+hNVgthqxoGzoixoA Km+U3VafObFhfqcdqjel3gFme/NW0xwTGasNQnWwoTFLElXxs0W5uAsH02Rr YQA/1XJJm8pqcG4XDjynCpYjMBxkEc/eZYQxbymNDmHsNg5jhiezeXbEoMqc glNw0sm0MA+2sibTVBfzaFFWkapaH70tERJV6Bot+RnmfNI3CaIdIiMe5lan MHPTnItr//4hvfTFL2/OONjFkE58wXPOB5uTQEunMGQ+CLHjOYMXIXclGTtA 7WC6C1jfWTqdG1TGkndxjDwUb7v8bgalCNoSuZXcevL+iwR2Uf1VZrNoefVx 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 P18/Xz//qJ//B2Dbwv0AGAEA --------------D6F2C19DCB329AC22A653F8E Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------D6F2C19DCB329AC22A653F8E--