[Insight-users] ImageMomentsCalculator GNAT's bug

Benjamin King king . benjamin at mh-hannover . de
Thu, 04 Sep 2003 09:42:29 +0100


------------6eVlFAT2bO8ru165of5jjL
Content-Type: text/plain; charset=iso-8859-15; format=flowed

Hi all,

the thread below reveals a bug that seems to be introduced by a gcc 
optimisation flag. Please find attached some code that demonstrates the 
problem. The program works for CMAKE_CXX_FLAGS = "-O3 -pipe" and doesn't 
for "-O3 -march=pentium4 -pipe".

Information about my system:
$ uname -a
Linux luna 2.4.20-gentoo-r6 #3 Wed Aug 20 20:32:37 CEST 2003 i686 Intel(R) 
Pentium(R) 4 CPU 2.80 GHz GenuineIntel GNU/Linux

$ gcc --version
gcc (GCC) 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r1, propolice)
[Copyright notice]

As Luis pointed out, this should be entered as a GNAT's bug


Thank you,
  Benjamin


On Tue, 02 Sep 2003 23:03:49 -0400, Luis Ibanez <luis . ibanez at kitware . com> 
wrote:

> Benjamin King wrote:
>>
>> It runs flawless with the slower optimizations. When I found out which 
>> flag in particular caused my troubles, to whom should I report it?
>>
>
>
>
> Please report it to the users-list, and mention that this should be
> entered as a GNAT's bug.
>
>
> Thanks
>
>
> Luis
>
>
>
>
>
>
> ----------------------------------
>> Hi Luis,
>>
>> I usually develop with Linux and even after a clean build of ITK, the 
>> code shows the funny behaviour. But as you didn't have any problems with 
>> it, I double checked with windows and it worked!
>> I suspected my gcc (3.2.3) optimization settings so I changed them from 
>> "-O3 -mcpu=pentium4 -march=pentium4 -msse2" to "-O2" and the errors 
>> disappeared.
>>
>> I also changed the program to loop over some values for binaryFilter-
>> SetInsideValue(...), you find the new code + example data in the 
>> attachment.
>>
>> A session with the program and the fast settings looks like this:
>>
>> -----
>> king at luna> ./DebugMomentsCalculator 1
>> InsideValue: 1
>> *** vnl_real_eigensystem: Failed on 1th eigenvalue
>> -0.61578 -0.562883 0.551568
>> -0.787125 -0.473522 0.395235
>> -0.0387084 0.677451 0.734549
>>
>> InsideValue: 2
>> *** vnl_real_eigensystem: Failed on 1th eigenvalue
>> -0.61578 -0.562883 0.551568
>> -0.787125 -0.473522 0.395235
>> -0.0387084 0.677451 0.734549
>>
>> InsideValue: 3
>> InsideValue: 4
>> *** vnl_real_eigensystem: Failed on 1th eigenvalue
>> -0.61578 -0.562883 0.551568
>> -0.787125 -0.473522 0.395235
>> -0.0387084 0.677451 0.734549
>>
>> DebugMomentsCalculator: 
>> /home/king/software/ITKCVS/Insight/Utilities/vxl/vnl/vnl_matrix.h:199: 
>> T& vnl_matrix<T>::operator()(unsigned int, unsigned int) [with T = 
>> double]: Assertion 'r<rows()' failed.
>> Program aborted.
>> king at luna>
>> -----
>>
>> It runs flawless with the slower optimizations. When I found out which 
>> flag in particular caused my troubles, to whom should I report it?
>>
>> Best regards,
>> Benjamin
>
>
> -------------------------
>> Best regards,
>> Benjamin
>>
>>
>>
>> On Fri, 29 Aug 2003 20:00:37 -0400, Luis Ibanez 
>> <luis . ibanez at kitware . com> wrote:
>>
>>> Hi Benjamin,
>>>
>>> It works for me for 1 to 20    :-)
>>>
>>> There is no reason for your code to fail for some
>>> values of the thresholding filter.
>>>
>>> My guess is that you have an inconsistent build.
>>> A very likely cause is that you are mixing Debug
>>> and Release between you ITK build and your own
>>> code.
>>>
>>> Did you get any warning at link time ?
>>>
>>>
>>> You may want to do a clean build.
>>>
>>>
>>> Regards,
>>>
>>>
>>> Luis
>>>
>>>
>>> ----------------------
>>> Benjamin King wrote:
>>>
>>>> Hi all,
>>>>
>>>> I experienced a strange behaviour of itk::ImageMomentsCalculator, but 
>>>> I'm not sure if it is a bug or a misconception on my behalf. The 
>>>> attached code and image demonstrate what's happening:
>>>>
>>>> The program reads the test image, extracts a small region around the 
>>>> voxels with value 63 and binarises this region by setting all voxels 
>>>> with value 63 to a new value x (supplied on the command line) and the 
>>>> other ones to 0.
>>>> When it calculates the image moments, I get errors for _some_ values 
>>>> of x (e.g. for 1,2,4,8,15,16) but everything runs fine for other 
>>>> values (3,5-7,9-14,17-20).
>>>>
>>>> I don't know much about moments, but I think that at least the 
>>>> pricipal axes and the center of gravity should be invariant to the 
>>>> pixel values.
>>>>
>>>> If this is no bug, under which circumstances does the moment 
>>>> calculation fail then? I assume it has something to do with the 
>>>> eigensystem of the covariance matrix, but what can I do about that?
>>>>
>>>> Thank you for any suggestion,
>>>> Benjamin
>>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Insight-users mailing list
>>> Insight-users at itk . org
>>> http://www . itk . org/mailman/listinfo/insight-users
>>>
>
>
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users
>



