Speeding up GIST index creation for tsvectors
Hi,
In hemdistsign() of tsgistidx.c, if we process the bits in 64-bit
chunks rather than byte-by-byte, we get an overall speed up in Gist
index creation for tsvector types. With default siglen (124), the
speed up is 12-20%. With siglen=700, it is 30-50%. So with longer
signature lengths, we get higher percentage speed-up. The attached
patch 0001 has the required changes.
In the patch 0001, rather than using xor operator on char values, xor
is operated on 64-bit chunks. And since the chunks are 64-bit,
popcount64() is used on each of the chunks. I have checked that the
two bitvector pointer arguments of hemdistsign() are not always 64-bit
aligned. So process the leading mis-aligned bits and the trailing
remainder bits char-by-char, leaving the middle 64-bit chunks for
popcount64() usage.
We might extend this to the hemdistsign() definitions at other places
in the code. But for now, we can start with gist. I haven't tried
other places.
-------------
While working on this, I observed that on platforms other than x86_64,
we still declare pg_popcount64() as a function pointer, even though we
don't use the runtime selection of right function using__get_cpuid()
as is done on x86.
The other patch i.e. 0002 is a general optimization that avoids this
function pointer for pg_popcount32/64() call. The patch arranges for
direct function call so as to get rid of function pointer
dereferencing each time pg_popcount32/64 is called.
To do this, define pg_popcount64 to another function name
(pg_popcount64_nonasm) rather than a function pointer, whenever
USE_POPCNT_ASM is not defined. And let pg_popcount64_nonasm() be a
static inline function so that whenever pg_popcount64() is called,
directly the __builtin_popcount() gets called. For platforms not
supporting __builtin_popcount(), continue using the slow version as is
the current behaviour.
Tested this 0002 patch on ARM64, with patch 0001 already applied, and the
gist index creation for tsvectors *further* speeds up by 6% for
default siglen (=124), and by 12% with siglen=700.
-------------
Schema :
CREATE TABLE test_tsvector(t text, a tsvector);
-- Attached tsearch.data (a bigger version of
-- src/test/regress/data/tsearch.data)
\COPY test_tsvector FROM 'tsearch.data';
Test case that shows improvement :
CREATE INDEX wowidx6 ON test_tsvector USING gist (a);
Time taken by the above create-index command, in seconds, along with %
speed-up w.r.t. HEAD :
A) siglen=124 (Default)
head 0001.patch 0001+0002.patch
x86 .827 .737 (12%) .....
arm 1.098 .912 (20%) .861 (28%)
B) siglen=700 (... USING gist (a tsvector_ops(siglen=700))
head 0001.patch 0001+0002.patch
x86 1.121 .847 (32%) .....
arm 1.751 1.191 (47%) 1.062 (65%)
--
Thanks,
-Amit Khandekar
Huawei Technologies
Attachments:
tsearch.data.gzapplication/gzip; name=tsearch.data.gzDownload
�$0�_ tsearch.data ��[��J���l��M(�U�-~�x�(�ERd�_d����=����s�Y%e"� �?������������k���o��]����H�S����&[���d^�%O�4����H�:)���'�<��I�%�9��I�%�7i���H�cR���N^U2I�M�%��$���I�'�)����Hn��rK��W��.���tI�[2����|��M�&i�d��:K��O^����u���|�fI�*Y^�������}K�!)>I�����$�'����d��~N�2���H�<y��������%E�|�d�����d<$u�T���������5&�<����,?�sJ�"Y�I���L�y2n���yI�U�iLuro���O���r���d|'k������K�v���,C��&����_I�O�I�>y
��r��,��t���_�s�N�O��6��Q�}J:��O���t��d���>���*�I���%��������,��p���:���<��vH�)Y���&S��#6P��|�O��$���'�'��$��I����O���0[�������HJ]�>����rn:�\���g�G,a��uM��^�IzO�����z�1��d>'K��|�[2^��r�l}r�'�,���5?dm8"���>���j�D��U�V'�;�]�I�kJ:����c�I|���2�S�&�.c��+�tD:������{�W�~��!���K���o`���>?I:'y�������!��d]�����wg�n�D���o��5�$C�����
���W���J��O>t|q���}���9�N��~i�$wO�)�ZL�){&�N��o���1Z��Z_'M��d����������eI�w���ER�IyO^O^_�&�3�n��K�gr��uX��_v+����s��lC�({sq����lk2�������J��9b ���.�|��c��R�#�� TI�a�)�>I?b���zI}O�&��~��~J����������`�$�f����yz�!y|�G�O�{K��>Yw<[�4&�=�������������_I[&�
�V��r��>p������k3������Wt��+n�;�r��|wI���'��=��imc���������")~�tM��6��).w�G�o�'W��7xK�&�3n_GW������G2�����#}����l��:'��K�?����U��K��[�M���8����\�v�|�>�� ���z��>��&e��[��������>d��c��������oA>�~N�
K����>���s�M���=�Txl�z��n�I���f�
�m=�1K�?D�� �[��I;`����W���eoLN���O^�"uJze�O�U���yJ�����%���#��gO�����{>����H�NNlx��;z8"l�dn��F�����-���GM�>
��#G��{y)����<j���>������������~`t&�y�������
�1K��R��������u,������-���,S�9$e����%�T��l�����0����[o��/^h��*�����������M����i�e?r� z��3I�c��9��i�,G�&����%'���'���;=O94�����M�2�U*P�5)<�=�H�OJg<������q}�`zz
��.������t&$��� ?��q��7%�����m��,�#��&������o �zn��I������p\�_�������&7����\��MN���+0��)}F'��xuT
U
����/1#`�����,����']�{YJ�Sa�.s�k�<p��n������I�ed�y�N����Lz��unr���w����Lo|���d��W=�F>$����v|5}�����TS%e��������� ���\�`�3O����|?m�Ol�xM����T��o��}�y�w*w�o$� _�L��E�t�� � p�WW��]�3\���1�
������P��G.BPV�W�/$��>O|�^�OQ�n3pn�f:���oW�����cH�^�l`�&{]��l��:�;�]O@3���������8��[S��(���w����p�!��e?�����re�6��o���#��8zM�"o�s�����w�
������1��tt�����1�id��G7���8����%( ����~��w&�'�W~[6P`_T�.�KR��.y>C�����V&��~�_,D�����N����/����i�J������$�0�Y?O��Lm�rtw�J�LFL���R�>�V!}f����.]aQG
,�`���H7�T�R���i��{T���.�9^e��a����O}5��)��6d=Bz�/U�wV������&����?�>��\�V�owJ_����E���������X��D�o�$�:x��d\���S���v���/���phyY�\�=_V����zt����::;4+�t|�Z�u����C4�1(���o�Y=+2��W6����r�.�������Q�WGVv��G{��m����N�Q)�����b�~����r���S�{�p��t.��I��+��P'������Ko�l<���X�W�<Q?��!�h���� ��cR`�IP?�$Y �.1�T���Y��R���I&���vI����g�J������0���+��M�����y�X�/�7�[���^x9E
�������$V��.�
r�M�c�}*iz���������}�z^�����?S/T�n\�/'����>�u��c���]W.��w7�p��%�k�������\�|s�RC�)��:
?.*���;���3�2�o���/�m��x����������Bu�r�z�u�w~�N�����:n��d���z���M���u@�p/Jjt��F
Xz�\y�#�|0O���tJ������9%�'�C7����A%?c�������n�2��U-P8P�Q^�o��c������*�)����Y�r�#.Z�J'��-�+7��C'�~�� VQr�CV�z��[`(���s�c=C�7���Q��'�B�/y� ��c+��K���C��s^&w����dS�M �<yk!
l)�F8j��v���_YI_[�����\�
.H!U�O��6��%y���'~��.#�gd��H��~9�j�����0G��s���
�C.��+��"�%�]�A��<T�3.�z��a�
N8����ga03~H����>>����c+���e�sJ>Ky������')?�[����o�����8�W(�.
VeJ*y\�v!?v#��9/w��h�� ����|^|ZA=%Y��w�������U�Se��e�����-uD,wE��!�����
��O
�E��A���|j��3��w�sh���������@A|�Q�Qf�q��^Y�sO}F���j=p���2*��'�����
��K�)�VLIyk�2���u�;��
/\����G<�����mG }��G�P�`��b*�/�.����0��a���+&n��Y��SQ����L�d����zJ��~�6p}���������N)}��(�])�P�y$������U�*���T���O(����'����+�QdN���
���l�����)�Z�
�=�r���,���[�|� ��Jp���$'0�(H��(�����������i}@)�M�w��+� A��� '+�K�\�Q��v��t���<����
2c�!1��<���z��*�u��m����?{LQ����7�zs�+�@H������ #=���zJB&��2K��|�������P��/���
(����@�V0C�
�+�|�������S�W��������������)0���,@^K�������@S�O�O�N����������o�_�)�(`���h}qP~r�J0�1�����~&���
����/�+_)��V����H��eO�/|Mrt
UzM:7a������C&���������^� �rI��3z�J�ub�R���n�����N�o].u�_P���^�^?���g�G2����pG<�-�.�p�^����s�)��#�:1���s/�\�9`�T
�/��u�3S �- 9z��FGC����]������.���+�����*��9�0l��:�����B�����/o��p��� �o'��W�����~%��g(;�������%�S������o^�P����$����JL�n�����"��C�u{�W�= ��
0V�?�.�_{�^w�� :�:�rE����"l��Z��*�� �Q49^�-\t���TS�|S� ?�� ~�?��D4����������)�x���}ZI�{E�3��<��{�L-��rUY�p�`���c�*�X�]��^2r Zw�e�q��V�8�� �O���"�^q@h
m�"�5ya��w�b�W�k:���Igd�}J�3�8u��K�N_GM�N�xw%��G���Q��eu�����
[
,���x�#�nIv��Bu�D}_Y����>_M�pr���;Z�n��\���Z�k}F�HY�~�bU���t��W�����(�O�����P��{�)p��.E>���C���2��U�#;)o��S���bu�����T�������xjw���V�t� IQm�� M����M:�+G7)�=����g�����F�����H(��-�u��N{�}e��^��
��ny���T�*��m����7NL �38�Y~����4](~��� �`���]�4�K� u�k�=v�j����@&��W� ������4�e�c
���z��3/�'!(��N��_�1���#Qs��a��1�;�I�W�J��t��
��Q��P� �7|�Rn4�����r>X����?��J�Q�����:*.�]�nu?D%h�/G!�DLqv���\����=n{�&x[�I�.n�U�-)A��|~=
<����������V-��_.Z�P�:�������|��0p\o_���������I�7��[\e��W��O��
�J�������5&�q�R�������\A��f+�Jg('&?�@�<'�7��������Q�\�e��%�g���A�I�7�In{�����K�=�N��|YXB_YM������Eg����) ?wO������k�+�R6�:�S��Igh�bJ����T���
t�r��)B�
v�\��:P��T�)�#�U��M���N�di�(�/;������T���Q�o\��Gi�R��~r�[�����p�F�#Lg�<`W��'�������� �'�N���1!W������"�lqnz�
�:[�^� 9�7�gFW���4V(b��p��$�n����2��E]ejB�<���-|"o�L��v�LQ��~����S��Z"�T����N�&��Q9����H�����Q>U��w�'�L�,�5��}lF�L\�� ���H/NqP�*tTG��I^�R:��{�>}������p�����n\�BW/�LQ��g2������r@'W*��t#.��IG��u%'��T����[SYq�=J����|�F�s����}a��1>b��r�-|~a���u�������HD��^K#����$2K��JvH�^�����p�I�w"����@�9aQ�:��m�v����q�Djr�#�Z~����p3���Nd��=�(`��+�a�O��Z�]�(=J1;
����h������"��v<p �B���&�J�r"&`��V1�����-(��6������!B^<�'�$9����"C�wD����W�����3|(A��I����G/g�_��}iC����i��d��]������z�7WRT%k�
�I��&�F��o*kyTdJ�%M����
Y��Lb<�G K/�������:��A�w�.�.�;�L�!����5�M��K��W~�"�������� �pcOV�q+ ��wFM�S����vH��}x��KJCM�FG�5�����OW.#-��l���!���'jY�,_fP��>�s�=�. P��R����P:~���z
"��1�]r��! jH����������iO
P�qt}X��sP�7�6�>��+�M�9���j������I-�K�Q�z� FhY�
R8����X��g�AK�L�@e9�:�Q���tjzI2���e:�#����RM�p�~�V������7��������F7�DTnt��z;~�nG.�C�\�&�'U9�%]S��M�]r�A\�~o�@���O � ��s�%�Z����v\�-M��3��t�.�N�����nV��'!�#�.�@��q�r5 �? k���}O����Vp��t9�Y(p���������
��Vr�$��AYZ�p������hE���Bdfd":��-;-�J�L^QXE�B6���_�I�%�qY�|�"Q��r�t�3JE�;�Rf�1?�>��PTU"��i ��IU!�a�������d�Y0��K�84���0�X��9���u����������� 'O�X ��#Cy����2*�y�
���BSf���W�A�H�a�+��K��B
&(����q��Wogp�������i�;h��5U�k}�H����������*
�)w��?�TCw�-�"0L�c$-5{A�E@TO 8"�5>�m#����g��>�s`��S�Q��f8e �c����)����^�+�bl0S�*��xa�r���_Z�r�B�osf���2�`d-����%y��J���J��������G�{������b��t�r���������{I����"��2�y�
�����h���������3E���^;��� ��>�@�=�����\1�������� ���k�E�K�����2WH9�k�\�<��<���&&��X�<�,�������(��T���qB�Y_i� L�Dv���=SU%uEF��bh�����x�>�����&�;���G�k���p�-��X>#�,��z�OcZfS�$��� ��E�4'�#�dj ���t��D�������"z��Qu��,�N��#e
���W�p9���0� �U�l���q�5��(����������#������_\?Y��@�k����$���_�_���UXv�p���i�8Z��{����)&�����
��Y�R������C3�vuq6���HG�}�z����U��������v��������W~�[����,�6������|�p��^��!x�S�*�RPy8�#��],�w�=e6:��#��p����U�eP��p����l�}t�+�������F!w�<��W����*�dHzY��}�<�����*�|6\�^:��_GY�������D�k-Nd����k���#�7����Bp2'��D����oFX132_�i��L�h�;)������~GwQ�@��h���s��~\�Y���>V�!�I�5%��5����������
f����_���g>L~qO�q� ��C(������GRm��:��M����7b����0���@yB�~�,>>y��*�Q(����!7�,�_S>D7 ]����o�o'��P��*3z�������CW����B�G�H/NoP�]�RW�O+�+N��yS��H�Lm��fO����T�\P���1��������r�P�3%S�|`_�� ��W�:�� a0%����lMt�Moh����6�A^�u���6�NN�3 Z�V�)���EYm�gu��/d�z�YO�(1�O�����oR���K�%R���P��p��W*C�� tM�p}Za{����C��S�����]L��y�j������H�2���Y��Ua<Y�t1����+{�v�@*������F�|2���Y��
���^r�JP�>�D���:V>c�����<�/���=V
0i5���*��x�B�F/�j�����%rC���E�,\:/��\�|�� ��� �V�����3�Ut#S�rJa����/�>Y��i���q�cz�N?��&����t��@6qGTtG�5�Qs-t����(���(�?6��X��J�U���Y=�W8�[���3����{��[�b3G-nCW=�29��l�C�\P���|�����l@�V�%��L~�:m-�(&��`d~t��SV���Tl�6�=������-���=
�t[�=�D�x@`���3|��S$��'k��Y^v��J�H���UnY �\����Vh��gLnL�-)��G���U>�v9aj�^z::[���n>��[ &R����o�\!i=�$�]�|^\�����g������]���������D8Qm��!)��l�6����pW�{�@���S������Q��� ���w�Nt�����@��j�km��<�N�p{�w�L0�����j&g�����r�������=����+���� 0�^�qd��vL�3���-c�.=���~���P��7-!�Ru�M��o���';��8�-��;���`���������BaM���`�3���t>??t�sM�EE�����"�,Z�-�n�%�����~��]_~��;&�r�<S�S�����������d��2����2�$\��Y|}$T��G���u`X{V�Z�CN���U��;�;���t��r&'�'�2yPn���|u�
v�`�� �-w9h��P���?�c+-���u}������T��1�w79��%PP7*�r��?�C�rG�A?^��Lz���8�~�<�QM�"i) �����{^��s���'�����HK7�c#����w�<�������~t%�����N��7%g(�so
�S|�O�qv���{����m?�&y���Q�D�{C��k���+*�����N��W!����B
�s����%�C�y��`�
�=�8���KuWY�p��
���a^&��N`o�����t�&3�Q�v5%U��>�2Syf9v�ae�z�"[�k�� |}N`h@i� *�3:�����9A���s�s��k�l�@��LJA��;)PL_a2�^$?�6�i����,^���Q��o|�qp����'��V@���I!P��FoA?������)�w�;-O|N�J�,�5a�,`!@�g��i�Bm�i6���bW�9��h=y��npG���B�M����-i����f�g?xu��~�f^�����S!:A=(��'�|��-��I�F� ���0��t�<�kY���g���^�����@HNWp�#u ��������TO����<O.��&{�T���W}�%� �0�����>D��wt&�� �o�X�{�x�P������#�ey*Ev���-��I���x&�2�����M�(�L{�����C���KT }?@��3��7xw���V:a��Bz� ��d��L�-u��~C�[`L)a�����M��W/��z\if�}
�����_��g�~_�[
� �;��=�H��:�s(��[ ������E�����@��GH���8����'��<2L��+����������{��p���C~ ����� H���3!��yt���f��x!|��V|f��� �O�*�,�Z���U�^y�I)C�R�4���.������%�u�H����W���0x�5z�z,sG�N~��� �vD�w���=eEi�����/-��N_��l(��"7��@�z��������c����gL!���[�2x���<�<�
���rSpOg����� ���J?�g�`��@ CF�J��/�����=��&(n|`(/����X�3���!����@(�L������s"���29s��;����G����sEW���'np;+N{�.*x����D���,�� M�=o\h�BM��a�������O=�Q�"�D��������sR+9��N�GJ���������@�M�8�u!�����`��,_
7������d���/a�9��^��M�q�]��
�������7Y��q, @J�h��w�9Q���1�z1��j�� ��n%<��wd���}�f���#>A)bShLn���i(�a{�3�(��u��#��K��2D\FN�^��B �gr�����-/������@�(5o��I�L��'�|M�;C��y3K[�G�u��!�*(���-��8����r���������"��`�5� ��f�������%w��~�J��<�)�������/%���3%0X0�b�&��������zz�_���5{*A�[OL.����B��^�8�@��g�U�1kE����KC����8�`��%G�g%@�6���S���3��%���<'��:1};���%' ��h��p�d;���_w��3J�'E��2�F�W@M;$M#��P4�����u����8[�N���Q���Wi|L�����6�G�W�k���HB�CZ�1v��\G��0-����-�T�KRL�$�C�+&�k�B����
�����9��>����se�[K�������)�7��a�+'���<���~����CV���r������o��R:��������.�?L���\�g�Mta��i�2��J*?�0�D�����s��3�?nf�)�I������M�^q�|�����T�@�e�EQb����R��u���xhZ)�V�f��b~xI�>���x1�
Y�Mu�jM6(���P4���)�c�I�hy4"�����0�^�������(�E2���7����������H���!�9���_���[}�8�VT�e�P�[b"��sE�����a����Z��?_9��"� ����H�}91wNK�W4-C�GP������|�gOCO#�R}B&J.��d/<�?���V�^����V��^��U�$$n�)����T��B����3�x�r���$�%*�r#yhT
�g\y�P�X�c�&�@����{.����h��gbD���]XA��f>���;}����"E!A.�F��c�'�U��@S���n��B�::���Ay���L0�[�d�d������1t:��c��lN��X� 8}5�f�A�x7�|��a�7���@�?��/��
5���#>s�z�x����CCi���*V!��5���|Q�
���u����O�d���a>�r��1�V��-SBO���^]��6 r}���{ Jz z��U�f`�X�Y'+$�@�cF�������U�%� ���p]���@%GDo��MOY�%�-��/#L1�m^N������Z�IVY;��<A5�����o���3�t�@��rS��x�z ��1�F������e�������m���(-�M�#���fU183���0���dr,��Wz��������Y��F{"�����{3���s��t������_&O������)#V��S�����-��@ ��]>��"�t�:a���a�N�G�:��^>��&�J2��=U=|D�N��Q7F�S�F��z������N��En;fC� �,T����*���b��/��q���=���cE��b�_<���}����3�9���.9�cC���3[G���d�:��W�����c9G��f{(�;Mc�S_�s7
u_�K�t�~c�6B���
xfJv��C� �W�������X@5�5��5ytb��!�6���%�(�}�Ux5 S�V�E17��#��G�!/hz��r�"���x��C=�gm���9 �f-�����M����Dn"�OUs������R-H�S���(� `��rw��x~��te����B�B��y��3�
3�?9����,*�����S��0vu���*/���U�tqB����tM�������V[�u�������"�8�9���` **�s��>��Z:D�[XRj����t���0+O�*|���9�s>�>�-�Q��d�V�� w�b�E��DR���G�� jI%y<�����z�d�w��ji>��8X4��;�Q�S~�q~�f`��{U/�
}6!��4N��o����4�,�$FK�
w=�P��-��xBw�rv3X�B���O@#b����@Vy�II}s�
�3h�c�NBf)��N�I�{s�jv�V�������7SH!��y�N�E9�x�����B�.[����F������_���9�o! �� ��
���Y���H�P������8�8%J�U�H����~��M����Z�/�XY�l�������0�W�����e��'I����RS��F���������\,&0C�6�Bne�����n>C�g��4dIv*,H���C�>�P�`���B�C�j�nMM���e��\op��;F���3�+�a�������B���������X^���:�[.`�rJ����@���%+}w����%`������n� f�=���q�VQ��y�EZxh(�])�(������O��{N�s%�R&r��z��W����b�"��w�WxJT�;�d�v�7��y00�����
���
u����M��-'����#��*����y�����5���7��������!�O+ ��U�at��Q�������Y�Ko�P�@����*��:?��yy{���r��e��*�V�������&������d����8$�F�0s�o��(�4^�+�I�P�nMgrY���������fD��w�<k��J)=�%,�c��M?�����s�zJP1{��P���hg�����N��{"���5+�)��
�N�?I������ : '<@�!��+oS�X��_>�)��P�_�s,���d�� ���J���;����V��$~���F�������1��������|u����,\�x�����4���(�,EF�b`����Hu�������&S�K����x<�nK]�M8����2��'17��R�u0�\��E�����b �G:��n�#T�moy������-C��q��3�
�t��G<�Z�Wc����u${��f�����q2xH/��'w�J�?�����$�>������eU���r�Y�����9���7����J�fd]����l�8��9������\H��^1������W�p�Z����A�y�,����b��\���W���T�p��r���Y��=����
n=�r�K;r����0���~�938f��n�27�Z����?=��S9_����9�z;I
b_��$��G�SL(���`���x#�l�M������ X}����%At' |����U���F��&�O4c��<�����x����j�%��������N^�s�x(�G7�d@�B
���87�-���<��=��O�&���_�mJ��Tg��B���h������]�j���
�����c<�������n������aL���3Z����������&�-��*�z���}#3S�r�J[,��q��%2�u�5�z��+����@ >� �=I.%��8-�7����)�����J��/�h������A��F(kP�w#,/c!So�6p J�YyUK��mn������y�|��������$������j�;e�g++����5A�g�yR������k2~�Y+Z+L�L�V�#�����F���6�U��"�^=�����VA<���� ���B��0�dfE���}���\@M�3���0O)4F� �?O�Y�
�3e��P�4:�d����$���{�$����R���F�u�iTnS����;��+�x�\�+�����I�n�|i�m�e�)Y��_v�U��������w��l����X�
G�����%����x�`��22�8���X�H��{�p>
��nH���Sl���+
R���*�7r���m2�Mvo���m�4�9��0/ZnA���zKPH=��
Je
d���(��zr��{4X�����M��:�u76�wD-��G��}�]� 9��������i�GZ���A7/xT���3I/l|�����<CP���?s1����tY M����&3JR������P!��vU��l�~�$'�M������������X gP��nt,p����u�d0����w�33]���Y�>�vG�nm5i}G�����y�b��;�j4r���r����c��'��P��F#14��.���C�
D��u�7�/r���!�����we������B��2y�U��-*�J���!�j��v�������V�S���+3��q�|�� eS���{LL�J������ �� ~O�g1{M�����@=c�/��>iN�V���E����HI������u���k�������\�����b��a<s�
]4�D=���k�wT�����
Dy���%����dh�� �'Y��|�0�~� ?<�ys$�P�W��������f�;t����$s�������\Y��J����Ty�����~�OL�D$�����Z0����$�����~��4FMb��^,/Y=,M���Scm+��|�����x���tr��R�~z�O���GE"��e1s]a!��R�W������L`d�FIPV��f�W���3gR{����@W�W)�`^�^�����w�DJ�b����G��g�02YU�*:����`I:�`[o����_t���=Z����2�����O?$��+8
����<K��k=!��h_��H'��H������J��~Ax|�+~��������3}�9���Qz�
"GC-���+����2fgt���2k������� 7����C�C��Z������l�����\�7nVNc�&=�b"4���f��Y�|Y�}�|��Xg���od@��}}���.E�Qz �H�Nuk"bA;}����'�y�q���bg��g2t�b�1�N��@���x�;����_17�%e�EG~�;@>��(�t��1�[Y�0l����v�k������~��u��R3h�����
���|����c�A=����r����$:��@���e��Ix���b������a T�p�y
5}����PJ��J2TK�����{����b
Kz����� �^��T��RY_q��7\��"��a=y=������B���7��y�5����r�t���8�<|}!}�R�u,x��^H,������Zo�t[oS�H^H��wK�� ����4"R��S��$���5�cl��_�E�BR�Z�$��6�skB��;���yc������������/�y���-1�����BP�/D�0�
���.n��H����F���7u�X�/s��B�d}S�JoMy��Z4��E��J/��z���Je,���q�'����)�=
gUl
x2P�'0.yP��G������!�������Inf������jI�4*r)f ����������^e�LJ>����������}�+^]1;Q(���Y�����s�&���0������9!�����X���o�E����`��9��J�%\V�=����7���L�������W�������SC�=��v� ��P������}
)MK7�E]T��1��t��c�J> a��>��k ~-5S�i�@]�� d�7��\��Va�����k���=8�?����W[�U&#_G����C�<X]mT�!�T�\��!/��F�D����J��m��,�mV��z�r]�\�����y�m}/�D{h*��D���S��������kp�r��Qe�?><-����l��7a���%���YQgT���1vTn�&�o���Sz��~�F|�O� ��8��[=���kSX��%���6>�'�����Wx�$��������c!#=�v �� @]����`�3���>������/���4A�A��N��k<#+������Z�@)m������c!"�<#�E��H Mu�d�b��C��(�)�s\<���i|��bH�����)�9������DT�7�vBCG�.���Qv�i#�{%��U����,�
M�D��O��rp�'&K�9f�acVqY/�������_i([U�
}�<���T"�����rD2t����/����e�^��K7�
�e� hK���fh�`r7>�����mh�\�@��~�1�:��3�x&�S����,�N�<���������6Y�:�Va���Z� Uk�QH�'>��E���������549������Z��#/H�>��U�A�uW�\�����C���vK��+�5�h�^�#@��`�m=�����l y��C�,��W4s{t�6W����M|���yx���g�W�B�������q�2�����[�"L*�R,[k//��L|�1���`{��WE��g�Xze1'�����9�DkZ��7;����#J?��t��p�����@���Q������i#�6 2���$eU��B�&�u�C�Z���$�*��2����1m����>�������0��t��-p���!��Y�yT�������BK`��������F�+�g�%�|�~PKS�,�pb��\=@I��H~q������^�vf�8����z��?����8t?8���r��#f?��j����=�V*�V�,z�r�/rD��Y:�>[R�I�W�DU�i�l���7u��hF�;�
�51����mI]�i�����2�A+�J�j�V >����.`�)��#x[����O�O������ ���n����\~�?�~�LSkR�+�#?Y�����������.��r(e���r���8W��Vn�}����H����<��G5����V����"Q��XN�#8��7�Ky� ����5&g��^�1
S�.�Qm�m9P����b=F-\���m���b�e�����?R���E � 3Z�?�;{Peq����m�"�����Q��_=Lm��
�0n�r���s�j_���Gg`�2��i�\@��
X���,�ge����eZ��]�d��3����J�D|�#j��<�m#I���h.Y_E~/���qQ�w��?
��e��tO�ifS������aa��Yo�{��4���M��s�[�����dQ�-]��v�����S�q���G4��.j��zx-�,C�`��N<vTq�h�� {+����|�`��^y&|����5R#%��S����4�W��B5�{V���Y��dM�+�*}I)���(���X���}1�;e����$�����[~_�Ox�_$�������)B |�I|���5���f�����FO���9z(��`���6P����z����E3�[�3�Q���������i�2�2:�%�A�MH���7�,�.����2�P'��r
����THBSC�@�G�'k��"7�!��>vm�q]����-<����N������o�j�(�q�\8�
J������(���&r�,|���;��2�`Q��] �v�1��Iit�����/U��+0�=��+1[�I~�E�~�2��bbTVo��[=��#9a�wo�YK���A���e�),�mM{R��?�t8�����i��U�>�p)y��w�������o~4,��8I{����Y�W9��A��1*(P�#��-�z�qMI �����D��%�����2��Q����YCr8f�/1;�*��������m� ���#�Z��1�����s\'l���7�����i�C������q�%rJ�e6��"�J:dl�V��� �\-1�$������"���
�O��H�C��e.r��>�o����_^��j�k6�K<���`T�_Yza�����iy�.:p8��<���#r�������[c2���h8��_��&��d��q�!G��[����s�6�T����\������<���
��[e������ ��u]b%+���r0B~��(%P�����c�0��^�m������R��#���wOD�2���X�x�H�v�0uP�"���H�F�+�}4|�P`����za(�X`M?'�I����D��;nl���'E� zK#��'}��ZH-�l�����C���1��Y�Z"8<���[�@@����`��f���J}m�,8���~����������a%:��&~�`]��e ���KG4mV���4���R�Yy�z5���`��#��C�{���45�6�g���xQM��^���w�(���K��YN�K�[$��������B�t�8��Ko#��a7e�}����d
�O��%\�Ei�����c��Fo���8� 3�M7W+����}`/l/�S�G toM��������!�-��@]`������}�/���($5������]x�����S��d��3��������RQ� �_�5��z�qt��E[�9��K�I��G�Gt�'j?q�t����Fc�P��'#'��~]�����O0����do(�~���������������i+8�����&!(�������+�h6h����|-I�
kT��oQ����n�.���Q������}y(sw�\l�����lZ��E,*�z�Y%�/��d!Y�-���:��_/��Y,�������*]�� ]�u��}�h��L�����`N�b�!:��B���`��;��*^w��J7_�)�,b�p����Ki�����yD=� �+��zD�;[����B�
:Ak�d���U[�^/������-�� �+��e�w����?Y���~����i�)si�L���dDV'?�'