Popcount optimization using SVE for ARM
Hello, This email is to discuss the contribution of the speed-up popcount and popcount mask feature we have developed for the ARM architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C code, which processes data in a scalar fashion, handling one integer at a time. By leveraging SVE intrinsics for popcount, the execution can process multiple integers simultaneously, depending on the vector length, thereby significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It includes compile-time and runtime checks for SVE compatibility with both the compiler and hardware. If either check fails, the code falls back to the existing scalar implementation, ensuring fail-safe operation. Additionally, we leveraged the existing infrastructure to select between different popcount implementations, avoiding additional complexity.
Algorithm Overview:
1. For larger inputs, align the buffers to avoid double loads. For smaller inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete chunk.
3. Process the last incomplete chunk.
Our setup:
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4
Benchmark and Result:
We have used John Naylor's popcount-test-module [0] for benchmarking and observed a speed-up of more than 3x for larger buffers. Even for smaller inputs of size 8 and 32 bytes there aren't any performance degradations observed.
[cid:da1f7dfc-7d31-438a-a5e8-579e96f4a8e0] [cid:05551fcb-925c-43f6-a2b4-4dc2341322fe]
We would like to contribute our above work so that it can be available for the community to utilize. To do so, we are following the procedure mentioned in Submitting a Patch - PostgreSQL wiki<https://wiki.postgresql.org/wiki/Submitting_a_Patch>. Please find the attachments for the patch and performance results.
Please let us know if you have any queries or suggestions.
Thanks & Regards,
Susmitha Devanga.
Attachments:
image.pngimage/png; name=image.pngDownload
�PNG
IHDR � � _�\ sRGB ��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD 6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P��� u�:@�P�]�}����(�f�C�P��� u�:@��u�'�@ � @��L�#�[D@ � �;�wXp@ � ��@�7��0� @ w ����� @ �'��o|a @ � �@��a� @ � O ��"�@@ � �!�����3@ � 4� ��E��� @ �C �g� @ h<|��! @ � p� �� @ � �x��B � @���A � @����/"� @ ���;,8� @ �@� �_D@ � �;�wXp@ � ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3 \�z5+�������X�677�C=��?EmR,�������� @ �@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55� ��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3��� ��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&�� ��.�^��p��~�k�F�`x��aX��� ?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS� �
j�����8|p��= ���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s�� ~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D ?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[ 'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^ ��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E ?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak ��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF i\��2O�
��@�w���7 ��������d���@�Ox�=@ h�q �q��,�X�� ����r$� ����J�%���h|��c! @���%���n���!�D�&�
6A � @ A � �3 @ � �H ��R�&@ � $ �`p� @ �@ ��X*�@ � �|�� @ h"|K� @ � � ��O��� @ M$��ob�` @ � � 08C � @���M,l� @ �@� >g@ � 4� ����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��
� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@ �%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x�� � J@����'@�Ne��i� 4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@ ]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@ q�8\! �1�l^�tL *��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C �'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �I OM� G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� �� �� 4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p! @ N ��+ 0F���E��Kd�vb5�
E?+~��8���N� ���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C ��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@ �M �� .��� ����Ef����~�)q,?�X)\�1�z����4�. b�B�s�e���}W��h��>E�����/���m���������X~X�! @ N ��+ 0F��
E_�Y&�}����N x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� �� ~'~A
�����-#�S�T3��L��L ������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�! @�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`� �'�t� 0V6N=�����Z�~�/��7m��B h2|�K� �V���~�|,C�"��7����=�1&�A �@� >��+� �"��H��������I���(L�K�P� @�c�+p��K��0�^i��UKV���'m�w8._o�#5@`� �'�|� � 7o�t'N��!��;� �e&{6 C�����;T"� �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O �V��u�<x��������%����>�����}�������?�� @ �@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@ � � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @ � P��x_������}��������BI��Q`�@ � �m��&��=���P�����W�e�O�s@ � �:tZ�kx�/�S>6T&;LaY!p��` � u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P��� u��:����]��������1B! @ � �M���V��qyy����U[.ruu59Y�^ � ��.H�� @ ��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� �� ����������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@ � �I%�������|i������%������z��x�&� Y� @ ��oN������I��/�������\���@ � �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B � ����Y�s�^�������������1[K�� @`4���J�# ����X����| @ ���@�OZ�Nx~�Dd�hi���V��?����
A� @ $���`��9����-�������.�/�M��?@ � �`������?��94m��I����q���[���n>���7���| @ �'����|�p��R����
�������W+K�� @ �F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@ v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@ � ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@ �@� l��~���|V��P-������� �9w��Mw���!4���nee�W"j#7^������� �4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @ ]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������ �1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g����� �K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C �@� h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O�� @
#��5,��w�?�������N�>8�������I
�w��� �@ m'�9\�h�����U�)|�I ��r������5q_����L�� �� |w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O� ��_��`4��[��7|����G�*QB � �'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ� �M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4� :L@U�R��Fc�����J���^����d�����v��4�@ � ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C ���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`� |g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��; eF&��<)�F��+����>6������[���<#�MF� �
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]�� x�~h�kU=�~��O�q����x����2'G� BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@ ������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$ s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @ �������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k I>��@�����=����s������qA�Vo����
����k��Ab� Jx�s���]�^{��}��� 4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z����� �6u�����k�Y~������ �B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d! ����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@ ������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L� ZK@K��MTU�<+���x'���x��I�H��@� l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@� d;�}�����:@ ���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@ �'�E ��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#�� �P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@ ]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���! � |w�R��]�����j��� P
��x�<���'\c�O�8� �p��"��"B\'�W������Y�,�� � a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B @�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B Z�Q�?�����|$s� qn�N
���C`H��8�/��N=8d
� 0.������6nbm������ ~4\��#���6uJ=����A 9^���� �j�6����z�+91p �$��og�a5&��k���?0YB u���j�Rr��3&��U$�S3�V ��7o�d�����N���I>�4^���^D $h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�| j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`� H�k�<��Uh��3�����!�xo;���)��g��04�+�n��� 6]�B �������%��N�1��� �6���.{� c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5 �&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d� ��k{��G�\C���W ��� �c wm���f����dh��7m=��n�\bG�[�h,�� _XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8 h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e� �Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������ ��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@ �h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| �� �F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+� n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h �����^�����@�Z��6V��wT�� x���wJ��A ��6lI<��@���W����@�h^K�� y����[�
S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v�� �e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@�� w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I ��
o�m�V4QU�j�@ �#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%�� j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@� �l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m �*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w; |>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
�� h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x�� ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+����� G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h �R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-� ,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[������� _7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y���� ��z�_>�^�y���������z�C�n�5.���4R��)C m&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L��� *L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?� �����:V�o&����Uc�&�j�z�%�����J�� ���/��_U� b�@#�m�d'���u r� O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?� ���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?� r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������ ����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g ~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~ ]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A �����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>� R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj��� � �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@� ��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;�� �;�v��7w����-z��[�\k���@[ �&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H _#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27 �~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V ] w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2 |����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t�� ��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms��� ��e)n/�&�������X������JW���z�+�D ����VxL���n hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|�� [�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@; ��M���nii�-//��nll��2&�� *����fc����V��h� +���wG�Q��G��%��VF:6���&���s���i;S;����5�������9� �M _P~W�^u���s[[[>��$vl,��an�� ���U�]l���;b������6���!N&6�2�� "�&L�7�����T� /[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C ��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c����� �<�������/��� �� �����K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|�� �>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q �B@�;������R���@� ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$� &� ~2��\@ 5`G� � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"rnss�>|����'�NOO����!�@ � �j �x��u�<x�I�/--�.db~��}nkk� 4�! @ � P-|���E�w�^�������������N�<�s�� @ u@��P�}�����s333n{{��3���� @ � FD ����=zt�����0�]Xp� @ 1|`���2ZS���B�x�� �� u�:@�LR���_2>w���1M`@<
����� u�:@�RF!��|�� x��D��@ � 0�����)����@ � �J �0��d .C � �J _���|g#�P\� @ �� �����l��={�8}%����J�� @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy @ � FJ ?R�D@ � �j ���Il� @ )�H�9 @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)�� �������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD _H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##�� ��w t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�? G�=6��&sHfB X�p�c�O�.�����|�BTx��#�,V�h=��& ���H �~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p�� ��DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q�� �z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M��� ~tl�y�ry��L!� %`��c=�a��Z�^� ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C ]%��������VVV*Gp��-w��a�g�w���^�)������<:���C c$��#|�� &��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B �� �:��@ #0*��^����yW�)��������?����;���FQ7n��M��� FI ?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut� �sEN�! �Q�Z0��&C�r�p]?V]����E�!0>���'e@`B �`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s������� '�8�<�����������T�,�x�������>�2y)�r��� @�@� @`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+ z�Il�)��2,-m�� b�1*�A ���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7��� �E ���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z �K�}����*4�)�]�� �$ ����59� j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy( 1���p'?i��|?e�R����� B���! @������M�< @ �"��oTq` ���
s�
��m�@@��@ ��[��4Y��=��� @�I�M*
l� ���'����f C �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� �'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O����� �����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO�� �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~ l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6�� ��O*Nr���W�F TN _9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}�� w�u xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+�� ~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������ m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/� ����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/� ��������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7�� &>�� p����
�: ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C�� ��> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F`��7��`@�P��� u�:��:p���>���jvq�P��� u�:@�Pv��������J�Z� IEND�B`�image.pngimage/png; name=image.pngDownload
�PNG
IHDR @ �r/ sRGB ��� gAMA ���a pHYs �&�? hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F� �\RL�A$������
��t_^�{���|�>����?���>��}�9�����/?�����o �F��h4�Fkn{����(D���h4�F��h�js� @3 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � }566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l����� � }�o����+v�/_��:u*}u>�����X��+V���G�
e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+� }������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
{-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l �E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-�� �.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~ Y� o�YD�i����Y{�}E��Nt:�
�C=�R,���� �����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^ �f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_ 4HX�/���^ �! � � y 4� @�
B8 ��p @� �! p � �p �! p � �p �! p � �p �! �y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~����� ��p ��~��kW���s��������_�7==��X�":>�
%�N�J?�j��}m���y�����p � p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t���� +�����YM!���h�l��e���4� �# �y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8 �|� 8�H8�2���}����9V�/_�<��!�����k ���l��}���=� � ���� ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>� ����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P � �+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o! @>� ��.�w+R���~`�] +V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d� � �# �y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa �� p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q�� � ,,� ���E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9��� :C8 ��+u�����������=~���i�~�����E�
w��o���� �{� 8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� � ��6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{� �# �y���"�V������Q�B6+d��}��sOG{����v��~�� =��G��>o��G��6�j�� @>� ��m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$� �"����z�aw�4$ @>� ��K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*������� �� ����N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!� �# @��u��~|~��2?��� ��p 5b���]�+u b�#(= �# @��{��N+�����,���]@ �" @���jo�=!Y��N�n����A �s� ���'O&[�nm�hX��p��4��^ �# p � �p �! p � �p �! p � �p �! p � �p �! p � �p �! p ��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?� ��pp���d���s�u�p066������{��I���������'�N�r�H����/ ��
�rE��e����w'+V�h�u?<<</�����>99�������~���� :��pp���������E�j�=�p��###-�������3}���: PDc���]8��{tt����;�����;;��Hw'N��[�8� �"��.�������g�����A?�E8 @����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2 ����p���������"��) �������#�H��;\Q�i�&������.����V��{ Y����/ ��YG�������q���CE���T��EE��g� �� \D8
�����W&�}}c���
���oK�={4}�� @g�N�o\�<��O���.I~���iW�F8 �P0Px��K�O��-���g���s2Y���������=M�:� �C�=s����d��'~9�)$��p�/�a��j" 9�<6�
�
�?��]���.=��!�T5 ���]�
!�kO�}{�����OU� �������C�D����_������S�D8 r�y�.w��#;&������D� ���X���[�
j_��f���<�~�� @�������G�mL�`pt�5����2��� @�����k:�����7��~������" m�.D
���0=�z
~5�`�U� ��!h^(����O�.��p �x��m-����K�w��p ����k[�A�����p d�����u�����?�vQ/� ��C�[��������:" N���%T�)�y @]x�]�\W� ���?l jux�Y� ��77����]��[O� �����_>tg�n= �@����# �&=�G8 Mz*��p x��Td� �4���>� �i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~ �3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g� ��&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~� �i�S�}�
'O�L>���UT���X�=66����3g
�"A����_ @1M|*�������w�?}�������)@�i>4��;q�D����E ��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:� TW����#��.���Tw
�oP���"�qA2 ���z*r���Vp��
���B�n?��~ ���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw�� ��=�W��6G������5a��r��Dy���<33��s{]E����{�W��~� �bOE��My*���� h�S�}� 4Z���g�+}�Y h,��<� �u����`0s�;�w��p ����W������1}�y h$����p �F:���[�A���# ����04���>� ���KZ�A���# �q~}xK0h�S�}� 4OE�# �q�}WK8h�S�}� 4��~��>�G8 @��T�l� 4
OE�F8 @c�T�|� 4OE�G8 @c�T�|� 4OE�G8 @#�T�� h���� ��S��# ��x*r1� �OE.�p ������ Pk<�8� j��"G8 @��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd�� �t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~ 4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7��� h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}���� �T<�3�
��p`�������\466�N�9q�D�nt��B��S� @��T���kb���������/��_�6O�h4�F�U����i �y���n����O8 ��y�F��h4�����������1�m���X� �V P<�;���� �^x*rw�e��i:�� �Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7��� h*����F���oOG�[xZ����+��}�SSS���F�_ M�S����p ������# �Vx*r� �
���� j��c�-�@GP� ���;�l �� PYOE���P� �}*��K�wQ� ��S�{G8 @-����� (�p ���|*��i(����������Dr���� 4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^ @sE����x�.�*}8K����������s���������v�_�z5G ��"�O�����l�r����:�p�W�;��|�����S�o 4OE��J���H����W^I8 h���]�x*rwJ�4������������� 4�o�?�S�����@v���.>^�b���?�H��a ����[�OE�^����l��5Y�fM�}����G
ta2� 4OE���� �����%�T�� PI�?~�%�T���>���$k���{�Y���) @3=���-���"������P��q����;�hiw�y'w+ h��[��x*roJ�9��) `x*�`T"��K 9��]-���"����@���x� �����Q�p��n��Vwj��c�Z�����. �<ypJ�$d�V �S������V�l�2�V ��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g� ���"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g� ���"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_ u�S����@���nE�v�Z�� �wVwz���3m����� @�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_ u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<��� ����0 tQ�6�~8��E��� @��T��A8��w�@���%�K���g� ���"/�A�����[�.|����4��+��JV��g� ���"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~ TOE^8� 'O�\��� `��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R����� ���<rWK0xv�]����J���� P'o��%<�������R��=�cO @��T��W�p�[v�z������� �9x*��+u8���bw)���� ���"/�R���HO%����w+ �'����J �L<yq P:<yq�.�������$9y�d�Bdk\� P?<yq�*���"c.H h���xJd��}��m���� �y�OE�xY�.�t� ��S�� ���T���0��D8 @i���|b����4� J#�T����K��� P��"����A�T8�3x� @=�T��W�p����X�b�s
�����k��� ���=�[�M��B(}88t��
_����+���=IYHM� @����������Q�p`OL���l-�p
�W��!h ��T����I��B(u8���uGv��pJ,�iF �.��\� ,:��\�2666w����#�9 �6=9j<y��>(�����Y�,[�����������K T�.:�OE^��;m���k�{���T� ��c������8*SLt�b��]���;�nhh�%��F��/ �2��x*ryr�)M*�����LLL�����������{]��_,]��g� ���"�K��A��<l�,�u1t��;w�������`a!�H7��~ ��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/ �*���a8��������h�>z��B�=c!����-U����'�v���� @��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9� �8��\N���b������{������ (3��\N�V�j�B��(����;��D��������_ e�S����� ���`��4���?�'�.�P�"�H?� PF<��*�nEFa[�~��iL�c�m���� ���T�OMM��^P��g� ���"�W�������� �&��\^��C�����kA�V ������U�p`���3��y� ��S�����@w:x���8�����[w T�/��%<����],�R� ����.o �}ss�.� ��"�_i�A�S�b��� ���"�_i�A���c�� ���"�_i�G ���"WCi� ���"WCi���V4>>�� ������@8 ���T�j `�x*ru�.l��)z�qV��d �r����Q�p�]i^�V� ��S���t���{�I�;V�?~<� ���"WK��� �OE�� ��"WK������������ ��x*r��& �^x*r� 0u|*������{����6�������=�%?{�H�n� 0u{*��O>��b���Y�������������Y ���=Y�@A�%��i�f�P2�����������$���F���&T� }W��"�T�?~�_8��d��/�k
Kn}�����&� �.�Td�*���_q���;�[���/��6���C�2� �*����?M�����?�
!�k���u����~�� ���=��-�$/��%�@����s�����~�� ���S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g� R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#�� �B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n ;w�t�MNN��$���t�b��d||��]��g� Z���c���V���N����������(�����o�S�W'-�� ����?�;w.i ��g��i��^�g� C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_ -�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+ M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?� ����T�5��
�(Y'7� ���������� ��L @S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/ ����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�� ���=��%T���*��=��k_|�+iW�B8 @ON���%�����f���:��y �I����;e=�����K�j&� :�[��j����=7&�zUK8(�S�O=*���Ko{o�Us �]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;� �
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d�� P���TGb����k��<����S�����D��nc���=iW0� �g�$��w��d��w��Z<���Z4��=�" ��3����|d�D4XS�X����=�XGG8 @[zn��?��.<v�{��@�_���9����O.<]G���3]�l� �:��Qw���~k��G�mL�`pt�5����2�������r���A8 @��?�������(����/t�`�XOG��
���X0�3x�Y{� D�5���!�|�m��'���q���x0���S��������L0(�p �y~�����8
�����=��L��~�S�x�qq� ������+
�t������]�C���_1�:�~�!� �v���f�9=�v]#_�t4�6�<��s� �^_����t�Q�|���d=� �# 4�
�����k
e���+���s_�:E8 h(�"�S�b�@M��T��������o����+t�p �@��X�B��.J���e3����O?^s��iW�� �atR��4
��x}��=���-��]�� ������g�af�`�����p � E�/8{hw�u�����O�;x�Y� j���?LN��4
�fnyG���O����=��?t�����iW�� @��j�����\�����i��3t����@%��d�� �����!�=��r��3�����)��p P3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#�� h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#�� h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~ ��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_ �t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g� @���]Cj��@� �]�����3�~�p������#:��/�����A?� �Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[� m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?� ����Gs�/8~�������]���o���t�S{����9��o�Q�~�~��� �0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/ P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#�� �&���>����3�U��=�8�!g<�� %���}W4�U�����_1��h0�������� %R��D�*�z���q�� �D��t�Q��/=�,���z���� `�������@`M��j��~�# <��| �H��T�X P�)F:���t-A,��]���! ,]T���c�@M%���*���b�@w+�]�PN� �E����v��P�V����Wz���s��" ,��^_`���X0P���Qn� �R�����.>d���Ow���m#���nN��s_r�w�g>�������D� �G��Xwi4����������]��N
z��k[�������� �j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT� `����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8 8y���@���/���i��`w!�y�pK0������y������
" �@�������%x��m���Gks}��� ��������X0���5�$o����O�J ]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O�� @T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p �!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������! �kt��.t�owE���h ��z�g���y�{��b���*����K7����������t�1
����y�;��j" T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]� �h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B� ��p ��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f" ����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
� �4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,� P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P� ������VQ�=�����g���v���������B88<:��*�������0���������g����:���
@� �/tj���B�� ?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7�� t>�N��)=�����NA��p z�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8� ����?s����w����{��������vC��w%y��O&�6\-�����x�
�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{� 0(������I��]�,]������djj*} �����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R ��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?� b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q� ���?W��P��|��0
���2�?������}��p��� P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={ ��A�X8��>�������������&7����F��lU[/����6�~q�� ��+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(�� ��pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e���� ��l (3�J���&7��Y���d �� �p �! p � �p �! p � �p �! pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u�� ��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>� Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>���� u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k�� ����xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX ��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W � �NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k
u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1� �#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p ,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/�� X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE�� ���k}�/����O�~v�a��k�r�k^ �Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ���� ����k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z� �0`��j��BR+��nDE
� �M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p �0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n����� `�@���:��g{_����p ��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS ��*0�1���4F��B9��@� 7.U�B��!�i�� ��g����p�8��)�8hW�|����R�y�B��c�6�j
Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-�� @_��DM+�:�u ����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q� �n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8 ���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=� @��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p �g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8 ���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�# �QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i����� Y6����Vk��yG4N�#(�F8 ��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l� �<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V� �<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p �����mDULT�n&v�%+���
)M
v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H� �<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s� &<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s� ��h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P� ��OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;� j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p @�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&� Pzv���EB�T�
y*���#��ru[�` ��VM��z�N�� ����GV@P�X�k*�X ��b���~T��B1
9���,��4���p *+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p�� T��T�V7Y����y�v�@�H�N��JudD���������?�9�?� �<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8 �f�5!h/�����B����;�N��R��l;������P� T���&�s���]-�a`e�p� R0��X�8 Xp:%H��� ���r���;R��# �4tm�Q(�u\c�0 (
�5!,<� JC�)� ��p�[�� ��p@0X<� ����@0X<� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� ���;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz �� �&Y�����~���+9{�l�j�����C��5k��~���+�@8 PE� ��A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^ P�
V��! �u\@8 PE� � +F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q � PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i����������� @8 ��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q � ����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N���� � �DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p 5�U���T:����h8���[��o�
���A�����p���h���Kl\ � jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\ � j��Q�*bw��;�����v�����~�zwg�� �4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�% �&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e� �,�T$ X(� J�N�iw4 �p �"R(���v�Q�4- X(� �!r?�y �n 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� �s���ddd$��{w�J����%����_@����D8 h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T� !� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p ���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU ,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d� ,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O[m��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q ����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u� �A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��" ����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p ��v�Wty(:��[Fb����l��zi������E8 P9*�
���B%h(&Vv���B6�S�� *G{����������:�����^{���aa�{������D8 PI:�"<���{��=�A5���C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 ����F��h4����p����4�F��h4�i�G?��p9��M(5M IEND�B`�SVE_support_for_popcount.patchapplication/octet-stream; name=SVE_support_for_popcount.patchDownload
From 04d2100e41f9e282c3f1cee7867f8c18841414d1 Mon Sep 17 00:00:00 2001
From: rajatma <rajat.ma@fujitsu.com>
Date: Wed, 6 Nov 2024 15:50:04 +0530
Subject: [PATCH v1 1/6] Added new File of popcount SVE Implementation
---
src/port/popcount_sve.c | 44 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 src/port/popcount_sve.c
diff --git a/src/port/popcount_sve.c b/src/port/popcount_sve.c
new file mode 100644
index 0000000000..22185dda3b
--- /dev/null
+++ b/src/port/popcount_sve.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <string.h>
+#include <arm_sve.h>
+
+typedef uint8_t uint8;
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+
+uint64 pg_popcount_sve(const char *buf, uint32 bytes)
+{
+ // Version 2.3: 64bit value size, no loop predicate
+ svbool_t predicate = svptrue_b64();
+ svuint64_t segment, accum = svdup_u64(0);
+
+ uint64 popcnt;
+ uint32 i = 0, segment_len = svcntb();
+ uint32 num_vals_segment = svlen_u64(segment); // no. of 64bit values in a segment
+ uint32 num_vals_full_segment = (bytes / segment_len) * num_vals_segment; // no. of 64bit values in all full segments
+
+ // Process full segments, predicate is not needed here
+ for (; i < num_vals_full_segment; i += num_vals_segment)
+ {
+ segment = svld1(predicate, (const uint64 *) buf);
+ accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
+ buf += segment_len;
+ printf("i: %u, buf: %lu, accum: %lu\n", i, (uint64) buf, svaddv(predicate, accum));
+ }
+
+ popcnt = svaddv(predicate, accum); // horizontal reduce
+
+ // process the last segment, no. of bytes in the last segment may be odd, so we use 8bit values
+ predicate = svwhilelt_b8(i * 8, bytes); // i * 8 because, each value was of size 64bits in the loop
+ popcnt += svaddv(predicate, svcnt_z(predicate, svld1(predicate, (const uint8 *) buf)));
+
+ return popcnt;
+}
+
+int main() {
+ char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount should be 258
+ // char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount - 86
+ printf("\nTotal Bit Count: %lu\n", pg_popcount_sve(buf, strlen(buf)));
+ return 0;
+}
+
--
2.34.1
From 3e6229e8a85eb4a365aa9436b30c4162a8a8688b Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Mon, 11 Nov 2024 15:55:12 +0530
Subject: [PATCH v1 2/6] Files added for popcount sve impl
---
src/port/pg_popcount_sve.c | 1 +
src/port/pg_popcount_sve_choose.c | 1 +
src/port/popcount_sve.c | 44 -------------------------------
3 files changed, 2 insertions(+), 44 deletions(-)
create mode 100644 src/port/pg_popcount_sve.c
create mode 100644 src/port/pg_popcount_sve_choose.c
delete mode 100644 src/port/popcount_sve.c
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
new file mode 100644
index 0000000000..aad59755f9
--- /dev/null
+++ b/src/port/pg_popcount_sve.c
@@ -0,0 +1 @@
+// DUMMY
\ No newline at end of file
diff --git a/src/port/pg_popcount_sve_choose.c b/src/port/pg_popcount_sve_choose.c
new file mode 100644
index 0000000000..aad59755f9
--- /dev/null
+++ b/src/port/pg_popcount_sve_choose.c
@@ -0,0 +1 @@
+// DUMMY
\ No newline at end of file
diff --git a/src/port/popcount_sve.c b/src/port/popcount_sve.c
deleted file mode 100644
index 22185dda3b..0000000000
--- a/src/port/popcount_sve.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <arm_sve.h>
-
-typedef uint8_t uint8;
-typedef uint32_t uint32;
-typedef uint64_t uint64;
-
-uint64 pg_popcount_sve(const char *buf, uint32 bytes)
-{
- // Version 2.3: 64bit value size, no loop predicate
- svbool_t predicate = svptrue_b64();
- svuint64_t segment, accum = svdup_u64(0);
-
- uint64 popcnt;
- uint32 i = 0, segment_len = svcntb();
- uint32 num_vals_segment = svlen_u64(segment); // no. of 64bit values in a segment
- uint32 num_vals_full_segment = (bytes / segment_len) * num_vals_segment; // no. of 64bit values in all full segments
-
- // Process full segments, predicate is not needed here
- for (; i < num_vals_full_segment; i += num_vals_segment)
- {
- segment = svld1(predicate, (const uint64 *) buf);
- accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
- buf += segment_len;
- printf("i: %u, buf: %lu, accum: %lu\n", i, (uint64) buf, svaddv(predicate, accum));
- }
-
- popcnt = svaddv(predicate, accum); // horizontal reduce
-
- // process the last segment, no. of bytes in the last segment may be odd, so we use 8bit values
- predicate = svwhilelt_b8(i * 8, bytes); // i * 8 because, each value was of size 64bits in the loop
- popcnt += svaddv(predicate, svcnt_z(predicate, svld1(predicate, (const uint8 *) buf)));
-
- return popcnt;
-}
-
-int main() {
- char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount should be 258
- // char buf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // bitcount - 86
- printf("\nTotal Bit Count: %lu\n", pg_popcount_sve(buf, strlen(buf)));
- return 0;
-}
-
--
2.34.1
From c1df7d044f7068285e6e5b7acf4e33afeb710107 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Wed, 13 Nov 2024 12:34:55 +0530
Subject: [PATCH v1 3/6] Optimizing pg_popcount() with SVE intrinsics.
---
config/c-compiler.m4 | 44 +++++++++++++
configure | 103 ++++++++++++++++++++++++++++--
configure.ac | 36 +++++++++++
meson.build | 31 +++++++++
src/Makefile.global.in | 2 +
src/include/pg_config.h.in | 3 +
src/include/port/pg_bitutils.h | 16 +++++
src/makefiles/meson.build | 3 +-
src/port/Makefile | 11 ++++
src/port/meson.build | 4 +-
src/port/pg_bitutils.c | 11 +++-
src/port/pg_popcount_sve.c | 89 +++++++++++++++++++++++++-
src/port/pg_popcount_sve_choose.c | 33 +++++++++-
13 files changed, 377 insertions(+), 9 deletions(-)
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 10f8c7bd0a..500c4e6662 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -752,3 +752,47 @@ if test x"$Ac_cachevar" = x"yes"; then
fi
undefine([Ac_cachevar])dnl
])# PGAC_AVX512_POPCNT_INTRINSICS
+
+
+# PGAC_ARM_SVE_POPCNT_INTRINSICS
+# ------------------------------
+# Check if the compiler supports the ARM SVE popcount instructions using the
+# svdup_u64, svptrue_b64, svcnt_z, svcnt_x, svadd_x, svaddv, and svwhilelt_b8
+# intrinsic functions.
+#
+# Optional compiler flags can be passed as arguments (e.g., -march=armv8-a+sve).
+AC_DEFUN([PGAC_ARM_SVE_POPCNT_INTRINSICS],
+[
+ AC_CACHE_CHECK([for svdup_u64 and other intrinsics with CFLAGS=$1],
+ [pgac_cv_arm_sve_popcnt_intrinsics],
+ [
+ pgac_save_CFLAGS=$CFLAGS
+ CFLAGS="$pgac_save_CFLAGS $1"
+
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <arm_sve.h>],
+ [svbool_t predicate = svptrue_b64();
+ svuint64_t segment = svdup_u64(0), accum = svdup_u64(0);
+ const char *buf = NULL; // Simulating a buffer pointer
+ uint32_t num_vals_segment = svlen_u64(segment); // 64-bit values per segment
+
+ // Using other intrinsics as per the updated code
+ predicate = svwhilelt_b8(0, 128); // Simulating a conditional predicate
+ segment = svld1(predicate, (const uint64_t *)buf);
+ accum = svadd_x(predicate, accum, svcnt_x(predicate, segment));
+ uint64_t popcnt = svaddv(predicate, accum);
+
+ /* Return computed value, to prevent the above being optimized away */
+ return popcnt;])],
+ [pgac_cv_arm_sve_popcnt_intrinsics=yes],
+ [pgac_cv_arm_sve_popcnt_intrinsics=no])
+
+ CFLAGS="$pgac_save_CFLAGS"
+ ])
+
+ if test x"$pgac_cv_arm_sve_popcnt_intrinsics" = x"yes"; then
+ CFLAGS_POPCNT_ARM="$1"
+ pgac_arm_sve_popcnt_intrinsics=yes
+ fi
+])
+
+
diff --git a/configure b/configure
index 53c8a1f2ba..0cd8f2879f 100755
--- a/configure
+++ b/configure
@@ -648,7 +648,9 @@ MSGFMT
PG_CRC32C_OBJS
CFLAGS_CRC
PG_POPCNT_OBJS
+PG_POPCNT_OBJS_ARM
CFLAGS_POPCNT
+CFLAGS_POPCNT_ARM
CFLAGS_XSAVE
LIBOBJS
OPENSSL
@@ -2787,10 +2789,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
+# Set architecture flags for ARM SVE
+if [ "$target" = "aarch64" ]; then
+ CFLAGS="$CFLAGS -march=armv8-a+sve"
+elif [ "$target" = "arm" ]; then
+ CFLAGS="$CFLAGS -march=armv8-a+sve"
+fi
ac_aux_dir=
for ac_dir in config "$srcdir"/config; do
@@ -17582,6 +17586,97 @@ $as_echo "#define HAVE_XSAVE_INTRINSICS 1" >>confdefs.h
fi
+# Check for ARM SVE popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+if test x"$host_cpu" = x"aarch64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+ CFLAGS="$pgac_save_CFLAGS "
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arm_sve.h>
+int
+main ()
+{
+ svbool_t predicate = svptrue_b64();
+ svuint64_t segment, accum = svdup_u64(0);
+ uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+ svuint64_t counts = svcnt_u64_z(predicate, segment);
+ accum = svadd_u64_m(predicate, accum, counts);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_arm_sve_popcnt_intrinsics_=yes
+else
+ pgac_cv_arm_sve_popcnt_intrinsics_=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
+ CFLAGS_POPCNT_ARM=""
+ pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+ CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arm_sve.h>
+int
+main ()
+{
+ svbool_t predicate = svptrue_b64();
+ svuint64_t segment, accum = svdup_u64(0);
+ uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+ svuint64_t counts = svcnt_u64_z(predicate, segment);
+ accum = svadd_u64_m(predicate, accum, counts);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
+else
+ pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
+ CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
+ pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+fi
+if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+ PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
+
+ $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
+
+fi
+fi
+
# Check for AVX-512 popcount intrinsics
#
diff --git a/configure.ac b/configure.ac
index 6a35b2880b..2b67cd2753 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2089,6 +2089,41 @@ fi
AC_SUBST(CFLAGS_POPCNT)
AC_SUBST(PG_POPCNT_OBJS)
+# Check for ARM popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+# Debug: Print the host CPU type
+{ $as_echo "Host CPU: $host_cpu" >&5; }
+
+if test x"$host_cpu" = x"aarch64"; then
+ #PGAC_ARM_SVE_POPCNT_INTRINSICS([])
+
+ # Debug: Check if SVE intrinsics were found
+ { $as_echo "pgac_arm_sve_popcnt_intrinsics: $pgac_arm_sve_popcnt_intrinsics" >&5; }
+
+ #if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+ PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
+
+ # Debug: Check if SVE intrinsics were found after trying with -march flag
+ { $as_echo "pgac_arm_sve_popcnt_intrinsics after -march flag: $pgac_arm_sve_popcnt_intrinsics" >&5; }
+
+ #fi
+ if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+ PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o" # Adjust this as necessary to your implementation
+ AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
+
+ # Debug: Print the objects being used
+ { $as_echo "Using ARM popcount objects: $PG_POPCNT_OBJS_ARM" >&5; }
+
+ fi
+fi
+# Debug: Print final values of flags
+{ $as_echo "CFLAGS_POPCNT_ARM: $CFLAGS_POPCNT_ARM" >&5; }
+{ $as_echo "PG_POPCNT_OBJS_ARM: $PG_POPCNT_OBJS_ARM" >&5; }
+AC_SUBST(CFLAGS_POPCNT_ARM)
+AC_SUBST(PG_POPCNT_OBJS_ARM)
+
# Check for Intel SSE 4.2 intrinsics to do CRC calculations.
#
# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
@@ -2115,6 +2150,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
PGAC_ARMV8_CRC32C_INTRINSICS([])
if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then
PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc])
+ { $as_echo "pgac_armv8_crc32_intrinsics after -march flag: $pgac_armv8_crc32_intrinsics" >&5; }
fi
# Check for LoongArch CRC intrinsics to do CRC calculations.
diff --git a/meson.build b/meson.build
index 7150f85e0f..ba3bc4cd2b 100644
--- a/meson.build
+++ b/meson.build
@@ -2217,6 +2217,37 @@ int main(void)
endif
+###############################################################
+# Check for the availability of ARM SVE popcount intrinsics.
+###############################################################
+
+cflags_popcnt_arm = []
+if host_cpu == 'aarch64'
+
+ prog = '''
+#include <arm_sve.h>
+
+int main(void)
+{
+ const svuint64_t val = svdup_u64(0xFFFFFFFFFFFFFFFF); // Example value
+ svuint64_t popcnt = svcntb(val); // Count the number of 1 bits
+ /* return computed value, to prevent the above being optimized away */
+ return popcnt == 0; // Ensure to return a valid value
+}
+'''
+
+ if cc.links(prog, name: 'ARM SVE popcount without -march=armv8-a+sve',
+ args: test_c_args + ['-DSVINT64=@0@'.format(cdata.get('SV_INT64_TYPE'))])
+ cdata.set('USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 1)
+ elif cc.links(prog, name: 'ARM SVE popcount with -march=armv8-a+sve',
+ args: test_c_args + ['-DSVINT64=@0@'.format(cdata.get('SV_INT64_TYPE'))] + ['-march=armv8-a+sve'])
+ cdata.set('USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 1)
+ cflags_popcnt_arm += ['-march=armv8-a+sve']
+ endif
+
+endif
+
+
###############################################################
# Select CRC-32C implementation.
#
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 42f50b4976..2e79a24a2d 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -263,6 +263,7 @@ CXXFLAGS_SL_MODULE = @CXXFLAGS_SL_MODULE@
CFLAGS_UNROLL_LOOPS = @CFLAGS_UNROLL_LOOPS@
CFLAGS_VECTORIZE = @CFLAGS_VECTORIZE@
CFLAGS_POPCNT = @CFLAGS_POPCNT@
+CFLAGS_POPCNT_ARM = @CFLAGS_POPCNT_ARM@
CFLAGS_CRC = @CFLAGS_CRC@
CFLAGS_XSAVE = @CFLAGS_XSAVE@
PERMIT_DECLARATION_AFTER_STATEMENT = @PERMIT_DECLARATION_AFTER_STATEMENT@
@@ -764,6 +765,7 @@ PG_CRC32C_OBJS = @PG_CRC32C_OBJS@
# files needed for the chosen popcount implementation
PG_POPCNT_OBJS = @PG_POPCNT_OBJS@
+PG_POPCNT_OBJS_ARM = @PG_POPCNT_OBJS_ARM@
LIBS := -lpgcommon -lpgport $(LIBS)
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 38006367a4..f2573ad4d1 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -678,6 +678,9 @@
/* Define to 1 to use AVX-512 popcount instructions with a runtime check. */
#undef USE_AVX512_POPCNT_WITH_RUNTIME_CHECK
+/* Define to 1 to use SVE popcount instructions with a runtime check. */
+#undef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
/* Define to 1 to build with Bonjour support. (--with-bonjour) */
#undef USE_BONJOUR
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 4d88478c9c..811b1cafe5 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -298,6 +298,16 @@ pg_ceil_log2_64(uint64 num)
#endif
#endif
+/*
+ * On ARM builds, try SVE popcount instructions.
+ */
+#if defined(__aarch64__) || defined(__arm__)
+#define ARM_BUILD 1
+#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
+#define TRY_POPCNT_FAST 1
+#endif
+#endif
+
#ifdef TRY_POPCNT_FAST
/* Attempt to use the POPCNT instruction, but perform a runtime check first */
extern PGDLLIMPORT int (*pg_popcount32) (uint32 word);
@@ -317,6 +327,12 @@ extern uint64 pg_popcount_avx512(const char *buf, int bytes);
extern uint64 pg_popcount_masked_avx512(const char *buf, int bytes, bits8 mask);
#endif
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+extern bool pg_popcount_sve_available(void);
+extern uint64 pg_popcount_sve(const char *buf, int bytes);
+extern uint64 pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask);
+#endif
+
#else
/* Use a portable implementation -- no need for a function pointer. */
extern int pg_popcount32(uint32 word);
diff --git a/src/makefiles/meson.build b/src/makefiles/meson.build
index 850e927584..0ff4e05993 100644
--- a/src/makefiles/meson.build
+++ b/src/makefiles/meson.build
@@ -103,6 +103,7 @@ pgxs_kv = {
'CFLAGS_CRC': ' '.join(cflags_crc),
'CFLAGS_POPCNT': ' '.join(cflags_popcnt),
+ 'CFLAGS_POPCNT_ARM': ' '.join(cflags_popcnt_arm)
'CFLAGS_UNROLL_LOOPS': ' '.join(unroll_loops_cflags),
'CFLAGS_VECTORIZE': ' '.join(vectorize_cflags),
'CFLAGS_XSAVE': ' '.join(cflags_xsave),
@@ -181,7 +182,7 @@ pgxs_empty = [
'WANTED_LANGUAGES',
# Not needed because we don't build the server / PLs with the generated makefile
- 'LIBOBJS', 'PG_CRC32C_OBJS', 'PG_POPCNT_OBJS', 'TAS',
+ 'LIBOBJS', 'PG_CRC32C_OBJS', 'PG_POPCNT_OBJS', 'PG_POPCNT_OBJS_ARM', 'TAS',
'DTRACEFLAGS', # only server has dtrace probes
'perl_archlibexp', 'perl_embed_ccflags', 'perl_embed_ldflags', 'perl_includespec', 'perl_privlibexp',
diff --git a/src/port/Makefile b/src/port/Makefile
index 9324ec2d9f..73ec5847d7 100644
--- a/src/port/Makefile
+++ b/src/port/Makefile
@@ -39,6 +39,7 @@ OBJS = \
$(LIBOBJS) \
$(PG_CRC32C_OBJS) \
$(PG_POPCNT_OBJS) \
+ $(PG_POPCNT_OBJS_ARM) \
bsearch_arg.o \
chklocale.o \
inet_net_ntop.o \
@@ -102,6 +103,16 @@ pg_popcount_avx512.o: CFLAGS+=$(CFLAGS_POPCNT)
pg_popcount_avx512_shlib.o: CFLAGS+=$(CFLAGS_POPCNT)
pg_popcount_avx512_srv.o: CFLAGS+=$(CFLAGS_POPCNT)
+# all version of pg_popcount_sve.o need CFLAGS_POPCNT_ARM
+pg_popcount_sve.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_shlib.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_srv.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+
+# all versions of pg_popcount_sve_choose.o need CFLAGS_POPCNT_ARM
+pg_popcount_sve_choose.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_choose_shlib.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+pg_popcount_sve_choose_srv.o: CFLAGS+=$(CFLAGS_POPCNT_ARM)
+
#
# Shared library versions of object files
#
diff --git a/src/port/meson.build b/src/port/meson.build
index 1150966ab7..5308898bb4 100644
--- a/src/port/meson.build
+++ b/src/port/meson.build
@@ -91,6 +91,8 @@ replace_funcs_pos = [
['pg_crc32c_armv8', 'USE_ARMV8_CRC32C'],
['pg_crc32c_armv8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 'crc'],
['pg_crc32c_armv8_choose', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'],
+ ['pg_popcount_sve', 'USE_SVE_POPCNT_WITH_RUNTIME_CHECK', 'popcnt'],
+ ['pg_popcount_sve_choose', 'USE_SVE_POPCNT_WITH_RUNTIME_CHECK'],
['pg_crc32c_sb8', 'USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK'],
# loongarch
@@ -100,7 +102,7 @@ replace_funcs_pos = [
['pg_crc32c_sb8', 'USE_SLICING_BY_8_CRC32C'],
]
-pgport_cflags = {'crc': cflags_crc, 'popcnt': cflags_popcnt, 'xsave': cflags_xsave}
+pgport_cflags = {'crc': cflags_crc, 'popcnt': cflags_popcnt + cflags_popcnt_arm, 'xsave': cflags_xsave}
pgport_sources_cflags = {'crc': [], 'popcnt': [], 'xsave': []}
foreach f : replace_funcs_neg
diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c
index 87f56e82b8..15b3ea2e05 100644
--- a/src/port/pg_bitutils.c
+++ b/src/port/pg_bitutils.c
@@ -129,13 +129,16 @@ uint64 (*pg_popcount_masked_optimized) (const char *buf, int bytes, bits8 mask)
/*
* Return true if CPUID indicates that the POPCNT instruction is available.
+ * Return false for ARM builds.
*/
static bool
pg_popcount_available(void)
{
unsigned int exx[4] = {0, 0, 0, 0};
-#if defined(HAVE__GET_CPUID)
+#if defined(ARM_BUILD)
+ return false;
+#elif defined(HAVE__GET_CPUID)
__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
#elif defined(HAVE__CPUID)
__cpuid(exx, 1);
@@ -176,6 +179,12 @@ choose_popcount_functions(void)
pg_popcount_optimized = pg_popcount_avx512;
pg_popcount_masked_optimized = pg_popcount_masked_avx512;
}
+#elif USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+ if (pg_popcount_sve_available())
+ {
+ pg_popcount_optimized = pg_popcount_sve;
+ pg_popcount_masked_optimized = pg_popcount_masked_sve;
+ }
#endif
}
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index aad59755f9..94e97eaff9 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -1 +1,88 @@
-// DUMMY
\ No newline at end of file
+/*-------------------------------------------------------------------------
+ *
+ * pg_popcount_sve.c
+ * Holds the SVE pg_popcount() implementation.
+ *
+ * Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * src/port/pg_popcount_sve.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "c.h"
+#include "port/pg_bitutils.h"
+
+#include <arm_sve.h>
+
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
+/*
+ * pg_popcount_sve
+ * Returns the number of 1-bits in buf
+ */
+uint64
+pg_popcount_sve(const char *buf, int bytes)
+{
+ svbool_t pred = svptrue_b64();
+ svuint64_t vec, accum = svdup_u64(0);
+
+ uint32 i = 0, vec_len = svcntb();
+ uint32 num_vals_vec = svlen_u64(vec);
+ uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+ uint64 popcnt;
+
+ /* Process full vectors */
+ for (; i < num_vals_full_vec; i += num_vals_vec)
+ {
+ vec = svld1(pred, (const uint64 *) buf);
+ accum = svadd_x(pred, accum, svcnt_x(pred, vec));
+ buf += vec_len;
+ }
+
+ popcnt = svaddv(pred, accum);
+
+ /* Process the last incomplete vector */
+ if(i < bytes)
+ {
+ pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+ popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
+ }
+
+ return popcnt;
+}
+
+uint64
+pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
+{
+ svbool_t pred = svptrue_b64();
+ svuint8_t vec8;
+ svuint64_t vec, accum = svdup_u64(0);
+
+ uint32 i = 0, vec_len = svcntb();
+ uint32 num_vals_vec = svlen_u64(vec);
+ uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+ uint64 popcnt, mask64 = ~UINT64CONST(0) / 0xFF * mask;
+
+ /* Process full vectors */
+ for (; i < num_vals_full_vec; i += num_vals_vec)
+ {
+ vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
+ accum = svadd_x(pred, accum, svcnt_x(pred, vec));
+ buf += vec_len;
+ }
+
+ popcnt = svaddv(pred, accum);
+
+ /* Process the last incomplete vector */
+ if(i < bytes)
+ {
+ pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+ vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
+ popcnt += svaddv(pred, svcnt_z(pred, vec8));
+ }
+
+ return popcnt;
+}
+
+#endif /* USE_SVE_POPCNT_WITH_RUNTIME_CHECK */
diff --git a/src/port/pg_popcount_sve_choose.c b/src/port/pg_popcount_sve_choose.c
index aad59755f9..a6f9e0c3dc 100644
--- a/src/port/pg_popcount_sve_choose.c
+++ b/src/port/pg_popcount_sve_choose.c
@@ -1 +1,32 @@
-// DUMMY
\ No newline at end of file
+/*-------------------------------------------------------------------------
+ *
+ * pg_popcount_sve_choose.c
+ * Test whether we can use the SVE pg_popcount() implementation.
+ *
+ * Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * src/port/pg_popcount_sve_choose.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "c.h"
+#include "port/pg_bitutils.h"
+
+#include <asm/hwcap.h>
+#include <sys/auxv.h>
+
+#ifdef USE_SVE_POPCNT_WITH_RUNTIME_CHECK
+
+/*
+ * Returns true if the CPU supports the instructions required for the SVE
+ * pg_popcount() implementation.
+ */
+bool
+pg_popcount_sve_available(void)
+{
+ unsigned long hwcap = getauxval(AT_HWCAP); /* get the HWCAP flags */
+ return (hwcap & HWCAP_SVE) != 0; /* return true if SVE is supported */
+}
+
+#endif /* USE_SVE_POPCNT_WITH_RUNTIME_CHECK */
--
2.34.1
From b0acc73b3ecebc50c8992a8354674a3b946e23a3 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Tue, 26 Nov 2024 15:30:18 +0530
Subject: [PATCH v1 4/6] whitespaces and debug printing removed
---
config/c-compiler.m4 | 3 -
configure | 192 ++++++++++++++++++-------------------
configure.ac | 28 +-----
src/port/pg_popcount_sve.c | 31 +++---
4 files changed, 116 insertions(+), 138 deletions(-)
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 500c4e6662..fcfee6b2e2 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -753,7 +753,6 @@ fi
undefine([Ac_cachevar])dnl
])# PGAC_AVX512_POPCNT_INTRINSICS
-
# PGAC_ARM_SVE_POPCNT_INTRINSICS
# ------------------------------
# Check if the compiler supports the ARM SVE popcount instructions using the
@@ -794,5 +793,3 @@ AC_DEFUN([PGAC_ARM_SVE_POPCNT_INTRINSICS],
pgac_arm_sve_popcnt_intrinsics=yes
fi
])
-
-
diff --git a/configure b/configure
index 0cd8f2879f..6297c46dd6 100755
--- a/configure
+++ b/configure
@@ -2789,12 +2789,10 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# Set architecture flags for ARM SVE
-if [ "$target" = "aarch64" ]; then
- CFLAGS="$CFLAGS -march=armv8-a+sve"
-elif [ "$target" = "arm" ]; then
- CFLAGS="$CFLAGS -march=armv8-a+sve"
-fi
+
+
+
+
ac_aux_dir=
for ac_dir in config "$srcdir"/config; do
@@ -17586,97 +17584,6 @@ $as_echo "#define HAVE_XSAVE_INTRINSICS 1" >>confdefs.h
fi
-# Check for ARM SVE popcount intrinsics
-CFLAGS_POPCNT_ARM=""
-PG_POPCNT_OBJS_ARM=""
-
-if test x"$host_cpu" = x"aarch64"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
-$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
-if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CFLAGS=$CFLAGS
- CFLAGS="$pgac_save_CFLAGS "
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <arm_sve.h>
-int
-main ()
-{
- svbool_t predicate = svptrue_b64();
- svuint64_t segment, accum = svdup_u64(0);
- uint64_t numVals = svlen_u64(segment); // 64-bit count check
-
- svuint64_t counts = svcnt_u64_z(predicate, segment);
- accum = svadd_u64_m(predicate, accum, counts);
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pgac_cv_arm_sve_popcnt_intrinsics_=yes
-else
- pgac_cv_arm_sve_popcnt_intrinsics_=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-CFLAGS="$pgac_save_CFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
-$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
-if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
- CFLAGS_POPCNT_ARM=""
- pgac_arm_sve_popcnt_intrinsics=yes
-fi
-
-if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
-$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
-if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- pgac_save_CFLAGS=$CFLAGS
- CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <arm_sve.h>
-int
-main ()
-{
- svbool_t predicate = svptrue_b64();
- svuint64_t segment, accum = svdup_u64(0);
- uint64_t numVals = svlen_u64(segment); // 64-bit count check
-
- svuint64_t counts = svcnt_u64_z(predicate, segment);
- accum = svadd_u64_m(predicate, accum, counts);
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
-else
- pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-CFLAGS="$pgac_save_CFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
-$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
-if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
- CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
- pgac_arm_sve_popcnt_intrinsics=yes
-fi
-
-fi
-if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
- PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
-
- $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
-
-fi
-fi
-
# Check for AVX-512 popcount intrinsics
#
@@ -17778,6 +17685,97 @@ $as_echo "#define USE_AVX512_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
fi
+# Check for ARM SVE popcount intrinsics
+CFLAGS_POPCNT_ARM=""
+PG_POPCNT_OBJS_ARM=""
+
+if test x"$host_cpu" = x"aarch64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+ CFLAGS="$pgac_save_CFLAGS "
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arm_sve.h>
+int
+main ()
+{
+ svbool_t predicate = svptrue_b64();
+ svuint64_t segment, accum = svdup_u64(0);
+ uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+ svuint64_t counts = svcnt_u64_z(predicate, segment);
+ accum = svadd_u64_m(predicate, accum, counts);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_arm_sve_popcnt_intrinsics_=yes
+else
+ pgac_cv_arm_sve_popcnt_intrinsics_=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics_" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics_" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics_" = x"yes"; then
+ CFLAGS_POPCNT_ARM=""
+ pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve" >&5
+$as_echo_n "checking for svcnt_u64 with CFLAGS=-march=armv8-a+sve... " >&6; }
+if ${pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+ CFLAGS="$pgac_save_CFLAGS -march=armv8-a+sve"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arm_sve.h>
+int
+main ()
+{
+ svbool_t predicate = svptrue_b64();
+ svuint64_t segment, accum = svdup_u64(0);
+ uint64_t numVals = svlen_u64(segment); // 64-bit count check
+
+ svuint64_t counts = svcnt_u64_z(predicate, segment);
+ accum = svadd_u64_m(predicate, accum, counts);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=yes
+else
+ pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&5
+$as_echo "$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" >&6; }
+if test x"$pgac_cv_arm_sve_popcnt_intrinsics__march_armv8_a_sve" = x"yes"; then
+ CFLAGS_POPCNT_ARM="-march=armv8-a+sve"
+ pgac_arm_sve_popcnt_intrinsics=yes
+fi
+
+fi
+if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
+ PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
+
+ $as_echo "#define USE_SVE_POPCNT_WITH_RUNTIME_CHECK 1" >>confdefs.h
+
+fi
+fi
+
# Check for Intel SSE 4.2 intrinsics to do CRC calculations.
#
diff --git a/configure.ac b/configure.ac
index 2b67cd2753..5a5ae8f7ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2092,35 +2092,16 @@ AC_SUBST(PG_POPCNT_OBJS)
# Check for ARM popcount intrinsics
CFLAGS_POPCNT_ARM=""
PG_POPCNT_OBJS_ARM=""
-
-# Debug: Print the host CPU type
-{ $as_echo "Host CPU: $host_cpu" >&5; }
-
if test x"$host_cpu" = x"aarch64"; then
- #PGAC_ARM_SVE_POPCNT_INTRINSICS([])
-
- # Debug: Check if SVE intrinsics were found
- { $as_echo "pgac_arm_sve_popcnt_intrinsics: $pgac_arm_sve_popcnt_intrinsics" >&5; }
-
- #if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
- PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
-
- # Debug: Check if SVE intrinsics were found after trying with -march flag
- { $as_echo "pgac_arm_sve_popcnt_intrinsics after -march flag: $pgac_arm_sve_popcnt_intrinsics" >&5; }
-
- #fi
+ PGAC_ARM_SVE_POPCNT_INTRINSICS([])
+ if test x"$pgac_arm_sve_popcnt_intrinsics" != x"yes"; then
+ PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
+ fi
if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o" # Adjust this as necessary to your implementation
AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
-
- # Debug: Print the objects being used
- { $as_echo "Using ARM popcount objects: $PG_POPCNT_OBJS_ARM" >&5; }
-
fi
fi
-# Debug: Print final values of flags
-{ $as_echo "CFLAGS_POPCNT_ARM: $CFLAGS_POPCNT_ARM" >&5; }
-{ $as_echo "PG_POPCNT_OBJS_ARM: $PG_POPCNT_OBJS_ARM" >&5; }
AC_SUBST(CFLAGS_POPCNT_ARM)
AC_SUBST(PG_POPCNT_OBJS_ARM)
@@ -2150,7 +2131,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
PGAC_ARMV8_CRC32C_INTRINSICS([])
if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then
PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc])
- { $as_echo "pgac_armv8_crc32_intrinsics after -march flag: $pgac_armv8_crc32_intrinsics" >&5; }
fi
# Check for LoongArch CRC intrinsics to do CRC calculations.
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 94e97eaff9..564a20bf3d 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -24,12 +24,13 @@
uint64
pg_popcount_sve(const char *buf, int bytes)
{
- svbool_t pred = svptrue_b64();
- svuint64_t vec, accum = svdup_u64(0);
-
- uint32 i = 0, vec_len = svcntb();
- uint32 num_vals_vec = svlen_u64(vec);
- uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+ svbool_t pred = svptrue_b64();
+ svuint64_t vec,
+ accum = svdup_u64(0);
+ uint32 i = 0,
+ vec_len = svcntb(),
+ num_vals_vec = svlen_u64(vec),
+ num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
uint64 popcnt;
/* Process full vectors */
@@ -55,14 +56,16 @@ pg_popcount_sve(const char *buf, int bytes)
uint64
pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
{
- svbool_t pred = svptrue_b64();
- svuint8_t vec8;
- svuint64_t vec, accum = svdup_u64(0);
-
- uint32 i = 0, vec_len = svcntb();
- uint32 num_vals_vec = svlen_u64(vec);
- uint32 num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
- uint64 popcnt, mask64 = ~UINT64CONST(0) / 0xFF * mask;
+ svbool_t pred = svptrue_b64();
+ svuint8_t vec8;
+ svuint64_t vec,
+ accum = svdup_u64(0);
+ uint32 i = 0,
+ vec_len = svcntb(),
+ num_vals_vec = svlen_u64(vec),
+ num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
+ uint64 popcnt,
+ mask64 = ~UINT64CONST(0) / 0xFF * mask;
/* Process full vectors */
for (; i < num_vals_full_vec; i += num_vals_vec)
--
2.34.1
From 58e90123c88ecc10602ff84e8e061237c6dff830 Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Tue, 26 Nov 2024 15:48:57 +0530
Subject: [PATCH v1 5/6] updated the macros used and comments added
---
configure.ac | 2 +-
src/include/port/pg_bitutils.h | 8 +++-----
src/port/pg_bitutils.c | 5 ++---
src/port/pg_popcount_sve.c | 12 ++++++++----
4 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/configure.ac b/configure.ac
index 5a5ae8f7ca..a45a01c20a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2098,7 +2098,7 @@ if test x"$host_cpu" = x"aarch64"; then
PGAC_ARM_SVE_POPCNT_INTRINSICS([-march=armv8-a+sve])
fi
if test x"$pgac_arm_sve_popcnt_intrinsics" = x"yes"; then
- PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o" # Adjust this as necessary to your implementation
+ PG_POPCNT_OBJS_ARM="pg_popcount_sve.o pg_popcount_sve_choose.o"
AC_DEFINE(USE_SVE_POPCNT_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARM popcount instructions.])
fi
fi
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 811b1cafe5..8e09f78862 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -299,14 +299,12 @@ pg_ceil_log2_64(uint64 num)
#endif
/*
- * On ARM builds, try SVE popcount instructions.
+ * On AArch64 builds, try using SVE popcount instructions, but only if
+ * we can verify that the CPU supports it via a runtime check.
*/
-#if defined(__aarch64__) || defined(__arm__)
-#define ARM_BUILD 1
-#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
+#if defined(__aarch64__)
#define TRY_POPCNT_FAST 1
#endif
-#endif
#ifdef TRY_POPCNT_FAST
/* Attempt to use the POPCNT instruction, but perform a runtime check first */
diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c
index 15b3ea2e05..9bd5985330 100644
--- a/src/port/pg_bitutils.c
+++ b/src/port/pg_bitutils.c
@@ -129,15 +129,14 @@ uint64 (*pg_popcount_masked_optimized) (const char *buf, int bytes, bits8 mask)
/*
* Return true if CPUID indicates that the POPCNT instruction is available.
- * Return false for ARM builds.
*/
static bool
pg_popcount_available(void)
{
unsigned int exx[4] = {0, 0, 0, 0};
-#if defined(ARM_BUILD)
- return false;
+#if defined(__aarch64__)
+ return false; /* cpuid not available in __aarch64__ */
#elif defined(HAVE__GET_CPUID)
__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
#elif defined(HAVE__CPUID)
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 564a20bf3d..140bf37a2d 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -46,13 +46,17 @@ pg_popcount_sve(const char *buf, int bytes)
/* Process the last incomplete vector */
if(i < bytes)
{
- pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
+ pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 bytes are processed in loop */
popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
}
return popcnt;
}
+/*
+ * pg_popcount_masked_sve
+ * Returns the number of 1-bits in buf after applying the mask to each byte
+ */
uint64
pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
{
@@ -70,7 +74,7 @@ pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
/* Process full vectors */
for (; i < num_vals_full_vec; i += num_vals_vec)
{
- vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
+ vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
accum = svadd_x(pred, accum, svcnt_x(pred, vec));
buf += vec_len;
}
@@ -80,8 +84,8 @@ pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
/* Process the last incomplete vector */
if(i < bytes)
{
- pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 because value size is 64bits */
- vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
+ pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 bytes are processed in loop */
+ vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
popcnt += svaddv(pred, svcnt_z(pred, vec8));
}
--
2.34.1
From a4413f476ce0e9c58914150e5874eec340bd136c Mon Sep 17 00:00:00 2001
From: Chiranmoy Bhattacharya <chiranmoy.bhattacharya@fujitsu.com>
Date: Wed, 4 Dec 2024 12:55:36 +0530
Subject: [PATCH v1 6/6] buffer alignment for popcount sve impl
---
src/include/port/pg_bitutils.h | 2 +-
src/port/pg_popcount_sve.c | 75 +++++++++++++++++++++++++---------
2 files changed, 56 insertions(+), 21 deletions(-)
diff --git a/src/include/port/pg_bitutils.h b/src/include/port/pg_bitutils.h
index 8e09f78862..a690a46a88 100644
--- a/src/include/port/pg_bitutils.h
+++ b/src/include/port/pg_bitutils.h
@@ -302,7 +302,7 @@ pg_ceil_log2_64(uint64 num)
* On AArch64 builds, try using SVE popcount instructions, but only if
* we can verify that the CPU supports it via a runtime check.
*/
-#if defined(__aarch64__)
+#if defined(USE_SVE_POPCNT_WITH_RUNTIME_CHECK)
#define TRY_POPCNT_FAST 1
#endif
diff --git a/src/port/pg_popcount_sve.c b/src/port/pg_popcount_sve.c
index 140bf37a2d..392441a9b1 100644
--- a/src/port/pg_popcount_sve.c
+++ b/src/port/pg_popcount_sve.c
@@ -24,16 +24,33 @@
uint64
pg_popcount_sve(const char *buf, int bytes)
{
- svbool_t pred = svptrue_b64();
- svuint64_t vec,
+ svbool_t pred;
+ svuint64_t vec,
accum = svdup_u64(0);
uint32 i = 0,
- vec_len = svcntb(),
- num_vals_vec = svlen_u64(vec),
- num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
- uint64 popcnt;
+ num_vals_full_vec,
+ pre_align,
+ vec_len = svcntb(),
+ num_vals_vec = svlen_u64(vec);
+ uint64 popcnt = 0;
+
+ /*
+ * For smaller inputs, aligning the buffer degrades performance.
+ * Therefore, we align the buffers only when the input size is sufficiently large.
+ */
+ if (bytes > 4 * vec_len)
+ {
+ pre_align = (const char *) TYPEALIGN_DOWN(sizeof(uint64_t), buf) + sizeof(uint64_t) - buf;
+ pred = svwhilelt_b8(0U, pre_align);
+ popcnt = svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
+ buf += pre_align;
+ bytes -= pre_align;
+ }
+
+ pred = svptrue_b64();
+ num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
- /* Process full vectors */
+ /* Process complete vectors */
for (; i < num_vals_full_vec; i += num_vals_vec)
{
vec = svld1(pred, (const uint64 *) buf);
@@ -41,12 +58,12 @@ pg_popcount_sve(const char *buf, int bytes)
buf += vec_len;
}
- popcnt = svaddv(pred, accum);
+ popcnt += svaddv(pred, accum);
/* Process the last incomplete vector */
if(i < bytes)
{
- pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 bytes are processed in loop */
+ pred = svwhilelt_b8(i * 8, (uint32) bytes);
popcnt += svaddv(pred, svcnt_z(pred, svld1(pred, (const uint8 *) buf)));
}
@@ -60,32 +77,50 @@ pg_popcount_sve(const char *buf, int bytes)
uint64
pg_popcount_masked_sve(const char *buf, int bytes, bits8 mask)
{
- svbool_t pred = svptrue_b64();
+ svbool_t pred;
svuint8_t vec8;
svuint64_t vec,
accum = svdup_u64(0);
uint32 i = 0,
- vec_len = svcntb(),
- num_vals_vec = svlen_u64(vec),
- num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
- uint64 popcnt,
- mask64 = ~UINT64CONST(0) / 0xFF * mask;
+ num_vals_full_vec,
+ pre_align,
+ vec_len = svcntb(),
+ num_vals_vec = svlen_u64(vec);
+ uint64 popcnt = 0,
+ mask64 = ~UINT64CONST(0) / 0xFF * mask;
+
+ /*
+ * For smaller inputs, aligning the buffer degrades the performance.
+ * Therefore, we align the buffers only when the input size is sufficiently large.
+ */
+ if (bytes > 4 * vec_len)
+ {
+ pre_align = (const char *) TYPEALIGN_DOWN(sizeof(uint64_t), buf) + sizeof(uint64_t) - buf;
+ pred = svwhilelt_b8(0U, pre_align);
+ vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *) buf), mask); /* load and mask */
+ popcnt = svaddv(pred, svcnt_z(pred, vec8));
+ buf += pre_align;
+ bytes -= pre_align;
+ }
+
+ pred = svptrue_b64();
+ num_vals_full_vec = (bytes / vec_len) * num_vals_vec;
- /* Process full vectors */
+ /* Process complete vectors */
for (; i < num_vals_full_vec; i += num_vals_vec)
{
- vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *)buf), mask64); /* load and mask */
+ vec = svand_n_u64_x(pred, svld1(pred, (const uint64 *) buf), mask64); /* load and mask */
accum = svadd_x(pred, accum, svcnt_x(pred, vec));
buf += vec_len;
}
- popcnt = svaddv(pred, accum);
+ popcnt += svaddv(pred, accum);
/* Process the last incomplete vector */
if(i < bytes)
{
- pred = svwhilelt_b8(i * 8, (uint32) bytes); /* i * 8 bytes are processed in loop */
- vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *)buf), mask); /* load and mask */
+ pred = svwhilelt_b8(i * 8, (uint32) bytes);
+ vec8 = svand_n_u8_m(pred, svld1(pred, (const uint8 *) buf), mask); /* load and mask */
popcnt += svaddv(pred, svcnt_z(pred, vec8));
}
--
2.34.1
On Fri, 6 Dec 2024 at 10:54, Devanga.Susmitha@fujitsu.com <
Devanga.Susmitha@fujitsu.com> wrote:
Hello, This email is to discuss the contribution of the speed-up
popcount and popcount mask feature we have developed for the ARM
architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C
code, which processes data in a scalar fashion, handling one integer at a
time. By leveraging SVE intrinsics for popcount, the execution can process
multiple integers simultaneously, depending on the vector length, thereby
significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It
includes compile-time and runtime checks for SVE compatibility with both
the compiler and hardware. If either check fails, the code falls back to
the existing scalar implementation, ensuring fail-safe operation.
Additionally, we leveraged the existing infrastructure to select between
different popcount implementations, avoiding additional complexity.*Algorithm Overview:*
1. For larger inputs, align the buffers to avoid double loads. For smaller
inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete
chunk.
3. Process the last incomplete chunk.
*Our setup:*
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4*Benchmark and Result:*
We have used John Naylor's popcount-test-module [0] for benchmarking and
observed a speed-up of more than 3x for larger buffers. Even for smaller
inputs of size 8 and 32 bytes there aren't any performance degradations
observed.We would like to contribute our above work so that it can be available for
the community to utilize. To do so, we are following the procedure
mentioned in Submitting a Patch - PostgreSQL wiki
<https://wiki.postgresql.org/wiki/Submitting_a_Patch>. *Please find the
attachments for the patch and performance results.*
Please let us know if you have any queries or suggestions.Thanks & Regards,
Susmitha Devanga.
Hi! Is this patch somehow related to [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com ?
[0]: /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
--
Best regards,
Kirill Reshke
Attachments:
image.pngimage/png; name=image.pngDownload
�PNG
IHDR � � _�\ sRGB ��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD 6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P��� u�:@�P�]�}����(�f�C�P��� u�:@��u�'�@ � @��L�#�[D@ � �;�wXp@ � ��@�7��0� @ w ����� @ �'��o|a @ � �@��a� @ � O ��"�@@ � �!�����3@ � 4� ��E��� @ �C �g� @ h<|��! @ � p� �� @ � �x��B � @���A � @����/"� @ ���;,8� @ �@� �_D@ � �;�wXp@ � ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3 \�z5+�������X�677�C=��?EmR,�������� @ �@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55� ��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3��� ��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&�� ��.�^��p��~�k�F�`x��aX��� ?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS� �
j�����8|p��= ���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s�� ~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D ?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[ 'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^ ��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E ?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak ��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF i\��2O�
��@�w���7 ��������d���@�Ox�=@ h�q �q��,�X�� ����r$� ����J�%���h|��c! @���%���n���!�D�&�
6A � @ A � �3 @ � �H ��R�&@ � $ �`p� @ �@ ��X*�@ � �|�� @ h"|K� @ � � ��O��� @ M$��ob�` @ � � 08C � @���M,l� @ �@� >g@ � 4� ����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��
� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@ �%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x�� � J@����'@�Ne��i� 4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@ ]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@ q�8\! �1�l^�tL *��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C �'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �I OM� G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� �� �� 4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p! @ N ��+ 0F���E��Kd�vb5�
E?+~��8���N� ���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C ��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@ �M �� .��� ����Ef����~�)q,?�X)\�1�z����4�. b�B�s�e���}W��h��>E�����/���m���������X~X�! @ N ��+ 0F��
E_�Y&�}����N x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� �� ~'~A
�����-#�S�T3��L��L ������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�! @�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`� �'�t� 0V6N=�����Z�~�/��7m��B h2|�K� �V���~�|,C�"��7����=�1&�A �@� >��+� �"��H��������I���(L�K�P� @�c�+p��K��0�^i��UKV���'m�w8._o�#5@`� �'�|� � 7o�t'N��!��;� �e&{6 C�����;T"� �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O �V��u�<x��������%����>�����}�������?�� @ �@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@ � � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @ � P��x_������}��������BI��Q`�@ � �m��&��=���P�����W�e�O�s@ � �:tZ�kx�/�S>6T&;LaY!p��` � u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P��� u��:����]��������1B! @ � �M���V��qyy����U[.ruu59Y�^ � ��.H�� @ ��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� �� ����������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@ � �I%�������|i������%������z��x�&� Y� @ ��oN������I��/�������\���@ � �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B � ����Y�s�^�������������1[K�� @`4���J�# ����X����| @ ���@�OZ�Nx~�Dd�hi���V��?����
A� @ $���`��9����-�������.�/�M��?@ � �`������?��94m��I����q���[���n>���7���| @ �'����|�p��R����
�������W+K�� @ �F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@ v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@ � ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@ �@� l��~���|V��P-������� �9w��Mw���!4���nee�W"j#7^������� �4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @ ]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������ �1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g����� �K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C �@� h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O�� @
#��5,��w�?�������N�>8�������I
�w��� �@ m'�9\�h�����U�)|�I ��r������5q_����L�� �� |w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O� ��_��`4��[��7|����G�*QB � �'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ� �M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4� :L@U�R��Fc�����J���^����d�����v��4�@ � ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C ���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`� |g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��; eF&��<)�F��+����>6������[���<#�MF� �
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]�� x�~h�kU=�~��O�q����x����2'G� BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@ ������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$ s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @ �������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k I>��@�����=����s������qA�Vo����
����k��Ab� Jx�s���]�^{��}��� 4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z����� �6u�����k�Y~������ �B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d! ����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@ ������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L� ZK@K��MTU�<+���x'���x��I�H��@� l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@� d;�}�����:@ ���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@ �'�E ��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#�� �P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@ ]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���! � |w�R��]�����j��� P
��x�<���'\c�O�8� �p��"��"B\'�W������Y�,�� � a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B @�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B Z�Q�?�����|$s� qn�N
���C`H��8�/��N=8d
� 0.������6nbm������ ~4\��#���6uJ=����A 9^���� �j�6����z�+91p �$��og�a5&��k���?0YB u���j�Rr��3&��U$�S3�V ��7o�d�����N���I>�4^���^D $h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�| j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`� H�k�<��Uh��3�����!�xo;���)��g��04�+�n��� 6]�B �������%��N�1��� �6���.{� c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5 �&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d� ��k{��G�\C���W ��� �c wm���f����dh��7m=��n�\bG�[�h,�� _XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8 h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e� �Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������ ��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@ �h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| �� �F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+� n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h �����^�����@�Z��6V��wT�� x���wJ��A ��6lI<��@���W����@�h^K�� y����[�
S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v�� �e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@�� w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I ��
o�m�V4QU�j�@ �#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%�� j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@� �l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m �*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w; |>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
�� h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x�� ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+����� G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h �R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-� ,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[������� _7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y���� ��z�_>�^�y���������z�C�n�5.���4R��)C m&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L��� *L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?� �����:V�o&����Uc�&�j�z�%�����J�� ���/��_U� b�@#�m�d'���u r� O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?� ���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?� r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������ ����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g ~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~ ]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A �����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>� R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj��� � �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@� ��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;�� �;�v��7w����-z��[�\k���@[ �&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H _#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27 �~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V ] w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2 |����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t�� ��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms��� ��e)n/�&�������X������JW���z�+�D ����VxL���n hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|�� [�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@; ��M���nii�-//��nll��2&�� *����fc����V��h� +���wG�Q��G��%��VF:6���&���s���i;S;����5�������9� �M _P~W�^u���s[[[>��$vl,��an�� ���U�]l���;b������6���!N&6�2�� "�&L�7�����T� /[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C ��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c����� �<�������/��� �� �����K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|�� �>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q �B@�;������R���@� ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$� &� ~2��\@ 5`G� � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"rnss�>|����'�NOO����!�@ � �j �x��u�<x�I�/--�.db~��}nkk� 4�! @ � P-|���E�w�^�������������N�<�s�� @ u@��P�}�����s333n{{��3���� @ � FD ����=zt�����0�]Xp� @ 1|`���2ZS���B�x�� �� u�:@�LR���_2>w���1M`@<
����� u�:@�RF!��|�� x��D��@ � 0�����)����@ � �J �0��d .C � �J _���|g#�P\� @ �� �����l��={�8}%����J�� @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy @ � FJ ?R�D@ � �j ���Il� @ )�H�9 @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)�� �������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD _H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##�� ��w t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�? G�=6��&sHfB X�p�c�O�.�����|�BTx��#�,V�h=��& ���H �~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p�� ��DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q�� �z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M��� ~tl�y�ry��L!� %`��c=�a��Z�^� ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C ]%��������VVV*Gp��-w��a�g�w���^�)������<:���C c$��#|�� &��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B �� �:��@ #0*��^����yW�)��������?����;���FQ7n��M��� FI ?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut� �sEN�! �Q�Z0��&C�r�p]?V]����E�!0>���'e@`B �`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s������� '�8�<�����������T�,�x�������>�2y)�r��� @�@� @`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+ z�Il�)��2,-m�� b�1*�A ���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7��� �E ���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z �K�}����*4�)�]�� �$ ����59� j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy( 1���p'?i��|?e�R����� B���! @������M�< @ �"��oTq` ���
s�
��m�@@��@ ��[��4Y��=��� @�I�M*
l� ���'����f C �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� �'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O����� �����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO�� �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~ l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6�� ��O*Nr���W�F TN _9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}�� w�u xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+�� ~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������ m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/� ����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/� ��������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7�� &>�� p����
�: ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C�� ��> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F`��7��`@�P��� u�:��:p���>���jvq�P��� u�:@�Pv��������J�Z� IEND�B`�image.pngimage/png; name=image.pngDownload
�PNG
IHDR @ �r/ sRGB ��� gAMA ���a pHYs �&�? hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F� �\RL�A$������
��t_^�{���|�>����?���>��}�9�����/?�����o �F��h4�Fkn{����(D���h4�F��h�js� @3 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � }566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l����� � }�o����+v�/_��:u*}u>�����X��+V���G�
e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+� }������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
{-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l �E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-�� �.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~ Y� o�YD�i����Y{�}E��Nt:�
�C=�R,���� �����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^ �f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_ 4HX�/���^ �! � � y 4� @�
B8 ��p @� �! p � �p �! p � �p �! p � �p �! �y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~����� ��p ��~��kW���s��������_�7==��X�":>�
%�N�J?�j��}m���y�����p � p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t���� +�����YM!���h�l��e���4� �# �y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8 �|� 8�H8�2���}����9V�/_�<��!�����k ���l��}���=� � ���� ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>� ����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P � �+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o! @>� ��.�w+R���~`�] +V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d� � �# �y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa �� p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q�� � ,,� ���E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9��� :C8 ��+u�����������=~���i�~�����E�
w��o���� �{� 8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� � ��6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{� �# �y���"�V������Q�B6+d��}��sOG{����v��~�� =��G��>o��G��6�j�� @>� ��m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$� �"����z�aw�4$ @>� ��K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*������� �� ����N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!� �# @��u��~|~��2?��� ��p 5b���]�+u b�#(= �# @��{��N+�����,���]@ �" @���jo�=!Y��N�n����A �s� ���'O&[�nm�hX��p��4��^ �# p � �p �! p � �p �! p � �p �! p � �p �! p � �p �! p ��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?� ��pp���d���s�u�p066������{��I���������'�N�r�H����/ ��
�rE��e����w'+V�h�u?<<</�����>99�������~���� :��pp���������E�j�=�p��###-�������3}���: PDc���]8��{tt����;�����;;��Hw'N��[�8� �"��.�������g�����A?�E8 @����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2 ����p���������"��) �������#�H��;\Q�i�&������.����V��{ Y����/ ��YG�������q���CE���T��EE��g� �� \D8
�����W&�}}c���
���oK�={4}�� @g�N�o\�<��O���.I~���iW�F8 �P0Px��K�O��-���g���s2Y���������=M�:� �C�=s����d��'~9�)$��p�/�a��j" 9�<6�
�
�?��]���.=��!�T5 ���]�
!�kO�}{�����OU� �������C�D����_������S�D8 r�y�.w��#;&������D� ���X���[�
j_��f���<�~�� @�������G�mL�`pt�5����2��� @�����k:�����7��~������" m�.D
���0=�z
~5�`�U� ��!h^(����O�.��p �x��m-����K�w��p ����k[�A�����p d�����u�����?�vQ/� ��C�[��������:" N���%T�)�y @]x�]�\W� ���?l jux�Y� ��77����]��[O� �����_>tg�n= �@����# �&=�G8 Mz*��p x��Td� �4���>� �i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~ �3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g� ��&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~� �i�S�}�
'O�L>���UT���X�=66����3g
�"A����_ @1M|*�������w�?}�������)@�i>4��;q�D����E ��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:� TW����#��.���Tw
�oP���"�qA2 ���z*r���Vp��
���B�n?��~ ���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw�� ��=�W��6G������5a��r��Dy���<33��s{]E����{�W��~� �bOE��My*���� h�S�}� 4Z���g�+}�Y h,��<� �u����`0s�;�w��p ����W������1}�y h$����p �F:���[�A���# ����04���>� ���KZ�A���# �q~}xK0h�S�}� 4OE�# �q�}WK8h�S�}� 4��~��>�G8 @��T�l� 4
OE�F8 @c�T�|� 4OE�G8 @c�T�|� 4OE�G8 @#�T�� h���� ��S��# ��x*r1� �OE.�p ������ Pk<�8� j��"G8 @��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd�� �t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~ 4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7��� h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}���� �T<�3�
��p`�������\466�N�9q�D�nt��B��S� @��T���kb���������/��_�6O�h4�F�U����i �y���n����O8 ��y�F��h4�����������1�m���X� �V P<�;���� �^x*rw�e��i:�� �Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7��� h*����F���oOG�[xZ����+��}�SSS���F�_ M�S����p ������# �Vx*r� �
���� j��c�-�@GP� ���;�l �� PYOE���P� �}*��K�wQ� ��S�{G8 @-����� (�p ���|*��i(����������Dr���� 4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^ @sE����x�.�*}8K����������s���������v�_�z5G ��"�O�����l�r����:�p�W�;��|�����S�o 4OE��J���H����W^I8 h���]�x*rwJ�4������������� 4�o�?�S�����@v���.>^�b���?�H��a ����[�OE�^����l��5Y�fM�}����G
ta2� 4OE���� �����%�T�� PI�?~�%�T���>���$k���{�Y���) @3=���-���"������P��q����;�hiw�y'w+ h��[��x*roJ�9��) `x*�`T"��K 9��]-���"����@���x� �����Q�p��n��Vwj��c�Z�����. �<ypJ�$d�V �S������V�l�2�V ��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g� ���"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g� ���"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_ u�S����@���nE�v�Z�� �wVwz���3m����� @�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_ u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<��� ����0 tQ�6�~8��E��� @��T��A8��w�@���%�K���g� ���"/�A�����[�.|����4��+��JV��g� ���"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~ TOE^8� 'O�\��� `��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R����� ���<rWK0xv�]����J���� P'o��%<�������R��=�cO @��T��W�p�[v�z������� �9x*��+u8���bw)���� ���"/�R���HO%����w+ �'����J �L<yq P:<yq�.�������$9y�d�Bdk\� P?<yq�*���"c.H h���xJd��}��m���� �y�OE�xY�.�t� ��S�� ���T���0��D8 @i���|b����4� J#�T����K��� P��"����A�T8�3x� @=�T��W�p����X�b�s
�����k��� ���=�[�M��B(}88t��
_����+���=IYHM� @����������Q�p`OL���l-�p
�W��!h ��T����I��B(u8���uGv��pJ,�iF �.��\� ,:��\�2666w����#�9 �6=9j<y��>(�����Y�,[�����������K T�.:�OE^��;m���k�{���T� ��c������8*SLt�b��]���;�nhh�%��F��/ �2��x*ryr�)M*�����LLL�����������{]��_,]��g� ���"�K��A��<l�,�u1t��;w�������`a!�H7��~ ��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/ �*���a8��������h�>z��B�=c!����-U����'�v���� @��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9� �8��\N���b������{������ (3��\N�V�j�B��(����;��D��������_ e�S����� ���`��4���?�'�.�P�"�H?� PF<��*�nEFa[�~��iL�c�m���� ���T�OMM��^P��g� ���"�W�������� �&��\^��C�����kA�V ������U�p`���3��y� ��S�����@w:x���8�����[w T�/��%<����],�R� ����.o �}ss�.� ��"�_i�A�S�b��� ���"�_i�A���c�� ���"�_i�G ���"WCi� ���"WCi���V4>>�� ������@8 ���T�j `�x*ru�.l��)z�qV��d �r����Q�p�]i^�V� ��S���t���{�I�;V�?~<� ���"WK��� �OE�� ��"WK������������ ��x*r��& �^x*r� 0u|*������{����6�������=�%?{�H�n� 0u{*��O>��b���Y�������������Y ���=Y�@A�%��i�f�P2�����������$���F���&T� }W��"�T�?~�_8��d��/�k
Kn}�����&� �.�Td�*���_q���;�[���/��6���C�2� �*����?M�����?�
!�k���u����~�� ���=��-�$/��%�@����s�����~�� ���S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g� R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#�� �B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n ;w�t�MNN��$���t�b��d||��]��g� Z���c���V���N����������(�����o�S�W'-�� ����?�;w.i ��g��i��^�g� C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_ -�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+ M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?� ����T�5��
�(Y'7� ���������� ��L @S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/ ����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�� ���=��%T���*��=��k_|�+iW�B8 @ON���%�����f���:��y �I����;e=�����K�j&� :�[��j����=7&�zUK8(�S�O=*���Ko{o�Us �]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;� �
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d�� P���TGb����k��<����S�����D��nc���=iW0� �g�$��w��d��w��Z<���Z4��=�" ��3����|d�D4XS�X����=�XGG8 @[zn��?��.<v�{��@�_���9����O.<]G���3]�l� �:��Qw���~k��G�mL�`pt�5����2�������r���A8 @��?�������(����/t�`�XOG��
���X0�3x�Y{� D�5���!�|�m��'���q���x0���S��������L0(�p �y~�����8
�����=��L��~�S�x�qq� ������+
�t������]�C���_1�:�~�!� �v���f�9=�v]#_�t4�6�<��s� �^_����t�Q�|���d=� �# 4�
�����k
e���+���s_�:E8 h(�"�S�b�@M��T��������o����+t�p �@��X�B��.J���e3����O?^s��iW�� �atR��4
��x}��=���-��]�� ������g�af�`�����p � E�/8{hw�u�����O�;x�Y� j���?LN��4
�fnyG���O����=��?t�����iW�� @��j�����\�����i��3t����@%��d�� �����!�=��r��3�����)��p P3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#�� h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#�� h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~ ��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_ �t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g� @���]Cj��@� �]�����3�~�p������#:��/�����A?� �Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[� m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?� ����Gs�/8~�������]���o���t�S{����9��o�Q�~�~��� �0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/ P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#�� �&���>����3�U��=�8�!g<�� %���}W4�U�����_1��h0�������� %R��D�*�z���q�� �D��t�Q��/=�,���z���� `�������@`M��j��~�# <��| �H��T�X P�)F:���t-A,��]���! ,]T���c�@M%���*���b�@w+�]�PN� �E����v��P�V����Wz���s��" ,��^_`���X0P���Qn� �R�����.>d���Ow���m#���nN��s_r�w�g>�������D� �G��Xwi4����������]��N
z��k[�������� �j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT� `����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8 8y���@���/���i��`w!�y�pK0������y������
" �@�������%x��m���Gks}��� ��������X0���5�$o����O�J ]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O�� @T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p �!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������! �kt��.t�owE���h ��z�g���y�{��b���*����K7����������t�1
����y�;��j" T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]� �h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B� ��p ��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f" ����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
� �4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,� P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P� ������VQ�=�����g���v���������B88<:��*�������0���������g����:���
@� �/tj���B�� ?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7�� t>�N��)=�����NA��p z�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8� ����?s����w����{��������vC��w%y��O&�6\-�����x�
�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{� 0(������I��]�,]������djj*} �����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R ��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?� b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q� ���?W��P��|��0
���2�?������}��p��� P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={ ��A�X8��>�������������&7����F��lU[/����6�~q�� ��+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(�� ��pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e���� ��l (3�J���&7��Y���d �� �p �! p � �p �! p � �p �! pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u�� ��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>� Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>���� u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k�� ����xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX ��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W � �NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k
u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1� �#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p ,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/�� X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE�� ���k}�/����O�~v�a��k�r�k^ �Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ���� ����k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z� �0`��j��BR+��nDE
� �M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p �0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n����� `�@���:��g{_����p ��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS ��*0�1���4F��B9��@� 7.U�B��!�i�� ��g����p�8��)�8hW�|����R�y�B��c�6�j
Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-�� @_��DM+�:�u ����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q� �n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8 ���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=� @��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p �g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8 ���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�# �QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i����� Y6����Vk��yG4N�#(�F8 ��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l� �<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V� �<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p �����mDULT�n&v�%+���
)M
v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H� �<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s� &<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s� ��h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P� ��OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;� j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p @�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&� Pzv���EB�T�
y*���#��ru[�` ��VM��z�N�� ����GV@P�X�k*�X ��b���~T��B1
9���,��4���p *+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p�� T��T�V7Y����y�v�@�H�N��JudD���������?�9�?� �<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8 �f�5!h/�����B����;�N��R��l;������P� T���&�s���]-�a`e�p� R0��X�8 Xp:%H��� ���r���;R��# �4tm�Q(�u\c�0 (
�5!,<� JC�)� ��p�[�� ��p@0X<� ����@0X<� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� ���;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz �� �&Y�����~���+9{�l�j�����C��5k��~���+�@8 PE� ��A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^ P�
V��! �u\@8 PE� � +F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q � PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i����������� @8 ��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q � ����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N���� � �DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p 5�U���T:����h8���[��o�
���A�����p���h���Kl\ � jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\ � j��Q�*bw��;�����v�����~�zwg�� �4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�% �&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e� �,�T$ X(� J�N�iw4 �p �"R(���v�Q�4- X(� �!r?�y �n 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� �s���ddd$��{w�J����%����_@����D8 h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T� !� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p ���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU ,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d� ,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O[m��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q ����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u� �A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��" ����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p ��v�Wty(:��[Fb����l��zi������E8 P9*�
���B%h(&Vv���B6�S�� *G{����������:�����^{���aa�{������D8 PI:�"<���{��=�A5���C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 ����F��h4����p����4�F��h4�i�G?��p9��M(5M IEND�B`�Hi Kirill,
This work has been conducted independently and is not connected to /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com.
Our patch uses the existing infrastructure, i.e. the "choose_popcount_functions" method, to determine the correct popcount implementation based on the architecture, thereby requiring fewer code changes. The patch also includes implementations for popcount32, popcount64 and popcount masked. We'd be happy to discuss any potential overlaps and collaborate further to ensure the best solution is integrated.
Looking forward to your feedback!
Thanks & regards,
Susmitha Devanga.
________________________________
From: Kirill Reshke <reshkekirill@gmail.com>
Sent: Friday, December 6, 2024 12:52
To: Susmitha, Devanga <Devanga.Susmitha@fujitsu.com>
Cc: pgsql-hackers@postgresql.org <pgsql-hackers@postgresql.org>; Hajela, Ragesh <Ragesh.Hajela@fujitsu.com>; Bhattacharya, Chiranmoy <Chiranmoy.Bhattacharya@fujitsu.com>; M A, Rajat <Rajat.Ma@fujitsu.com>
Subject: Re: Popcount optimization using SVE for ARM
On Fri, 6 Dec 2024 at 10:54, Devanga.Susmitha@fujitsu.com<mailto:Devanga.Susmitha@fujitsu.com> <Devanga.Susmitha@fujitsu.com<mailto:Devanga.Susmitha@fujitsu.com>> wrote:
Hello, This email is to discuss the contribution of the speed-up popcount and popcount mask feature we have developed for the ARM architecture using SVE intrinsics.
The current method for popcount on ARM relies on compiler intrinsics or C code, which processes data in a scalar fashion, handling one integer at a time. By leveraging SVE intrinsics for popcount, the execution can process multiple integers simultaneously, depending on the vector length, thereby significantly enhancing the performance of the functionality.
We have designed this feature to ensure compatibility and robustness. It includes compile-time and runtime checks for SVE compatibility with both the compiler and hardware. If either check fails, the code falls back to the existing scalar implementation, ensuring fail-safe operation. Additionally, we leveraged the existing infrastructure to select between different popcount implementations, avoiding additional complexity.
Algorithm Overview:
1. For larger inputs, align the buffers to avoid double loads. For smaller inputs alignment is not necessary and might even degrade the performance.
2. Process the aligned buffer chunk by chunk till the last incomplete chunk.
3. Process the last incomplete chunk.
Our setup:
Machine: AWS EC2 c7g.8xlarge - 32vcpu, 64gb RAM
OS : Ubuntu 22.04.5 LTS
GCC: 11.4
Benchmark and Result:
We have used John Naylor's popcount-test-module [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com for benchmarking and observed a speed-up of more than 3x for larger buffers. Even for smaller inputs of size 8 and 32 bytes there aren't any performance degradations observed.
[cid:ii_1939ad8bcdacb971f161] [cid:ii_1939ad8bcdacb971f162]
We would like to contribute our above work so that it can be available for the community to utilize. To do so, we are following the procedure mentioned in Submitting a Patch - PostgreSQL wiki<https://wiki.postgresql.org/wiki/Submitting_a_Patch>. Please find the attachments for the patch and performance results.
Please let us know if you have any queries or suggestions.
Thanks & Regards,
Susmitha Devanga.
Hi! Is this patch somehow related to [0]/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com ?
[0]: /messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
--
Best regards,
Kirill Reshke
Attachments:
image.pngimage/png; name=image.pngDownload
�PNG
IHDR � � _�\ sRGB ��� IDATx����^�Y��?c�Z��6@
��I����(�rQS���b�bG�6+X�F��@�I����`�����B.'7K�P�AD 6"��@����EH�m;=��;m�m��k8[�k?�N�>�����}�{�{?o�[�������s�����w]�v���k�_P��� u�:@�P�]�}����(�f�C�P��� u�:@��u�'�@ � @��L�#�[D@ � �;�wXp@ � ��@�7��0� @ w ����� @ �'��o|a @ � �@��a� @ � O ��"�@@ � �!�����3@ � 4� ��E��� @ �C �g� @ h<|��! @ � p� �� @ � �x��B � @���A � @����/"� @ ���;,8� @ �@� �_D@ � �;�wXp@ � ��@�7���1paa������������������nnn.�s���]�}�K��;w�������[����Y��?�w��7;;�]W\�>|��?�moo�����{��ew����*���w���e�����u��c�������1H�*��/�C��(+�A�$L3 \�z5+�������X�677�C=��?EmR,�������� @ �@��K�����D���'��X\\�����s[[[Q?����K����4H������p6������6D
s���WiH����J�Jw��R����ncc��d+�K�K��e���T�DR+���,������#�<Rk�����1��0M��>���\�F�z ���<�T�!;55� ��������7>����^|?��P����>zp�W����������I���*��>q�DOX�w*�Q�����-+����^*��g����z�������3��� ��.Z�y�������f��������,�5B�r�@��Q��*��cC^�x��l�L���?�b�Q�Y��!*������/�,|�?
����!%��������Sy�o�o�CQ^���^���m����&�� ��.�^��p��~�k�F�`x��aX��� ?j�Qs���1�db��fbJt�u-�zWm�|��f��"��)��4V/����������&��-vn��l��k�[S,V�y/eD~S8cG1�Q��2�����|��2Ka,n��#@���=)�#��/�����F�~���=<c�M��P6����T:&� ���k��$�D���>�k����^:�{~~>v��Q���O����'�����C���/|�%�g�d_�M��M���L���3���5)]
Q�M���]��/�w?�>��vc����(���uAc���Y�v�������T}��O�6��������c�m��m�)���f��N�:�/��T�<{S�����}�>+S���U���)��g��7���3Une�k��)W�.�!0j�Qs��,j��]��u��T��4������r���p��_���
��
���td��;���%���5qc/7w��]���4t-,7����+ai)}��Wv����!�+�������8�o�O�O���GQ���m�l���0�>�"�|&~8��O�8�a4h����,�����+O&�%R���/g�"��W�|���_WC���A���I���,6���~��l����)YJ�(|��w?��?�����W��A�M��y��-������wHS��]�C`���&<��S��5�a��LM��5���2��/x�]�����S���6<�Me�R6��7���&����Xz�`���o/)�R��Q�_������T���^2i��c�F�>Z��^l�|���Q�>��S��K�H���=�T�(���_g��+L��1V]�y1���0/���_�z�����g�9Z=�L��r�|��{�O]��nX7��R����������py�}[eSX���u-���5���U���X]��-c0��E���-d�����l�r��r�@�uPS� �
j�����8|p��= ���GQ��p&p����F��`6�RG{0�yL��s��$���$~���~uWT1�~��XV&L�X�������_��ooh��oaS���o��q���-���S���]�r�-//�^�<�x�������l����
�nG�_��c������k�}��o{X���W��f����m����"?)�EaS��x���p�!l�|{buF�Sa�J7��������k��������O^�����6�'�8��8m��/z0[��7j�������
��>x����ys��Z_��z��8,�������}���w�L�N��l�yZf[�^�]�R,����1��Me��-~��^������������x�-#K#V��N^�M������=�<��#�rH��i��������S��_��Ea��5����R�������%v������a�M��O�������}��6�����ZX�7��K`D��5|~��{�cA_ �[������;�]��p�d�Q
�[Zy~M(����~��s���4����C_M�����c��TVF�����1;�,�$,+��T^S�~XK?���'<W�������g[���~�����q�[F�Xc���L�ky-��M{����-����WVVB?v>6�3���{��5���`N��(l*\��~������@>����(���y{��+�?�>?�Fk��Z?����s�� ~����5>��I&Y���7|�����!���'O|��ai�a[$~�oL������'��[IA���g��~��S�VF�D��p��������6�����iq������n�������N(.���,��6�!/�2ed����:/���k���_��2�-�y�[]���M1�������~�A����}���M����Se������J>���{����O��4,/����0��Wz)��|�6Z�X[f������s?-�n��_^'G@�j�ukl��$�;��[xk|�w�_]��ACl�5���*_1�bq��
�?��F�w�����k<���R���@�I�=�!f<��1�V�5�s�������SyM��,�X>}�s�[Y��:�3L�a������l_?U�k����������k�r�'m?�~���+s^&�V��,6e���4�����=�j'Ry)
�
g����}�������">J/�w�7�A�t{��+�)�~^}~~yX�X[f�R����O�ogt^U���9D ?���o���$�;������������5��'O����C@�
��4X����/2?��|�~��l_2�F8���0\o�fK�������a�gG��b�R�eo*�)w������"7���WJXe�3�U�7[ 'fg?eTu�I;��(�p)�2y����2aI��K�7!GK�L������M���cG�>K�/��(�6�wE���co{���������ha�������>�u�7��K`�[��z�Y�&c��� ����j�����@��i�A�]7�t�F?f��O�����Z8����/���M)��C�f?n=8�ohChc�+�TX����O=};ci+|,~?\�����o�Gy����_+*��a��'��t�x�����]+�G��Es����4�f�Y�-U���
�M�w��9L�(l*�wx��SJH�����<�i���:]�;��T>,n-�������ci��x��9��8 ��Ii��VQ�c
T�7��G���O��FV�6yI=�L��L����zP�_-}��O�������������x��f�D��<���V�zQ:>�T9X���Ed[*}�3�E��-�Qi��F,y��X9��Z����G��8j���X:���M{���&-1y���X���L���l,��n>�!�SiZz�����E����[��T��(v��K��8��h�=J/v���q�u�*{�8���fXn��XX��Wvy�,}�'�8�� m���j�,Y�a�=D�a�x�C\��~��o��i(�������{+��i���[���9~��d��%l�GQ��?��{���>p�N�m/:y��g��a^x���
:���)����0��?1P�*���m��~�A�-���/'�e�dcLx[d�^F���tb~lC���T���m���?�S�{�lC�,L�V?9�������Q���{��L����b�[�.X���3�i��8���d����h�k���8(�p8b����t}�1��+^�*7��j�tm�r����: ���\c~C�o�2�o���vx��M
���u���+�����s��!9����!p���0h�okpSq�{���H��jL����x�L��#G�<�^ ��2����[q�q21;|;�^Xd�_>�cq���So��=6���;���`�"V'T�|�q
����h�s?����c���E���-��b���S-��X&�X�E������)��*;�C*�/��Y��q
�T=-����X��=���y������X�f����mS,����3�������zL}�J+f�������l���A��w��te�}cu^��^�u�r��lR�ym�^y������E ?.�#H�opR
��5`j��I�aY�����U����c
�5������I������F�������w���R
����*^{!01ak ��Si��=�R~B;Ri�XH\��vf_��T��Cb(U�~O��[�1eC^�����c����Qy��cV�����a�e�$�[�[Ki�y�7��V����y�C�|L,�������u����D������(M����KX/B�R�������]���blab�a��a�
��������~����������e�Z�����r�x9B��:(� @�-��;NF i\��2O�
��@�w���7 ��������d���@�Ox�=@ h�q �q��,�X�� ����r$� ����J�%���h|��c! @���%���n���!�D�&�
6A � @ A � �3 @ � �H ��R�&@ � $ �`p� @ �@ ��X*�@ � �|�� @ h"|K� @ � � ��O��� @ M$��ob�` @ � � 08C � @���M,l� @ �@� >g@ � 4� ����M�8���o���9�g���w�������nmm������9s�����`|��aw��y���]��q���qLMM�*����,���L��
� ��@�w���&�D�H�������c���7������(k���������3��������JFy����8�#�<���$^.@ �%�����E@`|���]&lnn:�K �7~eee����^���^�[�n�������>��n�>�3ny6�����T>�����X���s� �|��
�@�H��_��b
�:�)�[���7o�/|�����e�����{�1?��������{_�������?y���x�� � J@����'@�Ne��i� 4�[$fS��z��x1Q�o����9r�il{8D����������
��O�s@ ]"���Ri�W��@Y�'F/_���P�"��&h�a(�����cL�jX�D��OY�]v---�����4?���o��d������Q���{nv�l���k���a/8�w����/"�u@ q�8\! �1�l^�tL *��K4J��P6�,q��8q�'���J����������P�J���c����|&���P���WX�.��
�?]3�-��0���Ym�X��q��D��=�!5~C �'�����U@`|a��)ahbY�5�\����ae��mL�*�Dq���DmJ���k��x��+]����+�X^��������H�.��[�=u�T)!o���������#tO��; �I OM� G�}1��B#j=����e�Dh(������r��[^^�%t��)MK/&R�|Z�w����kJL�q�q[�&����&�������{�r���)�dD\� �� �� 4��/>M\���P71�'0M�*>_�Z�� NA�p)�m�7�"�8M��������6�����C��H��$Z��6�
��X^�������1d�r�p! @ N ��+ 0F���E��Kd�vb5�
E?+~��8���N� ���HH�M1����L����~>,^�{��G�_�Ay�����s�y�����P�[��{W�;%�S�ax~C ��N��<�4��/`��O3�� ^q(][��^t�1���,�6�=��oaCA��?%�M��v���a��G���5�X^|&�����\,���s@ �M �� .��� ����Ef����~�)q,?�X)\�1�z����4�. b�B�s�e���}W��h��>E�����/���m���������X~X�! @ N ��+ 0F��
E_�Y&�}����N x?��?��SI�m�6/M[�F�]L���!.��1�n��������h�D�B�������;�'�-\x� b���7 �r��8����/`��&�}���������=���4S���>}:4%�;/=d����������kL�+�e���o�R��n�� �� ~'~A
�����-#�S�T3��L��L ������x��]������~����_Q^���kc)?�G�^���
}�G�Hx[�����`y0[��1�! @�Mxj �8y��X��h��,1Ai�$l�a-�h
{��Zjb�]W���v�������5fs,m�|*���c���"�_��
�1[��*m�����_���O_�~���@�?��x����/`S�/e���0���H�H��G�MF��T8�W�������������[[[=ML+^�������#���'�}fs��Xx p��o���[���e����b�� ��x�qb�|�X�x8� �5���8��@��4&��d�����V�)Z�]�J���L8�����K�|����41mB������Y6�/�el���a^���R���v��XJ?�N�V����/���2���
@`� �'�t� 0V6N=�����Z�~�/��7m��B h2|�K� �V���~�|,C�"��7����=�1&�A �@� >��+� �"��H��������I���(L�K�P� @�c�+p��K��0�^i��UKV���'m�w8._o�#5@`� �'�|� � 7o�t'N��!��;� �e&{6 C�����;T"� �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O ��2$� @ "���Pa�U@ � ��@���� @ �@� �;T�d� @����/Cr @ � �!�6Y� @ h?|���@ � t� �C�MV! @ � �O �V��u�<x��������%����>�����}�������?�� @ �@�oQ^XX��y(�M�K�/--�.db~��}nkk��2"
@ � � ��sW��l�X IDAT^u{��u����z��k+++=h���n�������=7N @ � P��x_������}��������BI��Q`�@ � �m��&��=���P�����W�e�O�s@ � �:tZ�kx�/�S>6T&;LaY!p��` � u�:@�P&��Sa��]v��8i�6t���s��!�i0�>�H]�P��� u��:����]��������1B! @ � �M���V��qyy����U[.ruu59Y�^ � ��.H�� @ ��N
x����L������g�n��� 4�@'|�P�!4�gc��g���R��u�o�n��,?�^��1�������r�_~�^#H
� �� ����������j���kkk^HN�$�}���������������w���cu�BZ� @�v�����0$�%��?����F��c��z��@ � �I%�������|i������%������z��x�&� Y� @ ��oN������I��/�������\���@ � �I$@�$������'�/%��?�c��c��P
d� ��@�w��(��,�[J����w�����-��B � ����Y�s�^�������������1[K�� @`4���J�# ����X����| @ ���@�OZ�Nx~�Dd�hi���V��?����
A� @ $���`��9����-�������.�/�M��?@ � �`������?��94m��I����q���[���n>���7���| @ �'����|�p��R����
�������W+K�� @ �F���Q��v�V�A o����~��>b�+ @����=��i��E7;;�����}������gw��������������s;���9�}��[��OF��|���8�h�� �;������uV�/..f�����nyy9����gn'O���������R����������y�1|�������O���^j��X@ v<������u��;x��;z��.dnff�moog��^���������v������.�n�Y��z�%��@ � ����?������������K'|���������a/��TX��K@c�5l&�M��i�
@ �@� l��~���|V��P-������� �9w��Mw���!4���nee�W"j#7^������� �4��&��|��'���~��vc @`���r��3�����3>��6�F�|�������;J�+�����_����X����HZB����K�x5`| @ ]!�a�Z�����~g��JW55���~�\�|9[q�/�~�����+_��x+����\����'�X���+�Go���J�#u�:@�$���������|�B~�#?����;������ �1�k���-��������z���������X����s�O����t���q������P����o=�B�����������o|�=���,���G��!��n�����w��&��D���Y��J_EAG�4��o��s��g����� �K [^�����>�����4�@'��{��a���m����jX�����B�@�w�\+��kkA�C �@� h��k�;�|������o���Y���tR�+���i�m�����X��?vb���([:+�k���g���(gr@��$�_>��\��E$����@g������nvv6����!��~�����������S�XZH��s_In�$��O�� @
#��5,��w�?�������N�>8�������I
�w��� �@ m'�9\�h�����U�)|�I ��r������5q_����L�� �� |w�R�3�D�?}���"��@��?�7��z.rwm���&��M� �qy��I���J�O� ��_��`4��[��7|����G�*QB � �'��0EU��by���65��%�]c' ���r����{1a �N�Jj��>����i2+��"�����$7# ��v�z<��t�� �\E�L�zF��{.��^D����0�N���z3������S��AZ� �M@���-����:��L.���-9��@�z�Z~�
�*Nt� ���V��]������6�3���]���b��)�pj�!��+Nt� ��D����������������HA�����=5aH��][�cML� �����}w'�r���>%��)�n�7�������vmU/3�+M4� :L@U�R��Fc�����J���^����d�����v��4�@ � ���M����d9��
e���'����7~_R������$D,� �y�&H�k'�5;S�����x�����u{����SSS�����@mnn�����MOO����]�p�&����CjTc�W�����U�\C ���:���'z�h"����m������ ?~��[^^���������'{����[����N�}ii�]�p!����s[[[=�@@��1o
.>QG @ E@��MTehf�^��;)�M�=ztW�/,,�������]����w�[YY��]__w���w���]���^{�����XFD|���� %���P'�&��Lq]g;)�S�}��m777�L��o_�+l�=/��"�����x�\�������@���/{o���g���?N�O
`������7o�+W�8
��P�m/��gM�����o����O�������@`� |g����"���*?| #�yo"]Y5T����=Nv-6TFCk��V���E�������f��Y�}�{���d��; eF&��<)�F��+����>6������[���<#�MF� �
O�n�e'����._���m�!4���q�n������v�������w�>?O=!
�8�i�FQ�U�;{�}���?���u�>��\� �{�]�� x�~h�kU=�~��O�q����x����2'G� BZAf��?�|h&�����"�I���]+� ]�p�s��%'�2��hq,K@�������@ ������Z�=��#w���*e�W���Q'��������F�=�V,#i$8�C@>�5�Zi� L�����)��y�\�����$ s���6r����Xg#�~��c$�%�S������ ��P;����m���W�����7�X>V��Z�Q;���K�P�x�������������;{����677��W�G_�����]�p�@Yy
������$�@�Y$���LJ��@gM���m��B�����#���m������h�:����_|<�;���
��V��t��%(���a5| 0,�Vx��b��6�T����l��p��a�u���Tc�][�{��� @ �������)w
���V>��@��M8�^v��8p`Go<�9VQ�c\�������b�*�� PL��s_qZ2%���k I>��@�����=����s������qA�Vo����
����k��Ab� Jx�s���]�^{��}��� 4^���-�h��*1����A�..�a3�^���$H�@>�Q����Z�Zq�����:8��xe��|��o�%�����!!0~��z����� �6u�����k�Y~������ �B���������C����=(�}�dV����p24����K��h�1>� P/��y�x��]��LT��\��Z+|W�|w���v�[���f�[7�9 P?-&���yCf^{���
#��@�w���x���d��~��6d! ����.�V
���
4����m�����N��#�YF����KP�N��G�����D�@ ������
gT�������}r�{5/�m���c���G}t����s����!4��v�K�x�\���
,4L� ZK@K��MTU�<+���x'���x��I�H��@� l����������\;�; P�?z����&�H�DUv���6qC�5�vb&���@� d;�}�����:@ ���Dy�D��cm���b/�����7���/_��>��-�!:SSS����;0�Z�6��?�R�?j"������[���pMA2����0������=1�=i���8��z�i��7v}766�.�!/1.�����������������z~���������@���������@ �'�E ��Wj���u����9r�~���~O����~W����333;&���%�����b$�.��'o�V�$�b� ��@Y����������������@�����{�V�
M��X
���������!1�����#�#�� �P��������k,<�a�Y�4^�����q���/���������+_�-����0���I;��@ ]'���ZE&o��V����zMi~�[#���0j����$�5L����nuu�]�~�'��Z��
��5�����F���������w��68_�&����/��'�K��N��������N�NV^F�:`��]v2�D��S"z���v]�x1��(�`�t���5;�P����{��~84��V�x �p��o��[����7LM�76p�P��:����O}0�6�7^�+��>"�GRv��
��7Z�onnf��h���V���Y/{(�}?���h\���Jx��+��ZM+���X���! � |w�R��]�����j��� P
��x�<���'\c�O�8� �p��"��"B\'�W������Y�,�� � a�7�]�| �F���W�\���nk��G
q������MX��E�M���y�Ov�+q<C���O�][%�����B @�vZ��������,���/��@��(��W_��K��:u*�r`�4i��Mb��[����:
;���p��
�4�� �I!���g��eL�������v���Io����p�s��m?s������-#�e%��?���C�[C@���m�����%�B Z�Q�?�����|$s� qn�N
���C`H��8�/��N=8d
� 0.������6nbm������ ~4\��#���6uJ=����A 9^���� �j�6����z�+91p �$��og�a5&��k���?0YB u���j�Rr��3&��U$�S3�V ��7o�d�����N���I>�4^���^D $h-�����V�R�<L2�Vx[�1�hj�]~���A����_:�| j�M~�@�)4�Oc�S�]��D���v��@�����%{�������?J��
�����S�����b����$vB`� H�k�<��Uh��3�����!�xo;���)��g��04�+�n��� 6]�B �������%��N�1��� �6���.{� c/�@ ��51�4���k��!�L�����y��ZW;���@�4^��@���G�V6������][5f� �:|w�Rn{$Q�&tu�i4�@+����{������gY���5 �&��z��vm��5| ��@�*Y���*��]&�xoc�m����Uh�\��{���W�:�| TM@Ca�&�f���{�����/��
��+W���,//g��B������&���6|�������"�8������IN�������x�@��(���������z�����a:a�������vkkk�7~C`��v���2Mc���+r2�Z uH��W���k-k��
��W�f�]�|ii)��������ol�D��]�p!��iA���Jh���������S%���#���4�=����6n��&�H�o���������7n���766v�,��6����q���=�1w���M�VVVz�lgX���!�d� ��k{��G�\C���W ��� �c wm���f����dh��7m=��n�\bG�[�h,�� _XXp&���m����:GL"m��z�j#vm��R'O���&�~��{�� ���0Q�Z��6q'�E�������7'�H,�5�5�&�ck�K����0q��u�@����~:���6|�z�sL�0 P��:6�I��
a��r,��F
�q����1�&�c=�Z��WI��8 h�Lj�'=�Y)b��C�hMT�X�p���[c��������@��U6����_��%��8^s0h��������g�O>DY^kGYr�QN��+_^�m+$����]�r�6�6cb��(^����NF�H��Toz(�e� �Q�1�y���<{�����b�W-{(�@��R��*���m}�/>�^�~W��xi����������������uR�k���'�Uf��=��o8&�<���:Gt�������������� ���s������ ��nhB+@`0��&��%"C�,#�7v���Ujvm��L"���^*���%$�@ �h��������"��m�$���n���w}-
[����B����N�=�H��M>�k�N^�����k�����| �� �F�k�����������������V_$l������f+�(bm,�t������T_��L@K����o=���u���u�������7y��
�����{g���@+� n���~����{��D�����]l�i���(C�;�O�7|��n6|*?h �����^�����@�Z��6V��wT�� x���wJ��A ��6lI<��@���W����@�h^K�� y����[�
S&�@��-�hCZb���LT����@�kkb��l���=��b>�I@��5$.�m�k�&>��� �G���!�y�}K����=��v�� �e���^�}���o�w7U[V���N�������&����������au7h��B�?��s�\�h6�������i���jS�.G��������C���u��0E��ONQ�����y���4�@�� w���oZ3��&�@+��k������R��Z���'�r���"�Io�,�����z���u�
��������N=��g%�����_ou>1m$��F���&�'n>�>�����N@�<o�����evY��hH<���&�I ��
o�m�V4QU�j�@ �#�
��j;���e$�W�H��������V��o�A���\
eK��r�\^��K(TI���V��X?v��{��Gw}{�1���]%�� j �^�TO�6|�Z�| ����jZ2%�u���3>�@34^��FN�k3�a Pm
���]�����"M<���K)�.wm���t����x��u\�H
�Im�$�u�cO��%���^>��\��%^����:B��K��^����(7k�x�b�<e���_���������Vl,k�LL�l���o_��
%����?_�u���,?�P�1h���8��z�I`��qc�wccc��T�'N���-��pKKKnyyy�w�t2�@� �l���A������1���
�Q�<UgLH�A�^�����z��� ��\�z5�O;��'];����
�G�D���h�V�����'O�&��&��'�_{��Q�A��@/�m �*W��y��[]]��0������a��
*Q@�y�����~h�����Lj��l��}w; |>�@;4^���
M��_\\t���n~~������;{�l;J+!�by�ch�'
�� h(�v8��ue�^��4B�@��Z#�G9a�H�k������������|��~�R�B�x�� ax�3�����{������\����������'���w'������^��Or�p�PF\��Ea����N����z�G�
M���`�ti���Z������#"�:�/X�k IDAT|~�Il�z�q������4�?������H.W.��?���/v���/��//r�p�Pj������4Z�onnf��h�J����<o~��^*4.ee%��o@`��Sj�;�k'I>�:��P8Q�s��C���B�[O������+����� G�������n�)�����g:B�lB`7���t�p�*;����H��^��\�re����z�����=0���O���8�N30rB``��)�k���k��h �R�������]gm��0fC B��>bseN����3g�d��k��~�c�5��&�����H3����e�� 0��
�rvme-� ,�gI�[��jU��N=����EV
�����xw�3�.��<Cd}}k�}��g������?�-���?u����!b$h�:-�M���qt�����]vv������<�|��@\�@��z_}��>c�;�G ������%��?�.w�����m����ag| �/�g����_����������aw�����_����H�I�kkk��j����Us�������m��5�}����2�!&�u�:L\N%�U��?��u����v���^�z�e�����dH�]��{?��;����^y>�%�8o��mbj�X�[�K@b%0�[������� _7
��8������k������k��6���.��IO�f~��wE�{�y������i����/�S�Ne<�������f@`'m���\��2�o'/~5��kg~?Y���� ��z�_>�^�y���������z�C�n�5.���4R��)C m&�hBqc��r�M�ks�}2hl�&�j��&]k(��-��b��V�����,B���K�S����O����~�)%���?����/�a*"�(o�eN�<YQ���������s
/`R_�jD����s�s�E�s}%��M�M��;�z{���3�����_��$)���V����������O��{�'~��X�w������,|� L��� *L��I�����>ec���&�r$�������`H�k�V(��]R�k��z��@�'p���N�a4�����/���X�����5������Ir^3|��I���z�m8B(����O��CS�����d�[�?� �����:V�o&����Uc�&�j�z�%�����J�� ���/��_U� b�@#�m�d'���u r� O@=�Z;%�����EX��Z�(���g����c��-�z2w�,hhLn�~g��j��������6S���U����s�b��?�_�g�<�+�d�%�)�����~���]*8�
�#���z��I!��-�L�7���cx���?� ���\�Y��
�n�a7~�^~���������0����x���G�a�������l}{+�U��I���G�������~��?� r���W���_��
����P&�%�e#��h����'r7n�
���FN��D������ ����H����������6Xy���!Z�I_�s}��A6W�dX�s�K�z��g ~>�'�����3>�
�Q�����T��;���VZmF��h���w��5�U�r4�UvI��V>� �H�*4��X�I#��4���f�qk�����h�~ ]������3������p��
�s�j����Nfv��Q��[��J(��5JH*�����V�U������"�����$7�@
�I�@
k`���C\��}�����
�>O�K��za�z�O=���
�X������Z�QCQ$��k�!*eD��~����h��^�����8��w���Z�k�W��O��onn���g~�ozz�����j#�A �����(�0ru�NvL�����
�a$}�}>�1�V�j#�����i�[&����(H0�r�F_���������%��.���o�'N��yL���R�KKK�����g�l��Ez��������H0b'o[�\�vo�r��
��^�$�5\j�������� �-�X�&H�(O�k9H�?W/>��}T��vV�_�z5�{��u���s������/..:�YYY�U�������'N �������G�k=��|l�s�;!�k�[������k(����-}�JM}>� R]�5j)H�U���JSi��@��7o�t����� W�������q��wfj��� � �,�iO�x��O�&9�����{����G�^j�aZ���^d�+����FJ����f��m�-��^�:6A
{������������
�9z���=;_XXp���������vm��m������Z[\B��k���:sZy���h��k�����z���oe���UoUUi��x�\�������|k�9�B���V�*4��h
���&Y�G:�2��L���9H�a�����5DI�3�e\5�{��r�um��5��S���U�y�@�u@�7@�[!p���2���K���~�M���������??��x�oJ�/�����$�z�������/)�������w�u�>��������[���C���������3���w�|����;J��o�����2���'�s���2��;{z��OB�!�i'�,}���_�������c��to��7#[�������=������'rO<�$���x�����(�q��NF�H��,���c��\c��W������j���_�W����*��pu��e'�
��
)o�����O��'H�����~S���2����fB��x���*X�%�������.���EB/*z���v�\��|N��?�����@&�S��T�����@/t��
u���(t�qG�GV�IMVM�����s'�E��{?�����i6?K@��M��)�����v
x����2/���d�[�����7ix�l�M����~;4������\�V����o�O=3�-��!8| ���!4*@��lN5�����]Q���|���4�p,i-�7�D��v�w�:����\�k�����_�������'���um���P�+�V��.�+/=?����D����~��[^^vg����u?~�x����;k?��6r�}��>����s�m�_-���`
7�b��,�d�+'~����������Y�o,|���c��z���&���@� ��E�n]�5���_p���G�Uoz����tZ�k)�={������onnf���_����������3%�w��%������M4�p�_�z��7j��3�!��4)�-�A{�mxK���Vo����r�um����?���j��D���������J!OJ>������J�������~�L�������|�C@;�� �;�v��7w����-z��[�\k���@[ �&Hu-�h��JOm����.@�w��[�wM2*%��?�X/�[Cs��z������v��b���/%���9�����r�u4^��M�~�#���+J�z��
�H _#l����5�\t���E~F}�v���S&���w�zPw�7^��R^=��_{�n�H��M��Y�!���e;�9J�g����Xy>�@9�r���Z"2{�$��|��0[i��Uo��n�x�CBbZ%��Q>���m=M���-c����k�Q�GmHL���wfK46�b,�@>-���X�]�*-e��A�X[��[����2�l�
�2�e(��1�C������}��27 �~�F��v=���!1a���m���J���^�?��:j�t-������x���������o)v��z�5�DX+jIK������k��w���uJ(]z���� �|���Z-F�V ] w=����d����)���T��a�&��B��=�eo?��yMz|��I����q��Y��w����l��1P���g~rW�������E�4�ek�$��>��FU�m��^(�s���s@`����K�L����S2 |����!9L<�K\����=b\!���P��6�v���s���Z
W�T��U������N���jd���-,4Ln[f�����e�X?m�!���j��7����v�VB��$��rm_��v������?�?��t�� ��7��`��������[�Y�V}h��g�1U�m��M��=��Z_�&al��'��������[!K���i]����@�w�����^9���"���?}��mr���O�K���ms��� ��e)n/�&�������X������JW���z�+�D ����VxL���n hM���Z�[}�=�s��M_G^8�@%Bn������5�M��R��i��oz�+�ZD��@�7�h0��_��&��*��('��#HLLIl�&W�=\��5�M��<�n�V��:����������=���������mk=�n@���A�S�a���V�P2���M�l�:�k�M��[EM|����M|�� [�_2�����P�>��=?E�_��| �n@�����������g����s�
Bs�%�.��-�A,��6n����f�����P��K�q��O����L��!�Xr��A��0�@; ��M���nii�-//��nll��2&�� *����fc����V��h� +���wG�Q��G��%��VF:6���&���s���i;S;����5�������9� �M _P~W�^u���s[[[>��$vl,��an�� ���U�]l���;b������6���!N&6�2�� "�&L�7�����T� /[�E�d;O��u@�9�e!?33����|r(K�&-���UB��:H�����@6��v��E��}��������M6!i���l�jA~^�un{���,�X�N� 0��%����������|o����;{�lAH.C ��em9@�c]��w&�K�65]��7%�U����#��zg����5A^X�?�VWW����{b����������|i;^�F;c����� �<�������/��� �� �����K�v�ZXX�ll��k0��|����'�y����w���!������G~��}���p���1G%��/������m_q��O�����:@���]"��~��Tg'�P����{������5��o���:`��'�D�/�2����?1B����tM|�({L|�(;M|�� �>��> �u��:0�P�D`e�����s�R����5@�~�.�{��r)Q�1�J����f<6EZ�!(�� @`P�r��S8�����nnn��ir�q �B@�;������R���@� ��Gc�m�m�d+��k<.C`B�#��$�� 0!����3g������2�ZV����!�L
v����$� &� ~2��\@ 5`G� � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"� @ � �C ����@ � @�"rnss�>|����'�NOO����!�@ � �j �x��u�<x�I�/--�.db~��}nkk� 4�! @ � P-|���E�w�^�������������N�<�s�� @ u@��P�}�����s333n{{��3���� @ � FD ����=zt�����0�]Xp� @ 1|`���2ZS���B�x�� �� u�:@�LR���_2>w���1M`@<
����� u�:@�RF!��|�� x��D��@ � 0�����)����@ � �J �0��d .C � �J _���|g#�P\� @ �� �����l��={�8}%����J�� @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy @ � FJ ?R�D@ � �j ���Il� @ )�H�9 @ � �%����'�A � @`��#�K�� @ �� �Z��@ � ��@��/�C � @�Z�jy[M.^��fgg��={�����;�|M��L�uljj��={vW�/_��>���)�� �������'Oz�wN������.�������n����6���:�;w��G�,�~���^T�VD _H������b��?~�������������-���g)M��-//;}�������Y���_ZZ�����Q'������o�'Ndu&%���3���.�Tx-MF����6��8766v���~���;"�Ge���$��,,,�������KR������G{n�@`�n�r��%��Y�K���}[3�L����7��T��������g~�4j�v��p��}������\ E���W����s�b��}##�� ��w t3}{(�2�
.����nR#�yn�����(?6�!�Oe�Y���u6��u���y(�c�/��e�f,n��'���!1�L�t��b����l
�M:=��\��
�����:f���r������]|*���Yx��1����[�-�a��U4w��W���MK�c����$��hB�? G�=6��&sHfB X�p�c�O�.�����|�BTx��#�,V�h=��& ���H �~�g�n&������#��h�������f������F��<V�lM,�y+5���#��@��3�E#����~�t��.o��_�~�����p�� ��DR��FDo����$���z�Ru�z�R=X�$F���k��8b�,/,��O��<y�[^�8cu��q�� �z��8By���!�E�W�b�O�=���a\�(g�H ���X�4������T���M��� ~tl�y�ry��L!� %`��c=�a��Z�^� ED�F@ �m+�gya�:;���ERu��Xj�}Q8���+�~��8$����B���q|�B����'�,�;D@����mrb+6X���Nzp�:u*�����1��C�jI���r���l��5��1�e��bI�x���M�o�����Y�n�|4���J�#&��2���������9D?����
[��0�
���,
I��wX��'��zVTg�4��B@��za���ZV�_���W?m�jXw����F��#�z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C � @�z���# @ � FF ?2�D@ � �� ��gJ�� @ ���1 @ � �'����)1B � @`d�#CK�� @ �� �z��@ � ��@��-C ]%��������VVV*Gp��-w��a�g�w���^�)������<:���C c$��#|�� &��(���B�rp��Y�����r�y���������C��_�j
��Ob��Q�
|B �� �:��@ #0*��^����yW�)��������?����;���FQ7n��M��� FI ?J��
t��(�@�P?y���)��:����X__w���wM{Q�p�ut� �sEN�! �Q�Z0��&C�r�p]?V]����E�!0>���'e@`B �`T��SOe���t:==�kb��
'��H4��1����jk���nnn�&�*������y��8�������of~�������������
IDAT��(.M�][[3/Nc��n����m�s������� '�8�<�����������T�,�x�������>�2y)�r��� @�@� @`X&5�����nyy�]�p!���4��H�_�~��9s&���\]]u)w����^�W��%�%<}m`ggg��c�����w!0?�N����|�r&�%�M��^B���+Y��@_�d�AYw���1.*��~K�����+ z�Il�)��2,-m�� b�1*�A ���Dr��m���8��41����)L��z�M`[���~�^�97v������+��}cc������]x������baR�v��c�����X��������w����!�~��_@�{��+sr��@J��b����A����d=��}���������L�1�����������]3{|qlnel�x�h|lK�����1����m
YX:�r���U&/eX��s@ $�������R�1�����'}1)Sc~MP��?�W�+
��������x�����h�|,�
����D�:Q�6,���x|��q�.ci�<6�3H^�X��s@ $�������b�OQ�`�{|S~M$�b=��xc���R�
{�S�|wM����|*�������y?������_��2�&�e�0y���7��� �E ���&��@
$���<%k��)qi�"�~M8�n�7�����FD)�J�5y3����X>��~����i�T�����c?�����C!�c����,�A�I@�;��)kr
�D������1�r��j��1�kc��Z��#G�VL�x��zJ8�+n
u�h��1���UN�h�%�i���������cy1�n��J�������KY�f{��f� �~�C���z �K�}����*4�)�]�� �$ ����59� j"`��j`5f���K����2I��HT��z~�����a������
:��b{{�G�H�����?�]�hx��
x���m��D{�p�oy( 1���p'?i��|?e�R����� B���! @������M�< @ �"��oTq` ���
s�
��m�@@��@ ��[��4Y��=��� @�I�M*
l� ���'����f C �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� @ �@S ��Z2�@ � �|
N� @ h*|SK� @ � !���@� � @ M%��oj�` @ � "�(8A � @���M-�� @ �@� >'@ � 4� ��%�]� @ �@�G��@ � ��@�7�d�� @ �� @ � �T���vA � @ B �� @ � �J ����.@ � D �#Pp� �'p��m777���;W�������=:`h�A���W�YnX=Y��U�������{�s������}_;�����35��3�[�n����'O��P����g������}����V���H�����������sW�^�=}�����uw������g�fz?��������w��K����������W�4��F�{ul�I=�
N �O����� �����b�o=z���o��I�W����Z�fT�x��{�����#�TncU����DUeC�lw;�����\����_q[���E�
���~V��W�gO�� �}�C ��z�M��'D�����C����=��w��z�Co/yCcb~$���%XMl�����PM�������p���������PMb�%������{u��B��$���d���~ l_=��&�S����x���?��3��Pt�����m�K�lW��<����������?��o����y�6�� ��O*Nr���W�F TN _9R"l"
my����7�Oi!��T�����s������������[��g����vW�\������������������kB^��z��lh�]��{(�e`�%���s�O�T����K������������<���\��#;N�>���'N$����tG��]W8��?� �����2���t?���)��^����*��������v��2��O�����nvv�WSSS;����4����������$����'V�aUE���}����~������|s������Xz�?��g������*�]�Wc<q������#\�l}�� w�u xKOd���z�=������(�B�D����7o�t%�����1��_�� �c��~��Z�bb��'�p�����@"A6�>~�z�.;%�$���?���x���5�C��0������WbP/*�K\�xL���X���'�j���������%������h���Q[�g{��_�������Ry����������������ey����z[�>�4�XTG������ml�������0_�fxO����l������{��+�� ~X��o����J�����h`�!����Z(�_(d�!e����4c�������?*���]��(�E���l��:�q��lR/�}�x����h~�c��}��?:�SC x_\�u�3����^~������e��^�>���V'MX�-yG��XM�b�����
b�����!��wR���z���7�W����CCi�{�Z�n�����0H x���w���C�Wq���8�4}�+#L�%
��x����l�[���O?�cXQ����:�G�.�]E:J���b�|�X=3�8���u}���,L����ba�0�FX����u���-\���y�4�~5[c���b�(>�1��t�V&���ar����X>|;�_�����Z�-]�h#|K
��&���������E|?�}���8�x�[�I��I=tB�����������j��--in�2�p������ m
�����nQ`vh���3g������W�q�����?�s���a����M��?a�5�=��_'�0���{^\&�OQz��~K#����'6vL�Q�k���s��5�����s/�g?��cq�����xR�g���qs�&@�7�4��������{��s#/���:L�R��a���������/���=\C�V�/�C{�[���U�(����X~����S������,�]��'�V����gX���~�~x����a����?������-|���������:jyQ����_����f��5w�U#��%��/Ro�X/� ����c?������������I��:��wp�OaM��������G�,M�
��=�[=�n����
��/&L�'%
B��](�d����!������+��s�����\?��=��7��r������?��w��9�*o*�m�NR�$�2q�u9u�(��I�a<y�DQ�-s�����Q�������:���<�X��r��48��� �����[H �����;����]��T�����y�2�;Z9��
��T�����_/� ��������������O� QaK<�X��BRB��������[b�HYX;�q�����^(����(I��~��������~[�����N�p��k��Q��+�����UQ�O�e��eu^ek��O�(=��2�D�z[t������rQ��+�w,��6���hq�����m2m�<�q�q���O�s�!�����3@`����{��hJ��M��/Q�#��.�7�� &>�� p����
�: ���MZ�@��z������������3�fc���RtW�����[=��*Tx��i��s���0�C�� ��> ��hA8D���JF���>�^�*Ew�q��$J�{5�G�F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F _j� @ �����3$@ � �F`��7��`@�P��� u�:��:p���>���jvq�P��� u�:@�Pv��������J�Z� IEND�B`�image.pngimage/png; name=image.pngDownload
�PNG
IHDR @ �r/ sRGB ��� gAMA ���a pHYs �&�? hTIDATx^����Uw}���g|{o�������Z��]��]�^���Zm]�|e��J�hh�N��$%A��4�%�D�:Q��$�B1F� �\RL�A$������
��t_^�{���|�>����?���>��}�9�����/?�����o �F��h4�Fkn{����(D���h4�F��h�js� @3 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � }566�,]�4Y�lY299��z��s��������h�j��Km������fgg��+WF������#������k��<9{�l�eg��$�����_
��M�����]����tr��w&SSS�+��i�o��d��5���M����<����W�.4�����u�/S������������C��0�E���$��z��8l����� � }�o����+v�/_��:u*}u>�����X��+V���G�
e��,E������������U\;v,9~�x�Wy��������]0�t3����<��!\0�p�{>7o���������.��
���p���
��U�\�����*�}a�����b������{�=������Ia��n�S���V��n��������~k��D��~��i�k������h�M�A���v���v���~����D��G���R�pP���a�b1�7V��s�=�x���f<>[1��u�u��/�B����Q+r�����V�~������'+��L�Ax��cY�lL�w.�<������t�b"�/lfE�/���Hqd��^a�6�a��p9uI�U��i���,�����}�o(��n��oED�z���|V�B@��MC8���+�+� }������'�8��`��u�w�K����WQ����**P�����~�p������eK�0�u���_��q�k���w�"V�X���������8;����8�O�Q�i[��e Y�S�b���\8]�z�w����
[�y���iW@��:�,\�t
A�}�|.����-��]�/Y����n�S�O���/6�B�X��|ol�f�{_�����VdXc��^�+�/��EXd�[��o���l�
����/��ao��i�H1W��������j��i�i�!oY�������p�=���m������;����k�P��
?����=�������"���~�e��?+l�|�
����_[������w��p9����P��w�����o����F�;�y��?w�lJ/Ef�g;YNCY��]/f��*F��~.��|�?M�{�o�������2���5l�����+�/��,kj+�X�����b�>g��6��B$�l����B�~S�"�F������Rdl�g����$�������?^��o���a�c��_��V�6d�1���>8��z�V��2����*�������6Eu3��}F�=o�:a�~�������G�,���\l�f���lJ/Ef��YNC�����������-64]zY�������+�������t���u\7����t�Vb�J9�uc+�p�h����_��+�v+n}���iMq��"�6.�(x�������?����~���������N
}�����>/Y���8�l����;�9��z���B(��MO�n�Z�q'��;y���w���dbb��w��?�7�<��<�g�~��w�\����Rd��l��4&o���ew���N�a�����v�)Y���a����t��p��e��6��������u������
=t��IW��o�����N����W�����hdm��d
w��&+����q��q-2��_���f��BmT������M������@:�wl�d��~(2������}Y�~��h'k����l��"���������E�K��~����m7�%k������/��I���_9���
{-\!�^��x��YT������!��8j��.V�d�6�b�\/��H�5��n8���?:7��o�N���q�n��t���u:���OM�;<]�WE���y�>�s���?�l �E�7�n����l��n�H�e���e��������7�����t���/o��t��p������V���c
�>\��J��O^a[�}�Z��a��
�,Y�"
��Y�o�8��O����-��7����NBg�v�X�(/2n���w�������^�0�M���g�-�� �.���z��"�CL/��J������c]�f!�'�l�c+�p�o�u��l��I�c�l��u�o��*P�l4���uZ��={��NZA�������0��+��v�~ Y� o�YD�i����Y{�}E��Nt:�
�C=�R,���� �����5��l�v�u7�&���^���i���%������,�b+(x��i���b�/^�
d�$�!����`Z?����]�fy�66N����a������������_EB'�"kS��u���X�;�6��9l��;1/v�(�v�(O���5�z��y��v�,2�f
K���_B����{���"�6������^~o/�-��>�ll���t��p�����]�`�Ll�oL��?keh��}+@b���RnW���#��B6E�����F�~S�o�*@���6f�8��S�����n���a3Y�n7��L�A�����M#�������u:�d)2m�(2e��E>�%���v��b8���"���r?���������5��,y�-���B �+������Vrj�
���=�&kEj+jQ� ���Oy���x�o(:�px�m4��g���
����?k��������3�0�e�i��i�o+2m���y���������SD8������w�$k����6����O_�f�v�����M�]/�uN�m�c�����e���������[Nc�����e�_�}��7k���v:��}V��]7�����o��V|�_9�6�����������}�NE���>r����J�}��V�j���$��vKK�&V`��h����M�)Y
����SV'6�>o��������:�p����W���O�����~�c6��+���^�w��Q�+�����zC���{:yZl�Am���sy�O�e3kX����"��r�����C����.���:���.���^��M�N�j�I^ �f��B8@W��m����
W�~�{�g����0Rm������o��~����k�����h����6@v��~�
.}�������d��~G�!W�o��S�����>�?vaj?6���9�b���y�_������kY�7K�y'6ol��q���Z8�g�
�������o����w��c�3��y36nl�g/�f�zC�e�%���z/��b�.�!�3:Ze���jy�������������V�Z�u�{������n�q����@��1�����O�7��������.R\������D+�N���Sc�3�FGw09|�p�e�"
u��&R���a� /��;�8�
f������q�
Y���yNQ?�a���E��~���u����2�pPt���y�]������v��;kY������o�C�Z�o���{�-�z_�m�����a�wj���������u��{[�4��HL�0��e���{�i��i��
u�{M7���^�q�LW�_ 4HX�/���^ �! � � y 4� @�
B8 ��p @� �! p � �p �! p � �p �! p � �p �! �y���KFFF��K�F��e��M�6%SSS�'�)��;v$��������k��<9{�l�e6���5k��c��U�������~����� ��p ��~��kW���s��������_�7==��X�":>�
%�N�J?�j��}m���y�����p � p�FGG�W/���q{����"LNN��,�C�U�����MV�\97�t���� +�����YM!���h�l��e���4� �# �y����EnV7�������C=�l��=}ep����*����{w���Q�v��s���������^D8 �|� 8�H8�2���}����9V�/_�<��!�����k ���l��}���=� � ���� ��=p��+p��5��6O���{���=:�&���o���=����]���k�����t�=�zO�����@���E�A�n���� @>� ����}�^WS�lE����9f���s���;����\{�������}��������x��{-,����g� W������f�;v��Z��m'Ey^��%/P � �+��N+���m���N����XA���3����N+�����7,������H6��n��������
���m�
���-z�?,�o! @>� ��.�w+R���~`�] +V��y^���s���dbb���v��/�c����������5�P����=�(�5
Y�e�w�d� � �# �y~a���!�
����~�l��d��
YG@�@�:](+���^�����$)$����!fa �� p^�p�>�����&��������K8��3��AVao��uw�qG�����`�SP��q�� � ,,� ���E
[�K8��?��Z�A_�]8����>�E���EZ'�Pl<����;9��� :C8 ��+u�����������=~���i�~�����E�
w��o���� �{� 8o���O�?����{��(.�.I:�����~�S���o,2�!�W��I�S����Q��B?���p� � ��6d����� 9O^��.����oO_i�H8(2��N�k,��E�7�{� �# �y���"�V������Q�B6+d��}��sOG{����v��~�� =��G��>o��G��6�j�� @>� ��m8+Hu�lX��=�
��>y���]p,�gcM�{��"�@�a
������G�w9r$� �"����z�aw�4$ @>� ��K8�g��TS��/�c�����t������k�����k���j�-j��5O~�p��pXc�Wq�X�4��N���V^���*������� �� ����N��9p�@����=�@���7,��|��S���w_�+��;���"�h80��~�Q+���\�pX0�������Z�9!� �# @��u��~|~��2?��� ��p 5b���]�+u b�#(= �# @��{��N+�����,���]@ �" @���jo�=!Y��N�n����A �s� ���'O&[�nm�hX��p��4��^ �# p � �p �! p � �p �! p � �p �! p � �p �! p � �p �! p ��y���K�.]������d���MV�\��^�:9{�l�j����$k��u�QJ����w/*�]?� ��pp���d���s�u�p066������{��I���������'�N�r�H����/ ��
�rE��e����w'+V�h�u?<<</�����>99�������~���� :��pp���������E�j�=�p��###-�������3}���: PDc���]8��{tt����;�����;;��Hw'N��[�8� �"��.�������g�����A?�E8 @����{O�%����'h4�F��h�j�b�'D�Ax:����:�Vd��F��h4�\mP����H8�^x�H�NLL�5����O?]���"sA2 ����p���������"��) �������#�H��;\Q�i�&������.����V��{ Y����/ ��YG�������q���CE���T��EE��g� �� \D8
�����W&�}}c���
���oK�={4}�� @g�N�o\�<��O���.I~���iW�F8 �P0Px��K�O��-���g���s2Y���������=M�:� �C�=s����d��'~9�)$��p�/�a��j" 9�<6�
�
�?��]���.=��!�T5 ���]�
!�kO�}{�����OU� �������C�D����_������S�D8 r�y�.w��#;&������D� ���X���[�
j_��f���<�~�� @�������G�mL�`pt�5����2��� @�����k:�����7��~������" m�.D
���0=�z
~5�`�U� ��!h^(����O�.��p �x��m-����K�w��p ����k[�A�����p d�����u�����?�vQ/� ��C�[��������:" N���%T�)�y @]x�]�\W� ���?l jux�Y� ��77����]��[O� �����_>tg�n= �@����# �&=�G8 Mz*��p x��Td� �4���>� �i�S�}�������,]�4O_�������k]7j�V�Jv����{�����n�����������t��~ �3M{*�������s���[���X88t��{OE��={����ddd���{�n����l�r�JW����{����/_��:u�u#E��g� ��&>���p`E��e�\��b���p��� �z���������������grr2�"I���[�Y��~� �i�S�}�
'O�L>���UT���X�=66����3g
�"A����_ @1M|*�������w�?}�������)@�i>4��;q�D����E ��z*��g��]����N���������.���������A?���p`��F��h4Z�O���-��?o�4��b�A��
����F��F��h�z�#����p�c7F�]�6(��A�p���b�:� TW����#��.���Tw
�oP���"�qA2 ���z*r���Vp��
���B�n?��~ ���S�O�}C�ns4:9r�=�l������i��{����}�������m�{/l���+��=��Hw�� ��=�W��6G������5a��r��Dy���<33��s{]E����{�W��~� �bOE��My*���� h�S�}� 4Z���g�+}�Y h,��<� �u����`0s�;�w��p ����W������1}�y h$����p �F:���[�A���# ����04���>� ���KZ�A���# �q~}xK0h�S�}� 4OE�# �q�}WK8h�S�}� 4��~��>�G8 @��T�l� 4
OE�F8 @c�T�|� 4OE�G8 @c�T�|� 4OE�G8 @#�T�� h���� ��S��# ��x*r1� �OE.�p ������ Pk<�8� j��"G8 @��T������/Y�ti2>>��2���L�v�Z�����P255��{A�nd�� �t<��F��s��%[�n�+�c�`vv6Y�r�+������������/ON�:U�Y�~ 4OE�Lc���C�\ X�lY�{��d���p�s�N����d�J�LOO���H7��� h:��������'O&�v��*�udadd$Y�zur��������9s�m7z}���� �T<�3�
��p`�������\466�N�9q�D�nt��B��S� @��T���kb���������/��_�6O�h4�F�U����i �y���n����O8 ��y�F��h4�����������1�m���X� �V P<�;���� �^x*rw�e��i:�� �Zx*rw�9�LLL$;v�pE��M������O��Xp�=l�H7��� h*����F���oOG�[xZ����+��}�SSS���F�_ M�S����p ������# �Vx*r� �
���� j��c�-�@GP� ���;�l �� PYOE���P� �}*��K�wQ� ��S�{G8 @-����� (�p ���|*��i(����������Dr���� 4Y����s:S�p0==��_�>���t:t(Y�t�k��-Kv���^ @sE����x�.�*}8K����������s���������v�_�z5G ��"�O�����l�r����:�p�W�;��|�����S�o 4OE��J���H����W^I8 h���]�x*rwJ�4������������� 4�o�?�S�����@v���.>^�b���?�H��a ����[�OE�^����l��5Y�fM�}����G
ta2� 4OE���� �����%�T�� PI�?~�%�T���>���$k���{�Y���) @3=���-���"������P��q����;�hiw�y'w+ h��[��x*roJ�9��) `x*�`T"��K 9��]-���"����@���x� �����Q�p��n��Vwj��c�Z�����. �<ypJ�$d�V �S������V�l�2�V ��"N��A�V�o��dxxx�H���P������^>�A�MMM��^P��g� ���"N%��b��h�������iSr������#��-[�k�o���}��=���{]����T��g� ���"V����@_���NI�W��w������&�F��499��r�Z�+V��(����_ u�S����@���nE�v�Z�� �wVwz���3m����� @�T��*u8��g���X��4�7><���ko�1vtC�B����m��0��_ u�S����@{�<�LLLd����tO�.HV@�0�`���
���<:��/�����A?��6O�h4�F�������`��G����A��������u�V��8p`�����F��h��iG6��%���h�uo�b�'�.�=t����E�<��� ����0 tQ�6�~8��E��� @��T��A8��w�@���%�K���g� ���"/�A�����[�.|����4��+��JV��g� ���"/�A�[�������V�Z5�nEF�cP�n��p���J���H7��~ TOE^8� 'O�\��� `��T��S�p`�����q*
@��T��S�p`w����w�y��<
���"/�R����� ���<rWK0xv�]����J���� P'o��%<�������R��=�cO @��T��W�p�[v�z������� �9x*��+u8���bw)���� ���"/�R���HO%����w+ �'����J �L<yq P:<yq�.�������$9y�d�Bdk\� P?<yq�*���"c.H h���xJd��}��m���� �y�OE�xY�.�t� ��S�� ���T���0��D8 @i���|b����4� J#�T����K��� P��"����A�T8�3x� @=�T��W�p����X�b�s
�����k��� ���=�[�M��B(}88t��
_����+���=IYHM� @����������Q�p`OL���l-�p
�W��!h ��T����I��B(u8���uGv��pJ,�iF �.��\� ,:��\�2666w����#�9 �6=9j<y��>(�����Y�,[�����������K T�.:�OE^��;m���k�{���T� ��c������8*SLt�b��]���;�nhh�%��F��/ �2��x*ryr�)M*�����LLL�����������{]��_,]��g� ���"�K��A��<l�,�u1t��;w�������`a!�H7��~ ��s�6�����xJ��D
7nL�����v��w�!h�w�]�m�1|����3g�v����/ �*���a8��������h�>z��B�=c!����-U����'�v���� @��0���`��S�O%�A�}t������[�);v*��M�����;��
��n�p��~���4�F��h�h���dK08����vK����_�k�7|1tfG�t��]��c�����F��h4Zw���w����_Y��6�
�����@���z���>v�XK;~�x�e����Q��#+�9� �8��\N���b������{������ (3��\N�V�j�B��(����;��D��������_ e�S����� ���`��4���?�'�.�P�"�H?� PF<��*�nEFa[�~��iL�c�m���� ���T�OMM��^P��g� ���"�W�������� �&��\^��C�����kA�V ������U�p`���3��y� ��S�����@w:x���8�����[w T�/��%<����],�R� ����.o �}ss�.� ��"�_i�A�S�b��� ���"�_i�A���c�� ���"�_i�G ���"WCi� ���"WCi���V4>>�� ������@8 ���T�j `�x*ru�.l��)z�qV��d �r����Q�p�]i^�V� ��S���t���{�I�;V�?~<� ���"WK��� �OE�� ��"WK������������ ��x*r��& �^x*r� 0u|*������{����6�������=�%?{�H�n� 0u{*��O>��b���Y�������������Y ���=Y�@A�%��i�f�P2�����������$���F���&T� }W��"�T�?~�_8��d��/�k
Kn}�����&� �.�Td�*���_q���;�[���/��6���C�2� �*����?M�����?�
!�k���u����~�� ���=��-�$/��%�@����s�����~�� ���S�u[�����-���g�7
�~��/uA���S�W�\��^�:9{�l��333���k��K��644�LMM��^P��g� R�S��@��}�3.��'�DC������7����S�D8�����+��p`�A��={��{���}�����S�
w#�� �B�=Ya��OE�[�Z�����nc�]��d�m�M?U]���:�,[�,n ;w�t�MNN��$���t�b��d||��]��g� Z���c���V���N����������(�����o�S�W'-�� ����?�;w.i ��g��i��^�g� C]��<�����?�����k����p�b�u.���k����p��������0�)>��O��T�'N��F���_ -�����i����#��oxs4�����]���
����Y� v:�}�
��n�p��~���4�F��hE��{>��lxw�������n��zK4�u�;�<�����
���pa����;}�p@��h4����p�����M���F�.b�[�6(��A <��d�N+ M���3-�@�JOE�3
b�@��T�& d�^x�H�NLL�5�������zq?� ����T�5��
�(Y'7� ���������� ��L @S�b��-��*OE�����`����v�MB8��BC�w�
�����F��/ ����M_wIK8��S���s_4��hMC8�P,����+����
�������t#�� ���=��%T���*��=��k_|�+iW�B8 @ON���%�����f���:��y �I����;e=�����K�j&� :�[��j����=7&�zUK8(�S�O=*���Ko{o�Us �]c0}���@p,���m��]���_�M�|��E������o:�
��������S�mK>�������L�����7�3
+���C������nz�;� �
rOA�a��~{2y����vm�����0�T9�Z�X0h���� ��3�������kW=�3�M���n�H4��d�� P���TGb����k��<����S�����D��nc���=iW0� �g�$��w��d��w��Z<���Z4��=�" ��3����|d�D4XS�X����=�XGG8 @[zn��?��.<v�{��@�_���9����O.<]G���3]�l� �:��Qw���~k��G�mL�`pt�5����2�������r���A8 @��?�������(����/t�`�XOG��
���X0�3x�Y{� D�5���!�|�m��'���q���x0���S��������L0(�p �y~�����8
�����=��L��~�S�x�qq� ������+
�t������]�C���_1�:�~�!� �v���f�9=�v]#_�t4�6�<��s� �^_����t�Q�|���d=� �# 4�
�����k
e���+���s_�:E8 h(�"�S�b�@M��T��������o����+t�p �@��X�B��.J���e3����O?^s��iW�� �atR��4
��x}��=���-��]�� ������g�af�`�����p � E�/8{hw�u�����O�;x�Y� j���?LN��4
�fnyG���O����=��?t�����iW�� @��j�����\�����i��3t����@%��d�� �����!�=��r��3�����)��p P3:p�����@�]_������I2�5�~<8��68��]�6Y�t�k�V�Jv����{����������������t#�� h��__ *��r����p����C��V�g��dbb"q���}�j����d����@Ww{��u�Y�|yr������t#�� h�v����+K}}��:�t��p����s.�^�:9{��}sc����3Y�lY299������d��������H7��~ ��x�������?(;=�,����0�G8�`{�c�����\8("��9S(h��_ �t$@w�5I����-I��~�[�ba:�"FGG�..R���>'N�h��N�g� @���]Cj��@� �]�����3�~�p������#:��/�����A?� �Mw�]�b�@Mw+*�����m���7���~����o�~a^�p`��F��h�r��_Y
�~���D?W�������W�>yd�����W�[� m������T�~��l���h4�V�����%G>���@���k��<�%��2����h0��U�L���}#���6(��A]c�u�Vww���
�yq?� ����Gs�/8~�������]���o���t�S{����9��o�Q�~�~��� �0��'r�/xv�e�oN��]���{�
j�������t��,�"|��m�ha;~����
�����F��/ P}g�+���w]��f���/���_|�+iWX,��vW���?%yff����
�������t#�� �&���>����3�U��=�8�!g<�� %���}W4�U�����_1��h0�������� %R��D�*�z���q�� �D��t�Q��/=�,���z���� `�������@`M��j��~�# <��| �H��T�X P�)F:���t-A,��]���! ,]T���c�@M%���*���b�@w+�]�PN� �E����v��P�V����Wz���s��" ,��^_`���X0P���Qn� �R�����.>d���Ow���m#���nN��s_r�w�g>�������D� �G��Xwi4����������]��N
z��k[�������� �j ��&���`���o�?�v]n
*�_r��&kv%�?�=��?�L>�kM���^���rM�IT� `����!�=���i���S��x��.|��g��G�4�)$,���s�@�8�!g�B8 8y���@���/���i��`w!�y�pK0������y������
" �@�������%x��m���Gks}��� ��������X0���5�$o����O�J ]����#1;��U-�Y��WV����?�H6~ks�����\f�
���/���~���7����O�� @T�?��%�����|`�3���9����C��ozgK(P��������Tc]'�u;Rk���H4X�����+�p �!�J��
K\0�����{�������k�s�@w*��Ge���u�!������� ���'�DC���������! �kt��.t�owE���h ��z�g���y�{��b���*����K7����������t�1
����y�;��j" T���b]d�;��(�N���X0���?�-y�S�N��p���Cw,Y���-�;m��@��������s��(�����o�RT]� �h�>�?9��xr��u��
���&��w�2wg�A���G�����\}�u�B`+�{i��������t����o�H�%�}}�+�_�B� ��p ��/�&�?~"9��]���oH�}W��/��}���#;&������K�_�]����Q���]����Xq�iS��p�����f" ����Bt}��s��o)�������P���/nv���Agz���oq��h/}�����t#�v���:
� �4�9H�U�3�>�k�iG��NC:����������������k����=c��mE�6]��������\�,� P��T����Z
�~4]�����7�[���6���tz��k�$��5/O>�����W�Yr��_�|o�+;z��=c����f5�K����u)P� ������VQ�=�����g���v���������B88<:��*�������0���������g����:���
@� �/tj���B�� ?_����;�����cP�M��b�������0�-�*�_r��&kv�{���w&���&���7�� t>�N��)=�����NA��p z�B[��������s����_}(���������1�M�E��Y�D�Y��"T����k]0�����{��B��[�-��i�Yw&�E��8� ����?s����w����{��������vC��w%y��O&�6\-�����x�
�� �Su��V��>{�+�o�9��}�G��n~�+��6���n+{� 0(������I��]�,]������djj*} �����W���?J��}����]���w$_�����O7}�:Th�M�N��v��W�����&���%-���v����������^5�������;�t�vt��_��t ��oM����]k����#�``�O��&����v[Q�1��D8�����d���.���'��w�
��/ON�������!�T��i�����&O��sw'����(��5����?N�7�����W�7�l���_�R ��?�a�����]�������W�v�~����������U�������I�����_�|V������s���+�u��_�����?��~��G��^��7E?� b��(�A���3Y�lY299���$�����+������jY�
i4q����n�/�
�U�|������n4�5�/���������
�-���B^��������m��<_v�PV0hw��g���|E�����x>0Z{��?I�v�����
�����&/��+���2��~o�ex������u����d��(3�A��;w.IV�^��={���Y�WA�
�?�+��>�8�L���N%�o������I������cb�t��n�����8�jO���]��nW$?��?��aS!�m�Q� ���?W��P��|��0
���2�?������}��p��� P����S�FGG�W.���E:��eW�����n����?��O5�Mf5��Y����"YM�56����_�����)Kv*�������s�;]���U��E���={ ��A�X8��>�������������&7����F��lU[/����6�~q�� ��+�"`�������Bg���GG�~�C�p+p
��pP1l�d����t+�&nH��8�L�xc����\$�=��������ko����/��k���dr�����{�ns�����������coN�h�����������h�j�b�'T�B�Vd�� �eyc���nH�X@4�hb��Er�Z���_w�_�����y�����y���At�A��.�A��*�n$��+��������oH�w������&7��Y����[
����������7�E���~�u'O��N<.����pPAu��iS7�Mn�u��������]�;���S��"��'�~m�u}p�=P��
� P���5uC���fZ7k�����6���d�g.K���_=:��M��v��"�����5�q��O��}���r�{��.V(�� ��pPQ333.,]��5������ji�������n�pg�I^ua���'Y����b���e���� ��l (3�J���&7��Y���d �� �p �! p � �p �! p � �p �! pXT�N�z����f����l��1�����;v���������'�L�?���G�u���D��������{�u�� ��9�|���w�v��[����I4����'\��o_�j�=��c���[����YSh�n�6�p�E��l��5���K]����Q<=�������d��U����~7�u/"T(j�mz���;MSm@m��6o�\�i���m��]vYr�UW�~����2���[�����xRQl�2����F��m������n�6�u�u�
��������>n5
�<��[O�,8Z�ho�B�6.*�Q�3�`4�V �i��V6������o��L5l���L�@E���
G���yZ����8��kZ���1��!��D������5��*�5��e����X����4�|���|A�H�4Mw�mZ�C��k�(Z�5��]�>� Xp*�T<�{�t�R[�i�i�WM+u��IXk�Z��V4i���P��u���")��T���TW��
O7�2���:������i:k�r�i}�>���� u�������XP�l��-�u�n���"�F��bB����F{f�F
������5i���-<J`���]{��]��4���F�(���^g�P��C�S�N��N�M�p>�=�u�����bJ�_���������5�!���\0j^C��YaP������{U���p���Rh�+��9k�� ����xl/�����:m45\a�\��&��ER+U(i��uMo����t�V��i�^�BI��1����6�����5���j����}����P�^Q��m��"���,j�UHU�_��)Dvz�Q�+$�B�[�jm�4O�uZ�+ k����B]���I�n���SOXpZiX ��C��-x�Yu:�&����l��Q7uvMK?�t��`�P��e�"�`��"
X,��DU�w��L�MgkaH�
nU�;F���p��Y�*
���5�
tt�?��u�����A���s�n�y_GJ�p����EUiyU@�����P�vWug������xi�5M���m������p�E����@h�+������E� �����P����H�I+���
x�n�=��45>4��(I��qP�����pZe�N��F�/<�B����?*���U���1dGV��!�Sf���Q��C�j|izWm��e[����5�k��8�p��;
�>��}Y��anw4[��Z����*�������4���X��y����_>��q8�n�E�K��Z�W � �NEp��\��
-lU�a�
��V ��S�m|����*l8�lo��!��!�}��+U<YE�ORuk����QC�y���;"�����Pv*�����^Ec����8�U������MS���y;|�>��*��i
C����q�V�q$nM�"�����j���G��e5V�����j��N�O[��*���!8D8����G��O�VJU[�hE���6�*t����6V �L�~���~�����5�X��P�0����W�M?
���]!�q�������h~�b96�V�!�����P%6�9�p���I��'v���_����l���-�6��:@�L��<��\�������V�jx5.���j}lG�4�j=^O�m�^��-��N���O;Y>m�/uB8���=
Z8��Y�Q��A
T@����J$k#a����@4��b
i�b+P�E��n������;�U �@�V`�@�x�r0�~{+�b���A�����W�x��4�����5Ok���`{W5��e���a��k�k�W��Tw���k��Wm�m~�O
���,�^�h���e���<����C����m�m��>��p��;<����5���Y�i}V�` �����B��L�!�
m�p�=0�Hj�b
�+#�r�j0���#�p�^T��i�������0�"�]@�t��ja�QE*"l~����]���-��������i.��a�|l��?|��~���F���K��.P����k���q��VX6�b��m���W6�Y��Y�����_�6|V@�N�*�p[�������������g�z_�n�@@�
��[����
U�V0j��\#uS�` v�Y���
m��-���6�~������Uda�/������.l��.�(��
[�5�6>4�����^
��t�0���~XP �k
u�U�izj85�cTTW5��������{
��mV4��U����[��y\�3'�^�v�vhZk<�1� �#m���6�Z����X!]�
�Q�nc�@+Y����T�"A'4~4�'u��[��oD���<^�S�b4�*T�k�e]�i��
*
{ ��� �cl�l����A�;��:�^���N�eU���f-�Vi�|o{���B���X����lP�uy�p ,m\���Q���U�c������/���
�����A�L���m�p��PSn�'��cm4�aU�a�b�ph������_6N|zM���l�������^S@��-�kz����m�j�5?g��V V=�j���^���_�F���8.�\�u�@Uh�����X7
Cz/\/�� X`��hE��S*�r��(��p u��(�}N����@V������5,�9�*����7�X��56�4<a!��WE�� ���k}�/����O�~v�a��k�r�k^ �Rh>��X{�5Mm���'�������y�U����V�Q!���p��8;],��v��*$����.�*�mXd�Wu�`����V&Z�j�V0U��`��Z��`$71�6���V1�`�o�����N5P!l����DU���(��h8c!���*Ma0�%�����H��>_�bQ�;<�g��g]�B�?��jl=�����������t6zM���U���j���Vu��Z��e����� mh�<e������"�(����Z���]U��b7�:����4U�V\W1�M�p��o����b{��U�i�a�q�4��[�n5����ige�y\�[Wi���KW�U�` ���� ����k;����W��~�v����vh<�<�y�j�r�aP����2����q-#U?Z� �0`��j��BR+��nDE
� �M���7[���f��^�tU��^������FYD�����8�K0����h���Z&T8��*����;k�0W5���[���?��e��>���N��pi����p>W��O4�U�s�O#-�>MW�n���� 'jU�nw�p �0�L�
J�������Wu#*.I���
���_0k��W`T��I����\�����!��U��[vE;3|����c�e�������d������n����� `�@���:��g{_����p ��X�*���BKI:'7v���e��)%>M����0���6�U/���a@����UvMK �yG;4��>_�������pO��}`%�*����=���5��A���}E��2���m�����BS ��*0�1���4F��B9��@� 7.U�B��!�i�� ��g����p�8��)�8hW�|����R�y�B��c�6�j
Y��,k�e����5�Z�cA�N�"�&���ja�
i���vj����Zi�c�m�:-�� @_��DM+�:�u ����j���@V����6���j���Y���5�~pP!U����i�U�i�Uk��\ph����@���m�����(k��<�q;rT%F����q� �n4������W�z���*�i�n��<�n5��!Xq�aP��c��0�e�'MA8 ���h�S�`�S!amPU4W�xPQ�i�_L�������k
���S��S1��������|����Z+ �Ye�=�a��BP�T�������0���5,
@V ��!��*��4�Z�5Ly����:��'�z.��4=� @��D��k#bM�e�[���YH� V(�xR����U����=M3�
����R�T�` Y�;|zO�|U)�j9��jG�
@M��j|Uu��)�k8�S#/ ��@���4��h�i��e�G0��p �g��T��D��FDED��Qef{��S�DJu�bI�g��B�]�=�*$���4#��U
��O�C���y]�^U*5]E��H@���p�)����`����@
�vXh����M�� @C�{T}:����@�����;�@`�A�����S�iX5|�X8P7UB>MW��kZ@��l�H, h���u�4��5S�F8 ���*�bQd������].N�]jtTA�D�����.*�i`�N�xV��v���=�hf, hY��*�0�p+�,[(��iY�����r�# ���j�5���T�# �QA��*�"�NT4���o
s���e���BH�_-v�O�WE�X���_�S�l>������n�}V�LEs����r�p+�����A6����`�a�i����� Y6����Vk��yG4N�#(�F8 ��B�.P�s0�Ox�@��
��M�*�U��oMjY4�*,�l��?��-xm�y��4�V��~��`
�5�:�b���h:W����C�(
��E�A���E���N-�q�l� �<�'������PQ�bR�.�����^�0h8�#A!��LU����
k84]U0g�<�U=b �w���a���O�Q7~0�*���������/k��������V� �<����o������������E;���bJ��mh5}���*�4�U
�a��]F�WiZ����>�U�ifw"�i�4���g�����l�4=5�Z��a�'MX���p �����mDULT�n&v�%+���
)M
v~����*���n�i��_
��S�H���?�����e5�vz�u���a������B��g�������^H� �<*4�x!..�*���~��s�U\�w����1��b�N�TP��s�U�iS���X8���9�*;����B�;j�@�y\��s� &<'�Jz9�K�N��";JP��W��p�3:�T�i���.�W��gG�4Lz]aA����I�����s� ��h��
l�p7E��q���y,=�O�����*T��� +���!�)E:=L��)��i���G�P� ��OR�=�*����*Qq��H@P��ktZ����y�e�i0Mc}���@T�������)���A�#<�;� j�.�����[��P���z��k��7/ ���F���k/�@�L�=<���W�@�5v}�^W�j0�nM����^��Y�����uTH�j��t$t�p @�i���H�a�{b�F{�U���vA��U��D*�m�;|�#A�[�W5���@,�Z@����l\��*�:V&� Pzv���EB�T�
y*���#��ru[�` ��VM��z�N�� ����GV@P�X�k*�X ��b���~T��B1
9���,��4���p *+
:�P�s�5<��)3f��#U��g�FMG<�b?�U��p�� T��T�V7Y����y�v�@�H�N��JudD���������?�9�?� �<]�������#V$��*����jt�',�5�;4��u�a�#
:��E8 �f�5!h/�����B����;�N��R��l;������P� T���&�s���]-�a`e�p� R0��X�8 Xp:%H��� ���r���;R��# �4tm�Q(�u\c�0 (
�5!,<� JC�)� ��p�[�� ��p@0X<� ����@0X<� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� ���;w&��-K&''�W�gvv6Y�vm�t��dtt4}5�uvz �� �&Y�����~���+9{�l�j�����C��5k��~���+�@8 PE� ��A�::�r���#Y�/�}���#�w�N_)�AL�c������ @M:�����\��:.������NV�XQ��^ P�
V��! �u\@8 PE� � +F�.��]!��m���Z
���5,�uM���7�F��������PYm��U�����|���������I���K�n�:7,j�vjj*���5z��f;�a���2E~c/�L
�����N�r����s���~��N�w�q � PqV����M�6%���{]1������#��;�k����g�.��zM���(U1��v1���p�q��d����;Y7��ms�9p��+h�b:*�<�~�5������(:=��o�i����������� @8 ��P1��0�cl��_(
{M�^�#a����cE�����W��w'$�~����������/�{Qtz�.��
���p8�K�q � ����?V|*�w}���t{���Sk��,R�[����{����y� 6�����
���Z8^L'�#y���N���� � �DV1�k<�p��~����^z���e��]��������w��A���N~cH��OWR�:g����������p���h7.�p 5�U���T:����h8���[��o�
���A�����p���h���Kl\ � jB�h�H�q����(�m8���_�Nw1����������0��AV`0Ec/:���5M�}���]t\ � j��Q�*bw��;�����v�����~�zwg�� �4����NYQ��;��5ox�p`{��?:-�������O������o�E'�C�w�3�����~��V�5,E�% �&�h���:�\E���y����
Hu���V���?��d�.:eEa�~��
d��nDE����n���a8��c�/����^t:=D�D�d�&�O3��"�Rd\�e� �,�T$ X(� J�N�iw4 �p �"R(���v�Q�4- X(� �!r?�y �n 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� �s���ddd$��{w�J����%����_@����D8 h��O$�}}cr���]{n����N�]8������+�������v����X�"Y�|yr��������x������g�W�9t��@~� MOO'W\qE299��Rm������6���������nN���o��,�@U����.<��O���w\�����i���m8��R�@�;~�x�j�tlod�wO!f����_�c����V&g}��������m�m�MN=_�b��r
T� !� ����Sr��u����&G>|�{�����]^��@{��-[6��ha8�0�wB�m��=
��v��Y�����X����]2��k]{���G��k^�^�t�;���oE��2`9��p ���C�]���@��'~9�
=t0���_�n�<rW����%���n�AOU0�*��������_!@�`��/�k��k���_�����-���OU ,�@u��N�9}�����K���w���u� �6��@��:m�}��>������_d� ,]�4J<
~wj�6mr��Z���lC��|��y��i�^����X@�������:b��W/�N����#���k��k�c��?���}�v7�[�n�����L�~�����9�_����*�t����K^}�����w�t� �n�9�L'M���-�$��.���7mB���K�������U��M�N�����~jj*}������/����<���kjY�HL��i�z���u�����E�)P]� p����x�f���o|'�>�����u�t��O[m��������c�6�a!bF�;�p�<y�=
�����>g����U��v�@��~�o���[bE��4
���?��������~�}�3��������S�k/~�K���K�����8XHW�u]�/�~'���O|<��r{���m���h����qlE�_�i��^�i��h�b�����G���Y���E��P��S�����v��Pl�%|��(�8~��h�i����h0�v����~��fl�^n���p�N/rj@�;�CawEN��g���X�����cb��~��W9�������b�~]���}�{#�``�w�k��Ll��M����^�ez���p�n�-����~���d�����v�����x�S�|@@{�cx���[���5U�}�����L�F-|���^�X��#+h�����Y��5}���-��������u�q�=����7[
��.:�'>V�w�>���h(P�Q��g�i:���������_~��_����}��<[d�i7�����~��V[?�-�[�?�S��@����&3��#Z�i��u��U��,�������j�g;m:���M�F-|���/���ax���F�
p�b(��H���,v�at:��;��
e;]a����7���h!�I�E�_��m�p�g�\���S��m:���M���7~�L�����Q ����|[d�)P>�������T����������oO&�6\1W��.&�E��0���m4u� �A�
p�b(��H��b��E�?�$6�E�������T��+o�d���p�3��[�:W���Cl���!o�����_��������O�����S�p��5,�@u��}8���s�?��7����O��������#,D���tQ�����mH����Y{�t��6��8������#�����(��p#n�NuZ���/6.��Qx�����U;���z���_��W����/�6��t��~\�\�_E��v�����n�-�������~]��Rd\�XN��" ����m������R����[��V�*����7���Q���i�m����om@���7��(o��e^c�Ak���nl�n�U���6�a���E�������1����W�� �ah~H���
��G�Ms*�m�n3���-��p ��v�Wty(:��[Fb����l��zi������E8 P9*�
���B%h(&Vv���B6�S�� *G{����������:�����^{���aa�{������D8 PI:�"<���{��=�A5���C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 � 8� � �C8 ����F��h4����p����4�F��h4�i�G?��p9��M(5M IEND�B`�I did not yet look into this in detail, but please note that PostgreSQL
comments style is /**/ not //. Also, please, do not top post on this list
I suggest we move this discussion to the existing thread on this subject:
/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
--
nathan
Hi Nathan,
Thanks for your suggestion. I’ll move this discussion to the existing thread so we can all work together toward a more efficient solution.
Regards,
Susmitha Devanga.
________________________________
From: Nathan Bossart <nathandbossart@gmail.com>
Sent: Friday, December 6, 2024 21:09
To: Kirill Reshke <reshkekirill@gmail.com>
Cc: Susmitha, Devanga <Devanga.Susmitha@fujitsu.com>; pgsql-hackers <pgsql-hackers@postgresql.org>; Hajela, Ragesh <Ragesh.Hajela@fujitsu.com>; Bhattacharya, Chiranmoy <Chiranmoy.Bhattacharya@fujitsu.com>; M A, Rajat <Rajat.Ma@fujitsu.com>
Subject: Re: Popcount optimization using SVE for ARM
I suggest we move this discussion to the existing thread on this subject:
/messages/by-id/010101936e4aaa70-b474ab9e-b9ce-474d-a3ba-a3dc223d295c-000000@us-west-2.amazonses.com
--
nathan