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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>141422</bug_id>
          
          <creation_ts>2015-02-10 03:37:02 -0800</creation_ts>
          <short_desc>[CSS Grid Layout] Update track sizes after distributing extra space</short_desc>
          <delta_ts>2015-04-09 22:28:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140883</dependson>
          <blocked>60731</blocked>
    
    <blocked>141431</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>oliver</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068020</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-02-10 03:37:02 -0800</bug_when>
    <thetext>Both old and new tracks sizing algorithms instruct us to update the sizes of the content sized tracks only after distributing the extra space for all the items in the same span group. So far we have been doing it inside distributeSpaceToTracks(), i.e., once for every single item. That is wrong because it makes the algorithm order dependent.

The problem is that our code is like this:

resolveContentBasedTrackSizingFunctions()
    for each item resolveContentBasedTrackSizingFunctionsForItems() (x4)
        distributeSpaceToTracks()
            updateTrackSizes();

We must move the update out of the distributeSpaceToTracks(). We also need to call resolveContentBasedTrackSizingFunctionsForItems() with all the items with a particular span instead of one by one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072038</commentid>
    <comment_count>1</comment_count>
      <attachid>247328</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-02-25 03:56:04 -0800</bug_when>
    <thetext>Created attachment 247328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072698</commentid>
    <comment_count>2</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-02-27 07:48:23 -0800</bug_when>
    <thetext>Ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076950</commentid>
    <comment_count>3</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-03-13 09:03:57 -0700</bug_when>
    <thetext>Knock, knock reviewers :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080569</commentid>
    <comment_count>4</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-03-27 01:29:24 -0700</bug_when>
    <thetext>Any chance to get this reviewed? It&apos;s more than 1 month old</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082008</commentid>
    <comment_count>5</comment_count>
      <attachid>247328</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-01 08:53:58 -0700</bug_when>
    <thetext>Comment on attachment 247328
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=247328&amp;action=review

Ok but...

&gt; Source/WebCore/rendering/RenderGrid.cpp:619
&gt; +struct GridItemsSpanGroupRange {
&gt; +    Vector&lt;GridItemWithSpan&gt;::iterator rangeStart;
&gt; +    Vector&lt;GridItemWithSpan&gt;::iterator rangeEnd;
&gt; +};

Maybe you could use WTF::IteratorRange?

&gt; Source/WebCore/rendering/RenderGrid.cpp:694
&gt; +            GridTrack&amp; track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()];

Indexing to array with unchecked.

&gt; Source/WebCore/rendering/RenderGrid.cpp:696
&gt; +            spanningTracksSize += (track.*correctedTrackSize)();
&gt; +            if (!(trackSize.*filterFunction)())

Raw function pointers.

&gt; Source/WebCore/rendering/RenderGrid.cpp:699
&gt; +            sizingData.filteredTracks.append(&amp;track);

Raw pointer.

All this stuff looks scary and potentially insecure. I don&apos;t doubt that the logic is sound but is there any way to make this code look less like a disaster waiting to happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082013</commentid>
    <comment_count>6</comment_count>
      <attachid>247328</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-01 09:03:45 -0700</bug_when>
    <thetext>Comment on attachment 247328
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=247328&amp;action=review

&gt; Source/WebCore/rendering/RenderGrid.cpp:645
&gt; +        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &amp;RenderGrid::minContentForChild, &amp;GridTrack::baseSize, &amp;GridTrack::baseSize, &amp;GridTrack::setBaseSize, &amp;GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth);

The argument list is rather incomprehensible. Maybe you should consider passing them as a struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082014</commentid>
    <comment_count>7</comment_count>
      <attachid>247328</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-04-01 09:10:09 -0700</bug_when>
    <thetext>Comment on attachment 247328
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=247328&amp;action=review

&gt; Source/WebCore/rendering/RenderGrid.cpp:82
&gt; +    const LayoutUnit&amp; plannedSize() const { return m_plannedSize; }

Any particular reason to return a reference here?

&gt; Source/WebCore/rendering/RenderGrid.cpp:84
&gt; +    void setPlannedSize(const LayoutUnit&amp; plannedSize)

const LayoutUnit&amp; plannedSize -&gt; LayoutUnit plannedSize

&gt; Source/WebCore/rendering/RenderGrid.cpp:89
&gt; +    LayoutUnit&amp; tempSize() { return m_tempSize; }

Any particular reason to return a reference here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082190</commentid>
    <comment_count>8</comment_count>
      <attachid>247328</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-02 01:22:10 -0700</bug_when>
    <thetext>Comment on attachment 247328
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=247328&amp;action=review

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:82
&gt;&gt; +    const LayoutUnit&amp; plannedSize() const { return m_plannedSize; }
&gt; 
&gt; Any particular reason to return a reference here?

It was suggested by Darin in a previous patch to avoid giving public access to the attribute. But since we have setPlannedSize() now we can remove the reference.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:84
&gt;&gt; +    void setPlannedSize(const LayoutUnit&amp; plannedSize)
&gt; 
&gt; const LayoutUnit&amp; plannedSize -&gt; LayoutUnit plannedSize

OK

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:89
&gt;&gt; +    LayoutUnit&amp; tempSize() { return m_tempSize; }
&gt; 
&gt; Any particular reason to return a reference here?

That&apos;s because that particular attribute is basically initialized and then incremented several times. So in order to avoid setTempSize(tempSize() + increment) I decided to return a reference and directly do tempSize() += increment

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:619
&gt;&gt; +};
&gt; 
&gt; Maybe you could use WTF::IteratorRange?

Interesting, I&apos;ll try indeed.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:645
&gt;&gt; +        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &amp;RenderGrid::minContentForChild, &amp;GridTrack::baseSize, &amp;GridTrack::baseSize, &amp;GridTrack::setBaseSize, &amp;GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth);
&gt; 
&gt; The argument list is rather incomprehensible. Maybe you should consider passing them as a struct.

Agree, I&apos;ll do it in a follow-up patch.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:699
&gt;&gt; +            sizingData.filteredTracks.append(&amp;track);
&gt; 
&gt; Raw pointer.
&gt; 
&gt; All this stuff looks scary and potentially insecure. I don&apos;t doubt that the logic is sound but is there any way to make this code look less like a disaster waiting to happen?

This particular change does not add any of the issues you are mentioning. So although I agree with your smart comments I think we should fix those in a different bug in order to isolate these changes in the algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082213</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-02 05:54:38 -0700</bug_when>
    <thetext>&gt; This particular change does not add any of the issues you are mentioning. So
&gt; although I agree with your smart comments I think we should fix those in a
&gt; different bug in order to isolate these changes in the algorithm.

Right, that&apos;s why I r+&apos;d this. It was more of a general comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083307</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-07 07:54:35 -0700</bug_when>
    <thetext>Committed r182472: &lt;http://trac.webkit.org/changeset/182472&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083714</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-04-08 13:08:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r182472: &lt;http://trac.webkit.org/changeset/182472&gt;

Some time travel in the changelog entry dates. I dunno if we normally fix that or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084203</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-09 22:28:50 -0700</bug_when>
    <thetext>We usually don’t bother, but any committer can fix it if they like. Not worth posting a patch just to do so.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247328</attachid>
            <date>2015-02-25 03:56:04 -0800</date>
            <delta_ts>2015-04-01 08:53:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141422-20150225125550.patch</filename>
            <type>text/plain</type>
            <size>32360</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVjMTA3YzE0ZGRhNzFi
