<?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>171776</bug_id>
          
          <creation_ts>2017-05-06 15:14:34 -0700</creation_ts>
          <short_desc>Introduce ExceptionScope::assertNoException() and releaseAssertNoException().</short_desc>
          <delta_ts>2017-05-08 12:53:23 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>jlewis3</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1305619</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 15:14:34 -0700</bug_when>
    <thetext>Instead of ASSERT(!scope.exception()), we can now do scope.assertNoException().  Ditto for RELEASE_ASSERT and scope.releaseAssertNoException().  

The advantage of using ExceptionScope::assertNoException() and releaseAssertNoException() is that if the assertion fails, these utility functions will print the stack trace for where the unexpected exception is detected as well as where the unexpected exception was thrown from.  This makes it much easier to debug the source of unhandled exceptions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305624</commentid>
    <comment_count>1</comment_count>
      <attachid>309300</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 15:50:51 -0700</bug_when>
    <thetext>Created attachment 309300
proposed patch.

Let&apos;s try this on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305636</commentid>
    <comment_count>2</comment_count>
      <attachid>309300</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-06 16:35:57 -0700</bug_when>
    <thetext>Comment on attachment 309300
proposed patch.

Attachment 309300 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/3689922

New failing tests:
ChakraCore.yaml/ChakraCore/test/Strings/HTMLHelpers.js.default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305663</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 19:54:20 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #2)
&gt; Comment on attachment 309300 [details]
&gt; proposed patch.
&gt; 
&gt; Attachment 309300 [details] did not pass jsc-ews (mac):
&gt; Output: http://webkit-queues.webkit.org/results/3689922
&gt; 
&gt; New failing tests:
&gt; ChakraCore.yaml/ChakraCore/test/Strings/HTMLHelpers.js.default

