<?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>153724</bug_id>
          
          <creation_ts>2016-01-30 16:48:03 -0800</creation_ts>
          <short_desc>Modern IDB: Cursors (still) do not keep their opening request alive</short_desc>
          <delta_ts>2016-02-02 11:34:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>WebKit 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>
          
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1160583</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-01-30 16:48:03 -0800</bug_when>
    <thetext>storage/indexeddb/cursor-update-private.html hist an assertion somewhat frequently:

http://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=storage%2Findexeddb%2Fcursor-update-private.html

ASSERTION FAILED: !m_isolatedWorld-&gt;isNormal() || m_wrapper || !m_jsFunction
/Volumes/Data/slave/elcapitan-debug/build/Source/WebCore/bindings/js/JSEventListener.h(118) : JSC::JSObject *WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext *) const
1   0x104dd5670 WTFCrash
2   0x10a995273 WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) const
3   0x10ac1f98b WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*)
4   0x10a2f1857 WebCore::EventTarget::fireEventListeners(WebCore::Event&amp;, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow, 16ul&gt;&amp;)
5   0x10a2f1083 WebCore::EventTarget::fireEventListeners(WebCore::Event&amp;)
6   0x10a7beceb WebCore::IDBEventDispatcher::dispatch(WebCore::Event&amp;, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::EventTarget&gt;, 0ul, WTF::CrashOnOverflow, 16ul&gt;&amp;)

This assertion means that a function was called after having been garbage collected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160620</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-01-30 20:15:50 -0800</bug_when>
    <thetext>This is the same thing previously seen for other cursor tests, and means that the relationship between the IDBCursor and IDBRequest is not doing enough to keep the request wrapper alive.

We should skip for now (I&apos;m not anywhere near a checkout, in case somebody else wants to get to it tonight).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160633</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-01-30 22:44:13 -0800</bug_when>
    <thetext>Same on storage/indexeddb/exceptions-private.html. I will not be landing expectations today FWIW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160874</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 09:17:59 -0800</bug_when>
    <thetext>&gt; ... hits an assertion somewhat frequently:

Looking at the dashboard, it doesn&apos;t appear to be that frequent.

Of course it shouldn&apos;t happen *at all*, but this is infrequent enough that I dread trying to reproduce locally to explore a cause and/or fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160875</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 09:18:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; ... hits an assertion somewhat frequently:
&gt; 
&gt; Looking at the dashboard, it doesn&apos;t appear to be that frequent.
&gt; 
&gt; Of course it shouldn&apos;t happen *at all*, but this is infrequent enough that I
&gt; dread trying to reproduce locally to explore a cause and/or fix.

(Dread it, but am starting on it right now)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160885</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 09:35:45 -0800</bug_when>
    <thetext>Great! With a DRT input file alternating these two tests back and forth 1500 times, I can eventually hit the ASSERT.

Now time to dig in and find out wtf it happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160887</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 09:36:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Great! With a DRT input file alternating these two tests back and forth 1500
&gt; times, I can eventually hit the ASSERT.
&gt; 
&gt; Now time to dig in and find out wtf it happens.

(We know what the assert means, I meant find out wtf the GC collects the wrapper)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160914</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 10:13:17 -0800</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=153038 I made IDBCursor.idl additional opaque roots to keep the wrapper for the request alive.

My current working theory is that IDBCursorWithValue.idl does *not* do the same, even though it &quot;derives from&quot; IDBCursor.idl.

Building and testing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160931</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 10:27:12 -0800</bug_when>
    <thetext>I&apos;ve confirmed that the flaky cursors are, in fact, of the type IDBCursorWithValue.

That said, adding the custom visitAdditionalChildren(SlotVisitor&amp; visitor) did not immediately fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161027</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 14:10:46 -0800</bug_when>
    <thetext>I know what has to be done to fix this, but implementing that is problematic. Trying to get continued assistance from a GC expert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161072</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 15:38:44 -0800</bug_when>
    <thetext>Retitling:
