<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>35930</bug_id>
          
          <creation_ts>2019-01-18 15:28:16 +0300</creation_ts>
          <short_desc>старый rpm не может обновить пакеты с конфликтами на себя, собранные с новым rpm, при dist-upgrade</short_desc>
          <delta_ts>2019-02-24 23:08:45 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>36180</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aleksei Nikiforov">darktemplaralt</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>aen</cc>
    
    <cc>at</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>rider</cc>
    
    <cc>vseleznv</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177584</commentid>
    <comment_count>0</comment_count>
      <attachid>7961</attachid>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2019-01-18 15:28:16 +0300</bug_when>
    <thetext>Created attachment 7961
pkgs.log

При попытке сделать dist-upgrade, apt-get предложил удалить пакеты libwiretap, wireshark-base и wireshark-qt5 несмотря на отсутствие конфликтов с какими-либо пакетами. Также до применения dist-upgrade установить эти пакеты apt отказался. Логи прилагаются.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177590</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-01-18 15:49:34 +0300</bug_when>
    <thetext>Надо сперва обновить rpm, а потом уже всё остальное?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177593</commentid>
    <comment_count>2</comment_count>
    <who name="AEN">aen</who>
    <bug_when>2019-01-18 15:56:02 +0300</bug_when>
    <thetext>(In reply to comment #1)
&gt; Надо сперва обновить rpm, а потом уже всё остальное?

Или сперва dist-upgrade в текущем бранче, а потом уже в новом стабильном.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177594</commentid>
    <comment_count>3</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2019-01-18 16:00:38 +0300</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; (In reply to comment #1)
&gt; &gt; Надо сперва обновить rpm, а потом уже всё остальное?
&gt; 
&gt; Или сперва dist-upgrade в текущем бранче, а потом уже в новом стабильном.

Но это Сизиф, который не обновлялся всего несколько дней.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177598</commentid>
    <comment_count>4</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-01-18 16:13:30 +0300</bug_when>
    <thetext>Теперь главное не повторить эту ошибку в p8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177600</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-01-18 16:31:47 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Теперь главное не повторить эту ошибку в p8.

Я не вижу других вариантов для p8.
Чем раньше rpm в p8 научится обрабатывать EVRD, тем лучше для p8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177605</commentid>
    <comment_count>6</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-01-18 17:12:39 +0300</bug_when>
    <thetext>Это особый случай, напоролись на конфликты. (Мы при обсуждении новой фичи это предвидели.)

[root@prodesk0 ~]# rpm -q rpm
rpm-4.13.0.1-alt1.x86_64
[root@prodesk0 ~]# apt-get install wireshark-qt5
Reading Package Lists... Done
Building Dependency Tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.

Since you only requested a single operation it is extremely likely that
the package is simply not installable and a bug report against
that package should be filed.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
  wireshark-qt5: Depends: wireshark-base (= 2.6.6-alt1:sisyphus+219299.100.2.1)
E: Broken packages
[root@prodesk0 ~]# rpm -Uhv /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm 
error: Failed dependencies:
	libwiretap &gt; 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64
[root@prodesk0 ~]#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177606</commentid>
    <comment_count>7</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-01-18 17:17:49 +0300</bug_when>
    <thetext>(In reply to comment #6)

&gt; [root@prodesk0 ~]# rpm -Uhv
&gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm
&gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm
&gt; /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm 
&gt; error: Failed dependencies:
&gt;     libwiretap &gt; 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64
&gt; [root@prodesk0 ~]#

Давайте конфликты на подпакеты вида &quot;&gt; %EVR&quot; переписывать в &quot;&gt; %EVR:D&quot;.

Тогда будет лучше совместимо со старым rpm, который не знает про disttag.

Про &quot;&lt; %EVR&quot; надо подумать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177607</commentid>
    <comment_count>8</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-01-18 17:28:59 +0300</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; [root@prodesk0 ~]# rpm -Uhv
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm 
&gt; &gt; error: Failed dependencies:
&gt; &gt;     libwiretap &gt; 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64
&gt; &gt; [root@prodesk0 ~]#
&gt; 
&gt; Давайте конфликты на подпакеты вида &quot;&gt; %EVR&quot; переписывать в &quot;&gt; %EVR:D&quot;.
&gt; 
&gt; Тогда будет лучше совместимо со старым rpm, который не знает про disttag.
&gt; 
&gt; Про &quot;&lt; %EVR&quot; надо подумать.

Ещё можно подмать про &quot;Requires: подпакет &gt;= %EVR&quot; -- но это неважно, потому что превратится в строгую зависимость. А строго &quot;Requires: подпакет &gt; %EVR&quot; всё равно бессмысленно. То же касается &quot;Requires: подпакет &lt;= %EVR&quot; и &quot;Requires: подпакет &lt; %EVR&quot;. Т.е. тут делать ничего не надо.

Нестрогий &quot;Conflicts: подпакет &gt;= %EVR&quot; или &quot;Conflicts: подпакет &lt;= %EVR&quot; выглядит тоже бессмысленно.

Obsoletes, кажется, должен требовать такого же подхода, как Conflicts.

Остаётся не обдуманным &quot;Conflicts: подпакет &lt; %EVR&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177608</commentid>
    <comment_count>9</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-01-18 17:38:20 +0300</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; [root@prodesk0 ~]# rpm -Uhv
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-qt5-2.6.6-alt1.x86_64.rpm
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm
&gt; &gt; /ALT/Sisyphus/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm 
&gt; &gt; error: Failed dependencies:
&gt; &gt;     libwiretap &gt; 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64
&gt; &gt; [root@prodesk0 ~]#
&gt; 
&gt; Давайте конфликты на подпакеты вида &quot;&gt; %EVR&quot; переписывать в &quot;&gt; %EVR:D&quot;.
&gt; 
&gt; Тогда будет лучше совместимо со старым rpm, который не знает про disttag.
&gt; 
&gt; Про &quot;&lt; %EVR&quot; надо подумать.

Ваня, спасибо. Ты прав.
Надо чуть чуть подправить и тогда будет хорошо. Сделайте, пожалуйста, для начала - в Sisyphus. wireshark я отправлю на rebuild (или сами отправляйте, релиз ему наверняка не надо увеличивать).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178503</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-02-13 05:02:43 +0300</bug_when>
    <thetext>Резюмирую: в Сизифе при переходе на disttags надо сперва обновить rpm, а потом уже делать apt-get dist-upgrade.  Что именно делать в бранчах, решат мантейнеры бранчей, но принципиально другого подхода я не вижу.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178506</commentid>
    <comment_count>11</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-02-13 07:48:08 +0300</bug_when>
    <thetext>ментейнеры бранчей не решат, к сожалению. Им надо помочь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178557</commentid>
    <comment_count>12</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-14 14:34:16 +0300</bug_when>
    <thetext>Чтобы облегчить ситуацию с обработкой Conflicts в новых пакетах (с disttag-ом в Provides) старым rpm (который не умеет сравнивать disttag-и), я предлагал начать с простой подмены значения макроса %EVR на E:V-R:D. (Причём он был заведён специально для указания межподпакетных завеисимостей, так что никакого обмана с точки зрения оговоренного смысла тут нет.)

Это отразится на сборке новых пакетов.

Если написано Conflicts: %name &lt; %EVR и Conflicts: %name &gt; %EVR, то подмена подействует.

Если %EVR в Conflicts не написано, то, конечно, не подействует. Какие есть ещё варианты похожих записей?

Если написано Conflicts: %name &lt; %version и Conflicts: %name &gt; %version, то всё и так будет работать, как раньше; помощи не требуется. (Просто менее жёсткие требования были записаны в пакет.)

Если написано Conflicts: %name &lt; %version-%release и Conflicts: %name &gt; %version-%release, то, конечно, потребуется ручное вмешательство мейнтейнера. (Но хоть в другом случае с %EVR можно будет прожить без ручного вмешательства.) При этом надо иметь в виду, что, к сожалению, с ввведением disttag-ов, даже при обрботке новым rpm эти конфликты становятся менее строгими, чем, возможно, задумано, так как не гарантируют больше отсутствие %name из других сборок (но с тем же %release), потому что disttag-и не сравнимы (не имеют порядка). (Это имеет решение в виде заведения common-подпакета.)

Посмотрим, как поведёт себя старый rpm с конфликтами, в которые вписали disttag.

Например, у меня есть набор тестов (в первую очередь на пересечение разных требований с Provides), написанный исходя из ожидаемой логики удовлетворения требований по задуманному алгоритму сравнения. (Это пояснение я пишу к тому, что какой-то интересный случай с Conflicts там может не присутствовать, хотя все возможные комбинации с и без disttag-а при столкновении с тем же релизом там есть.)

Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие поведения по сравнению с новым rpm, который можно считать образцом):

XFailed tests:
noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep &amp; future pkg )
installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep &amp; future pkg )
installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg)
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep )
installable_dummy_with_conflLessDisttag (elusive bogus future dep )
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )
installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep &amp; future pkg )
installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep &amp; future pkg)
make: Leaving directory `/usr/src/RPM/BUILD/rpminstall-tests-1.0&apos;
+ exit 0

Теперь прокомментирую случаи с кофликтами:

XFailed tests:

installable_virtDummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg)

Новый пакет disttag-ом, а в конфликте второго пакета написано &gt; E:V-R. (Релиз тот же самый).
Ожидалось, что он поставится, но со старым rpm не так. Такой случай и стал поводом к написанию этого bug report-а.

noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)

Конфлкт с равенством E:V-R -- не интересный на практике случай.

installable_virtDummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep &amp; future pkg)

Аналогично первому случаю (как в этом bug report-е). (Просто конфликт без эпохи. Эпоха пустая.)

noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)

Кофликт с равенством -- неинтересно.

installable_dummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg)
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep &amp; old pkg )

Конфликт &quot;меньше&quot; с disttag-ом (то, что я предлагаю), а пакет без disttag-а в Provides.

По логике сравнения они не должны были бы конфликтовать (т.е. установились бы вместе). Такая логика для нас, конечно, неидеальна, потому что здесь пакет из старой сборки. Но старый rpm даже в этом случае считает их конфликтующими и не устанавливает вместе. Что на может только порадовать. И ещё он вытеснил старый пакет по такому Obsoletes (последний тест).

installable_dummy_with_conflLessDisttag (elusive bogus future dep )
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )

То же самое, просто эпоха пустая в конфликте написана.

Вывод: либо поведение соответствует новой логике, либо поведение старого rpm при столкновении с новыми пакетами нам даже приятно (если там добавить disttag в %EVR).

Собираюсь вскоре сделать сборку с изменённым значением %EVR для Sisyphus.

Изучу ещё поведение &quot;старого&quot; rpm из архива Sisyphus таким же способом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178599</commentid>
    <comment_count>13</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-15 15:38:56 +0300</bug_when>
    <thetext>По крайней мере это сейчас сделаю

(In reply to comment #12)
&gt; Чтобы облегчить ситуацию с обработкой Conflicts в новых пакетах (с disttag-ом в
&gt; Provides) старым rpm (который не умеет сравнивать disttag-и), я предлагал
&gt; начать с простой подмены значения макроса %EVR на E:V-R:D. (Причём он был
&gt; заведён специально для указания межподпакетных завеисимостей, так что никакого
&gt; обмана с точки зрения оговоренного смысла тут нет.)

&gt; Собираюсь вскоре сделать сборку с изменённым значением %EVR для Sisyphus.
&gt; 
&gt; Изучу ещё поведение &quot;старого&quot; rpm из архива Sisyphus таким же способом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178642</commentid>
    <comment_count>14</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-17 03:34:35 +0300</bug_when>
    <thetext>(In reply to comment #12)

&gt; Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя
&gt; так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю
&gt; тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие
&gt; поведения по сравнению с новым rpm, который можно считать образцом):

Это был rpminstall-tests-1.0-alt2.M70P.1 . 

&gt; Изучу ещё поведение &quot;старого&quot; rpm из архива Sisyphus таким же способом.

Сделаем git checkout 1.0-alt2.M70P.1 и запустим в системе с rpm из архива и новым rpm-build (который умеет генерировать пакеты с disttag-ами -- поэтому тестов будет запущено побольше).

./makeme.sh
...
XFailed tests:
noninstallable_dummyDisttag_with_reqGreaterEpoch (external dep &amp; future pkg )
noninstallable_dummyDisttag_before_reqGreaterEpoch (external dep &amp; future pkg )
noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep &amp; future pkg)
installable_dummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_dummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_dummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg)
installable_dummyDisttag_with_reqEqualEpoch (external/strict-old-old dep &amp; future pkg )
installable_dummyDisttag_before_reqEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep &amp; future pkg )
installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_with_reqGreater (elusive external dep &amp; future pkg )
noninstallable_dummyDisttag_before_reqGreater (elusive external dep &amp; future pkg )
noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep &amp; future pkg)
installable_dummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_dummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_dummyDisttag_after_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep &amp; future pkg)
installable_dummyDisttag_with_reqEqual (elusive external/strict-old-old dep &amp; future pkg )
installable_dummyDisttag_before_reqEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep &amp; future pkg )
installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep &amp; old pkg )
noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg)
nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
obsoleted_dummyDisttag_before_obsolEqualEpochDisttag (unrealistic obsoleting disttag )
noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep )
installable_dummy_with_conflLessDisttag (elusive bogus future dep )
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep )
obsoleted_dummyDisttag_before_obsolEqualDisttag (unrealistic obsoleting disttag )
installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep &amp; future pkg )
installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep &amp; future pkg)
Failed tests:
noninstallable_provOnlyV_with_reqVR
noninstallable_provOnlyV_before_reqVR
installable_provOnlyV_with_conflVR
installable_provOnlyV_before_conflVR
make: *** [/home/user/wip/2019-01-rpm-disttag/rpminstall-tests/Makefile:29: all_tests] Error 1


Прокомментирую непрошедшие (с т.зр. логики нового rpm) тесты с конфликтами:

installable_dummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_dummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_dummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_with_conflGreaterEpoch (external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep &amp; future pkg)

Новый пакет с disttag-ом, а в конфликте второго пакета написано &gt; E:V-R. (Релиз тот же самый).
Ожидалось, что он поставится, но со старым rpm не так. Такой случай и стал поводом к написанию этого bug report-а.

noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)

Конфлкт с равенством E:V-R -- не интересный на практике случай.

noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep &amp; future pkg)

Конфлкт с равенством E:V-R -- не интересный на практике случай.

installable_dummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_dummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_dummyDisttag_after_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_with_conflGreater (elusive external dep &amp; future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep &amp; future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep &amp; future pkg)

Аналогично первому случаю (как в этом bug report-е). (Просто конфликт без
эпохи. Эпоха пустая.)

noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)

Конфлкт с равенством V-R -- не интересный на практике случай.

noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep &amp; future pkg )
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep &amp; future pkg)
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep &amp; future pkg)

Конфлкт с равенством V-R -- не интересный на практике случай.

installable_dummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep &amp; old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep &amp; old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep &amp; old pkg)
nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep &amp; old pkg )
nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep &amp; future pkg )
nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep &amp; future pkg )


Конфликт &quot;меньше&quot; с disttag-ом (то, что я предлагаю), а пакет без disttag-а в
Provides, т.е. из старой сборки, а не из этой.

По логике сравнения они не должны были бы конфликтовать (т.е. установились бы
вместе). Такая логика для нас, конечно, неидеальна, потому что здесь пакет из
старой сборки. Но старый rpm даже в этом случае считает их конфликтующими и не
устанавливает вместе. Что нас может только порадовать. И ещё он вытеснил старый
пакет по такому Obsoletes (последние тесты).


installable_dummy_with_conflLessDisttag (elusive bogus future dep )
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep )

То же самое, просто эпоха пустая в конфликте написана. Нас устраивает.

Выводы те же самые, что в предыдущем комментарии. Переопределение %EVR нам подойдёт ради обработки старым rpm-ом конфликтов в новых пакетах. А новый rpm их тоже нормально обработает, потому что наличие disttag-а после знака &quot;меньше&quot; или &quot;больше&quot; никак не влияет на результат сравнения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178643</commentid>
    <comment_count>15</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-17 04:19:45 +0300</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; 
&gt; &gt; Например, старый rpm (из t7) без поддержки сравнения disttag-ов поведёт себя
&gt; &gt; так http://git.altlinux.org/tasks/221387/build/300/x86_64/log -- перечисляю
&gt; &gt; тесты failed и xfailed с точки зрения логики нового rpm (т.е. где отличие
&gt; &gt; поведения по сравнению с новым rpm, который можно считать образцом):
&gt; 
&gt; Это был rpminstall-tests-1.0-alt2.M70P.1 . 
&gt; 
&gt; &gt; Изучу ещё поведение &quot;старого&quot; rpm из архива Sisyphus таким же способом.
&gt; 
&gt; Сделаем git checkout 1.0-alt2.M70P.1 и запустим в системе с rpm из архива и
&gt; новым rpm-build (который умеет генерировать пакеты с disttag-ами -- поэтому
&gt; тестов будет запущено побольше).

Это были:

$ rpm -q rpm rpm-build --lastchange
* Пт окт 05 2018 Gleb F-Malinovskiy &lt;glebfm@altlinux.org&gt; 4.13.0.1-alt4
- Add _allow_deps_with_beginning_dot macro to allow dependencies
  beginning with a dot character in spec file (vseleznv@).
* Чт янв 31 2019 Gleb F-Malinovskiy &lt;glebfm@altlinux.org&gt; 4.0.4-alt126
- imz@:
  + shell.req: correctly detect #!/bin/env bash (ALT#35376).
  + platform.in: completely expand %_libsuff (/usr/lib%nil was ugly).
- Fixed getopt(3) use in parameterized macros parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178747</commentid>
    <comment_count>16</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-19 17:25:59 +0300</bug_when>
    <thetext>Такой формат (E:V-R:D) не помогает с проблемой со старым rpm без улучшения apt-а (ещё не готового).

Вот проблема со старым форматом конфликтов:

[root@prodesk0 ~]# apt-repo
rpm [alt] file:/ALT Sisyphus/x86_64 classic
rpm [alt] file:/ALT Sisyphus/noarch classic
rpm [alt] file:/ALT Sisyphus/x86_64-i586 classic
[root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc}
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
  wireshark-doc: Conflicts: wireshark-base (&gt; 2.6.6-alt2)
E: Broken packages
[root@prodesk0 ~]# rpm -U /ALT/Sisyphus/noarch/RPMS.classic/wireshark-doc-2.6.6-alt2.noarch.rpm /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt2.x86_64.rpm 
error: Failed dependencies:
	wireshark-base &gt; 2.6.6-alt2 conflicts with wireshark-doc-2.6.6-alt2.noarch

Вот проблема с новым форматом при обработке apt-ом (но не старым rpm-ом, конечно, потому что это мы уже всё тут описали):

[root@prodesk0 ~]# apt-repo add 222028
[root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc}
Get:1 http://git.altlinux.org repo/222028/x86_64 release [549B]
Get:2 http://git.altlinux.org repo/222028/x86_64-i586 release [532B]
Fetched 1081B in 0s (46,2kB/s)
Get:1 http://git.altlinux.org repo/222028/x86_64/task pkglist [40,5kB]
Get:2 http://git.altlinux.org repo/222028/x86_64/task release [138B]
Get:3 http://git.altlinux.org repo/222028/x86_64-i586/task pkglist [8260B]
Get:4 http://git.altlinux.org repo/222028/x86_64-i586/task release [143B]
Fetched 49,0kB in 0s (633kB/s)
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
  wireshark-doc: Conflicts: wireshark-base (&lt; 2.6.6-alt2:sisyphus+222028.200.2.1)
E: Broken packages
[root@prodesk0 ~]# rpm -U /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-doc-2.6.6-alt2.noarch.rpm  /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-base-2.6.6-alt2.x86_64.rpm 
[root@prodesk0 ~]# echo $?
0
[root@prodesk0 ~]# 

Интересно, а новый формат Conflicts будет ли нормально обрабатываться apt-ом (всё ещё старым), если в эту систему поставить новый rpm?.. Сейчас проверю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178749</commentid>
    <comment_count>17</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-19 17:33:59 +0300</bug_when>
    <thetext>То было с rpm-4.13.0.1-alt4. Теперь попробуем с новым rpm-4.13.0.1-alt6.

Conflicts старого формата:

[root@prodesk0 ~]# apt-repo
rpm [alt] file:/ALT Sisyphus/x86_64 classic
rpm [alt] file:/ALT Sisyphus/noarch classic
rpm [alt] file:/ALT Sisyphus/x86_64-i586 classic
[root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc}
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  wireshark-base wireshark-doc
0 upgraded, 2 newly installed, 0 removed and 1543 not upgraded.
Need to get 0B/15,6MB of archives.
After unpacking 92,2MB of additional disk space will be used.
=== apt-printchanges ===
==wireshark-doc wireshark-base==
* Sat Jan 19 2019 Anton Farygin &lt;rider@altlinux.ru&gt; 2.6.6-alt2
- libwiretap included to wireshark-base package
- libwiretap-devel included to wireshark-devel package
Committing changes...
Preparing...                                                                                                                                                      #################################################################################################### [100%]
Updating / installing...
1: wireshark-base-2.6.6-alt2                                                                                                                                      #################################################################################################### [ 50%]
2: wireshark-doc-2.6.6-alt2                                                                                                                                       #################################################################################################### [100%]
Done.
[root@prodesk0 ~]# rpm -e wireshark-{base,doc}
[root@prodesk0 ~]# 

Тестируем установку с Conflicts нового предлагаемого формата:

[root@prodesk0 ~]# apt-repo add 222028
[root@prodesk0 ~]# apt-get update; apt-get install wireshark-{base,doc}
Get:1 http://git.altlinux.org repo/222028/x86_64 release [549B]
Get:2 http://git.altlinux.org repo/222028/x86_64-i586 release [532B]
Fetched 1081B in 0s (26,8kB/s)
Get:1 http://git.altlinux.org repo/222028/x86_64/task pkglist [40,5kB]
Get:2 http://git.altlinux.org repo/222028/x86_64/task release [138B]
Get:3 http://git.altlinux.org repo/222028/x86_64-i586/task pkglist [8260B]
Get:4 http://git.altlinux.org repo/222028/x86_64-i586/task release [143B]
Fetched 49,0kB in 0s (776kB/s)
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  wireshark-base wireshark-doc
0 upgraded, 2 newly installed, 0 removed and 1546 not upgraded.
Need to get 15,6MB of archives.
After unpacking 92,2MB of additional disk space will be used.
Get:1 http://git.altlinux.org repo/222028/x86_64/task wireshark-doc 2.6.6-alt2 [37,8kB]
Get:2 http://git.altlinux.org repo/222028/x86_64/task wireshark-base 2.6.6-alt2 [15,6MB]
Fetched 15,6MB in 1s (7890kB/s)           
=== apt-printchanges ===
==wireshark-doc wireshark-base==
* Sat Jan 19 2019 Anton Farygin &lt;rider@altlinux.ru&gt; 2.6.6-alt2
- libwiretap included to wireshark-base package
- libwiretap-devel included to wireshark-devel package
Committing changes...
Preparing...                                                                                                                                                      #################################################################################################### [100%]
Updating / installing...
1: wireshark-base-2.6.6-alt2                                                                                                                                      #################################################################################################### [ 50%]
2: wireshark-doc-2.6.6-alt2                                                                                                                                       #################################################################################################### [100%]

тоже работает.

Интересно, почему со старым rpm через apt не работало.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178751</commentid>
    <comment_count>18</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-02-19 20:24:31 +0300</bug_when>
    <thetext>В общем-то, я смотрел код apt некоторое время назад и подозреваю, чем это вызвано. (Отклонение от поведения собственно rpm.)

(In reply to comment #16)
&gt; Такой формат (E:V-R:D) не помогает с проблемой со старым rpm без улучшения
&gt; apt-а (ещё не готового).
&gt; 
&gt; Вот проблема со старым форматом конфликтов:

&gt; The following packages have unmet dependencies:
&gt;   wireshark-doc: Conflicts: wireshark-base (&gt; 2.6.6-alt2)
&gt; E: Broken packages
&gt; [root@prodesk0 ~]# rpm -U
&gt; /ALT/Sisyphus/noarch/RPMS.classic/wireshark-doc-2.6.6-alt2.noarch.rpm
&gt; /ALT/Sisyphus/x86_64/RPMS.classic/wireshark-base-2.6.6-alt2.x86_64.rpm 
&gt; error: Failed dependencies:
&gt;     wireshark-base &gt; 2.6.6-alt2 conflicts with wireshark-doc-2.6.6-alt2.noarch

Здесь всё так же, как в rpm: есть Provides вида wireshark-base = 2.6.6-alt2:DISTTAG и он при сравнении старым rpm по релизу больше.

&gt; Вот проблема с новым форматом при обработке apt-ом (но не старым rpm-ом,
&gt; конечно, потому что это мы уже всё тут описали):

&gt; The following packages have unmet dependencies:
&gt;   wireshark-doc: Conflicts: wireshark-base (&lt;
&gt; 2.6.6-alt2:sisyphus+222028.200.2.1)
&gt; E: Broken packages

Здесь поведение расходится со старым rpm.

Подозревая, что он динамисеки конструирует соответствующие как-бы-Provides по N-E:V-R пакета и проверяет их. Т.к. про disttag старый apt не знает, он в эту строку (&quot;VerStr&quot;) не добавляет disttag, и сравнивает её с требованием &quot;&lt; 2.6.6-alt2:sisyphus+222028.200.2.1&quot;. Старый rpm отвечает, что этот сконструированный VerStr действительно меньше, т.е. конфликтует.

&gt; [root@prodesk0 ~]# rpm -U
&gt; /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-doc-2.6.6-alt2.noarch.rpm
&gt; 
&gt; /home/user/MNT/team.alt/tasks/222028/build/200/x86_64/rpms/wireshark-base-2.6.6-alt2.x86_64.rpm 
&gt; [root@prodesk0 ~]# echo $?
&gt; 0
&gt; [root@prodesk0 ~]# 
&gt; 
&gt; Интересно, а новый формат Conflicts будет ли нормально обрабатываться apt-ом
&gt; (всё ещё старым), если в эту систему поставить новый rpm?.. Сейчас проверю.

С установкой нового rpm apt начинает прилично обрабатывать установку этого пакета, потому что строки, передаваемые для сравнения в rpm такие: одна не имеет disttag-а, а другая имеет. Но при сравнении &quot;&lt;&quot; disttag для нового rpm, конечно, не имеет значения, поэтому это условие не выполнится.

Получается, большого смысла менять значение %EVR сейчас нет. Это поможет обработке старым rpm, но не старым apt. Но apt задним числом мы не можем обучить disttag-ам. Можно посоветовать обновлять сначала apt и кзью

Если хочется изготавливать пакеты, совместимые со старым rpm и apt, получается, единственный выход -- делать общий подпакет, от которого все подпакеты будут зависеть (потом эти зависимости могут спотимизироваться).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178851</commentid>
    <comment_count>19</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2019-02-22 19:24:10 +0300</bug_when>
    <thetext>rpm-build-4.0.4-alt127 -&gt; sisyphus:

Tue Feb 19 2019 Ivan Zakharyaschev &lt;imz@altlinux&gt; 4.0.4-alt127
- Make &quot;new&quot; packages (with disttags) be treated better
  by the &quot;old&quot; disttag-unaware rpm in some cases; primarily those with
  &lt; and/or &gt; Conflicts on another subpackage. This form of Conflicts
  is used to ensure that no subpackages from different releases/builds
  get installed together. (A better way to express this is to add a
  common subpackage that all other subpackages depend on.) This change
  doesn&apos;t affect the way the &quot;new&quot; rpm would treat packages with such
  deps (ALT#35930):
  + rewrite &lt; and &gt; dependencies so that they have almost the same meaning when
    treated by old disttag-unaware tools;
  + %EVR macro (for intersubpackage deps) upgraded to include %disttag
    (given the other change, this is only useful for making the rare
    Conflicts: subpkg = %EVR more compatible with disttag-unaware tools).
- checkinstall subpackage added.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7961</attachid>
            <date>2019-01-18 15:28:16 +0300</date>
            <delta_ts>2019-01-18 15:28:16 +0300</delta_ts>
            <desc>pkgs.log</desc>
            <filename>pkgs.log</filename>
            <type>text/x-log</type>
            <size>14481</size>
            <attacher name="Aleksei Nikiforov">darktemplaralt</attacher>
            
              <data encoding="base64">IyBhcHQtZ2V0IGRpc3QtdXBncmFkZSAtb0RlYnVnOjpwa2dQcm9ibGVtUmVzb2x2ZXI9MQrQp9GC
0LXQvdC40LUg0YHQv9C40YHQutC+0LIg0L/QsNC60LXRgtC+0LIuLi4g0JfQsNCy0LXRgNGI0LXQ
vdC+CtCf0L7RgdGC0YDQvtC10L3QuNC1INC00LXRgNC10LLQsCDQt9Cw0LLQuNGB0LjQvNC+0YHR
gtC10LkuLi4g0JfQsNCy0LXRgNGI0LXQvdC+CtCf0L7QtNGB0YfQtdGCINC+0LHQvdC+0LLQu9C1
0L3QuNC5Li4uIFN0YXJ0aW5nClN0YXJ0aW5nIDIKSW52ZXN0aWdhdGluZyB3aXJlc2hhcmstYmFz
ZQpQYWNrYWdlIHdpcmVzaGFyay1iYXNlIGhhcyBicm9rZW4gZGVwIG9uIGxpYndpcmV0YXAKICBD
b25zaWRlcmluZyBsaWJ3aXJldGFwIDUgYXMgYSBzb2x1dGlvbiB0byB3aXJlc2hhcmstYmFzZSA0
CiAgUmUtSW5zdGF0ZWQgd2lyZXNoYXJrLWJhc2UKSW52ZXN0aWdhdGluZyB3aXJlc2hhcmstYmFz
ZQpQYWNrYWdlIHdpcmVzaGFyay1iYXNlIGhhcyBicm9rZW4gZGVwIG9uIGxpYndpcmV0YXAKICBD
b25zaWRlcmluZyBsaWJ3aXJldGFwIDUgYXMgYSBzb2x1dGlvbiB0byB3aXJlc2hhcmstYmFzZSA0
CiAgUmVtb3Zpbmcgd2lyZXNoYXJrLWJhc2UgcmF0aGVyIHRoYW4gY2hhbmdlIGxpYndpcmV0YXAK
SW52ZXN0aWdhdGluZyB3aXJlc2hhcmstcXQ1ClBhY2thZ2Ugd2lyZXNoYXJrLXF0NSBoYXMgYnJv
a2VuIGRlcCBvbiB3aXJlc2hhcmstYmFzZQogIENvbnNpZGVyaW5nIHdpcmVzaGFyay1iYXNlIDQg
YXMgYSBzb2x1dGlvbiB0byB3aXJlc2hhcmstcXQ1IDAKICAgIFJlaW5zdCBGYWlsZWQgYmVjYXVz
ZSBvZiB3aXJlc2hhcmstYmFzZQogIFJlbW92aW5nIHdpcmVzaGFyay1xdDUgcmF0aGVyIHRoYW4g
Y2hhbmdlIHdpcmVzaGFyay1iYXNlCkludmVzdGlnYXRpbmcgbGlid2lyZXRhcApQYWNrYWdlIGxp
YndpcmV0YXAgaGFzIGJyb2tlbiBkZXAgb24gd2lyZXNoYXJrLWJhc2UKICBDb25zaWRlcmluZyB3
aXJlc2hhcmstYmFzZSA0IGFzIGEgc29sdXRpb24gdG8gbGlid2lyZXRhcCA1CiAgICBSZWluc3Qg
RmFpbGVkIGJlY2F1c2Ugb2Ygd2lyZXNoYXJrLWJhc2UKICBSZW1vdmluZyBsaWJ3aXJldGFwIHJh
dGhlciB0aGFuIGNoYW5nZSB3aXJlc2hhcmstYmFzZQpEb25lCtCX0LDQstC10YDRiNC10L3QvgrQ
odC70LXQtNGD0Y7RidC40LUg0L/QsNC60LXRgtGLINCx0YPQtNGD0YIg0J7QkdCd0J7QktCb0JXQ
ndCrOgogIE1vZGVtTWFuYWdlciBjZXJ0bW9uZ2VyIGRtaWRlY29kZSBndGstdXBkYXRlLWljb24t
Y2FjaGUgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlLWRlYnVnaW5mbyBoYXNoZXIgaHVuc3BlbGwtZW4g
aHVuc3BlbGwtcnUtbGViZWRldiBpYmFjbSBrZXJuZWwtZG9jLXVuIGxpYkdMRVcyLjEgbGliY2Ry
IGxpYmNkci1kZWJ1Z2luZm8gbGliZ2FkdSBsaWJndGsrMyBsaWJndGsrMy1kZWJ1Z2luZm8gbGli
Z3RrKzMtZ2lyCiAgbGliZ3RrKzMtc2NoZW1hcyBsaWJpYnVtYWQgbGliaWJ2ZXJicyBsaWJtYXJp
YWRiMyBsaWJtbS1nbGliIGxpYnBpeG1hbiBsaWJwaXhtYW4tZGVidWdpbmZvIGxpYnBuZzE2IGxp
YnBuZzE2LWRlYnVnaW5mbyBsaWJycG0tZGV2ZWwgbGlicnBtNyBsaWJycG03LWRlYnVnaW5mbyBs
aWJycG1idWlsZDcgbGlicnVieSBtYWtlIG1hcmlhZGItY2xpZW50IG1hcmlhZGItY29tbW9uIG1h
cmlhZGItc2VydmVyCiAgbWFyaWFkYi1zZXJ2ZXItY29udHJvbCBtb2JpbGUtYnJvYWRiYW5kLXBy
b3ZpZGVyLWluZm8gcGNpaWRzIHBocDcgcGhwNy1saWJzIHBwYXBpLXBsdWdpbi1hZG9iZS1mbGFz
aCBweXRob24tbW9kdWxlLXB5dGVzdCBweXRob24tc3BoaW54LW9iamVjdHMuaW52IHB5dGhvbjMt
bW9kdWxlLXB5YXNuMSBweXRob24zLW1vZHVsZS1weWFzbjEtbW9kdWxlcyBweXRob24zLW1vZHVs
ZS1weXRlc3QgcmRtYS1jb3JlCiAgcnBtIHJwbS1idWlsZC1lcmxhbmcgcnBtLW1hY3Jvcy1lcmxh
bmcgcnBtc3BlYyBydWJ5IHJ1Ynktc3RkbGlicyBzaXN5cGh1c19jaGVjayBzcXVhc2hmcy10b29s
cwrQodC70LXQtNGD0Y7RidC40LUg0L/QsNC60LXRgtGLINCx0YPQtNGD0YIg0KPQlNCQ0JvQldCd
0Ks6CiAgbGlid2lyZXRhcCB3aXJlc2hhcmstYmFzZSB3aXJlc2hhcmstcXQ1CtCh0LvQtdC00YPR
jtGJ0LjQtSDQndCe0JLQq9CVINC/0LDQutC10YLRiyDQsdGD0LTRg9GCINGD0YHRgtCw0L3QvtCy
0LvQtdC90Ys6CiAgZ2VtIGdlbS1wb3dlci1hc3NlcnQgaHVuc3BlbGwtZW5fQVUgaHVuc3BlbGwt
ZW5fQ0EgaHVuc3BlbGwtZW5fR0IgaHVuc3BlbGwtZW5fVVMgaXNwZWxsLXJ1LWxlYmVkZXYtY29t
bW9uIHJ1YnktbWluaXRlc3QgcnVieS1uZXQtdGVsbmV0IHJ1YnktcmFrZSBydWJ5LXJkb2MgcnVi
eS10ZXN0LXVuaXQgcnVieS14bWxycGMgd29yZGxpc3QtY29tbW9uCjU1INCx0YPQtNC10YIg0L7Q
sdC90L7QstC70LXQvdC+LCAxNCDQvdC+0LLRi9GFINGD0YHRgtCw0L3QvtCy0LvQtdC90L4sIDMg
0L/QsNC60LXRgtC+0LIg0LHRg9C00LXRgiDRg9C00LDQu9C10L3QviDQuCAwINC90LUg0LHRg9C0
0LXRgiDQvtCx0L3QvtCy0LvQtdC90L4uCtCd0LXQvtCx0YXQvtC00LjQvNC+INC/0L7Qu9GD0YfQ
uNGC0YwgODYsNE1CINCw0YDRhdC40LLQvtCyLgrQn9C+0YHQu9C1INGA0LDRgdC/0LDQutC+0LLQ
utC4INCx0YPQtNC10YIg0L7RgdCy0L7QsdC+0LbQtNC10L3QviA3OSwxTUIg0LTQuNGB0LrQvtCy
0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQsC4K0J/RgNC+0LTQvtC70LbQuNGC0Yw/IFtZ
L25dIG4K0J/RgNC10YDQstCw0L3Qvi4KIyBhcHQtZ2V0IGluc3RhbGwgd2lyZXNoYXJrLXF0NQrQ
p9GC0LXQvdC40LUg0YHQv9C40YHQutC+0LIg0L/QsNC60LXRgtC+0LIuLi4g0JfQsNCy0LXRgNGI
0LXQvdC+CtCf0L7RgdGC0YDQvtC10L3QuNC1INC00LXRgNC10LLQsCDQt9Cw0LLQuNGB0LjQvNC+
0YHRgtC10LkuLi4g0JfQsNCy0LXRgNGI0LXQvdC+CtCd0LXQutC+0YLQvtGA0YvQtSDQv9Cw0LrQ
tdGC0Ysg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0L3QtdCy0L7Qt9C80L7QttC90L4uINCt0YLQviDQ
vNC+0LbQtdGCINC+0LfQvdCw0YfQsNGC0YwsINGH0YLQviDQktGLCtC/0L7RgtGA0LXQsdC+0LLQ
sNC70Lgg0L3QtdCy0L7Qt9C80L7QttC90L7Qs9C+LCDQu9C40LHQviDQv9C+0LvRjNC30YPQtdGC
0LXRgdGMINC90LXRgdGC0LDQsdC40LvRjNC90YvQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10Lwu
CtCn0LDRgdGC0Ywg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQv9Cw0LrQtdGC0L7QsiDQu9C40LHQ
viDQtdGJ0ZEg0L3QtSDRgdC+0LfQtNCw0L3QsCwg0LvQuNCx0L4g0LHRi9C70LAg0YPQtNCw0LvQ
tdC90LAK0LjQtyDQutCw0YLQsNC70L7Qs9CwICfQktGF0L7QtNGP0YnQuNC1Jy4KCtCi0LDQuiDQ
utCw0Log0LTQu9GPINCy0YvQv9C+0LvQvdC10L3QuNGPINCS0LDRiNC10LPQviDQt9Cw0L/RgNC+
0YHQsCDQtNC+0YHRgtCw0YLQvtGH0L3QviDQvtC00L3QvtC5INC+0L/QtdGA0LDRhtC40LgsINGC
0L4K0YHQutC+0YDQtdC1INCy0YHQtdCz0L4g0Y3RgtC+0YIg0L/QsNC60LXRgiDQv9GA0L7RgdGC
0L4g0L3QtdCy0L7Qt9C80L7QttC90L4g0YPRgdGC0LDQvdC+0LLQuNGC0YwuINCh0L7QvtCx0YnQ
uNGC0LUsINC/0L7QttCw0LvRg9C50YHRgtCwLArQvtCxINGN0YLQvtC8INC60LDQuiDQviDQvdCw
0LnQtNC10L3QvdC+0Lkg0L7RiNC40LHQutC1INCyINC/0LDQutC10YLQtS4K0K3RgtC4INGB0LLQ
tdC00LXQvdC40Y8g0LzQvtCz0YPRgiDQv9C+0LzQvtGH0Ywg0L3QsNC50YLQuCDQstGL0YXQvtC0
INC40Lcg0YHQuNGC0YPQsNGG0LjQuDoKCtCh0LvQtdC00YPRjtGJ0LjQtSDQv9Cw0LrQtdGC0Ysg
0LjQvNC10Y7RgiDQvdC10YPQtNC+0LLQu9C10YLQstC+0YDQtdC90L3Ri9C1INC30LDQstC40YHQ
uNC80L7RgdGC0Lg6CiAgd2lyZXNoYXJrLXF0NTog0KLRgNC10LHRg9C10YI6IHdpcmVzaGFyay1i
YXNlICg9IDIuNi42LWFsdDE6c2lzeXBodXMrMjE5Mjk5LjEwMC4yLjEpCkU6INCY0LfQstC40L3Q
uNGC0LUsIGDQsdC40YLRi9C1JyDQv9Cw0LrQtdGC0YsKIyBhcHQtZ2V0IGluc3RhbGwgd2lyZXNo
YXJrLWJhc2UK0KfRgtC10L3QuNC1INGB0L/QuNGB0LrQvtCyINC/0LDQutC10YLQvtCyLi4uINCX
0LDQstC10YDRiNC10L3QvgrQn9C+0YHRgtGA0L7QtdC90LjQtSDQtNC10YDQtdCy0LAg0LfQsNCy
0LjRgdC40LzQvtGB0YLQtdC5Li4uINCX0LDQstC10YDRiNC10L3QvgrQndC10LrQvtGC0L7RgNGL
0LUg0L/QsNC60LXRgtGLINGD0YHRgtCw0L3QvtCy0LjRgtGMINC90LXQstC+0LfQvNC+0LbQvdC+
LiDQrdGC0L4g0LzQvtC20LXRgiDQvtC30L3QsNGH0LDRgtGMLCDRh9GC0L4g0JLRiwrQv9C+0YLR
gNC10LHQvtCy0LDQu9C4INC90LXQstC+0LfQvNC+0LbQvdC+0LPQviwg0LvQuNCx0L4g0L/QvtC7
0YzQt9GD0LXRgtC10YHRjCDQvdC10YHRgtCw0LHQuNC70YzQvdGL0Lwg0YDQtdC/0L7Qt9C40YLQ
vtGA0LjQtdC8LgrQp9Cw0YHRgtGMINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0L/QsNC60LXRgtC+
0LIg0LvQuNCx0L4g0LXRidGRINC90LUg0YHQvtC30LTQsNC90LAsINC70LjQsdC+INCx0YvQu9Cw
INGD0LTQsNC70LXQvdCwCtC40Lcg0LrQsNGC0LDQu9C+0LPQsCAn0JLRhdC+0LTRj9GJ0LjQtScu
CgrQotCw0Log0LrQsNC6INC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyDQktCw0YjQtdCz0L4g
0LfQsNC/0YDQvtGB0LAg0LTQvtGB0YLQsNGC0L7Rh9C90L4g0L7QtNC90L7QuSDQvtC/0LXRgNCw
0YbQuNC4LCDRgtC+CtGB0LrQvtGA0LXQtSDQstGB0LXQs9C+INGN0YLQvtGCINC/0LDQutC10YIg
0L/RgNC+0YHRgtC+INC90LXQstC+0LfQvNC+0LbQvdC+INGD0YHRgtCw0L3QvtCy0LjRgtGMLiDQ
odC+0L7QsdGJ0LjRgtC1LCDQv9C+0LbQsNC70YPQudGB0YLQsCwK0L7QsSDRjdGC0L7QvCDQutCw
0Log0L4g0L3QsNC50LTQtdC90L3QvtC5INC+0YjQuNCx0LrQtSDQsiDQv9Cw0LrQtdGC0LUuCtCt
0YLQuCDRgdCy0LXQtNC10L3QuNGPINC80L7Qs9GD0YIg0L/QvtC80L7Rh9GMINC90LDQudGC0Lgg
0LLRi9GF0L7QtCDQuNC3INGB0LjRgtGD0LDRhtC40Lg6CgrQodC70LXQtNGD0Y7RidC40LUg0L/Q
sNC60LXRgtGLINC40LzQtdGO0YIg0L3QtdGD0LTQvtCy0LvQtdGC0LLQvtGA0LXQvdC90YvQtSDQ
t9Cw0LLQuNGB0LjQvNC+0YHRgtC4OgogIHdpcmVzaGFyay1iYXNlOiDQotGA0LXQsdGD0LXRgjog
bGlid2lyZXRhcCAoPSAyLjYuNi1hbHQxOnNpc3lwaHVzKzIxOTI5OS4xMDAuMi4xKQpFOiDQmNC3
0LLQuNC90LjRgtC1LCBg0LHQuNGC0YvQtScg0L/QsNC60LXRgtGLCiMgYXB0LWdldCBpbnN0YWxs
IGxpYndpcmV0YXAK0KfRgtC10L3QuNC1INGB0L/QuNGB0LrQvtCyINC/0LDQutC10YLQvtCyLi4u
INCX0LDQstC10YDRiNC10L3QvgrQn9C+0YHRgtGA0L7QtdC90LjQtSDQtNC10YDQtdCy0LAg0LfQ
sNCy0LjRgdC40LzQvtGB0YLQtdC5Li4uINCX0LDQstC10YDRiNC10L3QvgrQndC10LrQvtGC0L7R
gNGL0LUg0L/QsNC60LXRgtGLINGD0YHRgtCw0L3QvtCy0LjRgtGMINC90LXQstC+0LfQvNC+0LbQ
vdC+LiDQrdGC0L4g0LzQvtC20LXRgiDQvtC30L3QsNGH0LDRgtGMLCDRh9GC0L4g0JLRiwrQv9C+
0YLRgNC10LHQvtCy0LDQu9C4INC90LXQstC+0LfQvNC+0LbQvdC+0LPQviwg0LvQuNCx0L4g0L/Q
vtC70YzQt9GD0LXRgtC10YHRjCDQvdC10YHRgtCw0LHQuNC70YzQvdGL0Lwg0YDQtdC/0L7Qt9C4
0YLQvtGA0LjQtdC8LgrQp9Cw0YHRgtGMINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0L/QsNC60LXR
gtC+0LIg0LvQuNCx0L4g0LXRidGRINC90LUg0YHQvtC30LTQsNC90LAsINC70LjQsdC+INCx0YvQ
u9CwINGD0LTQsNC70LXQvdCwCtC40Lcg0LrQsNGC0LDQu9C+0LPQsCAn0JLRhdC+0LTRj9GJ0LjQ
tScuCgrQotCw0Log0LrQsNC6INC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyDQktCw0YjQtdCz
0L4g0LfQsNC/0YDQvtGB0LAg0LTQvtGB0YLQsNGC0L7Rh9C90L4g0L7QtNC90L7QuSDQvtC/0LXR
gNCw0YbQuNC4LCDRgtC+CtGB0LrQvtGA0LXQtSDQstGB0LXQs9C+INGN0YLQvtGCINC/0LDQutC1
0YIg0L/RgNC+0YHRgtC+INC90LXQstC+0LfQvNC+0LbQvdC+INGD0YHRgtCw0L3QvtCy0LjRgtGM
LiDQodC+0L7QsdGJ0LjRgtC1LCDQv9C+0LbQsNC70YPQudGB0YLQsCwK0L7QsSDRjdGC0L7QvCDQ
utCw0Log0L4g0L3QsNC50LTQtdC90L3QvtC5INC+0YjQuNCx0LrQtSDQsiDQv9Cw0LrQtdGC0LUu
CtCt0YLQuCDRgdCy0LXQtNC10L3QuNGPINC80L7Qs9GD0YIg0L/QvtC80L7Rh9GMINC90LDQudGC
0Lgg0LLRi9GF0L7QtCDQuNC3INGB0LjRgtGD0LDRhtC40Lg6CgrQodC70LXQtNGD0Y7RidC40LUg
0L/QsNC60LXRgtGLINC40LzQtdGO0YIg0L3QtdGD0LTQvtCy0LvQtdGC0LLQvtGA0LXQvdC90YvQ
tSDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4OgogIGxpYndpcmV0YXA6INCi0YDQtdCx0YPQtdGCOiB3
aXJlc2hhcmstYmFzZSAoPSAyLjYuNi1hbHQxOnNpc3lwaHVzKzIxOTI5OS4xMDAuMi4xKQpFOiDQ
mNC30LLQuNC90LjRgtC1LCBg0LHQuNGC0YvQtScg0L/QsNC60LXRgtGLCiMgYXB0LWdldCBpbnN0
YWxsIHdpcmVzaGFyay1iYXNlCtCn0YLQtdC90LjQtSDRgdC/0LjRgdC60L7QsiDQv9Cw0LrQtdGC
0L7Qsi4uLiDQl9Cw0LLQtdGA0YjQtdC90L4K0J/QvtGB0YLRgNC+0LXQvdC40LUg0LTQtdGA0LXQ
stCwINC30LDQstC40YHQuNC80L7RgdGC0LXQuS4uLiDQl9Cw0LLQtdGA0YjQtdC90L4K0J3QtdC6
0L7RgtC+0YDRi9C1INC/0LDQutC10YLRiyDRg9GB0YLQsNC90L7QstC40YLRjCDQvdC10LLQvtC3
0LzQvtC20L3Qvi4g0K3RgtC+INC80L7QttC10YIg0L7Qt9C90LDRh9Cw0YLRjCwg0YfRgtC+INCS
0YsK0L/QvtGC0YDQtdCx0L7QstCw0LvQuCDQvdC10LLQvtC30LzQvtC20L3QvtCz0L4sINC70LjQ
sdC+INC/0L7Qu9GM0LfRg9C10YLQtdGB0Ywg0L3QtdGB0YLQsNCx0LjQu9GM0L3Ri9C8INGA0LXQ
v9C+0LfQuNGC0L7RgNC40LXQvC4K0KfQsNGB0YLRjCDQvdC10L7QsdGF0L7QtNC40LzRi9GFINC/
0LDQutC10YLQvtCyINC70LjQsdC+INC10YnRkSDQvdC1INGB0L7Qt9C00LDQvdCwLCDQu9C40LHQ
viDQsdGL0LvQsCDRg9C00LDQu9C10L3QsArQuNC3INC60LDRgtCw0LvQvtCz0LAgJ9CS0YXQvtC0
0Y/RidC40LUnLgoK0KLQsNC6INC60LDQuiDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0JLQ
sNGI0LXQs9C+INC30LDQv9GA0L7RgdCwINC00L7RgdGC0LDRgtC+0YfQvdC+INC+0LTQvdC+0Lkg
0L7Qv9C10YDQsNGG0LjQuCwg0YLQvgrRgdC60L7RgNC10LUg0LLRgdC10LPQviDRjdGC0L7RgiDQ
v9Cw0LrQtdGCINC/0YDQvtGB0YLQviDQvdC10LLQvtC30LzQvtC20L3QviDRg9GB0YLQsNC90L7Q
stC40YLRjC4g0KHQvtC+0LHRidC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAsCtC+0LEg0Y3R
gtC+0Lwg0LrQsNC6INC+INC90LDQudC00LXQvdC90L7QuSDQvtGI0LjQsdC60LUg0LIg0L/QsNC6
0LXRgtC1LgrQrdGC0Lgg0YHQstC10LTQtdC90LjRjyDQvNC+0LPRg9GCINC/0L7QvNC+0YfRjCDQ
vdCw0LnRgtC4INCy0YvRhdC+0LQg0LjQtyDRgdC40YLRg9Cw0YbQuNC4OgoK0KHQu9C10LTRg9GO
0YnQuNC1INC/0LDQutC10YLRiyDQuNC80LXRjtGCINC90LXRg9C00L7QstC70LXRgtCy0L7RgNC1
0L3QvdGL0LUg0LfQsNCy0LjRgdC40LzQvtGB0YLQuDoKICB3aXJlc2hhcmstYmFzZTog0KLRgNC1
0LHRg9C10YI6IGxpYndpcmV0YXAgKD0gMi42LjYtYWx0MTpzaXN5cGh1cysyMTkyOTkuMTAwLjIu
MSkKRTog0JjQt9Cy0LjQvdC40YLQtSwgYNCx0LjRgtGL0LUnINC/0LDQutC10YLRiwojIGFwdC1n
ZXQgaW5zdGFsbCBycG0K0KfRgtC10L3QuNC1INGB0L/QuNGB0LrQvtCyINC/0LDQutC10YLQvtCy
Li4uINCX0LDQstC10YDRiNC10L3QvgrQn9C+0YHRgtGA0L7QtdC90LjQtSDQtNC10YDQtdCy0LAg
0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5Li4uINCX0LDQstC10YDRiNC10L3QvgrQodC70LXQtNGD
0Y7RidC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQv9Cw0LrQtdGC0Ysg0LHRg9C0
0YPRgiDRg9GB0YLQsNC90L7QstC70LXQvdGLOgogIGxpYnJwbS1kZXZlbCBsaWJycG03IGxpYnJw
bTctZGVidWdpbmZvIGxpYnJwbWJ1aWxkNyBycG1zcGVjCtCh0LvQtdC00YPRjtGJ0LjQtSDQv9Cw
0LrQtdGC0Ysg0LHRg9C00YPRgiDQntCR0J3QntCS0JvQldCd0Ks6CiAgbGlicnBtLWRldmVsIGxp
YnJwbTcgbGlicnBtNy1kZWJ1Z2luZm8gbGlicnBtYnVpbGQ3IHJwbSBycG1zcGVjCjYg0LHRg9C0
0LXRgiDQvtCx0L3QvtCy0LvQtdC90L4sIDAg0L3QvtCy0YvRhSDRg9GB0YLQsNC90L7QstC70LXQ
vdC+LCAwINC/0LDQutC10YLQvtCyINCx0YPQtNC10YIg0YPQtNCw0LvQtdC90L4g0LggNTIg0L3Q
tSDQsdGD0LTQtdGCINC+0LHQvdC+0LLQu9C10L3Qvi4K0J3QtdC+0LHRhdC+0LTQuNC80L4g0L/Q
vtC70YPRh9C40YLRjCAyMjc3a0Ig0LDRgNGF0LjQstC+0LIuCtCf0L7RgdC70LUg0YDQsNGB0L/Q
sNC60L7QstC60Lgg0L/QvtGC0YDQtdCx0YPQtdGC0YHRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM
0L3QviA1MzVrQiDQtNC40YHQutC+0LLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwLgrQ
n9GA0L7QtNC+0LvQttC40YLRjD8gW1kvbl0geQrQn9C+0LvRg9GH0LXQvdC+OiAxIGh0dHA6Ly9m
dHAuYWx0bGludXgub3JnL3B1Yi9kaXN0cmlidXRpb25zL0FMVExpbnV4LyB4ODZfNjQvZGVidWdp
bmZvIGxpYnJwbTctZGVidWdpbmZvIDQuMTMuMC4xLWFsdDUgWzExNTFrQl0K0J/QvtC70YPRh9C1
0L3QvjogMiBodHRwOi8vZnRwLmFsdGxpbnV4Lm9yZy9wdWIvZGlzdHJpYnV0aW9ucy9BTFRMaW51
eC8geDg2XzY0L2NsYXNzaWMgbGlicnBtLWRldmVsIDQuMTMuMC4xLWFsdDUgWzE0NWtCXQrQn9C+
0LvRg9GH0LXQvdC+OiAzIGh0dHA6Ly9mdHAuYWx0bGludXgub3JnL3B1Yi9kaXN0cmlidXRpb25z
L0FMVExpbnV4LyB4ODZfNjQvY2xhc3NpYyBycG1zcGVjIDQuMTMuMC4xLWFsdDUgWzg0LDRrQl0K
0J/QvtC70YPRh9C10L3QvjogNCBodHRwOi8vZnRwLmFsdGxpbnV4Lm9yZy9wdWIvZGlzdHJpYnV0
aW9ucy9BTFRMaW51eC8geDg2XzY0L2NsYXNzaWMgbGlicnBtYnVpbGQ3IDQuMTMuMC4xLWFsdDUg
WzEzNWtCXQrQn9C+0LvRg9GH0LXQvdC+OiA1IGh0dHA6Ly9mdHAuYWx0bGludXgub3JnL3B1Yi9k
aXN0cmlidXRpb25zL0FMVExpbnV4LyB4ODZfNjQvY2xhc3NpYyBsaWJycG03IDQuMTMuMC4xLWFs
dDUgWzMzOWtCXQrQn9C+0LvRg9GH0LXQvdC+OiA2IGh0dHA6Ly9mdHAuYWx0bGludXgub3JnL3B1
Yi9kaXN0cmlidXRpb25zL0FMVExpbnV4LyB4ODZfNjQvY2xhc3NpYyBycG0gNC4xMy4wLjEtYWx0
NSBbNDIya0JdCtCf0L7Qu9GD0YfQtdC90L4gMjI3N2tCINC30LAgMHMgKDcxMzlrQi9zKS4K0KHQ
vtCy0LXRgNGI0LDQtdC8INC40LfQvNC10L3QtdC90LjRjy4uLgrQn9C+0LTQs9C+0YLQvtCy0LrQ
sC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWzEwMCVd
CtCe0LHQvdC+0LLQu9C10L3QuNC1IC8g0YPRgdGC0LDQvdC+0LLQutCwLi4uCiAxOiBsaWJycG03
LTQuMTMuMC4xLWFsdDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFsgIDglXQog
MjogbGlicnBtYnVpbGQ3LTQuMTMuMC4xLWFsdDUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyBbIDE3JV0KIDM6IHJwbS00LjEzLjAuMS1hbHQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMgWyAyNSVdCiA0OiBsaWJycG0tZGV2ZWwtNC4xMy4wLjEtYWx0NSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIFsgMzMlXQogNTogcnBtc3BlYy00LjEzLjAuMS1hbHQ1ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBbIDQyJV0KIDY6IGxpYnJwbTctZGVidWdp
bmZvLTQuMTMuMC4xLWFsdDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWyA1MCVdCtCe0YfQuNGB
0YLQutCwIC8g0YPQtNCw0LvQtdC90LjQtS4uLiAKIDc6IGxpYnJwbS1kZXZlbC00LjEzLjAuMS1h
bHQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWyA1OCVdCiA4OiBycG0tNC4xMy4wLjEt
YWx0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFsgNjclXQogOTogcnBt
c3BlYy00LjEzLjAuMS1hbHQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBbIDc1
JV0KMTA6IGxpYnJwbWJ1aWxkNy00LjEzLjAuMS1hbHQ0ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgWyA4MyVdCjExOiBsaWJycG03LWRlYnVnaW5mby00LjEzLjAuMS1hbHQ0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIFsgOTIlXQoxMjogbGlicnBtNy00LjEzLjAuMS1hbHQ0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBbMTAwJV0K0JfQsNCy0LXRgNGI0LXQvdC+LgojIHJl
YnVpbGRpbmcgZGF0YWJhc2UgL3Zhci9saWIvcnBtIHN0YXJ0ZWQKcmVidWlsZGluZyBkYXRhYmFz
ZSAvdmFyL2xpYi9ycG0gZmluaXNoZWQKCiMgYXB0LWdldCBkaXN0LXVwZ3JhZGUgLW9EZWJ1Zzo6
cGtnUHJvYmxlbVJlc29sdmVyPTEK0KfRgtC10L3QuNC1INGB0L/QuNGB0LrQvtCyINC/0LDQutC1
0YLQvtCyLi4uINCX0LDQstC10YDRiNC10L3QvgrQn9C+0YHRgtGA0L7QtdC90LjQtSDQtNC10YDQ
tdCy0LAg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5Li4uINCX0LDQstC10YDRiNC10L3QvgrQn9C+
0LTRgdGH0LXRgiDQvtCx0L3QvtCy0LvQtdC90LjQuS4uLiBTdGFydGluZwpTdGFydGluZyAyCkRv
bmUK0JfQsNCy0LXRgNGI0LXQvdC+CtCh0LvQtdC00YPRjtGJ0LjQtSDQv9Cw0LrQtdGC0Ysg0LHR
g9C00YPRgiDQntCR0J3QntCS0JvQldCd0Ks6CiAgTW9kZW1NYW5hZ2VyIGNlcnRtb25nZXIgZG1p
ZGVjb2RlIGd0ay11cGRhdGUtaWNvbi1jYWNoZSBndGstdXBkYXRlLWljb24tY2FjaGUtZGVidWdp
bmZvIGhhc2hlciBodW5zcGVsbC1lbiBodW5zcGVsbC1ydS1sZWJlZGV2IGliYWNtIGtlcm5lbC1k
b2MtdW4gbGliR0xFVzIuMSBsaWJjZHIgbGliY2RyLWRlYnVnaW5mbyBsaWJnYWR1IGxpYmd0aysz
IGxpYmd0ayszLWRlYnVnaW5mbyBsaWJndGsrMy1naXIKICBsaWJndGsrMy1zY2hlbWFzIGxpYmli
dW1hZCBsaWJpYnZlcmJzIGxpYm1hcmlhZGIzIGxpYm1tLWdsaWIgbGlicGl4bWFuIGxpYnBpeG1h
bi1kZWJ1Z2luZm8gbGlicG5nMTYgbGlicG5nMTYtZGVidWdpbmZvIGxpYnJ1YnkgbGlid2lyZXRh
cCBtYWtlIG1hcmlhZGItY2xpZW50IG1hcmlhZGItY29tbW9uIG1hcmlhZGItc2VydmVyIG1hcmlh
ZGItc2VydmVyLWNvbnRyb2wKICBtb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8gcGNpaWRz
IHBocDcgcGhwNy1saWJzIHBwYXBpLXBsdWdpbi1hZG9iZS1mbGFzaCBweXRob24tbW9kdWxlLXB5
dGVzdCBweXRob24tc3BoaW54LW9iamVjdHMuaW52IHB5dGhvbjMtbW9kdWxlLXB5YXNuMSBweXRo
b24zLW1vZHVsZS1weWFzbjEtbW9kdWxlcyBweXRob24zLW1vZHVsZS1weXRlc3QgcmRtYS1jb3Jl
IHJwbS1idWlsZC1lcmxhbmcKICBycG0tbWFjcm9zLWVybGFuZyBydWJ5IHJ1Ynktc3RkbGlicyBz
aXN5cGh1c19jaGVjayBzcXVhc2hmcy10b29scyB3aXJlc2hhcmstYmFzZSB3aXJlc2hhcmstcXQ1
CtCh0LvQtdC00YPRjtGJ0LjQtSDQndCe0JLQq9CVINC/0LDQutC10YLRiyDQsdGD0LTRg9GCINGD
0YHRgtCw0L3QvtCy0LvQtdC90Ys6CiAgZ2VtIGdlbS1wb3dlci1hc3NlcnQgaHVuc3BlbGwtZW5f
QVUgaHVuc3BlbGwtZW5fQ0EgaHVuc3BlbGwtZW5fR0IgaHVuc3BlbGwtZW5fVVMgaXNwZWxsLXJ1
LWxlYmVkZXYtY29tbW9uIHJ1YnktbWluaXRlc3QgcnVieS1uZXQtdGVsbmV0IHJ1YnktcmFrZSBy
dWJ5LXJkb2MgcnVieS10ZXN0LXVuaXQgcnVieS14bWxycGMgd29yZGxpc3QtY29tbW9uCjUyINCx
0YPQtNC10YIg0L7QsdC90L7QstC70LXQvdC+LCAxNCDQvdC+0LLRi9GFINGD0YHRgtCw0L3QvtCy
0LvQtdC90L4sIDAg0L/QsNC60LXRgtC+0LIg0LHRg9C00LXRgiDRg9C00LDQu9C10L3QviDQuCAw
INC90LUg0LHRg9C00LXRgiDQvtCx0L3QvtCy0LvQtdC90L4uCtCd0LXQvtCx0YXQvtC00LjQvNC+
INC/0L7Qu9GD0YfQuNGC0YwgMTAzTUIg0LDRgNGF0LjQstC+0LIuCtCf0L7RgdC70LUg0YDQsNGB
0L/QsNC60L7QstC60Lgg0L/QvtGC0YDQtdCx0YPQtdGC0YHRjyDQtNC+0L/QvtC70L3QuNGC0LXQ
u9GM0L3QviAyMCwwTUIg0LTQuNGB0LrQvtCy0L7Qs9C+INC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQ
sC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>