<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>363582</bug_id>
          
          <creation_ts>2016-05-27 09:20:08 +0000</creation_ts>
          <short_desc>It would be nice for XMI file to have stable format.</short_desc>
          <delta_ts>2021-03-09 07:36:14 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>umbrello</product>
          <component>general</component>
          <version>2.19.1 (KDE Applications 16.04.1)</version>
          <rep_platform>Arch Linux</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>373932</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michał Walenciak">Kicer86</reporter>
          <assigned_to name="Oliver Kellogg">okellogg</assigned_to>
          <cc>christian-david</cc>
    
    <cc>code</cc>
    
    <cc>okellogg</cc>
    
    <cc>ostroffjh</cc>
    
    <cc>ralf.habacker</cc>
          
          <cf_commitlink>https://invent.kde.org/sdk/umbrello/commit/250c7e83df33cd6d9eedcd6981a1cb22db37ee48</cf_commitlink>
          <cf_versionfixedin>2.33.80 (KDE releases 21.03.80)</cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596976</commentid>
    <comment_count>0</comment_count>
    <who name="Michał Walenciak">Kicer86</who>
    <bug_when>2016-05-27 09:20:08 +0000</bug_when>
    <thetext>Now with almost every save my xmi file gets many changes, mostly due to some reordering.
Example:

-  &lt;UML:Model isLeaf=&quot;false&quot; name=&quot;Model UML&quot; isRoot=&quot;false&quot; xmi.id=&quot;m1&quot; isSpecification=&quot;false&quot; isAbstract=&quot;false&quot;&gt;
+  &lt;UML:Model isRoot=&quot;false&quot; isLeaf=&quot;false&quot; xmi.id=&quot;m1&quot; isAbstract=&quot;false&quot; isSpecification=&quot;false&quot; name=&quot;Model UML&quot;&gt;

It would be nice to have it stable (for changes review and version controlling).
 

Reproducible: Sometimes


Actual Results:  
Unstable xmi file format.