YzY3YWJhZDZhZWNhOTQzNjQxMjlkOWU4Yy4uYjk4MGQ5YWQ5ZTFiNjMyYWI4OWJjNzQ1MzkxYjg4
NTg5ODNmMDA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcxIEBACiAyMDE1LTAyLTI1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFVwZGF0ZSB0cmFjayBzaXplcyBhZnRlciBkaXN0cmlidXRpbmcgZXh0cmEgc3Bh
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJvdGgg
b2xkIGFuZCBuZXcgdHJhY2tzIHNpemluZyBhbGdvcml0aG1zIGluc3RydWN0IHVzIHRvIHVwZGF0
ZQorICAgICAgICB0aGUgc2l6ZXMgb2YgdGhlIGNvbnRlbnQgc2l6ZWQgdHJhY2tzIG9ubHkgYWZ0
ZXIgZGlzdHJpYnV0aW5nIHRoZQorICAgICAgICBleHRyYSBzcGFjZSBmb3IgYWxsIHRoZSBpdGVt
cyBpbiB0aGUgc2FtZSBzcGFuIGdyb3VwLiBTbyBmYXIgd2UKKyAgICAgICAgd2VyZSBkb2luZyBp
dCBpbnNpZGUgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoKSwgaS5lLiwgb25jZSBmb3IKKyAgICAg
ICAgZXZlcnkgc2luZ2xlIGl0ZW0uIFRoYXQgaXMgd3JvbmcgYmVjYXVzZSBpdCBtYWtlcyB0aGUg
YWxnb3JpdGhtCisgICAgICAgIG9yZGVyIGRlcGVuZGVudC4KKworICAgICAgICBPdXIgb2xkIGlt
cGxlbWVudGF0aW9uIGxvb2tlZCBzb21ldGhpbmcgbGlrZSB0aGlzIChwc2V1ZG9jb2RlKToKKwor
ICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoKQorICAgICAg
ICAgIGZvcmVhY2ggaXRlbQorICAgICAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zRm9ySXRlbXMoKSAoeDQpCisgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTcGFj
ZVRvVHJhY2tzKCkKKyAgICAgICAgICAgICAgICB1cGRhdGVUcmFja1NpemVzKCkKKworICAgICAg
ICBOb3cgaXQncyBkb25lIHRoaXMgd2F5IChwc2V1ZG9jb2RlKToKKworICAgICAgICByZXNvbHZl
Q29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoKQorICAgICAgICAgIGZvcmVhY2ggc3Bh
bkdyb3VwCisgICAgICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlv
bnNGb3JJdGVtcygpICh4NCkKKyAgICAgICAgICAgICAgZm9yZWFjaCBpdGVtIGluIHNwYW5Hcm91
cAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKCkKKyAgICAgICAgICAg
ICAgdXBkYXRlVHJhY2tTaXplcygpCisKKyAgICAgICAgQXMgaXQgY2FuIGJlIHNlZW4gdGhlIHVw
ZGF0ZSBvZiB0cmFjayBzaXplcyBvbmx5IGhhcHBlbnMgYWZ0ZXIKKyAgICAgICAgcHJvY2Vzc2lu
ZyBhbGwgdGhlIGl0ZW1zIG9mIGEgZ2l2ZW4gc3BhbiBncm91cC4gSW4gb3JkZXIgdG8KKyAgICAg
ICAgYWNjb21wbGlzaCB0aGlzIGEgbmV3IGZpZWxkIHdhcyBhZGRlZCB0byBHcmlkVHJhY2sgY2Fs
bGVkCisgICAgICAgIHRlbXBJbmNyZWFzZSB3aGljaCBzdG9yZXMgcGVyLXRyYWNrIGluY3JlYXNl
cyB3aGlsZSBkaXN0cmlidXRpbmcKKyAgICAgICAgdGhlIGV4dHJhIHNwYWNlIGFtb25nIHRoZSBp
dGVtcyBpbiB0aGUgc2FtZSBzcGFuIGdyb3VwLiBUaGF0CisgICAgICAgIHRlbXBvcmFsIGluY3Jl
YXNlIGNvdWxkIGV2ZW50dWFsbHkgYmUgdXNlZCB0byB1cGRhdGUgdGhlCisgICAgICAgIHBsYW5u
ZWRJbmNyZWFzZSB3aGljaCBpcyB0aGUgb25lIHdlIHVzZSB0byBmaW5hbGx5IHNldCB0aGUgbmV3
CisgICAgICAgIHNpemUgb2YgdGhlIHRyYWNrLgorCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2Vz
IG91ciBpbXBsZW1lbnRhdGlvbiBjbG9zZXIgdG8gdGhlIHNwZWMsIHJlbW92ZXMKKyAgICAgICAg
dGhlIG9yZGVyIGRlcGVuZGVuY3kgYW5kIGVuc3VyZXMgdGhhdCBldmVyeSB0cmFjayBzYXRpc2Zp
ZXMgdGhlaXIKKyAgICAgICAgbWluIHRyYWNrIHNpemluZyBmdW5jdGlvbnMgYmVmb3JlIHN0YXJ0
aW5nIHRvIGNvbnNpZGVyIHRoZSBtYXgKKyAgICAgICAgdHJhY2sgc2l6aW5nIGZ1bmN0aW9ucy4K
KworICAgICAgICBUZXN0OiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLXVwZGF0ZS1zaXplcy1h
ZnRlci1kaXN0cmlidXRpbmctYWxsLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFjazo6cGxhbm5lZFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrOjpzZXRQbGFubmVkU2l6ZSk6IE5ldyBzZXR0ZXIuCisg
ICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2s6OnRlbXBTaXplKTogTmV3IGF0dHJpYnV0ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNr
cyk6CisgICAgICAgIFJlbmRlckdyaWQ6OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKCkgbm8gbG9u
Z2VyIHVwZGF0ZXMgdGhlIHRyYWNrCisgICAgICAgIHNpemVzIHNvIHdlIGhhdmUgdG8gZG8gaXQg
YWZ0ZXIgdGhlIGNhbGwgcmV0dXJucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJl
c29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9ucyk6CisgICAgICAgIENhbGwgUmVu
ZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMo
KQorICAgICAgICBwYXNzaW5nIGEgc3BhbiBncm91cCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGl0ZW0u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tT
aXppbmdGdW5jdGlvbnNGb3JJdGVtcyk6CisgICAgICAgIEl0IG5vdyByZWNlaXZlcyBhIHNwYW4g
Z3JvdXAgaW5zdGVhZCBvZiBhIHNpbmdsZSBpdGVtLiBBcGFydCBmcm9tCisgICAgICAgIHRoYXQg
d2UgbmVlZCBhbiBleHRyYSBmdW5jdGlvbiB0byBnZXQgdGhlIHVuYWx0ZXJlZCB0cmFjayBzaXpl
IChhcworICAgICAgICB0aGUgY3VycmVudCBvbmUgcmV0dXJucyB0aGUgYmFzZSBzaXplIHdoZW5l
dmVyIHRoZSBncm93dGggbGltaXQgaXMKKyAgICAgICAgaW5maW5pdHkpLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MpOiBUaGlzIG5vIGxvbmdl
cgorICAgICAgICB1cGRhdGVzIHRyYWNrIHNpemVzIGJ1dCBvbmx5IHRoZSB0cmFjaydzIHBsYW5u
ZWQgc2l6ZTsKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5oOgorCisyMDE1LTAyLTI1
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtD
U1MgR3JpZCBMYXlvdXRdIFRyYWNrcyBncm93aW5nIGJleW9uZCBsaW1pdHMgd2hlbiB0aGV5IHNo
b3VsZCBub3QKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MDg4MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggNzcx
MGY1ZTIxY2Y5Nzk1Y2Q5NWU0YTEyZGQyYTgwMzY1ZDEwYzk0NC4uZDNlMzBiZjMxYzFmMjlmYjYy
NzA5M2E5YTU4ZDc4MzUxNjBjNTc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcApAQCAtNzksMTEgKzc5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIChtX2dy
b3d0aExpbWl0ID09IGluZmluaXR5KSA/IG1fYmFzZVNpemUgOiBtX2dyb3d0aExpbWl0OwogICAg
IH0KIAotICAgIExheW91dFVuaXQmIHBsYW5uZWRTaXplKCkKKyAgICBjb25zdCBMYXlvdXRVbml0
JiBwbGFubmVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhbm5lZFNpemU7IH0KKworICAgIHZv
aWQgc2V0UGxhbm5lZFNpemUoY29uc3QgTGF5b3V0VW5pdCYgcGxhbm5lZFNpemUpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9wbGFubmVkU2l6ZTsKKyAgICAgICAgbV9wbGFubmVkU2l6ZSA9IHBs
YW5uZWRTaXplOwogICAgIH0KIAorICAgIExheW91dFVuaXQmIHRlbXBTaXplKCkgeyByZXR1cm4g
bV90ZW1wU2l6ZTsgfQorCiBwcml2YXRlOgogICAgIGJvb2wgaXNHcm93dGhMaW1pdEJpZ2dlclRo
YW5CYXNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdyb3d0aExpbWl0SXNJbmZpbml0ZSgpIHx8IG1f
Z3Jvd3RoTGltaXQgPj0gbV9iYXNlU2l6ZTsgfQogCkBAIC05Niw2ICsxMDAsNyBAQCBwcml2YXRl
OgogICAgIExheW91dFVuaXQgbV9iYXNlU2l6ZSB7IDAgfTsKICAgICBMYXlvdXRVbml0IG1fZ3Jv
d3RoTGltaXQgeyAwIH07CiAgICAgTGF5b3V0VW5pdCBtX3BsYW5uZWRTaXplIHsgMCB9OworICAg
IExheW91dFVuaXQgbV90ZW1wU2l6ZSB7IDAgfTsKIH07CiAKIHN0cnVjdCBHcmlkVHJhY2tGb3JO
b3JtYWxpemF0aW9uIHsKQEAgLTM2MiwxMCArMzY3LDE1IEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29t
cHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
Y3RpCiAgICAgaWYgKCFoYXNVbmRlZmluZWRSZW1haW5pbmdTcGFjZSkgewogICAgICAgICBjb25z
dCB1bnNpZ25lZCB0cmFja3NTaXplID0gdHJhY2tzLnNpemUoKTsKICAgICAgICAgVmVjdG9yPEdy
aWRUcmFjayo+IHRyYWNrc0ZvckRpc3RyaWJ1dGlvbih0cmFja3NTaXplKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYWNrc1NpemU7ICsraSkKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRyYWNrc1NpemU7ICsraSkgewogICAgICAgICAgICAgdHJhY2tzRm9y
RGlzdHJpYnV0aW9uW2ldID0gdHJhY2tzLmRhdGEoKSArIGk7CisgICAgICAgICAgICB0cmFja3NG
b3JEaXN0cmlidXRpb25baV0tPnNldFBsYW5uZWRTaXplKHRyYWNrc0ZvckRpc3RyaWJ1dGlvbltp
XS0+YmFzZVNpemUoKSk7CisgICAgICAgIH0KIAotICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1Ry
YWNrcyh0cmFja3NGb3JEaXN0cmlidXRpb24sIG51bGxwdHIsICZHcmlkVHJhY2s6OmJhc2VTaXpl
LCAmR3JpZFRyYWNrOjpzZXRCYXNlU2l6ZSwgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsKKyAgICAg
ICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3ModHJhY2tzRm9yRGlzdHJpYnV0aW9uLCBudWxscHRy
LCAmR3JpZFRyYWNrOjpiYXNlU2l6ZSwgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsKKworICAgICAg
ICBmb3IgKGF1dG8qIHRyYWNrIDogdHJhY2tzRm9yRGlzdHJpYnV0aW9uKQorICAgICAgICAgICAg
dHJhY2stPnNldEJhc2VTaXplKHRyYWNrLT5wbGFubmVkU2l6ZSgpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogdHJhY2tzKQogICAgICAgICAgICAgdHJhY2suc2V0
QmFzZVNpemUodHJhY2suZ3Jvd3RoTGltaXQoKSk7CkBAIC02MDMsNiArNjEzLDExIEBAIHN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgaW50ZWdlclNwYW5Gb3JEaXJlY3Rpb24oY29uc3QgR3JpZENvb3Jk
aW5hdGUmIGNvb3JkaW5hdGUsCiAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9yUm93cykgPyBj
b29yZGluYXRlLnJvd3MuaW50ZWdlclNwYW4oKSA6IGNvb3JkaW5hdGUuY29sdW1ucy5pbnRlZ2Vy
U3BhbigpOwogfQogCitzdHJ1Y3QgR3JpZEl0ZW1zU3Bhbkdyb3VwUmFuZ2UgeworICAgIFZlY3Rv
cjxHcmlkSXRlbVdpdGhTcGFuPjo6aXRlcmF0b3IgcmFuZ2VTdGFydDsKKyAgICBWZWN0b3I8R3Jp
ZEl0ZW1XaXRoU3Bhbj46Oml0ZXJhdG9yIHJhbmdlRW5kOworfTsKKwogdm9pZCBSZW5kZXJHcmlk
OjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpCiB7CiAgICAg
c2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uc2hyaW5rKDApOwpAQCAtNjIz
LDExICs2MzgsMTUgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tT
aXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8KICAgICB9CiAgICAgc3RkOjpz
b3J0KHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmJlZ2luKCksIHNpemlu
Z0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmVuZCgpKTsKIAotICAgIGZvciAoYXV0
byYgaXRlbVdpdGhTcGFuIDogc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4p
IHsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRl
bXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBpdGVtV2l0aFNwYW4sICZHcmlkVHJhY2tTaXplOjpo
YXNNaW5Pck1heENvbnRlbnRNaW5UcmFja0JyZWFkdGgsICZSZW5kZXJHcmlkOjptaW5Db250ZW50
Rm9yQ2hpbGQsICZHcmlkVHJhY2s6OmJhc2VTaXplLCAmR3JpZFRyYWNrOjpzZXRCYXNlU2l6ZSwg
JkdyaWRUcmFja1NpemU6Omhhc01pbkNvbnRlbnRNaW5UcmFja0JyZWFkdGhBbmRNaW5Pck1heENv
bnRlbnRNYXhUcmFja0JyZWFkdGgpOwotICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tT
aXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0RhdGEsIGl0ZW1XaXRoU3Bh
biwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRlbnRNaW5UcmFja0JyZWFkdGgsICZSZW5kZXJH
cmlkOjptYXhDb250ZW50Rm9yQ2hpbGQsICZHcmlkVHJhY2s6OmJhc2VTaXplLCAmR3JpZFRyYWNr
OjpzZXRCYXNlU2l6ZSwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRlbnRNaW5UcmFja0JyZWFk
dGhBbmRNYXhDb250ZW50TWF4VHJhY2tCcmVhZHRoKTsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRC
YXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBp
dGVtV2l0aFNwYW4sICZHcmlkVHJhY2tTaXplOjpoYXNNaW5Pck1heENvbnRlbnRNYXhUcmFja0Jy
ZWFkdGgsICZSZW5kZXJHcmlkOjptaW5Db250ZW50Rm9yQ2hpbGQsICZHcmlkVHJhY2s6Omdyb3d0
aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0R3Jvd3RoTGltaXQpOwotICAgICAg
ICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rp
b24sIHNpemluZ0RhdGEsIGl0ZW1XaXRoU3BhbiwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRl
bnRNYXhUcmFja0JyZWFkdGgsICZSZW5kZXJHcmlkOjptYXhDb250ZW50Rm9yQ2hpbGQsICZHcmlk
VHJhY2s6Omdyb3d0aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0R3Jvd3RoTGlt
aXQpOworICAgIGF1dG8gaXQgPSBzaXppbmdEYXRhLml0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bh
bi5iZWdpbigpOworICAgIGF1dG8gZW5kID0gc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVh
c2luZ1NwYW4uZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICBHcmlkSXRl
bXNTcGFuR3JvdXBSYW5nZSBzcGFuR3JvdXBSYW5nZSA9IHsgaXQsIHN0ZDo6dXBwZXJfYm91bmQo
aXQsIGVuZCwgKml0KSB9OworICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdG
dW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0RhdGEsIHNwYW5Hcm91cFJhbmdlLCAm
R3JpZFRyYWNrU2l6ZTo6aGFzTWluT3JNYXhDb250ZW50TWluVHJhY2tCcmVhZHRoLCAmUmVuZGVy
R3JpZDo6bWluQ29udGVudEZvckNoaWxkLCAmR3JpZFRyYWNrOjpiYXNlU2l6ZSwgJkdyaWRUcmFj
azo6YmFzZVNpemUsICZHcmlkVHJhY2s6OnNldEJhc2VTaXplLCAmR3JpZFRyYWNrU2l6ZTo6aGFz
TWluQ29udGVudE1pblRyYWNrQnJlYWR0aEFuZE1pbk9yTWF4Q29udGVudE1heFRyYWNrQnJlYWR0
aCk7CisgICAgICAgIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0
ZW1zKGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwgc3Bhbkdyb3VwUmFuZ2UsICZHcmlkVHJhY2tTaXpl
OjpoYXNNYXhDb250ZW50TWluVHJhY2tCcmVhZHRoLCAmUmVuZGVyR3JpZDo6bWF4Q29udGVudEZv
ckNoaWxkLCAmR3JpZFRyYWNrOjpiYXNlU2l6ZSwgJkdyaWRUcmFjazo6YmFzZVNpemUsICZHcmlk
VHJhY2s6OnNldEJhc2VTaXplLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWF4Q29udGVudE1pblRyYWNr
QnJlYWR0aEFuZE1heENvbnRlbnRNYXhUcmFja0JyZWFkdGgpOworICAgICAgICByZXNvbHZlQ29u
dGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0Rh
dGEsIHNwYW5Hcm91cFJhbmdlLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWluT3JNYXhDb250ZW50TWF4
VHJhY2tCcmVhZHRoLCAmUmVuZGVyR3JpZDo6bWluQ29udGVudEZvckNoaWxkLCAmR3JpZFRyYWNr
Ojpncm93dGhMaW1pdCwgJkdyaWRUcmFjazo6Z3Jvd3RoTGltaXRJZk5vdEluZmluaXRlLCAmR3Jp
ZFRyYWNrOjpzZXRHcm93dGhMaW1pdCk7CisgICAgICAgIHJlc29sdmVDb250ZW50QmFzZWRUcmFj
a1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwgc3Bhbkdyb3Vw
UmFuZ2UsICZHcmlkVHJhY2tTaXplOjpoYXNNYXhDb250ZW50TWF4VHJhY2tCcmVhZHRoLCAmUmVu
ZGVyR3JpZDo6bWF4Q29udGVudEZvckNoaWxkLCAmR3JpZFRyYWNrOjpncm93dGhMaW1pdCwgJkdy
aWRUcmFjazo6Z3Jvd3RoTGltaXRJZk5vdEluZmluaXRlLCAmR3JpZFRyYWNrOjpzZXRHcm93dGhM
aW1pdCk7CisgICAgICAgIGl0ID0gc3Bhbkdyb3VwUmFuZ2UucmFuZ2VFbmQ7CiAgICAgfQogCiAg
ICAgZm9yIChhdXRvIHRyYWNrSW5kZXggOiBzaXppbmdEYXRhLmNvbnRlbnRTaXplZFRyYWNrc0lu
ZGV4KSB7CkBAIC02NTMsNDEgKzY3Miw1MSBAQCB2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250
ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5uaW5nSXRlbXMoR3JpZAogICAg
ICAgICB0cmFjay5zZXRHcm93dGhMaW1pdChzdGQ6Om1heCh0cmFjay5ncm93dGhMaW1pdCgpLCBt
YXhDb250ZW50Rm9yQ2hpbGQoZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgY29sdW1uVHJhY2tzKSkpOwog
fQogCi12b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0
aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRTaXpp
bmdEYXRhJiBzaXppbmdEYXRhLCBHcmlkSXRlbVdpdGhTcGFuJiBncmlkSXRlbVdpdGhTcGFuLCBG
aWx0ZXJGdW5jdGlvbiBmaWx0ZXJGdW5jdGlvbiwgU2l6aW5nRnVuY3Rpb24gc2l6aW5nRnVuY3Rp
b24sIEFjY3VtdWxhdG9yR2V0dGVyIHRyYWNrR2V0dGVyLCBBY2N1bXVsYXRvckdyb3dGdW5jdGlv
biB0cmFja0dyb3d0aEZ1bmN0aW9uLCBGaWx0ZXJGdW5jdGlvbiBncm93QWJvdmVNYXhCcmVhZHRo
RmlsdGVyRnVuY3Rpb24pCit2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFj
a1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24sIEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhLCBjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBS
YW5nZSYgZ3JpZEl0ZW1zV2l0aFNwYW4sIEZpbHRlckZ1bmN0aW9uIGZpbHRlckZ1bmN0aW9uLCBT
aXppbmdGdW5jdGlvbiBzaXppbmdGdW5jdGlvbiwgQWNjdW11bGF0b3JHZXR0ZXIgdHJhY2tTaXpl
LCBBY2N1bXVsYXRvckdldHRlciBjb3JyZWN0ZWRUcmFja1NpemUsIEFjY3VtdWxhdG9yR3Jvd0Z1
bmN0aW9uIHRyYWNrR3Jvd3RoRnVuY3Rpb24sIEZpbHRlckZ1bmN0aW9uIGdyb3dBYm92ZU1heEJy
ZWFkdGhGaWx0ZXJGdW5jdGlvbikKIHsKLSAgICBBU1NFUlQoZ3JpZEl0ZW1XaXRoU3Bhbi5zcGFu
KCkgPiAxKTsKLSAgICBjb25zdCBHcmlkQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSA9IGdyaWRJdGVt
V2l0aFNwYW4uY29vcmRpbmF0ZSgpOwotICAgIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uIGlu
aXRpYWxUcmFja1Bvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGNvb3JkaW5h
dGUuY29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA6IGNvb3JkaW5hdGUucm93cy5yZXNv
bHZlZEluaXRpYWxQb3NpdGlvbjsKLSAgICBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBmaW5h
bFRyYWNrUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gY29vcmRpbmF0ZS5j
b2x1bW5zLnJlc29sdmVkRmluYWxQb3NpdGlvbiA6IGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZp
bmFsUG9zaXRpb247Ci0KLSAgICBzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzLnNocmluaygwKTsK
LSAgICBzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3Muc2hyaW5rKDApOwot
ICAgIGZvciAoR3JpZFJlc29sdmVkUG9zaXRpb24gdHJhY2tJbmRleCA9IGluaXRpYWxUcmFja1Bv
c2l0aW9uOyB0cmFja0luZGV4IDw9IGZpbmFsVHJhY2tQb3NpdGlvbjsgKyt0cmFja0luZGV4KSB7
Ci0gICAgICAgIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUo
ZGlyZWN0aW9uLCB0cmFja0luZGV4LnRvSW50KCkpOwotICAgICAgICBpZiAoISh0cmFja1NpemUu
KmZpbHRlckZ1bmN0aW9uKSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgR3Jp
ZFRyYWNrJiB0cmFjayA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNv
bHVtblRyYWNrc1t0cmFja0luZGV4LnRvSW50KCldIDogc2l6aW5nRGF0YS5yb3dUcmFja3NbdHJh
Y2tJbmRleC50b0ludCgpXTsKLSAgICAgICAgc2l6aW5nRGF0YS5maWx0ZXJlZFRyYWNrcy5hcHBl
bmQoJnRyYWNrKTsKLQotICAgICAgICBpZiAoIWdyb3dBYm92ZU1heEJyZWFkdGhGaWx0ZXJGdW5j
dGlvbiB8fCAodHJhY2tTaXplLipncm93QWJvdmVNYXhCcmVhZHRoRmlsdGVyRnVuY3Rpb24pKCkp
Ci0gICAgICAgICAgICBzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3MuYXBw
ZW5kKCZ0cmFjayk7CisgICAgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcyA9IChkaXJlY3Rpb24g
PT0gRm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNvbHVtblRyYWNrcyA6IHNpemluZ0RhdGEucm93
VHJhY2tzOworICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2tJbmRleCA6IHNpemluZ0RhdGEuY29u
dGVudFNpemVkVHJhY2tzSW5kZXgpIHsKKyAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IHRyYWNr
c1t0cmFja0luZGV4XTsKKyAgICAgICAgdHJhY2suc2V0UGxhbm5lZFNpemUoKHRyYWNrLip0cmFj
a1NpemUpKCkpOwogICAgIH0KIAotICAgIGlmIChzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGZvciAoYXV0byBpdCA9IGdyaWRJdGVtc1dp
dGhTcGFuLnJhbmdlU3RhcnQ7IGl0ICE9IGdyaWRJdGVtc1dpdGhTcGFuLnJhbmdlRW5kOyArK2l0
KSB7CisgICAgICAgIEdyaWRJdGVtV2l0aFNwYW4mIGdyaWRJdGVtV2l0aFNwYW4gPSAqaXQ7Cisg
ICAgICAgIEFTU0VSVChncmlkSXRlbVdpdGhTcGFuLnNwYW4oKSA+IDEpOworICAgICAgICBjb25z
dCBHcmlkQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSA9IGdyaWRJdGVtV2l0aFNwYW4uY29vcmRpbmF0
ZSgpOworICAgICAgICBjb25zdCBHcmlkU3BhbiYgaXRlbVNwYW4gPSAoZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMpID8gY29vcmRpbmF0ZS5jb2x1bW5zIDogY29vcmRpbmF0ZS5yb3dzOworCisgICAg
ICAgIHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3Muc2hyaW5rKDApOworICAgICAgICBzaXppbmdE
YXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3Muc2hyaW5rKDApOworICAgICAgICBMYXlv
dXRVbml0IHNwYW5uaW5nVHJhY2tzU2l6ZTsKKyAgICAgICAgZm9yIChhdXRvJiB0cmFja1Bvc2l0
aW9uIDogaXRlbVNwYW4pIHsKKyAgICAgICAgICAgIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNr
U2l6ZSA9IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uLnRvSW50KCkpOwor
ICAgICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykg
PyBzaXppbmdEYXRhLmNvbHVtblRyYWNrc1t0cmFja1Bvc2l0aW9uLnRvSW50KCldIDogc2l6aW5n
RGF0YS5yb3dUcmFja3NbdHJhY2tQb3NpdGlvbi50b0ludCgpXTsKKyAgICAgICAgICAgIHNwYW5u
aW5nVHJhY2tzU2l6ZSArPSAodHJhY2suKmNvcnJlY3RlZFRyYWNrU2l6ZSkoKTsKKyAgICAgICAg
ICAgIGlmICghKHRyYWNrU2l6ZS4qZmlsdGVyRnVuY3Rpb24pKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3MuYXBwZW5k
KCZ0cmFjayk7CisKKyAgICAgICAgICAgIGlmICghZ3Jvd0Fib3ZlTWF4QnJlYWR0aEZpbHRlckZ1
bmN0aW9uIHx8ICh0cmFja1NpemUuKmdyb3dBYm92ZU1heEJyZWFkdGhGaWx0ZXJGdW5jdGlvbiko
KSkKKyAgICAgICAgICAgICAgICBzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFj
a3MuYXBwZW5kKCZ0cmFjayk7CisgICAgICAgIH0KIAotICAgIExheW91dFVuaXQgZXh0cmFTcGFj
ZSA9ICh0aGlzLT4qc2l6aW5nRnVuY3Rpb24pKGdyaWRJdGVtV2l0aFNwYW4uZ3JpZEl0ZW0oKSwg
ZGlyZWN0aW9uLCBzaXppbmdEYXRhLmNvbHVtblRyYWNrcyk7Ci0gICAgZm9yIChHcmlkUmVzb2x2
ZWRQb3NpdGlvbiB0cmFja1Bvc2l0aW9uRm9yU3BhY2UgPSBpbml0aWFsVHJhY2tQb3NpdGlvbjsg
dHJhY2tQb3NpdGlvbkZvclNwYWNlIDw9IGZpbmFsVHJhY2tQb3NpdGlvbjsgKyt0cmFja1Bvc2l0
aW9uRm9yU3BhY2UpIHsKLSAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNvbHVtblRyYWNrc1t0cmFja1Bvc2l0aW9uRm9yU3Bh
Y2UudG9JbnQoKV0gOiBzaXppbmdEYXRhLnJvd1RyYWNrc1t0cmFja1Bvc2l0aW9uRm9yU3BhY2Uu
dG9JbnQoKV07Ci0gICAgICAgIGV4dHJhU3BhY2UgLT0gKHRyYWNrLip0cmFja0dldHRlcikoKTsK
KyAgICAgICAgaWYgKHNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3MuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gU3BlY3MgbWFuZGF0ZSB0byBmbG9vciBleHRy
YVNwYWNlIHRvIDAuIEluc3RlYWQgd2UgZGlyZWN0bHkgYXZvaWQgdGhlIGZ1bmN0aW9uIGNhbGwg
aW4gdGhvc2UgY2FzZXMgYXMgaXQgd2lsbCBiZQorICAgICAgICAvLyBhIG5vb3AgaW4gdGVybXMg
b2YgdHJhY2sgc2l6aW5nLgorICAgICAgICBMYXlvdXRVbml0IGV4dHJhU3BhY2UgPSAodGhpcy0+
KnNpemluZ0Z1bmN0aW9uKShncmlkSXRlbVdpdGhTcGFuLmdyaWRJdGVtKCksIGRpcmVjdGlvbiwg
c2l6aW5nRGF0YS5jb2x1bW5UcmFja3MpIC0gc3Bhbm5pbmdUcmFja3NTaXplOworICAgICAgICBp
ZiAoZXh0cmFTcGFjZSA+IDApIHsKKyAgICAgICAgICAgIGF1dG8qIHRyYWNrc1RvR3Jvd0JleW9u
ZEdyb3d0aExpbWl0cyA9IHNpemluZ0RhdGEuZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcy5p
c0VtcHR5KCkgPyAmc2l6aW5nRGF0YS5maWx0ZXJlZFRyYWNrcyA6ICZzaXppbmdEYXRhLmdyb3dC
ZXlvbmRHcm93dGhMaW1pdHNUcmFja3M7CisgICAgICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1Ry
YWNrcyhzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzLCB0cmFja3NUb0dyb3dCZXlvbmRHcm93dGhM
aW1pdHMsIGNvcnJlY3RlZFRyYWNrU2l6ZSwgZXh0cmFTcGFjZSk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICAvLyBTcGVjcyBtYW5kYXRlIHRvIGZsb29yIGV4dHJhU3BhY2UgdG8gMC4gSW5zdGVh
ZCB3ZSBkaXJlY3RseSBhdm9pZCB0aGUgZnVuY3Rpb24gY2FsbCBpbiB0aG9zZSBjYXNlcyBhcyBp
dCB3aWxsIGJlCi0gICAgLy8gYSBub29wIGluIHRlcm1zIG9mIHRyYWNrIHNpemluZy4KLSAgICBp
ZiAoZXh0cmFTcGFjZSA+IDApIHsKLSAgICAgICAgYXV0byogdHJhY2tzVG9Hcm93QmV5b25kR3Jv
d3RoTGltaXRzID0gc2l6aW5nRGF0YS5ncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLmlzRW1w
dHkoKSA/ICZzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzIDogJnNpemluZ0RhdGEuZ3Jvd0JleW9u
ZEdyb3d0aExpbWl0c1RyYWNrczsKLSAgICAgICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3Moc2l6
aW5nRGF0YS5maWx0ZXJlZFRyYWNrcywgdHJhY2tzVG9Hcm93QmV5b25kR3Jvd3RoTGltaXRzLCB0
cmFja0dldHRlciwgdHJhY2tHcm93dGhGdW5jdGlvbiwgZXh0cmFTcGFjZSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiB0cmFja0luZGV4IDogc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRl
eCkgeworICAgICAgICBHcmlkVHJhY2smIHRyYWNrID0gdHJhY2tzW3RyYWNrSW5kZXhdOworICAg
ICAgICAodHJhY2suKnRyYWNrR3Jvd3RoRnVuY3Rpb24pKHRyYWNrLnBsYW5uZWRTaXplKCkpOwog
ICAgIH0KIH0KIApAQCAtNzA0LDcgKzczMyw3IEBAIHN0YXRpYyBib29sIHNvcnRCeUdyaWRUcmFj
a0dyb3d0aFBvdGVudGlhbChjb25zdCBHcmlkVHJhY2sqIHRyYWNrMSwgY29uc3QgR3JpZFRyCiAg
ICAgcmV0dXJuICh0cmFjazEtPmdyb3d0aExpbWl0KCkgLSB0cmFjazEtPmJhc2VTaXplKCkpIDwg
KHRyYWNrMi0+Z3Jvd3RoTGltaXQoKSAtIHRyYWNrMi0+YmFzZVNpemUoKSk7CiB9CiAKLXZvaWQg
UmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0
cmFja3MsIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1Ry
YWNrcywgQWNjdW11bGF0b3JHZXR0ZXIgdHJhY2tHZXR0ZXIsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0
aW9uIHRyYWNrR3Jvd3RoRnVuY3Rpb24sIExheW91dFVuaXQmIGF2YWlsYWJsZUxvZ2ljYWxTcGFj
ZSkKK3ZvaWQgUmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRU
cmFjayo+JiB0cmFja3MsIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0
aExpbWl0c1RyYWNrcywgQWNjdW11bGF0b3JHZXR0ZXIgdHJhY2tHZXR0ZXIsIExheW91dFVuaXQm
IGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSkKIHsKICAgICBBU1NFUlQoYXZhaWxhYmxlTG9naWNhbFNw
YWNlID4gMCk7CiAgICAgc3RkOjpzb3J0KHRyYWNrcy5iZWdpbigpLCB0cmFja3MuZW5kKCksIHNv
cnRCeUdyaWRUcmFja0dyb3d0aFBvdGVudGlhbCk7CkBAIC03MTYsMTMgKzc0NSwxMyBAQCB2b2lk
IFJlbmRlckdyaWQ6OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYg
dHJhY2tzLCBjb25zdCBWZWN0bwogICAgICAgICBjb25zdCBMYXlvdXRVbml0JiB0cmFja0JyZWFk
dGggPSAodHJhY2suKnRyYWNrR2V0dGVyKSgpOwogICAgICAgICBib29sIGluZmluaXRlR3Jvd3Ro
UG90ZW50aWFsID0gdHJhY2suZ3Jvd3RoTGltaXRJc0luZmluaXRlKCk7CiAgICAgICAgIExheW91
dFVuaXQgdHJhY2tHcm93dGhQb3RlbnRpYWwgPSBpbmZpbml0ZUdyb3d0aFBvdGVudGlhbCA/IHRy
YWNrLmdyb3d0aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdCgpIC0gdHJhY2tCcmVhZHRoOwot
ICAgICAgICB0cmFjay5wbGFubmVkU2l6ZSgpID0gdHJhY2tCcmVhZHRoOworICAgICAgICB0cmFj
ay50ZW1wU2l6ZSgpID0gdHJhY2tCcmVhZHRoOwogICAgICAgICAvLyBMZXQncyBhdm9pZCBjb21w
dXRpbmcgYXZhaWxhYmxlTG9naWNhbFNwYWNlU2hhcmUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhcyBp
dCdzIGEgaG90IHNwb3QgaW4gcGVyZm9ybWFuY2UgdGVzdHMuCiAgICAgICAgIGlmICh0cmFja0dy
b3d0aFBvdGVudGlhbCA+IDAgfHwgaW5maW5pdGVHcm93dGhQb3RlbnRpYWwpIHsKICAgICAgICAg
ICAgIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFNwYWNlU2hhcmUgPSBhdmFpbGFibGVMb2dp
Y2FsU3BhY2UgLyAodHJhY2tzU2l6ZSAtIGkpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBncm93
dGhTaGFyZSA9IGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID8gYXZhaWxhYmxlTG9naWNhbFNwYWNl
U2hhcmUgOiBzdGQ6Om1pbihhdmFpbGFibGVMb2dpY2FsU3BhY2VTaGFyZSwgdHJhY2tHcm93dGhQ
b3RlbnRpYWwpOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShncm93dGhTaGFyZSA+
PSAwLCAiV2Ugc2hvdWxkIG5ldmVyIHNocmluayBhbnkgZ3JpZCB0cmFjayBvciBlbHNlIHdlIGNh
bid0IGd1YXJhbnRlZSB3ZSBhYmlkZSBieSBvdXIgbWluLXNpemluZyBmdW5jdGlvbi4gV2UgY2Fu
IHN0aWxsIGhhdmUgMCBhcyBncm93dGhTaGFyZSBpZiB0aGUgYW1vdW50IG9mIHRyYWNrcyBncmVh
dGx5IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZS4iKTsKLSAgICAgICAgICAgIHRy
YWNrLnBsYW5uZWRTaXplKCkgKz0gZ3Jvd3RoU2hhcmU7CisgICAgICAgICAgICB0cmFjay50ZW1w
U2l6ZSgpICs9IGdyb3d0aFNoYXJlOwogICAgICAgICAgICAgYXZhaWxhYmxlTG9naWNhbFNwYWNl
IC09IGdyb3d0aFNoYXJlOwogICAgICAgICB9CiAgICAgfQpAQCAtNzMyLDEzICs3NjEsMTMgQEAg
dm9pZCBSZW5kZXJHcmlkOjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNr
Kj4mIHRyYWNrcywgY29uc3QgVmVjdG8KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRyYWNrc0dyb3dpbmdCZXlvbmRHcm93dGhMaW1pdHNTaXplOyArK2kpIHsKICAgICAgICAgICAg
IEdyaWRUcmFjayogdHJhY2sgPSBncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLT5hdChpKTsK
ICAgICAgICAgICAgIExheW91dFVuaXQgZ3Jvd3RoU2hhcmUgPSBhdmFpbGFibGVMb2dpY2FsU3Bh
Y2UgLyAodHJhY2tzR3Jvd2luZ0JleW9uZEdyb3d0aExpbWl0c1NpemUgLSBpKTsKLSAgICAgICAg
ICAgIHRyYWNrLT5wbGFubmVkU2l6ZSgpICs9IGdyb3d0aFNoYXJlOworICAgICAgICAgICAgdHJh
Y2stPnRlbXBTaXplKCkgKz0gZ3Jvd3RoU2hhcmU7CiAgICAgICAgICAgICBhdmFpbGFibGVMb2dp
Y2FsU3BhY2UgLT0gZ3Jvd3RoU2hhcmU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1
dG8qIHRyYWNrIDogdHJhY2tzKQotICAgICAgICAodHJhY2stPip0cmFja0dyb3d0aEZ1bmN0aW9u
KSh0cmFjay0+cGxhbm5lZFNpemUoKSk7CisgICAgICAgIHRyYWNrLT5zZXRQbGFubmVkU2l6ZShz
dGQ6Om1heCh0cmFjay0+cGxhbm5lZFNpemUoKSwgdHJhY2stPnRlbXBTaXplKCkpKTsKIH0KIAog
I2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IDdm
MDY4OGEwY2E5ODRhNmYzNmU1YmZlMDU5ZmQyYjEyNzk4OTAyNmEuLmU3YTc1OTNhY2E4MGNjYTNl
ODIwZmNmZWUyNWVmYWIyYWU3NmVjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuaApAQCAtOTEsOSArOTEsMTAgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIGNvbnN0IExheW91
dFVuaXQmIChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHZXR0ZXIpKCkgY29uc3Q7CiAgICAgdHlw
ZWRlZiB2b2lkIChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHcm93RnVuY3Rpb24pKExheW91dFVu
aXQpOwogICAgIHR5cGVkZWYgYm9vbCAoR3JpZFRyYWNrU2l6ZTo6KiBGaWx0ZXJGdW5jdGlvbiko
KSBjb25zdDsKKyAgICB0eXBlZGVmIHN0cnVjdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSBHcmlk
SXRlbXNTcGFuR3JvdXBSYW5nZTsKICAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1Np
emluZ0Z1bmN0aW9uc0Zvck5vblNwYW5uaW5nSXRlbXMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
LCBjb25zdCBHcmlkQ29vcmRpbmF0ZSYsIFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFjayYs
IFZlY3RvcjxHcmlkVHJhY2s+JiBjb2x1bW5UcmFja3MpOwotICAgIHZvaWQgcmVzb2x2ZUNvbnRl
bnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uLCBHcmlkU2l6aW5nRGF0YSYsIEdyaWRJdGVtV2l0aFNwYW4mLCBGaWx0ZXJGdW5jdGlvbiwg
U2l6aW5nRnVuY3Rpb24sIEFjY3VtdWxhdG9yR2V0dGVyLCBBY2N1bXVsYXRvckdyb3dGdW5jdGlv
biwgRmlsdGVyRnVuY3Rpb24gZ3Jvd0Fib3ZlTWF4QnJlYWR0aEZpbHRlckZ1bmN0aW9uID0gbnVs
bHB0cik7Ci0gICAgdm9pZCBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNr
Kj4mLCBjb25zdCBWZWN0b3I8R3JpZFRyYWNrKj4qIGdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFj
a3MsIEFjY3VtdWxhdG9yR2V0dGVyLCBBY2N1bXVsYXRvckdyb3dGdW5jdGlvbiwgTGF5b3V0VW5p
dCYgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsKKyAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRU
cmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgR3Jp
ZFNpemluZ0RhdGEmLCBjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSYsIEZpbHRlckZ1bmN0
aW9uLCBTaXppbmdGdW5jdGlvbiwgQWNjdW11bGF0b3JHZXR0ZXIgdHJhY2tTaXplLCBBY2N1bXVs
YXRvckdldHRlciBjb3JyZWN0ZWRUcmFja1NpemUsIEFjY3VtdWxhdG9yR3Jvd0Z1bmN0aW9uLCBG
aWx0ZXJGdW5jdGlvbiBncm93QWJvdmVNYXhCcmVhZHRoRmlsdGVyRnVuY3Rpb24gPSBudWxscHRy
KTsKKyAgICB2b2lkIGRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYs
IGNvbnN0IFZlY3RvcjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcywg
QWNjdW11bGF0b3JHZXR0ZXIsIExheW91dFVuaXQmIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSk7CiAK
ICAgICBkb3VibGUgY29tcHV0ZU5vcm1hbGl6ZWRGcmFjdGlvbkJyZWFkdGgoVmVjdG9yPEdyaWRU
cmFjaz4mLCBjb25zdCBHcmlkU3BhbiYgdHJhY2tzU3BhbiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4
YjdhYmU0OWFkYmJlOTQzNDE2ZTg3MzA0Y2QzYzhjMTBiNjJlNDRkLi45Zjk0NjViYTY0OTk2ZjNl
ZmI1NmI5NDQ3MDU1ZjA3YjEzYjQ1NWJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcgQEAKIDIwMTUtMDIt
MjUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKKyAgICAgICAg
W0NTUyBHcmlkIExheW91dF0gVXBkYXRlIHRyYWNrIHNpemVzIGFmdGVyIGRpc3RyaWJ1dGluZyBl
eHRyYSBzcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWNvbnRlbnQtc2l6ZWQtY29sdW1ucy1yZXNv
bHV0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlk
LWNvbnRlbnQtc2l6ZWQtY29sdW1ucy1yZXNvbHV0aW9uLmh0bWw6CisgICAgICAgICogZmFzdC9j
c3MtZ3JpZC1sYXlvdXQvZ3JpZC11cGRhdGUtc2l6ZXMtYWZ0ZXItZGlzdHJpYnV0aW5nLWFsbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQt
dXBkYXRlLXNpemVzLWFmdGVyLWRpc3RyaWJ1dGluZy1hbGwuaHRtbDogQWRkZWQuCisKKzIwMTUt
MDItMjUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKICAgICAg
ICAgW0NTUyBHcmlkIExheW91dF0gVHJhY2tzIGdyb3dpbmcgYmV5b25kIGxpbWl0cyB3aGVuIHRo
ZXkgc2hvdWxkIG5vdAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQwODgzCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5
b3V0L2dyaWQtY29udGVudC1zaXplZC1jb2x1bW5zLXJlc29sdXRpb24tZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250ZW50LXNpemVkLWNvbHVt
bnMtcmVzb2x1dGlvbi1leHBlY3RlZC50eHQKaW5kZXggN2UyMWQ4NDQ2ZmU3MDdhMDViMjllY2Rk
YWNlNDljZGU5N2YwMDBmYy4uNTEyNzQxNTZiMzU4NTFmMzUwYTg4ODMyN2I2NTQ5MDlkYmEyNTk5
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250
ZW50LXNpemVkLWNvbHVtbnMtcmVzb2x1dGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC1jb250ZW50LXNpemVkLWNvbHVtbnMtcmVzb2x1
dGlvbi1leHBlY3RlZC50eHQKQEAgLTM5LDkgKzM5LDkgQEAgUEFTUyB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZShncmlkQXV0b01heENvbnRlbnRVbnNvcnRlZCwgJycpLmdldFByb3BlcnR5VmFsdWUo
Jy0KIFBBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZE1heENvbnRlbnRBbmRNaW5Db250
ZW50Rml4ZWRVbnNvcnRlZCwgJycpLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1w
bGF0ZS1jb2x1bW5zJykgaXMgIjUwcHggNDBweCIKIFBBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5
bGUoZ3JpZE1heENvbnRlbnRBbmRNYXhDb250ZW50Rml4ZWRVbnNvcnRlZCwgJycpLmdldFByb3Bl
cnR5VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykgaXMgIjQwcHggNzBweCIK
IFBBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZE1pbkNvbnRlbnRGaXhlZEFuZEF1dG9B
Ym92ZUxpbWl0cywgJycpLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1j
b2x1bW5zJykgaXMgIjE1cHggOTVweCIKLVBBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3Jp
ZE1heENvbnRlbnRGaXhlZEFuZEF1dG9BYm92ZUxpbWl0cywgJycpLmdldFByb3BlcnR5VmFsdWUo
Jy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykgaXMgIjY1cHggODVweCIKK1BBU1Mgd2lu
ZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZE1heENvbnRlbnRGaXhlZEFuZEF1dG9BYm92ZUxpbWl0
cywgJycpLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykg
aXMgIjE1cHggMTM1cHgiCiBQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGdyaWRNaW5Db250
ZW50Rml4ZWRBbmRGaXhlZEZpeGVkQW5kQXV0bywgJycpLmdldFByb3BlcnR5VmFsdWUoJy13ZWJr
aXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykgaXMgIjIwcHggMjBweCA2MHB4IgotUEFTUyB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkQXV0b0FuZEZpeGVkRml4ZWRBbmRNYXhDb250ZW50Rml4
ZWQsICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1ucycp
IGlzICI3MHB4IDIwcHggNjBweCIKK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3JpZEF1
dG9BbmRGaXhlZEZpeGVkQW5kTWF4Q29udGVudEZpeGVkLCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgn
LXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiMTEwcHggMjBweCAyMHB4IgogUEFT
UyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkTWF4Q29udGVudEFuZE1heENvbnRlbnRGaXhl
ZEFuZE1heENvbnRlbnQsICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxh
dGUtY29sdW1ucycpIGlzICI3MHB4IDIwcHggNTBweCIKIFBBU1Mgd2luZG93LmdldENvbXB1dGVk
U3R5bGUoZ3JpZEF1dG9BbmRNaW5Db250ZW50Rml4ZWRBbmRNaW5Db250ZW50LCAnJykuZ2V0UHJv
cGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiNTVweCAzMHB4
IDY1cHgiCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWNvbnRlbnQtc2l6ZWQtY29sdW1ucy1y
ZXNvbHV0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLWNv
bnRlbnQtc2l6ZWQtY29sdW1ucy1yZXNvbHV0aW9uLmh0bWwKaW5kZXggNDEyNmVhOTZlNjJjZWRj
ZWUwM2I0NmExMGUyZDQzOTFjYzUyYzNmNy4uZjk3NmFlNWQxODA5NjUxZTRlYWU0MmE5MzRjYWRl
NTIzNWJlMzZjNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQv
Z3JpZC1jb250ZW50LXNpemVkLWNvbHVtbnMtcmVzb2x1dGlvbi5odG1sCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2dyaWQtY29udGVudC1zaXplZC1jb2x1bW5zLXJlc29s
dXRpb24uaHRtbApAQCAtMzYzLDkgKzM2Myw5IEBAIHRlc3RHcmlkQ29sdW1uc1ZhbHVlcygiZ3Jp
ZE1heENvbnRlbnRBbmRNaW5Db250ZW50Rml4ZWRVbnNvcnRlZCIsICI1MHB4IDQwcHgiKTsKIHRl
c3RHcmlkQ29sdW1uc1ZhbHVlcygiZ3JpZE1heENvbnRlbnRBbmRNYXhDb250ZW50Rml4ZWRVbnNv
cnRlZCIsICI0MHB4IDcwcHgiKTsKIAogdGVzdEdyaWRDb2x1bW5zVmFsdWVzKCJncmlkTWluQ29u
dGVudEZpeGVkQW5kQXV0b0Fib3ZlTGltaXRzIiwgIjE1cHggOTVweCIpOwotdGVzdEdyaWRDb2x1
bW5zVmFsdWVzKCJncmlkTWF4Q29udGVudEZpeGVkQW5kQXV0b0Fib3ZlTGltaXRzIiwgIjY1cHgg
ODVweCIpOwordGVzdEdyaWRDb2x1bW5zVmFsdWVzKCJncmlkTWF4Q29udGVudEZpeGVkQW5kQXV0
b0Fib3ZlTGltaXRzIiwgIjE1cHggMTM1cHgiKTsKIHRlc3RHcmlkQ29sdW1uc1ZhbHVlcygiZ3Jp
ZE1pbkNvbnRlbnRGaXhlZEFuZEZpeGVkRml4ZWRBbmRBdXRvIiwgIjIwcHggMjBweCA2MHB4Iik7
Ci10ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRBdXRvQW5kRml4ZWRGaXhlZEFuZE1heENvbnRl
bnRGaXhlZCIsICI3MHB4IDIwcHggNjBweCIpOwordGVzdEdyaWRDb2x1bW5zVmFsdWVzKCJncmlk
QXV0b0FuZEZpeGVkRml4ZWRBbmRNYXhDb250ZW50Rml4ZWQiLCAiMTEwcHggMjBweCAyMHB4Iik7
CiB0ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRNYXhDb250ZW50QW5kTWF4Q29udGVudEZpeGVk
QW5kTWF4Q29udGVudCIsICI3MHB4IDIwcHggNTBweCIpOwogdGVzdEdyaWRDb2x1bW5zVmFsdWVz
KCJncmlkQXV0b0FuZE1pbkNvbnRlbnRGaXhlZEFuZE1pbkNvbnRlbnQiLCAiNTVweCAzMHB4IDY1
cHgiKTsKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1s
YXlvdXQvZ3JpZC11cGRhdGUtc2l6ZXMtYWZ0ZXItZGlzdHJpYnV0aW5nLWFsbC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLXVwZGF0ZS1zaXplcy1h
ZnRlci1kaXN0cmlidXRpbmctYWxsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzI0NWU5MGI4
M2E4NTExNDNmY2U3NmM1YmRjYjIyMWM3MDIxM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC11cGRhdGUtc2l6ZXMtYWZ0ZXItZGlzdHJp
YnV0aW5nLWFsbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MSBAQAorQ2hlY2sgdGhhdCB0cmFj
a3MgYXJlIHVwZGF0ZWQgYWZ0ZXIgZGlzdHJpYnV0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgYWxs
IHRoZSBpdGVtcyBpbiB0aGUgc2FtZSBncm91cCBzcGFuLgorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZShncmlkQXV0b0FuZE1heENvbnRlbnQsICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCctd2Vi
a2l0LWdyaWQtdGVtcGxhdGUtY29sdW1ucycpIGlzICIyNXB4IDY1cHgiCitQQVNTIHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKGdyaWRGaXhlZE1pbkNvbnRlbnRBbmRGaXhlZE1heENvbnRlbnQsICcn
KS5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1ucycpIGlzICIy
NXB4IDg1cHgiCitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGdyaWRNaW5Db250ZW50QW5k
TWF4Q29udGVudCwgJycpLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1j
b2x1bW5zJykgaXMgIjE1cHggODVweCIKK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZ3Jp
ZE1pbkNvbnRlbnRBbmRGaXhlZEFuZE1heENvbnRlbnQsICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCct
d2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1ucycpIGlzICIxNXB4IDIwcHggMTA1cHgiCitQQVNT
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGdyaWRNYXhDb250ZW50QW5kRml4ZWRBbmRBdXRvLCAn
JykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAi
MTA1cHggMjBweCAxNXB4IgorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkUmVwZWF0
VHdvTWF4Q29udGVudEFuZE1pbkNvbnRlbnRUd29PdmVybGFwcGluZywgJycpLmdldFByb3BlcnR5
VmFsdWUoJy13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykgaXMgIjExNXB4IDI1cHggODVw
eCAxNXB4IgorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShncmlkUmVwZWF0VHdvTWF4Q29u
dGVudEFuZE1pbkNvbnRlbnRUaHJlZU92ZXJsYXBwaW5nLCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgn
LXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiNjVweCAyNXB4IDExNXB4IDE1cHgi
CitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGdyaWRSZXBlYXRUd29NYXhDb250ZW50QW5k
TWluQ29udGVudFR3b0FuZEZvdXJPdmVybGFwcGluZywgJycpLmdldFByb3BlcnR5VmFsdWUoJy13
ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJykgaXMgIjcwcHggMzBweCA4MHB4IDEwcHgiCitQ
QVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGdyaWRSZXBlYXRUd29BdXRvQW5kTWF4Q29udGVu
dFR3b092ZXJsYXBwaW5nLCAnJykuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBs
YXRlLWNvbHVtbnMnKSBpcyAiMjVweCAxMTVweCAxNXB4IDg1cHgiCitQQVNTIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKGdyaWRSZXBlYXRUd29BdXRvQW5kTWF4Q29udGVudFRocmVlT3ZlcmxhcHBp
bmcsICcnKS5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1ucycp
IGlzICIyMHB4IDExNXB4IDI1cHggNzVweCIKK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUo
Z3JpZFJlcGVhdFR3b0F1dG9BbmRNYXhDb250ZW50VHdvQW5kRm91ck92ZXJsYXBwaW5nLCAnJyku
Z2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSBpcyAiMzBw
eCA3MHB4IDEwcHggODBweCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorWFhYWCBYWFhYCitYWFhYWCBYCitYWFhYIFhYWFgKK1hYWFhYIFhYWFhYCitY
WCBYWAorWFhYIFhYIFhYWAorWFhYWCBYWFhYCitYWFhYWCBYWFggWFhYWAorWFhYWCBYWFhYCitY
WFhYWCBYWFggWFhYWAorWFhYWCBYWFhYCitYWCBYWAorWFhYWFggWFhYIFhYWFgKK1hYWCBYWCBY
WFgKK1hYWFhYIFhYWCBYWFhYCitYWFggWFggWFhYCitYWFhYIFhYWFgKK1hYWFggWFhYWAorWFgg
WFgKK1hYWFhYIFhYWCBYWFhYCitYWFggWFggWFhYCitYIFggWCBYIFgKK1hYWFhYWAorWFhYWCBY
WFhYCitYWCBYWAorWFhYWFggWFhYIFhYWFgKK1hYWCBYWCBYWFgKK1hYWFhYIFhYWCBYWFhYCitY
WFggWFggWFhYCitYWFhYIFhYWFgKK1hYWFggWFhYWAorWFggWFgKK1hYWFhYIFhYWCBYWFhYCitY
WFggWFggWFhYCitYIFggWCBYIFgKK1hYWFhYWApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC11cGRhdGUtc2l6ZXMtYWZ0ZXItZGlzdHJpYnV0aW5nLWFs
bC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZ3JpZC11cGRhdGUtc2l6
ZXMtYWZ0ZXItZGlzdHJpYnV0aW5nLWFsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4NWM1ZmVjZjhhYzA5
ODk3OWU5ODhiNzNmNDc3NjEzMjEwNjI1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLXVwZGF0ZS1zaXplcy1hZnRlci1kaXN0cmlidXRp
bmctYWxsLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGhlYWQ+Cis8
bGluayBocmVmPSJyZXNvdXJjZXMvZ3JpZC5jc3MiIHJlbD0ic3R5bGVzaGVldCIvPgorPHN0eWxl
PgorIC5ncmlkIHsgZm9udDogMTBweC8xIEFoZW07IH0KKworIC5ncmlkQXV0b0FuZE1heENvbnRl
bnQgeworICAgIC13ZWJraXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIC13ZWJraXQtbWF4
LWNvbnRlbnQ7CisgfQorIC5ncmlkRml4ZWRNaW5Db250ZW50QW5kRml4ZWRNYXhDb250ZW50IHsK
KyAgICAtd2Via2l0LWdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEwcHgsIC13ZWJraXQt
bWluLWNvbnRlbnQpIG1pbm1heCgxMHB4LCAtd2Via2l0LW1heC1jb250ZW50KTsKKyB9CisgLmdy
aWRNaW5Db250ZW50QW5kTWF4Q29udGVudCB7CisgICAgLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNv
bHVtbnM6IC13ZWJraXQtbWluLWNvbnRlbnQgLXdlYmtpdC1tYXgtY29udGVudDsKKyB9CisKKyAu
Z3JpZE1pbkNvbnRlbnRBbmRGaXhlZEFuZE1heENvbnRlbnQgeworICAgIC13ZWJraXQtZ3JpZC10
ZW1wbGF0ZS1jb2x1bW5zOiAtd2Via2l0LW1pbi1jb250ZW50IDIwcHggLXdlYmtpdC1tYXgtY29u
dGVudDsKKyB9CisKKyAuZ3JpZE1heENvbnRlbnRBbmRGaXhlZEFuZEF1dG8geworICAgIC13ZWJr
aXQtZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAtd2Via2l0LW1heC1jb250ZW50IDIwcHggYXV0bzsK
KyB9CisKKyAuZ3JpZFJlcGVhdFR3b01heENvbnRlbnRBbmRNaW5Db250ZW50IHsKKyAgICAtd2Vi
a2l0LWdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIC13ZWJraXQtbWF4LWNvbnRlbnQg
LXdlYmtpdC1taW4tY29udGVudCk7CisgfQorCisgLmdyaWRSZXBlYXRUd29BdXRvQW5kTWF4Q29u
dGVudCB7CisgICAgLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBhdXRv
IC13ZWJraXQtbWF4LWNvbnRlbnQpOworIH0KKworIC5jb2x1bW5zMUFuZDIgeyAtd2Via2l0LWdy
aWQtY29sdW1uOiAxIC8gc3BhbiAyOyB9CisgLmNvbHVtbnMyQW5kMyB7IC13ZWJraXQtZ3JpZC1j
b2x1bW46IDIgLyBzcGFuIDI7IH0KKyAuY29sdW1uczNBbmQ0IHsgLXdlYmtpdC1ncmlkLWNvbHVt
bjogMyAvIHNwYW4gMjsgfQorIC5jb2x1bW5zMVRvMyB7IC13ZWJraXQtZ3JpZC1jb2x1bW46IDEg
LyBzcGFuIDM7IH0KKyAuY29sdW1uczFUbzQgeyAtd2Via2l0LWdyaWQtY29sdW1uOiAxIC8gc3Bh
biA0OyB9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGNsYXNzPSJjb25zdHJhaW5lZENv
bnRhaW5lciI+CisgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkQXV0b0FuZE1heENvbnRlbnQiIGlk
PSJncmlkQXV0b0FuZE1heENvbnRlbnQiPgorCTxkaXYgY2xhc3M9ImNvbHVtbnMxQW5kMiI+WFhY
WCBYWFhYPC9kaXY+CisJPGRpdiBjbGFzcz0iY29sdW1uczFBbmQyIj5YWFhYWCBYPC9kaXY+Cisg
ICAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iZ3JpZCBncmlkRml4ZWRNaW5Db250ZW50
QW5kRml4ZWRNYXhDb250ZW50IiBpZD0iZ3JpZEZpeGVkTWluQ29udGVudEFuZEZpeGVkTWF4Q29u
dGVudCI+CisgICAgPGRpdiBjbGFzcz0iY29sdW1uczFBbmQyIj5YWFhYIFhYWFg8L2Rpdj4KKyAg
ICA8ZGl2IGNsYXNzPSJjb2x1bW5zMUFuZDIiPlhYWFhYIFhYWFhYPC9kaXY+Cis8L2Rpdj4KKwor
PGRpdiBjbGFzcz0iZ3JpZCBncmlkTWluQ29udGVudEFuZE1heENvbnRlbnQiIGlkPSJncmlkTWlu
Q29udGVudEFuZE1heENvbnRlbnQiPgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMxQW5kMiI+WFgg
WFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zMUFuZDIiPlhYWCBYWCBYWFg8L2Rpdj4K
KzwvZGl2PgorCis8ZGl2IGNsYXNzPSJncmlkIGdyaWRNaW5Db250ZW50QW5kRml4ZWRBbmRNYXhD
b250ZW50IiBpZD0iZ3JpZE1pbkNvbnRlbnRBbmRGaXhlZEFuZE1heENvbnRlbnQiPgorICAgIDxk
aXYgY2xhc3M9ImNvbHVtbnMxVG8zIj5YWFhYIFhYWFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJj
b2x1bW5zMVRvMyI+WFhYWFggWFhYIFhYWFg8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJn
cmlkIGdyaWRNYXhDb250ZW50QW5kRml4ZWRBbmRBdXRvIiBpZD0iZ3JpZE1heENvbnRlbnRBbmRG
aXhlZEFuZEF1dG8iPgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMxVG8zIj5YWFhYIFhYWFg8L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zMVRvMyI+WFhYWFggWFhYIFhYWFg8L2Rpdj4KKzwv
ZGl2PgorCis8ZGl2IGNsYXNzPSJncmlkIGdyaWRSZXBlYXRUd29NYXhDb250ZW50QW5kTWluQ29u
dGVudCIgaWQ9ImdyaWRSZXBlYXRUd29NYXhDb250ZW50QW5kTWluQ29udGVudFR3b092ZXJsYXBw
aW5nIj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zMUFuZDIiPlhYWFggWFhYWDwvZGl2PgorICAg
IDxkaXYgY2xhc3M9ImNvbHVtbnMzQW5kNCI+WFggWFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJj
b2x1bW5zMUFuZDIiPlhYWFhYIFhYWCBYWFhYPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29sdW1u
czNBbmQ0Ij5YWFggWFggWFhYPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iZ3JpZCBncmlk
UmVwZWF0VHdvTWF4Q29udGVudEFuZE1pbkNvbnRlbnQiIGlkPSJncmlkUmVwZWF0VHdvTWF4Q29u
dGVudEFuZE1pbkNvbnRlbnRUaHJlZU92ZXJsYXBwaW5nIj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1
bW5zMkFuZDMiPlhYWFhYIFhYWCBYWFhYPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29sdW1uczNB
bmQ0Ij5YWFggWFggWFhYPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29sdW1uczFBbmQyIj5YWFhY
IFhYWFg8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJncmlkIGdyaWRSZXBlYXRUd29NYXhD
b250ZW50QW5kTWluQ29udGVudCIgaWQ9ImdyaWRSZXBlYXRUd29NYXhDb250ZW50QW5kTWluQ29u
dGVudFR3b0FuZEZvdXJPdmVybGFwcGluZyI+CisgICAgPGRpdiBjbGFzcz0iY29sdW1uczFUbzQi
PlhYWFggWFhYWDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMzQW5kNCI+WFggWFg8L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zMVRvNCI+WFhYWFggWFhYIFhYWFg8L2Rpdj4KKyAg
ICA8ZGl2IGNsYXNzPSJjb2x1bW5zMUFuZDIiPlhYWCBYWCBYWFg8L2Rpdj4KKyAgICA8ZGl2IGNs
YXNzPSJjb2x1bW5zM0FuZDQiPlggWCBYIFggWDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbHVt
bnMxQW5kMiI+WFhYWFhYPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iZ3JpZCBncmlkUmVw
ZWF0VHdvQXV0b0FuZE1heENvbnRlbnQiIGlkPSJncmlkUmVwZWF0VHdvQXV0b0FuZE1heENvbnRl
bnRUd29PdmVybGFwcGluZyI+CisgICAgPGRpdiBjbGFzcz0iY29sdW1uczFBbmQyIj5YWFhYIFhY
WFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zM0FuZDQiPlhYIFhYPC9kaXY+CisgICAg
PGRpdiBjbGFzcz0iY29sdW1uczFBbmQyIj5YWFhYWCBYWFggWFhYWDwvZGl2PgorICAgIDxkaXYg
Y2xhc3M9ImNvbHVtbnMzQW5kNCI+WFhYIFhYIFhYWDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xh
c3M9ImdyaWQgZ3JpZFJlcGVhdFR3b0F1dG9BbmRNYXhDb250ZW50IiBpZD0iZ3JpZFJlcGVhdFR3
b0F1dG9BbmRNYXhDb250ZW50VGhyZWVPdmVybGFwcGluZyI+CisgICAgPGRpdiBjbGFzcz0iY29s
dW1uczJBbmQzIj5YWFhYWCBYWFggWFhYWDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMz
QW5kNCI+WFhYIFhYIFhYWDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMxQW5kMiI+WFhY
WCBYWFhYPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0iZ3JpZCBncmlkUmVwZWF0VHdvQXV0
b0FuZE1heENvbnRlbnQiIGlkPSJncmlkUmVwZWF0VHdvQXV0b0FuZE1heENvbnRlbnRUd29BbmRG
b3VyT3ZlcmxhcHBpbmciPgorICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMxVG80Ij5YWFhYIFhYWFg8
L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zM0FuZDQiPlhYIFhYPC9kaXY+CisgICAgPGRp
diBjbGFzcz0iY29sdW1uczFUbzQiPlhYWFhYIFhYWCBYWFhYPC9kaXY+CisgICAgPGRpdiBjbGFz
cz0iY29sdW1uczFBbmQyIj5YWFggWFggWFhYPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29sdW1u
czNBbmQ0Ij5YIFggWCBYIFg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zMUFuZDIiPlhY
WFhYWDwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0R3JpZENvbHVtbnNW
YWx1ZXMoaWQsIGNvbXB1dGVkQ29sdW1uVmFsdWUpCit7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSgiICsgaWQgKyAiLCAnJykuZ2V0UHJvcGVydHlW
YWx1ZSgnLXdlYmtpdC1ncmlkLXRlbXBsYXRlLWNvbHVtbnMnKSIsIGNvbXB1dGVkQ29sdW1uVmFs
dWUpOworfQorCitkZWJ1ZygiQ2hlY2sgdGhhdCB0cmFja3MgYXJlIHVwZGF0ZWQgYWZ0ZXIgZGlz
dHJpYnV0aW5nIHRoZSBleHRyYSBzcGFjZSBmb3IgYWxsIHRoZSBpdGVtcyBpbiB0aGUgc2FtZSBn
cm91cCBzcGFuLiIpOwordGVzdEdyaWRDb2x1bW5zVmFsdWVzKCJncmlkQXV0b0FuZE1heENvbnRl
bnQiLCAiMjVweCA2NXB4Iik7Cit0ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRGaXhlZE1pbkNv
bnRlbnRBbmRGaXhlZE1heENvbnRlbnQiLCAiMjVweCA4NXB4Iik7Cit0ZXN0R3JpZENvbHVtbnNW
YWx1ZXMoImdyaWRNaW5Db250ZW50QW5kTWF4Q29udGVudCIsICIxNXB4IDg1cHgiKTsKK3Rlc3RH
cmlkQ29sdW1uc1ZhbHVlcygiZ3JpZE1pbkNvbnRlbnRBbmRGaXhlZEFuZE1heENvbnRlbnQiLCAi
MTVweCAyMHB4IDEwNXB4Iik7Cit0ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRNYXhDb250ZW50
QW5kRml4ZWRBbmRBdXRvIiwgIjEwNXB4IDIwcHggMTVweCIpOwordGVzdEdyaWRDb2x1bW5zVmFs
dWVzKCJncmlkUmVwZWF0VHdvTWF4Q29udGVudEFuZE1pbkNvbnRlbnRUd29PdmVybGFwcGluZyIs
ICIxMTVweCAyNXB4IDg1cHggMTVweCIpOwordGVzdEdyaWRDb2x1bW5zVmFsdWVzKCJncmlkUmVw
ZWF0VHdvTWF4Q29udGVudEFuZE1pbkNvbnRlbnRUaHJlZU92ZXJsYXBwaW5nIiwgIjY1cHggMjVw
eCAxMTVweCAxNXB4Iik7Cit0ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRSZXBlYXRUd29NYXhD
b250ZW50QW5kTWluQ29udGVudFR3b0FuZEZvdXJPdmVybGFwcGluZyIsICI3MHB4IDMwcHggODBw
eCAxMHB4Iik7Cit0ZXN0R3JpZENvbHVtbnNWYWx1ZXMoImdyaWRSZXBlYXRUd29BdXRvQW5kTWF4
Q29udGVudFR3b092ZXJsYXBwaW5nIiwgIjI1cHggMTE1cHggMTVweCA4NXB4Iik7Cit0ZXN0R3Jp
ZENvbHVtbnNWYWx1ZXMoImdyaWRSZXBlYXRUd29BdXRvQW5kTWF4Q29udGVudFRocmVlT3Zlcmxh
cHBpbmciLCAiMjBweCAxMTVweCAyNXB4IDc1cHgiKTsKK3Rlc3RHcmlkQ29sdW1uc1ZhbHVlcygi
Z3JpZFJlcGVhdFR3b0F1dG9BbmRNYXhDb250ZW50VHdvQW5kRm91ck92ZXJsYXBwaW5nIiwgIjMw
cHggNzBweCAxMHB4IDgwcHgiKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="272265"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>