<?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>225128</bug_id>
          
          <creation_ts>2021-04-27 16:50:46 -0700</creation_ts>
          <short_desc>Fix exception assertions in light of the TerminationException.</short_desc>
          <delta_ts>2021-04-28 10:14:26 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225132</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mkwst</cc>
    
    <cc>msaboff</cc>
    
    <cc>philipj</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1754847</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 16:50:46 -0700</bug_when>
    <thetext>rdar://76694909</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754851</commentid>
    <comment_count>1</comment_count>
      <attachid>427214</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 16:58:21 -0700</bug_when>
    <thetext>Created attachment 427214
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754861</commentid>
    <comment_count>2</comment_count>
      <attachid>427218</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 17:16:04 -0700</bug_when>
    <thetext>Created attachment 427218
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754877</commentid>
    <comment_count>3</comment_count>
      <attachid>427218</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-04-27 18:25:21 -0700</bug_when>
    <thetext>Comment on attachment 427218
proposed patch.

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

Have you benchmarked the effect on JetStream2? While the many DeferTermination don&apos;t appear to be on any hot path it would be reassuring to verify it.

&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:192
&gt; +    throwScope.assertNoExceptionExceptTermination();

What happens if you throw a regular exception while a termination exception is pending? Is one of the two lost?

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:107
&gt; +    if (scope.exception() || !isJSArray(object))

Maybe keep a scope.assertNoExceptionExceptTermination() here? It seems like you are converting an assert failure into a regular return in that error case.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:7357
&gt; +        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());

In this file you sometimes just return false, and sometimes first clear and report the exception. Is it on purpose, and can you add a short comment explaining why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754882</commentid>
    <comment_count>4</comment_count>
      <attachid>427218</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 18:57:38 -0700</bug_when>
    <thetext>Comment on attachment 427218
proposed patch.

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

&gt;&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:192
&gt;&gt; +    throwScope.assertNoExceptionExceptTermination();
&gt; 
&gt; What happens if you throw a regular exception while a termination exception is pending? Is one of the two lost?

TerminationException takes precedence.  See the lowest level VM::throwException() that does the actual throw.

&gt;&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:107
&gt;&gt; +    if (scope.exception() || !isJSArray(object))
&gt; 
&gt; Maybe keep a scope.assertNoExceptionExceptTermination() here? It seems like you are converting an assert failure into a regular return in that error case.

Good catch.  I missed that this follows a `typeValue.isObject()` check right above it.  Hence, this toObject() is guaranteed to do just a pointer cast and not come across any RETURN_IF_EXCEPTION on the way.  This means I can undo this change and keep the original assertion.

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:7357
&gt;&gt; +        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
&gt; 
&gt; In this file you sometimes just return false, and sometimes first clear and report the exception. Is it on purpose, and can you add a short comment explaining why?

This lambda function declares a CatchScope and always clears the exception and return false if an exception is found.  The other 2 changes in this file is for a different function with a ThrowScope that propagates the exception (i.e. returns false without clearing the exception).