-- 
Benjamin King
Institut für Medizinische Informatik
Medizinische Hochschule Hannover
Tel.: +49  511  532-2663
------------6eVlFAT2bO8ru165of5jjL
Content-Disposition: attachment;
	filename="DebugMomentsCalculator.zip"
Content-Type: application/zip;
	name="DebugMomentsCalculator.zip"
Content-Transfer-Encoding: Base64

UEsDBBQAAgAIAEaIIS9+02DB7wIAAC4IAAAaAAAARGVidWdNb21lbnRzQ2Fs
Y3VsYXRvci5jcHCNVd1v2jAQf89fcaIvYWW0UK2TgPVhVTchbe3Uj71UfTDJ
Qbw5duQ4pWzq/76zHUJIQrUH4Hz3u999Yh9xGYkiRphxlRuNLL0IjipdbmJ8
iTAzdWVEWsEXNVWPm9/zlK1wmPQ6tF+4wFtkMeqW/RZXXMmb5Vwa1JibLd50
YD9zyfTmPiFcokT8FvTKJW2ZF78wMt1pfVcpSpNfMhEVghnlaIIi53IFVOJk
EqnCTOsKlLGYBgGXBlLGZWgFplfRAKKEaXhH8vPjUx/+BgBmk2GMS6Bok4mL
NytkzlcSY6D8tRnA2QU4wz1Bp50uu87NKmTp5NWdrm80dUczgBrj7c3c2w+n
0upWPaOWsZPn8AAPpNVwqKdI3CcnYJsAJkEwVCZw60mGRn8mkx+K21aAdjr4
1EZc4zrs24Q95P3FHRrb/GuWYtiLcVGsyhqHSax7/W0CVy9Gs4i2AIxWxUJg
TigisQMARXWXIxjCg1sjJhWlqyHTaqVZCnNI2DN6rhgN7Sr6glIuqRyxpTIJ
MxApaWjtcmBCwLN6QZHDmpsEBFuggPOzoSe6t+DSkeeQZxjxJSdiiowWszfu
WnsU92rqUANS9aeaDq2FpMvBilQlSdbqhMfTJyIYT8vTyJ4+bk9jZxs3qO74
HydBToK12V/PMxpN/cnxjD6Up3F52ufxm++YfP2hizpwPn6+2xrdiJv/lNB7
dSDnMius2W/HVzQ3hbGafrUKl4r+3na9lBQbN0M3ov0JEfTgUu8GsXCQahZv
eFRzqbu4hL+pNYG2PuH5WTfsIcv+B0bV2uJ+MlFgeNqNKVu0a1urS53XxK7s
tGmm2g+4VHW3fHwqdiXC/Qxb2SwpgLvCuV0lWlCYwZh+j4+5v8I7a9y1gbsE
mqCHLGYGw9JmnxCYzaBXc5xAz6q4/fIvikUavSmDdhZ1qVJKveJ9hYiZKIHQ
v0vb5w6wX5FUoavHsAyMwzVdEGF/P769+kyhJXXCRwjsJ6jUp9PgNfgHUEsD
BBQAAgAIAJZrHC8qA4k3LQAAAFwBAAAQAAAAZGVidWdNb21lbnRzLmhkcoth
ZGAIDfbwDwphwA4cQEQRAwuDDhgyQiEqaGEQgLKWFNjawzADQwMaHlkAAFBL
AwQUAAIACACYaxwvjfq6+yIdAACAmQIAEAAAAGRlYnVnTW9tZW50cy5pbWft
3VtfU9fWwOFpX7Vu9d3arRW1dVdoUCSowQSSACnr+3+qDYRkrXkY57GEwBzz
onf/+gMu8mSsQwh16tSpU6dOnTp16tSpU6dOnTp16tSpc7vn9OIcXR3fZtv1
ap8Wuke3tnsKdI9uafdL53yOzv3qBqAbbm03FLp+03br1KlTp06dOnXq3HUZ
+qpws1zYj7NOke6RUzXvHt2L7imjqyl/yc7nwrk93cDohnvRDUT3fn3/0O/3
BOG6W6dOnTp16tSpc9e8WV3Yl7P66Z4yu0d3unsq6ErKX4rnM3BuvhsE3XCn
u/V7jU3/nqB6vk6dOnXq1Lkdgq3e3BRvbpaz+ume3pLu0R3tfhE69nPt9tqt
32vcpu8Jqueh+ud6xX2dOnXq1LkxxZ72dNdi+rl61ps3Zy7VkgNmDtWyL2bm
KuSWmbEKe2jWU/fIVMW6R7V7490vChd+rt2N7Pbj+T1m90DU3WN3obK1CpXt
1XLZo1oq+1Tzslc1/av7XOVdp06dOjfiTt/rf88uTvdz6uzq2Jtn2effmal9
llRPI1lp23n1NDGbplyq5p6XlsvVkudl5XK17Hl+F6pCnueW42pT6DaFsqzK
9TxdPlO5kO6eKr3ZV/dIXaW6RypjUX7DP71auntKFX4xVGG74d09RjcuN4Vu
U6hyunJvchQDly3VVZfvzT22uaCyrdp2aW/KulDZWoXK9mq57FEt/QZ1vy36
71n298p3/WfXXp06depQcxKOL46vY5ef4i0eLDfP1p9TZ+b2WVI9zdRmcSzm
br1jaXdrHMtzt8ybEnfzvSl198xQxdzN8abO3TN19RTVMV4+M7ib6mrdPVNq
nnL3FKzOTT6eguWhybG7FwfqHhgcC3cDYkLasXtKbX4hqnRX51hOV+5YygYH
SsfyPC91LN/zMsdKPM93rNTzPMfq3E05Vu9u2LFWd5cc6+PuZfmzSzNu71+c
TxfH393Lbp06derEn11Prs7x1fF17Krr69jc3R6OhdwtLZ8Vq2V3ax1Lu1vj
WJ67Zd6UuJvvTam7Z+oq7m6ON3XunimrlLvh8pnR3VPQmxZ3T5HuXO3uKdHV
+niK+nioduwu6uOh2rG7hLv1joW7B0bH0l2dY/fEcuM4FvsUf2BwLM/zUsfy
PS9zrMTzfMdKPc9zrM7dlGP17sYca3N32bEe7k4d6+Pu/XX3k6O796Pusl2n
Tp1NmpP1OV4fH8emXT/H5u72cmzJ3XbHwu7We5Nyt3xvynW3xrE8d8u8KXE3
35tSd8+UVcrdHG/q3D1Dtal39xTRpt7dkAznnbLc3VOiO1e5e8roanyMdYfX
R+PY3fWBuxrH0l2tY/GuxbFw1+rYcveA0CbtWJ675Y7ldyWO5Xte5liJ5/mO
lXqe51iduynHavbotGMtnocdK5VnXs0da3V36lgfd+8Xfeyxm867derUyR1r
3/GeFH187ODYsrs9HAu52+5Y2N3Su1j57tZ7k3a3vku5e6au4u6WeVPibr43
pe6eqaq0u2eAs6zuhv1mcXfZb/PIsXJ3T4nuXOXuKSjOeVSWuXvK7Ep9jHWH
nSN17G504K7UsbyuxrF0V+tYvGtxLNfdcsdy3S13LL8rcSy0oT8wOlbieb5j
pZ7nOVbnbtqxWnfjjtW6G3Os7s5xyrH6fTfsWIu794td6/Xb+2DXR8lxt06d
PjXred8t5FjL/yHWcdrVCTnXce5u2/2xuLst1xXj7rbseXF3WxxLuVvnWMjd
jcmxPHdLHct390xV5bib61iZu2EXWtyN+03rbtqFGndzHStzN9exc5G7p0h3
nhyJj7HuMDllx/7K0HFsrbQrceyuwN0yx0rcLXOsxN0yx0rcLXMs3LU6tiz6
AwfHStwtcSzt7obl2Mbobo5jde6mHKtzN+1Yjbspx+r20pRjddeZU47VuRtz
rF7I+4SPLaKFu35TxV2nnz0v5lhtPdVx3pULuaTjkrv1jqXdrXUs7W6tY2l3
ax1Lu1vrWNrdPMc2hfaMPNJ/7crzlLsljo09j+uY79jc85iOuY4tex7TMcex
sOdhHU9RbebVPy7O71cH13FcngPlbnXV/R3VMd6dF6pt93dEx3T3lNE9IrpD
VLL/uj6/rg+m412ie8Do7gm7sYOgbknHWDcXVtzFdAx3y3Zru7iOU3EOQSEf
sBwrdXfuTVzHfHfH3sR1LHN3601KnFJ3Lw/tWNm+m+tYubs5jpW7m+NYubs5
jpW7m+NYubs5jpW7m3KsTsj7DB9rBdrvXrpeD173vH3ueSnHatq5jktd3fXK
HHfrHMtzt8axPHdrHMtzt8axPHdr9rE8d+sce0KqW+NYjrvljqWvX9c4lrNH
p71ZrrbOwquY38rV1m94lePYbrXrQqxKOzaudru/I1VOt1uNu0eM7rx4ziIb
p93fQXW35WHxHETWjL25dFxZsa1dhoCPD9AupNiuiYagkKHuHtKl3R2X2+oT
RMc8d3fLpare3W25XMXcjVdXv8HuzxUr893N2Zvq3H15aMVq3L1PKlbubq5j
Ze7mOlbmbq5jZe7mOlbmbq5jZe7mOlbmbo5j5ULeZ/pYY8/N3kvX54Pf7z0v
x7HSdknH5a58z8t1t9zHfHdLfcx3t9THfHdLfcx3t9SxfHfLHcvZS+sce8Ko
yh1LuVvn2LPw55WH3l4cP8f+eVVdOuttoa1z7Kq68ltalrkwr7Yu7JYxF+Ld
P0Kz7jadsq47X1fLjl2Wp4ruZfkPxMdvwSru42GizdSxT0Ad7xLuPgjPr3rN
utt0qk8M7n5+Xc4d++Tah7puXM6r0u5B1H2eOLbb3RN8TxBboC2XqhZ3r8rl
qs3dl+Vy0+rufdKaGndz9rxSd/MdK3G3xLF8d0scy/exxLF8H0scy/exxLF8
H3MdK/PxvsDHUivWvXQd3J3HTkLuY8/LdaykXdYx1JU5VuJumWMl7pY5VuJu
mWMl7pY5VuJumWP57pY7lrOX1jmWcrfese/Dmx4ce3nero/dsX+uzx9racZt
vWNzd1sd263G7l6VtY6F3a13bFz9I9Hx27Cl7L5D3b1FdiEfP4u0+a9Ex48u
jsbHw8iEJcc+Urr7eVL+NRHnE5O7Icda3P08KsfVJw7uTh1rd/fzzilV7e5+
Gh734O6nV93Hzu7m7Hml7uY7VuJumWO57pY5lruXljmW626ZY7nuljmW626J
Y/lC3u/Rx5u6lw5A9z5r9tjxSmj/66D72PNKHHtsrMJdXjm2VVPoNgXJaa/Z
ptzN97HU3XwfS93Ne++O3N0Sx/LdLXcsx906x55cKPbSsZfH17Grrr9j36+r
Usc2oDdTd5cc24i9WXa33rFxNXX3W2RzynEs7G7cm7Bi36Huxhw7JbrvQHdv
XR+4C+v4WSLkVMe4kLEu5lh99znh2EfExptyN+RYrrubbIv+HHFsuklvVO5O
HWtzd7fadazfvrt1rKe7n667jx3dvfxUvexCIpS6m+9Yibtlji27e+jgWM5e
Wu5Yjo/ljuX4uG01hW6juhb6QOzYvnz8SS3YTdlL93/ddtut10Hf3uug+/Dx
icLHx0Id87p8x0r33XzHyt3Ndazc3Zz3x8rdzX3vjszd8uc8cdwtf85Tq+OV
j9843R+70vGq63ddce5u+/W/sLutjm0SdzdMx84Zji27W+9NzN2UNynHlt29
Zey+K7p7y+zjZ0XHPjL6+BnoWA93lx1rdXcDOlbXTRXbOrYx7LvzbupY7Ap2
vrtTx/rsu1PH+rj7adR97OTupY273Vxu0ueq8R0rea6azLG7TB/LHct5P5nG
sXsqHeP7WI67NY6l3b2vcOwnlpCrj2/2uu16HfTtvA76ZKN8rOnyfKxzN8fH
OndzHCt3N9exMndz3x8rc7fcsatm6028ynfsSsetj98wn/NEOTbt+jk2d7fX
PjZ3t5djc3d7ODbfd3s4Nne31rHvOo7N3b1FSpbuvsvcvcXq4jruCjnXMSxD
ultyrL0L7WO13dTd+T7WY99ddqyHu0uOtbu75Fi7u0uOtbv7adZ97ODuVsfd
buwrqbu7n9XbbkluEnfLHLuL+Hhocizn/d06x+4Se2mtY/cU10Dj3qR9vK/0
8Se1jvdN1b59fLeu264+vgs+Pr5BH58ou7SPte6Gy3OTu6eIj+dqd3MdK3O3
5P2xfHfz3/Na0nHrTazKfV5xq+Ouj9+wnlc8R++QfR+adbfpWNbu47K7rffH
wu62XldcdreXY98XqjrHNkk5rjYOjo27W04+frf2fK5ji4+fRY595OTj1oex
jhsXd8eO9XR37Fgvd+eO9XB32bHUneOUjyHHPjE8r+2y2qy7TVS2PFftadHH
j1nPVYOfZ97VcdxtFSR9nnmq43gv/QkpB+SKcJljue/vljuW426dY3cJH+sd
u6va8lJ73rvn4/720vW+5p+v49v9vqTqY133WL2Vptw9RXw8V7t7Svh4rnL3
lOHjudjdU6aP5yJ3TwU+nhd03HUsXKV8PM90HPv42OTjP8Gu3bGlro9jy+62
3h9bdrfXPjZ2t9c+dnneuDu26fh4y7H7TtHl+PhZx5t+Pn4WOdbf3U+KZZu7
Y8d6uTt3rIe7y47VunuYVNN9rO3+btixFnc/BbuPGe6GNtP7hI8/Kd4jluv4
aVaFygHcTMscu8vw8VDl2F3Cx0O1Y3cRHw9Njt1FfLxvcGz18X3wcf/vo7rt
Pr7vz9Hqw8cnBh8fo47Vd6egkOdEmariPp4rujwfz4VdiWP5XZmPu2XYx8cq
x54gPn4Dqpvz3p33SJd+7w72vGLY3VsGH78D3e1xf2zu7i0HH7/L3O27j31f
rP58x8q6Wz35+JGrj/t092rP6+nu2LFe7s4d+8jo42egY633d8OOfaTcSw+T
au5Y7fPM99HuY9V7xIaZjtPu8lOwzMdDto8/iboyt/B8PFR4iPbxUOk33MdD
gzdhHw9NPv6k1HH1sa+P96uPO/NP5/yIjkex1NXU/ymeH8CxVeHuD1MV6/5Q
N6ku1j6/OPru4cWBu+fK7iHYPV8fefdwfeAqXKarafk8O6XufxjVuHyOlv97
ff6zPlj1EK2ehyZqxt1le1KstuVzsPxfpPsarFLdv8JHsPs6/HZxsC5c/Ssp
p1W8jHe75bwq7/7VOR+jbrcKlzndy/LH625atXWX5ddXp5/ub+zu18L5/+y8
vDgPL87/Zefv4il3v4Ldh67dy+q/wy/O3cvmv6+6v1y1fbqr6qqblmXdr1m1
7XbLf6u63Wq325bhLlyOq3F3WcaqUHcUvqHdX8JA1f12deDuztXBugGsxu20
CZUD2P1WPDvAgapp+Zuwu4N0A1nFujtgdVX+puzugNVAVKnuDtgNxi4+ui5n
5F3uSLrS4XW1A3erj6uPb8LHE8THjbo7IXzcqLoTho8bcXfC9HEj6k4EPm7Y
3Qmi41C0ZsPw8UTl4wb18eTqyB172V3KrVl3m44NX6vd/fHabSXHLm2k9XFc
TqsWH3fLedXi47acV3XebKLyx6TaOLm7Xx+/Nvm4X8c2UTXtNg6O7Xb9HPvy
WnK/XMv7oUO3rbbujss6x74suvshw7FwN67G7l6V5T4eravNutskZZ2PR4S7
B6CQ4e7oyt2UjweojkPR8jwfDwTdkcgXA6aPR2IPDRg+Hqn8NiB8PFJ7c4D4
eGRy7EBlWLob7qCPww37OFQfOzXLDvBQ9z9GHW+Sj4PBsdg0asdOCHc3KsdO
EHe3upI6tus42Mdwma7m5XNGmVOl3N1tQz6GJEu5u0k2vbmOte7GHat190fU
sa+RzTS1lf4IOhZ39yHL3blj9e7+KzHscs+bVi3ebMul6m+mfXfc9d13fwiv
Lo6vj1+GFxfnwcXx3ccuz4MeHNv1sZ9ju3tpm2PzatfdHo4tu5t27FfUsbC7
McfSPsbc/VDp2BG676Z9HIBqKuRcxwOhY0eRudJu11alMuTYESC5stoGqGPp
KuzuuFzyMVbF3N2Wy44dqd29LAeVkHeIclAKufrY08eh+hiQl4+Oq4/78LHe
sZSPtY6dEFWdY5c2grfSjcqxE3AznXpQ4tgJspk+Z5Q5VczHTdaOXYhVcR93
y2XHThAhYz5eVWHH2vbSmGOt7i471urupujY1+QV4Tx3x471dPeHK216u/vD
2rGe7v6w7r5iu5vj2BdrHz9wdmzrbm/HvlhXPR0bu/shecUyz7G5u/WOTaup
ux+SVyxTPobcbXEs5m75nne0PrC7B6Bj/0Ydu1IX5OMBWC77eBSpuyvk1MdQ
GXZs2YeQBzHH0lXM3QNk00tVcXcPkE3vyORuTLI2d1cf330fB6Abqo833sfh
Rn0c+6phO5b2sdaxtI81joXKsdqkjoU207kHJY6VuDsv01XMx02x3boQr2I+
Tsu5Y7HqIWMr3SCOpTfTsLtxx3J93CA+Ljk2viK8Yfo47baObdz23bljvdwd
O9bL3bFjvdz9Ieq+YrqbduyLyMcPHB0bu9vTsbG7vfaxubsljm0Kjm0K7m6K
jm3Ee17I3VrH0u7WOhZ3N+XYr4hjYXcPECHjjk2FXNYx5lioGgu5tDseEJte
vFp2QLmMOVbubtixX4kq5W5402t1N+7jbrUpdhugjM1IvZe+OR8HYTfcCx+H
Qvd2T/553fOq7X8cdLxJ9zX/08teWu9Yjo91juX4WONYno+ljoX30g1Rxqt8
d6dlugrvpbEyp8p3d9O5T7ikY627y471cXfJsT7uzvexPnvpkmN1Pm6SaupY
D3fnjvVwd+5Yj/u7P2TdV6z7u6nnPL3IfPzA4TlPL4vu9nJs7m6vfWzubmof
y3Vs7m7NfbejrPsyq9odW3a31bFld1sdW3a3zbHxNdaQjqWOTSUHexB2LF39
hkoTvmL5K1Gl3E3vebXuHqCKtbg7EGWdu/19PGD4+LY8R2vHqFjP52jhXfvE
3U2Y9nP1bb2v+e4+92vCquocy6tqHMurahzLq8odO2H7WOJY2McNUcarE8TH
eJlTPSSvBk/b/43uO8aEzHV37li7uyHH2tyNOdbH3SXH2t1dduxr1fPPmqSa
Olbr7vOkGjvWen/3h2L3FcPduGNfFH38wMGxZXd73B9bdrf1/ljY3R6OLbvb
w7EvClW7Y3N3ezg2d7fdsaOCu7mOxaqj9aY3vu8YLtOOjc2FGRZyLNTluxvy
8cjs7gHLx3J3047VuRt3rNbd1OiuBw/Vx7fyPuG2e1/n/l63Ld/z8n0sdSzf
x1LH8n0sdSzfxzLHTthVmWPLm+lzskxXJe5uy3hV7u5VG2tq3d061tvdXcf6
7btTx/rsu0uOtbsbcqzt/u4PF/9ddZuoPDG4G3as1vPnSTXuviKfZ45tTl+A
Pn5geO/OyoPNutskltV3MXdrHTsi3D0wO7bsbg/H5u72cuwLoGpzbOxuH8eu
7kP+BWjqHNvqCDOs1LFdc+0QZb5jZe4uO3Zkdjdnz6tzd2CVpe7m+FjubtrH
mr10Hz6+H9dBb9p9wpsr5Pt33bZsz8uvSh0rqcocK6nKHCupyhwrqUocK3M3
37FSd6/KPxiSlbl7eSbE0bl7EcY9uLt1rKe7U8f6uLvkWLu7oX2sxd0N4ljL
c9Vwx2rdvUC7r8gu5M3vqI8fKN8fe/n5D3f3wOBYeN9tfc4T5O6B2bFld3s4
Nne3l2Njd3s69kXyc/Vw7PIMiCN17EoyuI6ljuW7W+JYibshb9ndzXOs1N08
x0rdzXGs3N2cke+l+9jzDoQW2NzroDftPuFNVbLfVdub8z4q/p5X0pQ6Vupj
vmOlPuY7VupjvmOlPuY7VtqFHNsY3c3Z8+rcvXTs2N3di+vu2NXdi0537Obu
ZXXpLKgsd/di7biV2/Ky3N2Ljg5fAWX588wXkTlfFcvy94gtiO5Y9R6xtJr6
+LJ7iHbLjv1+dWDHbl8cjWM5Xfn7Y5cnLudVzXt3VmWoq39ecVouV/WO/Z50
t90cu/w5xz9XH8delreRqtaxo+uuzbFNUXK5rRqTY7nuljlW4u4g6vLdHQRl
vrv5Ppa4m+9jibu5Ppbtpf33vAOFBTb9fUnVxXUv7b+X5u15pU2JY+VVrmPl
Va5j5VWuY+VV7j5WXuU6Vt5dMBw7UVVpx0rdvWA5VuruRdYdO7h7UeyOjc9V
W4DdseG5at1m68JSWeLutPohMSwsZMzdefVDpmNIyJi7ud1DtAvpOLZsrM1t
UMiYY7lduWPhbreqcWxaTrt6x8bl0r9V+5yn7s95G6xKn/MUl7GqxrFp128f
+53lbo1jvzPcLXcs5G6bY/nuDsIyz90Sx/LdLXEs3918x0rczR3ZXtp/zztQ
WqDueevUvTQlZKuOISHbdAwL2aJjTMh6HeNC1uqYErJOx3iV41hdleNYWZfr
2ImqSjtW4m6+YyXu5jtW4u4F2h0r3b0gu2PF+7sXrO6YeH93QHSMd8eI5gOq
Y6p7iHQxHZedBQs5II6VdLG3vAZEx3gX12ZAdQx35e+PLZXhqtSxWNfmWL67
pY7lu1vqWK675Y7lulvuWJ67g6L8Ta1jSsh6HeNCtugYE7JNx7CQrTqGhOyh
Y86ed2CwwM/Y89ap8zM20z/cnuSN73m1TY5j9VXKsfoq5Vhtk+NYbZdyrL5K
OVZbpR2rq3Icy+9KHDtRVWnHcp9nLnMs1/Myx0KeD6SOMcdy398tcyzX3QtR
d8x2t7R7iHRpHUOO3WY7VtrlO1bmboljZe6WvD9W5m7u+2Pl7oa6I7O7JY6V
uFvmTYm7ZSbkuzuoytoqVdZXcSFbdBxU7tY4lna33LEcd0sHc7dFxz/DsZv3
XqM6dfqdpofrwXHHWt2NOdZWxRxraVKOtVQXYrlRXY5j9dWFwoSc6kKlzXJX
5lhdleNYTlfuWI675Y7ldOWO5bhb7ljY3YHUMdwdg1v0rpA13UOkS+kYduw2
qM2uODXdAdHFdIy5G95uBlLHuLu5jpW7m/t+HLm7uS6UupvvTam7g6qsrQaj
u4OyrK/iZUs1qNytUyzlbq1jcXdrHYu7Wzdld+8YbZwaue5469TZXHeXHOvj
7rJjPdwNOdZeXQisIqkuRAqSeGtsKuscq68uFCYsd2WO1VYXKm2mXY1jdVXa
sZTndY6lujrHQlv0legXqu4Y1PxKyNruIdLFdYw5dhvU5kqG2u4A6eI6xt0N
azMQOqbczXGhzt0cb+rcHVRlbTUY3R2UZX01GNwd1GVLFSvbqnDZWoXK9mpZ
yB46Ttsld9smdfeOi43r1Klzl2bpWG93p471cXfZsVZ3Y461VxdCBfFlNDaW
5Y61VBcqE3IUJ5cbz4ZjQzmtlv4emmJZUpU5Fu/qHYt19Y7Fugt1d4x0z03d
Q7CL6xh37DbqWEsXd5be3ZTf9O6mPke3pabYbQDJ0Z/Pde4OyrK+GgzuDuqy
pRqU7g6Gsq0Kl61VqGyvlsse1dLfhvxvgNOO3e05db9bp06dnzvLz5Oe7i45
1u5u2LHW7wcwx9qrC7GCuN4aG8tyx2p+WxzHWqoLpQlpG+pMSItzbCjrHdtP
d3wj3UVPXYtjt3vqBvW/+Ca6tAu17qY/nev23UFdtlSD0t3BULZVg8LdwVS2
VqGyvVoue1RLv0Hdb4v+e5b9vfJnO9SpU6dOnZ8r+fTzr1ex/Lnap7oQm4Jr
grFDme8La3WhFBatop/dHd9oV+fC2uV2dS6s3ZvuBkU3bFSXPzLPB2PZXi2X
Paqlsk81b2t/W1Tbs1mnTp06depIPeel7vTTu4+6q+c3zfOb1t2s7wn66951
Z910N9wKF96GbhB0+/CmTlx010Ob392qfTs2JN06derUqVOnDj1j557/Hr16
vi/Pb9b3BLUr91Awl2t3E1xYvfmzvFn3pnXq1KlTp06d2zXe96P34/kAeKh+
T2Avb1Z30VP3Jp0VXP7F97W7mS4sdz2mb29Wv9apU6dOnTp16tyHbwkWjpYv
f0/gW73P3z/01+3LQ5vW3Uy/9Xfda9utU6dOnToe8z9QSwECFAAUAAIACABG
iCEvftNgwe8CAAAuCAAAGgAAAAAAAAABAAAAtoEAAAAARGVidWdNb21lbnRz
Q2FsY3VsYXRvci5jcHBQSwECFAAUAAIACACWaxwvKgOJNy0AAABcAQAAEAAA
AAAAAAAAAAAAtoEnAwAAZGVidWdNb21lbnRzLmhkclBLAQIUABQAAgAIAJhr
HC+N+rr7Ih0AAICZAgAQAAAAAAAAAAEAAAC2gYIDAABkZWJ1Z01vbWVudHMu
aW1nUEsFBgAAAAADAAMAxAAAANIgAAAAAA==
------------6eVlFAT2bO8ru165of5jjL--