Expected Results:  
Stable xmi file format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596995</commentid>
    <comment_count>1</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2016-05-27 10:45:42 +0000</bug_when>
    <thetext>(In reply to Michał Walenciak from comment #0)
&gt; Now with almost every save my xmi file gets many changes, mostly due to some reordering.
Is that version running with KDE4 or KF5/Qt5 ?

Qt5 has an issue with ordering, see http://stackoverflow.com/questions/27378143/qt-5-produce-random-attribute-order-in-xml</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597740</commentid>
    <comment_count>2</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2016-05-31 08:03:57 +0000</bug_when>
    <thetext>From https://www.archlinux.de/?page=PackageDetails;repo=extra;arch=x86_64;pkgname=umbrello it looks that this bug has been reported for a Qt5 build.

The question is if the fix mentioned in comment 1 uses the same ordering as Qt4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598309</commentid>
    <comment_count>3</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2016-06-02 08:04:46 +0000</bug_when>
    <thetext>(In reply to Ralf Habacker from comment #2)
&gt; From
&gt; https://www.archlinux.de/?page=PackageDetails;repo=extra;arch=x86_64;
&gt; pkgname=umbrello it looks that this bug has been reported for a Qt5 build.
&gt; 
&gt; The question is if the fix mentioned in comment 1 uses the same ordering as
&gt; Qt4.

Some research returns:
1. Qt4 has a stable order between multiple saves 
2. Qt5 with seed fix has a stable attribute order between multiple saves but differs from Qt4 builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598331</commentid>
    <comment_count>4</comment_count>
      <attachid>99323</attachid>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2016-06-02 09:38:58 +0000</bug_when>
    <thetext>Created attachment 99323
xslt file for reordering xmi file

The simplest solutions is to post process the generated xmi file with an xslt processer for example xsltproc. https://social.msdn.microsoft.com/Forums/en-US/a75f9afc-f4f2-44e2-afa4-dffe6ca33b0f/xslt-how-can-i-sort-attributes-in-all-tags-by-name?forum=xmlandnetfx mentions the appended xslt file for this purpose.

If someone provides a patch this feature could be integrated in umbrello. If xsltproc is available in the settings  there could be a checkbox to enable this support. On save first a temporay file will be created, then post processed and saved on the requested location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598531</commentid>
    <comment_count>5</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2016-06-03 08:12:38 +0000</bug_when>
    <thetext>Here are some details from the Qt bug tracker https://bugreports.qt.io/browse/QTBUG-28892</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601861</commentid>
    <comment_count>6</comment_count>
    <who name="Christian David">christian-david</who>
    <bug_when>2016-06-17 09:40:52 +0000</bug_when>
    <thetext>As this should be solved in Qt and patches are in review I close this bug. Thank you for reporting and finding the Qt bug report!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601889</commentid>
    <comment_count>7</comment_count>
    <who name="Christian David">christian-david</who>
    <bug_when>2016-06-17 11:51:05 +0000</bug_when>
    <thetext>(In reply to Christian David from comment #6)
&gt; As this should be solved in Qt and patches are in review I close this bug.
&gt; Thank you for reporting and finding the Qt bug report!

Sorry for closing. I just noticed this bug was not filed for KMyMoney (only a copy was forwarded to our mailing list). Please open it again if you want to. Sorry, again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753486</commentid>
    <comment_count>8</comment_count>
    <who name="Jack">ostroffjh</who>
    <bug_when>2018-05-18 20:53:17 +0000</bug_when>
    <thetext>Is there any resolution to this?  I still have the problem with KMyMoney git master.  I don&apos;t use umbrello, so I don&apos;t know if the problem remains there or not.  The QT bug looks like it was closed as &quot;out of scope&quot; which sounds to me like it was NOT fixed.  As my concern is with KMyMoney, do I need to open a separate bug, or is there some way to treat this more generally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754260</commentid>
    <comment_count>9</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2018-05-22 23:50:40 +0000</bug_when>
    <thetext>Currently not. In general I see several options to fix this:
1. Use the code fragment from https://stackoverflow.com/questions/27378143/qt-5-produce-random-attribute-order-in-xml to save an ordered way.
2. use a different xml writer 
3. There is always the way to patch Qt to address this issue
4. Embed a copy of QtXml source from Qt4 and use QDomDocument from the embedded copy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755241</commentid>
    <comment_count>10</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2018-05-28 08:58:04 +0000</bug_when>
    <thetext>&gt; do I need to open a separate bug, or is there some way to treat this more generally?
Is suggest to open a dedicated bug in the kmymoney bug tracker because the mentioned issue could not be solved by the umbrello project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767282</commentid>
    <comment_count>11</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2018-07-16 23:12:20 +0000</bug_when>
    <thetext>363582(In reply to Ralf Habacker from comment #9)
&gt; Currently not. In general I see several options to fix this:
&gt; 3. There is always the way to patch Qt to address this issue
http://code.qt.io/cgit/qt/qtbase.git/tree/src/xml/dom/qdom.cpp#n4589 is the related code fragment writing attributes. There may be a property setting method in some of the QDom related classes to write out an alphabetic ordered attribute list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767283</commentid>
    <comment_count>12</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2018-07-16 23:18:03 +0000</bug_when>
    <thetext>(In reply to Ralf Habacker from comment #9)
&gt; Currently not. In general I see several options to fix this:
&gt; 2. use a different xml writer 

The very rudimentary xml writer as shown below may be used as starting point

class KDomElement {
public:
  KDomElement(const QString &amp;name = QString()) : m_tag(name) {}

  void setAttribute(const QString &amp;name, const QString &amp;value)
  {
    m_attributes.append(QString(&quot;%1=\&quot;%2\&quot;&quot;).arg(name, value));
  }
  // add more methods

  void appendChild(KDomElement &amp;element)
  {
    m_childs.append(element);
  }

  QString toString() const
  {
    if (m_childs.size() &gt; 0) {
      QString s = !m_tag.isEmpty() ? QString(&quot;&lt;%1 %2&gt;\n&quot;).arg(m_tag, m_attributes.join(&quot; &quot;)) : &quot;&quot;;
      foreach(const KDomElement &amp;child, m_childs) {
        s += child.toString();
      }
      s += !m_tag.isEmpty() ? QString(&quot;&lt;/%1&gt;\n&quot;).arg(m_tag) : &quot;&quot;;
      return s;
    } else
      return !m_tag.isEmpty() ? QString(&quot;&lt;%1 %2 /&gt;\n&quot;).arg(m_tag, m_attributes.join(&quot; &quot;)) : &quot;&quot;;
  }

protected:
  QString m_tag;
  QStringList m_attributes;
  QList&lt;KDomElement&gt; m_childs;
};

class KDomDocument : public KDomElement {
public:
  KDomDocument(const QString &amp;name=QString())
    : KDomElement(name)
  {
  }

  KDomElement createElement(const QString &amp;name)
  {
    return KDomElement(name);
  }
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1950144</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Hairgrove">code</who>
    <bug_when>2020-08-11 14:44:45 +0000</bug_when>
    <thetext>I think the problem is that attributes of XML elements are not guaranteed to be in any specific order by the XML standard. QDomDocument (used by Umbrello) seems to put the attributes in random order any time it loads a file or saves it to a string. The ordering of the elements themselves is stable, IIRC -- just not the attributes.

An external processing step, such as XSLT suggested by Ralf Habacker, seems to be the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1970950</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-02 06:37:13 +0000</bug_when>
    <thetext>QXmlStreamWriter supports preservation of attribute order,
https://doc.qt.io/qt-5/qxmlstreamwriter.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1970967</commentid>
    <comment_count>15</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2020-11-02 07:37:27 +0000</bug_when>
    <thetext>(In reply to Oliver Kellogg from comment #14)
&gt; QXmlStreamWriter supports preservation of attribute order,
&gt; https://doc.qt.io/qt-5/qxmlstreamwriter.html

Wouldn&apos;t that require to rewrite the xml-writing completely, because the api doesn&apos;t match?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1971325</commentid>
    <comment_count>16</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-03 07:30:17 +0000</bug_when>
    <thetext>(In reply to Ralf Habacker from comment #15)
&gt; (In reply to Oliver Kellogg from comment #14)
&gt; &gt; QXmlStreamWriter supports preservation of attribute order,
&gt; &gt; https://doc.qt.io/qt-5/qxmlstreamwriter.html
&gt; 
&gt; Wouldn&apos;t that require to rewrite the xml-writing completely, because the api
&gt; doesn&apos;t match?

No problem.
The writeNamespace call in UMLDoc::saveToXMI took a bit of fiddling but otherwise it looks to be straight forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1971892</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-05 04:55:38 +0000</bug_when>
    <thetext>Git commit bc83b26458e15d36620f4b93023925f76f19aa84 by Oliver Kellogg.
Committed on 05/11/2020 at 04:53.
Pushed by okellogg into branch &apos;master&apos;.

umbrello/umldoc.cpp
- In function saveDocument, on saving as uncompressed XMI close tmpfile
  after calling saveToXMI1.
  Reason: On changing the saveToXMI1 implementation to QXmlStreamWriter
  the file saved is empty if we leave out the close().

M  +1    -0    umbrello/umldoc.cpp

https://invent.kde.org/sdk/umbrello/commit/bc83b26458e15d36620f4b93023925f76f19aa84</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1971943</commentid>
    <comment_count>18</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2020-11-05 08:07:37 +0000</bug_when>
    <thetext>(In reply to Oliver Kellogg from comment #16)
&gt; No problem.
&gt; The writeNamespace call in UMLDoc::saveToXMI took a bit of fiddling but
&gt; otherwise it looks to be straight forward.

If I open a present xmi file with that change applied and save it again - will that change the attribute order ? 

If so, can it be brought in line with the current implementation to avoid unnecessary changes to the files ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1972159</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-05 20:28:30 +0000</bug_when>
    <thetext>(In reply to Ralf Habacker from comment #18)
&gt; If I open a present xmi file with that change applied and save it again -
&gt; will that change the attribute order ? 

What do you mean by &quot;that change&quot; ?
I have only just begun doing the conversion and have not committed anything yet.

&gt; If so, can it be brought in line with the current implementation to avoid
&gt; unnecessary changes to the files ?

What do you mean by &quot;the files&quot;?
XMI files or Umbrello C++ implementation files?

If you mean XMI files:
The order in which attributes will appear will be the order in which they are written in the source code.

If you mean Umbrello C++ implementation files:
The conversion will affect approx. 190 header (.h) and implementation (.cpp) files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1973016</commentid>
    <comment_count>20</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-08 22:09:40 +0000</bug_when>
    <thetext>Git commit 776c2eaa09b7fff83f901165d62c53f5d28711ab by Oliver Kellogg.
Committed on 08/11/2020 at 22:58.
Pushed by okellogg into branch &apos;work/363582-stable-xmi&apos;.

- Arguments of functions saveToXMI1 and save1 are changed from
    QDomDocument&amp; doc, QDomElement&amp; elem
  to
    QXmlStreamWriter&amp; writer
- Basic load/save are working but more testing is needed.
  In particular, drag, cut/copy/paste, and undo/redo need testing.
- Unit tests are adapted and are passed.

https://invent.kde.org/sdk/umbrello/commit/776c2eaa09b7fff83f901165d62c53f5d28711ab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1975083</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-11-13 20:57:33 +0000</bug_when>
    <thetext>From my point of view, with commit
https://invent.kde.org/sdk/umbrello/-/commit/74abf217331b4ce7b745f5ec0ba3453f7809ffc7
the work/363582-stable-xmi branch is approaching usability.
I appreciate your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1975641</commentid>
    <comment_count>22</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2020-11-16 08:02:12 +0000</bug_when>
    <thetext>(In reply to Oliver Kellogg from comment #21)
&gt; From my point of view, with commit
&gt; https://invent.kde.org/sdk/umbrello/-/commit/
&gt; 74abf217331b4ce7b745f5ec0ba3453f7809ffc7
&gt; the work/363582-stable-xmi branch is approaching usability.
&gt; I appreciate your comments.

I will take a look this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1976454</commentid>
    <comment_count>23</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2020-11-18 19:55:40 +0000</bug_when>
    <thetext>(In reply to Ralf Habacker from comment #22)
&gt; I will take a look this week.

Please open a merge request from your work branch with the prefix &quot;WIP:&quot; before the title to indicate a &quot;work in progress&quot; branch. 

This merge request gives us a better opportunity to discuss this than here in the bug tracker. Opening an mr with one line 

BUG:xxx

in the text will create a link to this ticket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1976485</commentid>
    <comment_count>24</comment_count>
    <who name="Bug Janitor Service">bug-janitor</who>
    <bug_when>2020-11-18 22:00:36 +0000</bug_when>
    <thetext>A possibly relevant merge request was started @ https://invent.kde.org/sdk/umbrello/-/merge_requests/17</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1981701</commentid>
    <comment_count>25</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-05 00:10:28 +0000</bug_when>
    <thetext>Git commit cbb0c90c5938f650cb91c4be709165378733e6ce by Oliver Kellogg.
Committed on 09/11/2020 at 22:37.
Pushed by okellogg into branch &apos;master&apos;.

umbrello/version.h
- Increase XMI_FILE_VERSION to &quot;1.6.20&quot; due to reordering of XML
  attributes.

M  +1    -1    umbrello/version.h

https://invent.kde.org/sdk/umbrello/commit/cbb0c90c5938f650cb91c4be709165378733e6ce</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1981702</commentid>
    <comment_count>26</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-05 00:10:30 +0000</bug_when>
    <thetext>Git commit 3d17c9692c7466fd7e0d3bc6d4aac2a888d9f685 by Oliver Kellogg.
Committed on 22/11/2020 at 15:33.
Pushed by okellogg into branch &apos;master&apos;.

https://invent.kde.org/sdk/umbrello/-/merge_requests/17#note_140469
On saving &lt;UML:Operation&gt; avoid empty &lt;UML:BehavioralFeature.parameter/&gt;

umbrello/uml1model/operation.cpp
- In function saveToXMI1, before calling writer.writeStartElement for
  &quot;UML:BehavioralFeature.parameter&quot;, if m_pSecondary is null and m_List
  is empty then write &lt;/UML:Operation&gt; closing element and return.

M  +4    -0    umbrello/uml1model/operation.cpp

https://invent.kde.org/sdk/umbrello/commit/3d17c9692c7466fd7e0d3bc6d4aac2a888d9f685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1981703</commentid>
    <comment_count>27</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-05 00:10:37 +0000</bug_when>
    <thetext>Git commit 776c2eaa09b7fff83f901165d62c53f5d28711ab by Oliver Kellogg.
Committed on 08/11/2020 at 21:58.
Pushed by okellogg into branch &apos;master&apos;.

Create branch work/363582-stable-xmi from master @ df0d454

- Arguments of functions saveToXMI1 and save1 are changed from
    QDomDocument&amp; doc, QDomElement&amp; elem
  to
    QXmlStreamWriter&amp; writer
- Basic load/save are working but more testing is needed.
  In particular, drag, cut/copy/paste, and undo/redo need testing.
- Unit tests are adapted and are passed.

M  +55   -48   umbrello/clipboard/umldragdata.cpp
M  +16   -6    umbrello/cmds/cmdremovediagram.cpp
M  +28   -6    umbrello/cmds/widget/cmdcreatewidget.cpp
M  +49   -8    umbrello/cmds/widget/cmdremovewidget.cpp
M  +11   -10   umbrello/codegenerators/classifiercodedocument.cpp
M  +2    -2    umbrello/codegenerators/classifiercodedocument.h
M  +9    -8    umbrello/codegenerators/codeaccessormethod.cpp
M  +3    -2    umbrello/codegenerators/codeaccessormethod.h
M  +7    -7    umbrello/codegenerators/codeblock.cpp
M  +2    -2    umbrello/codegenerators/codeblock.h
M  +12   -9    umbrello/codegenerators/codeblockwithcomments.cpp
M  +2    -2    umbrello/codegenerators/codeblockwithcomments.h
M  +13   -12   umbrello/codegenerators/codeclassfield.cpp
M  +2    -2    umbrello/codegenerators/codeclassfield.h
M  +9    -7    umbrello/codegenerators/codeclassfielddeclarationblock.cpp
M  +2    -2    umbrello/codegenerators/codeclassfielddeclarationblock.h
M  +4    -4    umbrello/codegenerators/codecomment.cpp
M  +1    -1    umbrello/codegenerators/codecomment.h
M  +15   -14   umbrello/codegenerators/codedocument.cpp
M  +3    -2    umbrello/codegenerators/codedocument.h
M  +10   -9    umbrello/codegenerators/codegenerator.cpp
M  +2    -1    umbrello/codegenerators/codegenerator.h
M  +7    -4    umbrello/codegenerators/codegenobjectwithtextblocks.cpp
M  +2    -1    umbrello/codegenerators/codegenobjectwithtextblocks.h
M  +7    -5    umbrello/codegenerators/codemethodblock.cpp
M  +2    -1    umbrello/codegenerators/codemethodblock.h
M  +9    -6    umbrello/codegenerators/codeoperation.cpp
M  +2    -2    umbrello/codegenerators/codeoperation.h
M  +11   -8    umbrello/codegenerators/codeparameter.cpp
M  +2    -1    umbrello/codegenerators/codeparameter.h
M  +4    -4    umbrello/codegenerators/cpp/cppcodecomment.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppcodecomment.h
M  +4    -4    umbrello/codegenerators/cpp/cppcodedocumentation.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppcodedocumentation.h
M  +6    -6    umbrello/codegenerators/cpp/cppcodegenerator.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppcodegenerator.h
M  +4    -4    umbrello/codegenerators/cpp/cppheaderclassdeclarationblock.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppheaderclassdeclarationblock.h
M  +4    -4    umbrello/codegenerators/cpp/cppheadercodedocument.cpp
M  +1    -1    umbrello/codegenerators/cpp/cppheadercodedocument.h
M  +4    -4    umbrello/codegenerators/d/dclassdeclarationblock.cpp
M  +1    -1    umbrello/codegenerators/d/dclassdeclarationblock.h
M  +5    -2    umbrello/codegenerators/d/dcodeaccessormethod.cpp
M  +1    -1    umbrello/codegenerators/d/dcodeaccessormethod.h
M  +4    -4    umbrello/codegenerators/d/dcodecomment.cpp
M  +1    -1    umbrello/codegenerators/d/dcodecomment.h
M  +4    -4    umbrello/codegenerators/d/dcodedocumentation.cpp
M  +1    -1    umbrello/codegenerators/d/dcodedocumentation.h
M  +12   -9    umbrello/codegenerators/hierarchicalcodeblock.cpp
M  +4    -2    umbrello/codegenerators/hierarchicalcodeblock.h
M  +7    -6    umbrello/codegenerators/java/javaantcodedocument.cpp
M  +3    -2    umbrello/codegenerators/java/javaantcodedocument.h
M  +4    -4    umbrello/codegenerators/java/javaclassdeclarationblock.cpp
M  +1    -1    umbrello/codegenerators/java/javaclassdeclarationblock.h
M  +5    -2    umbrello/codegenerators/java/javacodeaccessormethod.cpp
M  +1    -1    umbrello/codegenerators/java/javacodeaccessormethod.h
M  +4    -4    umbrello/codegenerators/java/javacodedocumentation.cpp
M  +1    -1    umbrello/codegenerators/java/javacodedocumentation.h
M  +7    -4    umbrello/codegenerators/ownedcodeblock.cpp
M  +2    -1    umbrello/codegenerators/ownedcodeblock.h
M  +5    -5    umbrello/codegenerators/ownedhierarchicalcodeblock.cpp
M  +2    -2    umbrello/codegenerators/ownedhierarchicalcodeblock.h
M  +4    -4    umbrello/codegenerators/ruby/rubyclassdeclarationblock.cpp
M  +1    -1    umbrello/codegenerators/ruby/rubyclassdeclarationblock.h
M  +3    -2    umbrello/codegenerators/ruby/rubycodeaccessormethod.cpp
M  +1    -1    umbrello/codegenerators/ruby/rubycodeaccessormethod.h
M  +4    -4    umbrello/codegenerators/ruby/rubycodedocumentation.cpp
M  +1    -1    umbrello/codegenerators/ruby/rubycodedocumentation.h
M  +6    -8    umbrello/codegenerators/textblock.cpp
M  +4    -2    umbrello/codegenerators/textblock.h
M  +10   -7    umbrello/codegenerators/xml/xmlelementcodeblock.cpp
M  +2    -2    umbrello/codegenerators/xml/xmlelementcodeblock.h
M  +33   -33   umbrello/optionstate.cpp
M  +7    -6    umbrello/optionstate.h
M  +3    -3    umbrello/uml1model/actor.cpp
M  +1    -1    umbrello/uml1model/actor.h
M  +4    -4    umbrello/uml1model/artifact.cpp
M  +1    -1    umbrello/uml1model/artifact.h
M  +28   -28   umbrello/uml1model/association.cpp
M  +2    -1    umbrello/uml1model/association.h
M  +5    -5    umbrello/uml1model/attribute.cpp
M  +1    -1    umbrello/uml1model/attribute.h
M  +4    -4    umbrello/uml1model/category.cpp
M  +1    -1    umbrello/uml1model/category.h
M  +4    -5    umbrello/uml1model/checkconstraint.cpp
M  +1    -1    umbrello/uml1model/checkconstraint.h
M  +19   -23   umbrello/uml1model/classifier.cpp
M  +1    -1    umbrello/uml1model/classifier.h
M  +7    -7    umbrello/uml1model/component.cpp
M  +1    -1    umbrello/uml1model/component.h
M  +6    -7    umbrello/uml1model/datatype.cpp
M  +1    -1    umbrello/uml1model/datatype.h
M  +8    -7    umbrello/uml1model/entity.cpp
M  +1    -1    umbrello/uml1model/entity.h
M  +11   -11   umbrello/uml1model/entityattribute.cpp
M  +1    -1    umbrello/uml1model/entityattribute.h
M  +6    -6    umbrello/uml1model/enum.cpp
M  +1    -1    umbrello/uml1model/enum.h
M  +4    -4    umbrello/uml1model/enumliteral.cpp
M  +1    -1    umbrello/uml1model/enumliteral.h
M  +47   -49   umbrello/uml1model/folder.cpp
M  +3    -3    umbrello/uml1model/folder.h
M  +10   -10   umbrello/uml1model/foreignkeyconstraint.cpp
M  +1    -1    umbrello/uml1model/foreignkeyconstraint.h
M  +5    -5    umbrello/uml1model/instance.cpp
M  +1    -1    umbrello/uml1model/instance.h
M  +7    -7    umbrello/uml1model/instanceattribute.cpp
M  +1    -1    umbrello/uml1model/instanceattribute.h
M  +3    -3    umbrello/uml1model/node.cpp
M  +1    -1    umbrello/uml1model/node.h
M  +22   -24   umbrello/uml1model/operation.cpp
M  +1    -1    umbrello/uml1model/operation.h
M  +7    -7    umbrello/uml1model/package.cpp
M  +1    -1    umbrello/uml1model/package.h
M  +3    -3    umbrello/uml1model/port.cpp
M  +1    -1    umbrello/uml1model/port.h
M  +3    -3    umbrello/uml1model/stereotype.cpp
M  +1    -1    umbrello/uml1model/stereotype.h
M  +4    -4    umbrello/uml1model/template.cpp
M  +1    -1    umbrello/uml1model/template.h
M  +20   -21   umbrello/uml1model/umlobject.cpp
M  +5    -4    umbrello/uml1model/umlobject.h
M  +17   -17   umbrello/uml1model/umlrole.cpp
M  +1    -1    umbrello/uml1model/umlrole.h
M  +6    -6    umbrello/uml1model/uniqueconstraint.cpp
M  +1    -1    umbrello/uml1model/uniqueconstraint.h
M  +3    -3    umbrello/uml1model/usecase.cpp
M  +1    -1    umbrello/uml1model/usecase.h
M  +55   -91   umbrello/umldoc.cpp
M  +5    -4    umbrello/umllistview.cpp
M  +2    -1    umbrello/umllistview.h
M  +14   -15   umbrello/umllistviewitem.cpp
M  +2    -1    umbrello/umllistviewitem.h
M  +29   -28   umbrello/umlscene.cpp
M  +2    -1    umbrello/umlscene.h
M  +10   -9    umbrello/umlwidgets/activitywidget.cpp
M  +1    -1    umbrello/umlwidgets/activitywidget.h
M  +7    -4    umbrello/umlwidgets/actorwidget.cpp
M  +1    -1    umbrello/umlwidgets/actorwidget.h
M  +7    -4    umbrello/umlwidgets/artifactwidget.cpp
M  +1    -1    umbrello/umlwidgets/artifactwidget.h
M  +17   -16   umbrello/umlwidgets/associationline.cpp
M  +2    -1    umbrello/umlwidgets/associationline.h
M  +23   -22   umbrello/umlwidgets/associationwidget.cpp
M  +1    -1    umbrello/umlwidgets/associationwidget.h
M  +8    -6    umbrello/umlwidgets/associationwidgetrole.cpp
M  +2    -1    umbrello/umlwidgets/associationwidgetrole.h
M  +5    -4    umbrello/umlwidgets/boxwidget.cpp
M  +1    -1    umbrello/umlwidgets/boxwidget.h
M  +5    -4    umbrello/umlwidgets/categorywidget.cpp
M  +1    -1    umbrello/umlwidgets/categorywidget.h
M  +24   -21   umbrello/umlwidgets/classifierwidget.cpp
M  +1    -1    umbrello/umlwidgets/classifierwidget.h
M  +9    -8    umbrello/umlwidgets/combinedfragmentwidget.cpp
M  +1    -1    umbrello/umlwidgets/combinedfragmentwidget.h
M  +7    -4    umbrello/umlwidgets/componentwidget.cpp
M  +1    -1    umbrello/umlwidgets/componentwidget.h
M  +5    -4    umbrello/umlwidgets/datatypewidget.cpp
M  +1    -1    umbrello/umlwidgets/datatypewidget.h
M  +5    -4    umbrello/umlwidgets/diagramproxywidget.cpp
M  +2    -1    umbrello/umlwidgets/diagramproxywidget.h
M  +8    -5    umbrello/umlwidgets/entitywidget.cpp
M  +1    -1    umbrello/umlwidgets/entitywidget.h
M  +8    -5    umbrello/umlwidgets/enumwidget.cpp
M  +1    -1    umbrello/umlwidgets/enumwidget.h
M  +8    -7    umbrello/umlwidgets/floatingdashlinewidget.cpp
M  +1    -1    umbrello/umlwidgets/floatingdashlinewidget.h
M  +9    -8    umbrello/umlwidgets/floatingtextwidget.cpp
M  +1    -1    umbrello/umlwidgets/floatingtextwidget.h
M  +6    -5    umbrello/umlwidgets/forkjoinwidget.cpp
M  +1    -1    umbrello/umlwidgets/forkjoinwidget.h
M  +5    -4    umbrello/umlwidgets/linkwidget.cpp
M  +2    -1    umbrello/umlwidgets/linkwidget.h
M  +15   -14   umbrello/umlwidgets/messagewidget.cpp
M  +1    -1    umbrello/umlwidgets/messagewidget.h
M  +5    -4    umbrello/umlwidgets/nodewidget.cpp
M  +1    -1    umbrello/umlwidgets/nodewidget.h
M  +8    -7    umbrello/umlwidgets/notewidget.cpp
M  +1    -1    umbrello/umlwidgets/notewidget.h
M  +11   -10   umbrello/umlwidgets/objectnodewidget.cpp
M  +1    -1    umbrello/umlwidgets/objectnodewidget.h
M  +12   -11   umbrello/umlwidgets/objectwidget.cpp
M  +1    -1    umbrello/umlwidgets/objectwidget.h
M  +5    -4    umbrello/umlwidgets/packagewidget.cpp
M  +1    -1    umbrello/umlwidgets/packagewidget.h
M  +9    -7    umbrello/umlwidgets/pinportbase.cpp
M  +1    -1    umbrello/umlwidgets/pinportbase.h
M  +8    -7    umbrello/umlwidgets/preconditionwidget.cpp
M  +1    -1    umbrello/umlwidgets/preconditionwidget.h
M  +11   -8    umbrello/umlwidgets/regionwidget.cpp
M  +1    -1    umbrello/umlwidgets/regionwidget.h
M  +10   -9    umbrello/umlwidgets/signalwidget.cpp
M  +1    -1    umbrello/umlwidgets/signalwidget.h
M  +16   -15   umbrello/umlwidgets/statewidget.cpp
M  +1    -1    umbrello/umlwidgets/statewidget.h
M  +11   -10   umbrello/umlwidgets/umlwidget.cpp
M  +1    -1    umbrello/umlwidgets/umlwidget.h
M  +7    -4    umbrello/umlwidgets/usecasewidget.cpp
M  +1    -1    umbrello/umlwidgets/usecasewidget.h
M  +37   -37   umbrello/umlwidgets/widget_utils.cpp
M  +4    -4    umbrello/umlwidgets/widget_utils.h
M  +18   -20   umbrello/umlwidgets/widgetbase.cpp
M  +2    -1    umbrello/umlwidgets/widgetbase.h
M  +4    -2    unittests/testassociation.cpp
M  +35   -24   unittests/testbase.h
M  +2    -2    unittests/testclassifier.cpp
M  +13   -2    unittests/testoptionstate.cpp
M  +2    -2    unittests/testpackage.cpp
M  +4    -2    unittests/testpreconditionwidget.cpp
M  +18   -2    unittests/testumlobject.cpp
M  +1    -1    unittests/testumlobject.h

https://invent.kde.org/sdk/umbrello/commit/776c2eaa09b7fff83f901165d62c53f5d28711ab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1981704</commentid>
    <comment_count>28</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-05 00:10:38 +0000</bug_when>
    <thetext>Git commit 74abf217331b4ce7b745f5ec0ba3453f7809ffc7 by Oliver Kellogg.
Committed on 13/11/2020 at 20:48.
Pushed by okellogg into branch &apos;master&apos;.

Followup to commit 776c2ea : Various fixes for writing of XMI

umbrello/umldoc.cpp
- In function saveToXMI1 reenable call to UMLListView::saveToXMI1 and
  CodeGenerator::saveToXMI1.

umbrello/uml1model/classifier.cpp
- In function saveToXMI1, avoid writing the &lt;UML:Classifier.feature&gt;
  element if both attList and opList are empty.

umbrello/umlwidgets/associationwidgetrole.{h,cpp}
- At function saveToXMI1 remove argument &apos;suffix&apos;.

umbrello/umlwidgets/associationwidgetrole.cpp
- In function saveToXMI1 remove writing of attributes index[ab] and
  totalcount[ab].
  Writing of attributes shall not be mixed with writing the subelements
  multiplicityWidget/roleWidget/changeabilityWidget because
  attributes may not follow subelements (in particular, attributes of
  role B may not follow subelements of role A).

umbrello/umlwidgets/associationwidget.cpp
- In function saveToXMI1:
  - Postpone saving of m_nameWidget and m_associationLine until after
    all attributes have been written.
    Reason: Subelements may not precede attributes.
  - Save attributes of m_role[A] and m_role[B].  Reason: Their saving
    has been removed from AssociationWidgetRole::saveToXMI1.

M  +13   -11   umbrello/uml1model/classifier.cpp
M  +2    -2    umbrello/umldoc.cpp
M  +21   -8    umbrello/umlwidgets/associationwidget.cpp
M  +4    -4    umbrello/umlwidgets/associationwidgetrole.cpp
M  +1    -1    umbrello/umlwidgets/associationwidgetrole.h

https://invent.kde.org/sdk/umbrello/commit/74abf217331b4ce7b745f5ec0ba3453f7809ffc7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1981705</commentid>
    <comment_count>29</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-05 00:10:46 +0000</bug_when>
    <thetext>Git commit b1a4f029a9f55a79d2b6ae1e3569cde493a8392e by Oliver Kellogg.
Committed on 13/11/2020 at 23:07.
Pushed by okellogg into branch &apos;master&apos;.

umbrello/umlwidgets/regionwidget.cpp
- In function saveToXMI1 fix error on migrating from QDomDocument
  to QXmlStreamWriter.

umbrello/umlwidgets/umlwidget.cpp
- In function saveToXMI1 fix misleading comment about the placement
  of call from child classes.

M  +1    -1    umbrello/umlwidgets/regionwidget.cpp
M  +2    -1    umbrello/umlwidgets/umlwidget.cpp

https://invent.kde.org/sdk/umbrello/commit/b1a4f029a9f55a79d2b6ae1e3569cde493a8392e</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1982020</commentid>
    <comment_count>30</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-06 18:14:07 +0000</bug_when>
    <thetext>Git commit b0f4278b08330f8fe5729de1a516a8c3d470e1aa by Oliver Kellogg.
Committed on 06/12/2020 at 18:10.
Pushed by okellogg into branch &apos;master&apos;.

umbrello/version.h
- Increase XMI_FILE_VERSION to 1.7.0 to reflect major change in XMI
  attribute order.

M  +1    -1    umbrello/version.h

https://invent.kde.org/sdk/umbrello/commit/b0f4278b08330f8fe5729de1a516a8c3d470e1aa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1983082</commentid>
    <comment_count>31</comment_count>
      <attachid>133962</attachid>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2020-12-10 06:51:32 +0000</bug_when>
    <thetext>Created attachment 133962
canonicalize_umbrello_xmi_attributes.pl

This shellscript takes an Umbrello XMI file created with exporterVersion
before 1.7 as input, reorders its XML attributes to conform to the order of
exporterVersion 1.7, and writes the converted XMI to stdout.
It is intended to simplify comparing older XMI files with the new format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1990239</commentid>
    <comment_count>32</comment_count>
      <attachid>134460</attachid>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2021-01-02 10:43:39 +0000</bug_when>
    <thetext>Created attachment 134460
canonicalize_umbrello_xmi_attributes.pl

Version 2021-01-02 of canonicalize_umbrello_xmi_attributes.pl adds mapping of the
outermost &lt;UML:Model&gt; and of &lt;XMI&gt;, &lt;XMI.metamodel&gt;, &lt;docsettings&gt;, &lt;listitem&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2012240</commentid>
    <comment_count>33</comment_count>
    <who name="Ralf Habacker">ralf.habacker</who>
    <bug_when>2021-03-09 07:36:14 +0000</bug_when>
    <thetext>Git commit 250c7e83df33cd6d9eedcd6981a1cb22db37ee48 by Ralf Habacker.
Committed on 09/03/2021 at 07:35.
Pushed by habacker into branch &apos;release/20.12&apos;.

A much smarter approach to provide stable xml output for Qt5

Imported from https://stackoverflow.com/questions/27378143/qt-5-produce-random-attribute-order-in-xml/43524969#43524969
and adjusted to be used by umbrello.

M  +72   -0    umbrello/umldoc.cpp

https://invent.kde.org/sdk/umbrello/commit/250c7e83df33cd6d9eedcd6981a1cb22db37ee48</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>99323</attachid>
            <date>2016-06-02 09:38:58 +0000</date>
            <delta_ts>2016-06-02 09:38:58 +0000</delta_ts>
            <desc>xslt file for reordering xmi file</desc>
            <filename>sort.xslt</filename>
            <type>application/xslt+xml</type>
            <size>470</size>
            <attacher name="Ralf Habacker">ralf.habacker</attacher>
            
              <data encoding="base64">PHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgogIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBlbmNvZGlu
Zz0iVVRGLTgiIGluZGVudD0ieWVzIi8+CiAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiI+CiAgICA8
eHNsOmNvcHk+CiAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCoiPgogICAgICAg
IDx4c2w6c29ydCBzZWxlY3Q9Im5hbWUoKSIvPgogICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+
CiAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgIDwveHNsOmNvcHk+CiAgPC94c2w6dGVt
cGxhdGU+CiAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8Y29tbWVudCgpfHByb2Nlc3NpbmctaW5z
dHJ1Y3Rpb24oKSI+CiAgICA8eHNsOmNvcHkgLz4gICAgIAogIDwveHNsOnRlbXBsYXRlPgo8L3hz
bDpzdHlsZXNoZWV0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>133962</attachid>
            <date>2020-12-10 06:51:32 +0000</date>
            <delta_ts>2021-01-02 10:43:39 +0000</delta_ts>
            <desc>canonicalize_umbrello_xmi_attributes.pl</desc>
            <filename>canonicalize_umbrello_xmi_attributes.pl</filename>
            <type>application/x-perl</type>
            <size>9032</size>
            <attacher name="Oliver Kellogg">okellogg</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCiMKIyBGaWxlOiBjYW5vbmljYWxpemVfdW1icmVsbG9feG1pX2F0dHJp
YnV0ZXMucGwKIwojIFB1cnBvc2U6CiMgICBHaXZlbiBhbiBVbWJyZWxsbyBYTUkgZmlsZSBjcmVh
dGVkIHdpdGggZXhwb3J0ZXJWZXJzaW9uIGJlZm9yZSAxLjcsCiMgICByZW9yZGVyIGl0cyBYTUwg
YXR0cmlidXRlcyB0byBjb25mb3JtIHRvIHRoZSBvcmRlciBvZiBleHBvcnRlclZlcnNpb24gMS43
LgojICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vYnVncy5rZGUub3JnL3Nob3df
YnVnLmNnaT9pZD0zNjM1ODIKIwojIFVzYWdlOgojICAgY2Fub25pY2FsaXplX3VtYnJlbGxvX3ht
aV9hdHRyaWJ1dGVzLnBsIGlucHV0ZmlsZS54bWkgPiBjb252ZXJ0ZWQueG1pCiMKIyBWZXJzaW9u
OiAyMDIwLTExLTI2CiMKIyBDb3B5cmlnaHQgKEMpIDIwMjAgIE9saXZlciBLZWxsb2dnICA8b2tl
bGxvZ2dAdXNycy5zb3VyY2Vmb3JnZS5uZXQ+CiMKIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQojICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IKIyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CiMKIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAojICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LAojICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCiMKCm15IEBzYXZlMSAgICAgID0gcXcvIGlzU3BlY2lmaWNhdGlvbiBp
c0xlYWYgaXNSb290IGlzQWJzdHJhY3QgeG1pLmlkIG5hbWUgbmFtZXNwYWNlCiAgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnQgdmlzaWJpbGl0eSBzdGVyZW90eXBlIG93bmVyU2NvcGUgLzsKCm15
IEB3aWRnZXRiYXNlID0gcXcvIHhtaS5pZCBsb2NhbGlkIHRleHRjb2xvciBsaW5lY29sb3IgbGlu
ZXdpZHRoIHVzZWZpbGxjb2xvcgogICAgICAgICAgICAgICAgICAgICB1c2VzZGlhZ3JhbWZpbGxj
b2xvciB1c2VzZGlhZ3JhbXVzZWZpbGxjb2xvciBmaWxsY29sb3IgZm9udCBhdXRvcmVzaXplIC87
CgpteSBAdW1sd2lkZ2V0ICA9ICggQHdpZGdldGJhc2UsICdkaWFncmFtbGlua2lkJywgJ3gnLCAn
eScsICd3aWR0aCcsICdoZWlnaHQnLCAnaXNpbnN0YW5jZScsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdpbnN0YW5jZW5hbWUnLCAnc2hvd3N0ZXJlb3R5cGUnICk7CgpteSBAY2xh
c3NpZmllcndpZGdldCA9ICggQHVtbHdpZGdldCwgJ3Nob3dvcGVyYXRpb25zJywgJ3Nob3dwdWJs
aWNvbmx5JywgJ3Nob3dvcHNpZ3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dwYWNr
YWdlJywgJ3Nob3dzY29wZScsICdzaG93YXR0cmlidXRlcycsICdzaG93YXR0c2lncycsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAnc2hvd3N0ZXJlb3R5cGUnLCAnc2hvd2RvY3VtZW50YXRpb24n
LCAnZHJhd2FzY2lyY2xlJyApOwoKbXkgJWF0dHJNYXAgPQogICgKICAgICdVTUw6QWN0b3InICAg
ICAgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkFydGlmYWN0JyAgICAgICAgICAg
ICA9PiBbIEBzYXZlMSwgJ2RyYXdhcycgXSwKICAgICdVTUw6R2VuZXJhbGl6YXRpb24nICAgICAg
ID0+IFsgQHNhdmUxLCAnZGlzY3JpbWluYXRvcicsICdjaGlsZCcsICdwYXJlbnQnIF0sCiAgICAn
VU1MOkFic3RyYWN0aW9uJyAgICAgICAgICA9PiBbIEBzYXZlMSwgJ2NsaWVudCcsICdzdXBwbGll
cicgXSwKICAgICdVTUw6RGVwZW5kZW5jeScgICAgICAgICAgID0+IFsgQHNhdmUxLCAnY2xpZW50
JywgJ3N1cHBsaWVyJyBdLAogICAgJ1VNTDpDaGlsZDJDYXRlZ29yeScgICAgICAgPT4gWyBAc2F2
ZTEsICdjbGllbnQnLCAnc3VwcGxpZXInIF0sCiAgICAnVU1MOkNhdGVnb3J5MlBhcmVudCcgICAg
ICA9PiBbIEBzYXZlMSwgJ2NsaWVudCcsICdzdXBwbGllcicgXSwKICAgICdVTUw6QXNzb2NpYXRp
b24nICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkF0dHJpYnV0ZScgICAgICAgICAg
ICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAnaW5pdGlhbFZhbHVlJyBdLAogICAgJ1VNTDpDYXRlZ29y
eScgICAgICAgICAgICAgPT4gWyBAc2F2ZTEsICdjYXRlZ29yeVR5cGUnIF0sCiAgICAnVU1MOkNo
ZWNrQ29uc3RyYWludCcgICAgICA9PiBbIEBzYXZlMSBdLAogICAgJ1VNTDpDbGFzcycgICAgICAg
ICAgICAgICAgPT4gWyBAc2F2ZTEgXSwKICAgICdVTUw6SW50ZXJmYWNlJyAgICAgICAgICAgID0+
IFsgQHNhdmUxIF0sCiAgICAnVU1MOkNvbXBvbmVudCcgICAgICAgICAgICA9PiBbIEBzYXZlMSBd
LAogICAgJ1VNTDpEYXRhVHlwZScgICAgICAgICAgICAgPT4gWyBAc2F2ZTEsICdlbGVtZW50UmVm
ZXJlbmNlJywgJ2lzQWN0aXZlJyBdLAogICAgJ1VNTDpFbnRpdHknICAgICAgICAgICAgICAgPT4g
WyBAc2F2ZTEgXSwKICAgICdVTUw6RW50aXR5QXR0cmlidXRlJyAgICAgID0+IFsgQHNhdmUxLCAn
dHlwZScsICdpbml0aWFsVmFsdWUnLCAnZGJpbmRleF90eXBlJywgJ3ZhbHVlcycsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnLCAnYXV0b19p
bmNyZW1lbnQnLCAnYWxsb3dfbnVsbCcgXSwKICAgICdVTUw6RW51bWVyYXRpb24nICAgICAgICAg
ID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkVudW1lcmF0aW9uTGl0ZXJhbCcgICA9PiBbIEBzYXZl
MSwgJ3ZhbHVlJyBdLAogICAgJ1VNTDpQYWNrYWdlJyAgICAgICAgICAgICAgPT4gWyBAc2F2ZTEs
ICd4bWkuZXh0ZW5kZXInIF0sCiAgICAnVU1MOk1vZGVsJyAgICAgICAgICAgICAgICA9PiBbIEBz
YXZlMSBdLAogICAgJ2V4dGVybmFsX2ZpbGUnICAgICAgICAgICAgPT4gWyAnbmFtZScsICdmaWxl
bmFtZScsICdtYWluTW9kZWwnLCAncGFyZW50SWQnLCAncGFyZW50JyBdLAogICAgJ1VNTDpGb3Jl
aWduS2V5Q29uc3RyYWludCcgPT4gWyBAc2F2ZTEsICdyZWZlcmVuY2VkRW50aXR5JywgJ3VwZGF0
ZUFjdGlvbicsICdkZWxldGVBY3Rpb24nIF0sCiAgICAnQXR0cmlidXRlTWFwJyAgICAgICAgICAg
ICA9PiBbICdrZXknLCAndmFsdWUnIF0sCiAgICAnVU1MOkluc3RhbmNlJyAgICAgICAgICAgICA9
PiBbIEBzYXZlMSwgJ2NsYXNzaWZpZXInIF0sCiAgICAnVU1MOkluc3RhbmNlQXR0cmlidXRlJyAg
ICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAnaW5pdGlhbFZhbHVlJywgJ2F0dHJpYnV0ZXMnIF0sCiAg
ICAnVU1MOk5vZGUnICAgICAgICAgICAgICAgICA9PiBbIEBzYXZlMSBdLAogICAgJ1VNTDpQb3J0
JyAgICAgICAgICAgICAgICAgPT4gWyBAc2F2ZTEgXSwKICAgICdVTUw6U3RlcmVvdHlwZScgICAg
ICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOlRlbXBsYXRlUGFyYW1ldGVyJyAgICA9PiBb
IEBzYXZlMSwgJ3R5cGUnIF0sCiAgICAnVU1MOkFzc29jaWF0aW9uRW5kJyAgICAgICA9PiBbIEBz
YXZlMSwgJ3R5cGUnLCAnbXVsdGlwbGljaXR5JywgJ2FnZ3JlZ2F0aW9uJywgJ2lzTmF2aWdhYmxl
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aW9u
c2hpcCcsICd2aXNpYmlsaXR5JywgJ2NoYW5nZWFiaWxpdHknIF0sCiAgICAnVU1MOlVuaXF1ZUNv
bnN0cmFpbnQnICAgICA9PiBbIEBzYXZlMSwgJ2lzUHJpbWFyeScgXSwKICAgICdVTUw6VXNlQ2Fz
ZScgICAgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOk9wZXJhdGlvbicgICAgICAg
ICAgICA9PiBbIEBzYXZlMSwgJ2lzUXVlcnknLCAnaXNPdmVycmlkZScsICdpc1ZpcnR1YWwnLCAn
aXNJbmxpbmUnIF0sCiAgICAnVU1MOlBhcmFtZXRlcicgICAgICAgICAgICA9PiBbIEBzYXZlMSwg
J3R5cGUnLCAndmFsdWUnLCAna2luZCcgXSwKCiAgICAnZGlhZ3JhbScgICAgICAgICAgICAgICAg
ICA9PiBbICd4bWkuaWQnLCAnbmFtZScsICd0eXBlJywgJ2RvY3VtZW50YXRpb24nLCAnYmFja2dy
b3VuZGNvbG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGxjb2xv
cicsICdmb250JywgJ2dyaWRkb3Rjb2xvcicsICdsaW5lY29sb3InLCAnbGluZXdpZHRoJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHRjb2xvcicsICd1c2VmaWxsY29s
b3InLCAnc2hvd2F0dHJpYmFzc29jcycsICdzaG93YXR0cycsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdzaG93YXR0c2lnJywgJ3Nob3dvcHMnLCAnc2hvd29wc2lnJywgJ3No
b3dwYWNrYWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dwdWJs
aWNvbmx5JywgJ3Nob3dzY29wZScsICdzaG93ZG9jdW1lbnRhdGlvbicsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdzaG93c3RlcmVvdHlwZScsICdsb2NhbGlkJywgJ3Nob3dn
cmlkJywgJ3NuYXBncmlkJywgJ3NuYXBjc2dyaWQnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnc25hcHgnLCAnc25hcHknLCAnem9vbScsICdjYW52YXNoZWlnaHQnLCAnY2Fu
dmFzd2lkdGgnLCAnaXNvcGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2F1dG9pbmNyZW1lbnRzZXF1ZW5jZScgXSwKCiAgICAnYWN0aXZpdHl3aWRnZXQnICAgICAgICAg
ICA9PiBbIEB1bWx3aWRnZXQsICdhY3Rpdml0eW5hbWUnLCAnZG9jdW1lbnRhdGlvbicsICdwcmVj
b25kaXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAncG9zdGNvbmRpdGlvbicsICdhY3Rpdml0eXR5cGUnIF0sCiAgICAnYWN0b3J3aWRnZXQnICAg
ICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAgICdhcnRpZmFjdHdpZGdldCcgICAgICAg
ICAgID0+IFsgQHVtbHdpZGdldCBdLAogICAgJ2xpbmVwYXRoJyAgICAgICAgICAgICAgICAgPT4g
WyAnbGF5b3V0JyBdLAogICAgJ3N0YXJ0cG9pbnQnICAgICAgICAgICAgICAgPT4gWyAnc3RhcnR4
JywgJ3N0YXJ0eScgXSwKICAgICdlbmRwb2ludCcgICAgICAgICAgICAgICAgID0+IFsgJ2VuZHgn
LCAnZW5keScgXSwKICAgICdwb2ludCcgICAgICAgICAgICAgICAgICAgID0+IFsgJ3gnLCAneScg
XSwKICAgICdhc3NvY3dpZGdldCcgICAgICAgICAgICAgID0+IFsgQHdpZGdldGJhc2UsICdzZXFu
dW0nLCAneG1pLmlkJywgJ3R5cGUnLCAndmlzaWJpbGl0eUEnLCAndmlzaWJpbGl0eUInLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5nZWFiaWxpdHlBJywgJ2NoYW5n
ZWFiaWxpdHlCJywgJ3JvbGVBZG9jJywgJ3JvbGVCZG9jJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdkb2N1bWVudGF0aW9uJywgJ3dpZGdldGFpZCcsICd3aWRnZXRiaWQn
LCAnYXNzb2NjbGFzcycsICdhY2xzZWdpbmRleCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaW5kZXhhJywgJ3RvdGFsY291bnRhJywgJ2luZGV4YicsICd0b3RhbGNvdW50
YicgXSwKICAgICdib3h3aWRnZXQnICAgICAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCBdLAog
ICAgJ2NhdGVnb3J5d2lkZ2V0JyAgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0IF0sCiAgICAncGFj
a2FnZXdpZGdldCcgICAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVyd2lkZ2V0IF0sCiAgICAnaW5z
dGFuY2V3aWRnZXQnICAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVyd2lkZ2V0IF0sCiAgICAnaW50
ZXJmYWNld2lkZ2V0JyAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVyd2lkZ2V0IF0sCiAgICAnaW50
ZXJmYWNld2lkZ2V0JyAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVyd2lkZ2V0IF0sCiAgICAnY29t
YmluZWRmcmFnbWVudHdpZGdldCcgICA9PiBbIEB1bWx3aWRnZXQsICdjb21iaW5lZEZyYWdtZW50
bmFtZScsICdkb2N1bWVudGF0aW9uJywgJ0NvbWJpbmVkRnJhZ21lbnR0eXBlJyBdLAogICAgJ2Nv
bXBvbmVudHdpZGdldCcgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0IF0sCiAgICAnZGF0YXR5cGV3
aWRnZXQnICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAgICdlbnRpdHl3aWRnZXQnICAg
ICAgICAgICAgID0+IFsgQHVtbHdpZGdldCBdLAogICAgJ2VudW13aWRnZXQnICAgICAgICAgICAg
ICAgPT4gWyBAdW1sd2lkZ2V0LCAnc2hvd3BhY2thZ2UnIF0sCiAgICAnZmxvYXRpbmdkYXNobGlu
ZXdpZGdldCcgICA9PiBbIEB1bWx3aWRnZXQsICd0ZXh0JywgJ21pblknLCAnbWF4WScgXSwKICAg
ICdmbG9hdGluZ3RleHQnICAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCwgJ3RleHQnLCAncHJl
dGV4dCcsICdwb3N0dGV4dCcsICdyb2xlJyBdLAogICAgJ2Zvcmtqb2luJyAgICAgICAgICAgICAg
ICAgPT4gWyBAdW1sd2lkZ2V0LCAnZHJhd3ZlcnRpY2FsJyBdLAogICAgJ21lc3NhZ2V3aWRnZXQn
ICAgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0LCAnc2VxbnVtJywgJ3dpZGdldGFpZCcsICd3aWRn
ZXRiaWQnLCAnb3BlcmF0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3NlcXVlbmNlbWVzc2FnZXR5cGUnLCAneGNsaWNrZWQnLCAneWNsaWNrZWQn
IF0sCiAgICAnbm9kZXdpZGdldCcgICAgICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAg
ICdub3Rld2lkZ2V0JyAgICAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCwgJ3RleHQnLCAnZGlh
Z3JhbWxpbmsnLCAnbm90ZVR5cGUnIF0sCiAgICAnb2JqZWN0bm9kZXdpZGdldCcgICAgICAgICA9
PiBbIEB1bWx3aWRnZXQsICdvYmplY3Rub2RlbmFtZScsICdkb2N1bWVudGF0aW9uJywgJ29iamVj
dG5vZGV0eXBlJywgJ29iamVjdG5vZGVzdGF0ZScgXSwKICAgICdvYmplY3R3aWRnZXQnICAgICAg
ICAgICAgID0+IFsgQHVtbHdpZGdldCwgJ2RyYXdhc2FjdG9yJywgJ211bHRpcGxlaW5zdGFuY2Un
LCAnZGVjb24nIF0sCiAgICAncGFja2FnZXdpZGdldCcgICAgICAgICAgICA9PiBbIEB1bWx3aWRn
ZXQgXSwKICAgICdwaW53aWRnZXQnICAgICAgICAgICAgICAgID0+IFsgJ3dpZGdldGFpZCcsIEB1
bWx3aWRnZXQgXSwKICAgICdwb3J0d2lkZ2V0JyAgICAgICAgICAgICAgID0+IFsgJ3dpZGdldGFp
ZCcsIEB1bWx3aWRnZXQgXSwKICAgICdwcmVjb25kaXRpb253aWRnZXQnICAgICAgID0+IFsgQHVt
bHdpZGdldCwgJ3dpZGdldGFpZCcsICdwcmVjb25kaXRpb25uYW1lJywgJ2RvY3VtZW50YXRpb24n
IF0sCiAgICAncmVnaW9ud2lkZ2V0JyAgICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQsICdyZWdp
b25uYW1lJywgJ2RvY3VtZW50YXRpb24nIF0sCiAgICAnc2lnbmFsd2lkZ2V0JyAgICAgICAgICAg
ICA9PiBbIEB1bWx3aWRnZXQsICdzaWduYWxuYW1lJywgJ2RvY3VtZW50YXRpb24nLCAnc2lnbmFs
dHlwZScsICd0ZXh0aWQnIF0sCiAgICAnc3RhdGV3aWRnZXQnICAgICAgICAgICAgICA9PiBbIEB1
bWx3aWRnZXQsICdzdGF0ZW5hbWUnLCAnZG9jdW1lbnRhdGlvbicsICdzdGF0ZXR5cGUnLCAnZHJh
d3ZlcnRpY2FsJyBdLAogICAgJ0FjdGl2aXR5JyAgICAgICAgICAgICAgICAgPT4gWyAnbmFtZScg
XSwKICAgICd1c2VjYXNld2lkZ2V0JyAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCBdCiAgKTsK
CkBBUkdWIG9yIGRpZSAicHJvdmlkZSB1bWJyZWxsbyB4bWkgZmlsZVxuIjsKCm15ICRpbmZpbGUg
PSAkQVJHVlswXTsKCm9wZW4oSU4sICI8IiwgJGluZmlsZSkgb3IgZGllICJjYW5ub3Qgb3BlbiBm
aWxlICRpbmZpbGVcbiI7Cgp3aGlsZSAoPElOPikgewogICAgY2hvbXA7CiAgICBteSAkbGluZSA9
ICRfOwogICAgbXkgQG1hcEVudHJ5ID0gZ3JlcCB7ICRsaW5lID1+IC9eXHMqPCRfIC8gfSBrZXlz
ICVhdHRyTWFwOwogICAgdW5sZXNzIChAbWFwRW50cnkpIHsKICAgICAgICBwcmludCAiJGxpbmVc
biI7CiAgICAgICAgbmV4dDsKICAgIH0KICAgIG15ICR0YWcgPSAkbWFwRW50cnlbMF07CiAgICBt
eSBAYXR0ckFzc2lnbm1lbnRzID0gJGxpbmUgPX4gL1tcdy5dKz0iW14iXSoiL2c7CiAgICBteSAl
YXR0cmliczsKICAgIGZvcmVhY2ggbXkgJGF0dGFzcyAoQGF0dHJBc3NpZ25tZW50cykgewogICAg
ICAgIG15ICRhdHROYW1lID0gJGF0dGFzczsKICAgICAgICAkYXR0TmFtZSA9fiBzLz0uKyQvLzsK
ICAgICAgICBteSAkYXR0VmFsICA9ICRhdHRhc3M7CiAgICAgICAgJGF0dFZhbCAgPX4gcy9eW1x3
Ll0rPS8vOwogICAgICAgICRhdHRyaWJzeyRhdHROYW1lfSA9ICRhdHRWYWw7CiAgICB9CiAgICBt
eSAkc3BhY2UgPSAkbGluZTsKICAgICRzcGFjZSA9fiBzLzwuKyQvLzsKICAgIG15ICRlbmQgPSAo
JGxpbmUgPX4gL1wvPiQvKSA/ICIvPiIgOiAiPiI7CiAgICBwcmludCAiJHNwYWNlPCR0YWciOwog
ICAgZm9yZWFjaCBteSAkYXR0TmFtZSAoQHskYXR0ck1hcHskdGFnfX0pIHsKICAgICAgICBleGlz
dHMgJGF0dHJpYnN7JGF0dE5hbWV9IG9yIG5leHQ7CiAgICAgICAgbXkgJHZhbHVlID0gJGF0dHJp
YnN7JGF0dE5hbWV9OwogICAgICAgIHByaW50ICIgJGF0dE5hbWU9JHZhbHVlIjsKICAgIH0KICAg
IHByaW50ICIkZW5kXG4iOwp9CgoKCgoKCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>134460</attachid>
            <date>2021-01-02 10:43:39 +0000</date>
            <delta_ts>2021-01-02 10:43:39 +0000</delta_ts>
            <desc>canonicalize_umbrello_xmi_attributes.pl</desc>
            <filename>canonicalize_umbrello_xmi_attributes.pl</filename>
            <type>application/x-perl</type>
            <size>10027</size>
            <attacher name="Oliver Kellogg">okellogg</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCiMKIyBGaWxlOiBjYW5vbmljYWxpemVfdW1icmVsbG9feG1pX2F0dHJp
YnV0ZXMucGwKIwojIFB1cnBvc2U6CiMgICBHaXZlbiBhbiBVbWJyZWxsbyBYTUkgZmlsZSBjcmVh
dGVkIHdpdGggZXhwb3J0ZXJWZXJzaW9uIGJlZm9yZSAxLjcsCiMgICByZW9yZGVyIGl0cyBYTUwg
YXR0cmlidXRlcyB0byBjb25mb3JtIHRvIHRoZSBvcmRlciBvZiBleHBvcnRlclZlcnNpb24gMS43
LgojICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGh0dHBzOi8vYnVncy5rZGUub3JnL3Nob3df
YnVnLmNnaT9pZD0zNjM1ODIKIwojIFVzYWdlOgojICAgY2Fub25pY2FsaXplX3VtYnJlbGxvX3ht
aV9hdHRyaWJ1dGVzLnBsIGlucHV0ZmlsZS54bWkgPiBjb252ZXJ0ZWQueG1pCiMKIyBWZXJzaW9u
OiAyMDIxLTAxLTAyCiMKIyBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSAgT2xpdmVyIEtlbGxvZ2cg
IDxva2VsbG9nZ0B1c3JzLnNvdXJjZWZvcmdlLm5ldD4KIwojICAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyAgIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5CiMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvcgojICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KIwojICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCiMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojICAgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sCiMgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKIwoKc3ViIHByaW50X3RhZ2xpbmU7CgpteSBAc2F2ZTEgICAg
ICA9IHF3LyBpc1NwZWNpZmljYXRpb24gaXNMZWFmIGlzUm9vdCBpc0Fic3RyYWN0IHhtaS5pZCBu
YW1lIG5hbWVzcGFjZQogICAgICAgICAgICAgICAgICAgICBjb21tZW50IHZpc2liaWxpdHkgc3Rl
cmVvdHlwZSBvd25lclNjb3BlIC87CgpteSBAd2lkZ2V0YmFzZSA9IHF3LyB4bWkuaWQgbG9jYWxp
ZCB0ZXh0Y29sb3IgbGluZWNvbG9yIGxpbmV3aWR0aCB1c2VmaWxsY29sb3IKICAgICAgICAgICAg
ICAgICAgICAgdXNlc2RpYWdyYW1maWxsY29sb3IgdXNlc2RpYWdyYW11c2VmaWxsY29sb3IgZmls
bGNvbG9yIGZvbnQgYXV0b3Jlc2l6ZSAvOwoKbXkgQHVtbHdpZGdldCAgPSAoIEB3aWRnZXRiYXNl
LCAnZGlhZ3JhbWxpbmtpZCcsICd4JywgJ3knLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ2lzaW5zdGFu
Y2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGFuY2VuYW1lJywgJ3No
b3dzdGVyZW90eXBlJyApOwoKbXkgQGNsYXNzaWZpZXJ3aWRnZXQgPSAoIEB1bWx3aWRnZXQsICdz
aG93b3BlcmF0aW9ucycsICdzaG93cHVibGljb25seScsICdzaG93b3BzaWdzJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICdzaG93cGFja2FnZScsICdzaG93c2NvcGUnLCAnc2hvd2F0dHJpYnV0
ZXMnLCAnc2hvd2F0dHNpZ3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3dzdGVyZW90
eXBlJywgJ3Nob3dkb2N1bWVudGF0aW9uJywgJ2RyYXdhc2NpcmNsZScgKTsKCm15ICVhdHRyTWFw
ID0KICAoCiAgICAnWE1JJyAgICAgICAgICAgICAgICAgICAgICA9PiBbICd4bWkudmVyc2lvbics
ICd0aW1lc3RhbXAnLCAndmVyaWZpZWQnLCAneG1sbnM6VU1MJyBdLAogICAgJ1hNSS5tZXRhbW9k
ZWwnICAgICAgICAgICAgPT4gWyAneG1pLm5hbWUnLCAneG1pLnZlcnNpb24nLCAnaHJlZicgXSwK
ICAgICdVTUw6QWN0b3InICAgICAgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkFy
dGlmYWN0JyAgICAgICAgICAgICA9PiBbIEBzYXZlMSwgJ2RyYXdhcycgXSwKICAgICdVTUw6R2Vu
ZXJhbGl6YXRpb24nICAgICAgID0+IFsgQHNhdmUxLCAnZGlzY3JpbWluYXRvcicsICdjaGlsZCcs
ICdwYXJlbnQnIF0sCiAgICAnVU1MOkFic3RyYWN0aW9uJyAgICAgICAgICA9PiBbIEBzYXZlMSwg
J2NsaWVudCcsICdzdXBwbGllcicgXSwKICAgICdVTUw6RGVwZW5kZW5jeScgICAgICAgICAgID0+
IFsgQHNhdmUxLCAnY2xpZW50JywgJ3N1cHBsaWVyJyBdLAogICAgJ1VNTDpDaGlsZDJDYXRlZ29y
eScgICAgICAgPT4gWyBAc2F2ZTEsICdjbGllbnQnLCAnc3VwcGxpZXInIF0sCiAgICAnVU1MOkNh
dGVnb3J5MlBhcmVudCcgICAgICA9PiBbIEBzYXZlMSwgJ2NsaWVudCcsICdzdXBwbGllcicgXSwK
ICAgICdVTUw6QXNzb2NpYXRpb24nICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkF0
dHJpYnV0ZScgICAgICAgICAgICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAnaW5pdGlhbFZhbHVlJyBd
LAogICAgJ1VNTDpDYXRlZ29yeScgICAgICAgICAgICAgPT4gWyBAc2F2ZTEsICdjYXRlZ29yeVR5
cGUnIF0sCiAgICAnVU1MOkNoZWNrQ29uc3RyYWludCcgICAgICA9PiBbIEBzYXZlMSBdLAogICAg
J1VNTDpDbGFzcycgICAgICAgICAgICAgICAgPT4gWyBAc2F2ZTEgXSwKICAgICdVTUw6SW50ZXJm
YWNlJyAgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkNvbXBvbmVudCcgICAgICAg
ICAgICA9PiBbIEBzYXZlMSBdLAogICAgJ1VNTDpEYXRhVHlwZScgICAgICAgICAgICAgPT4gWyBA
c2F2ZTEsICdlbGVtZW50UmVmZXJlbmNlJywgJ2lzQWN0aXZlJyBdLAogICAgJ1VNTDpFbnRpdHkn
ICAgICAgICAgICAgICAgPT4gWyBAc2F2ZTEgXSwKICAgICdVTUw6RW50aXR5QXR0cmlidXRlJyAg
ICAgID0+IFsgQHNhdmUxLCAndHlwZScsICdpbml0aWFsVmFsdWUnLCAnZGJpbmRleF90eXBlJywg
J3ZhbHVlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0
dHJpYnV0ZXMnLCAnYXV0b19pbmNyZW1lbnQnLCAnYWxsb3dfbnVsbCcgXSwKICAgICdVTUw6RW51
bWVyYXRpb24nICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOkVudW1lcmF0aW9uTGl0
ZXJhbCcgICA9PiBbIEBzYXZlMSwgJ3ZhbHVlJyBdLAogICAgJ1VNTDpQYWNrYWdlJyAgICAgICAg
ICAgICAgPT4gWyBAc2F2ZTEsICd4bWkuZXh0ZW5kZXInIF0sCiAgICAnVU1MOk1vZGVsJyAgICAg
ICAgICAgICAgICA9PiBbIEBzYXZlMSBdLAogICAgJ2V4dGVybmFsX2ZpbGUnICAgICAgICAgICAg
PT4gWyAnbmFtZScsICdmaWxlbmFtZScsICdtYWluTW9kZWwnLCAncGFyZW50SWQnLCAncGFyZW50
JyBdLAogICAgJ1VNTDpGb3JlaWduS2V5Q29uc3RyYWludCcgPT4gWyBAc2F2ZTEsICdyZWZlcmVu
Y2VkRW50aXR5JywgJ3VwZGF0ZUFjdGlvbicsICdkZWxldGVBY3Rpb24nIF0sCiAgICAnQXR0cmli
dXRlTWFwJyAgICAgICAgICAgICA9PiBbICdrZXknLCAndmFsdWUnIF0sCiAgICAnVU1MOkluc3Rh
bmNlJyAgICAgICAgICAgICA9PiBbIEBzYXZlMSwgJ2NsYXNzaWZpZXInIF0sCiAgICAnVU1MOklu
c3RhbmNlQXR0cmlidXRlJyAgICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAnaW5pdGlhbFZhbHVlJywg
J2F0dHJpYnV0ZXMnIF0sCiAgICAnVU1MOk5vZGUnICAgICAgICAgICAgICAgICA9PiBbIEBzYXZl
MSBdLAogICAgJ1VNTDpQb3J0JyAgICAgICAgICAgICAgICAgPT4gWyBAc2F2ZTEgXSwKICAgICdV
TUw6U3RlcmVvdHlwZScgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1MOlRlbXBsYXRl
UGFyYW1ldGVyJyAgICA9PiBbIEBzYXZlMSwgJ3R5cGUnIF0sCiAgICAnVU1MOkFzc29jaWF0aW9u
RW5kJyAgICAgICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAnbXVsdGlwbGljaXR5JywgJ2FnZ3JlZ2F0
aW9uJywgJ2lzTmF2aWdhYmxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3JlbGF0aW9uc2hpcCcsICd2aXNpYmlsaXR5JywgJ2NoYW5nZWFiaWxpdHknIF0s
CiAgICAnVU1MOlVuaXF1ZUNvbnN0cmFpbnQnICAgICA9PiBbIEBzYXZlMSwgJ2lzUHJpbWFyeScg
XSwKICAgICdVTUw6VXNlQ2FzZScgICAgICAgICAgICAgID0+IFsgQHNhdmUxIF0sCiAgICAnVU1M
Ok9wZXJhdGlvbicgICAgICAgICAgICA9PiBbIEBzYXZlMSwgJ2lzUXVlcnknLCAnaXNPdmVycmlk
ZScsICdpc1ZpcnR1YWwnLCAnaXNJbmxpbmUnIF0sCiAgICAnVU1MOlBhcmFtZXRlcicgICAgICAg
ICAgICA9PiBbIEBzYXZlMSwgJ3R5cGUnLCAndmFsdWUnLCAna2luZCcgXSwKCiAgICAnZGlhZ3Jh
bScgICAgICAgICAgICAgICAgICA9PiBbICd4bWkuaWQnLCAnbmFtZScsICd0eXBlJywgJ2RvY3Vt
ZW50YXRpb24nLCAnYmFja2dyb3VuZGNvbG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2ZpbGxjb2xvcicsICdmb250JywgJ2dyaWRkb3Rjb2xvcicsICdsaW5lY29sb3In
LCAnbGluZXdpZHRoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHRj
b2xvcicsICd1c2VmaWxsY29sb3InLCAnc2hvd2F0dHJpYmFzc29jcycsICdzaG93YXR0cycsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93YXR0c2lnJywgJ3Nob3dvcHMn
LCAnc2hvd29wc2lnJywgJ3Nob3dwYWNrYWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Nob3dwdWJsaWNvbmx5JywgJ3Nob3dzY29wZScsICdzaG93ZG9jdW1lbnRhdGlv
bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93c3RlcmVvdHlwZScs
ICdsb2NhbGlkJywgJ3Nob3dncmlkJywgJ3NuYXBncmlkJywgJ3NuYXBjc2dyaWQnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc25hcHgnLCAnc25hcHknLCAnem9vbScsICdj
YW52YXNoZWlnaHQnLCAnY2FudmFzd2lkdGgnLCAnaXNvcGVuJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2F1dG9pbmNyZW1lbnRzZXF1ZW5jZScgXSwKCiAgICAnYWN0aXZp
dHl3aWRnZXQnICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQsICdhY3Rpdml0eW5hbWUnLCAnZG9j
dW1lbnRhdGlvbicsICdwcmVjb25kaXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncG9zdGNvbmRpdGlvbicsICdhY3Rpdml0eXR5cGUnIF0sCiAg
ICAnYWN0b3J3aWRnZXQnICAgICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAgICdhcnRp
ZmFjdHdpZGdldCcgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCBdLAogICAgJ2xpbmVwYXRoJyAg
ICAgICAgICAgICAgICAgPT4gWyAnbGF5b3V0JyBdLAogICAgJ3N0YXJ0cG9pbnQnICAgICAgICAg
ICAgICAgPT4gWyAnc3RhcnR4JywgJ3N0YXJ0eScgXSwKICAgICdlbmRwb2ludCcgICAgICAgICAg
ICAgICAgID0+IFsgJ2VuZHgnLCAnZW5keScgXSwKICAgICdwb2ludCcgICAgICAgICAgICAgICAg
ICAgID0+IFsgJ3gnLCAneScgXSwKICAgICdhc3NvY3dpZGdldCcgICAgICAgICAgICAgID0+IFsg
QHdpZGdldGJhc2UsICdzZXFudW0nLCAneG1pLmlkJywgJ3R5cGUnLCAndmlzaWJpbGl0eUEnLCAn
dmlzaWJpbGl0eUInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5n
ZWFiaWxpdHlBJywgJ2NoYW5nZWFiaWxpdHlCJywgJ3JvbGVBZG9jJywgJ3JvbGVCZG9jJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb2N1bWVudGF0aW9uJywgJ3dpZGdl
dGFpZCcsICd3aWRnZXRiaWQnLCAnYXNzb2NjbGFzcycsICdhY2xzZWdpbmRleCcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5kZXhhJywgJ3RvdGFsY291bnRhJywgJ2lu
ZGV4YicsICd0b3RhbGNvdW50YicgXSwKICAgICdib3h3aWRnZXQnICAgICAgICAgICAgICAgID0+
IFsgQHVtbHdpZGdldCBdLAogICAgJ2NhdGVnb3J5d2lkZ2V0JyAgICAgICAgICAgPT4gWyBAdW1s
d2lkZ2V0IF0sCiAgICAncGFja2FnZXdpZGdldCcgICAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVy
d2lkZ2V0IF0sCiAgICAnaW5zdGFuY2V3aWRnZXQnICAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVy
d2lkZ2V0IF0sCiAgICAnaW50ZXJmYWNld2lkZ2V0JyAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVy
d2lkZ2V0IF0sCiAgICAnaW50ZXJmYWNld2lkZ2V0JyAgICAgICAgICA9PiBbIEBjbGFzc2lmaWVy
d2lkZ2V0IF0sCiAgICAnY29tYmluZWRmcmFnbWVudHdpZGdldCcgICA9PiBbIEB1bWx3aWRnZXQs
ICdjb21iaW5lZEZyYWdtZW50bmFtZScsICdkb2N1bWVudGF0aW9uJywgJ0NvbWJpbmVkRnJhZ21l
bnR0eXBlJyBdLAogICAgJ2NvbXBvbmVudHdpZGdldCcgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0
IF0sCiAgICAnZGF0YXR5cGV3aWRnZXQnICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAg
ICdlbnRpdHl3aWRnZXQnICAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCBdLAogICAgJ2VudW13
aWRnZXQnICAgICAgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0LCAnc2hvd3BhY2thZ2UnIF0sCiAg
ICAnZmxvYXRpbmdkYXNobGluZXdpZGdldCcgICA9PiBbIEB1bWx3aWRnZXQsICd0ZXh0JywgJ21p
blknLCAnbWF4WScgXSwKICAgICdmbG9hdGluZ3RleHQnICAgICAgICAgICAgID0+IFsgQHVtbHdp
ZGdldCwgJ3RleHQnLCAncHJldGV4dCcsICdwb3N0dGV4dCcsICdyb2xlJyBdLAogICAgJ2Zvcmtq
b2luJyAgICAgICAgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0LCAnZHJhd3ZlcnRpY2FsJyBdLAog
ICAgJ21lc3NhZ2V3aWRnZXQnICAgICAgICAgICAgPT4gWyBAdW1sd2lkZ2V0LCAnc2VxbnVtJywg
J3dpZGdldGFpZCcsICd3aWRnZXRiaWQnLCAnb3BlcmF0aW9uJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlcXVlbmNlbWVzc2FnZXR5cGUnLCAneGNs
aWNrZWQnLCAneWNsaWNrZWQnIF0sCiAgICAnbm9kZXdpZGdldCcgICAgICAgICAgICAgICA9PiBb
IEB1bWx3aWRnZXQgXSwKICAgICdub3Rld2lkZ2V0JyAgICAgICAgICAgICAgID0+IFsgQHVtbHdp
ZGdldCwgJ3RleHQnLCAnZGlhZ3JhbWxpbmsnLCAnbm90ZVR5cGUnIF0sCiAgICAnb2JqZWN0bm9k
ZXdpZGdldCcgICAgICAgICA9PiBbIEB1bWx3aWRnZXQsICdvYmplY3Rub2RlbmFtZScsICdkb2N1
bWVudGF0aW9uJywgJ29iamVjdG5vZGV0eXBlJywgJ29iamVjdG5vZGVzdGF0ZScgXSwKICAgICdv
YmplY3R3aWRnZXQnICAgICAgICAgICAgID0+IFsgQHVtbHdpZGdldCwgJ2RyYXdhc2FjdG9yJywg
J211bHRpcGxlaW5zdGFuY2UnLCAnZGVjb24nIF0sCiAgICAncGFja2FnZXdpZGdldCcgICAgICAg
ICAgICA9PiBbIEB1bWx3aWRnZXQgXSwKICAgICdwaW53aWRnZXQnICAgICAgICAgICAgICAgID0+
IFsgJ3dpZGdldGFpZCcsIEB1bWx3aWRnZXQgXSwKICAgICdwb3J0d2lkZ2V0JyAgICAgICAgICAg
ICAgID0+IFsgJ3dpZGdldGFpZCcsIEB1bWx3aWRnZXQgXSwKICAgICdwcmVjb25kaXRpb253aWRn
ZXQnICAgICAgID0+IFsgQHVtbHdpZGdldCwgJ3dpZGdldGFpZCcsICdwcmVjb25kaXRpb25uYW1l
JywgJ2RvY3VtZW50YXRpb24nIF0sCiAgICAncmVnaW9ud2lkZ2V0JyAgICAgICAgICAgICA9PiBb
IEB1bWx3aWRnZXQsICdyZWdpb25uYW1lJywgJ2RvY3VtZW50YXRpb24nIF0sCiAgICAnc2lnbmFs
d2lkZ2V0JyAgICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQsICdzaWduYWxuYW1lJywgJ2RvY3Vt
ZW50YXRpb24nLCAnc2lnbmFsdHlwZScsICd0ZXh0aWQnIF0sCiAgICAnc3RhdGV3aWRnZXQnICAg
ICAgICAgICAgICA9PiBbIEB1bWx3aWRnZXQsICdzdGF0ZW5hbWUnLCAnZG9jdW1lbnRhdGlvbics
ICdzdGF0ZXR5cGUnLCAnZHJhd3ZlcnRpY2FsJyBdLAogICAgJ0FjdGl2aXR5JyAgICAgICAgICAg
ICAgICAgPT4gWyAnbmFtZScgXSwKICAgICd1c2VjYXNld2lkZ2V0JyAgICAgICAgICAgID0+IFsg
QHVtbHdpZGdldCBdLAogICAgJ2RvY3NldHRpbmdzJyAgICAgICAgICAgICAgPT4gWyAndmlld2lk
JywgJ2RvY3VtZW50YXRpb24nLCAndW5pcXVlaWQnIF0sCiAgICAnbGlzdGl0ZW0nICAgICAgICAg
ICAgICAgICA9PiBbICdpZCcsICd0eXBlJywgJ2xhYmVsJywgJ29wZW4nIF0KICApOwoKQEFSR1Yg
b3IgZGllICJwcm92aWRlIHVtYnJlbGxvIHhtaSBmaWxlXG4iOwoKbXkgJGluZmlsZSA9ICRBUkdW
WzBdOwoKb3BlbihJTiwgIjwiLCAkaW5maWxlKSBvciBkaWUgImNhbm5vdCBvcGVuIGZpbGUgJGlu
ZmlsZVxuIjsKCndoaWxlICg8SU4+KSB7CiAgICBjaG9tcDsKICAgIG15ICRsaW5lID0gJF87CiAg
ICBteSAkb3V0ZXJNb2RlbCA9IDA7CiAgICAjIFRoZSBvdXRlcm1vc3QgPFVNTDpNb2RlbD4gaGFz
IGl0cyBhdHRyaWJ1dGVzIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4KICAgICMgdGhlIG5lc3Rl
ZCA8VU1MOk1vZGVsPnMuCiAgICAjICRhdHRyTWFweydVTUw6TW9kZWwnfSBkZWZpbmVzIHRoZSBv
cmRlciBmb3IgdGhlIG5lc3RlZCA8VU1MOk1vZGVsPnMuCiAgICAjIFdlIGhhbmRsZSB0aGUgb3V0
ZXJtb3N0IDxVTUw6TW9kZWw+IGhlcmU6CiAgICBpZiAoJGxpbmUgPX4gL14gID88KFVNTDpNb2Rl
bCkgLykgewogICAgICAgIG15ICR0YWcgPSAkMTsKICAgICAgICBwcmludF90YWdsaW5lKCR0YWcs
ICRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgJ3htaS5pZCcsICduYW1lJywgJ2lzU3BlY2lm
aWNhdGlvbicsICdpc0Fic3RyYWN0JywgJ2lzUm9vdCcsICdpc0xlYWYnKTsKICAgICAgICBuZXh0
OwogICAgfQogICAgbXkgQG1hcEVudHJ5ID0gZ3JlcCB7ICRsaW5lID1+IC9eXHMqPCRfIC8gfSBr
ZXlzICVhdHRyTWFwOwogICAgaWYgKCRsaW5lID1+IC9mbG9hdGluZ3RleHQvKSB7CiAgICAgIHBy
aW50ICJcbiI7CiAgICB9CiAgICB1bmxlc3MgKEBtYXBFbnRyeSkgewogICAgICAgIHByaW50ICIk
bGluZVxuIjsKICAgICAgICBuZXh0OwogICAgfQogICAgbXkgJHRhZyA9ICRtYXBFbnRyeVswXTsK
ICAgIHByaW50X3RhZ2xpbmUoJHRhZywgJGxpbmUsIEB7JGF0dHJNYXB7JHRhZ319KTsKfQoKc3Vi
IHByaW50X3RhZ2xpbmUgewogICAgbXkgKCR0YWcsICRsaW5lLCBAYXR0cmliT3JkZXIpID0gQF87
CiAgICBteSAkc3BhY2UgPSAkbGluZTsKICAgICRzcGFjZSA9fiBzLzwuKyQvLzsKICAgICRsaW5l
ID1+IHMvXlxzKjxbXiBdKy8vOwogICAgbXkgQGF0dHJBc3NpZ25tZW50cyA9ICRsaW5lID1+IC9b
XHcuOl0rPSJbXiJdKiIvZzsKICAgIG15ICVhdHRyaWJzOwogICAgZm9yZWFjaCBteSAkYXR0YXNz
IChAYXR0ckFzc2lnbm1lbnRzKSB7CiAgICAgICAgbXkgJGF0dE5hbWUgPSAkYXR0YXNzOwogICAg
ICAgICRhdHROYW1lID1+IHMvPS4rJC8vOwogICAgICAgIG15ICRhdHRWYWwgID0gJGF0dGFzczsK
ICAgICAgICAkYXR0VmFsICA9fiBzL15bXHcuOl0rPS8vOwogICAgICAgICRhdHRyaWJzeyRhdHRO
YW1lfSA9ICRhdHRWYWw7CiAgICB9CiAgICBteSAkZW5kID0gKCRsaW5lID1+IC9cLz4kLykgPyAi
Lz4iIDogIj4iOwogICAgcHJpbnQgIiRzcGFjZTwkdGFnIjsKICAgIGZvcmVhY2ggbXkgJGF0dE5h
bWUgKEBhdHRyaWJPcmRlcikgewogICAgICAgIGV4aXN0cyAkYXR0cmlic3skYXR0TmFtZX0gb3Ig
bmV4dDsKICAgICAgICBteSAkdmFsdWUgPSAkYXR0cmlic3skYXR0TmFtZX07CiAgICAgICAgcHJp
bnQgIiAkYXR0TmFtZT0kdmFsdWUiOwogICAgfQogICAgcHJpbnQgIiRlbmRcbiI7Cn0KCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>