That said, I should ensure that the TerminationException isn&apos;t just eaten without terminating.  However, if that is an issue, it is a pre-existing one.  This line of change here behaves consistently with the exception handling in other places in this function.  I filed https://bugs.webkit.org/show_bug.cgi?id=225132 to track the review of HTMLMediaElement::didAddUserAgentShadowRoot() for proper handling of termination later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754883</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 18:59:16 -0700</bug_when>
    <thetext>(In reply to Robin Morisset from comment #3)
&gt; Comment on attachment 427218 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427218&amp;action=review
&gt; 
&gt; Have you benchmarked the effect on JetStream2? While the many
&gt; DeferTermination don&apos;t appear to be on any hot path it would be reassuring
&gt; to verify it.

I have not, but these changes are not expected to have any measurable performance cost.  My plan is to land the change and watch the bots.  We can always roll out / fix if we find a regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754884</commentid>
    <comment_count>6</comment_count>
      <attachid>427226</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-27 19:05:34 -0700</bug_when>
    <thetext>Created attachment 427226
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754886</commentid>
    <comment_count>7</comment_count>
      <attachid>427226</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-04-27 19:14:02 -0700</bug_when>
    <thetext>Comment on attachment 427226
proposed patch.

r=me
Thanks for the explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755065</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-28 10:14:26 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r276719: &lt;http://trac.webkit.org/r276719&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427214</attachid>
            <date>2021-04-27 16:58:21 -0700</date>
            <delta_ts>2021-04-27 17:04:21 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225128.patch</filename>
            <type>text/plain</type>
            <size>54251</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY2NzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA0LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRl
cm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3N1cHByZXNzLVRl
cm1pbmF0aW9uRXhjZXB0aW9uLWluLUpTRnVuY3Rpb24tcHJvdG90eXBlRm9yQ29uc3RydWN0aW9u
LmpzOiBBZGRlZC4KKwogMjAyMS0wNC0yNyAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vs
b3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBTa2lwIHRlc3RzIGZhaWxpbmcgb24gTG9v
bmdzb24gM0E0MDAwCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4
Y2VwdGlvbi1pbi1KU0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1K
U0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1KU0Z1bmN0aW9u
LXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
IEBACisvL0AgcnVuRGVmYXVsdCgiLS13YXRjaGRvZz0zMDAiLCAiLS13YXRjaGRvZy1leGNlcHRp
b24tb2siKQorCitjbGFzcyBVIHt9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgY2xhc3MgQyBleHRl
bmRzIFUgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgZ2MoKTsKKyAgICAgIHN1cGVyKCk7
CisgICAgfQorICB9CisgIG5ldyBDKCk7Cit9CisKK3doaWxlKDEpIGZvbygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBACisyMDIxLTA0
LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0
aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAg
ICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNvbWUgcHJlLWV4aXN0aW5nIGZ1bmN0aW9ucyBhc3NlcnROb0V4Y2VwdGlv
bigpIG9yIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpLgorICAgICAgICBUaGVzZSBhc3NlcnRp
b24gbWF5IG5vdCBiZSB2YWxpZCBhbnltb3JlIGluIGxpZ2h0IG9mIHRoZSBUZXJtaW5hdGlvbkV4
Y2VwdGlvbiwgYW5kCisgICAgICAgIHJlcXVpcmUgc29tZSBmaXggdXA6CisKKyAgICAgICAgMS4g
SWYgaXQgbWFrZXMgc2Vuc2UgdG8gY29udmVydCB0aGUgYXNzZXJ0aW9uIGludG8gYW4gZXhjZXB0
aW9uIGNoZWNrLCB0aGVuIGRvIHNvLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2Jq
ZWN0UHJvdG90eXBlVG9TdHJpbmcoKSwgc2xvd19wYXRoX2NyZWF0ZV90aGlzKCkuCisKKyAgICAg
ICAgMi4gSWYgdGhlIGFzc2VydGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24ganVzdCBi
ZWZvcmUgaXQgcmV0dXJucywgb3IgaWYgdGhlCisgICAgICAgICAgIHJlbWFpbmluZyBjb2RlIGlu
IHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgcGVuZGluZyBleGNlcHRp
b24sCisgICAgICAgICAgIHRoZW4gd2UgY2FuIHJlcGxhY2UgdGhlIGFzc2VydGlvbiBhcyBmb2xs
b3dzOgorCisgICAgICAgICAgICAgICBhc3NlcnROb0V4Y2VwdGlvbigpID0+IGFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKQorICAgICAgICAgICAgICAgcmVsZWFzZUFzc2VydE5v
RXhjZXB0aW9uKCkgPT4gcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24o
KQorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2JqZWN0UHJvdG90eXBlSGFzT3duUHJv
cGVydHkoKSwgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpLgorCisgICAg
ICAgIDMuIElmIHRoZSBhc3NlcnRpb24gaXMgaW4gYSBmdW5jdGlvbiB3aGVyZSBwZXJmIGlzIG5v
dCBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBhbmQgdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIGlzbid0
IGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgcmUtZW50ZXIgdGhlIFZNIG9y
IHBvdGVudGlhbGx5CisgICAgICAgICAgIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLCB0
aGVuIHdlIGNhbiB1c2UgYSBEZWZlclRlcm1pbmF0aW9uIHNjb3BlIHRvIGRlZmVyCisgICAgICAg
ICAgIHRlcm1pbmF0aW9uLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoKSwgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21D
YWxsZWUoKS4KKworICAgICAgICA0LiBJZiB0aGUgYXNzZXJ0aW9uIGlzIGluIGFuIGluaXRpYWxp
emVyIGZ1bmN0aW9uIGlzIG9ubHkgcnVuIG9uY2UgYW5kIGFkZGluZworICAgICAgICAgICBleGNl
cHRpb24gY2hlY2tzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUgbW9yZSB0aGFuIGl0J3Mgd29y
dGggKGFuIGVuZ2luZWVyaW5nCisgICAgICAgICAgIGp1ZGdlbWVudCksIHRoZW4gdXNlIGEgRGVm
ZXJUZXJtaW5hdGlvbiBzY29wZS4KKworICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2VlIFByb2dy
YW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcygpLCBzZXR1cEFkYXB0aXZl
V2F0Y2hwb2ludCgpLgorCisgICAgICAgICAgIFNvbWUgbGVhZiAob3IgbmVhci1sZWFmKSBmdW5j
dGlvbnMgdGhhdCBjdXJyZW50bHkgREVDTEFSRV9DQVRDSF9TQ09QRSgpIG1heSBhbHNvCisgICAg
ICAgICAgIGZhbGwgdW5kZXIgdGhpcyBjYXRlZ29yeS4KKworICAgICAgICAgICBGb3IgZXhhbXBs
ZSwgc2VlIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbigpLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmFkZEJpZ0ludENvbnN0YW50KToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6Om5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZGVidWcpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgor
ICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAg
KiBqc2MuY3BwOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXJBcmVuYS5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0lu
dERlY2ltYWxJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSCk6CisgICAgICAgICogcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVz
c2FnZVN0cmluZyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVT
dHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaDoKKyAgICAgICAgKEpT
Qzo6RXhjZXB0aW9uU2NvcGU6OmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhj
ZXB0VGVybWluYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyk6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YpOgorICAg
ICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnRyeUluc3RhbGxTcGVjaWVzV2F0Y2hw
b2ludCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChK
U0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OkpTVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvdHlwZUhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG90eXBlVG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrRnJhbWU6Om5hbWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxh
clZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKwogMjAy
MS0wNC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBF
eGNlcHRpb25FeHBlY3RhdGlvbiBpbnRvIGl0cyBvd24gLmggZmlsZS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwOCw3ICszMDA4LDcgQEAgc3RhdGljIHZvaWQgcnVu
V2l0aE9wdGlvbnMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXNz
ZWQgZmlsZSBpc24ndCBhbiBhYnNvbHV0ZSBwYXRoIGFwcGVuZCAiLi8iIHNvIHRoZSBtb2R1bGUg
bG9hZGVyIGRvZXNuJ3QgdGhpbmsgdGhpcyBpcyBhIGJhcmUtbmFtZSBzcGVjaWZpZXIuCiAgICAg
ICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdGFydHNXaXRoKCcvJykgPyBmaWxlTmFt
ZSA6IG1ha2VTdHJpbmcoIi4vIiwgZmlsZU5hbWUpOwogICAgICAgICAgICAgICAgIHByb21pc2Ug
PSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LCBmaWxlTmFtZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFm
ZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpIHsK
ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNvIHdl
IGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCkBAIC0zMDQyLDcgKzMwNDIsNyBAQCBzdGF0aWMgdm9p
ZCBydW5XaXRoT3B0aW9ucyhHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3QsIGZ1bGZpbGxIYW5kbGVyLCByZWplY3RI
YW5kbGVyKTsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRp
b24oKTsKICAgICAgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0zMDcwLDkgKzMwNzEsMTEgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdPYgogSlNWYWx1ZSBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQmlnSW50Q29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWlu
dDhfdCByYWRpeCwgYm9vbCBzaWduKQogewogICAgIHJldHVybiBtX2JpZ0ludE1hcC5lbnN1cmUo
QmlnSW50TWFwRW50cnkoaWRlbnRpZmllci5pbXBsKCksIHJhZGl4LCBzaWduKSwgWyZdIHsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0oKSk7CisgICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2
bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAg
ICAgYXV0byBwYXJzZUludFNpZ24gPSBzaWduID8gSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6U2ln
bmVkIDogSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQ7Ci0gICAgICAgIEpTVmFsdWUg
YmlnSW50SW5NYXAgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0oKSwgaWRlbnRpZmll
ci5zdHJpbmcoKSwgcmFkaXgsIEpTQmlnSW50OjpFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRp
b25zLCBwYXJzZUludFNpZ24pOworICAgICAgICBKU1ZhbHVlIGJpZ0ludEluTWFwID0gSlNCaWdJ
bnQ6OnBhcnNlSW50KG51bGxwdHIsIHZtLCBpZGVudGlmaWVyLnN0cmluZygpLCByYWRpeCwgSlNC
aWdJbnQ6OkVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50U2lnbik7CiAg
ICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGFkZENvbnN0YW50VmFs
dWUoYmlnSW50SW5NYXApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgor
I2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2NSw2
ICs4NjYsNyBAQCB2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVJbnRlcm5hbChDCiB2b2lk
IERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgVk0mIHZtID0gbV92bTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0p
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICht
X2lzUGF1c2VkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkg
PT0gSlNGdW5jdGlvblR5cGUgJiYganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmNh
blVzZUFsbG9jYXRpb25Qcm9maWxlKCkpIHsKKyAgICAgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZl
clNjb3BlKHZtKTsKICAgICAgICAgYXV0byByYXJlRGF0YSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y29uc3RydWN0b3IpLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGdsb2JhbE9i
amVjdCwgaW5saW5lQ2FwYWNpdHkpOwogICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNl
cHRpb24oKTsKICAgICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlKiBh
bGxvY2F0aW9uUHJvZmlsZSA9IHJhcmVEYXRhLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpOwpA
QCAtMjY1Niw2ICsyNjU3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1h
a2VSbwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdDIsIEpTU3RyaW5n
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGEsIEVuY29k
ZWRKU1ZhbHVlIGIpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBE
ZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjY3Myw2ICsyNjc1LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN0ckNhdDMsIEpTU3RyaW5nKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGEsIEVuY29kZWRKU1ZhbHVlIGIsIEVuY29kZWRKU1ZhbHVlIGMpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRl
ZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjg1MSw3ICsyODU0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkFycmF5SQogICAgICAgICBpZiAoc3RyaW5nID09IHNlYXJjaEVsZW1lbnQpCiAgICAgICAgICAg
ICByZXR1cm4gdG9VQ1BVU3RyaWN0SW50MzIoaW5kZXgpOwogICAgICAgICBpZiAoc3RyaW5nLT5l
cXVhbChnbG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25F
eGNlcHRUZXJtaW5hdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRvVUNQVVN0cmljdEludDMy
KGluZGV4KTsKICAgICAgICAgfQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3
IEBACiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJWTUVudHJ5
U2NvcGUuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlICJWTVRyYXBzSW5saW5l
cy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00OTYsNiArNDk3LDcgQEAgcHJpdmF0
ZToKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5n
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBk
ZWZlclNjb3BlKHZtKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KHZtKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpKSB7CkBAIC02NTgsNyArNjYwLDYgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29ucwogICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29w
ZS5leGNlcHRpb24oKSB8fCBwcm9ncmFtKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKQpAQCAtMTI3MSw2ICsxMjcyLDcgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYQogTkVWRVJfSU5MSU5FIHZv
aWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tUeXBl
IGRlYnVnSG9va1R5cGUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0o
KTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
ZWJ1Z2dlclRyaWdnZXJzQnJlYWtwb2ludEV4Y2VwdGlvbigpKSAmJiBkZWJ1Z0hvb2tUeXBlID09
IERpZFJlYWNoRGVidWdnZXJTdGF0ZW1lbnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00ODgsNiArNDg5LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFByaW50U3RyZWFtJiBv
dQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC04Myw2ICs4NCw3IEBAIGNvbnN0IElkZW50
aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUIKICAgICBpZiAocmFkaXggPT0gMTApCiAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyOwogCisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3Bl
KHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBiaWdJbnQgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0sIGlkZW50aWZpZXIu
c3RyaW5nKCksIHJhZGl4LCBKU0JpZ0ludDo6RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9u
cywgSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQpOwogICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OkFic3RyYWN0
TW9kdWxlUmVjbwogCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiB7CisgICAgRGVmZXJUZXJtaW5h
dGlvbiBkZWZlclNjb3BlKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIApAQCAtNTksNyArNjIsNiBAQCB2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIAotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShn
bG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKICAgICBzY29w
ZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBtX2RlcGVuZGVuY2llc01hcC5zZXQo
dm0sIHRoaXMsIG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMzUsNyArMjM1LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9j
cgogCiAgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IGJ5dGVjb2RlLm1faW5saW5lQ2Fw
YWNpdHk7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZSogYWxs
b2NhdGlvblByb2ZpbGUgPSBjb25zdHJ1Y3Rvci0+ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9u
UHJvZmlsZShnbG9iYWxPYmplY3QsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKTsKLSAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCh2bSwgc3RydWN0dXJlKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aGFzUG9seVByb3RvKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTU1LDEwICsx
NTUsMTAgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1lc3NhZ2VTdAogICAgIFBy
b3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwogICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVByb3BlcnROYW1lLCBtZXNzYWdlU2xvdCkg
JiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdlVmFsdWUgPSBtZXNzYWdl
U2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7Ci0gICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgaWYgKCFtZXNzYWdlVmFsdWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1lc3Nh
Z2VWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKIH0KIApAQCAtMTg2LDcgKzE4Niw3
IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWROYW1lU3RyaW4KICAgICAgICAgfQog
ICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIH0K
LSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgcmV0dXJuICJFcnJv
ciJfczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
U2NvcGUuaAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNl
cHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNl
QXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0
aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCkg
eyBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWV4Y2VwdGlvbigpIHx8IG1fdm0uaXNUZXJt
aW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24oKSksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25N
ZXNzYWdlKCkuZGF0YSgpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlQXNzZXJ0
Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpIHsgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKCFleGNlcHRpb24oKSB8fCBtX3ZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9u
KCkpLCAiJXMiLCB1bmV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSgpLmRhdGEoKSk7IH0KIAogI2lm
IEFTQU5fRU5BQkxFRCB8fCBFTkFCTEUoQ19MT09QKQogICAgIGNvbnN0IHZvaWQqIHN0YWNrUG9z
aXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV9sb2NhdGlvbi5zdGFja1Bvc2l0aW9uOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWVBcnJheS5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlR5cGVFcnJv
ci5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0xNTUsNyArMTU2LDggQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0
cgogewogICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIGdldHRpbmcgdGhlIHByb3RvdHlwZSBpcyBu
b3QgZWZmZWN0ZnVsLiBUaGF0J3Mgb25seQogICAgIC8vIHRydWUgd2hlbiB3ZSBjYW4gdXNlIHRo
ZSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9maWxl
KCkpOyAKKyAgICBBU1NFUlQoY2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKSk7CisgICAgRGVmZXJU
ZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBnZXQoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4
Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1
bmN0aW9ucy5oCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
Z2VuZXJpY1R5cGUKICAgICBpZiAoIXRhcmdldE9wdGlvbikKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc0RldGFjaGVkKCkpOwogCiAgICAgaWYg
KHN0ZDo6aXNuYW4oc3RhdGljX2Nhc3Q8ZG91YmxlPigqdGFyZ2V0T3B0aW9uKSkpIHsKQEAgLTI0
OSw3ICsyNDksNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBlCiAg
ICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1
ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKLSAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVy
bWluYXRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNEZXRhY2hlZCgp
KTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAtMzc0LDcgKzM3
NCw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2VuZXJpY1R5cGUKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUgVmll
d0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwot
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5p
c0RldGFjaGVkKCkpOwogCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAgLTU1
Nyw4ICs1NTcsOSBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBlCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShWTSZ2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitB
TFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVG
dW5jU3ViYXJyYXlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUo
dm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8v
IDIyLjIuMy4yMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNiAr
NTQ5LDcgQEAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNldHVwQWRhcAogewogICAg
IC8vIFBlcmZvcm1pbmcgdGhlc2UgZ2V0cyBzaG91bGQgbm90IHRocm93LgogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0p
OwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIFBy
b3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpH
ZXQpOwogICAgIGJvb2wgcmVzdWx0ID0gYmFzZS0+Z2V0T3duUHJvcGVydHlTbG90KGJhc2UsIGds
b2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwpAQCAtNTk4LDYgKzU5OSw3IEBAIFNVUFBSRVNTX0FT
QU4gaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3QKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5p
dChWTSYgdm0pCiB7CisgICAgQVNTRVJUKHZtLnRyYXBzKCkuaXNEZWZlcnJpbmdUZXJtaW5hdGlv
bigpKTsKICAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAg
ICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE1MTcs
NyArMTUxOSw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAg
ICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoc3ltYm9s
VGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUoKSwgc2hvdWxkVGhyb3csIGlnbm9yZVJlYWRPbmx5
RXJyb3JzLCBwdXRSZXN1bHQpKQogICAgICAgICAgICAgICAgIEFTU0VSVChwdXRSZXN1bHQpOwot
ICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZGVz
Y3JpcHRvci53cml0YWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci53cml0YWJsZSgpICYmICFl
bnRyeS5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGVudHJ5LnNldFJlYWRPbmx5KCk7CkBA
IC0yMTg4LDYgKzIxOTAsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsU3BlY2ll
c1dhCiAgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpZXNXYXRjaHBvaW50KTsKIAogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBGaXJzdCB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAlcHJvdG90eXBlJS5jb25zdHJ1Y3RvciBwcm9w
ZXJ0eSBwb2ludHMgdG8gYSAlY29uc3RydWN0b3IlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE2
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIFN0cmluZyBwcmludGFibGVNb2R1bGVLZXkoSlNH
bG9iYQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAo
a2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBrZXkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOyAvLyBUaGlzIGlzIE9LIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMg
anVzdCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uRXhjZXB0VGVybWluYXRpb24oKTsgLy8gVGhpcyBpcyBPSyBzaW5jZSB0aGlzIGZ1bmN0aW9u
IGlzIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgogICAgICAgICByZXR1cm4gcHJvcGVydHlO
YW1lLmltcGwoKTsKICAgICB9CiAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllci5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdDo6ZmluaXNoQ3JlYQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3Rz
LWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9l
Y21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZlbnRl
eHRlbnNpb25zCiAgICAgbWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBn
bG9iYWxPYmplY3QpOwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogfQogCiB2b2lkIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMwNSw3ICsyMzA1LDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2
ZShKUwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIHNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5h
dGlvbigpOwogCiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJObyBkZWZhdWx0IHZhbHVlIl9zKTsKIH0KQEAgLTI1MzgsNyArMjUzOCw3IEBAIHZvaWQgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KIAogICAgIGdldE5vblJlaWZpZWRTdGF0
aWNQcm9wZXJ0eU5hbWVzKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICBzdHJ1Y3R1cmUo
dm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiB9CiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1i
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVz
Y3JpcHRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzgsMTIgKzc4LDEyIEBAIEpTQXJyYXkqIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9y
OjpjcmUKICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShnbG9iYWxPYmplY3Qs
IHJhd09iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnJhdywgcmF3T2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShnbG9i
YWxPYmplY3QsIHRlbXBsYXRlT2JqZWN0KTsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKIAogICAg
IHJldHVybiB0ZW1wbGF0ZU9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiVk1UcmFwc0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgb2JqZWN0UHJvdG90eXBl
SGFzT3duUHJvcGVydHkoSlNHbG8KICAgICBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Qcm9w
ZXJ0eUNhY2hlID0gdm0uZW5zdXJlSGFzT3duUHJvcGVydHlDYWNoZSgpOwogICAgIGlmIChPcHRp
b25hbDxib29sPiByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eUNhY2hlLT5nZXQoc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIEFTU0VSVCgqcmVzdWx0ID09IHRoaXNPYmplY3QtPmhh
c093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhj
ZXB0VGVybWluYXRpb24oKTsKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAgICAgfQogCkBAIC0z
NjQsNyArMzY0LDcgQEAgSlNTdHJpbmcqIG9iamVjdFByb3RvdHlwZVRvU3RyaW5nKEpTR2xvYgog
ICAgIGlmICh0aGlzVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmlu
Z3MubnVsbE9iamVjdFN0cmluZygpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1Zh
bHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEludGVn
cml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAg
ICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVjaWFs
UHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY1LDYgKzY2LDcgQEAgc3RhdGljIEdsb2JhbFByb3Bl
cnR5TG9va1VwU3RhdHVzIGhhc1JlcwogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6Omlu
aXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3Bl
KHZtKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChzY29wZSk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9PSBzY29w
ZS0+Z2xvYmFsT2JqZWN0KHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIlZN
VHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21D
YWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTcyOSw2
ICs3MzAsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtCiAgICAg
aWYgKCFjYWxsZWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAorICAgIERlZmVyVGVybWlu
YXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2Jh
bE9iamVjdCh2bSk7CiAgICAgYXV0byBnZXRQcm9wZXJ0eUlmUHVyZU9wZXJhdGlvbiA9IFsmXSAo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpIC0+IFN0cmluZyB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBl
UHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1ZGUgIlZNVHJh
cHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgPHVu
aWNvZGUvdXZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtMzA5MSw2ICsz
MDkyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2hhZG93QwogewogICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChhdXRvKiBzaGFkb3dD
aGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTA0LTI3ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2VydGlv
bnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6Ly83
NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGxSZXBsYWNlbWVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjp0aHJvd05vdFN1cHBvcnRlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93
SW52YWxpZFN0YXRlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dTZWN1cml0eUVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93RE9NU3ludGF4RXJyb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6dGhyb3dEYXRhQ2xvbmVFcnJvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRCYWNraW5nTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0QmFja2luZ1NldCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNNaWNyb3Rhc2tDYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6SlNNaWNyb3Rhc2tD
YWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWlu
YWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dyaXRhYmxlU3RyZWFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlU3RyZWFtSW50ZXJuYWw6OmNhbGxGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZVN0cmVhbTo6bG9jayk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAg
IChHZW5lcmF0ZVB1dEJ5SW5kZXgpOgorICAgICAgICAoR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0VHlwZUZsYWdzKToK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50
YXRpb25Nb2RlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omdl
dEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKwogMjAyMS0wNC0yNyAgQWxleGV5IFNodmF5
a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIGRlZmF1
bHRWYWx1ZSgpIGZyb20gdGhlIG1ldGhvZCB0YWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc2LDEy
ICsxNzYsMTggQEAgYXV0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogCisgICAgYXV0byBj
bGVhckV4Y2VwdGlvbkFuZFJldHVybkZhbHNlID0gWyZdICgpIC0+IEluc3RhbGxSZXN1bHQgewor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4geyBmYWxzZSB9
OworICAgIH07CisKICAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIg
ZnVuY3Rpb24uCiAgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxP
YmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRG
dW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4geyBmYWxzZSB9Owog
ICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlv
bi50b09iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGNsZWFyRXhjZXB0aW9uQW5k
UmV0dXJuRmFsc2UoKSk7CisKICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHJl
cGxhY2VtZW50T2JqZWN0KTsKICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBKU0M6OkNhbGxEYXRh
OjpUeXBlOjpOb25lKQogICAgICAgICByZXR1cm4geyBmYWxzZSB9OwpAQCAtMTk0LDEwICsyMDAs
NyBAQCBhdXRvIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgYXJnTGlz
dC5hcHBlbmQodG9KUzxJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7CiAgICAgQVNTRVJU
KCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50
ID0gY2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXBsYWNlbWVudE9iamVjdCwgY2FsbERhdGEs
IGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgewotICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4g
eyBmYWxzZSB9OwotICAgIH0KKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBjbGVhckV4
Y2VwdGlvbkFuZFJldHVybkZhbHNlKCkpOwogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0
ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBs
YWNlbWVudC5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidmlkZW8iKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlv
bihKU0dsb2JhbE9iamVjCiAKIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJt
aW5hdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShl
eGNlcHRpb24pKSk7CiB9CiAgICAgCkBAIC0yMDksMTkgKzIwOSwxOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBTdHJpbmdUeXBlcz4gc3RhdGljCiAKIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJv
cihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwgbWVzc2FnZSkKIHsKLSAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24o
KTsKICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgTm90U3VwcG9ydGVkRXJyb3IsIG1l
c3NhZ2UpKTsKIH0KIAogdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCBtZXNzYWdlKQogewotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIHRocm93RXhj
ZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBJbnZhbGlkU3RhdGVFcnJvciwgbWVzc2FnZSkpOwogfQogCiB2
b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3Qs
IFNlY3VyaXR5RXJyb3IsIG1lc3NhZ2UpKTsKIH0KIApAQCAtMjk4LDEzICsyOTgsMTMgQEAgSlND
OjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaQogCiB2b2lkIHRocm93RE9NU3lu
dGF4RXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCiB7Ci0gICAgc2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1p
bmF0aW9uKCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIFN5bnRheEVycm9yLCBt
ZXNzYWdlKSk7CiB9CiAKIHZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQogewotICAg
IHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25F
eGNlcHRUZXJtaW5hdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBEYXRh
Q2xvbmVFcnJvcikpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0N1c3RvbVNldHRlckZ1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNJbnRlcm5hbFByb21pc2UuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVk1UcmFwc0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9XZWFr
R0NNYXBJbmxpbmVzLmg+CiAKQEAgLTk2LDYgKzk3LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKG1ha2VUaGlzVHlwZUVycgogICAgIEFTU0VSVChjYWxsRnJhbWUpOwogICAgIEFTU0VSVChj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5h
bWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhnbG9iYWxPYmpl
Y3QpOwpAQCAtMTEwLDYgKzExMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihtYWtlR2V0
dGVyVHlwZUUKICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPT0gMik7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKQEAgLTEy
OCw2ICsxMzEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04obWFrZURPTUV4Y2VwdGlvCiAg
ICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwogCiAgICAgYXV0byYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3Bl
KHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBh
dXRvIGNvZGVWYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5n
KGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdFRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIWNvbnRleHQpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEpTRXhlY1N0YXRlOjpydW5UYXNrKGxleGljYWxH
bG9iYWxPYmplY3QsIG1fdGFzayk7Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKICAg
ICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1h
cExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NTWFwTGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRj
aFNjb3BlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNNYXAuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9WTVRyYXBzSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTM5LDYgKzQwLDcgQEAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
SgogICAgIGlmICghYmFja2luZ01hcC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4geyBm
YWxzZSwgKkpTQzo6YXNPYmplY3QoYmFja2luZ01hcCkgfTsKIAorICAgIEpTQzo6RGVmZXJUZXJt
aW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAKICAgICBiYWNraW5nTWFwID0gSlNDOjpKU01hcDo6Y3JlYXRlKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2bSwgbGV4aWNhbEdsb2JhbE9iamVjdC5tYXBTdHJ1Y3R1cmUoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAJKHJldmlz
aW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0NhdGNoU2NvcGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1NldC5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU2V0SW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1ZNVHJhcHNJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiAr
NDUsNyBAQCBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxKCiAgICAgYXV0
byBiYWNraW5nU2V0ID0gc2V0TGlrZS5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tp
bmdTZXRQcml2YXRlTmFtZSgpKTsKICAgICBpZiAoYmFja2luZ1NldC5pc1VuZGVmaW5lZCgpKSB7
CiAgICAgICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOworICAgICAgICBK
U0M6OkRlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgICAgICBiYWNraW5nU2V0ID0gSlNDOjpK
U1NldDo6Y3JlYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSwgbGV4aWNhbEdsb2JhbE9iamVj
dC5zZXRTdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01p
Y3JvdGFza0NhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNaWNyb3Rhc2tDYWxsYmFjay5oCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01pY3JvdGFza0NhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NCw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAg
SlNFeGVjU3RhdGU6OnJ1blRhc2sobV9nbG9iYWxPYmplY3QuZ2V0KCksIG1fdGFzayk7Ci0gICAg
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDc0LDcgKzM0NzQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OkpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0dWIobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBtX2xleGlj
YWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVy
ZSgpLCBtX3dhc21Nb2R1bGVzLT5hdChpbmRleCkpOwogICAgICAgICAgICAgLy8gU2luY2Ugd2Ug
YXJlIGNsb25pbmcgYSBKU1dlYkFzc2VtYmx5TW9kdWxlLCBpdCdzIGltcG9zc2libGUgZm9yIHRo
YXQKICAgICAgICAgICAgIC8vIG1vZHVsZSB0byBub3QgaGF2ZSBiZWVuIGEgdmFsaWQgbW9kdWxl
LiBUaGVyZWZvcmUsIGNyZWF0ZVN0dWIgc2hvdWxkCi0gICAgICAgICAgICAvLyBub3QgdHJvdy4K
KyAgICAgICAgICAgIC8vIG5vdCB0aHJvdy4KICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hP
bk92ZXJmbG93KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzQ5Niw3
ICszNDk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHJl
c3VsdCA9IEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6dHJ5Q3JlYXRlKG1fbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdm0sIG1fZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
KTsKICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFyZSBjbG9uaW5nIGEgSlNXZWJBc3NlbWJseU1l
bW9yeSwgaXQncyBpbXBvc3NpYmxlIGZvciB0aGF0CiAgICAgICAgICAgICAvLyBtb2R1bGUgdG8g
bm90IGhhdmUgYmVlbiBhIHZhbGlkIG1vZHVsZS4gVGhlcmVmb3JlLCBjcmVhdGVTdHViIHNob3Vs
ZAotICAgICAgICAgICAgLy8gbm90IHRyb3cuCisgICAgICAgICAgICAvLyBub3QgdGhyb3cuCiAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAg
IFJlZjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGhhbmRsZS5y
ZWxlYXNlTm9uTnVsbCgpLAogICAgICAgICAgICAgICAgIFsmdm1dIChXYXNtOjpNZW1vcnk6Ok5v
dGlmeVByZXNzdXJlKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxlY3Rpb25TY29wZTo6RnVs
bCk7IH0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xcml0YWJsZVN0cmVhbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV3JpdGFibGVTdHJl
YW0uY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
cml0YWJsZVN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBjYWxsRnVuY3Rpb24oCiAgICAgYXV0byBjYWxsRGF0YSA9IEpTQzo6
Z2V0Q2FsbERhdGEodm0sIGpzRnVuY3Rpb24pOwogICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9
IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgIGF1dG8gcmVzdWx0ID0gY2FsbCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwganNGdW5jdGlvbiwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1l
bnRzKTsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogfQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgV3JpdGFibGVTdHJlYW06OmxvY2soKQogICAgIEFTU0VS
VCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgSlNDOjpjb25zdHJ1Y3QoJmxleGljYWxH
bG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKLSAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0
VGVybWluYXRpb24oKTsKIH0KIAogYm9vbCBXcml0YWJsZVN0cmVhbTo6aXNMb2NrZWQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA4LDcgKzEy
MDgsNyBAQCBzdWIgR2VuZXJhdGVQdXQKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJl
Y3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7CiAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghZm91bmQpIHtcbiIpOwogICAg
ICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwogICAgICAgICB9CkBAIC0xMjg2
LDcgKzEyODYsNyBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90
b3R5cGVEaXJlY3Qodm0pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlw
ZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc2xvdC5kaXNh
bGxvd1ZNRW50cnkucmVzZXQoKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFm
b3VuZCkge1xuIik7CiAgICAgICAgICAgICAkYWRkaXRpb25hbEluZGVudCAuPSAiICAgICI7CiAg
ICAgICAgIH0KQEAgLTE0MjQsNyArMTQyNCw3IEBAIHN1YiBHZW5lcmF0ZURlZmluZU93blByb3Bl
cnR5CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAi
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07
XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQu
ICIgICAgICAgIGJvb2wgZm91bmQgPSBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAg
IHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRk
aXRpb25hbEluZGVudC4gIiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJ
bmRlbnQuICIgICAgICAgIGlmICghZm91bmQpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9u
YWxJbmRlbnQgLj0gIiAgICAiOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNw
cAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsOCArMTA0
LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoSlNHbAogICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgY29uc3QgSlNPYmplY3QqIG9iamVjdCA9IHR5cGVWYWx1ZS50b09i
amVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKLSAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSB8fCAhaXNKU0FycmF5KG9iamVjdCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CiAKICAgICBjb25zdCBKU0FycmF5
KiBhcnJheSA9IGpzQ2FzdDxjb25zdCBKU0FycmF5Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMzMSwxMiArNzMzMSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2gKICAgICAgICAgYXJnTGlzdC5hcHBlbmQobWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXIpOwog
ICAgICAgICBBU1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgICAgICBhdXRv
KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICBhdXRvIGNhbGxE
YXRhID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24pOwotICAgICAgICBpZiAoY2FsbERh
dGEudHlwZSA9PSBKU0M6OkNhbGxEYXRhOjpUeXBlOjpOb25lKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgICAgIGF1dG8gcmVwb3J0RXhjZXB0aW9uQW5kUmV0dXJuRmFsc2UgPSBb
Jl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNl
cHRpb24oKTsKICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC03MzQ0LDYg
KzczMzgsMTMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9OwogCisgICAgICAgIGF1dG8qIGZ1bmN0
aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlcG9ydEV4Y2VwdGlvbkFuZFJldHVybkZh
bHNlKCkpOworICAgICAgICBhdXRvIGNhbGxEYXRhID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVu
Y3Rpb24pOworICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBKU0M6OkNhbGxEYXRhOjpUeXBl
OjpOb25lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisKICAgICAgICAgYXV0byBjb250
cm9sbGVyVmFsdWUgPSBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBj
YWxsRGF0YSwgJmdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHJlcG9ydEV4Y2VwdGlvbkFuZFJldHVybkZhbHNlKCkpOwogCkBAIC03MzUz
LDcgKzczNTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAK
ICAgICAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEsIE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBD
b250cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICAg
ICAgYXV0byogbWVkaWFKU1dyYXBwZXJPYmplY3QgPSBtZWRpYUpTV3JhcHBlci50b09iamVjdCgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlcG9ydEV4Y2VwdGlvbkFuZFJl
dHVybkZhbHNlKCkpOwogICAgICAgICBhdXRvIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xzSG9zdCIpOwogCiAgICAgICAgIEFTU0VSVCghbWVk
aWFKU1dyYXBwZXJPYmplY3QtPmhhc1Byb3BlcnR5KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb250
cm9sc0hvc3QpKTsKQEAgLTc0MTUsNyArNzQxNiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
dXBkYXRlTWVkaWFDb250cm8KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBh
dXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6
OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CiAgICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09
IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC03NDU5LDcgKzc0NjAsNyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1l
ZGlhCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgYXV0byogZnVuY3Rpb24g
PSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwogICAgICAgICBhdXRvIGNhbGxEYXRhID0gSlNDOjpnZXRDYWxsRGF0YSh2
bSwgZnVuY3Rpb24pOwogICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7
CiAgICAgICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwo=
</data>
<flag name="commit-queue"
          id="447745"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427218</attachid>
            <date>2021-04-27 17:16:04 -0700</date>
            <delta_ts>2021-04-27 19:05:34 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225128.patch</filename>
            <type>text/plain</type>
            <size>75194</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY2ODEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA0LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRl
cm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3N1cHByZXNzLVRl
cm1pbmF0aW9uRXhjZXB0aW9uLWluLUpTRnVuY3Rpb24tcHJvdG90eXBlRm9yQ29uc3RydWN0aW9u
LmpzOiBBZGRlZC4KKwogMjAyMS0wNC0yNyAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vs
b3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBTa2lwIHRlc3RzIGZhaWxpbmcgb24gTG9v
bmdzb24gM0E0MDAwCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4
Y2VwdGlvbi1pbi1KU0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1K
U0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1KU0Z1bmN0aW9u
LXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
IEBACisvL0AgcnVuRGVmYXVsdCgiLS13YXRjaGRvZz0zMDAiLCAiLS13YXRjaGRvZy1leGNlcHRp
b24tb2siKQorCitjbGFzcyBVIHt9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgY2xhc3MgQyBleHRl
bmRzIFUgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgZ2MoKTsKKyAgICAgIHN1cGVyKCk7
CisgICAgfQorICB9CisgIG5ldyBDKCk7Cit9CisKK3doaWxlKDEpIGZvbygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBACisyMDIxLTA0
LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0
aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAg
ICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNvbWUgcHJlLWV4aXN0aW5nIGZ1bmN0aW9ucyBhc3NlcnROb0V4Y2VwdGlv
bigpIG9yIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpLgorICAgICAgICBUaGVzZSBhc3NlcnRp
b24gbWF5IG5vdCBiZSB2YWxpZCBhbnltb3JlIGluIGxpZ2h0IG9mIHRoZSBUZXJtaW5hdGlvbkV4
Y2VwdGlvbiwgYW5kCisgICAgICAgIHJlcXVpcmUgc29tZSBmaXggdXA6CisKKyAgICAgICAgMS4g
SWYgaXQgbWFrZXMgc2Vuc2UgdG8gY29udmVydCB0aGUgYXNzZXJ0aW9uIGludG8gYW4gZXhjZXB0
aW9uIGNoZWNrLCB0aGVuIGRvIHNvLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2Jq
ZWN0UHJvdG90eXBlVG9TdHJpbmcoKSwgc2xvd19wYXRoX2NyZWF0ZV90aGlzKCkuCisKKyAgICAg
ICAgMi4gSWYgdGhlIGFzc2VydGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24ganVzdCBi
ZWZvcmUgaXQgcmV0dXJucywgb3IgaWYgdGhlCisgICAgICAgICAgIHJlbWFpbmluZyBjb2RlIGlu
IHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgcGVuZGluZyBleGNlcHRp
b24sCisgICAgICAgICAgIHRoZW4gd2UgY2FuIHJlcGxhY2UgdGhlIGFzc2VydGlvbiBhcyBmb2xs
b3dzOgorCisgICAgICAgICAgICAgICBhc3NlcnROb0V4Y2VwdGlvbigpID0+IGFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKQorICAgICAgICAgICAgICAgcmVsZWFzZUFzc2VydE5v
RXhjZXB0aW9uKCkgPT4gcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24o
KQorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2JqZWN0UHJvdG90eXBlSGFzT3duUHJv
cGVydHkoKSwgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpLgorCisgICAg
ICAgIDMuIElmIHRoZSBhc3NlcnRpb24gaXMgaW4gYSBmdW5jdGlvbiB3aGVyZSBwZXJmIGlzIG5v
dCBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBhbmQgdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIGlzbid0
IGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgcmUtZW50ZXIgdGhlIFZNIG9y
IHBvdGVudGlhbGx5CisgICAgICAgICAgIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLCB0
aGVuIHdlIGNhbiB1c2UgYSBEZWZlclRlcm1pbmF0aW9uIHNjb3BlIHRvIGRlZmVyCisgICAgICAg
ICAgIHRlcm1pbmF0aW9uLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoKSwgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21D
YWxsZWUoKS4KKworICAgICAgICA0LiBJZiB0aGUgYXNzZXJ0aW9uIGlzIGluIGFuIGluaXRpYWxp
emVyIGZ1bmN0aW9uIGlzIG9ubHkgcnVuIG9uY2UgYW5kIGFkZGluZworICAgICAgICAgICBleGNl
cHRpb24gY2hlY2tzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUgbW9yZSB0aGFuIGl0J3Mgd29y
dGggKGFuIGVuZ2luZWVyaW5nCisgICAgICAgICAgIGp1ZGdlbWVudCksIHRoZW4gdXNlIGEgRGVm
ZXJUZXJtaW5hdGlvbiBzY29wZS4KKworICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2VlIFByb2dy
YW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcygpLCBzZXR1cEFkYXB0aXZl
V2F0Y2hwb2ludCgpLgorCisgICAgICAgICAgIFNvbWUgbGVhZiAob3IgbmVhci1sZWFmKSBmdW5j
dGlvbnMgdGhhdCBjdXJyZW50bHkgREVDTEFSRV9DQVRDSF9TQ09QRSgpIG1heSBhbHNvCisgICAg
ICAgICAgIGZhbGwgdW5kZXIgdGhpcyBjYXRlZ29yeS4KKworICAgICAgICAgICBGb3IgZXhhbXBs
ZSwgc2VlIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbigpLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmFkZEJpZ0ludENvbnN0YW50KToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6Om5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZGVidWcpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgor
ICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAg
KiBqc2MuY3BwOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXJBcmVuYS5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0lu
dERlY2ltYWxJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSCk6CisgICAgICAgICogcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVz
c2FnZVN0cmluZyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVT
dHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaDoKKyAgICAgICAgKEpT
Qzo6RXhjZXB0aW9uU2NvcGU6OmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhj
ZXB0VGVybWluYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyk6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YpOgorICAg
ICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnRyeUluc3RhbGxTcGVjaWVzV2F0Y2hw
b2ludCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChK
U0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OkpTVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvdHlwZUhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG90eXBlVG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrRnJhbWU6Om5hbWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxh
clZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKwogMjAy
MS0wNC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBF
eGNlcHRpb25FeHBlY3RhdGlvbiBpbnRvIGl0cyBvd24gLmggZmlsZS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwOCw3ICszMDA4LDcgQEAgc3RhdGljIHZvaWQgcnVu
V2l0aE9wdGlvbnMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXNz
ZWQgZmlsZSBpc24ndCBhbiBhYnNvbHV0ZSBwYXRoIGFwcGVuZCAiLi8iIHNvIHRoZSBtb2R1bGUg
bG9hZGVyIGRvZXNuJ3QgdGhpbmsgdGhpcyBpcyBhIGJhcmUtbmFtZSBzcGVjaWZpZXIuCiAgICAg
ICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdGFydHNXaXRoKCcvJykgPyBmaWxlTmFt
ZSA6IG1ha2VTdHJpbmcoIi4vIiwgZmlsZU5hbWUpOwogICAgICAgICAgICAgICAgIHByb21pc2Ug
PSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LCBmaWxlTmFtZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFm
ZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpIHsK
ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNvIHdl
IGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCkBAIC0zMDQyLDcgKzMwNDIsNyBAQCBzdGF0aWMgdm9p
ZCBydW5XaXRoT3B0aW9ucyhHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3QsIGZ1bGZpbGxIYW5kbGVyLCByZWplY3RI
YW5kbGVyKTsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRp
b24oKTsKICAgICAgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0zMDcwLDkgKzMwNzEsMTEgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdPYgogSlNWYWx1ZSBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQmlnSW50Q29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWlu
dDhfdCByYWRpeCwgYm9vbCBzaWduKQogewogICAgIHJldHVybiBtX2JpZ0ludE1hcC5lbnN1cmUo
QmlnSW50TWFwRW50cnkoaWRlbnRpZmllci5pbXBsKCksIHJhZGl4LCBzaWduKSwgWyZdIHsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0oKSk7CisgICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2
bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAg
ICAgYXV0byBwYXJzZUludFNpZ24gPSBzaWduID8gSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6U2ln
bmVkIDogSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQ7Ci0gICAgICAgIEpTVmFsdWUg
YmlnSW50SW5NYXAgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0oKSwgaWRlbnRpZmll
ci5zdHJpbmcoKSwgcmFkaXgsIEpTQmlnSW50OjpFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRp
b25zLCBwYXJzZUludFNpZ24pOworICAgICAgICBKU1ZhbHVlIGJpZ0ludEluTWFwID0gSlNCaWdJ
bnQ6OnBhcnNlSW50KG51bGxwdHIsIHZtLCBpZGVudGlmaWVyLnN0cmluZygpLCByYWRpeCwgSlNC
aWdJbnQ6OkVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50U2lnbik7CiAg
ICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGFkZENvbnN0YW50VmFs
dWUoYmlnSW50SW5NYXApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgor
I2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2NSw2
ICs4NjYsNyBAQCB2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVJbnRlcm5hbChDCiB2b2lk
IERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgVk0mIHZtID0gbV92bTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0p
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICht
X2lzUGF1c2VkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkg
PT0gSlNGdW5jdGlvblR5cGUgJiYganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmNh
blVzZUFsbG9jYXRpb25Qcm9maWxlKCkpIHsKKyAgICAgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZl
clNjb3BlKHZtKTsKICAgICAgICAgYXV0byByYXJlRGF0YSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y29uc3RydWN0b3IpLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGdsb2JhbE9i
amVjdCwgaW5saW5lQ2FwYWNpdHkpOwogICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNl
cHRpb24oKTsKICAgICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlKiBh
bGxvY2F0aW9uUHJvZmlsZSA9IHJhcmVEYXRhLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpOwpA
QCAtMjY1Niw2ICsyNjU3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1h
a2VSbwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdDIsIEpTU3RyaW5n
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGEsIEVuY29k
ZWRKU1ZhbHVlIGIpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBE
ZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjY3Myw2ICsyNjc1LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN0ckNhdDMsIEpTU3RyaW5nKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGEsIEVuY29kZWRKU1ZhbHVlIGIsIEVuY29kZWRKU1ZhbHVlIGMpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRl
ZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjg1MSw3ICsyODU0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkFycmF5SQogICAgICAgICBpZiAoc3RyaW5nID09IHNlYXJjaEVsZW1lbnQpCiAgICAgICAgICAg
ICByZXR1cm4gdG9VQ1BVU3RyaWN0SW50MzIoaW5kZXgpOwogICAgICAgICBpZiAoc3RyaW5nLT5l
cXVhbChnbG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25F
eGNlcHRUZXJtaW5hdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRvVUNQVVN0cmljdEludDMy
KGluZGV4KTsKICAgICAgICAgfQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3
IEBACiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJWTUVudHJ5
U2NvcGUuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlICJWTVRyYXBzSW5saW5l
cy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00OTYsNiArNDk3LDcgQEAgcHJpdmF0
ZToKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5n
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBk
ZWZlclNjb3BlKHZtKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KHZtKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpKSB7CkBAIC02NTgsNyArNjYwLDYgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29ucwogICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29w
ZS5leGNlcHRpb24oKSB8fCBwcm9ncmFtKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKQpAQCAtMTI3MSw2ICsxMjcyLDcgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYQogTkVWRVJfSU5MSU5FIHZv
aWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tUeXBl
IGRlYnVnSG9va1R5cGUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0o
KTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
ZWJ1Z2dlclRyaWdnZXJzQnJlYWtwb2ludEV4Y2VwdGlvbigpKSAmJiBkZWJ1Z0hvb2tUeXBlID09
IERpZFJlYWNoRGVidWdnZXJTdGF0ZW1lbnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00ODgsNiArNDg5LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFByaW50U3RyZWFtJiBv
dQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC04Myw2ICs4NCw3IEBAIGNvbnN0IElkZW50
aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUIKICAgICBpZiAocmFkaXggPT0gMTApCiAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyOwogCisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3Bl
KHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBiaWdJbnQgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0sIGlkZW50aWZpZXIu
c3RyaW5nKCksIHJhZGl4LCBKU0JpZ0ludDo6RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9u
cywgSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQpOwogICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OkFic3RyYWN0
TW9kdWxlUmVjbwogCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiB7CisgICAgRGVmZXJUZXJtaW5h
dGlvbiBkZWZlclNjb3BlKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIApAQCAtNTksNyArNjIsNiBAQCB2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIAotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShn
bG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKICAgICBzY29w
ZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBtX2RlcGVuZGVuY2llc01hcC5zZXQo
dm0sIHRoaXMsIG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMzUsNyArMjM1LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9j
cgogCiAgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IGJ5dGVjb2RlLm1faW5saW5lQ2Fw
YWNpdHk7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZSogYWxs
b2NhdGlvblByb2ZpbGUgPSBjb25zdHJ1Y3Rvci0+ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9u
UHJvZmlsZShnbG9iYWxPYmplY3QsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKTsKLSAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCh2bSwgc3RydWN0dXJlKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aGFzUG9seVByb3RvKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTU1LDEwICsx
NTUsMTAgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1lc3NhZ2VTdAogICAgIFBy
b3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwogICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVByb3BlcnROYW1lLCBtZXNzYWdlU2xvdCkg
JiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdlVmFsdWUgPSBtZXNzYWdl
U2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7Ci0gICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgaWYgKCFtZXNzYWdlVmFsdWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1lc3Nh
Z2VWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKIH0KIApAQCAtMTg2LDcgKzE4Niw3
IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWROYW1lU3RyaW4KICAgICAgICAgfQog
ICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIH0K
LSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgcmV0dXJuICJFcnJv
ciJfczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
U2NvcGUuaAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNl
cHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNl
QXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0
aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCkg
eyBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWV4Y2VwdGlvbigpIHx8IG1fdm0uaXNUZXJt
aW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24oKSksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25N
ZXNzYWdlKCkuZGF0YSgpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlQXNzZXJ0
Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpIHsgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKCFleGNlcHRpb24oKSB8fCBtX3ZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9u
KCkpLCAiJXMiLCB1bmV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSgpLmRhdGEoKSk7IH0KIAogI2lm
IEFTQU5fRU5BQkxFRCB8fCBFTkFCTEUoQ19MT09QKQogICAgIGNvbnN0IHZvaWQqIHN0YWNrUG9z
aXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV9sb2NhdGlvbi5zdGFja1Bvc2l0aW9uOyB9CkBAIC04
OCw2ICs5MCw4IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4
Y2VwdGlvbigpIHsgQVNTRVJUKCFleGNlcHRpb24oKSk7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCkgeyBSRUxFQVNFX0FTU0VSVCghZXhjZXB0aW9u
KCkpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVy
bWluYXRpb24oKSB7IEFTU0VSVCghZXhjZXB0aW9uKCkgfHwgbV92bS5pc1Rlcm1pbmF0aW9uRXhj
ZXB0aW9uKGV4Y2VwdGlvbigpKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKSB7IFJFTEVBU0VfQVNTRVJUKCFleGNl
cHRpb24oKSB8fCBtX3ZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKCkpKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb25TY29wZShWTSYgdm0pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0
eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlR5cGVF
cnJvci5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0xNTUsNyArMTU2LDggQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNv
bnN0cgogewogICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIGdldHRpbmcgdGhlIHByb3RvdHlwZSBp
cyBub3QgZWZmZWN0ZnVsLiBUaGF0J3Mgb25seQogICAgIC8vIHRydWUgd2hlbiB3ZSBjYW4gdXNl
IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9m
aWxlKCkpOyAKKyAgICBBU1NFUlQoY2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKSk7CisgICAgRGVm
ZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBnZXQoZ2xvYmFsT2JqZWN0
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgZ2VuZXJpY1R5cGUKICAgICBpZiAoIXRhcmdldE9wdGlvbikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigp
OwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc0RldGFjaGVkKCkpOwogCiAgICAg
aWYgKHN0ZDo6aXNuYW4oc3RhdGljX2Nhc3Q8ZG91YmxlPigqdGFyZ2V0T3B0aW9uKSkpIHsKQEAg
LTI0OSw3ICsyNDksNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBl
CiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21W
YWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRPcHRpb24p
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKLSAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0
VGVybWluYXRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNEZXRhY2hl
ZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAtMzc0LDcg
KzM3NCw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2VuZXJpY1R5cGUKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUg
Vmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3Rvcigp
OwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0
LT5pc0RldGFjaGVkKCkpOwogCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAg
LTU1Nyw4ICs1NTcsOSBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBl
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZh
dGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2Nv
cGUodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IC8vIDIyLjIuMy4yMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDks
NiArNTQ5LDcgQEAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNldHVwQWRhcAogewog
ICAgIC8vIFBlcmZvcm1pbmcgdGhlc2UgZ2V0cyBzaG91bGQgbm90IHRocm93LgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUo
dm0pOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXQpOwogICAgIGJvb2wgcmVzdWx0ID0gYmFzZS0+Z2V0T3duUHJvcGVydHlTbG90KGJhc2Us
IGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwpAQCAtNTk4LDYgKzU5OSw3IEBAIFNVUFBSRVNT
X0FTQU4gaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3QKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6
aW5pdChWTSYgdm0pCiB7CisgICAgQVNTRVJUKHZtLnRyYXBzKCkuaXNEZWZlcnJpbmdUZXJtaW5h
dGlvbigpKTsKICAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CiAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE1
MTcsNyArMTUxOSw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoK
ICAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoc3lt
Ym9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUoKSwgc2hvdWxkVGhyb3csIGlnbm9yZVJlYWRP
bmx5RXJyb3JzLCBwdXRSZXN1bHQpKQogICAgICAgICAgICAgICAgIEFTU0VSVChwdXRSZXN1bHQp
OwotICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
ZGVzY3JpcHRvci53cml0YWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci53cml0YWJsZSgpICYm
ICFlbnRyeS5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGVudHJ5LnNldFJlYWRPbmx5KCk7
CkBAIC0yMTg4LDYgKzIxOTAsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsU3Bl
Y2llc1dhCiAgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpZXNXYXRjaHBvaW50KTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBGaXJz
dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAlcHJvdG90eXBlJS5jb25zdHJ1Y3RvciBw
cm9wZXJ0eSBwb2ludHMgdG8gYSAlY29uc3RydWN0b3IlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIFN0cmluZyBwcmludGFibGVNb2R1bGVLZXko
SlNHbG9iYQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBp
ZiAoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBrZXkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOyAvLyBUaGlzIGlzIE9LIHNpbmNlIHRoaXMgZnVuY3Rpb24g
aXMganVzdCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsgLy8gVGhpcyBpcyBPSyBzaW5jZSB0aGlzIGZ1bmN0
aW9uIGlzIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgogICAgICAgICByZXR1cm4gcHJvcGVy
dHlOYW1lLmltcGwoKTsKICAgICB9CiAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5
SWRlbnRpZmllci5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY2
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmpl
Y3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZl
bnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlz
LCBnbG9iYWxPYmplY3QpOwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogfQogCiB2b2lkIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMwNSw3ICsyMzA1LDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1p
dGl2ZShKUwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIHNjb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJt
aW5hdGlvbigpOwogCiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJObyBkZWZhdWx0IHZhbHVlIl9zKTsKIH0KQEAgLTI1MzgsNyArMjUzOCw3IEBAIHZvaWQg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KIAogICAgIGdldE5vblJlaWZpZWRT
dGF0aWNQcm9wZXJ0eU5hbWVzKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICBzdHJ1Y3R1
cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiB9CiAKIGRvdWJsZSBKU09iamVjdDo6dG9O
dW1iZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzgsMTIgKzc4LDEyIEBAIEpTQXJyYXkqIEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yOjpjcmUKICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShnbG9iYWxPYmpl
Y3QsIHJhd09iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnJhdywgcmF3T2JqZWN0LCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShn
bG9iYWxPYmplY3QsIHRlbXBsYXRlT2JqZWN0KTsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKIAog
ICAgIHJldHVybiB0ZW1wbGF0ZU9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgb2JqZWN0UHJvdG90
eXBlSGFzT3duUHJvcGVydHkoSlNHbG8KICAgICBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Q
cm9wZXJ0eUNhY2hlID0gdm0uZW5zdXJlSGFzT3duUHJvcGVydHlDYWNoZSgpOwogICAgIGlmIChP
cHRpb25hbDxib29sPiByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eUNhY2hlLT5nZXQoc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIEFTU0VSVCgqcmVzdWx0ID09IHRoaXNPYmplY3Qt
Pmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
RXhjZXB0VGVybWluYXRpb24oKTsKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAgICAgfQogCkBA
IC0zNjQsNyArMzY0LDcgQEAgSlNTdHJpbmcqIG9iamVjdFByb3RvdHlwZVRvU3RyaW5nKEpTR2xv
YgogICAgIGlmICh0aGlzVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3MubnVsbE9iamVjdFN0cmluZygpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhp
c1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIElu
dGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7
CiAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVj
aWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY1LDYgKzY2LDcgQEAgc3RhdGljIEdsb2JhbFBy
b3BlcnR5TG9va1VwU3RhdHVzIGhhc1JlcwogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNj
b3BlKHZtKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChzY29wZSk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9PSBz
Y29wZS0+Z2xvYmFsT2JqZWN0KHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgog
I2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
IlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldh
c21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTcy
OSw2ICs3MzAsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtCiAg
ICAgaWYgKCFjYWxsZWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAorICAgIERlZmVyVGVy
bWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmds
b2JhbE9iamVjdCh2bSk7CiAgICAgYXV0byBnZXRQcm9wZXJ0eUlmUHVyZU9wZXJhdGlvbiA9IFsm
XSAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIC0+IFN0cmluZyB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1ZGUgIlZN
VHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdXZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtMzA5MSw2
ICszMDkyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2hhZG93Qwogewog
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChhdXRvKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDIxLTA0LTI3ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2Vy
dGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6
Ly83NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEEgZmV3IGNoYW5nZXMgcGx1cyByZWJhc2luZyBiaW5kaW5ncyB0ZXN0IHJlc3VsdHMuCisK
KyAgICAgICAgKiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06
CisgICAgICAgIChXZWJDb3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJl
cGxhY2VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRocm93Tm90U3VwcG9ydGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dGhyb3dJbnZhbGlkU3RhdGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd1NlY3Vy
aXR5RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dET01TeW50YXhFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJvd0RhdGFDbG9uZUVycm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFz
ay5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEJhY2tpbmdNYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRCYWNraW5nU2V0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU01pY3JvdGFza0NhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01p
Y3JvdGFza0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvanMvV3JpdGFibGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVTdHJlYW1JbnRlcm5hbDo6Y2FsbEZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlU3RyZWFtOjpsb2NrKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlUHV0KToK
KyAgICAgICAgKEdlbmVyYXRlUHV0QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURlZmluZU93
blByb3BlcnR5KToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmRlZmluZU93blBy
b3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllczo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmRlZmluZU93blByb3BlcnR5
KToKKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldFR5cGVGbGFncyk6
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2Vu
dGF0aW9uTW9kZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpn
ZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisKIDIwMjEtMDQtMjcgIEFsZXhleSBTaHZh
eWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSBkZWZh
dWx0VmFsdWUoKSBmcm9tIHRoZSBtZXRob2QgdGFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW0JKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Niwx
MiArMTc2LDE4IEBAIGF1dG8gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKIAorICAgIGF1dG8g
Y2xlYXJFeGNlcHRpb25BbmRSZXR1cm5GYWxzZSA9IFsmXSAoKSAtPiBJbnN0YWxsUmVzdWx0IHsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgZmFsc2Ug
fTsKKyAgICB9OworCiAgICAgLy8gTG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
IGZ1bmN0aW9uLgogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFs
T2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50
RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIHsgZmFsc2UgfTsK
ICAgICBKU0M6OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rp
b24udG9PYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBjbGVhckV4Y2VwdGlvbkFu
ZFJldHVybkZhbHNlKCkpOworCiAgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBy
ZXBsYWNlbWVudE9iamVjdCk7CiAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gSlNDOjpDYWxsRGF0
YTo6VHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIHsgZmFsc2UgfTsKQEAgLTE5NCwxMCArMjAw
LDcgQEAgYXV0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIGFyZ0xp
c3QuYXBwZW5kKHRvSlM8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBtX3ZhbHVlcykpOwogICAgIEFTU0VS
VCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dCA9IGNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRh
LCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKLSAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJu
IHsgZmFsc2UgfTsKLSAgICB9CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgY2xlYXJF
eGNlcHRpb25BbmRSZXR1cm5GYWxzZSgpKTsKIAogICAgIC8vIEdldCB0aGUgPHZpZGVvPiBjcmVh
dGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcmVw
bGFjZW1lbnQuZ2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInZpZGVvIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01FeGNlcHRpb25IYW5kbGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRp
b24oSlNHbG9iYWxPYmplYwogCiB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQogewotICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVy
bWluYXRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUo
ZXhjZXB0aW9uKSkpOwogfQogICAgIApAQCAtMjA5LDE5ICsyMDksMTkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gU3RyaW5nVHlwZXM+IHN0YXRpYwogCiB2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCiB7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9u
KCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIE5vdFN1cHBvcnRlZEVycm9yLCBt
ZXNzYWdlKSk7CiB9CiAKIHZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJ
SUxpdGVyYWwgbWVzc2FnZSkKIHsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAg
IHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKICAgICB0aHJvd0V4
Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
bGV4aWNhbEdsb2JhbE9iamVjdCwgSW52YWxpZFN0YXRlRXJyb3IsIG1lc3NhZ2UpKTsKIH0KIAog
dm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCBTZWN1cml0eUVycm9yLCBtZXNzYWdlKSk7CiB9CiAKQEAgLTI5OCwxMyArMjk4LDEzIEBAIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGkKIAogdm9pZCB0aHJvd0RPTVN5
bnRheEVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQogewotICAgIHNjb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJt
aW5hdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBTeW50YXhFcnJvciwg
bWVzc2FnZSkpOwogfQogCiB2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKLSAg
ICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
RXhjZXB0VGVybWluYXRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgRGF0
YUNsb25lRXJyb3IpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTSW50ZXJuYWxQcm9taXNlLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1ZNVHJhcHNJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvV2Vh
a0dDTWFwSW5saW5lcy5oPgogCkBAIC05Niw2ICs5Nyw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihtYWtlVGhpc1R5cGVFcnIKICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKICAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0gMik7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VO
YW1lID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZ2xvYmFsT2Jq
ZWN0KTsKQEAgLTExMCw2ICsxMTIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04obWFrZUdl
dHRlclR5cGVFCiAgICAgQVNTRVJUKGNhbGxGcmFtZSk7CiAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpID09IDIpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJmYWNlTmFtZSA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGdsb2JhbE9iamVjdCk7CkBAIC0x
MjgsNiArMTMxLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG1ha2VET01FeGNlcHRpbwog
ICAgIEFTU0VSVChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKIAogICAgIGF1dG8m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29w
ZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAg
YXV0byBjb2RlVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmlu
ZyhnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3RUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFjb250ZXh0KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBKU0V4ZWNTdGF0ZTo6cnVuVGFzayhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBtX3Rhc2spOwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAg
ICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01N
YXBMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TU1hcExpa2UuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTU1hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0
Y2hTY29wZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTWFwLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVk1UcmFwc0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zOSw2ICs0MCw3IEBAIHN0ZDo6cGFpcjxib29sLCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEoKICAgICBpZiAoIWJhY2tpbmdNYXAuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHsg
ZmFsc2UsICpKU0M6OmFzT2JqZWN0KGJhY2tpbmdNYXApIH07CiAKKyAgICBKU0M6OkRlZmVyVGVy
bWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCiAgICAgYmFja2luZ01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgdm0sIGxleGljYWxHbG9iYWxPYmplY3QubWFwU3RydWN0dXJlKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3BwCShyZXZp
c2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9DYXRjaFNjb3BlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZXQuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1NldElubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9WTVRyYXBzSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYg
KzQ1LDcgQEAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8SgogICAgIGF1
dG8gYmFja2luZ1NldCA9IHNldExpa2UuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5iYWNr
aW5nU2V0UHJpdmF0ZU5hbWUoKSk7CiAgICAgaWYgKGJhY2tpbmdTZXQuaXNVbmRlZmluZWQoKSkg
ewogICAgICAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICAgICAg
SlNDOjpEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICAgICAgYmFja2luZ1NldCA9IEpTQzo6
SlNTZXQ6OmNyZWF0ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0sIGxleGljYWxHbG9iYWxPYmpl
Y3Quc2V0U3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
aWNyb3Rhc2tDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNaWNyb3Rhc2tDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0p
OwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAg
IEpTRXhlY1N0YXRlOjpydW5UYXNrKG1fZ2xvYmFsT2JqZWN0LmdldCgpLCBtX3Rhc2spOwotICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ3NCw3ICszNDc0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGVTdHViKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgbV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1
cmUoKSwgbV93YXNtTW9kdWxlcy0+YXQoaW5kZXgpKTsKICAgICAgICAgICAgIC8vIFNpbmNlIHdl
IGFyZSBjbG9uaW5nIGEgSlNXZWJBc3NlbWJseU1vZHVsZSwgaXQncyBpbXBvc3NpYmxlIGZvciB0
aGF0CiAgICAgICAgICAgICAvLyBtb2R1bGUgdG8gbm90IGhhdmUgYmVlbiBhIHZhbGlkIG1vZHVs
ZS4gVGhlcmVmb3JlLCBjcmVhdGVTdHViIHNob3VsZAotICAgICAgICAgICAgLy8gbm90IHRyb3cu
CisgICAgICAgICAgICAvLyBub3QgdGhyb3cuCiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlQXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNo
T25PdmVyZmxvdyhyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM0OTYs
NyArMzQ5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBy
ZXN1bHQgPSBKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OnRyeUNyZWF0ZShtX2xleGljYWxHbG9i
YWxPYmplY3QsIHZtLCBtX2dsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSk7CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgY2xvbmluZyBhIEpTV2ViQXNzZW1ibHlN
ZW1vcnksIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhhdAogICAgICAgICAgICAgLy8gbW9kdWxlIHRv
IG5vdCBoYXZlIGJlZW4gYSB2YWxpZCBtb2R1bGUuIFRoZXJlZm9yZSwgY3JlYXRlU3R1YiBzaG91
bGQKLSAgICAgICAgICAgIC8vIG5vdCB0cm93LgorICAgICAgICAgICAgLy8gbm90IHRocm93Lgog
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAg
ICBSZWY8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShoYW5kbGUu
cmVsZWFzZU5vbk51bGwoKSwKICAgICAgICAgICAgICAgICBbJnZtXSAoV2FzbTo6TWVtb3J5OjpO
b3RpZnlQcmVzc3VyZSkgeyB2bS5oZWFwLmNvbGxlY3RBc3luYyhDb2xsZWN0aW9uU2NvcGU6OkZ1
bGwpOyB9LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV3JpdGFibGVTdHJlYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dyaXRhYmxlU3Ry
ZWFtLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V3JpdGFibGVTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uKAogICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6
OmdldENhbGxEYXRhKHZtLCBqc0Z1bmN0aW9uKTsKICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAh
PSBKU0M6OkNhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICBhdXRvIHJlc3VsdCA9IGNhbGwoJmxl
eGljYWxHbG9iYWxPYmplY3QsIGpzRnVuY3Rpb24sIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3Vt
ZW50cyk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIH0K
QEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdyaXRhYmxlU3RyZWFtOjpsb2NrKCkKICAgICBBU1NF
UlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIEpTQzo6Y29uc3RydWN0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3RvciwgY29uc3RydWN0RGF0YSwgYXJncyk7Ci0gICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2Vw
dFRlcm1pbmF0aW9uKCk7CiB9CiAKIGJvb2wgV3JpdGFibGVTdHJlYW06OmlzTG9ja2VkKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTIwOCw3ICsx
MjA4LDcgQEAgc3ViIEdlbmVyYXRlUHV0CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmpl
Y3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpO1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpOwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoIWZvdW5kKSB7XG4iKTsKICAg
ICAgICAgICAgICRhZGRpdGlvbmFsSW5kZW50IC49ICIgICAgIjsKICAgICAgICAgfQpAQCAtMTI4
Niw3ICsxMjg2LDcgQEAgc3ViIEdlbmVyYXRlUHV0QnlJbmRleAogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJv
dG90eXBlRGlyZWN0KHZtKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHNsb3QuZGlz
YWxsb3dWTUVudHJ5LnJlc2V0KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKKyAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICgh
Zm91bmQpIHtcbiIpOwogICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwog
ICAgICAgICB9CkBAIC0xNDI0LDcgKzE0MjQsNyBAQCBzdWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9w
ZXJ0eQogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4g
IiAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50
LiAiICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAiICAgICAg
ICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICB0aHJvd1Njb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFk
ZGl0aW9uYWxJbmRlbnQuICIgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFs
SW5kZW50LiAiICAgICAgICBpZiAoIWZvdW5kKSB7XG4iKTsKICAgICAgICAgICAgICRhZGRpdGlv
bmFsSW5kZW50IC49ICIgICAgIjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDEsNyArMjQxLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBm
b3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFBy
b3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpA
QCAtMjc0LDcgKzI3NCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGkKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91bmQpIHsKICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMzA2
LDcgKzMwNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkKICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9Owog
ICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBz
bG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVz
Y3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQx
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2Fs
bG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAg
ICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjc0LDcgKzI3NCw3
IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9v
bCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdl
dFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIGlmICghZm91bmQpIHsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZv
dW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1F
bnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBp
ZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFE
ZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNP
YmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAg
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAg
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW4KICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5
LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91bmQpIHsKICAg
ICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0
aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAg
ICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcjo6cHV0KAogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmpl
Y3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
ICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHBy
b3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnB1dEIKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdl
dFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJl
c2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91bmQpIHsKICAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHRydWUpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmRlZmkKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0aHJv
d1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBp
ZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgYm9vbCBKU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNl
dCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5k
KSB7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3Rv
dHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxs
b3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91
bmQpIHsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlz
T2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwot
ICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAg
ICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdQogICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgp
ICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5y
ZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZv
dW5kKSB7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHUKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9
IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHBy
b3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xv
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlz
YWxsb3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICgh
Zm91bmQpIHsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjcwLDcgKzI3MCw3IEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGUKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0
aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAm
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgp
OwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjc2Njc2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2Fs
bG93Vk1FbnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAg
ICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjcxLDcgKzI3MSw3
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9v
bCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdl
dFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgIHNsb3QuZGlzYWxsb3dWTUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIGlmICghZm91bmQpIHsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5LCAmbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZv
dW5kID0gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1F
bnRyeS5yZXNldCgpOwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBp
ZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFE
ZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9
IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgp
OwotICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjg1LDcgKzI4NSw3IEBAIGJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNP
YmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dW
TUVudHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91bmQp
IHsKICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKSB9OwogICAgICAgICBib29sIGZvdW5kID0gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAg
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAg
ICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cy5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2Jq
ZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwot
ICAgICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAg
ICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmpl
Y3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IHByb3RvdHlwZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIHNsb3QuZGlzYWxsb3dWTUVu
dHJ5LnJlc2V0KCk7Ci0gICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghZm91bmQpIHsK
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwpAQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBib29sIGlzTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0eU4KICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNl
dCgpOwotICAgICAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDQsOCArMTA0LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRU
eXBlRmxhZ3MoSlNHbAogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgSlNPYmplY3Qq
IG9iamVjdCA9IHR5cGVWYWx1ZS50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKQor
ICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhaXNKU0FycmF5KG9iamVjdCkpCiAgICAgICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJy
YXk7CiAKICAgICBjb25zdCBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxjb25zdCBKU0FycmF5Kj4o
b2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMzMSwxMiArNzMzMSw2IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gKICAgICAgICAgYXJnTGlzdC5hcHBlbmQobWVkaWFD
b250cm9sc0hvc3RKU1dyYXBwZXIpOwogICAgICAgICBBU1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZs
b3dlZCgpKTsKIAotICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmpl
Y3QoJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwotICAgICAgICBhdXRvIGNhbGxEYXRhID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rp
b24pOwotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBKU0M6OkNhbGxEYXRhOjpUeXBlOjpO
b25lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgIGF1dG8gcmVwb3J0RXhj
ZXB0aW9uQW5kUmV0dXJuRmFsc2UgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgICAgICBhdXRv
KiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CkBAIC03MzQ0LDYgKzczMzgsMTMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
OwogCisgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJl
cG9ydEV4Y2VwdGlvbkFuZFJldHVybkZhbHNlKCkpOworICAgICAgICBhdXRvIGNhbGxEYXRhID0g
SlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24pOworICAgICAgICBpZiAoY2FsbERhdGEudHlw
ZSA9PSBKU0M6OkNhbGxEYXRhOjpUeXBlOjpOb25lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisKICAgICAgICAgYXV0byBjb250cm9sbGVyVmFsdWUgPSBKU0M6OmNhbGwoJmxleGljYWxH
bG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsRGF0YSwgJmdsb2JhbE9iamVjdCwgYXJnTGlzdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlcG9ydEV4Y2VwdGlvbkFuZFJl
dHVybkZhbHNlKCkpOwogCkBAIC03MzUzLDcgKzczNTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAKICAgICAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEsIE1l
ZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91dCB0
aGVpciByZWxhdGlvbnNoaXAKICAgICAgICAgYXV0byogbWVkaWFKU1dyYXBwZXJPYmplY3QgPSBt
ZWRpYUpTV3JhcHBlci50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHJlcG9ydEV4Y2VwdGlvbkFuZFJldHVybkZhbHNlKCkpOwogICAgICAgICBhdXRvIGNvbnRy
b2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNvbnRyb2xzSG9zdCIp
OwogCiAgICAgICAgIEFTU0VSVCghbWVkaWFKU1dyYXBwZXJPYmplY3QtPmhhc1Byb3BlcnR5KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjb250cm9sc0hvc3QpKTsKQEAgLTc0MTUsNyArNzQxNiw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm8KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9P
YmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAg
ICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CiAgICAg
ICAgIGlmIChjYWxsRGF0YS50eXBlID09IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NDU5LDcgKzc0NjAsNyBAQCBTdHJpbmcgSFRNTE1l
ZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgYXV0byogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBhdXRvIGNhbGxE
YXRhID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24pOwogICAgICAgICBKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CiAgICAgICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVy
Zmxvd2VkKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427226</attachid>
            <date>2021-04-27 19:05:34 -0700</date>
            <delta_ts>2021-04-27 19:14:02 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-225128.patch</filename>
            <type>text/plain</type>
            <size>74104</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzY2ODEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIxLTA0LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRl
cm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3N1cHByZXNzLVRl
cm1pbmF0aW9uRXhjZXB0aW9uLWluLUpTRnVuY3Rpb24tcHJvdG90eXBlRm9yQ29uc3RydWN0aW9u
LmpzOiBBZGRlZC4KKwogMjAyMS0wNC0yNyAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vs
b3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBTa2lwIHRlc3RzIGZhaWxpbmcgb24gTG9v
bmdzb24gM0E0MDAwCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4
Y2VwdGlvbi1pbi1KU0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1K
U0Z1bmN0aW9uLXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9zdXBwcmVzcy1UZXJtaW5hdGlvbkV4Y2VwdGlvbi1pbi1KU0Z1bmN0aW9u
LXByb3RvdHlwZUZvckNvbnN0cnVjdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
IEBACisvL0AgcnVuRGVmYXVsdCgiLS13YXRjaGRvZz0zMDAiLCAiLS13YXRjaGRvZy1leGNlcHRp
b24tb2siKQorCitjbGFzcyBVIHt9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgY2xhc3MgQyBleHRl
bmRzIFUgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgZ2MoKTsKKyAgICAgIHN1cGVyKCk7
CisgICAgfQorICB9CisgIG5ldyBDKCk7Cit9CisKK3doaWxlKDEpIGZvbygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBACisyMDIxLTA0
LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0
aW9uIGFzc2VydGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAg
ICAgIHJkYXI6Ly83NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNvbWUgcHJlLWV4aXN0aW5nIGZ1bmN0aW9ucyBhc3NlcnROb0V4Y2VwdGlv
bigpIG9yIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpLgorICAgICAgICBUaGVzZSBhc3NlcnRp
b24gbWF5IG5vdCBiZSB2YWxpZCBhbnltb3JlIGluIGxpZ2h0IG9mIHRoZSBUZXJtaW5hdGlvbkV4
Y2VwdGlvbiwgYW5kCisgICAgICAgIHJlcXVpcmUgc29tZSBmaXggdXA6CisKKyAgICAgICAgMS4g
SWYgaXQgbWFrZXMgc2Vuc2UgdG8gY29udmVydCB0aGUgYXNzZXJ0aW9uIGludG8gYW4gZXhjZXB0
aW9uIGNoZWNrLCB0aGVuIGRvIHNvLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2Jq
ZWN0UHJvdG90eXBlVG9TdHJpbmcoKSwgc2xvd19wYXRoX2NyZWF0ZV90aGlzKCkuCisKKyAgICAg
ICAgMi4gSWYgdGhlIGFzc2VydGlvbiBpcyBhdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24ganVzdCBi
ZWZvcmUgaXQgcmV0dXJucywgb3IgaWYgdGhlCisgICAgICAgICAgIHJlbWFpbmluZyBjb2RlIGlu
IHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgcGVuZGluZyBleGNlcHRp
b24sCisgICAgICAgICAgIHRoZW4gd2UgY2FuIHJlcGxhY2UgdGhlIGFzc2VydGlvbiBhcyBmb2xs
b3dzOgorCisgICAgICAgICAgICAgICBhc3NlcnROb0V4Y2VwdGlvbigpID0+IGFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKQorICAgICAgICAgICAgICAgcmVsZWFzZUFzc2VydE5v
RXhjZXB0aW9uKCkgPT4gcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24o
KQorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgb2JqZWN0UHJvdG90eXBlSGFzT3duUHJv
cGVydHkoKSwgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpLgorCisgICAg
ICAgIDMuIElmIHRoZSBhc3NlcnRpb24gaXMgaW4gYSBmdW5jdGlvbiB3aGVyZSBwZXJmIGlzIG5v
dCBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBhbmQgdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIGlzbid0
IGNhbGxpbmcgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgcmUtZW50ZXIgdGhlIFZNIG9y
IHBvdGVudGlhbGx5CisgICAgICAgICAgIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLCB0
aGVuIHdlIGNhbiB1c2UgYSBEZWZlclRlcm1pbmF0aW9uIHNjb3BlIHRvIGRlZmVyCisgICAgICAg
ICAgIHRlcm1pbmF0aW9uLgorCisgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWUgRGVidWdnZXI6
OnBhdXNlSWZOZWVkZWQoKSwgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21D
YWxsZWUoKS4KKworICAgICAgICA0LiBJZiB0aGUgYXNzZXJ0aW9uIGlzIGluIGFuIGluaXRpYWxp
emVyIGZ1bmN0aW9uIGlzIG9ubHkgcnVuIG9uY2UgYW5kIGFkZGluZworICAgICAgICAgICBleGNl
cHRpb24gY2hlY2tzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUgbW9yZSB0aGFuIGl0J3Mgd29y
dGggKGFuIGVuZ2luZWVyaW5nCisgICAgICAgICAgIGp1ZGdlbWVudCksIHRoZW4gdXNlIGEgRGVm
ZXJUZXJtaW5hdGlvbiBzY29wZS4KKworICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2VlIFByb2dy
YW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcygpLCBzZXR1cEFkYXB0aXZl
V2F0Y2hwb2ludCgpLgorCisgICAgICAgICAgIFNvbWUgbGVhZiAob3IgbmVhci1sZWFmKSBmdW5j
dGlvbnMgdGhhdCBjdXJyZW50bHkgREVDTEFSRV9DQVRDSF9TQ09QRSgpIG1heSBhbHNvCisgICAg
ICAgICAgIGZhbGwgdW5kZXIgdGhpcyBjYXRlZ29yeS4KKworICAgICAgICAgICBGb3IgZXhhbXBs
ZSwgc2VlIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbigpLgorCisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmFkZEJpZ0ludENvbnN0YW50KToKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6Om5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZGVidWcpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgor
ICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAg
KiBqc2MuY3BwOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMpOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXJBcmVuYS5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0lu
dERlY2ltYWxJZGVudGlmaWVyKToKKyAgICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVj
b3JkLmNwcDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSCk6CisgICAgICAgICogcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVz
c2FnZVN0cmluZyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVT
dHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaDoKKyAgICAgICAgKEpT
Qzo6RXhjZXB0aW9uU2NvcGU6OmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhj
ZXB0VGVybWluYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyk6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YpOgorICAg
ICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpzZXR1cEFkYXB0aXZlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnRyeUluc3RhbGxTcGVjaWVzV2F0Y2hw
b2ludCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChK
U0M6OnByaW50YWJsZU1vZHVsZUtleSk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVz
cGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OkpTVGVt
cGxhdGVPYmplY3REZXNjcmlwdG9yOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvdHlwZUhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG90eXBlVG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9n
cmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmls
ZXI6OlN0YWNrRnJhbWU6Om5hbWVGcm9tQ2FsbGVlKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxh
clZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKwogMjAy
MS0wNC0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBF
eGNlcHRpb25FeHBlY3RhdGlvbiBpbnRvIGl0cyBvd24gLmggZmlsZS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwOCw3ICszMDA4LDcgQEAgc3RhdGljIHZvaWQgcnVu
V2l0aE9wdGlvbnMoR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXNz
ZWQgZmlsZSBpc24ndCBhbiBhYnNvbHV0ZSBwYXRoIGFwcGVuZCAiLi8iIHNvIHRoZSBtb2R1bGUg
bG9hZGVyIGRvZXNuJ3QgdGhpbmsgdGhpcyBpcyBhIGJhcmUtbmFtZSBzcGVjaWZpZXIuCiAgICAg
ICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdGFydHNXaXRoKCcvJykgPyBmaWxlTmFt
ZSA6IG1ha2VTdHJpbmcoIi4vIiwgZmlsZU5hbWUpOwogICAgICAgICAgICAgICAgIHByb21pc2Ug
PSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LCBmaWxlTmFtZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFm
ZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpIHsK
ICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNvIHdl
IGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCkBAIC0zMDQyLDcgKzMwNDIsNyBAQCBzdGF0aWMgdm9p
ZCBydW5XaXRoT3B0aW9ucyhHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3QsIGZ1bGZpbGxIYW5kbGVyLCByZWplY3RI
YW5kbGVyKTsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRp
b24oKTsKICAgICAgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0zMDcwLDkgKzMwNzEsMTEgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdPYgogSlNWYWx1ZSBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQmlnSW50Q29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWlu
dDhfdCByYWRpeCwgYm9vbCBzaWduKQogewogICAgIHJldHVybiBtX2JpZ0ludE1hcC5lbnN1cmUo
QmlnSW50TWFwRW50cnkoaWRlbnRpZmllci5pbXBsKCksIHJhZGl4LCBzaWduKSwgWyZdIHsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0oKSk7CisgICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2
bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAg
ICAgYXV0byBwYXJzZUludFNpZ24gPSBzaWduID8gSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6U2ln
bmVkIDogSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQ7Ci0gICAgICAgIEpTVmFsdWUg
YmlnSW50SW5NYXAgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0oKSwgaWRlbnRpZmll
ci5zdHJpbmcoKSwgcmFkaXgsIEpTQmlnSW50OjpFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRp
b25zLCBwYXJzZUludFNpZ24pOworICAgICAgICBKU1ZhbHVlIGJpZ0ludEluTWFwID0gSlNCaWdJ
bnQ6OnBhcnNlSW50KG51bGxwdHIsIHZtLCBpZGVudGlmaWVyLnN0cmluZygpLCByYWRpeCwgSlNC
aWdJbnQ6OkVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIHBhcnNlSW50U2lnbik7CiAg
ICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIGFkZENvbnN0YW50VmFs
dWUoYmlnSW50SW5NYXApOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNRW50cnlTY29wZS5oIgor
I2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTg2NSw2
ICs4NjYsNyBAQCB2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVJbnRlcm5hbChDCiB2b2lk
IERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7
CiAgICAgVk0mIHZtID0gbV92bTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0p
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICht
X2lzUGF1c2VkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNyZWF0ZQogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkg
PT0gSlNGdW5jdGlvblR5cGUgJiYganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmNh
blVzZUFsbG9jYXRpb25Qcm9maWxlKCkpIHsKKyAgICAgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZl
clNjb3BlKHZtKTsKICAgICAgICAgYXV0byByYXJlRGF0YSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y29uc3RydWN0b3IpLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGdsb2JhbE9i
amVjdCwgaW5saW5lQ2FwYWNpdHkpOwogICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNl
cHRpb24oKTsKICAgICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlKiBh
bGxvY2F0aW9uUHJvZmlsZSA9IHJhcmVEYXRhLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpOwpA
QCAtMjY1Niw2ICsyNjU3LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1h
a2VSbwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdDIsIEpTU3RyaW5n
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGEsIEVuY29k
ZWRKU1ZhbHVlIGIpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBE
ZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMjY3Myw2ICsyNjc1LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN0ckNhdAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN0ckNhdDMsIEpTU3RyaW5nKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGEsIEVuY29kZWRKU1ZhbHVlIGIsIEVuY29kZWRKU1ZhbHVlIGMpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRl
ZmVyU2NvcGUodm0pOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjg1MSw3ICsyODU0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkFycmF5SQogICAgICAgICBpZiAoc3RyaW5nID09IHNlYXJjaEVsZW1lbnQpCiAgICAgICAgICAg
ICByZXR1cm4gdG9VQ1BVU3RyaWN0SW50MzIoaW5kZXgpOwogICAgICAgICBpZiAoc3RyaW5nLT5l
cXVhbChnbG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25F
eGNlcHRUZXJtaW5hdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRvVUNQVVN0cmljdEludDMy
KGluZGV4KTsKICAgICAgICAgfQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3
IEBACiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJWTUVudHJ5
U2NvcGUuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRlICJWTVRyYXBzSW5saW5l
cy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00OTYsNiArNDk3LDcgQEAgcHJpdmF0
ZToKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5n
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBk
ZWZlclNjb3BlKHZtKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KHZtKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpKSB7CkBAIC02NTgsNyArNjYwLDYgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29ucwogICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29w
ZS5leGNlcHRpb24oKSB8fCBwcm9ncmFtKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAKLSAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKQpAQCAtMTI3MSw2ICsxMjcyLDcgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZU1vZHVsZVByb2dyYQogTkVWRVJfSU5MSU5FIHZv
aWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tUeXBl
IGRlYnVnSG9va1R5cGUpCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0o
KTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
ZWJ1Z2dlclRyaWdnZXJzQnJlYWtwb2ludEV4Y2VwdGlvbigpKSAmJiBkZWJ1Z0hvb2tUeXBlID09
IERpZFJlYWNoRGVidWdnZXJTdGF0ZW1lbnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW5JbmxpbmVzLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00ODgsNiArNDg5LDcgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFByaW50U3RyZWFtJiBv
dQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC04Myw2ICs4NCw3IEBAIGNvbnN0IElkZW50
aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUIKICAgICBpZiAocmFkaXggPT0gMTApCiAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyOwogCisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3Bl
KHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBiaWdJbnQgPSBKU0JpZ0ludDo6cGFyc2VJbnQobnVsbHB0ciwgdm0sIGlkZW50aWZpZXIu
c3RyaW5nKCksIHJhZGl4LCBKU0JpZ0ludDo6RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9u
cywgSlNCaWdJbnQ6OlBhcnNlSW50U2lnbjo6VW5zaWduZWQpOwogICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFj
dE1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OkFic3RyYWN0
TW9kdWxlUmVjbwogCiB2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiB7CisgICAgRGVmZXJUZXJtaW5h
dGlvbiBkZWZlclNjb3BlKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKIApAQCAtNTksNyArNjIsNiBAQCB2b2lkIEFic3RyYWN0TW9kdWxl
UmVjb3JkOjpmaW5pc2hDcmVhdGlvCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgdmFsdWVzLnNpemUoKTsgKytpbmRleCkKICAgICAgICAgQmFzZTo6aW50ZXJuYWxGaWVsZChp
bmRleCkuc2V0KHZtLCB0aGlzLCB2YWx1ZXNbaW5kZXhdKTsKIAotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShn
bG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKICAgICBzY29w
ZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBtX2RlcGVuZGVuY2llc01hcC5zZXQo
dm0sIHRoaXMsIG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMzUsNyArMjM1LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9j
cgogCiAgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IGJ5dGVjb2RlLm1faW5saW5lQ2Fw
YWNpdHk7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZSogYWxs
b2NhdGlvblByb2ZpbGUgPSBjb25zdHJ1Y3Rvci0+ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9u
UHJvZmlsZShnbG9iYWxPYmplY3QsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKTsKLSAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCh2bSwgc3RydWN0dXJlKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aGFzUG9seVByb3RvKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTU1LDEwICsx
NTUsMTAgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1lc3NhZ2VTdAogICAgIFBy
b3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwogICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVByb3BlcnROYW1lLCBtZXNzYWdlU2xvdCkg
JiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdlVmFsdWUgPSBtZXNzYWdl
U2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7Ci0gICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogCiAgICAgaWYgKCFtZXNzYWdlVmFsdWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1lc3Nh
Z2VWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKIH0KIApAQCAtMTg2LDcgKzE4Niw3
IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWROYW1lU3RyaW4KICAgICAgICAgfQog
ICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIH0K
LSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgcmV0dXJuICJFcnJv
ciJfczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
U2NvcGUuaAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBwdWJs
aWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNl
cHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNl
QXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0
aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCkg
eyBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIWV4Y2VwdGlvbigpIHx8IG1fdm0uaXNUZXJt
aW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24oKSksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25N
ZXNzYWdlKCkuZGF0YSgpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlQXNzZXJ0
Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpIHsgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNT
QUdFKCFleGNlcHRpb24oKSB8fCBtX3ZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9u
KCkpLCAiJXMiLCB1bmV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSgpLmRhdGEoKSk7IH0KIAogI2lm
IEFTQU5fRU5BQkxFRCB8fCBFTkFCTEUoQ19MT09QKQogICAgIGNvbnN0IHZvaWQqIHN0YWNrUG9z
aXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV9sb2NhdGlvbi5zdGFja1Bvc2l0aW9uOyB9CkBAIC04
OCw2ICs5MCw4IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4
Y2VwdGlvbigpIHsgQVNTRVJUKCFleGNlcHRpb24oKSk7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCkgeyBSRUxFQVNFX0FTU0VSVCghZXhjZXB0aW9u
KCkpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVy
bWluYXRpb24oKSB7IEFTU0VSVCghZXhjZXB0aW9uKCkgfHwgbV92bS5pc1Rlcm1pbmF0aW9uRXhj
ZXB0aW9uKGV4Y2VwdGlvbigpKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKSB7IFJFTEVBU0VfQVNTRVJUKCFleGNl
cHRpb24oKSB8fCBtX3ZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKCkpKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb25TY29wZShWTSYgdm0pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQcm9wZXJ0
eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgogI2luY2x1ZGUgIlR5cGVF
cnJvci5oIgorI2luY2x1ZGUgIlZNVHJhcHNJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0xNTUsNyArMTU2LDggQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OnByb3RvdHlwZUZvckNv
bnN0cgogewogICAgIC8vIFRoaXMgY29kZSBhc3N1bWVzIGdldHRpbmcgdGhlIHByb3RvdHlwZSBp
cyBub3QgZWZmZWN0ZnVsLiBUaGF0J3Mgb25seQogICAgIC8vIHRydWUgd2hlbiB3ZSBjYW4gdXNl
IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUuCi0gICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9m
aWxlKCkpOyAKKyAgICBBU1NFUlQoY2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKSk7CisgICAgRGVm
ZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBnZXQoZ2xvYmFsT2JqZWN0
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnRO
b0V4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjA1LDcgKzIwNSw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgZ2VuZXJpY1R5cGUKICAgICBpZiAoIXRhcmdldE9wdGlvbikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigp
OwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc0RldGFjaGVkKCkpOwogCiAgICAg
aWYgKHN0ZDo6aXNuYW4oc3RhdGljX2Nhc3Q8ZG91YmxlPigqdGFyZ2V0T3B0aW9uKSkpIHsKQEAg
LTI0OSw3ICsyNDksNyBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBl
CiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21W
YWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRPcHRpb24p
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKLSAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0
VGVybWluYXRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNEZXRhY2hl
ZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAtMzc0LDcg
KzM3NCw3IEBAIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2VuZXJpY1R5cGUKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUg
Vmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3Rvcigp
OwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0
LT5pc0RldGFjaGVkKCkpOwogCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAg
LTU1Nyw4ICs1NTcsOSBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBl
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUFMV0FZU19JTkxJTkUgRW5jb2Rl
ZEpTVmFsdWUgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZh
dGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2Nv
cGUodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IC8vIDIyLjIuMy4yMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDks
NiArNTQ5LDcgQEAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHNldHVwQWRhcAogewog
ICAgIC8vIFBlcmZvcm1pbmcgdGhlc2UgZ2V0cyBzaG91bGQgbm90IHRocm93LgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUo
dm0pOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXQpOwogICAgIGJvb2wgcmVzdWx0ID0gYmFzZS0+Z2V0T3duUHJvcGVydHlTbG90KGJhc2Us
IGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwpAQCAtNTk4LDYgKzU5OSw3IEBAIFNVUFBSRVNT
X0FTQU4gaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3QKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6
aW5pdChWTSYgdm0pCiB7CisgICAgQVNTRVJUKHZtLnRyYXBzKCkuaXNEZWZlcnJpbmdUZXJtaW5h
dGlvbigpKTsKICAgICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CiAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE1
MTcsNyArMTUxOSw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoK
ICAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoc3lt
Ym9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUoKSwgc2hvdWxkVGhyb3csIGlnbm9yZVJlYWRP
bmx5RXJyb3JzLCBwdXRSZXN1bHQpKQogICAgICAgICAgICAgICAgIEFTU0VSVChwdXRSZXN1bHQp
OwotICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
ZGVzY3JpcHRvci53cml0YWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci53cml0YWJsZSgpICYm
ICFlbnRyeS5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGVudHJ5LnNldFJlYWRPbmx5KCk7
CkBAIC0yMTg4LDYgKzIxOTAsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsU3Bl
Y2llc1dhCiAgICAgUkVMRUFTRV9BU1NFUlQoIXNwZWNpZXNXYXRjaHBvaW50KTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBGaXJz
dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAlcHJvdG90eXBlJS5jb25zdHJ1Y3RvciBw
cm9wZXJ0eSBwb2ludHMgdG8gYSAlY29uc3RydWN0b3IlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xMTUsNyArMTE1LDcgQEAgc3RhdGljIFN0cmluZyBwcmludGFibGVNb2R1bGVLZXko
SlNHbG9iYQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBp
ZiAoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBrZXkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwotICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOyAvLyBUaGlzIGlzIE9LIHNpbmNlIHRoaXMgZnVuY3Rpb24g
aXMganVzdCBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsgLy8gVGhpcyBpcyBPSyBzaW5jZSB0aGlzIGZ1bmN0
aW9uIGlzIGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgogICAgICAgICByZXR1cm4gcHJvcGVy
dHlOYW1lLmltcGwoKTsKICAgICB9CiAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5
SWRlbnRpZmllci5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyNzY2
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmpl
Y3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZl
bnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlz
LCBnbG9iYWxPYmplY3QpOwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogfQogCiB2b2lkIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMwNSw3ICsyMzA1LDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1p
dGl2ZShKUwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIHNjb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJt
aW5hdGlvbigpOwogCiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJObyBkZWZhdWx0IHZhbHVlIl9zKTsKIH0KQEAgLTI1MzgsNyArMjUzOCw3IEBAIHZvaWQg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KIAogICAgIGdldE5vblJlaWZpZWRT
dGF0aWNQcm9wZXJ0eU5hbWVzKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICBzdHJ1Y3R1
cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiB9CiAKIGRvdWJsZSBKU09iamVjdDo6dG9O
dW1iZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzgsMTIgKzc4LDEyIEBAIEpTQXJyYXkqIEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yOjpjcmUKICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShnbG9iYWxPYmpl
Y3QsIHJhd09iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnJhdywgcmF3T2JqZWN0LCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShn
bG9iYWxPYmplY3QsIHRlbXBsYXRlT2JqZWN0KTsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKIAog
ICAgIHJldHVybiB0ZW1wbGF0ZU9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiVk1UcmFwc0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjc2Njc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgb2JqZWN0UHJvdG90
eXBlSGFzT3duUHJvcGVydHkoSlNHbG8KICAgICBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Q
cm9wZXJ0eUNhY2hlID0gdm0uZW5zdXJlSGFzT3duUHJvcGVydHlDYWNoZSgpOwogICAgIGlmIChP
cHRpb25hbDxib29sPiByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eUNhY2hlLT5nZXQoc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIEFTU0VSVCgqcmVzdWx0ID09IHRoaXNPYmplY3Qt
Pmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
RXhjZXB0VGVybWluYXRpb24oKTsKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAgICAgfQogCkBA
IC0zNjQsNyArMzY0LDcgQEAgSlNTdHJpbmcqIG9iamVjdFByb3RvdHlwZVRvU3RyaW5nKEpTR2xv
YgogICAgIGlmICh0aGlzVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3MubnVsbE9iamVjdFN0cmluZygpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhp
c1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIElu
dGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSk7
CiAgICAgYXV0byByZXN1bHQgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5jYWNoZWRTcGVj
aWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lhbFByb3BlcnR5S2V5OjpUb1N0cmluZ1RhZyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIgogI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiVk1UcmFwc0lubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY1LDYgKzY2LDcgQEAgc3RhdGljIEdsb2JhbFBy
b3BlcnR5TG9va1VwU3RhdHVzIGhhc1JlcwogCiBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNj
b3BlKHZtKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChzY29wZSk7CiAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9PSBz
Y29wZS0+Z2xvYmFsT2JqZWN0KHZtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgog
I2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
IlZNVHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldh
c21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21DYXBhYmlsaXRpZXMuaCIKQEAgLTcy
OSw2ICs3MzAsNyBAQCBTdHJpbmcgU2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtCiAg
ICAgaWYgKCFjYWxsZWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAorICAgIERlZmVyVGVy
bWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmds
b2JhbE9iamVjdCh2bSk7CiAgICAgYXV0byBnZXRQcm9wZXJ0eUlmUHVyZU9wZXJhdGlvbiA9IFsm
XSAoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIC0+IFN0cmluZyB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1ZGUgIlZN
VHJhcHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdXZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgpAQCAtMzA5MSw2
ICszMDkyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uU2hhZG93Qwogewog
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIERlZmVyVGVybWluYXRpb24gZGVmZXJTY29wZSh2bSk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChhdXRvKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDIxLTA0LTI3ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggZXhjZXB0aW9uIGFzc2Vy
dGlvbnMgaW4gbGlnaHQgb2YgdGhlIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTI4CisgICAgICAgIHJkYXI6
Ly83NjY5NDkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEEgZmV3IGNoYW5nZXMgcGx1cyByZWJhc2luZyBiaW5kaW5ncyB0ZXN0IHJlc3VsdHMuCisK
KyAgICAgICAgKiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06
CisgICAgICAgIChXZWJDb3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJl
cGxhY2VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRocm93Tm90U3VwcG9ydGVkRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dGhyb3dJbnZhbGlkU3RhdGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd1NlY3Vy
aXR5RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dET01TeW50YXhFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJvd0RhdGFDbG9uZUVycm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFz
ay5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldEJhY2tpbmdNYXApOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRCYWNraW5nU2V0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU01pY3JvdGFza0NhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01p
Y3JvdGFza0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvanMvV3JpdGFibGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVTdHJlYW1JbnRlcm5hbDo6Y2FsbEZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlU3RyZWFtOjpsb2NrKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlUHV0KToK
KyAgICAgICAgKEdlbmVyYXRlUHV0QnlJbmRleCk6CisgICAgICAgIChHZW5lcmF0ZURlZmluZU93
blByb3BlcnR5KToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXI6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmRlZmluZU93blBy
b3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllczo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmRlZmluZU93blByb3BlcnR5
KToKKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclBy
ZXNlbnRhdGlvbk1vZGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMpOgorCiAyMDIxLTA0LTI3ICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUg
ZGVmYXVsdFZhbHVlKCkgZnJvbSB0aGUgbWV0aG9kIHRhYmxlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NzYsMTIgKzE3NiwxOCBAQCBhdXRvIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxs
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKKyAgICBh
dXRvIGNsZWFyRXhjZXB0aW9uQW5kUmV0dXJuRmFsc2UgPSBbJl0gKCkgLT4gSW5zdGFsbFJlc3Vs
dCB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB7IGZh
bHNlIH07CisgICAgfTsKKwogICAgIC8vIExvb2t1cCB0aGUgImNyZWF0ZVBsdWdpblJlcGxhY2Vt
ZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGds
b2JhbE9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNl
bWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IGZhbHNl
IH07CiAgICAgSlNDOjpKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNlbWVudEZ1
bmN0aW9uLnRvT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgY2xlYXJFeGNlcHRp
b25BbmRSZXR1cm5GYWxzZSgpKTsKKwogICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2
bSwgcmVwbGFjZW1lbnRPYmplY3QpOwogICAgIGlmIChjYWxsRGF0YS50eXBlID09IEpTQzo6Q2Fs
bERhdGE6OlR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CkBAIC0xOTQsMTAg
KzIwMCw3IEBAIGF1dG8gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBh
cmdMaXN0LmFwcGVuZCh0b0pTPElETFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCwgbV92YWx1ZXMpKTsKICAgICBB
U1NFUlQoIWFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFj
ZW1lbnQgPSBjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJl
dHVybiB7IGZhbHNlIH07Ci0gICAgfQorICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGNs
ZWFyRXhjZXB0aW9uQW5kUmV0dXJuRmFsc2UoKSk7CiAKICAgICAvLyBHZXQgdGhlIDx2aWRlbz4g
Y3JlYXRlZCB0byByZXBsYWNlIHRoZSBwbHVnLWluLgogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9
IHJlcGxhY2VtZW50LmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJ2aWRlbyIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCShyZXZpc2lvbiAyNzY2NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIEpTVmFsdWUgY3JlYXRlRE9NRXhj
ZXB0aW9uKEpTR2xvYmFsT2JqZWMKIAogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKIHsKLSAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2Vw
dFRlcm1pbmF0aW9uKCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKGV4Y2VwdGlvbikpKTsKIH0KICAgICAKQEAgLTIwOSwxOSArMjA5LDE5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiBzdGF0aWMKIAogdm9pZCB0aHJvd05vdFN1cHBvcnRl
ZEVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQogewotICAgIHNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5h
dGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBOb3RTdXBwb3J0ZWRFcnJv
ciwgbWVzc2FnZSkpOwogfQogCiB2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
QVNDSUlMaXRlcmFsIG1lc3NhZ2UpCiB7Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAgICAgdGhy
b3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJmxleGljYWxHbG9iYWxPYmplY3QsIEludmFsaWRTdGF0ZUVycm9yLCBtZXNzYWdlKSk7CiB9
CiAKIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9i
amVjdCwgU2VjdXJpdHlFcnJvciwgbWVzc2FnZSkpOwogfQogCkBAIC0yOTgsMTMgKzI5OCwxMyBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpCiAKIHZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwgbWVzc2FnZSkKIHsKLSAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0
VGVybWluYXRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgU3ludGF4RXJy
b3IsIG1lc3NhZ2UpKTsKIH0KIAogdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCiB7
Ci0gICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbkV4Y2VwdFRlcm1pbmF0aW9uKCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3Qs
IERhdGFDbG9uZUVycm9yKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ3VzdG9tU2V0
dGVyRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0ludGVybmFsUHJvbWlz
ZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0cnVjdHVyZUlubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9WTVRyYXBzSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1dhc21TdHJlYW1pbmdDb21waWxlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1dlYWtHQ01hcElubGluZXMuaD4KIApAQCAtOTYsNiArOTcsNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04obWFrZVRoaXNUeXBlRXJyCiAgICAgQVNTRVJUKGNhbGxGcmFtZSk7CiAgICAgQVNT
RVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJm
YWNlTmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGdsb2Jh
bE9iamVjdCk7CkBAIC0xMTAsNiArMTEyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG1h
a2VHZXR0ZXJUeXBlRQogICAgIEFTU0VSVChjYWxsRnJhbWUpOwogICAgIEFTU0VSVChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhnbG9iYWxPYmplY3QpOwpA
QCAtMTI4LDYgKzEzMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihtYWtlRE9NRXhjZXB0
aW8KICAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0gMik7CiAKICAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBEZWZlclRlcm1pbmF0aW9uIGRlZmVy
U2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAog
ICAgIGF1dG8gY29kZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRT
dHJpbmcoZ2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0VGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghY29udGV4
dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgSlNFeGVjU3RhdGU6OnJ1blRhc2sobGV4
aWNhbEdsb2JhbE9iamVjdCwgbV90YXNrKTsKLSAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigp
OwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NTWFwTGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01NYXBMaWtlLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0NhdGNoU2NvcGUuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU01hcC5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1ZNVHJhcHNJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzksNiArNDAsNyBAQCBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxKCiAgICAgaWYgKCFiYWNraW5nTWFwLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVy
biB7IGZhbHNlLCAqSlNDOjphc09iamVjdChiYWNraW5nTWFwKSB9OwogCisgICAgSlNDOjpEZWZl
clRlcm1pbmF0aW9uIGRlZmVyU2NvcGUodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAogICAgIGJhY2tpbmdNYXAgPSBKU0M6OkpTTWFwOjpjcmVhdGUoJmxl
eGljYWxHbG9iYWxPYmplY3QsIHZtLCBsZXhpY2FsR2xvYmFsT2JqZWN0Lm1hcFN0cnVjdHVyZSgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmNwcAko
cmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRM
aWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ2F0Y2hTY29wZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU2V0Lmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZXRJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVk1UcmFwc0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
NCw2ICs0NSw3IEBAIHN0ZDo6cGFpcjxib29sLCBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEoKICAg
ICBhdXRvIGJhY2tpbmdTZXQgPSBzZXRMaWtlLmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCku
YmFja2luZ1NldFByaXZhdGVOYW1lKCkpOwogICAgIGlmIChiYWNraW5nU2V0LmlzVW5kZWZpbmVk
KCkpIHsKICAgICAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAg
ICAgIEpTQzo6RGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgICAgIGJhY2tpbmdTZXQgPSBK
U0M6OkpTU2V0OjpjcmVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LnNldFN0cnVjdHVyZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWljcm90YXNrQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01pY3JvdGFza0NhbGxiYWNrLmgJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ0LDcgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
ICAgICBKU0V4ZWNTdGF0ZTo6cnVuVGFzayhtX2dsb2JhbE9iamVjdC5nZXQoKSwgbV90YXNrKTsK
LSAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0NzQsNyArMzQ3
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6SlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1YihtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIG1f
bGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlU3Ry
dWN0dXJlKCksIG1fd2FzbU1vZHVsZXMtPmF0KGluZGV4KSk7CiAgICAgICAgICAgICAvLyBTaW5j
ZSB3ZSBhcmUgY2xvbmluZyBhIEpTV2ViQXNzZW1ibHlNb2R1bGUsIGl0J3MgaW1wb3NzaWJsZSBm
b3IgdGhhdAogICAgICAgICAgICAgLy8gbW9kdWxlIHRvIG5vdCBoYXZlIGJlZW4gYSB2YWxpZCBt
b2R1bGUuIFRoZXJlZm9yZSwgY3JlYXRlU3R1YiBzaG91bGQKLSAgICAgICAgICAgIC8vIG5vdCB0
cm93LgorICAgICAgICAgICAgLy8gbm90IHRocm93LgogICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhD
cmFzaE9uT3ZlcmZsb3cocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0z
NDk2LDcgKzM0OTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eSogcmVzdWx0ID0gSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp0cnlDcmVhdGUobV9sZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2bSwgbV9nbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TWVtb3J5U3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIGNsb25pbmcgYSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5LCBpdCdzIGltcG9zc2libGUgZm9yIHRoYXQKICAgICAgICAgICAgIC8vIG1vZHVs
ZSB0byBub3QgaGF2ZSBiZWVuIGEgdmFsaWQgbW9kdWxlLiBUaGVyZWZvcmUsIGNyZWF0ZVN0dWIg
c2hvdWxkCi0gICAgICAgICAgICAvLyBub3QgdHJvdy4KKyAgICAgICAgICAgIC8vIG5vdCB0aHJv
dy4KICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAg
ICAgICAgUmVmPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUoaGFu
ZGxlLnJlbGVhc2VOb25OdWxsKCksCiAgICAgICAgICAgICAgICAgWyZ2bV0gKFdhc206Ok1lbW9y
eTo6Tm90aWZ5UHJlc3N1cmUpIHsgdm0uaGVhcC5jb2xsZWN0QXN5bmMoQ29sbGVjdGlvblNjb3Bl
OjpGdWxsKTsgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dyaXRhYmxlU3Ry
ZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xcml0YWJs
ZVN0cmVhbS5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dyaXRhYmxlU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxGdW5jdGlvbigKICAgICBhdXRvIGNhbGxEYXRhID0g
SlNDOjpnZXRDYWxsRGF0YSh2bSwganNGdW5jdGlvbik7CiAgICAgQVNTRVJUKGNhbGxEYXRhLnR5
cGUgIT0gSlNDOjpDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CiAgICAgYXV0byByZXN1bHQgPSBjYWxs
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Z1bmN0aW9uLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmd1bWVudHMpOwotICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb25FeGNlcHRUZXJtaW5hdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiB9CkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBXcml0YWJsZVN0cmVhbTo6bG9jaygpCiAgICAg
QVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBKU0M6OmNvbnN0cnVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEsIGFyZ3MpOwotICAg
IHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb25F
eGNlcHRUZXJtaW5hdGlvbigpOwogfQogCiBib29sIFdyaXRhYmxlU3RyZWFtOjppc0xvY2tlZCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEyMDgs
NyArMTIwOCw3IEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlz
T2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFmb3VuZCkge1xuIik7
CiAgICAgICAgICAgICAkYWRkaXRpb25hbEluZGVudCAuPSAiICAgICI7CiAgICAgICAgIH0KQEAg
LTEyODYsNyArMTI4Niw3IEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdl
dFByb3RvdHlwZURpcmVjdCh2bSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBib29sIGZvdW5kID0gcHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJv
dG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzbG90
LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoIWZvdW5kKSB7XG4iKTsKICAgICAgICAgICAgICRhZGRpdGlvbmFsSW5kZW50IC49ICIgICAg
IjsKICAgICAgICAgfQpAQCAtMTQyNCw3ICsxNDI0LDcgQEAgc3ViIEdlbmVyYXRlRGVmaW5lT3du
UHJvcGVydHkKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRl
bnQuICIgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCkgfTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbElu
ZGVudC4gIiAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIp
OwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAg
ICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAgICAgICAgdGhyb3dTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICRhZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRp
b25hbEluZGVudC4gIiAgICAgICAgaWYgKCFmb3VuZCkge1xuIik7CiAgICAgICAgICAgICAkYWRk
aXRpb25hbEluZGVudCAuPSAiICAgICI7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShy
ZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGkKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90
b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJv
b2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
ICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVl
KTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAg
IHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAg
LTMwNiw3ICszMDYsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkg
fTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAg
ICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0
eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcg
KzI0MSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5k
aXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
ICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI3NCw3ICsy
NzQsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAg
IGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTMwNiw3ICszMDYsNyBA
QCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nCiAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9v
bCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxv
d1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsK
LSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewog
ICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVuCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUu
aXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1F
bnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWZvdW5kKSB7
CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTsKQEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVj
dCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAg
ICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjc2Njc2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCgKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlz
T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVj
dChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAg
ICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAg
ICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTIzOSw3ICsyMzksNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjpwdXRCCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0
LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNP
YmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRy
eS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWZvdW5kKSB7CiAg
ICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB0cnVlKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpkZWZpCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAg
ICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3Qo
KSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnku
cmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFm
b3VuZCkgewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTIzOSw3ICsyMzksNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBw
cm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNs
b3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRp
c2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAo
IWZvdW5kKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsg
dGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwg
JmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQo
KTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkg
ewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHUKICAgICAgICAgSlNWYWx1ZSBw
cm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmpl
Y3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50
cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29s
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1CiAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQg
PSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90
LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAoIWZvdW5kKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCBib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWly
eSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVz
ZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3Vu
ZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRv
cigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI3
NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcg
KzI0NSw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5k
aXNhbGxvd1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
ICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI3MSw3ICsy
NzEsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAg
IGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICBzbG90LmRpc2FsbG93Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI5Nyw3ICsyOTcsNyBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6CiAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSwgJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9v
bCBmb3VuZCA9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxv
d1ZNRW50cnkucmVzZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3NjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAm
JiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVz
ZXQoKTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3Vu
ZCkgewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2Fs
bG93Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWZv
dW5kKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSwgJmxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCkgfTsKICAgICAgICAgYm9vbCBmb3VuZCA9IEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQoKTsK
LSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkgewog
ICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuY3BwCShyZXZpc2lvbiAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBh
c09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnkucmVzZXQo
KTsKLSAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3VuZCkg
ewogICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlz
T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgIGJvb2wgZm91bmQgPSBwcm90b3R5
cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBzbG90LmRpc2FsbG93
Vk1FbnRyeS5yZXNldCgpOwotICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIWZvdW5k
KSB7CiAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBzdGF0aWMgYm9vbCBpc0xlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydHlOCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRo
aXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnksICZs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpIH07CiAgICAgICAgICAgICBib29sIGZvdW5kID0gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgc2xvdC5kaXNhbGxvd1ZNRW50cnku
cmVzZXQoKTsKLSAgICAgICAgICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAg
ICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lv
biAyNzY2NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MzMxLDEyICs3MzMxLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgICAgICBhcmdMaXN0LmFwcGVuZChtZWRpYUNvbnRyb2xz
SG9zdEpTV3JhcHBlcik7CiAgICAgICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkp
OwogCi0gICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7Ci0g
ICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAgICAgYXV0byByZXBvcnRFeGNlcHRpb25B
bmRSZXR1cm5GYWxzZSA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgIGF1dG8qIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKQEAgLTczNDQsNiArNzMzOCwxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFk
ZFVzZXJBZ2VudFNoCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07CiAKKyAg
ICAgICAgYXV0byogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVwb3J0RXhj
ZXB0aW9uQW5kUmV0dXJuRmFsc2UoKSk7CisgICAgICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6Omdl
dENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CisgICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IEpT
Qzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKwog
ICAgICAgICBhdXRvIGNvbnRyb2xsZXJWYWx1ZSA9IEpTQzo6Y2FsbCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZnVuY3Rpb24sIGNhbGxEYXRhLCAmZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVwb3J0RXhjZXB0aW9uQW5kUmV0dXJuRmFs
c2UoKSk7CiAKQEAgLTczNTMsNyArNzM1NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlk
QWRkVXNlckFnZW50U2gKIAogICAgICAgICAvLyBDb25uZWN0IHRoZSBNZWRpYSwgTWVkaWFDb250
cm9sbGVySG9zdCwgYW5kIENvbnRyb2xsZXIgc28gdGhlIEdDIGtub3dzIGFib3V0IHRoZWlyIHJl
bGF0aW9uc2hpcAogICAgICAgICBhdXRvKiBtZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNX
cmFwcGVyLnRvT2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgc2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVw
b3J0RXhjZXB0aW9uQW5kUmV0dXJuRmFsc2UoKSk7CiAgICAgICAgIGF1dG8gY29udHJvbHNIb3N0
ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbHNIb3N0Iik7CiAKICAg
ICAgICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVydHkoJmxleGljYWxH
bG9iYWxPYmplY3QsIGNvbnRyb2xzSG9zdCkpOwpAQCAtNzQxNSw3ICs3NDE2LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRybwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdCgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgYXV0
byBjYWxsRGF0YSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0sIGZ1bmN0aW9uKTsKICAgICAgICAgaWYg
KGNhbGxEYXRhLnR5cGUgPT0gSlNDOjpDYWxsRGF0YTo6VHlwZTo6Tm9uZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTc0NTksNyArNzQ2MCw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVt
ZW50OjpnZXRDdXJyZW50TWVkaWEKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBhdXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGF1dG8gY2FsbERhdGEgPSBK
U0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbik7CiAgICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnTGlzdDsKICAgICAgICAgQVNTRVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQo
KSk7Cg==
</data>
<flag name="review"
          id="447756"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
      

    </bug>

</bugzilla>