fs/erofs/compress.h | 2 +- fs/erofs/decompressor.c | 2 +- fs/erofs/zdata.c | 777 ++++++++++++++++++++++------------------ fs/erofs/zdata.h | 119 +++--- fs/erofs/zpvec.h | 159 -------- 5 files changed, 490 insertions(+), 569 deletions(-) delete mode 100644 fs/erofs/zpvec.h
Hi folks, I've been doing this for almost 2 months, the main point of this is to support large folios and rolling hash duplication for compressed data. This patchset is as a start of this work targeting for the next 5.20, it introduces a flexable range representation for (de)compressed buffers instead of too relying on page(s) directly themselves, so large folios can laterly base on this work. Also, this patchset gets rid of all PG_error flags in the decompression code. It's a cleanup as a result as well. In addition, this patchset kicks off rolling hash duplication for compressed data by introducing fully-referenced multi-reference pclusters first instead of reporting fs corruption if one pcluster is introduced by several differnt extents. The full implementation is expected to be finished in the merge window after the next. One of my colleagues is actively working on the userspace part of this feature. However, it's still easy to verify fully-referenced multi-reference pcluster by constructing some image by hand (see attachment): Dataset: 300M seq-read (data-duplicated, read_ahead_kb 8192): 1095MiB/s seq-read (data-duplicated, read_ahead_kb 4096): 771MiB/s seq-read (data-duplicated, read_ahead_kb 512): 577MiB/s seq-read (vanilla, read_ahead_kb 8192): 364MiB/s Finally, this patchset survives ro-fsstress on my side. Thanks, Gao Xiang Gao Xiang (16): erofs: get rid of unneeded `inode', `map' and `sb' erofs: clean up z_erofs_collector_begin() erofs: introduce `z_erofs_parse_out_bvecs()' erofs: introduce bufvec to store decompressed buffers erofs: drop the old pagevec approach erofs: introduce `z_erofs_parse_in_bvecs' erofs: switch compressed_pages[] to bufvec erofs: rework online page handling erofs: get rid of `enum z_erofs_page_type' erofs: clean up `enum z_erofs_collectmode' erofs: get rid of `z_pagemap_global' erofs: introduce struct z_erofs_decompress_backend erofs: try to leave (de)compressed_pages on stack if possible erofs: introduce z_erofs_do_decompressed_bvec() erofs: record the longest decompressed size in this round erofs: introduce multi-reference pclusters (fully-referenced) fs/erofs/compress.h | 2 +- fs/erofs/decompressor.c | 2 +- fs/erofs/zdata.c | 777 ++++++++++++++++++++++------------------ fs/erofs/zdata.h | 119 +++--- fs/erofs/zpvec.h | 159 -------- 5 files changed, 490 insertions(+), 569 deletions(-) delete mode 100644 fs/erofs/zpvec.h --
On Thu, Jul 14, 2022 at 09:20:35PM +0800, Gao Xiang wrote:
> Hi folks,
>
> I've been doing this for almost 2 months, the main point of this is
> to support large folios and rolling hash deduplication for compressed
> data.
>
> This patchset is as a start of this work targeting for the next 5.20,
> it introduces a flexable range representation for (de)compressed buffers
> instead of too relying on page(s) directly themselves, so large folios
> can laterly base on this work. Also, this patchset gets rid of all
> PG_error flags in the decompression code. It's a cleanup as a result
> as well.
>
> In addition, this patchset kicks off rolling hash deduplication for
> compressed data by introducing fully-referenced multi-reference
> pclusters first instead of reporting fs corruption if one pcluster
> is introduced by several differnt extents. The full implementation
> is expected to be finished in the merge window after the next. One
> of my colleagues is actively working on the userspace part of this
> feature.
>
> However, it's still easy to verify fully-referenced multi-reference
> pcluster by constructing some image by hand (see attachment):
>
> Dataset: 300M
> seq-read (data-deduplicated, read_ahead_kb 8192): 1095MiB/s
> seq-read (data-deduplicated, read_ahead_kb 4096): 771MiB/s
> seq-read (data-deduplicated, read_ahead_kb 512): 577MiB/s
> seq-read (vanilla, read_ahead_kb 8192): 364MiB/s
>
Testdata above as attachment for reference.
�7zXZ �ִF ! t/����/s] o������M1�u�\����,�Oj{1���ziE��0��b\4���c�ݿ=NT�p�"-;_�\�R�����Pc�(�nI���&�O���k� M�G�8�Jp�,w3�f0�:W�*���c����<B&�;9"���8�*=�ܱ��y�UX�l
=�ۖ�K�M�_�?e��!� �oN���%�k��y��Y�_�{+��[C��00�x��PJ5l2Z�et�wR��:��bkAI�J�qN[�G/�ST>5���]���"�v.JU�u2'��5�c�oto�$$�:aʧ< �}�Z������rZ1�؎^=� �Q1 �G�_=NM.�ׁޞK��xxWg��� AR�d�mH����B_���L�+�
X�~|�!�,�Mo�L�ꩧ�-��#�c�%����~�с~�ʷ��6�8֠ZG�t�1Dٓ�ö��d�(:��s����n5��?4�~� ��Q�-z�$���S��C����ʆ<�K@�,�M|���=��}��rc�V���Y"�Y9�HO���q����8�F����Wp�.�!j���,3�餍�7��}):��Dh��y�(e������ቊ'H��X"�P��G�����;-�r���+U&M�>��Ci4Pnj��U�e���Ӥt�N}�����u
�B�3ێZj�n�p�p���䫐��/�h�Pl
z
����XFu�"�a⤠W��c�� #t�*o���
{+��ݓ��q^�5�e3H@����pmOҲ-17
RUÓՕیlڵi�\m��Y�DԘv�9��N1���j����h�F��Cc���yŻ��)�ȴ�
���~J@�P���n���B��)�����+���p�nޭ"aQY<�7q�3�Gs��2Wq<��g���.�y�����xo�^��y���u�EK�6�i[g�U��o��Q��<n��=�,��6�
D:BCd� t��5Z`�a��rW�tJp�E2ˤ�ٳ5>q�V�%�VhTE�
���o>�5}@�b��Q�s}����K�;^pھQ�k����J�S���)%���>����d&c5�g����q ��Ҟ��t�49�3��#P*�В����2�
!�1��"�S�y�IDO�"�9t��*����)?�PV�6"b���|��U�\�9&N�h��Z�o��&aX������������N���N5��9�n��O䔝֗��������S&غm���gk��p䎌j]\�X���i�4}�(1CjH����8\$}8�-=KyD�
1���!ŕr��dI� 1��?����Q(���.
��ӨJ��+�,a8ۀA <4[,��'�,���Ei�k�B,��T|nņ}���ەUދ�k��4�4��/���z��M�t���w:������W����\B�v9Ȳ5m�I�� �3<x?ݸ�[@Ҳz�9N�h���<��m����uA�SkKbr@� O�l���P�JCꯌ9ތ�rA 3pQc�����o�g�?j�@��tA)J�7Ǔ3;��^9��`}xM����cy��hv��{��N����e��-v�4-c��+�:���4�^9�$�Ô/ ұ9[�=��P��ҁ�ļ�����G��0|�i��8�!�h8�6��t9T��_�oY��
��O���/�������-'���w:A��~���r��4�r��B`��E|����}�z�0v���_
����Y����֩��nA�t�+�&�� ,�:B��*�6��WćD�-�8C���댡u����)��'l�i2����Ma����6][M�1Qz�H���R:>��ְt�o87e��3F>,�|P�
��P�ؓ��/?�QU�,I�2Υ����t�F�=���OW�Y?����~���K+lݔ%3�^�bSN#�Kz��ܸ��ڟN���i�<5@w��S@ 07�5Z��#����Ņ��
�5u�ư�& 'Aɘ�Z�KX֢ͨ���z���!�A��H'�b��Np �e ���ȈLÆYȠB���<��u䨞�e���+��5�3k)փO�d���%�n44�,�ӝP���_B�i�� �T���AT��[����l� e�3�&}{��>DU����˘��S̿�Qd����;]Ω)��*W�����|�uP�X"a@�\01�
X����!�Ȳ/���+��1��"�hcDy�M��cgթo�u�L�N���L�R���,�C�R�^SP�� ���쐯�����&��0��Y�;�����cs�{=Q8#K�� $l\0a�Ly1��l)%�L!��*c/.��H �ЍF�j��!��,�ɿ4ܟ1�n��a(w@J���v � ^TlGB�{T|ÞԀt�$�B����d.�������++��N����>�]R��������5G-}c�p��S�� �Ʈ]��Ko�����/-����k�t��˖�ϯ�"~$k~ѣ Z�����$�|�[�y7���J"Kc����a3����U>�7�]Y�!�*�V]Pz��>b���ʑn�OM-�u�BM�$qF��ދC���N"�M�p"��Ї��{����.�.ͫB��\U(��$��@G�E��'6� ]ݤcՍ,S�����B�%��d� ��"�t��D�?%��;g��j%�O���
�}ADɑ���Ñ��G�uz�)#���Q�#��*p�#Fx���z�=����t?��DB�"���v^F�a���0I]D��@�[����C%0�q�d{X4,�z�N@z����._ɮT"���
�̪h�j$��\1�~�G�Q`����E��z
�nC0�k7nW�P՝"�]}:�2��R�%v�w
�� ۍB
��4���^�������y>�c��n�hi���â��2�0X���� R��L�[:|R��W7�Q��)���oJ�n��n`-��cW�b�y������X��0mX�?�m(+z����F<m}a�;���vB��З�˅�$}
>e�P�ft4h��^RB"����|����O�Bԩ�
"2�-�w��{�z�R�!����Z�V�7��9i������d��T�+�J����36� L���j���:|"��\Л5q��BP�8ãd�t?Ȥ��eh��b] ��<�O��qr���s��KV/��Z�V]aw�m���6DNN�v���Wk8�Z�ʤ%��/Z:���:~U�X+�����$7�]��Sx��p�OV�c���?[�1&Y�/S�}딚��(6�_��]e9�>�1�����`![�(�b�L��f_���A�\ttV��ѭ�w���jP2��BK��d��������>�
_n�e'Z;��y�����<�'/��Bb]Ea0ku���bH%�ތ��i��^��s_`�(���7( ˈj���+<�BZ����a`���Yv��w��F�Asጆh�/�V��?����t"F���,�
A�u�
]�.��$RB��aB��~# ��\V�(l�HR�m�D��X'ৢ�XZ*�x��R���R�����Ԑ�{�yG:��z�OԬ�W�ZMC��)���%OAjw����gK����RWWd�k��4�_�CȈ�$�-mY��9kUmWԐ=7�����r�b��o�րH�uM���sVte\
� S�݅��<�=�V��KOQ����� ��0�:jzTfy�Jr{�t\���h)^>�ԫX�4�r'�i}��zk�8�a�ʳ9�+�y�G;��, (��U;�M%�!%OAj�����g�?�|�V�Y%c��m��;������
KϪ_�� ��2�����"�YjcIKavUⵇ���!4Vte�k�wz��~��3OK��آ2�0t��\
�$⋜�Š�� g!%�"����J�Źx��RQH���A��SC�S_�����ނ8b8��Yv��M���U��4����`��
�LO ��ʚq��?�̐s�W����
74�bk��Eg!%�������*����o4S*^���H���w\�CN_ҮAR�&O�'���Tc��"��Ar��t��ĉ�Q�t\mM_q��'8���KV�:#���6L�R��'��I�����B�M}+@vC�r�-lv�N_��v�b�
���8m���R�[�#�w���jм��JC�̞x��8���A�c-����Ì!a|r4F֒A�Qk0ݦ��GJ(�y�*y�s��a�im�H^�#a�EIo �r9k4M�.����|�M(�h�dm*�\��PmBgqADT;�� �y-5M�C�S_���`.����"��A���p�]NBX��c��rD�u�
s����;+��0i��e�k!<Z�����H7���Gd����Cz��Y�
��k�Ť8�]�JC��6/NcUʢ�衳ٹ��P�.B����*�%[%K�m'����~N��M�F�0�Y��������5�)Ud�����B Kd���KjvI;C-��.&=2=��tiADޕ[�Z��+~Nqe~,?A�jk���ze"���o�~�
x+�E�����b���@Y-��2#��n(�X-݂֏w-N�����ud����PÐB�.И��� )R�b��1x �Xn��?�����u�/��/{ m�OI��%��$B��>z��{�& �sM�r]]֙���a�8D�/+̔n�t����l��tF�VP+�5��+�b�=��w�]V^���+��Q�J:p���'�j���vgʑ`�u�xU"�ف�C'Kӵ��B�V��f
��{D�#��#Yo3�BnxqH�F�7�d��qF�>��׳����� ��@%�� k�����}i
o��K�`-�[S�4����`fWIw�o����K,�ʒ����ϊ<��1'�R�s�V��[�%-��u0��CE��i����8������,��Ԡu9A�άa�˄H&N� �����?���;���.�<F��.� ���ë1�����v@�����tW���̵1���a�f��j'(�_�_��y�?-<�b�x��P��q��\�hN�º���5�
���ْ\Z�j�r��[_�J�M��u���ֹ�K�sB�U��U�k��*-%���ϛ6|�v����1��sP3LuY����L '���y�L��
���D�@��̖�O!DS�KŎ����7q6���$I�#��
?d��r1 �9�;"�%�O(��j���+�C~/�[�+k�������H<��(�mVRq��Ձ�m�Z;^��a�0��j�ȧ�Q���M�������=��}�%HVL�oO�-烥ϲ:��9ۜ�9c��~N�1���~�S �dW�LT)���5B�J���?�lN`T�E��x��~<��E��A�;xf�����
�5�{2~��G�I�臎��5�]~�ը1P�p��W<�� �^U���F�?��b_s4��s��c�:�*���9<�6drX�1w���,�a��o�s�rE~-�Jt����R��t�n'�(e�7�s{*��XBz��O��}�V�νpwD��[f��Z�v����������Jk����:wZ��m����3m2��L]ӊZYS����� ��M蛘�wr�����MŘz��0�|s:B���>Wz���<kL/�|F�K��2��?|N�vXУ=��5�C [��Ŀ\ ��ڹ�M�b#��h�@��h@J��7맂zQ��iTRr�n^�1G�s�����B@r��-_�w������;D/�mh�'�i�.�a'?`��q��K��@�����l�/J*@�Hv�Iq3���}�a%������j��L�����]Rui@>DGP�����>ʝx�U�Û���D7V=8_�4پ��l1��rL�� A��
����1��W��AM���mý<��V���$@�k�<�I�`+5Y������J|u��s���$�A���]�%R>8�ċqt����7�T ����3�Ht3��X>�%���<�C�Ӏ�$�{o/=�'�����۸E�tv��9��-�Gn�3A�M+W�z8 �s1��e0�3�T�@C�����5A B��y���w TtG㡫���c u|�M��hh�X����ߪ
����@�L�+I|(s��O����/W�
xV��/����z�.��L��܋m��(���F��Z'���>��S��nT�W�R�,�4O��UfEd�$� �eq����m��ϐ:�
$��y����˱� ��;e&�C�e�tI
��@9P��S��o�o&)r��g�}E%�u*j��<��y�Ѫ�L�&�:��Z�z���&�mp��_A��o%� w������c�]���kb�d� C�� � �'N�J���ar��T i4���4��2]�A@�p4vh�R��\�/@��m�o�����+���*��H��~tL�§zcH�GhK�c0��"�q�hZJ/���� ��͵c���nE��[�N����F;0�&ߢ8�BUeU2�4e"bZ���G ��S���7Kf��@bhX.�Ȗ�H������<&�e��e_{z���Rԏ�+ޭ 8S wyC:�β�,U>H��CWn��C=�3��T
��U��Rw�Um�K��2����o�����u��\�A(����B-_���+/�vu�4��?>h�|����+nZ��=�b�q��zA�]{OCA�;#Fec����ӏ�{W�!��~����Ebg�j/��1iTq�.2��̣��a���4c�'�t '���l���3q3�<Y���(,�l��{.���n�ֵq��/ K忼��6�\V��60�k�\���[tJ$��K��/-^��,*ئ�:�`�Ҥ�i�i;��U��&X ��(�
�~-����kv<��iL�_���w�I��hF�D��F�z2/!L�l��,�*�A]���hņR#��:�u4�K�a9j�B|٧��x��y�����2\�|�Q���:�%t,q�]0�����\x��I:�.���z���$������5M ��� ����}<�9�m�%۸J*��S�g��=F6���"��ܛ�[����oe+��fZG"ꐗ�˖�H�/6��f �\��*�������u�N ��2�*!�Fs�X��Q�2 �l�Q�J4���Ea�/U���ؚ�f���>'�����t;@=.ZT�Lý�����0�B��oi�JD����ýq�d�fJt���h����G .��]�N�;M�B"�>4 �ܫ����f�Gc�FwO��r�!��m�P�Q��My�(x�2��RjA{]λT������ً�su���*H>T����P5�2caF�Pu��u��(6�W�m�϶�
�[_(���
�>P:n���#�}3鐉q��'>�C�v�w��zI���9�9��y��(9)Ļ�'���+�O(J��_ �'�xR�A��2P�?m]�a��oYnx.��F�%9�0&�HT}|j-�:��N8[g��!�I(ܔo�A��~8�K^�d�QZ�lE>�׀ ��K�I.[P�>1Æ�5�w���3�������%������!�G�f�ɄP��ǔ2p�����Y�줅4� ��N���R�#�y9���$w7d�ҹv��h�A�ۢ�3�x�r���O��퀭i����jK��{��!��Akċ�զ`�B�>;����0.�xY���o����4��K�\�I�V�7O�}ɺ7_�w����l�,������7�8���N�$N>�x�g�'�w*��r���m�4��}X��n���r#�ZqH�D&�ީ.=.�a�E7�(/3Y
c^�>Ӓ��EkMR�S���V����yr�ٲ�VT�";A{j��+OtZb�8�Lm3��,�����D�����ic��Ǘ��b�bv]L�t�B96�
R��B}������S; ���dz]ң꥓���3Epw���w$�qtM��Q��Ab�?�l��!8�d�6ZG|�ю��zR������k�Կ6�]�3�qȁQ5��( �_�d���S��F��?e��8�0�>�shV�ǣ9]�Д�FZL�Z�z��s�ҿ�^� û�Q(?ŇA�DF�7�XLrL�s\��,�XGؒ���;��Q�b�U)���Bx�����}�Z����-�����?'���u�|{�&Z�~-Pw0>�� ��5ӹ��QAFQ��n��h�9���%
U(�|]��)<��)蚋OY�1/��J�|��G��p�ˣ7H�=��F3�t���X՜�� 5��~�L�6�.ȅ�?��Mث�.����o�����ƐK$�>�����p��sp�=�6���g��֟B�<E�����/͠�_�U�KO,5�W�O��<�э!%�B�[���F��s�L�P�2����AA��{< �6H<s�ŏ$�:�?z��E�)�ӛ.��3��e=Z��?(ݓ:�ڠ#z����#�|�� �>d%b�0��j|�C�-=���/�!��K�����0����ԇ�T�p�K����g�,�9��'�Z��0ڬ�гI-Vb5G��ꤚ��@��[z��5��v��#��LDHz��$s���Tuw3d�VQ�fz�P�, ��ۖ�dJ��Y����;WW�O4�����0q�BU�b��z�8�I� t����؉�"��iYXC�G⊪�ob���D/���y�IrnS�j�K�t R�M��mP���)��p�7������D��
��y��~����ٗ�9!N~�H�ȥ7>$'�|�}����}�il�a�ي�.<9
��B�7��|��G�Ն7#0����Zg�����?g��Sj˹P�|���dq�S����f��u��-p9�"i���NBZ��@'ς��4x�7�̰3�B�->�\�~�"���I�(�*�,U��$��?�k,)A����:�M�Q����[M��c{�ؾsZ2KN�_.j(�W�-���$w/F�Qp�������H#h�L����%����l_�s0�/d[�g��bF<��Wi��Wj�����{dAl�A���`���qn� ��s��^k
��&=�Ax�h��!&sv�4�+I*����)����q���-���[��t���7MC�����rGL�[,�c =Ǵ|֍�x����pl$�i`�#�hB�Y:?�P�ˮxB��w�|��� ˘B�x�= 0j6eAU*��m���F)�8a `\kQ�f/�13_�'���.~d�Rl����N4z�����Ϲ sx���'�s��5��9���u}��A)q����^���B�Q��'�5���0*T�TL����4�������PI�Q�{�ˉ�ώ0*�������݉���|n���-����o����W�)��
�u���"6&����EXR$e���_ĵ���RT
|lБ�Ro }=����#������t��|�6��KȽ� X�>"I[�M�ɇ�i�>��_(TeX�K*H��A�$ ��G!���G{/c��������~f\��U��V>)�;�Nv!�]Xkc�����(�D���˶ի���YU� Yԭ�i~���+���MyY��:
<��H���E/�f3r�it��<o�!y,W�1Ux�Y�ojԨ�c�M�Мn���3�0o@g��DF"�!���C�8B��1:�A��4س�o�;B�28oo���u�5"Js�ք�� ~6k�8����*U^U&��#�d$k���O@���n�DZH��-����ѣ� Dx�h�˒��<�'y¤g�䲄�,��������5^��wL��>��x 5b���4�������ҥ�,�㦧ݷ~�V��[ �<��"��ĕ���9��I�
`�A���Z�\4�(�~|�f�?8�|������cB>A"m�� u��)�N�f;� [B��C
Rd�Z~6�0���pXp
�<"�
ᛖ�
ՇAT~���6*�0�⡬y�τ�
���Y�RRp�)���
���(|}�J ��I�=�v�ZT)ߓ2�5��4�t�ѰS-�Ӌ8H�����.�����y*��F˖���
S�(h��$i�+�t��2���ks��.<���hH�;��ÕM��p}�3X� 5�[��d(u��u�D����iET>��5X̤[>�E��p�E4э$�L&�mjПw�vP�N�<�!���[u���gx$�A��$KNg�m�N\R�������%��E���>���qT��b��wp�a�a��h?��4b����R�{�!D�C�p���0��eFW�%w5���i�;_W����-#N�5��2D�� �5� 7����%��\P�U�|�*����0�������B)Mq�
��6��
��V��D�R<����@�ͮ�q\Vp�ˤS%�a��tb5�� ��KM�(��Dtֈ�҃�2������ǃl�0�W2�Š'4�>�wi��Ud�>+�h�B�9���2�z�ۮ�ܐԡ�f�oQcכ���$�B״�Dh`��>�%�p�^��ܷz��E�Y9
����P���S_�m��d�u`.��L`�����W>|3˸0�t}���]&&����9Q{�.�c�I�AƸSفKܱ�D<�"�d!ٙ���Y����}7��2mG�9ċ�!K�� �M��]�rx,cjx~ya�ׄ�Iݧ��F��x�D�䛿P���!s�Z�J6Ȧs�������F��
�
�߲�[�
���ݤ�aFǸ�_|48���Vc����?��y`t��|N�2�M��4�n �Ѡ�KJ����:}. ���:q2�Hi����χ�]�?�o���kZ
H��q�l_D���`��P (�|�!�tq���*�'�D�QM ����M��n��n���d�����F��)ђc�r�Ŀ��{�T��au�T�d4��٪�9���^&K�^�F}b$��wڿg^�4�Qv�(�&�M<��v�T�����Zh�7֦N��۔�u�`b�l����E�c�-x
��;2�Ao��t�"!�82����Ep��l@в=#���J�Ri'�+�N�D��W�[D
{d�z�� +����o����iA&��������2��Z@@'���/���>�Q78��{_��5��,�;t�`B�J=���Y҇���$���]g��C��mj�� �,l�k��1�#�m =SB�����w�|V��H�!r�|N���{�dΣ3��y�������Y+�=��'&(�6��M� ��tV�]%�ry����/D���ψa��
�,;MhA��Ѩ�%�$��E����1s�����!g�wXv]�������K�=���. S���&�u�%�5sտ'����o�F�����v�& T��ѹ5�A[�<A����c0�\lf<4d[ۭ��2�d�1�9ٳb����9�<����M��.��t�Z�;P
ll�<����@��k���M~9��M�ʹ�U� �Żǣ�,��p�i ��C�Z}�(TJd]�*/�ˆ�k���̑����)��p�
` ��u��f�-֤TUj�bA�3�����֜��ڥ��<
�B���n��7�P��=�*s��/�N�1lL��3e�M�Dcf�l{��W>�VTc(��'U�0��� �$(',��J�|��qǍo$&3���dٔ�v�� �&�UXw��o��� i-�C��fk����ڡB [�S�fG��C�"����@A
�"�_��=�?C�:��?ݜ���ɦ��{�����S�ܶ9�_��6!��kG����ew4��U-\+�I!���ͽ�=�s��C�RR�n
�X��Voiۂ�J��V}� ~�P��C�}�h�_i�vS)�8�
�P}
#�p���z�B�Qc>��f����@��%������G2�5�Bu ��b�A�Pc��t���/aT�HЋf^�}�hg�<Ы:������2i41�@{
ꂺ�����W�==D��J�M
g��x�5\3�v��5��Y�٨L���ә���R�HS��u� �xU�ڰ�O��8 �I{a�c �_��( �)�DZ�g� YZ
© 2016 - 2026 Red Hat, Inc.