<?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>184316</bug_id>
          
          <creation_ts>2018-04-04 14:38:19 -0700</creation_ts>
          <short_desc>Add pointer profiling support to the DFG and supporting files.</short_desc>
          <delta_ts>2018-04-04 21:31:03 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>184324</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411887</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-04 14:38:19 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411888</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-04 14:39:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/39188524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411955</commentid>
    <comment_count>2</comment_count>
      <attachid>337245</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-04 17:17:10 -0700</bug_when>
    <thetext>Created attachment 337245
proposed patch.

Let&apos;s get some baking time on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411957</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-04 17:19:40 -0700</bug_when>
    <thetext>Attachment 337245 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:170:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 1 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411962</commentid>
    <comment_count>4</comment_count>
      <attachid>337245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-04 17:37:22 -0700</bug_when>
    <thetext>Comment on attachment 337245
proposed patch.

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

&gt; Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:137
&gt; +        jit.call(scratchRegister, B3CCallPtrTag);

This might be OK, but can you file a bug for passing the ptrtag to the CCallValue, so that the client of B3 can select what tag is used for each call they emit?

&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:755
&gt; +#if USE(POINTER_PROFILING)
&gt; +            void* oldEntrySP = cpu.fp&lt;uint8_t*&gt;() + sizeof(CallerFrameAndPC);
&gt; +            void* newEntrySP = cpu.fp&lt;uint8_t*&gt;() + inlineCallFrame-&gt;returnPCOffset() + sizeof(void*);
&gt; +            returnPC = retagCodePtr(returnPC, bitwise_cast&lt;PtrTag&gt;(oldEntrySP), bitwise_cast&lt;PtrTag&gt;(newEntrySP));
&gt; +#endif

Wait... won&apos;t this fail miserably if the OSR exit is reused at a different stack height?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411964</commentid>
    <comment_count>5</comment_count>
      <attachid>337245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-04 17:43:45 -0700</bug_when>
    <thetext>Comment on attachment 337245
proposed patch.

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

OK, now that Mark explained this to me, I get it.  r=me

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:755
&gt;&gt; +#endif
&gt; 
&gt; Wait... won&apos;t this fail miserably if the OSR exit is reused at a different stack height?

Never mind, this is the probe code.  It&apos;s right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411994</commentid>
    <comment_count>6</comment_count>
      <attachid>337254</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-04 20:07:22 -0700</bug_when>
    <thetext>Created attachment 337254
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411995</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-04 20:10:15 -0700</bug_when>
    <thetext>Attachment 337254 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h:170:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 1 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412007</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-04-04 21:31:03 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r230294: &lt;http://trac.webkit.org/r230294&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337245</attachid>
            <date>2018-04-04 17:17:10 -0700</date>
            <delta_ts>2018-04-04 20:07:22 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184316.patch</filename>
            <type>text/plain</type>
            <size>93987</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxOC0wNC0wNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgdG8gdGhlIERGRyBhbmQgc3VwcG9ydGluZyBm
aWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NDMxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzkxODg1MjQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gUHJvZmlsZSBsb3RzIG9mIHBvaW50
ZXJzIHdpdGggUHRyVGFncy4KKworICAgICAgICAyLiBSZW1vdmUgUHRyVGFnLmNwcCBhbmQgbWFr
ZSBwdHJUYWdOYW1lKCkgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24uICBJdCdzIG9ubHkKKyAgICAg
ICAgICAgdXNlZCBmb3IgZGVidWdnaW5nIGFueXdheSwgYW5kIG5vdCBub3JtYWxseSBjYWxsZWQg
aW4gdGhlIGNvZGUuICBNYWtpbmcgaXQKKyAgICAgICAgICAgYW4gaW5saW5lIGZ1bmN0aW9uIHBy
ZXZlbnRzIGl0IGZyb20gdGFraW5nIHVwIGNvZGUgc3BhY2UgaW4gYnVpbGRzIHdoZW4gbm90IGlu
CisgICAgICAgICAgIHVzZS4KKworICAgICAgICAzLiBDaGFuZ2UgdGhlIGNhbGwgdG8gdGhlIHRo
ZSBhcml0eUZpeHVwVGh1bmsgaW4gREZHIGNvZGUgdG8gYmUgYSBuZWFyIGNhbGwuCisgICAgICAg
ICAgIEl0IGRvZXNuJ3QgbmVlZCB0byBiZSBhIGZhciBjYWxsLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1h
c20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKToK
KyAgICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpnZW5l
cmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOgorICAgICAgICAqIGIz
L3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAg
IChKU0M6OkhhbmRsZXJJbmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdl
bmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bm90aWNlQ2F0Y2hFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgICog
ZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9U
YXJnZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
aGFuZGxlRXhpdENvdW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyk6CisgICAgICAgIChKU0M6OkRGRzo6b3NyV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxS
ZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6
Q2FsbFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjp1bnBhY2tBbmRHZW5lcmF0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWF0aElDKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsU2V0UmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkV2l0aFRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3Ny
RXhpdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKiBqaXQvSklUTWF0aElDLmg6CisgICAgICAgIChKU0M6OmlzUHJvZmlsZUVtcHR5
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2gu
Y3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3Ip
OgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6dW5saW5rRm9yKToK
KyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1v
cnBoaWNDYWxsKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAg
KEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6
CisgICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp1bnJl
YWNoYWJsZUdlbmVyYXRvcik6CisgICAgICAgICogcnVudGltZS9QdHJUYWcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgIChKU0M6OnB0clRhZ05hbWUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKiB3YXNtL2pz
L1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDE4LTA0
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHBv
aXNvbmluZyBvZiB0eXBlZCBhcnJheSB2ZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAgICAgcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5jcHAKICAgICBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL09iamVj
dENvbnN0cnVjdG9yLmNwcAotICAgIHJ1bnRpbWUvUHRyVGFnLmNwcAogICAgIHJ1bnRpbWUvUmVm
bGVjdE9iamVjdC5jcHAKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAogICAgIHJ1
bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC04NzIsNyArODcyLDYgQEAgcnVudGltZS9PYmplY3RJbml0aWFs
aXphdGlvblNjb3BlLmNwcAogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCiBydW50aW1lL09w
ZXJhdGlvbnMuY3BwCiBydW50aW1lL09wdGlvbnMuY3BwCi1ydW50aW1lL1B0clRhZy5jcHAKIHJ1
bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCiBydW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVy
LmNwcAogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MDAsNyArNDcwMCw2IEBACiAJCUZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNl
cHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5
MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU2QzFF
NTcyMDNGRjZFMjAwQkRDMkI3IC8qIFB0clRhZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQdHJUYWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTZGNTZEQzFFNjRFOTIwMDBEMTc4MDEgLyogVk1UcmFwcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWTVRyYXBzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU2RjU2REQxRTY0RTkyMDAwRDE3ODAxIC8qIFZNVHJhcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UcmFwcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYXRjaFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02ODc2LDcgKzY4NzUsNiBAQAogCQkJCTc5QjAwQ0JCMUM2QUIwN0UwMDg4QzY1
RCAvKiBQcm94eU9iamVjdC5oICovLAogCQkJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQ
cm94eVJldm9rZS5jcHAgKi8sCiAJCQkJNzkxNjBEQkMxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5
UmV2b2tlLmggKi8sCi0JCQkJRkU2QzFFNTcyMDNGRjZFMjAwQkRDMkI3IC8qIFB0clRhZy5jcHAg
Ki8sCiAJCQkJRkU5QUUxQzgyMDMyQzg4NzAwMkI2OTM0IC8qIFB0clRhZy5oICovLAogCQkJCTBG
NTc4MEExMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggKi8sCiAJCQkJMEYwQ0Q0QzAxNUYx
QTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDIzMDI3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MTAsNyArNjEwLDcgQEAgdm9pZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1D
b3VudGVyKCkKICAgICAgICAgLy8gV3JpdGUgZXhwZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lz
dGVycy4KICAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsK
ICAgICAgICAgICAgIHByb2JlQ2FsbENvdW50Kys7Ci0gICAgICAgICAgICBjb250ZXh0LmNwdS5w
YygpID0gY29udGludWF0aW9uLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29kZVB0cihjb250aW51YXRpb24uY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOwogICAgICAgICB9KTsKIAogICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMzAy
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwNiwxMyArNTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJSZWcgaW5kZXggPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJSZWcgcG9pc29uU2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxl
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcg
c3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRjaCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhYmxl
KSwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIGluZGV4LCBDQ2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkp
LCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC54b3I2NChwb2lzb25TY3Jh
dGNoLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gs
IHRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoLCBzd2l0Y2hU
YWcpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBsYWJlbHMgYXJlIGd1YXJh
bnRlZWQgdG8gYmUgcG9wdWxhdGVkIGJlZm9yZSBlaXRoZXIgbGF0ZSBwYXRocyBvcgogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbGluayB0YXNrcyBydW4uCkBAIC01MjEsMTQgKzUyMSwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5oYW5kbGVkSW5kZXgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBmYWxsVGhyb3VnaCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzLmxhc3QoKSwgdGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBmYWxsVGhyb3VnaCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzLmxhc3QoKSwg
c3dpdGNoVGFnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHRhYmxlU2l6ZTsgaS0tOykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdW1wVGFibGVbaV0gPSBmYWxsVGhyb3VnaDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGFiZWxJbmRleCA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdGFibGVJbmRleCA6IGhh
bmRsZWRJbmRpY2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcFRh
YmxlW3RhYmxlSW5kZXhdID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHNbbGFiZWxJbmRl
eCsrXSwgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJs
ZVt0YWJsZUluZGV4XSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2xhYmVsSW5kZXgr
K10sIHN3aXRjaFRhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNDMsMTMgKzEzMDQz
LDEzIEBAIHZvaWQgdGVzdEludGVycHJldGVyKCkKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRj
aCk7CiAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0
Y2gsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7
CiAgICAgICAgICAgICBqaXQueG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQo
KSk7Ci0gICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoLCB0YWcpOworICAgICAgICAgICAgUHRy
VGFnIHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgbmV4dFB0clRhZ0lEKCkp
OworICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgc3dpdGNoVGFnKTsKIAogICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgIFsmLCBqdW1wVGFibGUsIGxhYmVs
c10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGFiZWxzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
IGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2ldLCB0YWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW2ldID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKCpsYWJlbHNbaV0sIHN3aXRjaFRhZyk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0pOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMjkg
KzEzNCwxNCBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0CiAgICAg
Y2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6QmlnSW1tOgogICAgICAgICBqaXQubW92ZShp
bnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5hc1RydXN0ZWRJbW1QdHIoKSwgc2NyYXRjaFJlZ2lz
dGVyKTsKLSNpZiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCi0gICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihCM0NDYWxsUHRyVGFnKSwgcHRyVGFnUmVnaXN0ZXIpOwot
ICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIsIHB0clRhZ1JlZ2lzdGVyKTsKLSNlbHNl
Ci0gICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3RlciwgTm9QdHJUYWcpOwotI2VuZGlmCisg
ICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3RlciwgQjNDQ2FsbFB0clRhZyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQXJnOjpUbXA6Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQjNDQ2FsbFB0clRh
ZyksIHB0clRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzW2NhbGxlZUFy
Z09mZnNldF0uZ3ByKCksIHB0clRhZ1JlZ2lzdGVyKTsKLSNlbHNlCi0gICAgICAgIGppdC5jYWxs
KGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmdwcigpLCBOb1B0clRhZyk7Ci0jZW5kaWYKKyAg
ICAgICAgaml0LmNhbGwoaW5zdC5hcmdzW2NhbGxlZUFyZ09mZnNldF0uZ3ByKCksIEIzQ0NhbGxQ
dHJUYWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFyZzo6QWRkcjoKICAgICBjYXNlIEFy
Zzo6RXh0ZW5kZWRPZmZzZXRBZGRyOgotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKLSAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEIzQ0NhbGxQdHJUYWcpLCBw
dHJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZz
ZXRdLmFzQWRkcmVzcygpLCBwdHJUYWdSZWdpc3Rlcik7Ci0jZWxzZQotICAgICAgICBqaXQuY2Fs
bChpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5hc0FkZHJlc3MoKSwgTm9QdHJUYWcpOwotI2Vu
ZGlmCisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmFzQWRkcmVz
cygpLCBCM0NDYWxsUHRyVGFnKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMjMwMjc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsOSArNTAsNiBAQCBwdWJsaWM6CiAgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRz
IGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25s
eSB0aGluZyB0aGF0IGNhdXNlcwogICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0
byBDIGNhbGxzLgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOwotI2lmIFVTRShQT0lOVEVSX1BST0ZJ
TElORykKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHB0clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIxOwotI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2Fs
bGJhY2s+JikgZmluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMiw5ICs4MjIs
MTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVz
c09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CiAKKyAgICAgICAgICAgICAgICBQdHJU
YWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZtKTsKICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKLSAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1
ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgJKHJldmlzaW9uIDIzMDI3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExMyw2ICsxMTMsNyBAQCBzdHJ1Y3QgSGFuZGxlckluZm8gOiBwdWJsaWMgSGFu
ZGxlckluZm9CCiAgICAgewogICAgICAgICBpbml0aWFsaXplKHVubGlua2VkSW5mbyk7CiAgICAg
ICAgIG5hdGl2ZUNvZGUgPSBsYWJlbDsKKyAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5hdGl2
ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAg
fQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbmF0aXZlQ29kZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2
aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDcgKzUzOSw3IEBAIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9sZEhhbmRsZXIubmF0aXZl
Q29kZSk7CiAKICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyBoYW5kbGVyVG9SZWdpc3RlciA9
IG9sZEhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIubmF0aXZlQ29k
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtYWtlc2hpZnRDYXRjaEhhbmRsZXIsIE5lYXJKdW1w
UHRyVGFnKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZyk7CiAgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIuc3RhcnQgPSBu
ZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVyVG9SZWdpc3Rlci5lbmQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKSAr
IDE7CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKGhh
bmRsZXJUb1JlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw4
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgcG9r
ZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQo
Y2FsbChOb1B0clRhZyksIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsK
KyAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0
UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwo
Y2FsbFRhZyksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUsIGNhbGxUYWcpKSk7CiAKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7
CiAgICAgfQpAQCAtMTgwLDcgKzE4MSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNl
cHRpb25IYW5kbGUKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAg
ICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChOb1B0clRhZyksIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKTsKKyAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVj
b3JkKGNhbGwoY2FsbFRhZyksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNh
bGxUYWcpKSk7CiAKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAg
fQpAQCAtMjE0LDE0ICsyMTYsMTUgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogICAgICAgICAKICAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNo
VGFibGVJbmRleCk7CiAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIHRhYmxl
LmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2guYmxvY2stPmluZGV4XSwgTm9QdHJUYWcpOworICAgICAgICBQdHJUYWcgc3dpdGNo
VGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOworICAgICAgICB0YWJsZS5j
dGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxU
aHJvdWdoLmJsb2NrLT5pbmRleF0sIHN3aXRjaFRhZyk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNl
dHMuZ3Jvdyh0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFibGUu
Y3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBt
eUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNh
c2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxlLm1pbl0gPQotICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRh
cmdldC5ibG9jay0+aW5kZXhdLCBOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LmJsb2NrLT5pbmRleF0sIHN3
aXRjaFRhZyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNDQsNyArMjQ3LDkgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAg
ICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tk
YXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0sIE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFn
IHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKKworICAgICAg
ICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tk
YXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0sIHN3aXRjaFRhZyk7CiAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9m
ZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjUzLDcgKzI1OCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2Um
IG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0
VGFibGUuZmluZChteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNl
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9j
ay0+aW5kZXhdLCBOb1B0clRhZyk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5jdGlPZmZzZXQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2st
PmluZGV4XSwgc3dpdGNoVGFnKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjc1LDcgKzI4MCw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgaW5m
by5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAgICAgICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0g
TWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0
YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9kb25lLCBOb1B0clRhZykpOwor
ICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUp
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lU2l6ZSA+PSAwKTsKICAgICAgICAgaW5m
by5wYXRjaC5pbmxpbmVTaXplID0gaW5saW5lU2l6ZTsKIApAQCAtMjgzLDEyICsyODgsMTQgQEAg
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgc3Rh
cnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5j
YWxsKCkpKTsKIAogICAgICAgICBpbmZvLnBhdGNoLmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0
YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAg
ICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVy
YXRvci0+bGFiZWwoKSwgTm9QdHJUYWcpKTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAg
IH0KICAgICAKKyAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0o
KSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0gRnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQ
dHJUYWcpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IG1fanNDYWxscykgewogICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGlu
ayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQu
c2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMo
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChyZWNvcmQuc2xvd0NhbGwpKSwKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
bmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQudGFyZ2V0VG9DaGVjaykpLApAQCAtMjk3LDEwICsz
MDQsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAog
ICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiByZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwotICAgICAgICBsaW5r
QnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xv
d1BhdGgsIE5vUHRyVGFnKSk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCwgTmVhckNhbGxQdHJUYWcpKTsK
ICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25zKAogICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwoKSwKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1Bh
dGgsIE5vUHRyVGFnKSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQu
c2xvd1BhdGgsIE5lYXJDYWxsUHRyVGFnKSwKICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKHJlY29yZC5jYWxsKSk7CiAgICAgfQogICAgIApAQCAtMzA4LDcgKzMxNSw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBpbmZvLnNldENhbGxMb2Nh
dGlvbnMoCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJs
ZUp1bXApLAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0
aCwgTm9QdHJUYWcpLAorICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5z
bG93UGF0aCwgTmVhckNhbGxQdHJUYWcpLAogICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwocmVjb3JkLmNhbGwpKTsKICAgICB9CiAgICAgCkBAIC0zMjMsOCArMzMwLDgg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICB9CiAg
ICAgICAgIGlmIChpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UuaXNTZXQoKSkgewogICAgICAgICAg
ICAgbV9qaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2Vt
ZW50KAotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1fcmVwbGFj
ZW1lbnRTb3VyY2UsIE5vUHRyVGFnKSwKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5vUHRyVGFnKSkpOworICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2Us
IE5lYXJKdW1wUHRyVGFnKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5lYXJKdW1wUHRyVGFnKSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtMzM0LDcgKzM0MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4mIGxhYmVscyA9
IG1fZXhpdFNpdGVMYWJlbHNbaV07CiAgICAgICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IGFk
ZHJlc3NlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsYWJlbHMuc2l6
ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobGFiZWxzW2pdLCBOb1B0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWxz
W2pdLCBERkdPU1JFeGl0UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAg
IG1fZ3JhcGguY29tcGlsYXRpb24oKS0+YWRkT1NSRXhpdFNpdGUoYWRkcmVzc2VzKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZQpAQCAtMzUxLDcgKzM1OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIC8vIGkuZSwgd2UgZXhwbGljaXRseSBl
bWl0dGVkIGFuIGV4Y2VwdGlvbkNoZWNrIHRoYXQgd2Uga25vdyB3aWxsIGJlIGNhdWdodCBpbiB0
aGlzIG1hY2hpbmUgZnJhbWUuCiAgICAgICAgICAgICAvLyBJZiB0aGlzICppcyBzZXQqLCBpdCBt
ZWFucyB3ZSB3aWxsIGJlIGxhbmRpbmcgYXQgdGhpcyBjb2RlIGxvY2F0aW9uIGZyb20gZ2VuZXJp
Y1Vud2luZCBmcm9tIGFuCiAgICAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2hp
bGQgY2FsbCBmcmFtZS4KLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhdGNoTGFiZWwg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5v
UHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhdGNoTGFiZWwgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWcpOwogICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3RXhjZXB0aW9uSGFu
ZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uYmFzZWxpbmVFeGNl
cHRpb25IYW5kbGVyOwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1fZXhj
ZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNpdGVJbmRleDsKICAgICAgICAg
ICAgIG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZS5iaXRzKCk7CkBAIC01MDQs
OSArNTExLDkgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBicmFu
Y2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhmcm9tQXJpdHlD
aGVjaywgdGhpcyk7CiAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAg
ICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIG1fY2FsbEFyaXR5Rml4dXAgPSBjYWxsKE5vUHRyVGFnKTsKKyAgICBDYWxsIGNhbGxBcml0
eUZpeHVwID0gbmVhckNhbGwoKTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKLSAgICAKKwog
ICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgogICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNs
b3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcik7CiAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMo
KSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKQEAgLTUz
MCwxMSArNTM3LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAg
bV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChD
b2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCi0gICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0
eUZpeHVwLCBGdW5jdGlvblB0cih2bSgpLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9u
UHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0
clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgpKSwgTmVhckNhbGxQdHJUYWcpKSk7CiAKICAgICBk
aXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0
aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjaywgTm9QdHJU
YWcpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZm
ZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRh
Zyk7CiAKICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJ
VEZpbmFsaXplcj4oCiAgICAgICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5v
bk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spOwpAQCAtNTc0LDcg
KzU4MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlzQ2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxF
QVNFX0FTU0VSVChiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFu
IGVudHJ5cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRlZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5j
b21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCwgTm9QdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7CisgICAgbV9qaXRDb2RlLT5jb21tb24uYXBw
ZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGJsb2NrSGVhZCwgRXhjZXB0aW9uSGFuZGxlclB0clRhZykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxl
cjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6Okxh
YmVsIGJsb2NrSGVhZCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDIzMDI3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE1NiwxMCArMTU2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAg
ICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnID0gQ0Z1bmN0
aW9uUHRyVGFnKQogICAgIHsKLSAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE5vUHRy
VGFnKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoZnVuY3Rpb25DYWxs
LCBmdW5jdGlvbikpOworICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwodGFnKTsKKyAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoZnVuY3Rpb25DYWxsLCBGdW5jdGlv
blB0cihmdW5jdGlvbiwgdGFnKSkpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAg
IH0KICAgICAKQEAgLTM2NCw3ICszNjQsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgVmVjdG9y
PEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdEluZm8+IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRD
YWxsU2l0ZXM7CiAgICAgCi0gICAgQ2FsbCBtX2NhbGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1f
YXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3Vs
YXRpdmU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJ
KHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjczLDggKzI3Myw4IEBAIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiB1c2luZyB0YXJnZXQgUEMgJXAuXG4iLCB0YXJn
ZXRQQyk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0UEMpOwotICAgICpiaXR3aXNlX2Nhc3Q8
dm9pZCoqPihzY3JhdGNoICsgMSkgPSB0YXJnZXRQQzsKLSAgICAKKyAgICAqYml0d2lzZV9jYXN0
PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBDb2RlRW50cnlQ
dHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKwogICAgIFJlZ2lzdGVyKiBwaXZv
dCA9IHNjcmF0Y2ggKyAyICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CiAgICAg
CiAgICAgZm9yIChpbnQgaW5kZXggPSAtQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7
IGluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUZyYW1lU2l6ZSk7ICsraW5kZXgpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24g
MjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCwxMSBAQCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRD
YWxsRnJhbWVzKENvbnRlCiAgICAgICAgIGlmICghdHJ1ZUNhbGxlcikgewogICAgICAgICAgICAg
QVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOwogICAgICAgICAgICAgdm9pZCogcmV0
dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7Cisj
aWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9
IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICAgICAg
ICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJh
bWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgcmV0dXJu
UEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5
U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CisjZW5kaWYKICAgICAgICAg
ICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBy
ZXR1cm5QQyk7CiAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTc4Nyw2
ICs3OTIsMTAgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZQogICAg
ICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAg
ICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogCisjaWYgVVNF
KFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICAgICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5m
cDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVv
Zih2b2lkKik7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0
LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CisjZW5kaWYKICAgICAgICAgICAg
IGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1w
VGFyZ2V0KTsKICAgICAgICAgfQogCkBAIC04NjAsNyArODY5LDcgQEAgc3RhdGljIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleAogICAgIH0KIAogICAgIHZtLnRvcENhbGxGcmFtZSA9
IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLSAgICBjb250ZXh0LnBjKCkgPSBqdW1wVGFyZ2V0
OworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBDb2RlRW50cnlQ
dHJUYWcpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwg
dWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQpAQCAtOTg5LDE4ICs5
OTgsMTkgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbAogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25DcmVhdGVEaXJl
Y3RBcmd1bWVudHNEdXJpbmdFeGl0KSwgZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzRHVyaW5nRXhpdCk+Ojp2YWx1ZSwgIldlIGFzc3VtZSB0aGVzZSBmdW5jdGlvbnMgaGF2
ZSB0aGUgc2FtZSBzaWduYXR1cmUgYmVsb3cuIik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KT4oCiAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1l
KSwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgUHRyVGFnIHRhZyA9
IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKICAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZURpcmVj
dEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0
ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0
aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQsIHRhZykpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAs
IE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsK
ICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBhbHJlYWR5QWxsb2NhdGVk
QXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CkBAIC0xMDM5LDYgKzEwNDksNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9TUkV4CiAgICAgaWYgKGV4aXQubV9yZWNvdmVy
eUluZGV4ICE9IFVJTlRfTUFYKQogICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwog
CisgICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWcoREZHT1NSRXhpdFB0clRhZywgdm0pOwogICAg
IHsKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogCkBAIC0xMDY5LDE0ICsx
MDgwLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0Ojpjb21waWxlT1NSRXgKICAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQu
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NS
RXhpdCgpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICAgICAg
cGF0Y2hCdWZmZXIsIGV4aXRUYWcsCiAgICAgICAgICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMs
ICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAg
ICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5k
YXRhKCksCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29u
dGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKGV4aXQuY29kZUxvY2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9j
YXRpb25MYWJlbChleGl0Lm1fY29kZS5yZXRhZ2dlZENvZGUoZXhpdFRhZywgTmVhckp1bXBQdHJU
YWcpKSk7CiAKICAgICB2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24g
MjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5LDggKzEwOSw5IEBAIHZvaWQgaGFuZGxl
RXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0g
ICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4odHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsKKyAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIGpp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIodHJp
Z2dlclJlb3B0aW1pemF0aW9uTm93LCB0YWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsKICAgICBBc3NlbWJseUhlbHBlcnM6
Okp1bXAgZG9uZUFkanVzdGluZyA9IGppdC5qdW1wKCk7CiAgICAgCiAgICAgdG9vRmV3RmFpbHMu
bGluaygmaml0KTsKQEAgLTE2Miw2ICsxNjMsMTIgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAg
IEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworI2lmIFVTRShQ
T0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIGppdC51bnRhZ1B0cihH
UFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgaml0LmFkZFB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zm
c2V0KCkgKyBzaXplb2Yodm9pZCopKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgICAgIGppdC50YWdQdHIoR1BSSW5mbzo6cmVnVDMsIEdQUklu
Zm86OnJlZ1QyKTsKKyNlbmRpZgogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJl
Z1QzLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgICAgICAgICBjYWxsZXJG
cmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOwpAQCAtMjA3LDcgKzIxNCwxNCBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICAgICAgY2FsbGVyRnJh
bWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKICAgICAgICAgICAgIH0KIAorI2lmIFVTRShQT0lOVEVS
X1BST0ZJTElORykKKyAgICAgICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQq
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
ICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAgICAgaml0LnRhZ1B0cihHUFJJbmZvOjpu
b25BcmdHUFIwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKKyNlbHNlCiAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0
dXJuUENPZmZzZXQoKSkpOworI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICBqaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKSk7CkBAIC0yNjIsOCAr
Mjc2LDkgQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwogI2VuZGlm
CiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJy
aWVyKT4ob3duZXIpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk9TUldyaXRlQmFycmllcikpLCBzY3Jh
dGNoKTsKLSAgICBqaXQuY2FsbChzY3JhdGNoLCBOb1B0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9
IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyLCB0YWcpKSwgc2NyYXRjaCk7CisgICAgaml0LmNhbGwoc2NyYXRjaCwg
dGFnKTsKIAogI2lmIENQVShYODYpCiAgICAgaml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHNpemVvZih2b2lkKikgKiA0KSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKQEAgLTMwOCw4ICszMjMsOSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgCiAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgIEFTU0VSVCht
YXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zm
c2V0KTsKKworICAgIFB0clRhZyBleGl0VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5n
LT5tX21hY2hpbmVDb2RlT2Zmc2V0KSwgQ29kZUVudHJ5UHRyVGFnLCBleGl0VGFnKTsKIAogICAg
IGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CkBAIC0zMTgsNyArMzM0
LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgIH0KICAg
ICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdl
dCksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMiwgTm9QdHJU
YWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyLCBleGl0VGFnKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzA2Miw3ICszMDYy
LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUqIGV4ZQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJvbSAiLCBSYXdQb2ludGVyKGppdENvZGUpLCAi
IGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGVudHJ5QmxvY2spLCAiXG4iKTsKICAgICAg
ICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoZXhlYywgY29k
ZUJsb2NrLCBlbnRyeUJsb2NrLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCkpIHsK
ICAgICAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRy
eSIsICgiYXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywgQ29kZUVudHJ5UHRyVGFnLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
MTgyLDcgKzMxODIsOSBAQCBzdGF0aWMgY2hhciogdGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgIGRhdGFMb2coIkltbWVkaWF0ZSBPU1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRl
cihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sgIiwgUmF3UG9pbnRlcihqaXRDb2RlLT5vc3JF
bnRyeUJsb2NrKCkpLCAiXG4iKTsKICAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NS
RW50cnkoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+b3NyRW50cnlCbG9jaygp
LCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICBpZiAoIWFkZHJlc3MpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIENvZGVFbnRy
eVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOwogfQogCiB2b2lkIEpJVF9PUEVS
QVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
bG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjIs
MTEgKzE2MiwxMiBAQCBjbGFzcyBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lCiAg
ICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKICAgICBDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAgICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRp
dmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBQdHJUYWcgY2FsbFRhZywKICAgICAg
ICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVu
dCByZXF1aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CiAgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJhdG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUs
IFJlc3VsdFR5cGU+KAogICAgICAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2Rl
LCByZXF1aXJlbWVudCwgcmVzdWx0KQogICAgICAgICAsIG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCisgICAgICAgICwgbV9jYWxsVGFnKGNhbGxUYWcp
CiAgICAgewogICAgIH0KIApAQCAtMTc1LDcgKzE3Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHVucGFja0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZlSklUKiBqaXQsIHN0ZDo6aW5kZXhfc2VxdWVu
Y2U8QXJndW1lbnRzSW5kZXguLi4+KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsK
LSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5j
dGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlzLT5tX3Jlc3VsdCksIHN0ZDo6Z2V0PEFyZ3VtZW50c0lu
ZGV4PihtX2FyZ3VtZW50cykuLi4pKTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNh
bGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgbV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRo
aXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1lbnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikp
OwogICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQpOwogICAgIH0KIApAQCAtMTg1LDE2ICsxODYs
MzYgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBt
X2FyZ3VtZW50czsKKyAgICBQdHJUYWcgbV9jYWxsVGFnOwogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklU
KiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCisgICAgU3BpbGxS
ZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1aXJl
bWVudCwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sK
KyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1Bh
dGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9uVHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRz
Li4uPj4oCisgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIGNhbGxUYWcsIHNwaWxsTW9kZSwg
cmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGhDYWxsKAogICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklU
KiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3Bp
bGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50IHJlcXVpcmVtZW50LAogICAgIFJlc3Vs
dFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewogICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcjxKdW1w
VHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBlLCBBcmd1bWVudHMuLi4+PigKLSAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXF1aXJlbWVudCwgcmVzdWx0LCBhcmd1
bWVudHMuLi4pOworICAgICAgICBmcm9tLCBqaXQsIGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcs
IHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5lIHN0ZDo6dW5pcXVlX3B0
cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcs
CisgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAg
cmV0dXJuIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgY2FsbFRh
ZywgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCBy
ZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0
eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KQEAgLTIwMyw3ICsyMjQsNyBAQCBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQ
YXRoR2VuZXJhdG9yCiAgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiB7CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgZnJvbSwgaml0LCBmdW5j
dGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVk
LCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAgICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIENG
dW5jdGlvblB0clRhZywgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNo
ZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvblR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGUs
IHVuc2lnbmVkIG51bWJlck9mQXNzaWdubWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIzMDI3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dD
YXNlcywgdGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQgPyBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUgOiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsCisgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQgPyBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUg
OiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLAogICAgICAg
ICBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAogICAg
ICAgICByZXN1bHRHUFIsIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKGlk
ZW50aWZpZXJOdW1iZXIpKTsKICAgICAKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0g
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
CisgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emUsIEdldFByb3BlcnR5UHRyVGFnLAogICAgICAgICBEb250U3BpbGwsIEV4Y2VwdGlvbkNoZWNr
UmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAogICAgICAgICByZXN1bHRHUFIsIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCB0aGlzR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsK
ICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywg
dGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2
YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2
YWx1ZUdQUiwgYmFzZUdQUiwKICAgICAgICAgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVy
KSk7CiAKICAgICBtX2ppdC5hZGRQdXRCeUlkKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMjY5
Nyw3ICsyNjk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFn
LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKQEAgLTI3NTMsNyArMjc1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LCBHZXRQ
cm9wZXJ0eVB0clRhZywKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0yODA1LDcgKzI4MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
IEdldFByb3BlcnR5UHRyVGFnLAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI5NjQsNyArMjk2NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICA/IChu
b2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlv
bmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5vcCgpID09IFB1dEJ5VmFs
RGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QpLAotICAgICAg
ICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7
CisgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0zMDQ4LDcg
KzMwNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgPyAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJh
dGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgOiAo
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzTm9uU3RyaWN0KSwKLSAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVB0
clRhZywgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwpAQCAtNTAyMCw3ICs1MDIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlCeUludCwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKSk7CisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBIYXNQcm9wZXJ0eVB0clRhZywgcmVzdWx0R1BSLCBi
YXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZS0+aW50ZXJuYWxNZXRo
b2RUeXBlKCkpKSk7CiAgICAgICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwpAQCAtNTA3OSw3ICs1
MDc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgR2V0UHJvcGVydHlQ
dHJUYWcsIHJlc3VsdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTI5Miw3ICs1
MjkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgIG9zckVudGVyLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgIG1faml0Lmp1
bXAodGVtcEdQUiwgTm9QdHJUYWcpOworICAgICAgICAgICAgbV9qaXQuanVtcCh0ZW1wR1BSLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIH0pOwogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NjEsNiArMzg2MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91
bGRFbWl0UHJvZmlsaW5nKTsKKyAgICBQdHJUYWcgbWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0
clRhZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKIAogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUp
IHsKICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5l
bXB0eSgpKTsKQEAgLTM4OTAsOSArMzg5MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNYXRoSUMoTm9kZSoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGFkZElDR2Vu
ZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICAgICAgYWRk
SUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVn
cywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGlu
Z0Z1bmN0aW9uKSwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJp
Z2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlu
bmVyUmlnaHRSZWdzKTsKKyAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1Rh
ZywgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MpOwogCiAgICAgICAg
ICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOwpAQCAtMzkyMSw3ICszOTIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1hdGhJQyhOb2RlKgogICAgICAgICB9CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAKQEAgLTQ1NzgsNiArNDU3OSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmljR2VuZXJhdGlvblN0YXRlLCBzaG91bGRF
bWl0UHJvZmlsaW5nKTsKKyAgICBQdHJUYWcgbWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRh
ZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKIAogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsK
ICAgICAgICAgQVNTRVJUKCFpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgp
KTsKQEAgLTQ1OTcsOSArNDU5OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRo
SUMoTm9kZSoKICAgICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAg
ICAgIGlmIChpY0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAg
ICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwg
cmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAg
ICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgbWF0
aElDVGFnLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdz
LCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCBy
ZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOwogCiAgICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFu
cyk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtNDYyMCw3ICs0NjIy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAgICAgICB9
KTsKICAgICB9IGVsc2UgewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywg
cmVzdWx0UmVncywgY2hpbGRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTM2LDEwICs5MzYsMTkgQEAg
cHVibGljOgogICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgIEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCiAgICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgUmVzdWx0UmVnVHlwZSByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdUeXBlIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
UmVzdWx0UmVnVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PAor
ICAgICAgICBGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAorICAgIEpJ
VENvbXBpbGVyOjpDYWxsPgorICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIFJlc3VsdFJlZ1R5cGUgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0LCBh
cmdzLi4uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZSBBcmcsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05NDcsMzAgKzk1Niw1OCBAQCBwdWJs
aWM6CiAgICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0CiAg
ICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZhbHVlLAogICAgIEpJ
VENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKKyAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmcgYXJnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmcsIGFyZ3MuLi4p
OwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQXJnLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
aGFzUmVzdWx0CisgICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZh
bHVlLAorICAgIEpJVENvbXBpbGVyOjpDYWxsPgorICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJl
dHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCBhcmcsIGFyZ3Mu
Li4pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgIUZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCiAgICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0g
ICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcsIEFy
Z3MuLi4gYXJncykKKyAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQ
dHJUYWcgdGFnLCBOb1Jlc3VsdFRhZywgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgIHJldHVy
biBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJh
dGlvbiwgdGFnKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICFGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LAorICAgIEpJVENvbXBpbGVyOjpD
YWxsPgorICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIE5vUmVzdWx0
VGFnLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgTm9SZXN1bHQsIGFyZ3MuLi4pOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGU+CiAgICAgc3RkOjplbmFibGVfaWZf
dDwKICAgICAgICAgIUZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbikKKyAgICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJU
YWcgdGFnKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0YWcpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wZXJhdGlvblR5cGU+CisgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgIUZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCisgICAgSklUQ29tcGlsZXI6
OkNhbGw+CisgICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbikKKyAgICB7
CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgQ0Z1bmN0aW9uUHRyVGFn
KTsKICAgICB9CiAKICN1bmRlZiBGSVJTVF9BUkdVTUVOVF9UWVBFCkBAIC0xMDA3LDExICsxMDQ0
LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhZGQgY2FsbCBp
bnN0cnVjdGlvbnMsIG9wdGlvbmFsbHkgc2V0dGluZyByZXN1bHRzLCBhbmQgb3B0aW9uYWxseSBy
b2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUgb24gYW4gZXhjZXB0aW9uLgotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRy
VGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRl
cm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbChm
dW5jdGlvbik7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcp
OwogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgewpAQCAt
MTAyNiwzMSArMTA2Myw0MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBH
UFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BS
UmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyBy
ZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAg
IHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24p
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9u
UHRyVGFnLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcg
cmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisgICAgeworICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICAgICAgbV9qaXQuc2V0dXBS
ZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcg
cmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisgICAgeworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHQxLCByZXN1bHQyKTsK
KyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBG
dW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykK
ICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRS
ZXN1bHQoZnVuY3Rpb24sIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLmdwcigpKTsKICNlbHNlCi0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCB0YWcsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQo
ZnVuY3Rpb24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0UmVncyk7CisgICAgfQogI2lmIENQVShY
ODYpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFn
LCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlk
RlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5mc3RwbCgwLCBKSVRDb21w
aWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9qaXQubG9hZERvdWJs
ZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3VsdCk7CkBAIC0xMDU4LDIz
ICsxMTA3LDI3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2VsaWYg
Q1BVKEFSTSkgJiYgIUNQVShBUk1fSEFSREZQKQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVu
ZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQp
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgRlBSUmVnIHJlc3VsdCkKICAgICB7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24sIHRhZyk7CiAgICAg
ICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEZQUlJlZykKICAgICAgICAgICAgIG1faml0LmFzc2Vt
YmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAgICAgfQogI2Vsc2UgLy8gQ1BV
KFg4Nl82NCkgfHwgKENQVShBUk0pICYmIENQVShBUk1fSEFSREZQKSkgfHwgQ1BVKEFSTTY0KSB8
fCBDUFUoTUlQUykKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0
clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcpOwogICAgICAgICBpZiAocmVzdWx0ICE9
IEludmFsaWRGUFJSZWcpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAjZW5k
aWYKLSAgICAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0
KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29u
ZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0LCBGUFJSZWcgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3Vi
bGUoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVua0dlbmVyYQogewogICAgIE1h
Y3JvQXNzZW1ibGVyIGppdDsKICAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQs
IHZtKTsKKyAgICBQdHJUYWcgb3NyRXhpdFRodW5rVGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJU
YWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJERkcg
T1NSIGV4aXQgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
b3NyRXhpdFRodW5rVGFnLCAiREZHIE9TUiBleGl0IHRodW5rIik7CiB9CiAKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTgy
LDcgKzgzLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAg
IGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogI2VuZGlmCiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBq
aXQuY2FsbChOb1B0clRhZyk7CisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0
aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVu
Y3Rpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAKICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgo
KSksIEdQUkluZm86OnJlZ1QwKTsKICAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwKSk7CkBAIC05OSwxMyArMTAxLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvblQKICNlbmRpZgogICAgIH0KIAotICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSwgTm9QdHJUYWcp
OworICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uKSwgcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKSk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQs
IE5vUHRyVGFnKTsKLSAgICAKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cihPU1JFeGl0Ojpjb21waWxlT1NSRXhp
dCwgY2FsbFRhZykpOworCisgICAgUHRyVGFnIG9zckV4aXRUaHVua1RhZyA9IHB0clRhZyhERkdP
U1JFeGl0UHRyVGFnLCB2bSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IG9zckV4aXRUaHVua1RhZywgIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIik7CiB9CiAK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAg
LTE0NCwxMCArMTQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2Vu
ZXIKICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNr
UmVnaXN0ZXJzKCk7CiAKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMSwgTm9QdHJUYWcpOwot
ICAgIAorICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisKKyAgICBQdHJUYWcgb3NyRW50cnlUaHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRy
eVB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywg
IkRGRyBPU1IgZW50cnkgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgb3NyRW50cnlUaHVua1RhZywgIkRGRyBPU1IgZW50cnkgdGh1bmsiKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIs
OSArNzIyLDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAg
ICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKAogICAgICAgICBbPSwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgUHRyVGFnIGxpbmtU
YWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCAmdm0pOwogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICpp
bmZvKTsKICAgICAgICAgICAgIGluZm8tPnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5l
KHZpcnR1YWxUaHVuaywgdm0sIG51bGxwdHIsIHRydWUpKTsKLSAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh2aXJ0dWFsVGh1bmsuY29kZSgpKSk7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodmlydHVh
bFRodW5rLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKICAgICAgICAg
fSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMDI3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
CiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0
KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFs
dWVHUFIpKTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CisgICAganVtcChy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRp
bWl6ZS5saW5rKHRoaXMpOwogfQogI2VuZGlmCkBAIC03MzUsMjUgKzczNSw4IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAg
ICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwg
dGhpcyk7Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCi0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpKSwgbGlua1JlZ2lzdGVyKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwotICAgICAg
ICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgUHRyVGFnIHRlbXBUYWcg
PSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKHRlbXBUYWcpLCByZWdUMSk7Ci0gICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICAgICAgc3RvcmVQdHIobGlua1JlZ2lzdGVyLCBBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKLSNlbmRpZgogICAg
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAg
ICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHB0clRhZyhKSVRUaHVua1B0clRhZywgbV92bSksIE5lYXJDYWxsUHRyVGFnKSk7
Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCi0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgp
KSwgbGlua1JlZ2lzdGVyKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRlbXBUYWcpLCBy
ZWdUMSk7Ci0gICAgICAgIHVudGFnUHRyKGxpbmtSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKLSAg
ICAgICAgc3RvcmVQdHIobGlua1JlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKLSNlbmRpZgorICAgICAgICBlbWl0TmFrZWRD
YWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0
clRhZyhBcml0eUZpeHVwUHRyVGFnLCBtX3ZtKSwgTmVhckNhbGxQdHJUYWcpKTsKIAogI2lmICFB
U1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQg
aXRzIHVzZSB3aXRoIEFTU0VSVHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdU
Mik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtD
YWxsUHRyVGFnLCBtX3ZtKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9CisgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywg
TmVhckNhbGxQdHJUYWcpKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVh
c29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw2ICsyMzIsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUoKSBjb25zdCB7IHJl
dHVybiBtX2FyaXRoUHJvZmlsZTsgfQorICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb247IH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIHNpemVfdCBtX2dlbmVyYXRlZENvZGVTaXplIHsgMCB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDIsNyArNjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgog
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworICAgIFB0clRhZyBl
eGNlcHRpb25IYW5kbGVyVGFnID0gRXhjZXB0aW9uSGFuZGxlclB0clRhZzsKKyAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBleGNlcHRpb25IYW5kbGVyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGlu
ayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxl
KSB7CkBAIC05NjQsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChJ
bnN0cnVjdAogICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVFVucmVhc29uYWJsZUxvb3BI
aW50SnVtcFRhcmdldCk7CiAgICAgICAgICAgICBvay5saW5rKHRoaXMpOwogICAgICAgICB9Ci0g
ICAgICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICAgICAganVtcChyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGlt
aXplZEVudHJ5LmxpbmsodGhpcyk7CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCBPUENPREVfTEVOR1RIKG9wX2xvb3BfaGludCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NjcsNiArODY3LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRp
b25QdHJUYWcsIHZtKTsKIAogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKIApAQCAt
ODgxLDkgKzg4Miw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwK
ICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAg
ICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxE
YXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFn
ID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAg
ICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2Vw
dGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAg
IH0KIApAQCAtODk0LDkgKzg5NCw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwKICAgICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25l
KTsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlv
bkVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWco
SklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0tPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAg
IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKICAgICB9CiAKQEAgLTkxMiw5ICs5MTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICBQdHJUYWcgdGh1
bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAg
ICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFn
LCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIApAQCAtOTIzLDkg
KzkyMSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAK
ICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpOb25lKTsKICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhl
YywgY2FsbGVlKSk7Ci0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFn
LCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFn
KS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlv
blRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIApAQCAtOTM1LDcgKzkzMiw3IEBAIFNs
b3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAKLSAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxs
UHRyVGFnLCB2bSk7CisgICAgUHRyVGFnIGxpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rQ2Fs
bFJlc3VsdFB0clRhZywgdm0pOwogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNh
bGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCkBAIC05NzQsOCArOTcxLDggQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0g
KCkgewotICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFn
LCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gcmV0YWdDb2RlUHRyKHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIHRodW5rVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgUHRyVGFnIHRo
cm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CisgICAg
ICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFn
LCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTA4NSwxMiArMTA4MiwxMiBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhl
Y3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKTsKKyAgICAgICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFn
KFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CiAKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkg
JiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikp
OwotICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2
bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtU
YWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygp
LAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogICAgICAgICB9CiAKQEAgLTEwOTgsOSArMTA5NSw4IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKnZtLCBm
dW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9O
X0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0
aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBQdHJUYWcg
dGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
LSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9u
VGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xMTE1LDcgKzExMTEsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGw7Ci0gICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25M
aW5rUG9seW1vcnBoaWNDYWxsUHRyVGFnLCB2bSk7CisgICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0
clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgU2xvd1BhdGhS
ZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgcmVzdWx0VGFnKTsKIAogICAgIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQoY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpKTsKQEAgLTExMjgsNyArMTEyNCw3IEBAIFNsb3dQYXRoUmV0dXJu
VHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2Fs
bGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIFB0clRhZyByZXN1bHRUYWcgPSBw
dHJUYWcoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJUYWcsIHZtKTsKKyAgICBQdHJUYWcgcmVzdWx0
VGFnID0gcHRyVGFnKExpbmtWaXJ0dWFsQ2FsbFJlc3VsdFB0clRhZywgdm0pOwogICAgIHJldHVy
biB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVl
QXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRUYWcpOwogfQogCkBAIC0xNTI4LDcgKzE1MjQs
MTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiAgICAgICAg
IGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJ1ZVRyaVN0YXRlKTsKLSAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdCh2bS5nZXRDVElTdHViKERGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFCdWZmZXIpOworICAgICAgICB2b2lkKiB0
YXJnZXRQQyA9IHZtLmdldENUSVN0dWIoREZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFn
KERGR09TUkVudHJ5UHRyVGFnLCAmdm0pOworICAgICAgICB0YXJnZXRQQyA9IHJldGFnQ29kZVB0
cih0YXJnZXRQQywgdGh1bmtUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YXJnZXRQQywgZGF0YUJ1ZmZlcik7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTE1NzcsOCArMTU3
NiwxMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyCiAgICAgQ29k
ZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5yZXBsYWNl
bWVudCgpOwogICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgewog
ICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnko
ZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBjYXNlIEpJ
VENvZGU6OkZUTEpJVDogeworICAgICAgICB2b2lkKiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNo
T1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBpZiAoZW50cnkpCisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZW50cnksIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+
KGVudHJ5KTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
MTU5NSw4ICsxNTk4LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50
ZXIKIAogICAgIHN3aXRjaCAob3B0aW1pemVkUmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgewogICAg
IGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhl
Yywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBjYXNlIEpJVENv
ZGU6OkZUTEpJVDogeworICAgICAgICB2b2lkKiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNoT1NS
RW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBpZiAoZW50cnkpCisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoZW50cnksIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGVu
dHJ5KTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NjgsMjAgKzY2OCwyMSBAQCB2b2lkIHJlcGF0Y2hJbigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlv
bigpLCBvcGVyYXRpb25Jbik7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQor
c3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIFB0clRhZyBsaW5rVGFnKQogewotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLmNvZGUoKSkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigp
LCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2Fs
bFB0clRhZykpKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZv
aWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlua1RhZykKIHsKLSAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpKTsKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLCBsaW5rVGFn
KTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKIHsKKyAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENh
bGxQdHJUYWcsIHZtKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0g
dmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBj
YWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5r
SW5mbywgdmlydHVhbFRodW5rLCBsaW5rVGFnKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0
dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUp
KTsKIH0KIApAQCAtNzI3LDcgKzcyOCw4IEBAIHZvaWQgbGlua0ZvcigKICAgICAgICAgY2FsbGVl
Q29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsK
IAogICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNh
bGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd0Zvcigm
dm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAg
ICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywg
JnZtKTsKKyAgICAgICAgbGlua1Nsb3dGb3IoJnZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1RhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC03NjYsOSArNzY4LDggQEAgdm9pZCBsaW5rU2xvd0ZvcigKICAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSog
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29k
ZVJlZikKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYsIFB0clRhZyBjb2RlVGFnKQog
ewotICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBOZWFyQ2FsbFB0clRhZyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7
CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKQEAg
LTc3OSw3ICs3ODAsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJ
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0
cldpdGhQYXRjaCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5m
by5jYWxsZWVHUFIoKSksIDApOwotICAgICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZv
LCBjb2RlUmVmKTsKKyAgICAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJl
ZiwgY29kZVRhZyk7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOwogICAgIH0K
ICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7CkBAIC03OTQsNyArNzk1LDggQEAgdm9pZCB1
bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2Fs
bExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCAiXG4iKTsKICAgICAKLSAgICByZXZlcnRDYWxsKCZ2
bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKTsK
KyAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgJnZtKTsKKyAgICBy
ZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLCBsaW5rVGFnKTsKIH0KIAogdm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUq
IGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtODA2LDggKzgwOCw5IEBAIHZv
aWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWwKICAgICBpZiAoc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtp
bmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2Fs
bGVyRnJhbWUtPmNvZGVPcmlnaW4oKSksICJcbiIpOwogCisgICAgUHRyVGFnIGxpbmtUYWcgPSBw
dHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCAmdm0pOwogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCBjYWxsTGlua0luZm8pOwot
ICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgcmV2
ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rLCBsaW5rVGFnKTsKICAgICBj
YWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5r
LCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQogCkBAIC0xMDgzLDcgKzEwODYsOCBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
KCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGlj
Q2FsbFB0clRhZywgJnZtKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlv
bkxhYmVsKHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKSk7CiAgICAgCiAgICAgYXV0byBz
dHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAg
ICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Nyw5ICs3Nyw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKICAgICBqaXQuanVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCi0gICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJ
VFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KTsKKyAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25Q
dHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJU
aHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0aHJvd0V4Y2VwdGlvblRhZywgIlRocm93IGV4Y2Vw
dGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHNsb3dQ
YXRoRm9yKApAQCAtMTQ1LDExICsxNDUsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
YWxsVGh1bmtHZW5lcgogICAgIC8vIGJlZW4gYWRqdXN0ZWQsIGFuZCBhbGwgb3RoZXIgcmVnaXN0
ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLgogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAg
ICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uTGlua0Nh
bGxQdHJUYWcsIHZtKTsKKyAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJU
YWcoTGlua0NhbGxSZXN1bHRQdHJUYWcsIHZtKTsKICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBv
cGVyYXRpb25MaW5rQ2FsbCwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOwogCisgICAgUHRyVGFn
IGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5r
Iik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIGxpbmtUYWcsICJMaW5r
IGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlv
bnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVz
IGZvcgpAQCAtMTU4LDExICsxNTksMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBQdHJUYWcgZXhwZWN0
ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFB0
clRhZywgdm0pOworICAgIFB0clRhZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhM
aW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgc2xvd1BhdGhGb3Ioaml0
LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRU
YWcpOwogCisgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0
clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRh
ZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgbGlua1RhZywgIkxpbmsgcG9seW1vcnBoaWMgY2Fs
bCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBkaXN0aW5ndWlz
aCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cKQEAgLTI0Niwx
MiArMjQ4LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAg
ICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBh
bnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBQdHJUYWcgZXhw
ZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJUYWcs
IHZtKTsKKyAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoTGlua1Zp
cnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3Bl
cmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKIAorICAgIFB0clRh
ZyBsaW5rVGFnID0gcHRyVGFnKExpbmtWaXJ0dWFsQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcsCisgICAgICAg
IHBhdGNoQnVmZmVyLCBsaW5rVGFnLAogICAgICAgICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1
bmsiLAogICAgICAgICBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6UmVndWxh
ciA/ICJjYWxsIiA6IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
InRhaWwgY2FsbCIgOiAiY29uc3RydWN0Iik7CiB9CkBAIC00ODcsNiArNDkwLDE1IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQucG9wKEpTSW50ZXJm
YWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Cisj
aWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCisgICAgaml0LmxvYWRQdHIo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQuYWRkUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGV4dHJhVGVtcCk7CisgICAgaml0LnVudGFnUHRy
KEdQUkluZm86OnJlZ1QzLCBleHRyYVRlbXApOworICAgIFB0clRhZyB0ZW1wUmV0dXJuUENUYWcg
PSBwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKHRlbXBSZXR1cm5QQ1RhZyksIGV4dHJhVGVt
cCk7CisgICAgaml0LnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKKyAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKKyNlbmRp
ZgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIy
KTsKICAgICBqaXQuYWRkMzIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOwpA
QCAtNTM0LDYgKzU0NiwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVy
YXRvCiAgICAgCiAgICAgZG9uZS5saW5rKCZqaXQpOwogCisjaWYgQ1BVKEFSTTY0KSAmJiBVU0Uo
UE9JTlRFUl9QUk9GSUxJTkcpCisgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQo
KSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3Rl
ZEltbVB0cih0ZW1wUmV0dXJuUENUYWcpLCBleHRyYVRlbXApOworICAgIGppdC51bnRhZ1B0cihH
UFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKKyAgICBqaXQuYWRkUHRyKEpTSW50ZXJmYWNlSklU
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGV4dHJhVGVtcCk7CisgICAgaml0LnRhZ1B0cihHUFJJbmZvOjpyZWdUMywg
ZXh0cmFUZW1wKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVy
blBDT2Zmc2V0KCkpKTsKKyNlbmRpZgorCiAjICBpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgpAQCAtNTk4LDggKzYxOSw4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICNlbmRpZiAvLyBFbmQgb2Yg
VVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbi4KIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUVGh1bmtQ
dHJUYWcsIHZtKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAi
Zml4dXAgYXJpdHkiKTsKKyAgICBQdHJUYWcgYXJpdHlGaXh1cFRhZyA9IHB0clRhZyhBcml0eUZp
eHVwUHRyVGFnLCB2bSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIGFy
aXR5Rml4dXBUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQpAQCAtNjA5LDcgKzYzMCw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXQKICAgICBqaXQuYnJlYWtwb2ludCgpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDYWxsUHRyVGFnLCAidW5yZWFj
aGFibGUgdGh1bmsiKTsKKyAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJU
YWcsIHZtKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcs
ICJ1bnJlYWNoYWJsZSB0aHVuayIpOwogfQogCiBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChT
cGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B0clRhZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHRyVGFnLmNwcAkocmV2aXNpb24gMjMwMjc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHRyVGFnLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcp
Ci17Ci0jZGVmaW5lIEhBTkRMRV9QVFJUQUdfQ0FTRShfdGFnTmFtZSkgY2FzZSBfdGFnTmFtZTog
cmV0dXJuICNfdGFnTmFtZTsKLQotICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIEZPUl9FQUNI
X1BUUlRBR19FTlVNKEhBTkRMRV9QVFJUQUdfQ0FTRSkKLSAgICBkZWZhdWx0OiByZXR1cm4gIjx1
bmtub3duPiI7Ci0gICAgfQotCi0jdW5kZWYgSEFORExFX1BUUlRBR19DQVNFCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFn
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJ
KHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRh
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgdihOZWFySnVtcFB0clRhZykgXAogICAgIHYoQ0Z1bmN0aW9uUHRyVGFnKSBcCiAgICAgXAor
ICAgIHYoQXJpdHlGaXh1cFB0clRhZykgXAogICAgIHYoQjNDQ2FsbFB0clRhZykgXAogICAgIHYo
Qnl0ZWNvZGVQdHJUYWcpIFwKICAgICB2KEJ5dGVjb2RlSGVscGVyUHRyVGFnKSBcCiAgICAgdihD
b2RlRW50cnlQdHJUYWcpIFwKICAgICB2KENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSBc
CisgICAgdihERkdPU1JFbnRyeVB0clRhZykgXAorICAgIHYoREZHT1NSRXhpdFB0clRhZykgXAor
ICAgIHYoREZHT3BlcmF0aW9uUHRyVGFnKSBcCiAgICAgdihFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KSBcCiAgICAgdihHZXRQcm9wZXJ0eVB0clRhZykgXAogICAgIHYoR2V0dGVyU2V0dGVyUHRyVGFn
KSBcCkBAIC00OSwxNSArNTMsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihKSVRUaHVua1B0
clRhZykgXAogICAgIHYoSklUV3JpdGVUaHVua1B0clRhZykgXAogICAgIHYoTExJbnRDYWxsSUNQ
dHJUYWcpIFwKKyAgICB2KExpbmtDYWxsUHRyVGFnKSBcCisgICAgdihMaW5rQ2FsbFJlc3VsdFB0
clRhZykgXAorICAgIHYoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZykgXAorICAgIHYoTGlua1Bv
bHltb3JwaGljQ2FsbFJlc3VsdFB0clRhZykgXAorICAgIHYoTGlua1ZpcnR1YWxDYWxsUHRyVGFn
KSBcCisgICAgdihMaW5rVmlydHVhbENhbGxSZXN1bHRQdHJUYWcpIFwKICAgICB2KE1hdGhJQ1B0
clRhZykgXAogICAgIHYoTmF0aXZlQ29kZVB0clRhZykgXAotICAgIHYoT3BlcmF0aW9uTGlua0Nh
bGxQdHJUYWcpIFwKLSAgICB2KE9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcpIFwK
LSAgICB2KE9wZXJhdGlvblZpcnR1YWxDYWxsUHRyVGFnKSBcCiAgICAgdihQdXRQcm9wZXJ0eVB0
clRhZykgXAogICAgIHYoU2xvd1BhdGhQdHJUYWcpIFwKICAgICB2KFNwZWNpYWxpemVkVGh1bmtQ
dHJUYWcpIFwKICAgICB2KFN3aXRjaFRhYmxlUHRyVGFnKSBcCisgICAgdihUaHJvd0V4Y2VwdGlv
blB0clRhZykgXAogICAgIFwKICAgICB2KFlhcnI4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyMTZC
aXRQdHJUYWcpIFwKQEAgLTc5LDcgKzg3LDE1IEBAIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
dWludHB0cl90PihOb1AKIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihOZWFy
Q2FsbFB0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSwgIiIpOwogc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5lYXJKdW1wUHRyVGFnKSA9PSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDIpLCAiIik7CiAKLUpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IGNoYXIqIHB0
clRhZ05hbWUoUHRyVGFnKTsKK2lubGluZSBjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0
YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFtZSkgY2FzZSBfdGFnTmFt
ZTogcmV0dXJuICNfdGFnTmFtZTsKKyAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBGT1JfRUFD
SF9QVFJUQUdfRU5VTShSRVRVUk5fUFRSVEFHX05BTUUpCisgICAgZGVmYXVsdDogcmV0dXJuICI8
dW5rbm93bj4iOworICAgIH0KKyN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUKK30KIAogdWludHB0
cl90IG5leHRQdHJUYWdJRCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIzMDI3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9j
YWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgi
CiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCShyZXZpc2lvbiAyMzAyNzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3
ICs2NjMsOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAg
aWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQogICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIFB0clRhZyBsaW5rVGFnID0gcHRy
VGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwg
RnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdn
ZWRDb2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFnKSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVs
IGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0Nh
bGwpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9j
YXRpb25PZih0YXJnZXRUb0NoZWNrKSk7CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0
aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsK
</data>
<flag name="review"
          id="355666"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337254</attachid>
            <date>2018-04-04 20:07:22 -0700</date>
            <delta_ts>2018-04-04 20:07:22 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-184316.patch</filename>
            <type>text/plain</type>
            <size>94071</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxOC0wNC0wNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgdG8gdGhlIERGRyBhbmQgc3VwcG9ydGluZyBm
aWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NDMxNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzkxODg1MjQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgMS4gUHJvZmlsZSBsb3RzIG9mIHBvaW50ZXJz
IHdpdGggUHRyVGFncy4KKworICAgICAgICAyLiBSZW1vdmUgUHRyVGFnLmNwcCBhbmQgbWFrZSBw
dHJUYWdOYW1lKCkgaW50byBhbiBpbmxpbmUgZnVuY3Rpb24uICBJdCdzIG9ubHkKKyAgICAgICAg
ICAgdXNlZCBmb3IgZGVidWdnaW5nIGFueXdheSwgYW5kIG5vdCBub3JtYWxseSBjYWxsZWQgaW4g
dGhlIGNvZGUuICBNYWtpbmcgaXQKKyAgICAgICAgICAgYW4gaW5saW5lIGZ1bmN0aW9uIHByZXZl
bnRzIGl0IGZyb20gdGFraW5nIHVwIGNvZGUgc3BhY2UgaW4gYnVpbGRzIHdoZW4gbm90IGluCisg
ICAgICAgICAgIHVzZS4KKworICAgICAgICAzLiBDaGFuZ2UgdGhlIGNhbGwgdG8gdGhlIHRoZSBh
cml0eUZpeHVwVGh1bmsgaW4gREZHIGNvZGUgdG8gYmUgYSBuZWFyIGNhbGwuCisgICAgICAgICAg
IEl0IGRvZXNuJ3QgbmVlZCB0byBiZSBhIGZhciBjYWxsLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20u
Y3BwOgorICAgICAgICAoSlNDOjp0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKToKKyAg
ICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQ0NhbGxT
cGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpnZW5lcmF0
ZSk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOgorICAgICAgICAqIGIzL3Rl
c3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAgICAgICAq
IGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0hhbmRsZXJJbmZvLmg6CisgICAgICAgIChK
U0M6OkhhbmRsZXJJbmZvOjppbml0aWFsaXplKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVy
YXRlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90
aWNlQ2F0Y2hFbnRyeXBvaW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgICogZGZn
L0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlu
bGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJn
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFu
ZGxlRXhpdENvdW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyk6CisgICAgICAgIChKU0M6OkRGRzo6b3NyV3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6
REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpDYWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxSZXN1
bHRBbmRBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2Fs
bFJlc3VsdEFuZEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjp1bnBhY2tBbmRHZW5lcmF0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6c2xvd1BhdGhDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWF0aElDKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsU2V0UmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRH
ZXRCeUlkV2l0aFRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhp
dFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpvc3JFbnRyeVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBqaXQvSklULmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAgICAgKiBqaXQvSklU
Q2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAg
ICAgICAgKiBqaXQvSklUTWF0aElDLmg6CisgICAgICAgIChKU0M6OmlzUHJvZmlsZUVtcHR5KToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlcGF0Y2guY3Bw
OgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgor
ICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpTQzo6dW5saW5rRm9yKToKKyAg
ICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBo
aWNDYWxsKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6Cisg
ICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp1bnJlYWNo
YWJsZUdlbmVyYXRvcik6CisgICAgICAgICogcnVudGltZS9QdHJUYWcuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgIChKU0M6OnB0clRhZ05hbWUpOgor
ICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKiB3YXNtL2pzL1dh
c21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorCiAyMDE4LTA0LTA0
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihy
MjIyNTYzKTogcmVtb3ZlZCBEb3VibGVSZWFsIHR5cGUgY2hlY2sgY2F1c2VzIHRvbnMgb2YgY3Jh
c2hlcyBiZWNhdXNlIENTRSBoYXMgbmV2ZXIga25vd24gaG93IHRvIGhhbmRsZSBTYW5lQ2hhaW4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIzMDI5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMsNyArODMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNUX0xVVF9TT1VSQ0VTCiAg
ICAgcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL051bWJlclByb3Rv
dHlwZS5jcHAKICAgICBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAotICAgIHJ1bnRpbWUv
UHRyVGFnLmNwcAogICAgIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKICAgICBydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NzIsNyArODcy
LDYgQEAgcnVudGltZS9PYmplY3RJbml0aWFsaXphdGlvblNjb3BlLmNwcAogcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuY3BwCiBydW50aW1lL09wZXJhdGlvbnMuY3BwCiBydW50aW1lL09wdGlvbnMu
Y3BwCi1ydW50aW1lL1B0clRhZy5jcHAKIHJ1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCiBy
dW50aW1lL1Byb21pc2VEZWZlcnJlZFRpbWVyLmNwcAogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0
b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMwMjky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3MDAsNyArNDcwMCw2IEBACiAJCUZFNjQ5
MTM4MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU2QzFFNTcyMDNGRjZFMjAwQkRDMkI3IC8qIFB0clRhZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdHJUYWcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTZGNTZEQzFFNjRFOTIwMDBEMTc4MDEgLyogVk1U
cmFwcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTVRyYXBzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2RjU2REQxRTY0RTkyMDAwRDE3ODAx
IC8qIFZNVHJhcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UcmFwcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAg
LyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYXRjaFNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02ODc2LDcgKzY4NzUsNiBAQAog
CQkJCTc5QjAwQ0JCMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oICovLAogCQkJCTc5
MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi8sCiAJCQkJNzkxNjBE
QkMxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggKi8sCi0JCQkJRkU2QzFFNTcyMDNG
RjZFMjAwQkRDMkI3IC8qIFB0clRhZy5jcHAgKi8sCiAJCQkJRkU5QUUxQzgyMDMyQzg4NzAwMkI2
OTM0IC8qIFB0clRhZy5oICovLAogCQkJCTBGNTc4MEExMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJl
TmFOLmggKi8sCiAJCQkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsNyArNjEwLDcgQEAgdm9p
ZCB0ZXN0UHJvYmVNb2RpZmllc1Byb2dyYW1Db3VudGVyKCkKICAgICAgICAgLy8gV3JpdGUgZXhw
ZWN0ZWQgdmFsdWVzIGludG8gdGhlIHJlZ2lzdGVycy4KICAgICAgICAgaml0LnByb2JlKFsmXSAo
UHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgICAgIHByb2JlQ2FsbENvdW50Kys7
Ci0gICAgICAgICAgICBjb250ZXh0LmNwdS5wYygpID0gY29udGludWF0aW9uLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgY29udGV4dC5jcHUucGMoKSA9IHVudGFnQ29k
ZVB0cihjb250aW51YXRpb24uY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpJVENvZGVQdHJU
YWcpOwogICAgICAgICB9KTsKIAogICAgICAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91
bGQgbmV2ZXIgZ2V0IGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
ck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93
ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNiwxMyArNTA2LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgaW5kZXggPSBwYXJhbXNb
MF0uZ3ByKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFt
cy5ncFNjcmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcG9pc29uU2Ny
YXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBQdHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxl
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9p
c29uU2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhYmxlKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIGluZGV4
LCBDQ2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIHRhZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuanVtcChzY3JhdGNoLCBzd2l0Y2hUYWcpOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGVzZSBsYWJlbHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcG9wdWxhdGVkIGJlZm9yZSBl
aXRoZXIgbGF0ZSBwYXRocyBvcgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluayB0YXNr
cyBydW4uCkBAIC01MjEsMTQgKzUyMSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzVW5oYW5kbGVkSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsVGhyb3VnaCA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZigqbGFiZWxzLmxhc3QoKSwgdGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsVGhyb3VnaCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZigqbGFiZWxzLmxhc3QoKSwgc3dpdGNoVGFnKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxlU2l6ZTsgaS0tOykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbaV0gPSBmYWxs
VGhyb3VnaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbGFiZWxJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgdGFibGVJbmRleCA6IGhhbmRsZWRJbmRpY2VzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganVtcFRhYmxlW3RhYmxlSW5kZXhdID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKCpsYWJlbHNbbGFiZWxJbmRleCsrXSwgdGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVt0YWJsZUluZGV4XSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZigqbGFiZWxzW2xhYmVsSW5kZXgrK10sIHN3aXRjaFRhZyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lv
biAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwNDMsMTMgKzEzMDQzLDEzIEBAIHZvaWQgdGVzdEludGVycHJldGVyKCkK
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQ
b2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRjaCk7CiAgICAgICAgICAgICBqaXQubG9hZDY0KEND
YWxsSGVscGVyczo6QmFzZUluZGV4KHNjcmF0Y2gsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxw
ZXJzOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7CiAgICAgICAgICAgICBqaXQueG9yNjQocG9pc29u
U2NyYXRjaCwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRj
aFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Ci0gICAgICAgICAgICBqaXQuanVtcChzY3Jh
dGNoLCB0YWcpOworICAgICAgICAgICAgUHRyVGFnIHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hU
YWJsZVB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRj
aCwgc3dpdGNoVGFnKTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgIFsmLCBqdW1wVGFibGUsIGxhYmVsc10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGFiZWxzLnNpemUoKTsgaS0t
OykKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZigqbGFiZWxzW2ldLCB0YWcpOworICAgICAgICAgICAgICAgICAgICAgICAganVtcFRh
YmxlW2ldID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHNbaV0sIHN3aXRjaFRhZyk7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMjMw
MjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMjkgKzEzNCwxNCBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAg
Q0NhbGxTcGVjaWFsOjpnZW5lcmF0CiAgICAgY2FzZSBBcmc6OkltbToKICAgICBjYXNlIEFyZzo6
QmlnSW1tOgogICAgICAgICBqaXQubW92ZShpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5hc1Ry
dXN0ZWRJbW1QdHIoKSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSNpZiBVU0UoUE9JTlRFUl9QUk9GSUxJ
TkcpCi0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihCM0NDYWxs
UHRyVGFnKSwgcHRyVGFnUmVnaXN0ZXIpOwotICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0
ZXIsIHB0clRhZ1JlZ2lzdGVyKTsKLSNlbHNlCi0gICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdp
c3RlciwgTm9QdHJUYWcpOwotI2VuZGlmCisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rl
ciwgQjNDQ2FsbFB0clRhZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXJnOjpUbXA6Ci0j
aWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoQjNDQ2FsbFB0clRhZyksIHB0clRhZ1JlZ2lzdGVyKTsKLSAgICAgICAg
aml0LmNhbGwoaW5zdC5hcmdzW2NhbGxlZUFyZ09mZnNldF0uZ3ByKCksIHB0clRhZ1JlZ2lzdGVy
KTsKLSNlbHNlCi0gICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmdw
cigpLCBOb1B0clRhZyk7Ci0jZW5kaWYKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzW2NhbGxl
ZUFyZ09mZnNldF0uZ3ByKCksIEIzQ0NhbGxQdHJUYWcpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEFyZzo6QWRkcjoKICAgICBjYXNlIEFyZzo6RXh0ZW5kZWRPZmZzZXRBZGRyOgotI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKEIzQ0NhbGxQdHJUYWcpLCBwdHJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5j
YWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmFzQWRkcmVzcygpLCBwdHJUYWdSZWdpc3Rl
cik7Ci0jZWxzZQotICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5h
c0FkZHJlc3MoKSwgTm9QdHJUYWcpOwotI2VuZGlmCisgICAgICAgIGppdC5jYWxsKGluc3QuYXJn
c1tjYWxsZWVBcmdPZmZzZXRdLmFzQWRkcmVzcygpLCBCM0NDYWxsUHRyVGFnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaAkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsNiBAQCBwdWJsaWM6
CiAgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4g
QnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcwogICAgIC8vIHRo
aXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgogICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIwOwotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IHB0clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIxOwot
I2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNj
b3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgZmluYWw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAy
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyMiw5ICs4MjIsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChs
aW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxs
KSk7CiAKKyAgICAgICAgICAgICAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhMaW5rQ2FsbFB0
clRhZywgJnZtKTsKICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNj
ZXNzb3JTZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRs
ZXJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hh
bmRsZXJJbmZvLmgJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9IYW5kbGVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMyw2ICsxMTMsNyBAQCBzdHJ1
Y3QgSGFuZGxlckluZm8gOiBwdWJsaWMgSGFuZGxlckluZm9CCiAgICAgewogICAgICAgICBpbml0
aWFsaXplKHVubGlua2VkSW5mbyk7CiAgICAgICAgIG5hdGl2ZUNvZGUgPSBsYWJlbDsKKyAgICAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG5hdGl2ZUNvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbmF0
aXZlQ29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTM5LDcgKzUzOSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nl
c3MKICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlv
bkhhbmRsZXIsIG9sZEhhbmRsZXIubmF0aXZlQ29kZSk7CiAKICAgICAgICAgICAgICAgICBIYW5k
bGVySW5mbyBoYW5kbGVyVG9SZWdpc3RlciA9IG9sZEhhbmRsZXI7Ci0gICAgICAgICAgICAgICAg
aGFuZGxlclRvUmVnaXN0ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtYWtl
c2hpZnRDYXRjaEhhbmRsZXIsIE5lYXJKdW1wUHRyVGFnKTsKKyAgICAgICAgICAgICAgICBoYW5k
bGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1ha2VzaGlm
dENhdGNoSGFuZGxlciwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgICAgICAgICAgICAg
aGFuZGxlclRvUmVnaXN0ZXIuc3RhcnQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJp
dHMoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5lbmQgPSBuZXdFeGNlcHRp
b25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKSArIDE7CiAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKGhhbmRsZXJUb1JlZ2lzdGVyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzAy
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVF
eGNlcHRpb25IYW5kbGUKICAgICAgICAgcG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAg
ICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAjZW5kaWYKLSAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChOb1B0clRhZyksIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJU
YWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoY2FsbFRhZyksIEZ1bmN0aW9uUHRyKGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIGNhbGxUYWcpKSk7CiAKICAgICAgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQpAQCAtMTgwLDcgKzE4MSw4IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFeGNlcHRpb25IYW5kbGUKICAgICAgICAgcG9rZShHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
MSk7CiAjZW5kaWYKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChO
b1B0clRhZyksIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgUHRyVGFnIGNhbGxU
YWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoY2FsbFRhZyksIEZ1bmN0aW9uUHRy
KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKSk7CiAKICAgICAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQpAQCAtMjE0LDE0ICsyMTYsMTUgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAKICAgICAgICAgdXNl
ZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIFNpbXBsZUp1
bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNo
VGFibGVJbmRleCk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSwgTm9QdHJU
YWcpOworICAgICAgICBQdHJUYWcgc3dpdGNoVGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFn
LCAmdGFibGUpOworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0sIHN3aXRjaFRh
Zyk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNldHMuZ3Jvdyh0YWJsZS5icmFuY2hPZmZzZXRzLnNp
emUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgp
OyBqLS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1
bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7
CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAg
ICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0
YS5raW5kKSAtIHRhYmxlLm1pbl0gPQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdLCBOb1B0clRhZyk7
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNh
c2UudGFyZ2V0LmJsb2NrLT5pbmRleF0sIHN3aXRjaFRhZyk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC0yNDQsNyArMjQ3LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRh
LnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0s
IE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFnIHN3aXRjaFRhZyA9IHB0clRhZyhTd2l0Y2hUYWJs
ZVB0clRhZywgJnRhYmxlKTsKKworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0s
IHN3aXRjaFRhZyk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBmb3Ig
KGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQpA
QCAtMjUzLDcgKzI1OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAg
ICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3RyaW5n
SW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICAg
ICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Js
b2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdLCBOb1B0clRhZyk7CisgICAgICAg
ICAgICBpdGVyLT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9j
a0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2stPmluZGV4XSwgc3dpdGNoVGFnKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMjc1LDcgKzI4MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgaW5mby5wYXRjaC5zdGFydCA9IHN0YXJ0OwogCiAgICAg
ICAgIHB0cmRpZmZfdCBpbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9p
bnNbaV0ubV9kb25lLCBOb1B0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2luc1tpXS5tX2RvbmUpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5s
aW5lU2l6ZSA+PSAwKTsKICAgICAgICAgaW5mby5wYXRjaC5pbmxpbmVTaXplID0gaW5saW5lU2l6
ZTsKIApAQCAtMjgzLDEyICsyODgsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2lu
c1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpKTsKIAogICAgICAgICBpbmZvLnBhdGNo
LmRlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSwgTm9QdHJUYWcpKTsKKyAg
ICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0
aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKKyAgICBQdHJUYWcgbGlua1RhZyA9
IHB0clRhZyhMaW5rQ2FsbFB0clRhZywgdm0oKSk7CisgICAgYXV0byBsaW5rQ2FsbFRodW5rID0g
RnVuY3Rpb25QdHIodm0oKS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKTsKICAgICBmb3IgKGF1dG8mIHJlY29y
ZCA6IG1fanNDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqcmVjb3JkLmlu
Zm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
KHZtKCktPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuc2xvd0NhbGwsIGxpbmtDYWxsVGh1bmspOwogICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuc2xvd0NhbGwpKSwKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQudGFy
Z2V0VG9DaGVjaykpLApAQCAtMjk3LDEwICszMDQsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIGZvciAoSlNEaXJlY3RDYWxsUmVjb3JkJiBy
ZWNvcmQgOiBtX2pzRGlyZWN0Q2FsbHMpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0g
KnJlY29yZC5pbmZvOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocmVjb3JkLmNhbGwsIGxpbmtC
dWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5vUHRyVGFnKSk7CisgICAgICAgIGxp
bmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5z
bG93UGF0aCwgTmVhckNhbGxQdHJUYWcpKTsKICAgICAgICAgaW5mby5zZXRDYWxsTG9jYXRpb25z
KAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoKSwKLSAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5vUHRyVGFnKSwKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5lYXJDYWxsUHRyVGFnKSwKICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHJlY29yZC5jYWxsKSk7CiAg
ICAgfQogICAgIApAQCAtMzA4LDcgKzMxNSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKnJlY29yZC5pbmZv
OwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMoCiAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJsZUp1bXApLAotICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCwgTm9QdHJUYWcpLAorICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCwgTmVhckNhbGxQdHJUYWcpLAogICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwocmVjb3JkLmNhbGwpKTsKICAg
ICB9CiAgICAgCkBAIC0zMjMsOCArMzMwLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgICAgICB9CiAgICAgICAgIGlmIChpbmZvLm1fcmVwbGFjZW1lbnRT
b3VyY2UuaXNTZXQoKSkgewogICAgICAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uanVtcFJlcGxh
Y2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KAotICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UsIE5vUHRyVGFnKSwKLSAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGlu
YXRpb24sIE5vUHRyVGFnKSkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmZvLm1fcmVwbGFjZW1lbnRTb3VyY2UsIE5lYXJKdW1wUHRyVGFnKSwKKyAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24s
IE5lYXJKdW1wUHRyVGFnKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMzM0LDcgKzM0
MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAg
ICAgIFZlY3RvcjxMYWJlbD4mIGxhYmVscyA9IG1fZXhpdFNpdGVMYWJlbHNbaV07CiAgICAgICAg
ICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IGFkZHJlc3NlczsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBsYWJlbHMuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgYWRk
cmVzc2VzLmFwcGVuZChsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWxzW2pdLCBOb1B0clRhZyku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWxzW2pdLCBERkdPU1JFeGl0UHRyVGFnKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+YWRkT1NS
RXhpdFNpdGUoYWRkcmVzc2VzKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtMzUxLDcgKzM1
OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAg
ICAgIC8vIGkuZSwgd2UgZXhwbGljaXRseSBlbWl0dGVkIGFuIGV4Y2VwdGlvbkNoZWNrIHRoYXQg
d2Uga25vdyB3aWxsIGJlIGNhdWdodCBpbiB0aGlzIG1hY2hpbmUgZnJhbWUuCiAgICAgICAgICAg
ICAvLyBJZiB0aGlzICppcyBzZXQqLCBpdCBtZWFucyB3ZSB3aWxsIGJlIGxhbmRpbmcgYXQgdGhp
cyBjb2RlIGxvY2F0aW9uIGZyb20gZ2VuZXJpY1Vud2luZCBmcm9tIGFuCiAgICAgICAgICAgICAv
LyBleGNlcHRpb24gdGhyb3duIGluIGEgY2hpbGQgY2FsbCBmcmFtZS4KLSAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGNhdGNoTGFiZWwgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5t
X3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5vUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGNhdGNoTGFiZWwgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3JlcGxh
Y2VtZW50RGVzdGluYXRpb24sIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgICAgICAgICAg
SGFuZGxlckluZm8gbmV3RXhjZXB0aW9uSGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4
aXRDYWxsU2l0ZXNbaV0uYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogICAgICAgICAgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNb
aV0uY2FsbFNpdGVJbmRleDsKICAgICAgICAgICAgIG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQg
PSBjYWxsU2l0ZS5iaXRzKCk7CkBAIC01MDQsOSArNTExLDkgQEAgdm9pZCBKSVRDb21waWxlcjo6
Y29tcGlsZUZ1bmN0aW9uKCkKICAgICBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAgZW1pdFN0b3JlQ29k
ZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIG1fY2FsbEFyaXR5Rml4dXAgPSBjYWxsKE5v
UHRyVGFnKTsKKyAgICBDYWxsIGNhbGxBcml0eUZpeHVwID0gbmVhckNhbGwoKTsKICAgICBqdW1w
KGZyb21Bcml0eUNoZWNrKTsKLSAgICAKKwogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2Rl
LgogICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJhdG9ycyhtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcik7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbigpKTsKQEAgLTUzMCwxMSArNTM3LDExIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAg
IGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogCi0gICAg
bGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cih2bSgpLT5nZXRD
VElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKHZtKCktPmdldENUSVN0dWIoYXJpdHlGaXh1
cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSgpKSwg
TmVhckNhbGxQdHJUYWcpKSk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7CiAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBsaW5rQnVmZmVyLT5sb2Nh
dGlvbk9mKG1fYXJpdHlDaGVjaywgTm9QdHJUYWcpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrLCBD
b2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiAKICAgICBtX2dyYXBoLm1fcGxhbi5maW5h
bGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCiAgICAgICAgIG1fZ3JhcGgu
bV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwg
d2l0aEFyaXR5Q2hlY2spOwpAQCAtNTc0LDcgKzU4MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Om5v
dGljZUNhdGNoRW50cnlwb2ludCgKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmlz
Q2F0Y2hFbnRyeXBvaW50KTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNpY0Jsb2NrLmludGVyc2Vj
dGlvbk9mQ0ZBSGFzVmlzaXRlZCk7IC8vIEFuIGVudHJ5cG9pbnQgaXMgcmVhY2hhYmxlIGJ5IGRl
ZmluaXRpb24uCi0gICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJh
c2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCwg
Tm9QdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKSk7
CisgICAgbV9qaXRDb2RlLT5jb21tb24uYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KGJhc2ljQmxvY2su
Ynl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGJsb2NrSGVhZCwgRXhjZXB0aW9u
SGFuZGxlclB0clRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShhcmd1bWVudEZvcm1h
dHMpKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYg
YmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NiwxMCArMTU2LDEwIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
b3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCisgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBQdHJUYWcgdGFnID0gQ0Z1bmN0aW9uUHRyVGFnKQogICAgIHsKLSAgICAgICAgQ2Fs
bCBmdW5jdGlvbkNhbGwgPSBjYWxsKE5vUHRyVGFnKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbExpbmtSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbikpOworICAgICAgICBDYWxsIGZ1
bmN0aW9uQ2FsbCA9IGNhbGwodGFnKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtS
ZWNvcmQoZnVuY3Rpb25DYWxsLCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOwogICAgICAg
ICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTM2NCw3ICszNjQsNiBAQCBw
cml2YXRlOgogICAgIH07CiAgICAgVmVjdG9yPEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdEluZm8+
IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXM7CiAgICAgCi0gICAgQ2FsbCBtX2Nh
bGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcz
LDggKzI3Myw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nRigiICAgIE9TUiB1
c2luZyB0YXJnZXQgUEMgJXAuXG4iLCB0YXJnZXRQQyk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFy
Z2V0UEMpOwotICAgICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihzY3JhdGNoICsgMSkgPSB0YXJnZXRQ
QzsKLSAgICAKKyAgICAqYml0d2lzZV9jYXN0PHZvaWQqKj4oc2NyYXRjaCArIDEpID0gcmV0YWdD
b2RlUHRyKHRhcmdldFBDLCBDb2RlRW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGV4
ZWMpKTsKKwogICAgIFJlZ2lzdGVyKiBwaXZvdCA9IHNjcmF0Y2ggKyAyICsgQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnM7CiAgICAgCiAgICAgZm9yIChpbnQgaW5kZXggPSAtQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7IGluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihiYXNl
bGluZUZyYW1lU2l6ZSk7ICsraW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDYgKzc0OCwxMSBA
QCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRlCiAgICAgICAgIGlmICgh
dHJ1ZUNhbGxlcikgewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWls
KCkpOwogICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxG
cmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7CisjaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAg
ICAgICAgICAgdm9pZCogb2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKTsKKyAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8
dWludDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yo
dm9pZCopOworICAgICAgICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJp
dHdpc2VfY2FzdDxQdHJUYWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdF
bnRyeVNQKSk7CisjZW5kaWYKICAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2Fs
bEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7CiAgICAgICAgICAgICBjYWxsZXJG
cmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTc4Nyw2ICs3OTIsMTAgQEAgc3RhdGljIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDb250ZQogICAgICAgICAgICAgaWYgKHRydWVDYWxsZXItPmlubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGNwdS5mcDx1aW50OF90
Kj4oKSArIHRydWVDYWxsZXItPmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpOwogCisjaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICAg
ICAgdm9pZCogbmV3RW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lkKik7CisgICAgICAgICAgICBqdW1wVGFy
Z2V0ID0gdGFnQ29kZVB0cihqdW1wVGFyZ2V0LCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRy
eVNQKSk7CisjZW5kaWYKICAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKICAgICAgICAgfQogCkBAIC04NjAs
NyArODY5LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENvbnRleAogICAg
IH0KIAogICAgIHZtLnRvcENhbGxGcmFtZSA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLSAg
ICBjb250ZXh0LnBjKCkgPSBqdW1wVGFyZ2V0OworICAgIGNvbnRleHQucGMoKSA9IHVudGFnQ29k
ZVB0cihqdW1wVGFyZ2V0LCBDb2RlRW50cnlQdHJUYWcpOwogfQogCiBzdGF0aWMgdm9pZCBwcmlu
dE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBP
U1JFeGl0JiBleGl0KQpAQCAtOTg5LDE4ICs5OTgsMTkgQEAgdm9pZCBPU1JFeGl0OjplbWl0UmVz
dG9yZUFyZ3VtZW50cyhDQ2FsbAogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KSwgZGVjbHR5
cGUob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCk+Ojp2YWx1ZSwgIldl
IGFzc3VtZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYmVsb3cuIik7
CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DcmVhdGVEaXJl
Y3RBcmd1bWVudHNEdXJpbmdFeGl0KT4oCiAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QxKTsKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewog
ICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAg
ICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50
c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAg
ICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFy
Z3VtZW50c0R1cmluZ0V4aXQsIHRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFnKTsKICAgICAgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsK
IAogICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CkBA
IC0xMDM5LDYgKzEwNDksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGlsZU9T
UkV4CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQogICAgICAgICBy
ZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3Zl
cnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOwogCisgICAgUHRyVGFnIGV4aXRUYWcgPSBwdHJUYWco
REZHT1NSRXhpdFB0clRhZywgdm0pOwogICAgIHsKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwogCkBAIC0xMDY5LDE0ICsxMDgwLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBP
U1JFeGl0Ojpjb21waWxlT1NSRXgKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAg
ICAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpLAotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIsIE5vUHRyVGFnLAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsIGV4aXRUYWcsCiAgICAgICAg
ICAgICAiREZHIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0g
JXMiLAogICAgICAgICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3Jp
Z2luKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2lu
ZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgdG9DU3Ry
aW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwogICAg
IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChleGl0LmNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgp
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGV4aXQuY29kZUxvY2F0aW9uRm9y
UmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29kZS5yZXRhZ2dl
ZENvZGUoZXhpdFRhZywgTmVhckp1bXBQdHJUYWcpKSk7CiAKICAgICB2bS0+b3NyRXhpdEp1bXBE
ZXN0aW5hdGlvbiA9IGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTA5LDggKzEwOSw5IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmV4aXQpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odHJpZ2dlclJlb3B0aW1pemF0aW9uTm93
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIE5vUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKERGR09wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOworICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0YWdDRnVuY3Rpb25QdHIodHJpZ2dlclJlb3B0aW1pemF0aW9uTm93LCB0YWcpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
dGFnKTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZUFkanVzdGluZyA9IGppdC5qdW1w
KCk7CiAgICAgCiAgICAgdG9vRmV3RmFpbHMubGluaygmaml0KTsKQEAgLTE2Miw2ICsxNjMsMTIg
QEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAo
IXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFp
bCgpKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDMpOworI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgICAg
IGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAgICAgICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIGppdC50
YWdQdHIoR1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyKTsKKyNlbmRpZgogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QzLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpLCBHUFJJbmZvOjpy
ZWdUMyk7CiAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOwpAQCAt
MjA3LDcgKzIxNCwxNCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKICAgICAg
ICAgICAgIH0KIAorI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgICAgIGppdC5h
ZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAg
ICAgICAgaml0LnRhZ1B0cihHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0
KCkpKTsKKyNlbHNlCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRl
T2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOworI2VuZGlmCiAgICAg
ICAgIH0KIAogICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spKSk7CkBAIC0yNjIsOCArMjc2LDkgQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVC
YXJyaWVyKENDYWxsSGVscGVycwogI2VuZGlmCiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4ob3duZXIpOwotICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJh
dGlvbk9TUldyaXRlQmFycmllcikpLCBzY3JhdGNoKTsKLSAgICBqaXQuY2FsbChzY3JhdGNoLCBO
b1B0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhERkdPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyLCB0YWcpKSwgc2NyYXRj
aCk7CisgICAgaml0LmNhbGwoc2NyYXRjaCwgdGFnKTsKIAogI2lmIENQVShYODYpCiAgICAgaml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikgKiA0KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTMwOCw4ICszMjMsOSBA
QCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgCiAgICAgQVNT
RVJUKG1hcHBpbmcpOwogICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgdm9pZCoganVtcFRhcmdl
dCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKworICAgIFB0clRhZyBleGl0VGFnID0g
cHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICB2b2lkKiBqdW1w
VGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGUoKS0+ZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KSwgQ29kZUVu
dHJ5UHRyVGFnLCBleGl0VGFnKTsKIAogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9u
SGFuZGxlcigpKSB7CkBAIC0zMTgsNyArMzM0LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbAogICAgIH0KICAgICAKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQu
anVtcChHUFJJbmZvOjpyZWdUMiwgTm9QdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJl
Z1QyLCBleGl0VGFnKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMzAy
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzA2Miw3ICszMDYyLDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1v
bihFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJv
bSAiLCBSYXdQb2ludGVyKGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVy
KGVudHJ5QmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRM
OjpwcmVwYXJlT1NSRW50cnkoZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBvcmlnaW5CeXRl
Y29kZUluZGV4LCBzdHJlYW1JbmRleCkpIHsKICAgICAgICAgICAgICAgICBDT0RFQkxPQ0tfTE9H
X0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJ
bmRleCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxjaGFyKj4oYWRkcmVzcywg
Q29kZUVudHJ5UHRyVGFnLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihleGVjKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTgyLDcgKzMxODIsOSBAQCBzdGF0aWMgY2hhciog
dGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIGRhdGFMb2coIkltbWVkaWF0ZSBP
U1IgZW50cnk6IEZyb20gIiwgUmF3UG9pbnRlcihqaXRDb2RlKSwgIiBnb3QgZW50cnkgYmxvY2sg
IiwgUmF3UG9pbnRlcihqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCkpLCAiXG4iKTsKICAgICB2b2lk
KiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9j
aywgaml0Q29kZS0+b3NyRW50cnlCbG9jaygpLCBvcmlnaW5CeXRlY29kZUluZGV4LCBzdHJlYW1J
bmRleCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICBpZiAo
IWFkZHJlc3MpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByZXRhZ0NvZGVQ
dHI8Y2hhcio+KGFkZHJlc3MsIENvZGVFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4o
ZXhlYykpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAy
MzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjIsMTEgKzE2MiwxMiBAQCBjbGFzcyBDYWxsUmVzdWx0
QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lCiAgICAgOiBwdWJsaWMgQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+IHsKIHB1YmxpYzoKICAgICBD
YWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIEp1bXBUeXBl
IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwKKyAgICAg
ICAgSnVtcFR5cGUgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgRnVuY3Rpb25UeXBlIGZ1bmN0
aW9uLCBQdHJUYWcgY2FsbFRhZywKICAgICAgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9k
ZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1aXJlbWVudCwgUmVzdWx0VHlwZSByZXN1
bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgICAgIDogQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yPEp1bXBUeXBlLCBGdW5jdGlvblR5cGUsIFJlc3VsdFR5cGU+KAogICAgICAgICAgICAgZnJv
bSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2RlLCByZXF1aXJlbWVudCwgcmVzdWx0KQogICAgICAg
ICAsIG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCisg
ICAgICAgICwgbV9jYWxsVGFnKGNhbGxUYWcpCiAgICAgewogICAgIH0KIApAQCAtMTc1LDcgKzE3
Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHVucGFja0FuZEdlbmVyYXRlKFNwZWN1bGF0aXZl
SklUKiBqaXQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8QXJndW1lbnRzSW5kZXguLi4+KQogICAgIHsK
ICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQt
PmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlzLT5tX3Jl
c3VsdCksIHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cykuLi4pKTsKKyAgICAg
ICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwg
bV9jYWxsVGFnLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgc3RkOjpnZXQ8QXJndW1l
bnRzSW5kZXg+KG1fYXJndW1lbnRzKS4uLikpOwogICAgICAgICB0aGlzLT50ZWFyRG93bihqaXQp
OwogICAgIH0KIApAQCAtMTg1LDE2ICsxODYsMzYgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAg
IHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3VtZW50czsKKyAgICBQdHJUYWcgbV9jYWxs
VGFnOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogaW5saW5l
IHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAorICAgIEp1
bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwg
UHRyVGFnIGNhbGxUYWcsCisgICAgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSwgRXhjZXB0
aW9uQ2hlY2tSZXF1aXJlbWVudCByZXF1aXJlbWVudCwKKyAgICBSZXN1bHRUeXBlIHJlc3VsdCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxD
YWxsUmVzdWx0QW5kQXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I8SnVtcFR5cGUsIEZ1bmN0aW9u
VHlwZSwgUmVzdWx0VHlwZSwgQXJndW1lbnRzLi4uPj4oCisgICAgICAgIGZyb20sIGppdCwgZnVu
Y3Rpb24sIGNhbGxUYWcsIHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3VsdCwgYXJndW1lbnRz
Li4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgoraW5saW5l
IHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhDYWxsKAogICAgIEp1
bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbiwK
ICAgICBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlLCBFeGNlcHRpb25DaGVja1JlcXVpcmVt
ZW50IHJlcXVpcmVtZW50LAogICAgIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQogewogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGxSZXN1bHRBbmRBcmd1
bWVudHNTbG93UGF0aEdlbmVyYXRvcjxKdW1wVHlwZSwgRnVuY3Rpb25UeXBlLCBSZXN1bHRUeXBl
LCBBcmd1bWVudHMuLi4+PigKLSAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgc3BpbGxNb2Rl
LCByZXF1aXJlbWVudCwgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworICAgICAgICBmcm9tLCBqaXQs
IGZ1bmN0aW9uLCBDRnVuY3Rpb25QdHJUYWcsIHNwaWxsTW9kZSwgcmVxdWlyZW1lbnQsIHJlc3Vs
dCwgYXJndW1lbnRzLi4uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSnVtcFR5cGUsIHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgoraW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhD
YWxsKAorICAgIEp1bXBUeXBlIGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEZ1bmN0aW9uVHlw
ZSBmdW5jdGlvbiwgUHRyVGFnIGNhbGxUYWcsCisgICAgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ZnJvbSwgaml0LCBmdW5jdGlvbiwgY2FsbFRhZywgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNr
UmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KQEAgLTIwMyw3ICsyMjQsNyBAQCBp
bmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yCiAgICAgUmVzdWx0VHlwZSBy
ZXN1bHQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7CiAgICAgcmV0dXJuIHNsb3dQYXRoQ2Fs
bCgKLSAgICAgICAgZnJvbSwgaml0LCBmdW5jdGlvbiwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNo
ZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAg
ICAgIGZyb20sIGppdCwgZnVuY3Rpb24sIENGdW5jdGlvblB0clRhZywgTmVlZFRvU3BpbGwsIEV4
Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLCByZXN1bHQsIGFyZ3VtZW50cy4u
Lik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlv
blR5cGUsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHVuc2lnbmVkIG51bWJlck9mQXNzaWdubWVudHM+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAogICAgIGF1dG8gc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBl
OjpHZXQgPyBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUgOiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsCisgICAgICAgIHNsb3dDYXNlcywgdGhpcywgdHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQg
PyBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUgOiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IEdldFByb3BlcnR5UHRyVGFnLAogICAgICAgICBzcGlsbE1vZGUsIEV4Y2VwdGlvbkNoZWNrUmVx
dWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAogICAgICAgICByZXN1bHRHUFIsIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAKQEAgLTIw
OCw3ICsyMDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkV2l0aFRoCiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAogICAgIGF1dG8g
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsCisgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLAogICAgICAg
ICBEb250U3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWlyZW1lbnQ6OkNoZWNrTmVlZGVkLAogICAg
ICAgICByZXN1bHRHUFIsIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCB0aGlzR1BSLCBpZGVudGlm
aWVyVUlEKGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIAogICAgIGF1dG8gc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwKKyAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywg
Tm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZUdQUiwgYmFzZUdQUiwKICAgICAgICAgaWRl
bnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAKICAgICBtX2ppdC5hZGRQdXRCeUlkKGdl
biwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtMjY5Nyw3ICsyNjk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
CisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxP
YmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFnLAogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
Z3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI3NTMsNyArMjc1Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LCBHZXRQcm9wZXJ0eVB0clRhZywKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0yODA1LDcg
KzI4MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIEdldFByb3BlcnR5UHRyVGFnLAogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI5
NjQsNyArMjk2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCiAg
ICAgICAgICAgICAgICAgICAgICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAg
ICA6IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QpLAotICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIFB1dFByb3Bl
cnR5UHRyVGFnLCBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CkBAIC0zMDQ4LDcgKzMwNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgPyAobm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgOiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/
IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QgOiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KSwKLSAgICAgICAgICAgICAg
ICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAg
ICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVB0clRhZywgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCB2YWx1ZVJlZykpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpAQCAtNTAyMCw3ICs1MDIwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgcmVzdWx0R1BS
LCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZS0+aW50ZXJuYWxN
ZXRob2RUeXBlKCkpKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBIYXNQ
cm9wZXJ0eVB0clRhZywgcmVzdWx0R1BSLCBiYXNlR1BSLCBpbmRleEdQUiwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4obm9kZS0+aW50ZXJuYWxNZXRob2RUeXBlKCkpKSk7CiAgICAgICAgIAogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNTA3OSw3ICs1MDc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbCwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdEdQUiwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNTI5Miw3ICs1MjkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG9zckVudGVyLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICAgICAgICAgIG1faml0Lmp1bXAodGVtcEdQUiwgTm9QdHJUYWcpOworICAgICAg
ICAgICAgbV9qaXQuanVtcCh0ZW1wR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgICAgIH0pOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjMwMjkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4NjEsNiArMzg2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwg
KmFkZElDR2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKKyAgICBQdHJUYWcg
bWF0aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsK
IAogICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAgQVNTRVJUKCFhZGRJQ0dlbmVy
YXRpb25TdGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKQEAgLTM4OTAsOSArMzg5MSw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKGFkZElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJl
cGF0Y2gpCi0gICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVw
YXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0
aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgbWF0aElDVGFnLCByZXN1bHRS
ZWdzLCBpbm5lckxlZnRSZWdzLCBpbm5lclJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhZGRJQ0dlbmVyYXRpb25TdGF0
ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBhZGRJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywg
aW5uZXJSaWdodFJlZ3MpOwogCiAgICAgICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAg
ICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwpAQCAtMzkyMSw3ICszOTIyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKgogICAgICAgICB9CiAKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNo
aW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
ICAgICB9CiAKQEAgLTQ1NzgsNiArNDU3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNYXRoSUMoTm9kZSoKIAogICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwg
KmljR2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKKyAgICBQdHJUYWcgbWF0
aElDVGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbWF0aElDLT5pbnN0cnVjdGlvbigpKTsKIAog
ICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAgQVNTRVJUKCFpY0dlbmVyYXRpb25T
dGF0ZS0+c2xvd1BhdGhKdW1wcy5lbXB0eSgpKTsKQEAgLTQ1OTcsOSArNDU5OSw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSoKICAgICAgICAgICAgIHNpbGVudFNw
aWxsKHNhdmVQbGFucyk7CiAKICAgICAgICAgICAgIGlmIChpY0dlbmVyYXRpb25TdGF0ZS0+c2hv
dWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9F
Sk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVncywgY2hpbGRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1p
Yz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgaWNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVw
YXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAg
IGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiwgbWF0aElDVGFnLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOwogCiAgICAg
ICAgICAgICBzaWxlbnRGaWxsKHNhdmVQbGFucyk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwpAQCAtNDYyMCw3ICs0NjIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU1hdGhJQyhOb2RlKgogICAgICAgICB9KTsKICAgICB9IGVsc2UgewogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlv
biwgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBh
dGNoaW5nRnVuY3Rpb24sIG1hdGhJQ1RhZywgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIzMDI5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTM2LDEwICs5MzYsMTkgQEAgcHVibGljOgogICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgICAgIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCiAgICAg
SklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgUmVzdWx0UmVnVHlwZSByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICBjYWxsT3BlcmF0
aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBSZXN1bHRSZWdUeXBlIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8
T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1
bHQob3BlcmF0aW9uLCB0YWcsIHJlc3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgUmVzdWx0UmVnVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICBGdW5jdGlvblRyYWl0czxPcGVyYXRp
b25UeXBlPjo6aGFzUmVzdWx0LAorICAgIEpJVENvbXBpbGVyOjpDYWxsPgorICAgIGNhbGxPcGVy
YXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFJlc3VsdFJlZ1R5cGUgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IENGdW5jdGlvblB0clRhZywgcmVzdWx0LCBhcmdzLi4uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBBcmcsIHR5cGVuYW1lLi4uIEFyZ3M+
CkBAIC05NDcsMzAgKzk1Niw1OCBAQCBwdWJsaWM6CiAgICAgICAgICFGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0CiAgICAgICAgICYmICFzdGQ6OmlzX3NhbWU8QXJnLCBO
b1Jlc3VsdFRhZz46OnZhbHVlLAogICAgIEpJVENvbXBpbGVyOjpDYWxsPgotICAgIGNhbGxPcGVy
YXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZyBhcmcsIEFyZ3MuLi4gYXJncykKKyAg
ICBjYWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBBcmcg
YXJnLCBBcmdzLi4uIGFyZ3MpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmcsIGFyZ3MuLi4pOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24sIHRhZyk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQXJn
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICFGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0CisgICAgICAgICYmICFzdGQ6Omlz
X3NhbWU8QXJnLCBOb1Jlc3VsdFRhZz46OnZhbHVlLAorICAgIEpJVENvbXBpbGVyOjpDYWxsPgor
ICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIEFyZyBhcmcsIEFyZ3Mu
Li4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
Q0Z1bmN0aW9uUHRyVGFnLCBhcmcsIGFyZ3MuLi4pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgc3RkOjplbmFibGVf
aWZfdDwKICAgICAgICAgIUZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQs
CiAgICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2FsbE9wZXJhdGlvbihPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcsIEFyZ3MuLi4gYXJncykKKyAgICBjYWxsT3BlcmF0aW9u
KE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnLCBOb1Jlc3VsdFRhZywgQXJncy4u
LiBhcmdzKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbiwgdGFnKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CisgICAgICAgICFGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFz
UmVzdWx0LAorICAgIEpJVENvbXBpbGVyOjpDYWxsPgorICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIE5vUmVzdWx0VGFnLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIENGdW5jdGlvblB0clRhZywgTm9S
ZXN1bHQsIGFyZ3MuLi4pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGU+CiAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgIUZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsCiAgICAgSklUQ29tcGlsZXI6OkNhbGw+Ci0gICAgY2Fs
bE9wZXJhdGlvbihPcGVyYXRpb25UeXBlIG9wZXJhdGlvbikKKyAgICBjYWxsT3BlcmF0aW9uKE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBQdHJUYWcgdGFnKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uLCB0YWcp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGU+CisgICAgc3Rk
OjplbmFibGVfaWZfdDwKKyAgICAgICAgIUZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsCisgICAgSklUQ29tcGlsZXI6OkNhbGw+CisgICAgY2FsbE9wZXJhdGlvbihPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnKTsKICAgICB9CiAKICN1bmRlZiBGSVJTVF9BUkdV
TUVOVF9UWVBFCkBAIC0xMDA3LDExICsxMDQ0LDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhZGQgY2FsbCBpbnN0cnVjdGlvbnMsIG9wdGlvbmFsbHkgc2V0dGlu
ZyByZXN1bHRzLCBhbmQgb3B0aW9uYWxseSByb2xsaW5nIGJhY2sgdGhlIGNhbGwgZnJhbWUgb24g
YW4gZXhjZXB0aW9uLgotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25z
dCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZyA9IENGdW5jdGlvblB0clRhZykKICAg
ICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuZW1p
dFN0b3JlQ29kZU9yaWdpbihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7CisgICAgICAgIHJldHVybiBtX2pp
dC5hcHBlbmRDYWxsKGZ1bmN0aW9uLCB0YWcpOwogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCiAgICAgewpAQCAtMTAyNiwzMSArMTA2Myw0MyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNl
dFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9uUHRyVGFnLCByZXN1bHQpOworICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBQdHJUYWcgdGFnLCBHUFJSZWcgcmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisgICAg
eworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwg
dGFnKTsKICAgICAgICAgbV9qaXQuc2V0dXBSZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOwogICAg
ICAgICByZXR1cm4gY2FsbDsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0MSwgR1BSUmVnIHJlc3VsdDIpCisgICAg
eworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgQ0Z1bmN0aW9u
UHRyVGFnLCByZXN1bHQxLCByZXN1bHQyKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
YXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRh
ZywgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIHJlc3VsdFJlZ3MuZ3By
KCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChmdW5jdGlvbiwgdGFnLCBy
ZXN1bHRSZWdzLmdwcigpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVz
dWx0KGZ1bmN0aW9uLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KGZ1bmN0aW9uLCB0YWcsIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rpb24sIENGdW5jdGlvblB0clRhZywgcmVz
dWx0UmVncyk7CisgICAgfQogI2lmIENQVShYODYpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRlBSUmVnIHJlc3Vs
dCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBQdHJUYWcgdGFnLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbiwgdGFnKTsKICAg
ICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5h
c3NlbWJsZXIoKS5mc3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHJlc3VsdCk7CkBAIC0xMDU4LDIzICsxMTA3LDI3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogI2VsaWYgQ1BVKEFSTSkgJiYgIUNQVShBUk1fSEFSREZQKQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25Q
dHIgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUHRyVGFnIHRhZywgRlBS
UmVnIHJlc3VsdCkKICAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGwoZnVuY3Rpb24sIHRhZyk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEZQUlJl
ZykKICAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAgICAgcmV0dXJu
IGNhbGw7CiAgICAgfQogI2Vsc2UgLy8gQ1BVKFg4Nl82NCkgfHwgKENQVShBUk0pICYmIENQVShB
Uk1fSEFSREZQKSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBGUFJS
ZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFB0clRhZyB0YWcsIEZQUlJlZyByZXN1bHQpCiAgICAg
ewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7
CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uLCB0
YWcpOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCiAgICAgICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHQpOwogICAgICAg
ICByZXR1cm4gY2FsbDsKICAgICB9CiAjZW5kaWYKLSAgICAKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBGUFJSZWcg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQoZnVuY3Rp
b24sIENGdW5jdGlvblB0clRhZywgcmVzdWx0KTsKKyAgICB9CisKICAgICB2b2lkIGJyYW5jaERv
dWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0LCBGUFJS
ZWcgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5h
dGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZp
c2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRUaHVua0dlbmVyYQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKICAgICBqaXQucHJv
YmUoT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQsIHZtKTsKKyAgICBQdHJUYWcgb3NyRXhpdFRodW5r
VGFnID0gcHRyVGFnKERGR09TUkV4aXRQdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgb3NyRXhpdFRodW5rVGFnLCAiREZHIE9TUiBleGl0
IHRodW5rIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTgyLDcgKzgzLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogI2VuZGlmCiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgUHRyVGFn
IGNhbGxUYWcgPSBwdHJUYWcoREZHT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7
CiAKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVm
ZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICBqaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CkBAIC05OSwxMyArMTAxLDE0IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICNlbmRpZgogICAgIH0KIAot
ICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JFeGl0
SnVtcERlc3RpbmF0aW9uKSwgTm9QdHJUYWcpOworICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MoJnZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSwgcHRyVGFnKERG
R09TUkV4aXRQdHJUYWcsIHZtKSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2Fs
bCwgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQsIE5vUHRyVGFnKTsKLSAgICAKLSAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJh
dGlvbiB0aHVuayIpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBGdW5jdGlv
blB0cihPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCwgY2FsbFRhZykpOworCisgICAgUHRyVGFnIG9z
ckV4aXRUaHVua1RhZyA9IHB0clRhZyhERkdPU1JFeGl0UHRyVGFnLCB2bSk7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIG9zckV4aXRUaHVua1RhZywgIkRGRyBPU1IgZXhp
dCBnZW5lcmF0aW9uIHRodW5rIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRy
eVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTE0NCwxMCArMTQ3LDExIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXIKICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVz
RnJvbUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS0+dG9wRW50cnlGcmFtZSk7CiAgICAg
aml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKLSAgICBqaXQuanVtcChH
UFJJbmZvOjpyZWdUMSwgTm9QdHJUYWcpOwotICAgIAorICAgIGppdC5qdW1wKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAgICBQdHJUYWcgb3NyRW50cnlU
aHVua1RhZyA9IHB0clRhZyhERkdPU1JFbnRyeVB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIkRGRyBPU1IgZW50cnkgdGh1bmsiKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgb3NyRW50cnlUaHVua1RhZywgIkRGRyBP
U1IgZW50cnkgdGh1bmsiKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsOSArNzIyLDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAg
IGFkZExpbmtUYXNrKAogICAgICAgICBbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRy
VGFnLCAmdm0pOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVu
ayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKICAgICAgICAgICAgIGluZm8tPnNldFNs
b3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywgdm0sIG51bGxwdHIsIHRy
dWUpKTsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJl
bCh2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwodmlydHVhbFRodW5rLnJldGFnZ2VkQ29kZShsaW5rVGFnLCBO
ZWFyQ2FsbFB0clRhZykpKTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgSklUOjpl
bWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJy
YW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICBqdW1wKHJldHVyblZhbHVl
R1BSLCBOb1B0clRhZyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQogI2VuZGlmCkBA
IC03MzUsMjUgKzczNSw4IEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29t
cGkKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0Uo
UE9JTlRFUl9QUk9GSUxJTkcpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1JlZ2lzdGVyKTsKLSAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1Qx
KTsKLSAgICAgICAgUHRyVGFnIHRlbXBUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRlbXBUYWcpLCByZWdUMSk7
Ci0gICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgc3RvcmVQdHIo
bGlua1JlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVy
blBDT2Zmc2V0KCkpKTsKLSNlbmRpZgogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0
dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhKSVRUaHVua1B0clRh
ZywgbV92bSksIE5lYXJDYWxsUHRyVGFnKSk7Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRF
Ul9QUk9GSUxJTkcpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1JlZ2lzdGVyKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHRlbXBUYWcpLCByZWdUMSk7Ci0gICAgICAgIHVudGFnUHRyKGxpbmtS
ZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIHRhZ1B0
cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgc3RvcmVQdHIobGlua1JlZ2lzdGVyLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsK
LSNlbmRpZgorICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1
cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCBtX3ZtKSwg
TmVhckNhbGxQdHJUYWcpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgbV9ieXRl
Y29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgLy8gUmVz
ZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDIzMDI5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MCw3ICsyNTAsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwo
bV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgIFB0
clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCBtX3ZtKTsKKyAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Cisg
ICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQdHJUYWcpKTsKIAogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHJldmlzaW9uIDIzMDI5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMiw2ICsyMzIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsgfQorICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb247IH0K
IAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIHNpemVfdCBtX2dlbmVyYXRlZENvZGVT
aXplIHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7CiAg
ICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQ
UiwgTm9QdHJUYWcpOworICAgIFB0clRhZyBleGNlcHRpb25IYW5kbGVyVGFnID0gRXhjZXB0aW9u
SGFuZGxlclB0clRhZzsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBleGNlcHRpb25IYW5kbGVy
VGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CkBAIC05NjQsNyArOTY1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChJbnN0cnVjdAogICAgICAgICAgICAgYWJvcnRXaXRo
UmVhc29uKEpJVFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CiAgICAgICAgICAgICBv
ay5saW5rKHRoaXMpOwogICAgICAgICB9Ci0gICAgICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5v
UHRyVGFnKTsKKyAgICAgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2xvb3BfaGludCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsNiArODY3LDcgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxs
ZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBQdHJUYWcgdGhyb3dFeGNlcHRp
b25UYWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKIAogICAgIGV4ZWNDYWxs
ZWUtPnNldENvZGVCbG9jaygwKTsKIApAQCAtODgxLDkgKzg4Miw4IEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENh
bGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVl
KSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwg
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0
aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAg
ICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxl
QWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihL
ZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIApAQCAtODk0LDkgKzg5NCw4IEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAKICAgICAgICAgQVNTRVJU
KGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKTsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOwotICAgICAg
ICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFn
LCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAKQEAgLTkxMiw5ICs5MTEsOCBA
QCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAgIGV4ZWND
YWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0tPmhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24oZXhlY0NhbGxlZSkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcs
IHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVu
a1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1l
KSk7CiAgICAgICAgIH0KIApAQCAtOTIzLDkgKzkyMSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBD
b25zdHJ1Y3RUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7Ci0gICAgUHRyVGFnIHRodW5r
VGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRk
cmVzcygpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
IH0KIApAQCAtOTM1LDcgKzkzMiw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKLSAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFn
ID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxsUHRyVGFnLCB2bSk7CisgICAgUHRyVGFnIGxpbmtl
ZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rQ2FsbFJlc3VsdFB0clRhZywgdm0pOwogICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCkBA
IC05NzQsOCArOTcxLDggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8g
aGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgUHRyVGFnIHRodW5r
VGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKTsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gcmV0YWdD
b2RlUHRyKHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRodW5rVGFnLCBsaW5rZWRUYXJnZXRU
YWcpOworICAgICAgICAgICAgUHRyVGFnIHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93
RXhjZXB0aW9uUHRyVGFnLCB2bSk7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCBsaW5rZWRUYXJnZXRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAt
MTA4NSwxMiArMTA4MiwxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JX
aXRoCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJs
ZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkp
IHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgUHRyVGFn
IHRocm93RXhjZXB0aW9uVGFnID0gcHRyVGFnKFRocm93RXhjZXB0aW9uUHRyVGFnLCB2bSk7CiAK
ICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1
Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihleGVjLCBmdW5jdGlvbikpOwotICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFn
ID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHJvd0V4Y2VwdGlvblRhZywgcmVz
dWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTEwOTgsOSArMTA5
NSw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
PEZ1bmN0aW9uRXhlY3V0YWJsZT4oKnZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxv
Y2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
ID09IHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJU
YWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0
aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAg
IHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlKHRocm93RXhjZXB0aW9uVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTE1LDcgKzExMTEsNyBAQCBTbG93UGF0aFJl
dHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZv
ckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7Ci0gICAgUHRyVGFnIHJl
c3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsUHRyVGFnLCB2bSk7
CisgICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0
UHRyVGFnLCB2bSk7CiAgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCwgcmVzdWx0VGFnKTsKIAogICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgKmNh
bGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsKQEAgLTExMjgs
NyArMTEyNCw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
OwotICAgIFB0clRhZyByZXN1bHRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJU
YWcsIHZtKTsKKyAgICBQdHJUYWcgcmVzdWx0VGFnID0gcHRyVGFnKExpbmtWaXJ0dWFsQ2FsbFJl
c3VsdFB0clRhZywgdm0pOwogICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWND
YWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRU
YWcpOwogfQogCkBAIC0xNTI4LDcgKzE1MjQsMTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aQogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAg
ICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0aW1pemUoVHJ1
ZVRyaVN0YXRlKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh2bS5nZXRDVElTdHViKERG
Rzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGRh
dGFCdWZmZXIpOworICAgICAgICB2b2lkKiB0YXJnZXRQQyA9IHZtLmdldENUSVN0dWIoREZHOjpv
c3JFbnRyeVRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKERGR09TUkVudHJ5UHRyVGFnLCAmdm0pOworICAg
ICAgICB0YXJnZXRQQyA9IHJldGFnQ29kZVB0cih0YXJnZXRQQywgdGh1bmtUYWcsIGJpdHdpc2Vf
Y2FzdDxQdHJUYWc+KGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YXJnZXRQ
QywgZGF0YUJ1ZmZlcik7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkpIHsKQEAgLTE1NzcsOCArMTU3NiwxMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRyeU9TUkVudGVyCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRSZXBsYWNlbWVudCA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5yZXBsYWNlbWVudCgpOwogICAgIHN3aXRjaCAob3B0aW1pemVk
UmVwbGFjZW1lbnQtPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAg
IGNhc2UgSklUQ29kZTo6RlRMSklUOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+
KERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5
dGVjb2RlSW5kZXgpKTsKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogeworICAgICAgICB2b2lk
KiBlbnRyeSA9IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFj
ZW1lbnQsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgICAgICBh
c3NlcnRJc1RhZ2dlZFdpdGgoZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGVudHJ5KTsKKyAgICB9CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTU5NSw4ICsxNTk4LDEyIEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXIKIAogICAgIHN3aXRjaCAob3B0aW1pemVkUmVw
bGFjZW1lbnQtPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgotICAgIGNh
c2UgSklUQ29kZTo6RlRMSklUOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KERG
Rzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1lbnQsIGJ5dGVj
b2RlSW5kZXgpKTsKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDogeworICAgICAgICB2b2lkKiBl
bnRyeSA9IERGRzo6cHJlcGFyZUNhdGNoT1NSRW50cnkoZXhlYywgb3B0aW1pemVkUmVwbGFjZW1l
bnQsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgICAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgoZW50cnksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGVudHJ5KTsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsMjAgKzY2OCwyMSBAQCB2b2lkIHJlcGF0Y2hJ
bigKICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBvcGVyYXRpb25Jbik7CiB9CiAKLXN0YXRp
YyB2b2lkIGxpbmtTbG93Rm9yKFZNKiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYs
IFB0clRhZyBsaW5rVGFnKQogewotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2Rl
UmVmLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLCBDb2RlTG9jYXRpb25MYWJlbChjb2RlUmVmLnJl
dGFnZ2VkQ29kZShsaW5rVGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKIH0KIAotc3RhdGljIHZvaWQg
bGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQorc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0qIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBQdHJUYWcgbGlu
a1RhZykKIHsKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0Q1RJU3R1
YihnZW5lcmF0b3IpKTsKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCB2bS0+Z2V0
Q1RJU3R1YihnZW5lcmF0b3IpLCBsaW5rVGFnKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1Nsb3dG
b3IoVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKKyAgICBQdHJUYWcgbGlu
a1RhZyA9IHB0clRhZyhMaW5rVmlydHVhbENhbGxQdHJUYWcsIHZtKTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0lu
Zm8pOwotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Cisg
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rLCBsaW5rVGFnKTsK
ICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVh
bFRodW5rLCAqdm0sIG51bGxwdHIsIHRydWUpKTsKIH0KIApAQCAtNzI3LDcgKzcyOCw4IEBAIHZv
aWQgbGlua0ZvcigKICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNh
bGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKIAogICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lh
bGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMo
KSkgewotICAgICAgICBsaW5rU2xvd0Zvcigmdm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWco
TGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsKKyAgICAgICAgbGlua1Nsb3dGb3IoJnZt
LCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvciwgbGlua1Rh
Zyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC03NjYsOSArNzY4LDggQEAgdm9p
ZCBsaW5rU2xvd0ZvcigKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKIH0KIAot
c3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKK3N0YXRpYyB2b2lkIHJldmVydENhbGwo
Vk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWYsIFB0clRhZyBjb2RlVGFnKQogewotICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2Rl
UmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBOZWFyQ2FsbFB0clRhZyk7CiAgICAgaWYg
KGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNv
ZGVCbG9jaygpOwogICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNhbGxUeXBlKCkgPT0gQ2FsbExp
bmtJbmZvOjpEaXJlY3RUYWlsQ2FsbCkKQEAgLTc3OSw3ICs3ODAsNyBAQCBzdGF0aWMgdm9pZCBy
ZXZlcnRDYWxsKFZNKiB2bSwgQ2FsbExpbmtJCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0lu
Zm8uaG90UGF0aEJlZ2luKCkpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKSksIDApOwotICAgICAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKyAgICAgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZiwgY29kZVRhZyk7CiAgICAgICAgIGNhbGxMaW5r
SW5mby5jbGVhckNhbGxlZSgpOwogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CkBAIC03OTQsNyArNzk1LDggQEAgdm9pZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbAogICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxv
ZygiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlcigpLCAiXG4i
KTsKICAgICAKLSAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKTsKKyAgICBQdHJUYWcgbGlua1RhZyA9IHB0clRhZyhM
aW5rQ2FsbFB0clRhZywgJnZtKTsKKyAgICByZXZlcnRDYWxsKCZ2bSwgY2FsbExpbmtJbmZvLCB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLCBsaW5rVGFnKTsKIH0KIAogdm9p
ZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKQpAQCAtODA2LDggKzgwOCw5IEBAIHZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiBl
eGVjLCBDYWwKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9j
aykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2Rl
T3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSksICJcbiIp
OwogCisgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUHRyVGFnLCAm
dm0pOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1
bmtGb3IoJnZtLCBjYWxsTGlua0luZm8pOwotICAgIHJldmVydENhbGwoJnZtLCBjYWxsTGlua0lu
Zm8sIHZpcnR1YWxUaHVuayk7CisgICAgcmV2ZXJ0Q2FsbCgmdm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rLCBsaW5rVGFnKTsKICAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoY3JlYXRl
SklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwgbnVsbHB0ciwgdHJ1ZSkpOwogfQogCkBA
IC0xMDgzLDcgKzEwODYsOCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmxh
YmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCkubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgUHRyVGFnIGxpbmtU
YWcgPSBwdHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgJnZtKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIobGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUobGlua1RhZywgTmVhckNhbGxQ
dHJUYWcpKSk7CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2
aXNpb24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
LCBjYWxsVGFnKTsKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCi0gICAg
UHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKKyAgICBQdHJUYWcgdGhyb3dFeGNlcHRpb25U
YWcgPSBwdHJUYWcoVGhyb3dFeGNlcHRpb25QdHJUYWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJUaHJvdyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cg
cGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0aHJv
d0V4Y2VwdGlvblRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5r
Iik7CiB9CiAKIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKApAQCAtMTQ1LDExICsxNDUsMTIgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIC8vIGJlZW4gYWRq
dXN0ZWQsIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLgog
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRU
YWcgPSBwdHJUYWcoT3BlcmF0aW9uTGlua0NhbGxQdHJUYWcsIHZtKTsKKyAgICBQdHJUYWcgZXhw
ZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoTGlua0NhbGxSZXN1bHRQdHJUYWcsIHZtKTsK
ICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCwgZXhwZWN0ZWRMaW5r
ZWRUYXJnZXRUYWcpOwogCisgICAgUHRyVGFnIGxpbmtUYWcgPSBwdHJUYWcoTGlua0NhbGxQdHJU
YWcsIHZtKTsKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcs
ICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIGxpbmtUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAK
IC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2lu
Y2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgpAQCAtMTU4LDExICsxNTksMTIgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbAogewogICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3Bl
cmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOworICAgIFB0clRhZyBleHBlY3Rl
ZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhMaW5rUG9seW1vcnBoaWNDYWxsUmVzdWx0UHRyVGFn
LCB2bSk7CiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGlj
Q2FsbCwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOwogCisgICAgUHRyVGFnIGxpbmtUYWcgPSBw
dHJUYWcoTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93
IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgbGlu
a1RhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8g
RklYTUU6IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVh
bCBjYWxsIHZzLiBhIHNsb3cKQEAgLTI0NiwxMiArMjQ4LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAog
ICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxs
IHNsb3cgcGF0aC4KLSAgICBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWco
T3BlcmF0aW9uVmlydHVhbENhbGxQdHJUYWcsIHZtKTsKKyAgICBQdHJUYWcgZXhwZWN0ZWRMaW5r
ZWRUYXJnZXRUYWcgPSBwdHJUYWcoTGlua1ZpcnR1YWxDYWxsUmVzdWx0UHRyVGFnLCB2bSk7CiAg
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlu
a2VkVGFyZ2V0VGFnKTsKIAorICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtWaXJ0dWFs
Q2FsbFB0clRhZywgdm0pOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZl
ciwgTmVhckNhbGxQdHJUYWcsCisgICAgICAgIHBhdGNoQnVmZmVyLCBsaW5rVGFnLAogICAgICAg
ICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLAogICAgICAgICBjYWxsTGlua0luZm8uY2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6UmVndWxhciA/ICJjYWxsIiA6IGNhbGxMaW5rSW5mby5jYWxs
TW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwgY2FsbCIgOiAiY29uc3RydWN0Iik7CiB9
CkBAIC00ODcsNiArNDkwLDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2Vu
ZXJhdG8KICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgogICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9Q
Uk9GSUxJTkcpCisgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUklu
Zm86OnJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGV4
dHJhVGVtcCk7CisgICAgaml0LnVudGFnUHRyKEdQUkluZm86OnJlZ1QzLCBleHRyYVRlbXApOwor
ICAgIFB0clRhZyB0ZW1wUmV0dXJuUENUYWcgPSBwdHJUYWcoQXJpdHlGaXh1cFB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRy
KHRlbXBSZXR1cm5QQ1RhZyksIGV4dHJhVGVtcCk7CisgICAgaml0LnRhZ1B0cihHUFJJbmZvOjpy
ZWdUMywgZXh0cmFUZW1wKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDMsIEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6
OnJldHVyblBDT2Zmc2V0KCkpKTsKKyNlbmRpZgogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklU
OjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQubG9h
ZDMyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpLCBK
U0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkMzIoSlNJbnRlcmZhY2VK
SVQ6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIEpTSW50
ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOwpAQCAtNTM0LDYgKzU0NiwxNSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVyYXRvCiAgICAgCiAgICAgZG9uZS5saW5rKCZqaXQp
OwogCisjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCisgICAgaml0Lmxv
YWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQu
bW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0ZW1wUmV0dXJuUENUYWcpLCBleHRy
YVRlbXApOworICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKKyAg
ICBqaXQuYWRkUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGV4dHJhVGVtcCk7CisgICAg
aml0LnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0cmFUZW1wKTsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDMsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKKyNlbmRpZgorCiAjICBp
ZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBl
bmRpZgpAQCAtNTk4LDggKzYxOSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVw
R2VuZXJhdG8KICNlbmRpZiAvLyBFbmQgb2YgVVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbi4KIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIFB0
clRhZyB0YWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiZml4dXAgYXJpdHkiKTsKKyAgICBQdHJUYWcgYXJp
dHlGaXh1cFRhZyA9IHB0clRhZyhBcml0eUZpeHVwUHRyVGFnLCB2bSk7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIGFyaXR5Rml4dXBUYWcsICJmaXh1cCBhcml0eSIpOwog
fQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQpA
QCAtNjA5LDcgKzYzMCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVy
YXQKICAgICBqaXQuYnJlYWtwb2ludCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIE5lYXJDYWxsUHRyVGFnLCAidW5yZWFjaGFibGUgdGh1bmsiKTsKKyAgICBQdHJUYWcgdGh1
bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOwogfQogCiBz
dGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQsIFZNKiB2
bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmNwcAkocmV2aXNp
b24gMjMwMjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHRyVGFn
LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBj
aGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCi17Ci0jZGVmaW5lIEhBTkRMRV9QVFJUQUdfQ0FT
RShfdGFnTmFtZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFtZTsKLQotICAgIHN3aXRj
aCAodGFnKSB7Ci0gICAgICAgIEZPUl9FQUNIX1BUUlRBR19FTlVNKEhBTkRMRV9QVFJUQUdfQ0FT
RSkKLSAgICBkZWZhdWx0OiByZXR1cm4gIjx1bmtub3duPiI7Ci0gICAgfQotCi0jdW5kZWYgSEFO
RExFX1BUUlRBR19DQVNFCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHJldmlzaW9uIDIzMDI5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSAr
MzUsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihOZWFySnVtcFB0clRhZykgXAogICAgIHYo
Q0Z1bmN0aW9uUHRyVGFnKSBcCiAgICAgXAorICAgIHYoQXJpdHlGaXh1cFB0clRhZykgXAogICAg
IHYoQjNDQ2FsbFB0clRhZykgXAogICAgIHYoQnl0ZWNvZGVQdHJUYWcpIFwKICAgICB2KEJ5dGVj
b2RlSGVscGVyUHRyVGFnKSBcCiAgICAgdihDb2RlRW50cnlQdHJUYWcpIFwKICAgICB2KENvZGVF
bnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSBcCisgICAgdihERkdPU1JFbnRyeVB0clRhZykgXAor
ICAgIHYoREZHT1NSRXhpdFB0clRhZykgXAorICAgIHYoREZHT3BlcmF0aW9uUHRyVGFnKSBcCiAg
ICAgdihFeGNlcHRpb25IYW5kbGVyUHRyVGFnKSBcCiAgICAgdihHZXRQcm9wZXJ0eVB0clRhZykg
XAogICAgIHYoR2V0dGVyU2V0dGVyUHRyVGFnKSBcCkBAIC00OSwxNSArNTMsMTkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgdihKSVRUaHVua1B0clRhZykgXAogICAgIHYoSklUV3JpdGVUaHVua1B0
clRhZykgXAogICAgIHYoTExJbnRDYWxsSUNQdHJUYWcpIFwKKyAgICB2KExpbmtDYWxsUHRyVGFn
KSBcCisgICAgdihMaW5rQ2FsbFJlc3VsdFB0clRhZykgXAorICAgIHYoTGlua1BvbHltb3JwaGlj
Q2FsbFB0clRhZykgXAorICAgIHYoTGlua1BvbHltb3JwaGljQ2FsbFJlc3VsdFB0clRhZykgXAor
ICAgIHYoTGlua1ZpcnR1YWxDYWxsUHRyVGFnKSBcCisgICAgdihMaW5rVmlydHVhbENhbGxSZXN1
bHRQdHJUYWcpIFwKICAgICB2KE1hdGhJQ1B0clRhZykgXAogICAgIHYoTmF0aXZlQ29kZVB0clRh
ZykgXAotICAgIHYoT3BlcmF0aW9uTGlua0NhbGxQdHJUYWcpIFwKLSAgICB2KE9wZXJhdGlvbkxp
bmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcpIFwKLSAgICB2KE9wZXJhdGlvblZpcnR1YWxDYWxsUHRy
VGFnKSBcCiAgICAgdihQdXRQcm9wZXJ0eVB0clRhZykgXAogICAgIHYoU2xvd1BhdGhQdHJUYWcp
IFwKICAgICB2KFNwZWNpYWxpemVkVGh1bmtQdHJUYWcpIFwKICAgICB2KFN3aXRjaFRhYmxlUHRy
VGFnKSBcCisgICAgdihUaHJvd0V4Y2VwdGlvblB0clRhZykgXAogICAgIFwKICAgICB2KFlhcnI4
Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyMTZCaXRQdHJUYWcpIFwKQEAgLTc5LDcgKzg3LDE1IEBA
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihOb1AKIHN0YXRpY19hc3NlcnQo
c3RhdGljX2Nhc3Q8dWludHB0cl90PihOZWFyQ2FsbFB0clRhZykgPT0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigxKSwgIiIpOwogc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KE5l
YXJKdW1wUHRyVGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpLCAiIik7CiAKLUpTX0VY
UE9SVF9QUklWQVRFIGNvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnKTsKK2lubGluZSBjb25z
dCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdf
TkFNRShfdGFnTmFtZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFtZTsKKyAgICBzd2l0
Y2ggKHRhZykgeworICAgICAgICBGT1JfRUFDSF9QVFJUQUdfRU5VTShSRVRVUk5fUFRSVEFHX05B
TUUpCisgICAgZGVmYXVsdDogcmV0dXJuICI8dW5rbm93bj4iOworICAgIH0KKyN1bmRlZiBSRVRV
Uk5fUFRSVEFHX05BTUUKK30KIAogdWludHB0cl90IG5leHRQdHJUYWdJRCgpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlz
aW9uIDIzMDI5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Byb2Zp
bGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCShyZXZp
c2lvbiAyMzAyOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3ICs2NjMsOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0Zh
aWx1cmU6Ok91dE9mTWVtb3J5KTsKIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1
bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkp
OworICAgIFB0clRhZyBsaW5rVGFnID0gcHRyVGFnKExpbmtDYWxsUHRyVGFnLCB2bSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWRDb2RlKGxpbmtUYWcsIE5lYXJDYWxsUHRyVGFn
KSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBo
b3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7CiAgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKGZhc3RDYWxsKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>