I can&apos;t reproduce this locally.  Will rebase and try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305676</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 20:28:14 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #3)
&gt; (In reply to Build Bot from comment #2)
&gt; &gt; Comment on attachment 309300 [details]
&gt; &gt; proposed patch.
&gt; &gt; 
&gt; &gt; Attachment 309300 [details] did not pass jsc-ews (mac):
&gt; &gt; Output: http://webkit-queues.webkit.org/results/3689922
&gt; &gt; 
&gt; &gt; New failing tests:
&gt; &gt; ChakraCore.yaml/ChakraCore/test/Strings/HTMLHelpers.js.default
&gt; 
&gt; I can&apos;t reproduce this locally.  Will rebase and try again.

Nope, not bogus.  I can reproduce it now after I rebased to ToT.  Probably not due to my patch, but I&apos;ll investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305683</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 21:25:43 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #4)
&gt; (In reply to Mark Lam from comment #3)
&gt; &gt; (In reply to Build Bot from comment #2)
&gt; &gt; &gt; Comment on attachment 309300 [details]
&gt; &gt; &gt; proposed patch.
&gt; &gt; &gt; 
&gt; &gt; &gt; Attachment 309300 [details] did not pass jsc-ews (mac):
&gt; &gt; &gt; Output: http://webkit-queues.webkit.org/results/3689922
&gt; &gt; &gt; 
&gt; &gt; &gt; New failing tests:
&gt; &gt; &gt; ChakraCore.yaml/ChakraCore/test/Strings/HTMLHelpers.js.default
&gt; &gt; 
&gt; &gt; I can&apos;t reproduce this locally.  Will rebase and try again.
&gt; 
&gt; Nope, not bogus.  I can reproduce it now after I rebased to ToT.  Probably
&gt; not due to my patch, but I&apos;ll investigate.

OK, I found out that:
1. the issue reproduces without my patch.
2. the issue is intermittent and doesn&apos;t always reproduce.

Given that, I don&apos;t think it should block this patch.  Let&apos;s get a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305686</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-06 21:34:52 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #5)
&gt; &gt; Nope, not bogus.  I can reproduce it now after I rebased to ToT.  Probably
&gt; &gt; not due to my patch, but I&apos;ll investigate.
&gt; 
&gt; OK, I found out that:
&gt; 1. the issue reproduces without my patch.
&gt; 2. the issue is intermittent and doesn&apos;t always reproduce.

FYI, I filed https://bugs.webkit.org/show_bug.cgi?id=171786 to track the ChakraCore test failure bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305884</commentid>
    <comment_count>7</comment_count>
      <attachid>309300</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-08 09:38:33 -0700</bug_when>
    <thetext>Comment on attachment 309300
proposed patch.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305896</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-08 09:57:30 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r216428: &lt;http://trac.webkit.org/r216428&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305995</commentid>
    <comment_count>9</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-05-08 12:28:01 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Thanks for the review.  Landed in r216428: &lt;http://trac.webkit.org/r216428&gt;.

It appears that this change broke the Windows Debug build: https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/1120</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305999</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-08 12:51:28 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #9)
&gt; (In reply to Mark Lam from comment #8)
&gt; &gt; Thanks for the review.  Landed in r216428: &lt;http://trac.webkit.org/r216428&gt;.
&gt; 
&gt; It appears that this change broke the Windows Debug build:
&gt; https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/
&gt; 1120

Speculative build fix landed in r216444: &lt;http://trac.webkit.org/r216444&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309300</attachid>
            <date>2017-05-06 15:50:51 -0700</date>
            <delta_ts>2017-05-08 09:38:33 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-171776.patch</filename>
            <type>text/plain</type>
            <size>85277</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2MzMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxNy0wNS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNlIEV4Y2VwdGlvblNjb3BlOjphc3NlcnROb0V4Y2VwdGlvbigpIGFuZCByZWxlYXNl
QXNzZXJ0Tm9FeGNlcHRpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MTc3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluc3RlYWQgb2YgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSksIHdlIGNh
biBub3cgZG8gc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKS4KKyAgICAgICAgRGl0dG8gZm9yIFJF
TEVBU0VfQVNTRVJUIGFuZCBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKS4gIAorCisg
ICAgICAgIFRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgRXhjZXB0aW9uU2NvcGU6OmFzc2VydE5vRXhj
ZXB0aW9uKCkgYW5kCisgICAgICAgIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpIGlzIHRoYXQg
aWYgdGhlIGFzc2VydGlvbiBmYWlscywgdGhlc2UgdXRpbGl0eQorICAgICAgICBmdW5jdGlvbnMg
d2lsbCBwcmludCB0aGUgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIHRoZSB1bmV4cGVjdGVkIGV4Y2Vw
dGlvbiBpcworICAgICAgICBkZXRlY3RlZCBhcyB3ZWxsIGFzIHdoZXJlIHRoZSB1bmV4cGVjdGVk
IGV4Y2VwdGlvbiB3YXMgdGhyb3duIGZyb20uICBUaGlzIG1ha2VzCisgICAgICAgIGl0IG11Y2gg
ZWFzaWVyIHRvIGRlYnVnIHRoZSBzb3VyY2Ugb2YgdW5oYW5kbGVkIGV4Y2VwdGlvbnMuCisKKyAg
ICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpw
YXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAg
ICAgICAgKEpTQzo6bm90aWZ5RGVidWdnZXJPZlVud2luZGluZyk6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpl
eGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6ZGVidWcpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwOgor
ICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0YWNrKToKKyAgICAgICAg
KiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToK
KyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoZnVu
Y3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCk6CisgICAgICAgIChmdW5jdGlvblNhbXBsaW5nUHJv
ZmlsZXJTdGFja1RyYWNlcyk6CisgICAgICAgIChib3gpOgorICAgICAgICAocnVuV2l0aFNjcmlw
dHMpOgorICAgICAgICAqIHJ1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6dHJ5SW5pdGlhbGl6ZVNwZWNpZXNXYXRjaHBvaW50KToKKyAgICAgICAgKiBydW50aW1lL0Nv
bXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpyZWplY3RQcm9taXNlKToKKyAgICAgICAgKiBy
dW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpz
YW5pdGl6ZWRUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0
aW9uU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6dW5leHBlY3RlZEV4
Y2VwdGlvbk1lc3NhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaDoKKyAg
ICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OmFzc2VydE5vRXhjZXB0aW9uKToKKyAgICAgICAg
KEpTQzo6RXhjZXB0aW9uU2NvcGU6OnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbik6CisgICAgICAg
IChKU0M6OkV4Y2VwdGlvblNjb3BlOjp1bmV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSk6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNyZWF0
ZUNvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50bERhdGVUaW1lRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6Y3JlYXRlTnVtYmVy
Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpb25z
KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1Zh
bHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Z2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omlu
aXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnbG9iYWxGdW5jSG9zdFByb21pc2VSZWplY3Rpb25UcmFja2VyKToKKyAgICAg
ICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpKU01v
ZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZUxvYWRlcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmlu
Z2lmaWVyOjp0b0pTT04pOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6cHJvcGVydHlOYW1l
RW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyk6
CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydHkpOgorICAgICAg
ICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2Jh
bFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OnJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6
U3RhY2tGcmFtZTo6bmFtZUZyb21DYWxsZWUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVy
KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwOgorICAgICAgICAoSlND
OjpUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6bmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRo
cm93KToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyRXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KToKKwogMjAxNy0wNS0wNiAgQmlsbCBNaW5nICA8bWJiaWxsQGdtYWlsLmNvbT4KIAogICAgICAg
ICBGaXggMzJiaXQgV2luZG93cyBidWlsZCBieSBnaXZpbmcgY29ycmVjdCBwYXJhbWV0ZXJzIHRv
IE1BU00KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwOCw3ICsxNjA4
LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7CiAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNj
b3BlLmV4Y2VwdGlvbigpOwpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAgSlNJbnRlcm5hbFByb21pc2Uq
IEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgIGlmICghZGlyZWN0b3J5TmFtZSkKICAgICAgICAg
cmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbWFrZVN0cmlu
ZygiQ291bGQgbm90IHJlc29sdmUgdGhlIHJlZmVycmVyIG5hbWUgJyIsIFN0cmluZyhyZWZlcnJl
ci5pbXBsKCkpLCAiJy4iKSkpOwogICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlc29sdmUo
ZXhlYywganNTdHJpbmcoZXhlYywgcmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBN
b2R1bGVOYW1lKGtleS5pbXBsKCkpKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMTczNSw3ICsxNzM1LDcgQEAgSlNJbnRlcm5hbFByb21pc2Uq
IEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBmaWxlICci
LCBtb2R1bGVLZXksICInLiIpKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZXNv
bHZlKGV4ZWMsIEpTU291cmNlQ29kZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIG1ha2VTb3VyY2Uoc3Ry
aW5nRnJvbVVURih1dGY4KSwgU291cmNlT3JpZ2luIHsgbW9kdWxlS2V5IH0sIG1vZHVsZUtleSwg
VGV4dFBvc2l0aW9uKCksIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKSkpOwotICAg
IFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUucmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzAxNCw3ICsz
MDE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbgogCiAgICAg
U3RyaW5nIGpzb25TdHJpbmcgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbigpOwogICAgIEVuY29kZWRK
U1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmlu
ZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUu
cmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt
MzA1Myw3ICszMDUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNh
bQogCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSB2bS5zYW1wbGluZ1Byb2ZpbGVyKCktPnN0YWNr
VHJhY2VzQXNKU09OKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5j
b2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxF
UikKQEAgLTMxMDEsOSArMzEwMSw5IEBAIHN0YXRpYyBKU1ZhbHVlIGJveChFeGVjU3RhdGUqIGV4
ZWMsIFZNJiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAg
ICBKU1N0cmluZyogdHlwZSA9IGFzU3RyaW5nKHdhc21WYWx1ZS5nZXQoZXhlYywgbWFrZUlkZW50
aWZpZXIodm0sICJ0eXBlIikpKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHdhc21WYWx1ZS5nZXQoZXhlYywgbWFrZUlkZW50aWZpZXIodm0sICJ2YWx1ZSIpKTsK
LSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogCiAgICAgYXV0byB1bmJveFN0cmluZyA9IFsmXSAoY29uc3QgY2hhciogaGV4Rm9y
bWF0LCBjb25zdCBjaGFyKiBkZWNGb3JtYXQsIGF1dG8mIHJlc3VsdCkgewogICAgICAgICBpZiAo
IXZhbHVlLmlzU3RyaW5nKCkpCkBAIC0zNDg5LDcgKzM0ODksNyBAQCBzdGF0aWMgYm9vbCBydW5X
aXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKICAgICAgICAgICAgIGlmIChpc01vZHVsZSkgewog
ICAgICAgICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VB
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0QnVm
ZmVyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNv
IHdlIGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCkBAIC0zNTE4LDEyICszNTE4LDEyIEBAIHN0YXRp
YyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgICAgICBwcm9taXNlLT50aGVuKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmdWxm
aWxsSGFuZGxlciwgcmVqZWN0SGFuZGxlcik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgICAgICAgICB2bS5kcmFpbk1pY3JvdGFza3MoKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdEJ1ZmZlciwgU291cmNlT3JpZ2luIHsg
YWJzb2x1dGVQYXRoKGZpbGVOYW1lKSB9LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXZh
bHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGV2YWx1YXRp
b25FeGNlcHRpb24tPnZhbHVlKCk7CiAgICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIGlzTGFzdEZpbGUsIGV2YWx1YXRpb25FeGNlcHRpb24sIHJldHVyblZhbHVlLCB1bmNh
dWdodEV4Y2VwdGlvbk5hbWUsIGFsd2F5c0R1bXBVbmNhdWdodEV4Y2VwdGlvbiwgZHVtcCwgc3Vj
Y2Vzcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MSw3ICs3NDEsNyBAQCB2b2lkIERlYnVn
Z2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAgICAgewogICAgICAgICBQYXVzZVJlYXNv
bkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywgZGlkSGl0QnJlYWtwb2ludCA/IFBhdXNlZEZvckJy
ZWFrcG9pbnQgOiBtX3JlYXNvbkZvclBhdXNlKTsKICAgICAgICAgaGFuZGxlUGF1c2Uodm1FbnRy
eUdsb2JhbE9iamVjdCwgbV9yZWFzb25Gb3JQYXVzZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgIH0KIAogICAgIG1fcGF1c2luZ0JyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2lu
dElEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUwLDkgKzE3NTAsOSBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MihFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1ZhbHVlOjpkZWNvZGUo
YSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7IC8vIElt
cG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCisgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBo
YXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFsdWU6
OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHIxLCBzdHIyKTsKQEAgLTE3NjUsMTEgKzE3
NjUsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDMoRQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTU3RyaW5nKiBzdHIx
ID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4ZWMpOwotICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0IGhhdmUgYmVlbiBnaXZl
biBwcmltaXRpdmVzLgorICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7IC8vIEltcG9zc2li
bGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJp
bmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAg
ICBKU1N0cmluZyogc3RyMyA9IEpTVmFsdWU6OmRlY29kZShjKS50b1N0cmluZyhleGVjKTsKLSAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
dHIxLCBzdHIyLCBzdHIzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUyLDcgKzE1Miw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxl
ZCwgaXQgc2hvdWxkIG5vdCBoYXZlIHRocm93biBleGNlcHRpb25zLgotICAgICAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
IAogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwogICAgICAg
ICBKU1Njb3BlOjpjb2xsZWN0Q2xvc3VyZVZhcmlhYmxlc1VuZGVyVERaKGNhbGxlclNjb3BlQ2hh
aW4sIHZhcmlhYmxlc1VuZGVyVERaKTsKQEAgLTU5Myw3ICs1OTMsNyBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyCiAgICAgICAgICAgICBkZWJ1Z2dlci0+dW53aW5k
RXZlbnQoY2FsbEZyYW1lKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVidWdnZXItPmRp
ZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2F0Y2hT
Y29wZSwgIWNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICBjYXRjaFNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkBAIC03NTEsNyArNzUxLDcgQEAgSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29ucwogICAgIEFTU0VSVCh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpIHx8IHByb2dyYW0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKIAotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5T25DdXJyZW50VGhyZWFkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJl
bnRUaHJlYWQoKSkKQEAgLTkwMiw3ICs5MDIsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlQ2FsbChDYWxsRnJhCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKCF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAg
aWYgKHZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CkBAIC05NjcsNyArOTY3LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVj
dXRlQ29uc3RydWN0KAogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEFTU0VSVCghdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwogICAgIC8v
IFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0dXJuIHNvbWV0aGlu
ZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52YWxpZCBzdGF0ZS4K
QEAgLTEwMzYsNyArMTAzNiw3IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBh
cmVGb3IKIHsKICAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3Bl
LCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgIAogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQo
KSkKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKQEAgLTEwODgsNyArMTA4OCw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVChzY29wZS0+
dm0oKSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBBU1NFUlQo
IXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAodm0uaXNDb2xs
ZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpCkBAIC0xMjMxLDcgKzEyMzEsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoc2NvcGUtPnZtKCkgPT0gJmNh
bGxGcmFtZS0+dm0oKSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxl
Y3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKQpAQCAtMTI4NCw3ICsxMjg0LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
SW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVidWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va1R5cGUpIHsKICAgICAgICAgY2FzZSBE
aWRFbnRlckNhbGxGcmFtZToKQEAgLTEzMDksNyArMTMwOSw3IEBAIE5FVkVSX0lOTElORSB2b2lk
IEludGVycHJldGVyOjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRSZWFjaEJy
ZWFrcG9pbnQoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU3LDcgKzQ1Nyw3IEBAIEpTQXJyYXkqIFNoYWRvd0NoaWNrZW46OmZ1
bmN0aW9uc09uU3RhY2sKICAgICAgICAgdm0sIGV4ZWMsCiAgICAgICAgIFsmXSAoY29uc3QgRnJh
bWUmIGZyYW1lKSAtPiBib29sIHsKICAgICAgICAgICAgIHJlc3VsdC0+cHVzaChleGVjLCBmcmFt
ZS5jYWxsZWUpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHRlc3RzLgorICAgICAgICAg
ICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7IC8vIFRoaXMgZnVuY3Rpb24gaXMg
b25seSBjYWxsZWQgZnJvbSB0ZXN0cy4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6Zmlu
aXNoQ3JlYXRpbwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+
bWFwU3RydWN0dXJlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CisgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgbV9kZXBlbmRlbmNp
ZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVzTWFwIikpLCBtX2RlcGVu
ZGVuY2llc01hcC5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOTUsNyArMTM5NSw3IEBAIHZvaWQgQXJyYXlQcm90b3R5cGU6OnRyeUluaXRpYWxpemVT
cGVjaWUKIAogICAgIFByb3BlcnR5U2xvdCBjb25zdHJ1Y3RvclNsb3QodGhpcywgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgdGhpcy0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXMsIGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RvclNsb3QpOwotICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoY29uc3RydWN0b3JT
bG90LnNsb3RCYXNlKCkgIT0gdGhpcwogICAgICAgICB8fCAhY29uc3RydWN0b3JTbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKQogICAgICAgICB8fCBjb25zdHJ1Y3RvclNsb3QuZ2V0VmFsdWUoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpICE9IGFycmF5Q29uc3RydWN0b3IpIHsKQEAg
LTE0MDksNyArMTQwOSw3IEBAIHZvaWQgQXJyYXlQcm90b3R5cGU6OnRyeUluaXRpYWxpemVTcGVj
aWUKIAogICAgIFByb3BlcnR5U2xvdCBzcGVjaWVzU2xvdChhcnJheUNvbnN0cnVjdG9yLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBhcnJheUNvbnN0
cnVjdG9yLT5nZXRPd25Qcm9wZXJ0eVNsb3QoYXJyYXlDb25zdHJ1Y3RvciwgZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+c3BlY2llc1N5bWJvbCwgc3BlY2llc1Nsb3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKICAgICBpZiAoc3BlY2llc1Nsb3Quc2xvdEJhc2UoKSAhPSBhcnJheUNvbnN0cnVjdG9y
CiAgICAgICAgIHx8ICFzcGVjaWVzU2xvdC5pc0NhY2hlYWJsZUdldHRlcigpCiAgICAgICAgIHx8
IHNwZWNpZXNTbG90LmdldHRlclNldHRlcigpICE9IGdsb2JhbE9iamVjdC0+c3BlY2llc0dldHRl
clNldHRlcigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZSgK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKLSAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNl
cHRpb24oKS0+dmFsdWUoKTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIEpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCkBAIC0xODksNyArMTg5LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXpl
ZFRvU3RyaW5nKAogICAgICAgICB9CiAgICAgICAgIGN1cnJlbnRPYmogPSBvYmotPmdldFByb3Rv
dHlwZURpcmVjdCgpOwogICAgIH0KLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgU3RyaW5nIG5hbWVTdHJpbmc7CiAg
ICAgaWYgKCFuYW1lVmFsdWUpCkBAIC0yMDQsNyArMjA0LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFu
Y2U6OnNhbml0aXplZFRvU3RyaW5nKAogICAgIFByb3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlz
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBpZiAo
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBtZXNzYWdlUHJvcGVydE5h
bWUsIG1lc3NhZ2VTbG90KSAmJiBtZXNzYWdlU2xvdC5pc1ZhbHVlKCkpCiAgICAgICAgIG1lc3Nh
Z2VWYWx1ZSA9IG1lc3NhZ2VTbG90LmdldFZhbHVlKGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7
Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKIAogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nOwogICAgIGlmICghbWVzc2FnZVZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjU5LDcgKzI1OSw3IEBAIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEoK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZyhlcnJvckRlc2NyaXB0aW9uRm9yVmFsdWUoZXhlYywg
dmFsdWUpLT52YWx1ZShleGVjKSwgJyAnLCBtZXNzYWdlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNj
b3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UsIGFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbHVlKSk7CiAgICAgQVNTRVJU
KGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogICAgIHJldHVybiBleGNlcHRpb247Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUu
Y3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25TY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNs
dWRlICJFeGNlcHRpb25TY29wZS5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL1N0YWNrVHJhY2UuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCkBAIC00Nyw2ICs0OSwyMyBAQCBFeGNlcHRpb25TY29w
ZTo6fkV4Y2VwdGlvblNjb3BlKCkKICAgICBtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUgPSBtX3By
ZXZpb3VzU2NvcGU7CiB9CiAKK0NTdHJpbmcgRXhjZXB0aW9uU2NvcGU6OnVuZXhwZWN0ZWRFeGNl
cHRpb25NZXNzYWdlKCkKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisKKyAgICBvdXQu
cHJpbnRsbigiVW5leHBlY3RlZCBleGNlcHRpb24gb2JzZXJ2ZWQgYXQ6Iik7CisgICAgYXV0byBj
dXJyZW50U3RhY2sgPSBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4oU3RhY2tUcmFjZTo6Y2Fw
dHVyZVN0YWNrVHJhY2UoMjUsIDEpKTsKKyAgICBjdXJyZW50U3RhY2stPmR1bXAob3V0LCAiICAg
ICIpOworCisgICAgaWYgKCFtX3ZtLm5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdygpKQorICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIAorICAgIG91dC5wcmludGxuKCJUaGUgZXhjZXB0
aW9uIHdhcyB0aHJvd24gZnJvbToiKTsKKyAgICBtX3ZtLm5hdGl2ZVN0YWNrVHJhY2VPZkxhc3RU
aHJvdygpLT5kdW1wKG91dCwgIiAgICAiKTsKKworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7
Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25TY29wZS5oCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMyArMzgsMTggQEAgcHVibGljOgogICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07
IH0KICAgICB1bnNpZ25lZCByZWN1cnNpb25EZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdXJz
aW9uRGVwdGg7IH0KICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIHsgcmV0dXJuIG1fdm0uZXhj
ZXB0aW9uKCk7IH0KLSAgICAKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhc3NlcnROb0V4Y2Vw
dGlvbigpIHsgQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhjZXB0aW9uKCksICIlcyIsIHVuZXhwZWN0
ZWRFeGNlcHRpb25NZXNzYWdlKCkuZGF0YSgpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBy
ZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKSB7IFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSgh
ZXhjZXB0aW9uKCksICIlcyIsIHVuZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlKCkuZGF0YSgpKTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgRXhjZXB0aW9uU2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExv
Y2F0aW9uKTsKICAgICBFeGNlcHRpb25TY29wZShjb25zdCBFeGNlcHRpb25TY29wZSYpID0gZGVs
ZXRlOwogICAgIEV4Y2VwdGlvblNjb3BlKEV4Y2VwdGlvblNjb3BlJiYpID0gZGVmYXVsdDsKICAg
ICB+RXhjZXB0aW9uU2NvcGUoKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdW5l
eHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UoKTsKKwogICAgIFZNJiBtX3ZtOwogICAgIEV4Y2VwdGlv
blNjb3BlKiBtX3ByZXZpb3VzU2NvcGU7CiAgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBtX2xv
Y2F0aW9uOwpAQCAtNTcsNiArNjIsMTAgQEAgY2xhc3MgRXhjZXB0aW9uU2NvcGUgewogcHVibGlj
OgogICAgIEFMV0FZU19JTkxJTkUgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQogICAg
IEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2Vw
dGlvbigpOyB9CisgICAgQUxXQVlTX0lOTElORSBDU3RyaW5nIHVuZXhwZWN0ZWRFeGNlcHRpb25N
ZXNzYWdlKCkgeyByZXR1cm4geyB9OyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXNzZXJ0
Tm9FeGNlcHRpb24oKSB7IEFTU0VSVCghZXhjZXB0aW9uKCkpOyB9CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpIHsgUkVMRUFTRV9BU1NFUlQoIWV4Y2Vw
dGlvbigpKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb25TY29w
ZShWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmRlZmluZU93blByCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgo
ZXhlYywgaWRlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CiAKICAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0TW9kaWZpZWRBcmd1bWVu
dERlc2NyaXB0b3Iodm0sIGluZGV4KTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIx
NjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1
IEFuZHkgVmFuV2Fnb25lciAodGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tKQogICogQ29weXJpZ2h0
IChDKSAyMDE1IFN1a29sc2FrIFNha3NodXdvbmcgKHN1a29sc2FrQGdtYWlsLmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIEludGxD
b2xsYXRvcjo6Y3JlYXRlQ29sbGF0b3IoRXhlY1N0CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWRD
b2xsYXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUsIGpzVW5kZWZpbmVk
KCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0K
IAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAtNDc1LDcgKzQ3NSw3
IEBAIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucygKIAogICAgIGlmICgh
bV9pbml0aWFsaXplZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0
ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmc3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZhbldh
Z29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTgzMiw3ICs4MzIsNyBAQCBKU09iamVjdCogSW50bERhdGVUaW1lRm9ybWF0
OjpyZXNvbHZlZE9wCiAgICAgLy8gTm90ZTogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBFQ01BU2Ny
aXB0IDIwMTUgSW50ZXJuYXRpb25hbGl6YXRpb24gQVBJLCB0aGUgdGltZVpvbmUgcHJvcGVydHkg
d2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgaWYgbm8gdGltZVpvbmUg
cHJvcGVydHkgd2FzIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zIG9iamVjdCBwcm92aWRlZCB0byB0
aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3Rvci4gVGhlIHByZXZpb3VzIHZlcnNpb24g
bGVmdCB0aGUgdGltZVpvbmUgcHJvcGVydHkgdW5kZWZpbmVkIGluIHRoaXMgY2FzZS4KICAgICBp
ZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CkBAIC04ODEsNyArODgxLDcgQEAgSlNWYWx1ZSBJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChFeGVjUwogICAgIC8vIDEyLjMuNCBGb3JtYXREYXRl
VGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAgICBpZiAoIW1faW5pdGlh
bGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQo
ZXhlYywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
IH0KIAogICAgIC8vIDEuIElmIHggaXMgbm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBh
IFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBBbmR5IFZh
bldhZ29uZXIgKHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAx
NiBTdWtvbHNhayBTYWtzaHV3b25nIChzdWtvbHNha0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTgsNyArMzU4LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0OjpjcmVhdGVOdW1iZXJGb3JtYQogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9y
bWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVk
KCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0K
IAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAgLTQ4Niw3ICs0ODYsNyBAQCBKU09i
amVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpCiAKICAgICBpZiAoIW1faW5pdGlh
bGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChzdGF0
ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmc3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoK
ICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNy0yMDA4LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjA1LDEwICsy
MDUsOSBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAgICAgfQog
ICAgIAogICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBzeW50aGVzaXplUHJvdG90eXBlKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghcHJvdG90eXBlID09ICEhc2NvcGUuZXhjZXB0aW9u
KCkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgIGlmIChwcm90b3R5cGUt
PmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoZXhlYywgKnRo
aXMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93LCBwdXRSZXN1bHQpKQogICAgICAg
ICByZXR1cm4gcHV0UmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlmIChzdGQ6Omlz
bmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0yNTAsNyArMjUw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGF1dG8g
dGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWVXaXRob3V0
Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Ci0gICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBSRUxFQVNF
X0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8
IGxlbmd0aDsgKytpbmRleCkgewpAQCAtMzQxLDcgKzM0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJy
YXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPj0gMDsg
LS1pbmRleCkgewpAQCAtNTMxLDkgKzUzMSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGUKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQoMCkuaXNOdW1iZXIoKSk7
CiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgfHwgZXhlYy0+YXJn
dW1lbnQoMSkuaXNOdW1iZXIoKSk7CiAgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1w
ZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
dW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAx
LCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQo
IXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQzLDIwICs3NDMsMjAgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcgogICAgIEpTRnVuY3Rpb24qIHByaXZhdGVGdW5jQ29uY2F0U2xvd1BhdGgg
PSBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIGFycmF5UHJvdG90eXBlQ29u
Y2F0U2xvd1BhdGhDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcyk7CiAKICAgICBKU09iamVjdCogcmVn
RXhwUHJvdG9GbGFnc0dldHRlck9iamVjdCA9IGdldEdldHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQ
cm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGNhdGNoU2NvcGUsICFjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBjYXRjaFNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNPYmplY3QqIHJlZ0V4cFByb3RvR2xvYmFsR2V0
dGVyT2JqZWN0ID0gZ2V0R2V0dGVyQnlJZChleGVjLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwg
dm0ucHJvcGVydHlOYW1lcy0+Z2xvYmFsKTsKLSAgICBBU1NFUlQoIWNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpOworICAgIGNhdGNoU2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBtX3JlZ0V4
cFByb3RvR2xvYmFsR2V0dGVyLnNldCh2bSwgdGhpcywgcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXJP
YmplY3QpOwogICAgIEpTT2JqZWN0KiByZWdFeHBQcm90b0lnbm9yZUNhc2VHZXR0ZXJPYmplY3Qg
PSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpLCB2bS5wcm9wZXJ0
eU5hbWVzLT5pZ25vcmVDYXNlKTsKLSAgICBBU1NFUlQoIWNhdGNoU2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIGNhdGNoU2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBKU09iamVjdCogcmVn
RXhwUHJvdG9NdWx0aWxpbmVHZXR0ZXJPYmplY3QgPSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVn
RXhwUHJvdG90eXBlLmdldCgpLCB2bS5wcm9wZXJ0eU5hbWVzLT5tdWx0aWxpbmUpOwotICAgIEFT
U0VSVCghY2F0Y2hTY29wZS5leGNlcHRpb24oKSk7CisgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgIEpTT2JqZWN0KiByZWdFeHBQcm90b1NvdXJjZUdldHRlck9iamVjdCA9
IGdldEdldHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5
TmFtZXMtPnNvdXJjZSk7Ci0gICAgQVNTRVJUKCFjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICBjYXRjaFNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNPYmplY3QqIHJlZ0V4cFBy
b3RvU3RpY2t5R2V0dGVyT2JqZWN0ID0gZ2V0R2V0dGVyQnlJZChleGVjLCBtX3JlZ0V4cFByb3Rv
dHlwZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+c3RpY2t5KTsKLSAgICBBU1NFUlQoIWNhdGNo
U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIGNhdGNoU2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICBKU09iamVjdCogcmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyT2JqZWN0ID0gZ2V0R2V0dGVy
QnlJZChleGVjLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+dW5p
Y29kZSk7Ci0gICAgQVNTRVJUKCFjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBjYXRjaFNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgbV9yZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXIu
c2V0KHZtLCB0aGlzLCByZWdFeHBQcm90b1VuaWNvZGVHZXR0ZXJPYmplY3QpOwogICAgIEpTT2Jq
ZWN0KiBidWlsdGluUmVnRXhwRXhlYyA9IGFzT2JqZWN0KG1fcmVnRXhwUHJvdG90eXBlLT5nZXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmV4ZWMpLmFzQ2VsbCgpKTsKICAgICBtX3JlZ0V4
cFByb3RvRXhlYy5zZXQodm0sIHRoaXMsIGJ1aWx0aW5SZWdFeHBFeGVjKTsKQEAgLTkxMywxMCAr
OTEzLDEwIEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpHZXQpOwogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBiYXNlLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoYmFzZSwgZXhlYywgaWRlbnQsIHNsb3QpOwogICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhdGNoU2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgICAgICAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpOwogICAg
ICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVu
dCk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAg
ICAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgQVNTRVJU
KGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBmdW5jdGlvblZhbHVlKSk7CiAKICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGNvbmRpdGlvbiA9IGdlbmVyYXRlQ29uZGl0
aW9uRm9yU2VsZkVxdWl2YWxlbmNlKG1fdm0sIG51bGxwdHIsIGJhc2UsIGlkZW50LmltcGwoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTIs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICogIENv
cHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtNzUzLDcgKzc1Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0gKICAgICBBU1NFUlQob3BlcmF0
aW9uVmFsdWUuaXNOdW1iZXIoKSk7CiAgICAgYXV0byBvcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxK
U1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24+KG9wZXJhdGlvblZhbHVlLnRvVUludDMyKGV4ZWMp
KTsKICAgICBBU1NFUlQob3BlcmF0aW9uID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6
UmVqZWN0IHx8IG9wZXJhdGlvbiA9PSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRs
ZSk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUo
KS0+cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoZ2xvYmFsT2JqZWN0LCBleGVjLCBwcm9taXNlLCBv
cGVyYXRpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25t
ZW50LmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSw3ICs5MSw3
IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHkKICAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVChyZWRpcmVjdFNsb3Qu
aXNWYWx1ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlZGlyZWN0U2xvdC5nZXRWYWx1
ZShleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nv
cGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgcmVkaXJlY3RTbG90LmF0dHJp
YnV0ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZp
c2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU01vZHVsZUxv
YWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlYwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogICAgIEpTTWFwKiBtYXAgPSBKU01h
cDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLnJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4MCw3IEBAIHZv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENyZWEKICAgICAvLyBodHRwOi8vd3d3
LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFj
ZS1leG90aWMtb2JqZWN0cy1pc2V4dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMt
b2JqZWN0cy1wcmV2ZW50ZXh0ZW5zaW9ucwogICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4
dGVuc2lvbnModGhpcywgZXhlYyk7Ci0gICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4
Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogfQogCiB2b2lkIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAyMTYy
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yODcsNyArMjg3LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIFN0
cmluZ2lmaWVyOjp0b0pTTwogewogICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk2Myw3ICsxOTYzLDcgQEAgSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1p
dGl2ZShFeAogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAKICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTm8gZGVm
YXVsdCB2YWx1ZSIpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyMTYyODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTcsMTIgKzExNywxMiBAQCBpbmxpbmUgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0CiAKICAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nl
c3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0aCA9PSBi
YXNlLT5nZXRBcnJheUxlbmd0aCgpKSB7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgICAgIG51bWJlclN0cnVjdHVy
ZVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKIAogICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2ZWN0b3IgY29udGFpbnMgYWxsIGlu
ZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNvIGRpc2FibGUgaW5kZXhlZCBwcm9w
ZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0byAwLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjM1LDcgKzIzNSw3IEBA
IEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKIAogICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChkZXNjcmlwdG9ycyk7CiAgICAgICAgIGRlc2NyaXB0b3JzLT5wdXRP
d25EYXRhUHJvcGVydHlNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgZnJvbURlc2NyaXB0
b3IsIHNsb3QpOwotICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRv
cnM7CkBAIC00MTksNyArNDE5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vz
c29yKSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAg
ICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iaiwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMTYyODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMTA1LDcgKzEwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG8KICAgICBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Qcm9wZXJ0eUNh
Y2hlID0gdm0uZW5zdXJlSGFzT3duUHJvcGVydHlDYWNoZSgpOwogICAgIGlmIChzdGQ6Om9wdGlv
bmFsPGJvb2w+IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2FjaGUtPmdldChzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgQVNTRVJUKCpyZXN1bHQgPT0gdGhpc09iamVjdC0+aGFz
T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbigqcmVzdWx0KSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNzcsNyArMTc3LDcgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0
aWFsaXplRwogICAgIGZvciAoYXV0byYgZW50cnkgOiB2YXJpYWJsZURlY2xhcmF0aW9ucykgewog
ICAgICAgICBBU1NFUlQoZW50cnkudmFsdWUuaXNWYXIoKSk7CiAgICAgICAgIGdsb2JhbE9iamVj
dC0+YWRkVmFyKGNhbGxGcmFtZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIGVudHJ5LmtleS5n
ZXQoKSkpOwotICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAg
ICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJl
dmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3Mp
KQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0
b3IuYXR0cmlidXRlcygpICYgQWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKSk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAogICAgIC8vIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgc2hv
dWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Qcm9wZXJ0eSBvcGVyYXRp
b24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlz
aW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxOSw3ICs3MTksNyBAQCBTdHJpbmcgU2FtcGxpbmdQ
cm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGNhbGxl
ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgICAg
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUoaWRlbnQpOwogICAgICAgICBib29sIGhhc1Byb3Bl
cnR5ID0gY2FsbGVlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7
CiAgICAgICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBKU1Zh
bHVlIG5hbWVWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMxLDcgKzgzMSw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogICAgIGF1dG8gdmlld1dpdGhT
dHJpbmcgPSBzdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZygqZXhlYyk7CiAgICAgU3Ry
aW5nVmlldyB2aWV3ID0gdmlld1dpdGhTdHJpbmcudmlldzsKLSAgICBBU1NFUlQodmlldy5sZW5n
dGgoKSA9PSAxICYmICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHZpZXcubGVuZ3Ro
KCkgPT0gMSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBVQ2hhciBjaGFy
YWN0ZXIgPSB2aWV3WzBdOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBpZiAoIShjaGFyYWN0
ZXIgJiB+MHhmZikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0
ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MCw3ICs3MCw3IEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IK
ICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwot
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAKICAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5yYXcsIHJhd09iamVjdCwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwog
CkBAIC03OSw3ICs3OSw3IEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRl
T2IKICAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS50ZW1wbGF0ZVJlZ2lzdHJ5S2V5UHJpdmF0ZU5hbWUoKSwgdGVtcGxhdGVL
ZXlPYmplY3QsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIAogICAgIG9iamVj
dENvbnN0cnVjdG9yRnJlZXplKGV4ZWMsIHRlbXBsYXRlT2JqZWN0KTsKLSAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAg
bV90ZW1wbGF0ZU1hcC5zZXQoJnRlbXBsYXRlS2V5LCB0ZW1wbGF0ZU9iamVjdCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE0
LDYgKzYxNCwxMCBAQCB2b2lkIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKCp0aGlz
LCBleGVjLCBleGNlcHRpb24pOwogCiAgICAgc2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisKKyNp
ZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICBtX25hdGl2ZVN0YWNr
VHJhY2VPZkxhc3RUaHJvdyA9IHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPihTdGFja1RyYWNl
OjpjYXB0dXJlU3RhY2tUcmFjZSgyNSkpOworI2VuZGlmCiB9CiAKIEpTVmFsdWUgVk06OnRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aHJvd25WYWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTAg
QEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNlbmRpZgogCisjaWYgRU5BQkxFKEVY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisjaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFNpbXBsZVN0YXRzOwogfSAvLyBuYW1l
c3BhY2UgV1RGCkBAIC02NzQsNiArNjc4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeU5l
ZWRUZXJtaW5hdGlvbigpIHsgbV90cmFwcy5maXJlVHJhcChWTVRyYXBzOjpOZWVkVGVybWluYXRp
b24pOyB9CiAgICAgdm9pZCBub3RpZnlOZWVkV2F0Y2hkb2dDaGVjaygpIHsgbV90cmFwcy5maXJl
VHJhcChWTVRyYXBzOjpOZWVkV2F0Y2hkb2dDaGVjayk7IH0KIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIFN0YWNrVHJhY2UqIG5hdGl2ZVN0YWNrVHJhY2VP
Zkxhc3RUaHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93
LmdldCgpOyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogCkBAIC03MDYsNiArNzE0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAjaWYg
RU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAgICAgIG1fbmVlZEV4Y2Vw
dGlvbkNoZWNrID0gZmFsc2U7CisgICAgICAgIG1fbmF0aXZlU3RhY2tUcmFjZU9mTGFzdFRocm93
ID0gbnVsbHB0cjsKICNlbmRpZgogICAgICAgICBtX2V4Y2VwdGlvbiA9IG51bGxwdHI7CiAgICAg
fQpAQCAtNzUyLDYgKzc2MSw3IEBAIHByaXZhdGU6CiAgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlv
biBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKICAgICB1bnNpZ25lZCBtX3NpbXVsYXRl
ZFRocm93UG9pbnRSZWN1cnNpb25EZXB0aCB7IDAgfTsKICAgICBtdXRhYmxlIGJvb2wgbV9uZWVk
RXhjZXB0aW9uQ2hlY2sgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNl
PiBtX25hdGl2ZVN0YWNrVHJhY2VPZkxhc3RUaHJvdzsKICNlbmRpZgogCiAgICAgYm9vbCBtX2Zh
aWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA0LDcgKzUwNCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01l
bW9yeShFeHByZXMKICAgICAgICAgLy8gZ3JvdygpIGRvZXMgbm90IHJlcXVpcmUgRXhlY1N0YXRl
KiBpZiBpdCBkb2Vzbid0IHRocm93IGV4Y2VwdGlvbnMuCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG51bGxwdHI7IAogICAgICAgICBQYWdlQ291bnQgcmVzdWx0ID0gd2FzbU1lbW9yeS0+Z3Jv
dyh2bSwgZXhlYywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRlbHRhKSwgc2hvdWxkVGhyb3dFeGNl
cHRpb25zT25GYWlsdXJlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAg
IGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzMwLDcgKzMzMCw3IEBAIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3QKICAgICAgICAgICAgICAgICBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRp
b24udGFibGVJbmZvcm1hdGlvbi5tYXhpbXVtKCkpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgSlNXZWJBc3NlbWJseVRhYmxlIHdlJ3ZlIGRl
ZmluZWQuCiAgICAgICAgICAgICAvLyBJZiBpdCdzIGRlZmluZWQgdG8gYmUgdG9vIGxhcmdlLCB3
ZSBzaG91bGQgaGF2ZSB0aHJvd24gYSB2YWxpZGF0aW9uIGVycm9yLgotICAgICAgICAgICAgQVNT
RVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHRocm93U2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAgICAgICAgICAg
ICBpbnN0YW5jZS0+bV90YWJsZS5zZXQodm0sIGluc3RhbmNlLCB0YWJsZSk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE3LTA1LTA2ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgRXhjZXB0aW9uU2NvcGU6OmFzc2VydE5v
RXhjZXB0aW9uKCkgYW5kIHJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNzc2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gQWRkIGFuIG9wdGlvbiB0byBz
a2lwIHNvbWUgbnVtYmVyIG9mIHRvcCBmcmFtZXMgd2hlbiBjYXB0dXJpbmcgdGhlIFN0YWNrVHJh
Y2UuCisgICAgICAgIDIuIEFkZCBhbiBvcHRpb24gdG8gdXNlIGFuIGluZGVudGF0aW9uIHN0cmlu
ZyB3aGVuIGR1bXBpbmcgdGhlIFN0YWNrVHJhY2UuCisKKyAgICAgICAgKiB3dGYvU3RhY2tUcmFj
ZS5jcHA6CisgICAgICAgIChXVEY6OlN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1RyYWNlKToKKyAg
ICAgICAgKFdURjo6U3RhY2tUcmFjZTo6ZHVtcCk6CisgICAgICAgICogd3RmL1N0YWNrVHJhY2Uu
aDoKKwogMjAxNy0wNS0wNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
IAogICAgICAgICBbR1RLXVtKU0NPbmx5XSBNZXJnZSBNYWluVGhyZWFkIGltcGxlbWVudGF0aW9u
cyBhbmQgdXNlIGdlbmVyaWMgb25lCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1RyYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1RyYWNlLmNwcAkocmV2aXNpb24g
MjE2Mjg4KQorKysgU291cmNlL1dURi93dGYvU3RhY2tUcmFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDE3ICs0NCwxOCBAQCBBTFdBWVNfSU5MSU5FIHNpemVfdCBTdGFja1RyYWNlOjppbnN0
YW5jCiAgICAgcmV0dXJuIHNpemVvZihTdGFja1RyYWNlKSArIChjYXBhY2l0eSAtIDEpICogc2l6
ZW9mKHZvaWQqKTsKIH0KIAotU3RhY2tUcmFjZSogU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJh
Y2UoaW50IG1heEZyYW1lcykKK1N0YWNrVHJhY2UqIFN0YWNrVHJhY2U6OmNhcHR1cmVTdGFja1Ry
YWNlKGludCBtYXhGcmFtZXMsIGludCBmcmFtZXNUb1NraXApCiB7CiAgICAgbWF4RnJhbWVzID0g
c3RkOjptYXgoMSwgbWF4RnJhbWVzKTsKICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBpbnN0
YW5jZVNpemUobWF4RnJhbWVzKTsKICAgICBTdGFja1RyYWNlKiB0cmFjZSA9IG5ldyAoTm90TnVs
bCwgZmFzdE1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpIFN0YWNrVHJhY2UoKTsKIAotICAgIHN0YXRp
YyBjb25zdCBpbnQgZnJhbWVzVG9Ta2lwID0gMjsKKyAgICAvLyBTa2lwIDIgYWRkaXRpb25hbCBm
cmFtZXMgaS5lLiBTdGFja1RyYWNlOjpjYXB0dXJlU3RhY2tUcmFjZSBhbmQgV1RGR2V0QmFja3Ry
YWNlLgorICAgIGZyYW1lc1RvU2tpcCArPSAyOwogICAgIGludCBudW1iZXJPZkZyYW1lcyA9IG1h
eEZyYW1lcyArIGZyYW1lc1RvU2tpcDsKIAogICAgIFdURkdldEJhY2t0cmFjZSgmdHJhY2UtPm1f
c2tpcHBlZEZyYW1lMCwgJm51bWJlck9mRnJhbWVzKTsKLSAgICBBU1NFUlQobnVtYmVyT2ZGcmFt
ZXMgPiBmcmFtZXNUb1NraXApOworICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mRnJhbWVzID49
IGZyYW1lc1RvU2tpcCk7CiAgICAgdHJhY2UtPm1fc2l6ZSA9IG51bWJlck9mRnJhbWVzIC0gZnJh
bWVzVG9Ta2lwOwogICAgIHRyYWNlLT5tX2NhcGFjaXR5ID0gbWF4RnJhbWVzOwogCkBAIC04MCw3
ICs4MSw3IEBAIGF1dG8gU3RhY2tUcmFjZTo6ZGVtYW5nbGUodm9pZCogcGMpIC0+IHMKICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi12b2lkIFN0YWNrVHJhY2U6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3ZvaWQgU3RhY2tUcmFjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBjaGFyKiBpbmRlbnRTdHJpbmcpIGNvbnN0CiB7CiAgICAgY29uc3QgYXV0byogc3RhY2sg
PSB0aGlzLT5zdGFjaygpOwogI2lmIEhBVkUoQkFDS1RSQUNFX1NZTUJPTFMpCkBAIC04OSw2ICs5
MCw4IEBAIHZvaWQgU3RhY2tUcmFjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSAKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAKKyAgICBpZiAoIWluZGVudFN0cmluZykKKyAgICAgICAgaW5kZW50
U3RyaW5nID0gIiI7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkgewogICAg
ICAgICBjb25zdCBjaGFyKiBtYW5nbGVkTmFtZSA9IG51bGxwdHI7CiAgICAgICAgIGNvbnN0IGNo
YXIqIGN4YURlbWFuZ2xlZCA9IG51bGxwdHI7CkBAIC0xMDMsOSArMTA2LDkgQEAgdm9pZCBTdGFj
a1RyYWNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIAogI2VuZGlmCiAgICAgICAgIGNvbnN0IGlu
dCBmcmFtZU51bWJlciA9IGkgKyAxOwogICAgICAgICBpZiAobWFuZ2xlZE5hbWUgfHwgY3hhRGVt
YW5nbGVkKQotICAgICAgICAgICAgb3V0LnByaW50ZigiJS0zZCAlcCAlc1xuIiwgZnJhbWVOdW1i
ZXIsIHN0YWNrW2ldLCBjeGFEZW1hbmdsZWQgPyBjeGFEZW1hbmdsZWQgOiBtYW5nbGVkTmFtZSk7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyUtM2QgJXAgJXNcbiIsIGluZGVudFN0cmluZywg
ZnJhbWVOdW1iZXIsIHN0YWNrW2ldLCBjeGFEZW1hbmdsZWQgPyBjeGFEZW1hbmdsZWQgOiBtYW5n
bGVkTmFtZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludGYoIiUtM2QgJXBc
biIsIGZyYW1lTnVtYmVyLCBzdGFja1tpXSk7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcyUt
M2QgJXBcbiIsIGluZGVudFN0cmluZywgZnJhbWVOdW1iZXIsIHN0YWNrW2ldKTsKICAgICB9CiAK
ICNpZiBIQVZFKEJBQ0tUUkFDRV9TWU1CT0xTKQpJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tU
cmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrVHJhY2UuaAkocmV2aXNp
b24gMjE2Mjg4KQorKysgU291cmNlL1dURi93dGYvU3RhY2tUcmFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFByaW50U3RyZWFtOwogY2xhc3MgU3RhY2tUcmFjZSB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0YWNr
VHJhY2UqIGNhcHR1cmVTdGFja1RyYWNlKGludCBtYXhGcmFtZXMpOworICAgIHN0YXRpYyBTdGFj
a1RyYWNlKiBjYXB0dXJlU3RhY2tUcmFjZShpbnQgbWF4RnJhbWVzLCBpbnQgZnJhbWVzVG9Ta2lw
ID0gMCk7CiAKICAgICAvLyBCb3Jyb3dlZCBzdGFjayB0cmFjZS4KICAgICBTdGFja1RyYWNlKHZv
aWQqKiBzdGFjaywgaW50IHNpemUpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3RkOjpvcHRpb25hbDxEZW1hbmdsZUVudHJ5PiBkZW1h
bmdsZSh2b2lkKik7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVh
bSYsIGNvbnN0IGNoYXIqIGluZGVudFN0cmluZyA9IG51bGxwdHIpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IGluc3RhbmNlU2l6ZShpbnQgY2FwYWNpdHkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTctMDUtMDYgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBFeGNlcHRpb25TY29w
ZTo6YXNzZXJ0Tm9FeGNlcHRpb24oKSBhbmQgcmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCkuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE3NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYmVjYXVzZSB0aGVyZSdzIG5vIGJlaGF2aW9yIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LiAg
V2UncmUgb25seQorICAgICAgICByZWZhY3RvcmluZyB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBh
c3NlcnRpb24gdXRpbGl0eSBmdW5jdGlvbi4KKworICAgICAgICAqIE1vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFjZW1lbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRKU0FycmF5RnJvbUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3RyaW5nRnJvbUpT
T04pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9vbGVhbkZyb21KU09OKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6d2hlbkRlZmluZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dO
b3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0ludmFsaWRTdGF0ZUVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93U2VjdXJpdHlFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjp0aHJvd0RPTVN5bnRheEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93RGF0
YUNsb25lRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dJbmRleFNpemVFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjp0aHJvd1R5cGVNaXNtYXRjaEVycm9yKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlVGhp
c1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VHZXR0ZXJUeXBl
RXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3RUYXNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGxQcm9taXNlRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd01pY3Jv
dGFza0NhbGxiYWNrOjpjYWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6fkpT
TWFpblRocmVhZEV4ZWNTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyOjppc0NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbUxvY2tlZCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6ZW5xdWV1
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJh
dGVTZXJpYWxpemVyRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnNlcmlhbGl6
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbDo6c2VyaWFsaXplKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpn
ZXRUeXBlRmxhZ3MpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJv
bHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMpOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKwogMjAxNy0wNS0w
NSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgVFVSTlMgZ2F0
aGVyaW5nIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDAsNyAr
MjAwLDcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIGlm
IChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBKU0M6OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2Vt
ZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBKU0M6OkNhbGxEYXRhIGNh
bGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsK
ICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIzMyw3ICsyMzMs
NyBAQCAgICAgLy8gR2V0IHRoZSBzY3JpcHRpbmcgaW50ZXJmYWNlLgogICAgIHZhbHVlID0gcmVw
bGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2Ny
aXB0T2JqZWN0IikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVj
dChleGVjKTsKLSAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgaWYgKCFtX3NjcmlwdE9iamVj
dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIGJvb2wgZ2V0SlNBcnJheUZy
b21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZh
bHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICgh
aXNKU0FycmF5KHZhbHVlKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
U3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNPTiBrZXkiLCAg
a2V5KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIGJv
b2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwot
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAg
ICAgIC8vIENhbiBnZXQgYW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24uCiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMg
Ym9vbCBnZXRCb29sZWFuRnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7
Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKICAgICBpZiAoIWpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIGJvb2xlYW4g
dmFsdWUgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0
cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNiw3ICsyMDYsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5Ojp3aGVuRGVmCiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7CiAgICAgICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoc3RhdGUsICpn
bG9iYWxPYmplY3QoKSwgKnByb21pc2VEZWZlcnJlZCk7Ci0gICAgICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAg
ICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01FeGNlcHRpb25IYW5kbGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdl
aW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1
ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgpAQCAtMjA1LDcgKzIwNSw3IEBAIEpTVmFsdWUgY3Jl
YXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSYgc3QKIAogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25T
bG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQogewotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBX
VEZNb3ZlKGV4Y2VwdGlvbikpKTsKIH0KICAgICAKQEAgLTI0OCwyNyArMjQ4LDI3IEBAIHZvaWQg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXgKIAogdm9pZCB0aHJvd05vdFN1cHBv
cnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkK
IHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7CiB9CiAKIHZvaWQgdGhyb3dOb3RT
dXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBTdHJpbmcgbWVzc2FnZVN0
cmluZyhtZXNzYWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsK
IH0KIAogdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJS
LCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOwogfQogCkBAIC0z
NzksMjUgKzM3OSwyNSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhp
CiAKIHZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7CiB9CiAKIHZv
aWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRBX0NMT05FX0VSUikpOwogfQogCiB2b2lk
IHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQogewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKIH0KIAogdm9pZCB0
aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKIHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw5ICs4MSw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVRoaXNUeXAKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUgPSBleGVjU3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VS
VF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKICAgICBhdXRvIGZ1bmN0aW9uTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VUaGlzVHlwZUVycm9y
TWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRhKCksIGZ1bmN0aW9uTmFtZS51dGY4KCku
ZGF0YSgpKSkpOwogfQogCkBAIC05NSw5ICs5NSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZUdldHRlclQKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFz
Y29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBh
dXRvIGF0dHJpYnV0ZU5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0
cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZh
Y2VOYW1lLnV0ZjgoKS5kYXRhKCksIGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdFRhc2suY3BwCShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDcgKzY2
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNr
KGV4ZWMsIG1fdGFzayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdGFzay0+cnVuKGV4
ZWMpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0KIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCShyZXZpc2lvbiAy
MTYyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMzUsNyArMjM1LDcgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlz
ZUZ1bmN0aW9uKAogICAgIHByb21pc2VGdW5jdGlvbihzdGF0ZSwgRGVmZXJyZWRQcm9taXNlOjpj
cmVhdGUoZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVkKSk7CiAKICAgICByZWplY3RQcm9t
aXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3QsICpwcm9taXNlRGVmZXJy
ZWQpOwotICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CisgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5w
cm9taXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1
KQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNldmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNldmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQogICogIENvcHlyaWdodCAoYykgMjAxNSBDYW5vbiBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKIAog
ICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnJ1blRhc2soZXhlYywgbV90YXNrKTsKIAot
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAg
ICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
CShyZXZpc2lvbiAyMTYyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgog
ICAgICAgICBKU0M6OlZNJiB2bSA9IHNfbWFpblRocmVhZFN0YXRlLT52bSgpOwogICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRp
b24oKSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAKICAgICAgICAgSlND
OjpFeGVjU3RhdGUqIHN0YXRlID0gc19tYWluVGhyZWFkU3RhdGU7CiAgICAgICAgIGJvb2wgZGlk
RXhpdEphdmFTY3JpcHQgPSBzX21haW5UaHJlYWRTdGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNiBDYW5vbiBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzgs
NyArNzgsNyBAQCBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6OmlzCiAKICAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7CiAgICAgYXV0byByZWFkYWJsZVN0cmVhbSA9IG1fanNDb250cm9sbGVyLT5nZXQo
JnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVh
bVByaXZhdGVOYW1lKCkpOwotICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRp
b24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAogICAgIGF1dG8qIGlzTG9j
a2VkID0gZ2xvYmFsT2JqZWN0LmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0KCk7CiAg
ICAgQVNTRVJUKGlzTG9ja2VkKTsKQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBSZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyOjppcwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJlYW0pOwogICAgIGF1dG8g
cmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHN0YXRlLCBpc0xvY2tlZCwgSlNDOjpqc1VuZGVmaW5lZCgp
LCBhcmd1bWVudHMpOwotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAKICAgICByZXR1cm4gcmVzdWx0LmlzVHJ1ZSgpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBD
YW5vbiBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
LCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAyLDcgKzEwMyw3
IEBAIGlubGluZSBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2wKICAgICBhdXRvIGNo
dW5rID0gSlNDOjpVaW50OEFycmF5OjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCAwLCBsZW5ndGgp
OwogICAgIEFTU0VSVChjaHVuayk7CiAgICAgZW5xdWV1ZShzdGF0ZSwgdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIGNodW5rLmdldCgpKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjU0Miw3ICsyNTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIFNpbmNlIHdlIGFyZSBjbG9uaW5nIGEgSlNXZWJBc3NlbWJseU1vZHVsZSwgaXQncyBpbXBv
c3NpYmxlIGZvciB0aGF0CiAgICAgICAgICAgICAvLyBtb2R1bGUgdG8gbm90IGhhdmUgYmVlbiBh
IHZhbGlkIG1vZHVsZS4gVGhlcmVmb3JlLCBjcmVhdGVTdHViIHNob3VsZAogICAgICAgICAgICAg
Ly8gbm90IHRyb3cuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOworICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC00NTUyLDcgKzQ1NTIsNyBAQCBzdWIgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24KICAg
ICAgICAgbXkgJG5hbWUgPSAkYXR0cmlidXRlLT5uYW1lOwogICAgICAgICBteSAkZ2V0RnVuY3Rp
b25OYW1lID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAk
YXR0cmlidXRlKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9
VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKCF0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1WYWx1ZSk7XG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9u
IDIxNjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDcgKzM0Myw3IEBAIEpTQzo6SlNPYmpl
Y3QqIEpTVGVzdE5vZGU6OnNlcmlhbGl6ZShFeGUKICAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChzdGF0ZSk7CiAKICAgICBhdXRvIG5hbWVWYWx1ZSA9IGpzVGVzdE5vZGVO
YW1lR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIm5hbWUiKSwgbmFtZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3ODQsMTkgKzg3ODQs
MTkgQEAgSlNDOjpKU09iamVjdCogSlNUZXN0T2JqOjpzZXJpYWxpemUoRXhlYwogICAgIGF1dG8q
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKIAogICAgIGF1dG8gY3JlYXRl
VmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dT
Y29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd1Nj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIGNyZWF0ZVZhbHVlKTsKIAogICAgIGF1
dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJH
ZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
cmVhZE9ubHlTdHJpbmdBdHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsKIAogICAgIGF1
dG8gZW51bUF0dHJWYWx1ZSA9IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVudW1BdHRyIiksIGVudW1BdHRy
VmFsdWUpOwogCiAgICAgYXV0byBsb25nQXR0clZhbHVlID0ganNUZXN0T2JqTG9uZ0F0dHJHZXR0
ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgQVNTRVJUKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9u
Z0F0dHIiKSwgbG9uZ0F0dHJWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDYsMjMgKzQwNiwyMyBAQCBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemF0aW9uOjpzZXJpCiAgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3Qoc3RhdGUpOwogCiAgICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0
U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIiks
IGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUpOwogCiAgICAgYXV0byBzZWNvbmRMb25nQXR0cmli
dXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcigq
c3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJzZWNvbmRM
b25nQXR0cmlidXRlIiksIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICBhdXRvIGZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlv
bkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcigqc3RhdGUsICp0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUiKSwgZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlVmFsdWUpOwog
CiAgICAgYXV0byBmaWZ0aExvbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25G
aWZ0aExvbmdBdHRyaWJ1dGVHZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd1Njb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiZmlmdGhMb25nQXR0cmlidXRlIiksIGZpZnRoTG9uZ0F0dHJpYnV0
ZVZhbHVlKTsKIAogICAgIGF1dG8gc2l4dGhUeXBlZGVmQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RT
ZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIp
LCBzaXh0aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCShyZXZpc2lvbiAy
MTYyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcg
QEAgSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaQogICAgIGF1dG8qIHJl
c3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb246OnNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7CiAKICAgICBhdXRvIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKCpzdGF0ZSwg
KnRoaXNPYmplY3QsIHRocm93U2NvcGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CisgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImluaGVyaXRMb25nQXR0
cmlidXRlIiksIGluaGVyaXRMb25nQXR0cmlidXRlVmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bC5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIEpTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRp
b25JbmhlcmkKICAgICBhdXRvKiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6
c2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKIAogICAgIGF1dG8gZmlu
YWxMb25nQXR0cmlidXRlQmFyVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
RmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dTY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIpLCBmaW5hbExvbmdB
dHRyaWJ1dGVCYXJWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHJldmlzaW9uIDIxNjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNiw3
ICsxMDYsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldFR5cGVGbGFncyhFeGVjCiAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBKU09iamVjdCogb2JqZWN0ID0gdHlwZVZhbHVl
LnRvT2JqZWN0KCZleGVjKTsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghaXNKU0FycmF5KG9iamVjdCkpCiAg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZs
YWdzQXJyYXk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMjE2Mjg4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgxMCw3ICs2ODEwLDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgIGFyZ0xpc3QuYXBwZW5kKG1lZGlhQ29u
dHJvbHNIb3N0SlNXcmFwcGVyKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVu
Y3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEpTQzo6Q2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9
PSBKU0M6OkNhbGxUeXBlOjpOb25lKQpAQCAtNjgyNCw3ICs2ODI0LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogCiAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEs
IE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91
dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICBKU0M6OkpTT2JqZWN0KiBtZWRpYUpTV3JhcHBlck9i
amVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpJ
ZGVudGlmaWVyIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
Yy0+dm0oKSwgImNvbnRyb2xzSG9zdCIpOwogICAgIAogICAgIEFTU0VSVCghbWVkaWFKU1dyYXBw
ZXJPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGNvbnRyb2xzSG9zdCkpOwpAQCAtNjg5NCw3ICs2
ODk0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRybwogICAgICAg
ICByZXR1cm47CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUu
dG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAg
IEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxs
VHlwZTo6Tm9uZSkKQEAgLTY5MzYsNyArNjkzNiw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50
OjpnZXRDdXJyZW50TWVkaWEKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBK
U0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0g
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIxNjI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw4ICszNjYsOCBAQCB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMg
ZmlsZSBwcm92aWRlcyBhIGNyZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxl
KSBmdW5jdGlvbi4KICAgICBhdXRvKiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LmdldCgmc3RhdGUs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjcmVhdGVPdmVybGF5IikpLnRv
T2JqZWN0KCZzdGF0ZSk7CisgICAgQVNTRVJUKCFvdmVybGF5ID09ICEhc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIGlmICghb3ZlcmxheSkgewotICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQo=
</data>
<flag name="review"
          id="330485"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>