Modern IDB: Cursors (still) do not keep their opening request alive

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161120</commentid>
    <comment_count>11</comment_count>
      <attachid>270450</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-01 16:37:40 -0800</bug_when>
    <thetext>Created attachment 270450
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161124</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-01 16:39:37 -0800</bug_when>
    <thetext>Attachment 270450 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.h:106:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.h:106:  The parameter name &quot;keyRange&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.h:106:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161152</commentid>
    <comment_count>13</comment_count>
      <attachid>270450</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-01 17:43:00 -0800</bug_when>
    <thetext>Comment on attachment 270450
Patch v1

Clearing flags on attachment: 270450

Committed r195997: &lt;http://trac.webkit.org/changeset/195997&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161153</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-01 17:43:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161303</commentid>
    <comment_count>15</comment_count>
      <attachid>270450</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-02 10:08:22 -0800</bug_when>
    <thetext>Comment on attachment 270450
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.cpp:158
&gt; +    m_cursorRequestNotifier = std::make_unique&lt;ScopeGuard&gt;([this]() {

There shouldn&apos;t be any need to malloc the ScopeGuard. You can just make m_cursorRequestNotifier a data member and m_cursorRequestNotifier.enable() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161338</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-02 11:34:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 270450 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270450&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.cpp:158
&gt; &gt; +    m_cursorRequestNotifier = std::make_unique&lt;ScopeGuard&gt;([this]() {
&gt; 
&gt; There shouldn&apos;t be any need to malloc the ScopeGuard. You can just make
&gt; m_cursorRequestNotifier a data member and m_cursorRequestNotifier.enable()
&gt; instead.

You are, of course, totally right.

Might followup today if my tree is ever clean</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270450</attachid>
            <date>2016-02-01 16:37:40 -0800</date>
            <delta_ts>2016-02-01 17:43:00 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27568</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzQ4ZTEwOC4uZWM0N2IwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExODYsNiArMTE4Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5k
aW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJREJBbnlDdXN0
b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCisgICAgYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJ
REJEYXRhYmFzZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3Vz
dG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA1MGNlY2UyLi5iY2ExMDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTYt
MDItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVy
biBJREI6IEN1cnNvcnMgKHN0aWxsKSBkbyBub3Qga2VlcCB0aGVpciBvcGVuaW5nIHJlcXVlc3Qg
YWxpdmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTM3MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgKEFsbCBleGlzdGluZyB0ZXN0cyBwYXNzIHdpdGhvdXQgZmxha2luZXNzKS4K
KworICAgICAgICBJREJDdXJzb3JzIGRpZCBub3QgcHJvcGVybHkga2VlcCB0aGVpciBKUyB3cmFw
cGVycyBhbGl2ZS4KKyAgICAgICAgTWFraW5nIHRoZW0gQWN0aXZlRE9NT2JqZWN0cyB0aGF0IGtl
ZXAgdHJhY2sgb2YgaG93IG1hbnkgcmVxdWVzdHMgbWlnaHQgYmUgaW4gZmxpZ2h0IGZpeGVzIHRo
aXMuCisgICAgICAgIFRoaXMgYWxzbyBtYWtlcyB0aGVtIGFjdHVhbGx5IGtlZXAgdGhlaXIgb3Bl
bmluZy1yZXF1ZXN0IGxpdmUgdmlhIHRoZSBvcGFxdWUtcm9vdCBtZWNoYW5pc20uCisgICAgICAg
IAorICAgICAgICBJREJDdXJzb3JXaXRoVmFsdWUgYWxzbyBuZWVkZWQgdG8gb3B0IGluIHRvIGFs
bCBvZiB0aGVzZSBtZWNoYW5pc21zLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6
Omhhc1BlbmRpbmdBY3Rpdml0eSk6IFRoZSBiYXNlIElEQkN1cnNvciBhbHdheXMgaGFzIG5vIHBl
bmRpbmcgYWN0aXZpdHksCisgICAgICAgICAgdG8gbWFpbnRhaW4gY3VycmVudCBiZWhhdmlvciBp
biBMZWdhY3lJREIuIFRoaXMgd2VpcmRuZXNzIHdpbGwgZ28gYXdheSB3aGVuIExlZ2FjeUlEQiBk
b2VzLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDoKKworICAgICAgICBU
cmFjayBhIGNvdW50IGZvciBhbGwgb3V0c3RhbmRpbmcgcmVxdWVzdHMgdG8ga2VlcCB0aGUgY3Vy
c29yIGFsaXZlIGFzIGFuIEFjdGl2ZURPTU9iamVjdC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQkN1cnNvcjo6SURCQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6
SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDdXJz
b3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50
OjpJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVu
dDo6SURCQ3Vyc29yOjphY3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkNsaWVudDo6SURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDdXJzb3I6OmRlY3JlbWVudE91dHN0
YW5kaW5nUmVxdWVzdENvdW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ3Vyc29ySW1wbC5oOgorICAgICAgICAKKyAgICAgICAgUmV3b3JrIHRoZSAiZGVsZXRlIiBm
YW1pbHkgb2YgZnVuY3Rpb25zIG9uIHRoZSBvYmplY3Qgc3RvcmUgdG8gYWxsb3cgZm9yIHJldHVy
bmluZyBhIG1vZGVybiBJREJSZXF1ZXN0LgorICAgICAgICBBIGxvdCBvZiB0aGlzIGNhbiBnbyBh
d2F5IHdoZW4gTGVnYWN5SURCIGRvZXMuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQk9iamVjdFN0b3JlOjpkb0RlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
bGllbnQ6OklEQk9iamVjdFN0b3JlOjptb2Rlcm5EZWxldGUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaDoKKyAgICAgICAgCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6c2V0U291cmNlKTogU2V0dXAgYSBTY29w
ZUd1YXJkIHRvIGRlY3JlbWVudCB0aGUgY3Vyc29yJ3MgcmVxdWVzdAorICAgICAgICAgIGNvdW50
IHdoZW5ldmVyIGl0IG1ha2VzIHNlbnNlIHRvIGRvIHNvLgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KTogQ2xlYXIgdGhlIFNjb3BlR3VhcmQg
KGlmIGl0IGV4aXN0cykgdG8gZGVjcmVtZW50IHRoZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCUmVxdWVzdDo6d2lsbEl0ZXJhdGVDdXJzb3IpOiBTZXQgdGhlIFNjb3Bl
R3VhcmQuCisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OmRpZE9wZW5P
ckl0ZXJhdGVDdXJzb3IpOiBDbGVhciB0aGUgU2NvcGVHdWFyZCAoaWYgaXQgZXhpc3RzKSB0byBk
ZWNyZW1lbnQgdGhlIGNvdW50LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTY29wZUd1YXJkOjpTY29wZUd1YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U2NvcGVHdWFyZDo6flNjb3BlR3VhcmQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTY29wZUd1YXJkOjplbmFibGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTY29wZUd1YXJkOjpkaXNhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL1Njb3BlR3Vh
cmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY29wZUd1YXJkOjpTY29wZUd1YXJkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjb3BlR3VhcmQ6On5TY29wZUd1YXJkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjb3BlR3VhcmQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZUd1YXJk
OjpkaXNhYmxlKToKKwogMjAxNi0wMi0wMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHNvbWUgU1BJIGRlY2xhcmF0aW9ucyBpbnRvIHRoZSBh
cHByb3ByaWF0ZSBTUEkgaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oCmluZGV4IDc4ZDYwZTkuLmI1MDJjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC03Niw2ICs3Niw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgYm9vbCBpc01vZGVybkN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKwogcHJvdGVjdGVkOgogICAgIElEQkN1cnNvcigpOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IDk1MTgwZTgu
LjA0NmY5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmlkbApAQCAtMjYsNiArMjYsNyBAQAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCisgICAgQWN0aXZlRE9NT2Jq
ZWN0LAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9u
LAogXSBpbnRlcmZhY2UgSURCQ3Vyc29yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDM0NzFhMjQuLjg1
MmUxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAtMjYsNyArMjYsOSBAQAogWwogICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCisg
ICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAorICAgIEpTQ3Vz
dG9tTWFya0Z1bmN0aW9uLAogXSBpbnRlcmZhY2UgSURCQ3Vyc29yV2l0aFZhbHVlIDogSURCQ3Vy
c29yIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZhbHVlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBs
LmNwcAppbmRleCAwMjYzZjkyLi44Njc5YTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuY3BwCkBAIC00NCwx
OCArNDQsMjIgQEAgUmVmPElEQkN1cnNvcj4gSURCQ3Vyc29yOjpjcmVhdGUoSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGMKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJDdXJzb3IodHJhbnNhY3Rpb24sIGluZGV4LCBpbmZvKSk7CiB9CiAKLUlEQkN1cnNv
cjo6SURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3Jl
LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQotICAgIDogbV9pbmZvKGluZm8pCitJREJDdXJz
b3I6OklEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3Jl
JiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKKyAgICA6IEFjdGl2ZURP
TU9iamVjdCh0cmFuc2FjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2lu
Zm8oaW5mbykKICAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKG9iamVjdFN0b3JlKS5sZWFr
UmVmKCkpCiAgICAgLCBtX29iamVjdFN0b3JlKCZvYmplY3RTdG9yZSkKIHsKKyAgICBzdXNwZW5k
SWZOZWVkZWQoKTsKIH0KIAotSURCQ3Vyc29yOjpJREJDdXJzb3IoSURCVHJhbnNhY3Rpb24mLCBJ
REJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi0gICAgOiBtX2luZm8o
aW5mbykKK0lEQkN1cnNvcjo6SURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
SURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQorICAgIDogQWN0aXZl
RE9NT2JqZWN0KHRyYW5zYWN0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1f
aW5mbyhpbmZvKQogICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUoaW5kZXgpLmxlYWtSZWYo
KSkKICAgICAsIG1faW5kZXgoJmluZGV4KQogeworICAgIHN1c3BlbmRJZk5lZWRlZCgpOwogfQog
CiBJREJDdXJzb3I6On5JREJDdXJzb3IoKQpAQCAtMTYzLDYgKzE2Nyw4IEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
RGVwcmVjYXRlZDo6CiAKICAgICBBU1NFUlQocmVxdWVzdCk7CiAgICAgcmVxdWVzdC0+c2V0U291
cmNlKCp0aGlzKTsKKyAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisKICAgICByZXR1
cm4gcmVxdWVzdDsKIH0KIApAQCAtMjgxLDYgKzI4Nyw4IEBAIHZvaWQgSURCQ3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlCiAKIHZvaWQgSURCQ3Vyc29yOjp1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktl
eURhdGEmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKKyAgICArK21fb3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQ7CisKICAgICBtX3JlcXVlc3QtPndpbGxJdGVyYXRlQ3Vyc29yKCp0aGlzKTsK
ICAgICB0cmFuc2FjdGlvbigpLml0ZXJhdGVDdXJzb3IoKnRoaXMsIGtleSwgY291bnQpOwogfQpA
QCAtMzI0LDcgKzMzMiwxNSBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29y
OjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5k
ZWxldGVGdW5jdGlvbihjb250ZXh0LCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1Zh
bHVlKCksIGVjKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLm1v
ZGVybkRlbGV0ZShjb250ZXh0LCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1ZhbHVl
KCksIGVjKTsKKyAgICBpZiAoZWMuY29kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBBU1NFUlQocmVxdWVzdCk7CisgICAgcmVxdWVzdC0+c2V0U291cmNlKCp0aGlzKTsKKyAgICAr
K21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAog
dm9pZCBJREJDdXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJ
REJHZXRSZXN1bHQmIGdldFJlc3VsdCkKQEAgLTM1OSw2ICszNzUsMjcgQEAgdm9pZCBJREJDdXJz
b3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJHZXRSZXN1bHQm
IGdldFJlc3VsdCkKICAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKIH0KIAorY29uc3QgY2hhciogSURC
Q3Vyc29yOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIklEQkN1
cnNvciI7Cit9CisKK2Jvb2wgSURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5z
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURCQ3Vyc29yOjpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX291dHN0YW5kaW5nUmVx
dWVzdENvdW50OworfQorCit2b2lkIElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1
ZXN0Q291bnQoKQoreworICAgIEFTU0VSVChtX291dHN0YW5kaW5nUmVxdWVzdENvdW50KTsKKyAg
ICAtLW1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNs
aWVudAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuaAppbmRleCA5YzcyZTI1
Li44NjhiMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ3Vyc29ySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgSURCSW5k
ZXg7CiBjbGFzcyBJREJPYmplY3RTdG9yZTsKIGNsYXNzIElEQlRyYW5zYWN0aW9uOwogCi1jbGFz
cyBJREJDdXJzb3IgOiBwdWJsaWMgV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlIHsKK2NsYXNz
IElEQkN1cnNvciA6IHB1YmxpYyBXZWJDb3JlOjpJREJDdXJzb3JXaXRoVmFsdWUsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKIApA
QCAtNzQsMTEgKzc0LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3Io
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTW9k
ZXJuQ3Vyc29yKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAg
dm9pZCBkZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgSURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJD
dXJzb3JJbmZvJik7CiAgICAgSURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBj
b25zdCBJREJDdXJzb3JJbmZvJik7CiAKIHByaXZhdGU6CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0
LgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOworCisgICAgLy8gQ3Vyc29ycyBhcmUg
Y3JlYXRlZCB3aXRoIGFuIG91dHN0YW5kaW5nIGl0ZXJhdGlvbiByZXF1ZXN0LgorICAgIHVuc2ln
bmVkIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgeyAxIH07CisKICAgICBJREJDdXJzb3JJbmZv
IG1faW5mbzsKICAgICBSZWY8SURCQW55PiBtX3NvdXJjZTsKICAgICBJREJPYmplY3RTdG9yZSog
bV9vYmplY3RTdG9yZSB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5k
ZXggYjI5YzdmZS4uODVmNjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTM0
MCw5ICszNDAsMTMgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPckFk
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZQogICAgIHJldHVybiBhZG9wdFJl
ZihyZXF1ZXN0LmxlYWtSZWYoKSk7CiB9CiAKLQogUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCiB7CisgICAgcmV0dXJuIGRvRGVsZXRlKGNvbnRleHQsIGtleVJhbmdlLCBlYyk7Cit9CisK
K1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQorewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
ZGVsZXRlRnVuY3Rpb24iKTsKIAogICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2ZXJhbCBJREJP
YmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0ZWQgZXhjZXB0
aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKQEAgLTM4MSwxMCArMzg1LDEwIEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKIHsKLSAgICByZXR1cm4gZGVsZXRlRnVuY3Rpb24oY29udGV4dCwga2V5LmpzVmFsdWUoKSwg
ZWMpOworICAgIHJldHVybiBtb2Rlcm5EZWxldGUoY29udGV4dCwga2V5LmpzVmFsdWUoKSwgZWMp
OwogfQogCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBr
ZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCitSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewogICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CiAgICAgUmVmUHRyPElEQktl
eT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOwpAQCAt
Mzk0LDcgKzM5OCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBkZWxldGVGdW5jdGlvbihjb250ZXh0LCAmSURC
S2V5UmFuZ2U6OmNyZWF0ZShpZGJLZXkuZ2V0KCkpLmdldCgpLCBlYyk7CisgICAgcmV0dXJuIGRv
RGVsZXRlKGNvbnRleHQsICZJREJLZXlSYW5nZTo6Y3JlYXRlKGlkYktleS5nZXQoKSkuZ2V0KCks
IGVjKTsKIH0KIAogUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpj
bGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IDIzODViOGMuLjhiMDJkZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJP
YmplY3RTdG9yZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAgLTgwLDggKzgwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBwdXRGb3JDdXJzb3JVcGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gbW9kZXJuRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBKU0M6
OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKIAogICAgIHZvaWQgbWFy
a0FzRGVsZXRlZCgpOwogICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxl
dGVkOyB9CkBAIC0xMDQsNiArMTAzLDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiBwdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPElEQktl
eT4sIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAgICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IGRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBk
b0RlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpOwogCiAgICAgSURCT2JqZWN0U3Rv
cmVJbmZvIG1faW5mbzsKICAgICBJREJPYmplY3RTdG9yZUluZm8gbV9vcmlnaW5hbEluZm87CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlJlcXVlc3RJbXBsLmNwcAppbmRleCBiOWQxZmIyLi5iNzRlMTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1w
bC5jcHAKQEAgLTE1Miw3ICsxNTIsMTMgQEAgUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCUmVx
dWVzdDo6c291cmNlKCkgY29uc3QKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vy
c29yJiBjdXJzb3IpCiB7CisgICAgQVNTRVJUKCFtX2N1cnNvclJlcXVlc3ROb3RpZmllcik7CisK
ICAgICBtX3NvdXJjZSA9IElEQkFueTo6Y3JlYXRlKGN1cnNvcik7CisgICAgbV9jdXJzb3JSZXF1
ZXN0Tm90aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+KFt0aGlzXSgpIHsKKyAg
ICAgICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3Ig
fHwgbV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7
CisgICAgICAgIG1fc291cmNlLT5tb2Rlcm5JREJDdXJzb3IoKS0+ZGVjcmVtZW50T3V0c3RhbmRp
bmdSZXF1ZXN0Q291bnQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQpAQCAtMjgz
LDYgKzI4OSw4IEBAIGJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQp
CiAKICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOwogCisgICAgbV9jdXJzb3JSZXF1
ZXN0Tm90aWZpZXIgPSBudWxscHRyOworCiAgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQ7CiAg
ICAgewogICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBhY3RpdmF0b3IobV90cmFuc2FjdGlv
bi5nZXQoKSk7CkBAIC0zNjQsNiArMzcyLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0
ZUN1cnNvcihJREJDdXJzb3ImIGN1cnNvcikKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CiAg
ICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwogICAgIEFTU0VSVCgmY3Vyc29yID09IHJlc3Vs
dEN1cnNvcigpKTsKKyAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsKIAogICAg
IG1fcGVuZGluZ0N1cnNvciA9ICZjdXJzb3I7CiAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSB0
cnVlOwpAQCAtMzcxLDYgKzM4MCwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vy
c29yKElEQkN1cnNvciYgY3Vyc29yKQogICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFk
eVN0YXRlOjpQZW5kaW5nOwogICAgIG1fZG9tRXJyb3IgPSBudWxscHRyOwogICAgIG1faWRiRXJy
b3IgPSB7IH07CisKKyAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlx
dWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgeworICAgICAgICBtX3BlbmRpbmdDdXJzb3ItPmRlY3Jl
bWVudE91dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSURCUmVx
dWVzdDo6ZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHRE
YXRhKQpAQCAtMzg0LDYgKzM5Nyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9ySXRlcmF0
ZUN1cnNvcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogICAgICAgICAgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZSgqbV9wZW5kaW5nQ3Vyc29yKTsKICAgICB9CiAKKyAgICBt
X2N1cnNvclJlcXVlc3ROb3RpZmllciA9IG51bGxwdHI7CiAgICAgbV9wZW5kaW5nQ3Vyc29yID0g
bnVsbHB0cjsKIAogICAgIHJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1w
bC5oCmluZGV4IDFmN2VmMjEuLjNiZjQyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlJlc291
cmNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgorI2luY2x1
ZGUgIlNjb3BlR3VhcmQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xNDYsNiArMTQ3LDggQEAgcHJpdmF0ZToKICAgICBJbmRleGVkREI6
OkluZGV4UmVjb3JkVHlwZSBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKIAogICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29w
ZUd1YXJkPiBtX2N1cnNvclJlcXVlc3ROb3RpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElE
QkNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggODA1OGRlNC4uOWMxOTQzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURC
U2VydmVyLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlNjb3BlR3VhcmQuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNjc1LDM3ICs2NzYsNiBAQCBFeGVjU3RhdGUmIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpCiAgICAgcmV0dXJuICpn
bG9iYWxPYmplY3QuZ2V0KCktPmdsb2JhbEV4ZWMoKTsKIH0KIAotY2xhc3MgU2NvcGVHdWFyZCB7
Ci1wdWJsaWM6Ci0gICAgU2NvcGVHdWFyZCgpCi0gICAgewotICAgIH0KLQotICAgIFNjb3BlR3Vh
cmQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQotICAgICAgICA6IG1fZnVuY3Rpb24o
V1RGTW92ZShmdW5jdGlvbikpCi0gICAgewotICAgIH0KLQotICAgIH5TY29wZUd1YXJkKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2Z1bmN0aW9uKQotICAgICAgICAgICAgbV9mdW5jdGlvbigpOwot
ICAgIH0KLQotICAgIHZvaWQgZW5hYmxlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikK
LSAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGRpc2FibGUoKQotICAgIHsKLSAgICAgICAgbV9mdW5jdGlvbiA9IG51bGxwdHI7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9u
IHsgbnVsbHB0ciB9OwotfTsKLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9y
QWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXIm
IG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
IG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTky
YThiZC4uMmE3ZDI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTk3OSw2ICsxOTc5LDggQEAKIAkJNTEzRjE0NTQwQUI2MzRD
NDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxM0YxNDUyMEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmgg
Ki87IH07CiAJCTUxNDA1Qzg4MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVy
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0
MDVDODYxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAgKi87IH07
CiAJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDA1Qzg3MTkw
QjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTQxMjk4RTFDNUZEODNBMDA1OUU3
MTQgLyogSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MTI5OEQxQzVGRDdFOTAwNTlFNzE0IC8qIEpT
SURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNTE0MTI5OTAxQzYwMUFDQzAw
NTlFNzE0IC8qIFNjb3BlR3VhcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNDEyOThGMUM2MDFBODkwMDU5RTcxNCAvKiBTY29wZUd1YXJkLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0NUIxMDkx
QkM0OEUyRTAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQ1QjEwNzFCQzQ4OTBCMDBFODYy
MTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcCAqLzsgfTsKIAkJNTE0NUIxMEExQkM0OEUy
RTAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0NUIxMDgxQkM0ODkwQjAwRTg2MjE5IC8qIElE
QlJlc291cmNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxNDg0NTNFMUJCOUQwN0UwMDZBNzJFRCAvKiBJREJFcnJvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQ4NDUzQzFC
QjlEMDc2MDA2QTcyRUQgLyogSURCRXJyb3IuY3BwICovOyB9OwpAQCAtOTQ2Nyw2ICs5NDY5LDgg
QEAKIAkJNTEzRjE0NTIwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25Mb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE0MDVDODYxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlvblJlY3RHYXRo
ZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQwNUM4NzE5
MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdGlvblJlY3RHYXRoZXJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTQxMjk4RDFDNUZEN0U5MDA1OUU3MTQgLyogSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MTQxMjk4RjFDNjAxQTg5MDA1OUU3MTQgLyogU2NvcGVHdWFyZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZUd1YXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNDVCMTA3MUJDNDg5MEIwMEU4NjIxOSAvKiBJREJSZXNvdXJjZUlkZW50aWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0NUIxMDgxQkM0
ODkwQjAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJSZXNvdXJjZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE0ODQ1M0MxQkI5RDA3NjAwNkE3MkVEIC8qIElEQkVycm9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkVycm9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMzA0LDYgKzIyMzA4LDcgQEAKIAkJCQlENkY3OTYw
QzE2NkZGRUNFMDA3NkREMTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCAqLywK
IAkJCQk1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlDdXN0b20uY3BwICovLAog
CQkJCTUxMkJEQjRDMUM0NkIwRkYwMDY0OTRERiAvKiBKU0lEQkN1cnNvckN1c3RvbS5jcHAgKi8s
CisJCQkJNTE0MTI5OEQxQzVGRDdFOTAwNTlFNzE0IC8qIEpTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcCAqLywKIAkJCQk1MTFFRjJDRDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAgKi8sCiAJCQkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwICovLAogCQkJCUE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAvKiBK
U0ltYWdlRGF0YUN1c3RvbS5jcHAgKi8sCkBAIC0yMjc5NCw2ICsyMjc5OSw3IEBACiAJCQkJNDRD
MzYzRUYwRkFBN0JCMzAwOTdGOENDIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5tbSAq
LywKIAkJCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICov
LAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovLAor
CQkJCTUxNDEyOThGMUM2MDFBODkwMDU5RTcxNCAvKiBTY29wZUd1YXJkLmggKi8sCiAJCQkJQkM4
QUUzNEMxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmNwcCAqLywKIAkJCQlCQzhB
RTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCAqLywKIAkJCQlDQTNCRjY3
QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLApAQCAtMjU2NDEsNiAr
MjU2NDcsNyBAQAogCQkJCTMxQzBGRjRDMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRUcmFu
c2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQzBGRjRFMEU0Q0VGREQwMDdENkZF
NSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODVDN0Y1RTcwQUFGQkFGQjAwNDAxNEREIC8qIERPTVdoZWVsRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxNDEyOTkwMUM2MDFBQ0MwMDU5RTcxNCAvKiBTY29wZUd1YXJkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NTk4OUREMTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9NV2hlZWxFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdDN0YgLyog
RE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQzlBMEY3NTE2NDA5NENGMDAzRDZCOEQg
LyogRE9NV2luZG93Q1NTLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjUxLDYgKzMxMjU4LDcgQEAK
IAkJCQlCNUE2ODQyNDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTIyNDY0QjBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMjI0NjREMENDOThEREIwMEMwNTI0MCAvKiBT
UUxpdGVUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTQxMjk4RTFDNUZEODNB
MDA1OUU3MTQgLyogSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBNDExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkE0NDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRThBNjc0NzE2Q0REMTlFMDA5MzBCRjggLyog
U1FMU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OWI4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0lEQkN1cnNvcldpdGhWYWx1ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0lEQkN1cnNvcldpdGhW
YWx1ZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSlNJREJDdXJzb3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKHZpc2l0b3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njb3BlR3VhcmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njb3BlR3VhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43ZGVmOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2NvcGVHdWFyZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRl
ZiBTY29wZUd1YXJkX2gKKyNkZWZpbmUgU2NvcGVHdWFyZF9oCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2NvcGVHdWFyZCB7CitwdWJsaWM6CisgICAgU2NvcGVHdWFyZCgpCisgICAg
eworICAgIH0KKworICAgIFNjb3BlR3VhcmQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9u
KQorICAgICAgICA6IG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCisgICAgeworICAgIH0K
KworICAgIH5TY29wZUd1YXJkKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uKQorICAg
ICAgICAgICAgbV9mdW5jdGlvbigpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxlKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24gPSBXVEZN
b3ZlKGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIGRpc2FibGUoKQorICAgIHsKKyAgICAg
ICAgbV9mdW5jdGlvbiA9IG51bGxwdHI7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NvcGVHdWFyZF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>