<?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>176888</bug_id>
          
          <creation_ts>2017-09-13 20:35:58 -0700</creation_ts>
          <short_desc>Rolling out r221832: Regresses Speedometer by ~4% and Dromaeo CSS YUI by ~20%.</short_desc>
          <delta_ts>2017-09-13 21:22:08 -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>175144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348621</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 20:35:58 -0700</bug_when>
    <thetext>Patch coming.

&lt;rdar://problem/34381832&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348622</commentid>
    <comment_count>1</comment_count>
      <attachid>320723</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 20:40:18 -0700</bug_when>
    <thetext>Created attachment 320723
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348632</commentid>
    <comment_count>2</comment_count>
      <attachid>320725</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 21:14:33 -0700</bug_when>
    <thetext>Created attachment 320725
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348638</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-13 21:21:45 -0700</bug_when>
    <thetext>Landed in r222009: &lt;http://trac.webkit.org/r222009&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320723</attachid>
            <date>2017-09-13 20:40:18 -0700</date>
            <delta_ts>2017-09-13 21:14:33 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-176888.patch</filename>
            <type>text/plain</type>
            <size>122473</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjIwMDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE3LTA5LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSb2xsaW5nIG91dCByMjIxODMyOiBSZWdyZXNzZXMgU3BlZWRvbWV0ZXIg
YnkgfjQlIGFuZCBEcm9tYWVvIENTUyBZVUkgYnkgfjIwJS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njg4OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzQzODE4MzI+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAgICAgICogc3RyZXNz
L29wX21vZC1Db25zdFZhci5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3BfbW9kLVZhckNvbnN0Lmpz
OgorICAgICAgICAqIHN0cmVzcy9vcF9tb2QtVmFyVmFyLmpzOgorCiAyMDE3LTA5LTEzICBSeWFu
IEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgMyBvcF9tb2Qg
dGVzdHMgb24gRGVidWcgSlNDIGJvdHMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9vcF9tb2QtQ29u
c3RWYXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb3BfbW9kLUNvbnN0VmFyLmpz
CShyZXZpc2lvbiAyMjIwMDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9vcF9tb2QtQ29uc3RWYXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYgJGJ1aWxkVHlwZSA9PSAicmVs
ZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRpcGxpZXI9MS41IikgZWxzZSBz
a2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVsdGlwbGllcj0xLjUiKQogCiAv
LyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdpbGwgdGVybWluYXRlIHNpbGVu
dGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4gU2VlIGJpbmFyeS1vcC10ZXN0
LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9vcF9tb2QtVmFyQ29uc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb3BfbW9k
LVZhckNvbnN0LmpzCShyZXZpc2lvbiAyMjIwMDcpCisrKyBKU1Rlc3RzL3N0cmVzcy9vcF9tb2Qt
VmFyQ29uc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYgJGJ1aWxk
VHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRpcGxpZXI9
MS41IikgZWxzZSBza2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVsdGlwbGll
cj0xLjUiKQogCiAvLyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdpbGwgdGVy
bWluYXRlIHNpbGVudGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4gU2VlIGJp
bmFyeS1vcC10ZXN0LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9vcF9tb2QtVmFyVmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL29wX21vZC1WYXJWYXIuanMJKHJldmlzaW9uIDIyMjAwNykKKysrIEpTVGVzdHMvc3RyZXNz
L29wX21vZC1WYXJWYXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYg
JGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRp
cGxpZXI9MS41IikgZWxzZSBza2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVs
dGlwbGllcj0xLjUiKQogCiAvLyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdp
bGwgdGVybWluYXRlIHNpbGVudGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4g
U2VlIGJpbmFyeS1vcC10ZXN0LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDkgQEAK
KzIwMTctMDktMTMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJv
bGxpbmcgb3V0IHIyMjE4MzI6IFJlZ3Jlc3NlcyBTcGVlZG9tZXRlciBieSB+NCUgYW5kIERyb21h
ZW8gQ1NTIFlVSSBieSB+MjAlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc2ODg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDM4MTgzMj4KKwor
ICAgICAgICBOb3QgcmV2aWV3ZWQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OnN0ZEZ1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludENhbGxiYWNrKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVDb250ZXh0Lmg6CisgICAg
ICAgIChKU0M6OlByb2JlOjogY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6
Q29udGV4dCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpncHIpOgorICAgICAgICAo
SlNDOjpQcm9iZTo6Q29udGV4dDo6c3ByKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6
OmZwcik6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpncHJOYW1lKToKKyAgICAgICAg
KEpTQzo6UHJvYmU6OkNvbnRleHQ6OnNwck5hbWUpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29u
dGV4dDo6ZnByTmFtZSk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpwYyk6CisgICAg
ICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpmcCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250
ZXh0OjpzcCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDUFVTdGF0ZTo6Z3ByIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvYmU6OkNQVVN0YXRlOjpzcHIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6YXJnKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6UHJvYmU6OkNvbnRleHQ6OmdwciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlByb2JlOjpDb250ZXh0OjpzcHIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9i
ZTo6Q29udGV4dDo6ZnByIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvUHJv
YmVGcmFtZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Q
cm9iZVN0YWNrLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpQYWdlOjpnZXQpOgorICAgICAgICAo
SlNDOjpQcm9iZTo6UGFnZTo6c2V0KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OnBoeXNp
Y2FsQWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OlByb2JlOjpTdGFjazo6bG93V2F0ZXJtYXJr
KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlN0YWNrOjpnZXQpOgorICAgICAgICAoSlNDOjpQcm9i
ZTo6U3RhY2s6OnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcDoKKyAg
ICAgICAgKiBieXRlY29kZS9Bcml0aFByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpvYnNlcnZlQXJyYXlNb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0
aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk9TUkV4aXRDb3VudGVyKToKKyAgICAgICAgKiBi
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50
ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpF
eGVjdXRpb25Db3VudGVyOjpzZXROZXdUaHJlc2hvbGRGb3JPU1JFeGl0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDoK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
SW1wbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6
Z2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6Y29ycmVjdEp1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZh
aWx1cmUpOgorICAgICAgICAoSlNDOjpERkc6OmpzVmFsdWVGb3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OnJlc3RvcmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6c2F2ZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNhdmVPckNv
cHlDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y3JlYXRlRGly
ZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y3Jl
YXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RB
bmRKdW1wVG9UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnByaW50T1NSRXhp
dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0U3RhdGU6Ok9TUkV4aXRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAgICogaml0
L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T1NSRXhpdC5oOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6aW5jQ291bnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTct
MDktMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
W0pTQ10gTW92ZSBjbGFzcy9zdHJ1Y3QgdXNlZCBpbiBvdGhlciBjbGFzcycgbWVtYmVyIG91dCBv
ZiBhbm9ueW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0NDQsNyArMjQ0
NCw2IEBACiAJCUZFMTBBQUVDMUY0NEQ1NDUwMDlERURDNSAvKiBQcm9iZVN0YWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTBBQUU5MUY0NEQ1
MTAwMDlERURDNSAvKiBQcm9iZVN0YWNrLmNwcCAqLzsgfTsKIAkJRkUxMEFBRUUxRjQ0RDk1NDAw
OURFREM1IC8qIFByb2JlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxMEFBRUQxRjQ0RDk0NjAwOURFREM1IC8qIFByb2JlQ29udGV4dC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMTBB
QUY0MUY0NjgzOTYwMDlERURDNSAvKiBQcm9iZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxMEFBRjMxRjQ2ODI2RDAwOURFREM1IC8q
IFByb2JlQ29udGV4dC5jcHAgKi87IH07Ci0JCUZFMTBBQUZGMUY0RTM4RTUwMDlERURDNSAvKiBQ
cm9iZUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTEwQUFGRTFGNEUzOERBMDA5REVEQzUgLyogUHJvYmVGcmFtZS5oICovOyB9OwogCQlGRTEy
MjAyNzFCRTdGNThDMDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmggKi87IH07CiAJCUZFMTIyMDI4MUJFN0Y1OTEwMDM5RTZGMiAv
KiBKSVRBZGRHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUxMjIwMjUxQkU3RjU2NDAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5j
cHAgKi87IH07CiAJCUZFMTg3QTAxMUJGQkU1NUUwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxODc5
RkYxQkZCQzczQzAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5jcHAgKi87IH07CkBAIC01MTM5
LDcgKzUxMzgsNiBAQAogCQlGRTEwQUFFQTFGNDRENTEyMDA5REVEQzUgLyogUHJvYmVTdGFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9iZVN0YWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTBBQUVEMUY0NEQ5NDYwMDlERURDNSAvKiBQcm9iZUNv
bnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvYmVDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTBBQUYzMUY0NjgyNkQwMDlERURDNSAv
KiBQcm9iZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJvYmVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkUxMEFBRkUx
RjRFMzhEQTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvYmVGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTEy
MjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRkR2VuZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3OUZGMUJGQkM3M0MwMDM4QkJD
QSAvKiBKSVRNdWxHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUTXVsR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc3MjQsNyArNzcyMiw2IEBACiAJCQkJRkU2M0RENTMxRUE5QjYwRTAwMTAzQTY5IC8qIFByaW50
ZXIuaCAqLywKIAkJCQlGRTEwQUFGMzFGNDY4MjZEMDA5REVEQzUgLyogUHJvYmVDb250ZXh0LmNw
cCAqLywKIAkJCQlGRTEwQUFFRDFGNDREOTQ2MDA5REVEQzUgLyogUHJvYmVDb250ZXh0LmggKi8s
Ci0JCQkJRkUxMEFBRkUxRjRFMzhEQTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCAqLywKIAkJCQlG
RTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJvYmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFB
RUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3RhY2suaCAqLywKIAkJCQlGRTUzM0NBMDFGMjE3
QzMxMDAxNkExRkUgLyogdGVzdG1hc20uY3BwICovLApAQCAtOTY5Miw3ICs5Njg5LDYgQEAKIAkJ
CQlBRDJGQ0MxRDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdDODFEREQwQUFFMDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzJEMURCODM4
RkQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkUxMEFBRkYxRjRFMzhFNTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQkY5MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxRTFEQjU5Q0IyMDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkZCMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjIyMDA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVy
Ojp0d29Ub1RoZTMyIAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQogc3RhdGljIHZvaWQgc3RkRnVu
Y3Rpb25DYWxsYmFjayhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBhdXRvIGZ1bmMg
PSBjb250ZXh0LmFyZzxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUHJvYmU6OkNvbnRleHQmKT4q
PigpOworICAgIGF1dG8gZnVuYyA9IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9p
ZChQcm9iZTo6Q29udGV4dCYpPio+KGNvbnRleHQuYXJnKTsKICAgICAoKmZ1bmMpKGNvbnRleHQp
OwogfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclByaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAkocmV2aXNpb24gMjIyMDA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBwcmludE1lbW9yeShQcmlu
dFN0cmVhbSYgb3V0LCBDb250ZQogdm9pZCBwcmludENhbGxiYWNrKFByb2JlOjpDb250ZXh0JiBw
cm9iZUNvbnRleHQpCiB7CiAgICAgYXV0byYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpOwotICAgIFBy
aW50UmVjb3JkTGlzdCYgbGlzdCA9ICpwcm9iZUNvbnRleHQuYXJnPFByaW50UmVjb3JkTGlzdCo+
KCk7CisgICAgUHJpbnRSZWNvcmRMaXN0JiBsaXN0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJpbnRS
ZWNvcmRMaXN0Kj4ocHJvYmVDb250ZXh0LmFyZyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGF1dG8mIHJlY29yZCA9IGxpc3RbaV07CiAg
ICAgICAgIENvbnRleHQgY29udGV4dChwcm9iZUNvbnRleHQsIHJlY29yZC5kYXRhKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkocmV2
aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsMTQgQEAgc3RydWN0IENQVVN0YXRl
IHsKICAgICBpbmxpbmUgdWludHB0cl90JiBzcHIoU1BSZWdpc3RlcklEKTsKICAgICBpbmxpbmUg
ZG91YmxlJiBmcHIoRlBSZWdpc3RlcklEKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Z3ByKFJlZ2lzdGVySUQpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgc3ByKFNQ
UmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+
CisgICAgVCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZT46OnR5cGUq
ID0gbnVsbHB0cj4KKyAgICBUIGdwcihSZWdpc3RlcklEKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2
YWx1ZT46OnR5cGUqID0gbnVsbHB0cj4KKyAgICBUIHNwcihTUFJlZ2lzdGVySUQpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
cG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+CisgICAgVCBzcHIoU1BSZWdpc3Rl
cklEKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVySUQp
IGNvbnN0OwogCiAgICAgdm9pZComIHBjKCk7CkBAIC03OSwyNCArODUsMzIgQEAgaW5saW5lIGRv
dWJsZSYgQ1BVU3RhdGU6OmZwcihGUFJlZ2lzdGVySQogICAgIHJldHVybiBmcHJzW2lkXTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlPjo6dHlwZSo+CiBUIENQVVN0
YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QKIHsKICAgICBDUFVTdGF0ZSogY3B1ID0gY29u
c3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMpOwotICAgIGF1dG8mIGZyb20gPSBjcHUtPmdwcihpZCk7
Ci0gICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgdG8geyB9OwotICAgIHN0
ZDo6bWVtY3B5KCZ0bywgJmZyb20sIHNpemVvZih0bykpOyAvLyBVc2Ugc3RkOjptZW1jcHkgdG8g
YXZvaWQgc3RyaWN0IGFsaWFzaW5nIGlzc3Vlcy4KLSAgICByZXR1cm4gdG87CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Bv
aW50ZXI8VD46OnZhbHVlPjo6dHlwZSo+CitUIENQVVN0YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkg
Y29uc3QKK3sKKyAgICBDUFVTdGF0ZSogY3B1ID0gY29uc3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdy
YWw8VD46OnZhbHVlPjo6dHlwZSo+CitUIENQVVN0YXRlOjpzcHIoU1BSZWdpc3RlcklEIGlkKSBj
b25zdAoreworICAgIENQVVN0YXRlKiBjcHUgPSBjb25zdF9jYXN0PENQVVN0YXRlKj4odGhpcyk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGNwdS0+c3ByKGlkKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6
dmFsdWU+Ojp0eXBlKj4KIFQgQ1BVU3RhdGU6OnNwcihTUFJlZ2lzdGVySUQgaWQpIGNvbnN0CiB7
CiAgICAgQ1BVU3RhdGUqIGNwdSA9IGNvbnN0X2Nhc3Q8Q1BVU3RhdGUqPih0aGlzKTsKLSAgICBh
dXRvJiBmcm9tID0gY3B1LT5zcHIoaWQpOwotICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0
PFQ+Ojp0eXBlIHRvIHsgfTsKLSAgICBzdGQ6Om1lbWNweSgmdG8sICZmcm9tLCBzaXplb2YodG8p
KTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBhbGlhc2luZyBpc3N1ZXMuCi0g
ICAgcmV0dXJuIHRvOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+c3ByKGlk
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xOTEsMzEgKzIwNSwyNSBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgRlBSZWdpc3RlcklEID0gTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJ
RDsKIAogICAgIENvbnRleHQoU3RhdGUqIHN0YXRlKQotICAgICAgICA6IGNwdShzdGF0ZS0+Y3B1
KQotICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAg
ICAgICAgLCBhcmcoc3RhdGUtPmFyZykKKyAgICAgICAgLCBjcHUoc3RhdGUtPmNwdSkKICAgICB7
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBhcmcoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFQ+KG1fc3RhdGUtPmFyZyk7IH0KLQotICAgIHVpbnRwdHJfdCYgZ3ByKFJl
Z2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5ncHIoaWQpOyB9Ci0gICAgdWludHB0cl90JiBzcHIo
U1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuc3ByKGlkKTsgfQotICAgIGRvdWJsZSYgZnBy
KEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gY3B1LmZwcihpZCk7IH0KLSAgICBjb25zdCBjaGFy
KiBncHJOYW1lKFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5ncHJOYW1lKGlkKTsgfQotICAg
IGNvbnN0IGNoYXIqIHNwck5hbWUoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuc3ByTmFt
ZShpZCk7IH0KLSAgICBjb25zdCBjaGFyKiBmcHJOYW1lKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1
cm4gY3B1LmZwck5hbWUoaWQpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGdwcihS
ZWdpc3RlcklEIGlkKSBjb25zdCB7IHJldHVybiBjcHUuZ3ByPFQ+KGlkKTsgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgc3ByKFNQUmVnaXN0ZXJJRCBpZCkgY29uc3QgeyByZXR1cm4gY3B1
LnNwcjxUPihpZCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVy
SUQgaWQpIGNvbnN0IHsgcmV0dXJuIGNwdS5mcHI8VD4oaWQpOyB9Ci0KLSAgICB2b2lkKiYgcGMo
KSB7IHJldHVybiBjcHUucGMoKTsgfQotICAgIHZvaWQqJiBmcCgpIHsgcmV0dXJuIGNwdS5mcCgp
OyB9Ci0gICAgdm9pZComIHNwKCkgeyByZXR1cm4gY3B1LnNwKCk7IH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgcGMoKSB7IHJldHVybiBjcHUucGM8VD4oKTsgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgZnAoKSB7IHJldHVybiBjcHUuZnA8VD4oKTsgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgc3AoKSB7IHJldHVybiBjcHUuc3A8VD4oKTsgfQorICAgIHVpbnRwdHJf
dCYgZ3ByKFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5ncHIoaWQpOyB9Cisg
ICAgdWludHB0cl90JiBzcHIoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUu
c3ByKGlkKTsgfQorICAgIGRvdWJsZSYgZnByKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gbV9z
dGF0ZS0+Y3B1LmZwcihpZCk7IH0KKyAgICBjb25zdCBjaGFyKiBncHJOYW1lKFJlZ2lzdGVySUQg
aWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5ncHJOYW1lKGlkKTsgfQorICAgIGNvbnN0IGNoYXIq
IHNwck5hbWUoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUuc3ByTmFtZShp
ZCk7IH0KKyAgICBjb25zdCBjaGFyKiBmcHJOYW1lKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4g
bV9zdGF0ZS0+Y3B1LmZwck5hbWUoaWQpOyB9CisKKyAgICB2b2lkKiYgcGMoKSB7IHJldHVybiBt
X3N0YXRlLT5jcHUucGMoKTsgfQorICAgIHZvaWQqJiBmcCgpIHsgcmV0dXJuIG1fc3RhdGUtPmNw
dS5mcCgpOyB9CisgICAgdm9pZComIHNwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwKCk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgcGMoKSB7IHJldHVybiBtX3N0YXRlLT5jcHUu
cGM8VD4oKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgZnAoKSB7IHJldHVybiBtX3N0
YXRlLT5jcHUuZnA8VD4oKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgc3AoKSB7IHJl
dHVybiBtX3N0YXRlLT5jcHUuc3A8VD4oKTsgfQogCiAgICAgU3RhY2smIHN0YWNrKCkKICAgICB7
CkBAIC0yMjYsMTAgKzIzNCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNXcml0ZXNUb0ZsdXNo
KCkgeyByZXR1cm4gbV9zdGFjay5oYXNXcml0ZXNUb0ZsdXNoKCk7IH0KICAgICBTdGFjayogcmVs
ZWFzZVN0YWNrKCkgeyByZXR1cm4gbmV3IFN0YWNrKFdURk1vdmUobV9zdGFjaykpOyB9CiAKK3By
aXZhdGU6CisgICAgU3RhdGUqIG1fc3RhdGU7CitwdWJsaWM6CisgICAgdm9pZCogYXJnOwogICAg
IENQVVN0YXRlJiBjcHU7CiAKIHByaXZhdGU6Ci0gICAgU3RhdGUqIG1fc3RhdGU7CiAgICAgU3Rh
Y2sgbV9zdGFjazsKIAogICAgIGZyaWVuZCBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBwcm9iZVN0
YXRlRm9yQ29udGV4dChDb250ZXh0Jik7IC8vIE5vdCBmb3IgZ2VuZXJhbCB1c2UuIFRoaXMgc2hv
dWxkIG9ubHkgYmUgZm9yIHdyaXRpbmcgdGVzdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLQotI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgotI2luY2x1ZGUgIlByb2JlU3RhY2suaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci1u
YW1lc3BhY2UgUHJvYmUgewotCi1jbGFzcyBGcmFtZSB7Ci1wdWJsaWM6Ci0gICAgRnJhbWUodm9p
ZCogZnJhbWVCYXNlLCBTdGFjayYgc3RhY2spCi0gICAgICAgIDogbV9mcmFtZUJhc2UgeyByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihmcmFtZUJhc2UpIH0KLSAgICAgICAgLCBtX3N0YWNrIHsg
c3RhY2sgfQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0g
ICAgVCBhcmd1bWVudChpbnQgYXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+
KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFu
ZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwot
ICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQo
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0
PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IGFyZ3VtZW50LCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAq
IHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIFQgdmFsdWUpCi0gICAgewotICAg
ICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQs
IFQgdmFsdWUpCi0gICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVl
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIGdl
dChwdHJkaWZmX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2suZ2V0PFQ+
KG1fZnJhbWVCYXNlICsgb2Zmc2V0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIHNldChwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAg
bV9zdGFjay5zZXQ8VD4obV9mcmFtZUJhc2UgKyBvZmZzZXQsIHZhbHVlKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgdWludDhfdCogbV9mcmFtZUJhc2U7Ci0gICAgU3RhY2smIG1fc3RhY2s7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBQcm9iZQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoTUFTTV9QUk9CRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvUHJvYmVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Qcm9iZVN0YWNrLmNwcAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNiBAQCBuYW1lc3BhY2UgUHJvYmUgewogCiBQYWdlOjpQYWdlKHZvaWQqIGJhc2VBZGRy
ZXNzKQogICAgIDogbV9iYXNlTG9naWNhbEFkZHJlc3MoYmFzZUFkZHJlc3MpCi0gICAgLCBtX3Bo
eXNpY2FsQWRkcmVzc09mZnNldChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbV9idWZmZXIp
IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQogewogICAgIG1lbWNw
eSgmbV9idWZmZXIsIGJhc2VBZGRyZXNzLCBzX3BhZ2VTaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCShyZXZpc2lvbiAyMjIwMDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMjggKzU2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIFQgZ2V0KHZvaWQqIGxvZ2ljYWxBZGRyZXNzKQogICAgIHsKLSAgICAgICAgdm9p
ZCogZnJvbSA9IHBoeXNpY2FsQWRkcmVzc0Zvcihsb2dpY2FsQWRkcmVzcyk7Ci0gICAgICAgIHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlIHRvIHsgfTsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnRvLCBmcm9tLCBzaXplb2YodG8pKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lk
IHN0cmljdCBhbGlhc2luZyBpc3N1ZXMuCi0gICAgICAgIHJldHVybiB0bzsKLSAgICB9Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldCh2b2lkKiBsb2dpY2FsQmFzZUFkZHJlc3Ms
IHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykgKyBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9naWNhbEFkZHJlc3MpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBzZXQodm9pZCogbG9naWNhbEFk
ZHJlc3MsIFQgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RpcnR5Qml0cyB8PSBkaXJ0eUJpdEZv
cihsb2dpY2FsQWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIHRvID0gcGh5c2ljYWxBZGRyZXNzRm9y
KGxvZ2ljYWxBZGRyZXNzKTsKLSAgICAgICAgc3RkOjptZW1jcHkodG8sICZ2YWx1ZSwgc2l6ZW9m
KFQpKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBhbGlhc2luZyBpc3N1ZXMu
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXQodm9pZCogbG9n
aWNhbEJhc2VBZGRyZXNzLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgc2V0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykg
KyBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9naWNh
bEFkZHJlc3MpID0gdmFsdWU7CiAgICAgfQogCiAgICAgYm9vbCBoYXNXcml0ZXNUb0ZsdXNoKCkg
Y29uc3QgeyByZXR1cm4gISFtX2RpcnR5Qml0czsgfQpAQCAtOTQsMTYgKzgwLDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChvZmZzZXQg
Pj4gc19jaHVua1NpemVTaGlmdCk7CiAgICAgfQogCi0gICAgdm9pZCogcGh5c2ljYWxBZGRyZXNz
Rm9yKHZvaWQqIGxvZ2ljYWxBZGRyZXNzKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZT46
OnR5cGU+CisgICAgVCBwaHlzaWNhbEFkZHJlc3NGb3Iodm9pZCogbG9naWNhbEFkZHJlc3MpCiAg
ICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9naWNhbEFk
ZHJlc3MpICsgbV9waHlzaWNhbEFkZHJlc3NPZmZzZXQ7CisgICAgICAgIHVpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9naWNhbEFkZHJlc3MpICYgc19wYWdl
TWFzazsKKyAgICAgICAgdm9pZCogcGh5c2ljYWxBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJm1fYnVmZmVyKSArIG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VD4ocGh5c2ljYWxBZGRyZXNzKTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoV3JpdGVz
KCk7CiAKICAgICB2b2lkKiBtX2Jhc2VMb2dpY2FsQWRkcmVzcyB7IG51bGxwdHIgfTsKICAgICB1
aW50cHRyX3QgbV9kaXJ0eUJpdHMgeyAwIH07Ci0gICAgcHRyZGlmZl90IG1fcGh5c2ljYWxBZGRy
ZXNzT2Zmc2V0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19wYWdlU2l6ZSA9IDEw
MjQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19wYWdlTWFzayA9IHNfcGFnZVNp
emUgLSAxOwpAQCAtMTMyLDM5ICsxMjAsNDAgQEAgcHVibGljOgogICAgIHsgfQogICAgIFN0YWNr
KFN0YWNrJiYgb3RoZXIpOwogCi0gICAgdm9pZCogbG93V2F0ZXJtYXJrKCkKLSAgICB7Ci0gICAg
ICAgIC8vIFdlIHVzZSB0aGUgY2h1bmtBZGRyZXNzIGZvciB0aGUgbG93IHdhdGVybWFyayBiZWNh
dXNlIHdlJ2xsIGJlIGRvaW5nIHdyaXRlIGJhY2tzCi0gICAgICAgIC8vIHRvIHRoZSBzdGFjayBp
biBpbmNyZW1lbnRzIG9mIGNodW5rcy4gSGVuY2UsIHdlJ2xsIHRyZWF0IHRoZSBsb3dlc3QgYWRk
cmVzcyBvZgotICAgICAgICAvLyB0aGUgY2h1bmsgYXMgdGhlIGxvdyB3YXRlcm1hcmsgb2YgYW55
IGdpdmVuIHNldCBhZGRyZXNzLgotICAgICAgICByZXR1cm4gUGFnZTo6Y2h1bmtBZGRyZXNzRm9y
KG1fbG93V2F0ZXJtYXJrKTsKLSAgICB9CisgICAgdm9pZCogbG93V2F0ZXJtYXJrKCkgeyByZXR1
cm4gbV9sb3dXYXRlcm1hcms7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBn
ZXQodm9pZCogYWRkcmVzcykKKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19z
YW1lPGRvdWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZSwgVD46
OnR5cGUgZ2V0KHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBQYWdlKiBwYWdlID0gcGFn
ZUZvcihhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuIHBhZ2UtPmdldDxUPihhZGRyZXNzKTsKICAg
ICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldCh2b2lkKiBsb2dpY2FsQmFz
ZUFkZHJlc3MsIHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykgKyBvZmZzZXQp
OwotICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPGRv
dWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZT46OnR5cGU+CiAg
ICAgdm9pZCBzZXQodm9pZCogYWRkcmVzcywgVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIFBhZ2Uq
IHBhZ2UgPSBwYWdlRm9yKGFkZHJlc3MpOwogICAgICAgICBwYWdlLT5zZXQ8VD4oYWRkcmVzcywg
dmFsdWUpOwogCi0gICAgICAgIGlmIChhZGRyZXNzIDwgbV9sb3dXYXRlcm1hcmspCi0gICAgICAg
ICAgICBtX2xvd1dhdGVybWFyayA9IGFkZHJlc3M7CisgICAgICAgIC8vIFdlIHVzZSB0aGUgY2h1
bmtBZGRyZXNzIGZvciB0aGUgbG93IHdhdGVybWFyayBiZWNhdXNlIHdlJ2xsIGJlIGRvaW5nIHdy
aXRlIGJhY2tzCisgICAgICAgIC8vIHRvIHRoZSBzdGFjayBpbiBpbmNyZW1lbnRzIG9mIGNodW5r
cy4gSGVuY2UsIHdlJ2xsIHRyZWF0IHRoZSBsb3dlc3QgYWRkcmVzcyBvZgorICAgICAgICAvLyB0
aGUgY2h1bmsgYXMgdGhlIGxvdyB3YXRlcm1hcmsgb2YgYW55IGdpdmVuIHNldCBhZGRyZXNzLgor
ICAgICAgICB2b2lkKiBjaHVua0FkZHJlc3MgPSBQYWdlOjpjaHVua0FkZHJlc3NGb3IoYWRkcmVz
cyk7CisgICAgICAgIGlmIChjaHVua0FkZHJlc3MgPCBtX2xvd1dhdGVybWFyaykKKyAgICAgICAg
ICAgIG1fbG93V2F0ZXJtYXJrID0gY2h1bmtBZGRyZXNzOwogICAgIH0KKwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJk
aWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxkb3VibGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWUs
IFQ+Ojp0eXBlIGdldCh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9
IHBhZ2VGb3IoYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihw
YWdlLT5nZXQ8dWludDY0X3Q+KGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxk
b3VibGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlPgor
ICAgIHZvaWQgc2V0KHZvaWQqIGFkZHJlc3MsIGRvdWJsZSB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHNldDxUPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQmFzZUFkZHJlc3MpICsg
b2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldDx1aW50NjRfdD4oYWRkcmVzcywgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSkpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBh
Z2UqIGVuc3VyZVBhZ2VGb3Iodm9pZCogYWRkcmVzcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcAkocmV2aXNpb24gMjIyMDA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FyaXRoUHJvZmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsOCArMzIsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklU
KQotLy8gRklYTUU6IFRoaXMgaXMgYmVpbmcgc3VwcGxhbnRlZCBieSBvYnNlcnZlUmVzdWx0KCku
IFJlbW92ZSB0aGlzIG9uZQotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTE0NSBoYXMgYmVlbiBmaXhlZC4KIHZvaWQgQXJpdGhQcm9maWxlOjplbWl0T2JzZXJ2
ZVJlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJz
TW9kZSBtb2RlKQogewogICAgIGlmICghc2hvdWxkRW1pdFNldERvdWJsZSgpICYmICFzaG91bGRF
bWl0U2V0Tm9uTnVtYmVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QXJpdGhQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FyaXRoUHJvZmlsZS5oCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjExLDggKzIxMSw2
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKSAgICAKICAgICAvLyBTZXRzIChJbnQzMk92ZXJm
bG93IHwgSW50NTJPdmVyZmxvdyB8IE5vbk5lZ1plcm9Eb3VibGUgfCBOZWdaZXJvRG91YmxlKSBp
ZiBpdCBzZWVzIGEKICAgICAvLyBkb3VibGUuIFNldHMgTm9uTnVtYmVyIGlmIGl0IHNlZXMgYSBu
b24tbnVtYmVyLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGJlaW5nIHN1cHBsYW50ZWQgYnkgb2Jz
ZXJ2ZVJlc3VsdCgpLiBSZW1vdmUgdGhpcyBvbmUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1IGhhcyBiZWVuIGZpeGVkLgogICAgIHZvaWQgZW1p
dE9ic2VydmVSZXN1bHQoQ0NhbGxIZWxwZXJzJiwgSlNWYWx1ZVJlZ3MsIFRhZ1JlZ2lzdGVyc01v
ZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKTsKICAgICAKICAgICAvLyBTZXRzIChJbnQzMk92ZXJmbG93
IHwgSW50NTJPdmVyZmxvdyB8IE5vbk5lZ1plcm9Eb3VibGUgfCBOZWdaZXJvRG91YmxlKS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJl
dmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTgsNyArMjE4LDYgQEAgcHVibGljOgogICAg
IHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IENvZGVCbG9jayopOwogICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZSogbGFzdFNlZW5TdHJ1Y3R1
cmUpOwogICAgIAotICAgIHZvaWQgb2JzZXJ2ZUFycmF5TW9kZShBcnJheU1vZGVzIG1vZGUpIHsg
bV9vYnNlcnZlZEFycmF5TW9kZXMgfD0gbW9kZTsgfQogICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWRB
cnJheU1vZGVzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fb2Jz
ZXJ2ZWRBcnJheU1vZGVzOyB9CiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXM7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyMCw1
MyArMjMyMCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXMKICAg
ICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dCh0aGlzKTsKIH0KIAotYXV0byBDb2RlQmxvY2s6OnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hl
Y2tJZk5lZWRUb1Jlb3B0aW1pemUoREZHOjpPU1JFeGl0U3RhdGUmIGV4aXRTdGF0ZSkgLT4gT3B0
aW1pemVBY3Rpb24KLXsKLSAgICBERkc6Ok9TUkV4aXRCYXNlJiBleGl0ID0gZXhpdFN0YXRlLmV4
aXQ7Ci0gICAgaWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9raW5kKSkgewotICAgICAg
ICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbm90aWNlIHRoYXQgd2UncmUgZnJlcXVlbnRseSBl
eGl0aW5nCi0gICAgICAgIC8vIGF0IGFuIG9wX2NhdGNoIHRoYXQgd2UgZGlkbid0IGNvbXBpbGUg
YW4gZW50cnlwb2ludCBmb3IsIGFuZAotICAgICAgICAvLyB0aGVuIHRyaWdnZXIgYSByZW9wdGlt
aXphdGlvbiBvZiB0aGlzIENvZGVCbG9jazoKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MgotICAgICAgICByZXR1cm4gT3B0aW1pemVBY3Rp
b246Ok5vbmU7Ci0gICAgfQotCi0gICAgZXhpdC5tX2NvdW50Kys7Ci0gICAgbV9vc3JFeGl0Q291
bnRlcisrOwotCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5i
YXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoYmFzZWxpbmVDb2RlQmxvY2sgPT0gYmFzZWxp
bmVBbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoYmFzZWxpbmVDb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCkuaGFzQ3Jvc3NlZFRocmVzaG9sZCgpKSkKLSAgICAgICAgcmV0dXJu
IE9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93OwotCi0gICAgLy8gV2Ugd2FudCB0byBmaWd1
cmUgb3V0IGlmIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSB0aGF0IHdlJ3JlIGluIGEgbG9vcC4gRm9y
IHRoZSBvdXRlcm1vc3QKLSAgICAvLyBjb2RlIGJsb2NrIGluIHRoZSBpbmxpbmUgc3RhY2ssIHdl
IGhhbmRsZSB0aGlzIGFwcHJvcHJpYXRlbHkgYnkgaGF2aW5nIHRoZSBsb29wIE9TUiB0cmlnZ2Vy
Ci0gICAgLy8gY2hlY2sgdGhlIGV4aXQgY291bnQgb2YgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBD
b2RlQmxvY2sgZnJvbSB3aGljaCB3ZSBhcmUgT1NSaW5nLiBUaGUKLSAgICAvLyBwcm9ibGVtIGlz
IHRoZSBpbmxpbmVkIGZ1bmN0aW9ucywgd2hpY2ggbWlnaHQgYWxzbyBoYXZlIGxvb3BzLCBidXQg
d2hvc2UgYmFzZWxpbmUgdmVyc2lvbnMKLSAgICAvLyBkb24ndCBrbm93IHdoZXJlIHRvIGxvb2sg
Zm9yIHRoZSBleGl0IGNvdW50LiBGaWd1cmUgb3V0IGlmIHRob3NlIGxvb3BzIGFyZSBzZXZlcmUg
ZW5vdWdoCi0gICAgLy8gdGhhdCB3ZSBoYWQgdHJpZWQgdG8gT1NSIGVudGVyLiBJZiBzbywgdGhl
biB3ZSBzaG91bGQgdXNlIHRoZSBsb29wIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCi0gICAgLy8g
T3RoZXJ3aXNlLCB3ZSBzaG91bGQgdXNlIHRoZSBub3JtYWwgcmVvcHRpbWl6YXRpb24gdHJpZ2dl
ci4KLQotICAgIGJvb2wgZGlkVHJ5VG9FbnRlckluTG9vcCA9IGZhbHNlOwotICAgIGZvciAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlk
VHJ5VG9FbnRlckluTG9vcCgpKSB7Ci0gICAgICAgICAgICBkaWRUcnlUb0VudGVySW5Mb29wID0g
dHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdWludDMy
X3QgZXhpdENvdW50VGhyZXNob2xkID0gZGlkVHJ5VG9FbnRlckluTG9vcAotICAgICAgICA/IGV4
aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKQotICAgICAgICA6IGV4
aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7Ci0KLSAgICBpZiAobV9vc3JFeGl0
Q291bnRlciA+IGV4aXRDb3VudFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuIE9wdGltaXplQWN0
aW9uOjpSZW9wdGltaXplTm93OwotCi0gICAgLy8gVG9vIGZldyBmYWlscy4gQWRqdXN0IHRoZSBl
eGVjdXRpb24gY291bnRlciBzdWNoIHRoYXQgdGhlIHRhcmdldCBpcyB0byBvbmx5IG9wdGltaXpl
IGFmdGVyIGEgd2hpbGUuCi0gICAgYmFzZWxpbmVDb2RlQmxvY2stPm1faml0RXhlY3V0ZUNvdW50
ZXIuc2V0TmV3VGhyZXNob2xkRm9yT1NSRXhpdChleGl0U3RhdGUuYWN0aXZlVGhyZXNob2xkLCBl
eGl0U3RhdGUubWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZCk7Ci0gICAgcmV0dXJuIE9wdGlt
aXplQWN0aW9uOjpOb25lOwotfQotCiB2b2lkIENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2Nh
dGlvbigpCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyMjAwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsMTAgKzc3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBERkcg
ewotc3RydWN0IE9TUkV4aXRTdGF0ZTsKLX0gLy8gbmFtZXNwYWNlIERGRwotCiBjbGFzcyBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM7CiBjbGFzcyBDb2RlQmxvY2tTZXQ7CiBjbGFzcyBFeGVjU3Rh
dGU7CkBAIC03NjYsMTAgKzc2Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY291bnRPU1JFeGl0
KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KIAotICAgIGVudW0gY2xhc3MgT3B0aW1pemVBY3Rp
b24geyBOb25lLCBSZW9wdGltaXplTm93IH07Ci0gICAgT3B0aW1pemVBY3Rpb24gdXBkYXRlT1NS
RXhpdENvdW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShERkc6Ok9TUkV4aXRTdGF0ZSYp
OworICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZPU1JFeGl0Q291bnRlcigpIHsgcmV0dXJuICZtX29z
ckV4aXRDb3VudGVyOyB9CiAKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXgg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX29zckV4aXRDb3VudGVyKTsgfQogCiAgICAgdWludDMyX3QgYWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNiBAQCBlbnVt
IENvdW50aW5nVmFyaWFudCB7CiBkb3VibGUgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MoaW50
MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CiBpbnQzMl90IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzQW5kQ29udmVydFRvSW50KGludDMyX3QgdmFsdWUsIENvZGVCbG9jayopOwogCi0vLyBGSVhN
RTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTE0NS4KIGlubGluZSBpbnQzMl90IGZvcm1hdHRlZFRvdGFsRXhlY3V0aW9u
Q291bnQoZmxvYXQgdmFsdWUpCiB7CiAgICAgdW5pb24gewpAQCAtNTgsMTkgKzU3LDExIEBAIHB1
YmxpYzoKICAgICBFeGVjdXRpb25Db3VudGVyKCk7CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29u
Y3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7Ci0gICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xk
KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KICAgICB2b2lkIHNldE5ld1RocmVz
aG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9pZCBkZWZlckluZGVm
aW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkRm9yT1NSRXhp
dCh1aW50MzJfdCBhY3RpdmVUaHJlc2hvbGQsIGRvdWJsZSBtZW1vcnlVc2FnZUFkanVzdGVkVGhy
ZXNob2xkKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSBhY3RpdmVUaHJlc2hv
bGQ7Ci0gICAgICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC1tZW1vcnlVc2Fn
ZUFkanVzdGVkVGhyZXNob2xkKTsKLSAgICAgICAgbV90b3RhbENvdW50ID0gbWVtb3J5VXNhZ2VB
ZGp1c3RlZFRocmVzaG9sZDsKLSAgICB9Ci0KICAgICBzdGF0aWMgaW50MzJfdCBtYXhpbXVtRXhl
Y3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
Y291bnRpbmdWYXJpYW50KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNiBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gRklYTUU6IFRoaXMgaXMgYmVpbmcgc3VwcGxhbnRlZCBi
eSByZXBvcnRWYWx1ZSgpLiBSZW1vdmUgdGhpcyBvbmUKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUxNDUgaGFzIGJlZW4gZml4ZWQuCiB2b2lkIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwg
SlNWYWx1ZVJlZ3MgcmVncykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtNzYs
MzQgKzc0LDYgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjplbWl0UgogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2gg
KG1fa2luZCkgewotICAgIGNhc2UgTm9uZToKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBS
ZWFkeToKLSAgICAgICAgKnUucHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkgPSBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Ci0K
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQot
ICAgICAgICAgICAgdS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlcygpLmFkZChsb2NrZXIsIGtleSk7Ci0gICAgICAgICpwcm9maWxlLT5zcGVjRmFpbEJ1Y2tl
dCgwKSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjYXNlIEFyaXRoUHJvZmlsZVJlYWR5OiB7Ci0gICAgICAgIHUuYXJpdGhQcm9maWxlLT5v
YnNlcnZlUmVzdWx0KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gfQotCi0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCwxMiArNzAs
OSBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayosIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5Jik7CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCAhPSBOb25lOyB9Ci0KLSAgICAvLyBGSVhNRTogZW1pdFJlcG9ydFZhbHVl
IGlzIGJlaW5nIHN1cHBsYW50ZWQgYnkgcmVwb3J0VmFsdWUoKS4gUmVtb3ZlIHRoaXMgb25lCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NSBoYXMg
YmVlbiBmaXhlZC4KKyAgICAKICAgICB2b2lkIGVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMm
LCBKU1ZhbHVlUmVncykgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWYWx1ZShKU1ZhbHVlKTsKLQor
ICAgIAogcHJpdmF0ZToKICAgICBlbnVtIEtpbmQgewogICAgICAgICBOb25lLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMjIyMDA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODksNyArODksNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhlIERGRyBp
cyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8gbWFrZSBz
dXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsK
KyAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENU
SVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIyMDA3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDYgKzIyNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
CiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsK
IH0KIAorc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2Nr
Kiwgdm9pZCogcGMpCit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAg
ICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhl
Y3V0YWJsZU1lbW9yeSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBj
ICYmIHBjIDwgaGFuZGxlLT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKIHZvaWQgSklUQ29k
ZTo6ZmluYWxpemVPU1JFbnRyeXBvaW50cygpCiB7CiAgICAgYXV0byBjb21wYXJhdG9yID0gW10g
KGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CiAKKyAgICBzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7Cisg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklU
Q29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsg
PSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1
bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9z
ckV4aXRbaV07CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRD
b21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZv
Lm1fZmFpbHVyZUp1bXBzOwogICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgpKQpAQCAt
OTcsMTAgKzk2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAg
ICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7Ci0gICAgICAgIEp1bXAgdGFyZ2V0ID0ganVt
cCgpOwotICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJn
ZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgfSk7CisgICAgICAgIGV4aXQuc2V0UGF0
Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwogICAgIH0KIH0KIApAQCAtMzA3LDgg
KzMwMywxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuY2FsbCkpOwogICAg
IH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0gdm0oKS0+
Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KTsgKytpKSB7CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07
CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGl0LmdldFBhdGNoYWJsZUNvZGVP
ZmZzZXRBc0p1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXhpdC5jb3JyZWN0SnVtcChsaW5rQnVm
ZmVyKTsKICAgICAgICAgaWYgKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZS5pc1NldCgpKSB7CiAg
ICAgICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRzLmFwcGVuZChKdW1w
UmVwbGFjZW1lbnQoCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8u
bV9yZXBsYWNlbWVudFNvdXJjZSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjIxICsyOSwxOCBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRl
ICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAj
aW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJn
dW1lbnRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVU
cmFjZXJzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKLSNpbmNsdWRlICJQcm9iZUZyYW1lLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotdXNpbmcgQ1BVU3RhdGUgPSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0
ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2luZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGlj
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NS
RXhpdChDb250ZXh0JiwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0K
LXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVGb3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBz
b3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVl
IHJlc3VsdDsKLSAgICAgICAgc3RkOjptZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4o
c291cmNlLmJhc2UoKSkgKyBzb3VyY2Uub2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShjcHUuZ3ByPEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsK
LSNlbHNlCi0gICAgaWYgKHNvdXJjZS5oYXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZShzb3VyY2UudGFnKCksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwg
Y3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lm
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWNfYXNzZXJ0KGlz
NjRCaXQoKSwgIndlIG9ubHkgc3VwcG9ydCBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgb24gNjQtYml0
Iik7Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZl
c0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0g
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICB1aW50cHRyX3QqIHBoeXNpY2FsU3RhY2tGcmFtZSA9IGNvbnRleHQuZnA8dWlu
dHB0cl90Kj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVz
IGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgot
ICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHBo
eXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGdvaW5nIHRocm91Z2gg
Y29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQoIShlbnRyeS5vZmZzZXQoKSAlIHNpemVv
Zih1aW50cHRyX3QpKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9
IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAvIHNpemVvZih1aW50cHRyX3QpXTsK
LSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVT
YXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5z
dGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
UmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0
YWNrLnNldChjb250ZXh0LmZwKCksIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0Lmdwcjx1aW50cHRy
X3Q+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRl
eHQuYXJnPFZNKj4oKTsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZl
cyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BWTUVu
dHJ5RnJhbWUpOwotICAgIHVpbnRwdHJfdCogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIp
OwotCi0gICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgc2l6ZV90IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZih1aW50cHRy
X3QpOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRl
eHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNl
dF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZw
cigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNl
dF0pOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFj
ayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0g
dm1FbnRyeVJlY29yZCh2bS50b3BWTUVudHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVC
dWZmZXIgPSBlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50
ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5
LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwg
ZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPHVpbnRwdHJfdD4oZW50cnkucmVnKCkuZ3ByKCkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIs
IGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjx1aW50cHRyX3Q+KGVudHJ5LnJlZygpLmZwcigp
KSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JD
b3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zv
cihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVy
IG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9vbCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAg
ICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBS
ZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2Fs
bGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYg
KGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICB1aW50cHRyX3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlm
ICh3YXNDYWxsZWRWaWFUYWlsQ2FsbCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5y
ZWcoKSkpCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0
cl90PihlbnRyeS5vZmZzZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVn
aXN0ZXJWYWx1ZSA9IGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBm
cmFtZS5zZXQob2Zmc2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9m
ZnNldCgpLCBzYXZlZFJlZ2lzdGVyVmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNh
bGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0
b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYp
IHsgfQotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYsIENvZGVCbG9jayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNl
bmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpT
Q2VsbCogY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9
ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkp
OwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5
ID0gc3RkOjptYXgobGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkgLSAxKSk7Ci0gICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RB
cmd1bWVudHM6OmNyZWF0ZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJl
c3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFt
ZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNl
LCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykK
LSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkp
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0q
PigpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLQot
ICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRD
b3VudCAtIDE7Ci0gICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6
OmNyZWF0ZUVtcHR5KAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Y2xv
bmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZy
YW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJh
c2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07
KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGZyYW1lLmFyZ3VtZW50
KGkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVh
bUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwg
aml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3Jp
Z2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAg
LTI1OSwxMCArNTYsMzAgQEAgT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVl
UwogICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVudE5vZGUs
IGNhbkV4aXQpOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0
JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2Rl
LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCit2b2lkIE9TUkV4aXQ6
OnNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgY2hl
Y2spCiB7Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwor
ICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGNoZWNrLm1fanVtcC5tX2xhYmVsLm1fb2Zmc2V0
OworfQogCitNYWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0OjpnZXRQYXRjaGFibGVDb2RlT2Zm
c2V0QXNKdW1wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXAoQXNz
ZW1ibGVyTGFiZWwobV9wYXRjaGFibGVDb2RlT2Zmc2V0KSk7Cit9CisKK0NvZGVMb2NhdGlvbkp1
bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGRmZ0NvZGVCbG9j
aykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChkZmdDb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGF0YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKTsKK30K
Kwordm9pZCBPU1JFeGl0Ojpjb3JyZWN0SnVtcChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorewor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICBsYWJlbC5tX2xhYmVsLm1fb2Zm
c2V0ID0gbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9
IGxpbmtCdWZmZXIub2Zmc2V0T2YobGFiZWwpOworfQorCit2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgb3BlcmFuZHMpCit7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBv
cGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CkBAIC0yNzUsMTIgKzkyLDE0IEBAIHN0YXRpYyB2b2lkIGVtaXRSZXN0
b3JlQXJndW1lbnRzKENvbnRleHQKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5v
ZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZp
bmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZyYW1lLm9wZXJh
bmQoaXRlci0+dmFsdWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKGl0
ZXItPnZhbHVlKSwgcmVncyk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZShyZWdzLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0g
ICAgICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFt
ZSgpOworICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZygpLT5taW5p
ZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwogCiAgICAgICAgIGludCBzdGFja09m
ZnNldDsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKQEAgLTI4OCw0OCArMTA3LDUzIEBA
IHN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwogCi0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihmcmFt
ZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS5hc0NlbGwoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
LAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXND
ZWxsKCkpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgfQogCi0g
ICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50
Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
fQogCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2JqZWN0OworICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
MSk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOworICAgICAgICAg
ICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4ob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9
IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxp
bmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09i
amVjdCkpOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
aml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmFkZChpZCwgb3BlcmFuZCk7CiAgICAgfQogfQogCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JF
eGl0KENvbnRleHQmIGNvbnRleHQpCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGls
ZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxW
TSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7
Ci0gICAgQVNTRVJUKCZleGVjLT52bSgpID09ICZ2bSk7Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1l
Rm9yQ2F0Y2gpIHsKLSAgICAgICAgZXhlYyA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAg
ICBjb250ZXh0LmZwKCkgPSBleGVjOwotICAgIH0KKyAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNh
dGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhl
Yyk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAg
IEFTU0VSVChjb2RlQmxvY2spOwpAQCAtMzM3LDEwMiArMTYxLDc5IEBAIHZvaWQgT1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY28KIAogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJh
YmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291
bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFw
KTsKIAotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6
OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAg
T1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKKyAgICB1aW50
MzJfdCBleGl0SW5kZXggPSB2bS0+b3NyRXhpdEluZGV4OworICAgIE9TUkV4aXQmIGV4aXQgPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckV4aXRbZXhpdEluZGV4XTsKIAogICAgIEFT
U0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9u
KCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOworICAgIAorICAgIHByZXBhcmVDb2Rl
T3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7CiAKLSAgICBpZiAoVU5M
SUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkgewotICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gZXhl
Y3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBjb21wdXRl
ZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0U3RhdGUg
cmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8vIGV4aXQgcmFtcCBj
b2RlLgotCi0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGJhc2VsaW5lIGNvZGVCbG9ja3MgdG8g
T1NSIGV4aXQgdG8uCi0gICAgICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBl
eGl0Lm1fY29kZU9yaWdpbik7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAgICBBU1NFUlQoYmFz
ZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0KLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAgICAgT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZl
bnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklU
Q29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMpOwotCi0gICAg
ICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQotICAgICAgICAgICAgcmVjb3Zlcnkg
PSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07
Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+
YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVt
b3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxp
bmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKLSAg
ICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQp
OwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2Vs
aW5lQ29kZUJsb2NrKTsKLSAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4g
ZGVjb2RlZENvZGVNYXA7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKS0+
ZGVjb2RlKGRlY29kZWRDb2RlTWFwKTsKLQotICAgICAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNp
Z25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29k
ZUluZGV4KTsKLQotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0gICAgICAgIEFTU0VSVChtYXBw
aW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
Ci0KLSAgICAgICAgcHRyZGlmZl90IGZpbmFsU3RhY2tQb2ludGVyT2Zmc2V0ID0gY29kZUJsb2Nr
Rm9yRXhpdC0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwotCi0gICAg
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRDb2RlKCktPmV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAg
Ly8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KKyAgICBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiBvcGVyYW5kczsKKyAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnZhcmlhYmxl
RXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5taW5pZmllZERGRywgZXhpdC5tX3N0cmVhbUluZGV4
LCBvcGVyYW5kcyk7CisKKyAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IDA7Cisg
ICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICByZWNvdmVy
eSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9uUmVjb3ZlcnlbZXhp
dC5tX3JlY292ZXJ5SW5kZXhdOworCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KGNv
ZGVCbG9jayk7CisKKyAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVyaWNVbndpbmQpIHsK
KyAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1
c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCisgICAgICAgICAgICAvLyBT
bywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgorICAg
ICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxG
cmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgfQor
ICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAor
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYo
bmV3IE9TUkV4aXRTdGF0ZShleGl0LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVy
YW5kcywgcmVjb3ZlcnksIGZpbmFsU3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJlc2hvbGQs
IGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0KSk7CisgICAgICAgIGppdC5qaXRBc3NlcnRI
YXNWYWxpZENhbGxGcmFtZSgpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5jb21waWxh
dGlvbikpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0u
bV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBpZiAoVU5MSUtFTFkodm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBp
bGF0aW9uKSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBkYXRhYmFzZSA9ICp2
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwogICAgICAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29t
cGlsYXRpb24uZ2V0KCk7CiAKICAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxl
ckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKICAgICAgICAgICAgICAgICBleGl0SW5k
ZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09IFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhpdFN0YXRlLT5wcm9m
aWxlckV4aXQgPSBwcm9maWxlckV4aXQ7CisgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2Zp
bGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhp
dCgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykg
ZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAorICAgICAgICBjb21waWxlRXhpdChqaXQs
ICp2bSwgZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKKworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAorICAgICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0KCksCisgICAgICAg
ICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIE9TUiBleGl0ICMldSAoJXMsICVz
KSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAgICAgICAgICAgIGV4aXRJbmRl
eCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAgICAg
ZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRh
KCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4
dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgT1NSRXhpdFN0
YXRlJiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NF
UlQoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7
Ci0KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBleGl0U3RhdGUub3Bl
cmFuZHM7Ci0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBleGl0U3RhdGUucmVj
b3Zlcnk7Ci0KLSAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCkgewotICAgICAg
ICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNhdXNlIHdlIGFycml2
ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0
b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29udGV4dCk7Ci0gICAg
ICAgIEFTU0VSVChjb250ZXh0LmZwKCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAg
ICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRz
KSkuZGF0YSgpKSk7CiAgICAgfQotICAgIGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWludDhf
dCo+KCkgKyAoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpOwogCi0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhpdC5jb2RlTG9jYXRpb25Gb3JSZXBhdGNo
KGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9jb2RlLmNvZGUoKSkpOwogCi0g
ICAgaWYgKGV4aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgIGV4aXRTdGF0ZS5wcm9maWxl
ckV4aXQtPmluY0NvdW50KCk7CisgICAgdm0tPm9zckV4aXRKdW1wRGVzdGluYXRpb24gPSBleGl0
Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KIAotICAgIGF1dG8mIGNwdSA9
IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkp
Owordm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBj
b25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFu
ZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQoreworICAgIGppdC5qaXRBc3NlcnRU
YWdzSW5QbGFjZSgpOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NFUlQoY3B1LmdwcihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpID09IFRhZ1R5cGVOdW1iZXIpOwotICAgIEFT
U0VSVChjcHUuZ3ByKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikgPT0gVGFnTWFzayk7Ci0jZW5k
aWYKKyAgICAvLyBQcm8tZm9ybWEgc3R1ZmYuCisgICAgaWYgKE9wdGlvbnM6OnByaW50RWFjaE9T
UkV4aXQoKSkgeworICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5m
byA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgICAgIGRlYnVnSW5mby0+
Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgICAgICBkZWJ1Z0luZm8tPmtpbmQgPSBl
eGl0Lm1fa2luZDsKKyAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNldCA9IGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cHJp
bnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRleHQsIHZtLm9zckV4
aXRJbmRleCwgZXhpdCk7CisgICAgICAgIGppdC5kZWJ1Z0NhbGwodm0sIGRlYnVnT3BlcmF0aW9u
UHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisgICAgfQogCiAgICAgLy8gUGVy
Zm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVu
IGFuIG9wZXJhdGlvbgogICAgIC8vIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5
aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgpAQCAtNDQwLDI0ICsyNDEs
MjIgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjbwogICAgIGlmIChy
ZWNvdmVyeSkgewogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKICAgICAgICAg
Y2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8dWludDMy
X3Q+KHJlY292ZXJ5LT5zcmMoKSk7CisgICAgICAgICAgICBqaXQuc3ViMzIocmVjb3ZlcnktPnNy
YygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
QVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwotICAgICAgICAgICAg
Y3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBUYWdUeXBlTnVtYmVyOworICAgICAgICAgICAg
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+ZGVzdCgp
KTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTcGVjdWxhdGl2
ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAo
Y3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRl
KCkpOworICAgICAgICAgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3Zl
cnktPmltbWVkaWF0ZSgpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsK
LSAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gVGFnVHlwZU51bWJlcjsK
KyAgICAgICAgICAgIGppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVj
b3ZlcnktPmRlc3QoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkp
IF4gVmFsdWVGYWxzZTsKKyAgICAgICAgICAgIGppdC54b3I2NChBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5k
ZXN0KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDgwLDExMyArMjc5LDM5
NSBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvCiAgICAgICAgICAg
ICAvLyBwcm9wZXJ0eSBhY2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBwcm9maWxlKS4KIAogICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBiYXNl
bGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJh
c2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJv
ZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0ganNW
YWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKS5hc0NlbGwoKS0+c3RydWN0dXJlKHZt
KTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNl
IGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoKSB0byBkZXRlcm1pbmUgdGhlIG9ic2VydmVkIEFycmF5
TW9kZSBoZXJlLgotICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGN1cnJlbnRseSwgZG9pbmcg
c28gd291bGQgcmVzdWx0IGluIGEgcGRmanMgcHJlZm9ybWFuY2UgcmVncmVzc2lvbi4KLSAgICAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2
NDczCi0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJyYXlNb2RlKGFzQXJy
YXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBpZiAoQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9y
aWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJlZ2lzdGVyOworICAg
ICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVy
ID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCk7CisjZWxzZQorICAgICAgICAgICAgICAgIEdQ
UlJlZyB1c2VkUmVnaXN0ZXIxOworICAgICAgICAgICAgICAgIEdQUlJlZyB1c2VkUmVnaXN0ZXIy
OworICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkg
eworICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIxID0gZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuYmFzZSgpOworICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIyID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXIxID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25UYWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIy
ID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UudGFnR1BSKCk7CisgICAgICAgICAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgc2Ny
YXRjaDEgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBzY3JhdGNoMiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUih1c2VkUmVnaXN0ZXIsIHNjcmF0Y2gxKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgc2Ny
YXRjaDEgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyMSwg
dXNlZFJlZ2lzdGVyMik7CisgICAgICAgICAgICAgICAgc2NyYXRjaDIgPSBBc3NlbWJseUhlbHBl
cnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyMSwgdXNlZFJlZ2lzdGVyMiwgc2NyYXRj
aDEpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnB1c2goc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY3JhdGNoMTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQubV9qc1ZhbHVlU291
cmNlLnBheWxvYWRHUFIoKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoQXNzZW1ibHlI
ZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoMSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmls
ZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICAgICAgICAgIGppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDEpOworI2Vsc2UK
KyAgICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNj
cmF0Y2gxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0LmxzaGlm
dDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0Lm9yMzIoc2NyYXRj
aDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVz
c09mQXJyYXlNb2RlcygpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaDIpOworICAgICAgICAg
ICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0Y2gyKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICBwcm9maWxl
LnJlcG9ydFZhbHVlKGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSkpOworICAg
ICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3Zh
bHVlUHJvZmlsZSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBpZiAoZXhpdC5t
X2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4n
dCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1c2UgdGhlIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0
byByZXN0b3JlIGl0LgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRW
YWx1ZShqaXQsIEpTVmFsdWVSZWdzKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRh
Z1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBK
U1ZhbHVlUmVncyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSkpOworI2Vsc2UgLy8gbm90IFVT
RShKU1ZBTFVFNjQpCisgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRy
ZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIgc28gd2UgY2FuIHVz
ZSBpdC4KKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFBheWxvYWQgPSBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYmFzZSgpKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCksIHNjcmF0Y2hQYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoUGF5bG9hZCk7CisgICAgICAg
ICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaFRhZyk7CisKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyBzY3JhdGNoKHNjcmF0Y2hUYWcsIHNjcmF0Y2hQYXlsb2FkKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKGV4aXQubV9qc1ZhbHVlU291
cmNlLmFzQWRkcmVzcygpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRS
ZXBvcnRWYWx1ZShqaXQsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFRhZyk7CisgICAgICAgICAgICAgICAgaml0LnBv
cFRvUmVzdG9yZShzY3JhdGNoUGF5bG9hZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihleGl0Lm1fanNW
YWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZl
KHNjcmF0Y2hUYWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZygpKSwgc2NyYXRjaFRhZyk7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUoc2NyYXRjaFRhZywgZXhpdC5tX2pzVmFs
dWVTb3VyY2UucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBv
cnRWYWx1ZShqaXQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNj
cmF0Y2hUYWcpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvZmlsZS5l
bWl0UmVwb3J0VmFsdWUoaml0LCBleGl0Lm1fanNWYWx1ZVNvdXJjZS5yZWdzKCkpOworI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBEbyBhbGwgZGF0
YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNr
LgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3Rvcmlu
ZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVy
eSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisg
ICAgLy8gV2hhdCBmb2xsb3dzIGlzIGFuIGludGVudGlvbmFsbHkgc2ltcGxlIE9TUiBleGl0IGlt
cGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzCisgICAgLy8gZmFpcmx5IHBvb3IgY29kZSBidXQg
aXMgdmVyeSBlYXN5IHRvIGhhY2suIEluIHBhcnRpY3VsYXIsIGl0IGR1bXBzIGFsbCBzdGF0ZSB0
aGF0CisgICAgLy8gbmVlZHMgY29udmVyc2lvbiBpbnRvIGEgc2NyYXRjaCBidWZmZXIgc28gdGhh
dCBpbiBzdGVwIDYsIHdoZXJlIHdlIGFjdHVhbGx5IGRvIHRoZQorICAgIC8vIGNvbnZlcnNpb25z
LCB3ZSBrbm93IHRoYXQgYWxsIHRlbXAgcmVnaXN0ZXJzIGFyZSBmcmVlIHRvIHVzZSBhbmQgdGhl
IHZhcmlhYmxlIGlzCisgICAgLy8gZGVmaW5pdGVseSBpbiBhIHdlbGwta25vd24gc3BvdCBpbiB0
aGUgc2NyYXRjaCBidWZmZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGhhZAorICAgIC8vIG9y
aWdpbmFsbHkgYmVlbiBpbiBhIHJlZ2lzdGVyIG9yIHNwaWxsZWQuIFRoaXMgYWxsb3dzIHVzIHRv
IGRlY291cGxlICJ3aGVyZSB3YXMKKyAgICAvLyB0aGUgdmFyaWFibGUiIGZyb20gImhvdyB3YXMg
aXQgcmVwcmVzZW50ZWQiLiBDb25zaWRlciB0aGF0IHRoZQorICAgIC8vIEludDMyRGlzcGxhY2Vk
SW5KU1N0YWNrIHJlY292ZXJ5OiBpdCB0ZWxscyB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBpbiBhCisg
ICAgLy8gcGFydGljdWxhciBwbGFjZSBhbmQgdGhhdCB0aGF0IHBsYWNlIGhvbGRzIGFuIHVuYm94
ZWQgaW50MzIuIFdlIGhhdmUgdHdvIGRpZmZlcmVudAorICAgIC8vIHBsYWNlcyB0aGF0IGEgdmFs
dWUgY291bGQgYmUgKGRpc3BsYWNlZCwgcmVnaXN0ZXIpIGFuZCBhIGJ1bmNoIG9mIGRpZmZlcmVu
dAorICAgIC8vIHdheXMgb2YgcmVwcmVzZW50aW5nIGEgdmFsdWUuIFRoZSBudW1iZXIgb2YgcmVj
b3ZlcmllcyBpcyB0d28gKiBhIGJ1bmNoLiBUaGUgY29kZQorICAgIC8vIGJlbG93IG1lYW5zIHRo
YXQgd2UgaGF2ZSB0byBoYXZlIHR3byArIGEgYnVuY2ggY2FzZXMgcmF0aGVyIHRoYW4gdHdvICog
YSBidW5jaC4KKyAgICAvLyBPbmNlIHdlIGhhdmUgbG9hZGVkIHRoZSB2YWx1ZSBmcm9tIHdoZXJl
dmVyIGl0IHdhcywgdGhlIHJlYm94aW5nIGlzIHRoZSBzYW1lCisgICAgLy8gcmVnYXJkbGVzcyBv
ZiBpdHMgbG9jYXRpb24uIExpa2V3aXNlLCBiZWZvcmUgd2UgZG8gdGhlIHJlYm94aW5nLCB0aGUg
d2F5IHdlIGdldCB0bworICAgIC8vIHRoZSB2YWx1ZSAoaS5lLiB3aGVyZSB3ZSBsb2FkIGl0IGZy
b20pIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuIEJlY2F1c2UKKyAgICAvLyB0
aGUgY29kZSBiZWxvdyBhbHdheXMgZHVtcHMgZXZlcnl0aGluZyBpbnRvIGEgc2NyYXRjaCBidWZm
ZXIgZmlyc3QsIHRoZSB0d28KKyAgICAvLyBxdWVzdGlvbnMgYmVjb21lIG9ydGhvZ29uYWwsIHdo
aWNoIHNpbXBsaWZpZXMgYWRkaW5nIG5ldyB0eXBlcyBhbmQgYWRkaW5nIG5ldworICAgIC8vIGxv
Y2F0aW9ucy4KKyAgICAvLworICAgIC8vIFRoaXMgcmFpc2VzIHRoZSBxdWVzdGlvbjogZG9lcyB1
c2luZyBzdWNoIGEgc3Vib3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBPU1IgZXhpdCwKKyAgICAv
LyB3aGVyZSB3ZSBhbHdheXMgZW1pdCBjb2RlIHRvIGR1bXAgYWxsIHN0YXRlIGludG8gYSBzY3Jh
dGNoIGJ1ZmZlciBvbmx5IHRvIHRoZW4KKyAgICAvLyBkdW1wIGl0IHJpZ2h0IGJhY2sgaW50byB0
aGUgc3RhY2ssIGh1cnQgdXMgaW4gYW55IHdheT8gVGhlIGFzbndlciBpcyB0aGF0IE9TUiBleGl0
cworICAgIC8vIGFyZSByYXJlLiBPdXIgdGllcmluZyBzdHJhdGVneSBlbnN1cmVzIHRoaXMuIFRo
aXMgaXMgYmVjYXVzZSBpZiBhbiBPU1IgZXhpdCBpcworICAgIC8vIHRha2VuIG1vcmUgdGhhbiB+
MTAwIHRpbWVzLCB3ZSBqZXR0aXNvbiB0aGUgREZHIGNvZGUgYmxvY2sgYWxvbmcgd2l0aCBhbGwg
b2YgaXRzCisgICAgLy8gZXhpdHMuIEl0IGlzIGltcG9zc2libGUgZm9yIGFuIE9TUiBleGl0IC0g
aS5lLiB0aGUgY29kZSB3ZSBjb21waWxlIGJlbG93IC0gdG8KKyAgICAvLyBleGVjdXRlIGZyZXF1
ZW50bHkgZW5vdWdoIGZvciB0aGUgY29kZWdlbiB0byBtYXR0ZXIgdGhhdCBtdWNoLiBJdCBwcm9i
YWJseSBtYXR0ZXJzCisgICAgLy8gZW5vdWdoIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB0dXJuIHRo
aXMgaW50byBzb21lIHN1cGVyLXNsb3cgZnVuY3Rpb24gY2FsbCwgYnV0IHNvCisgICAgLy8gbG9u
ZyBhcyB3ZSdyZSBnZW5lcmF0aW5nIHN0cmFpZ2h0LWxpbmUgY29kZSwgdGhhdCBjb2RlIGNhbiBi
ZSBwcmV0dHkgYmFkLiBBbHNvCisgICAgLy8gYmVjYXVzZSB3ZSB0ZW5kIHRvIGV4aXQgb25seSBh
bG9uZyBvbmUgT1NSIGV4aXQgZnJvbSBhbnkgREZHIGNvZGUgYmxvY2sgLSB0aGF0J3MgYW4KKyAg
ICAvLyBlbXBpcmljYWwgcmVzdWx0IHRoYXQgd2UncmUgZXh0cmVtZWx5IGNvbmZpZGVudCBhYm91
dCAtIHRoZSBjb2RlIHNpemUgb2YgdGhpcworICAgIC8vIGRvZXNuJ3QgbWF0dGVyIG11Y2guIEhl
bmNlIGFueSBhdHRlbXB0IHRvIG9wdGltaXplIHRoZSBjb2RlZ2VuIGhlcmUgaXMganVzdCBwdXJl
bHkKKyAgICAvLyBoYXJtZnVsIHRvIHRoZSBzeXN0ZW06IGl0IHByb2JhYmx5IHdvbid0IHJlZHVj
ZSBlaXRoZXIgbmV0IG1lbW9yeSB1c2FnZSBvciBuZXQKKyAgICAvLyBleGVjdXRpb24gdGltZS4g
SXQgd2lsbCBvbmx5IHByZXZlbnQgdXMgZnJvbSBjbGVhbmx5IGRlY291cGxpbmcgIndoZXJlIHdh
cyB0aGUKKyAgICAvLyB2YXJpYWJsZSIgZnJvbSAiaG93IHdhcyBpdCByZXByZXNlbnRlZCIsIHdo
aWNoIHdpbGwgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBhZGQKKyAgICAvLyBmZWF0dXJlcyBp
biB0aGUgZnV0dXJlIGFuZCBpdCB3aWxsIG1ha2UgaXQgaGFyZGVyIHRvIHJlYXNvbiBhYm91dCBi
dWdzLgogCi0gICAgaW50IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyA9IHN0YXRp
Y19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZPcGVyYW5kcyA9IG9wZXJhbmRzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsg
KytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIEdQ
UnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCiAKLSAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkg
JiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKLSAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2
bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3BlcmFuZHMu
c2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hCdWZmZXIgPyBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkg
OiAwOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAKICAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICBjYXNlIERpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgZXhl
Yy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIGNh
c2UgVW5ib3hlZENlbGxJbkdQUjoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIElu
R1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZ3ByPEpTVmFs
dWU+KHJlY292ZXJ5LmdwcigpKSk7CisgICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Cisg
ICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgICAgICBqaXQuc3Rv
cmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaCArIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogI2Vsc2UKKyAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICAgICAg
aml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkuZ3ByKCksCisgICAgICAgICAg
ICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGlu
ZGV4KS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8
aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOworICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkudGFnR1BSKCksCisgICAgICAgICAgICAgICAg
JmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+
YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBy
ZWNvdmVyeS5wYXlsb2FkR1BSKCksCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKIAotICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5H
UFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdw
cjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKKyAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGNhc2UgQ2VsbERpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1
ZShleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkQ2VsbCgpKSk7Cisg
ICAgLy8gQW5kIHZvaWxhLCBhbGwgR1BScyBhcmUgZnJlZSB0byByZXVzZS4KKworICAgIC8vIFNh
dmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKworICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07
CisKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNl
IFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnBy
KCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgICAg
ICBicmVhazsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEJv
b2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwganNCb29s
ZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7CisgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKLSNlbmRpZgorICAgICAgICB9CisgICAgfQogCisgICAgLy8gTm93
LCBhbGwgRlBScyBhcmUgYWxzbyBmcmVlLgorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB0
aGUgc3RhY2sgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEZvciBzaW1wbGljaXR5IHdlCisgICAg
Ly8gZG8gdGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3MgYWxyZWFkeSBpbiB0aGUgcmlnaHQgcGxh
Y2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyIGxhdGVyLgor
CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKKworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJ
bkpTU3RhY2s6CiAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAg
ICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBEb3VibGVEaXNw
bGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1lLnNl
dE9wZXJhbmQob3BlcmFuZCwgZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuanNW
YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAg
Y2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5sb2Fk
NjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBicmVhazsKICNlbHNlCi0gICAgICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihleGVjLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCkucGF5bG9hZCgpKSk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCisgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnRhZyk7CisgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwKKyAg
ICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3Jh
dGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgICAgICBicmVhazsKICNlbmRp
ZgorCisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KIAotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkuZ3By
KCkpKSk7CisgICAgLy8gTmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sgcG9pbnRlciBhY2Nv
dW50cyBmb3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNhZ2UgYXQgZXhpdC4gVGhpcworICAgIC8v
IGNvdWxkIHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUgREZHIHVzZWQuIFdlIG5lZWQgdG8gZG8g
aXQgYmVmb3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0cworICAgIC8vIHVzZWQgYnkgYmFzZWxp
bmUuCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
CisgICAgICAgICAgICAtaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5y
ZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0ICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAg
IENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBh
bmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KKyAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGpp
dC5iYXNlbGluZUNvZGVCbG9jaygpKTsKKworICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBu
ZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KKyAgICBqaXQuZW1pdE1hdGVy
aWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSk7CisKKyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMg
YW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgorCisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGlu
ZGV4KTsKKworICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9Mb2NhbCgpIDwgc3Rh
dGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaW50
IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2Fz
ZSBJbkZQUjoKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIEluR1BSOgorICAgICAg
ICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAg
ICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZSAvLyBub3QgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAg
ICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0
Y2ggKyBpbmRleCktPmFzQml0cy50YWcsCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9h
ZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAgICAgICAgICAgICAgICBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgICAgICAgICBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkSW50MzIoKSkpOworICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6
CisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAg
ICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAg
Y2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgaml0LmxvYWQzMigK
KyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihz
Y3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAgICAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAg
YnJlYWs7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKworICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6Ci0gICAgICAgICAg
ICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNv
dmVyeS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOworICAgICAgICAgICAg
aml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyNlbHNlCisgICAgICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkLAorICAgICAgICAgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwK
KyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAg
ICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOworI2Vu
ZGlmCiAgICAgICAgICAgICBicmVhazsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNh
c2UgVW5ib3hlZEludDUySW5HUFI6CiAgICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoZXhlYy0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkpKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBqaXQucnNoaWZ0NjQoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDAsIEdQ
UkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBVbmJveGVkU3RyaWN0SW50NTJJbkdQ
UjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3By
PGludDY0X3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAg
ICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSkpOworICAgICAgICAgICAgaml0LmxvYWQ2NChz
Y3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5ib3hJbnQ1
MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKIAogICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAgICAgICAgICAgIGZy
YW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHB1cmlmeU5hTihleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkRG91
YmxlKCkpKSk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oRlBSSW5mbzo6ZnBSZWdU
MCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5ib3hEb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisjZWxz
ZQorICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5k
KG9wZXJhbmQsIHJlY292ZXJ5LmNvbnN0YW50KCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgICAgICBqaXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLAorICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisjZWxzZQor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSksCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgaml0LnN0
b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVj
b3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgpAQCAtNjAw
LDMxICs2ODEsMTMgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjbwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sg
cG9pbnRlciBhY2NvdW50cyBmb3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNhZ2UgYXQgZXhpdC4g
VGhpcwotICAgIC8vIGNvdWxkIHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUgREZHIHVzZWQuIFdl
IG5lZWQgdG8gZG8gaXQgYmVmb3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0cwotICAgIC8vIHVz
ZWQgYnkgYmFzZWxpbmUuCi0gICAgY3B1LnNwKCkgPSBjcHUuZnA8dWludDhfdCo+KCkgLSAoY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JF
eGl0ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBERkcgY2FsbGVl
IHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJVCB1c2VzLgotICAg
IHJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwotICAgIHNhdmVDYWxs
ZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAgICAvLyBUaGUgdGFn
IHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJpZXMgYmVsb3cuCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikgPSBUYWdUeXBlTnVtYmVyOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSA9IFRhZ1R5cGVOdW1iZXIgfCBUYWdCaXRUeXBlT3RoZXI7Ci0jZW5kaWYKLQotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotCiAgICAgLy8gTm93IHRoYXQg
dGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292
ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVudHMKICAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJl
Y3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3Vt
ZSB0aGF0IHRoZXkgb25seQogICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFuZ2VzIG9mIGxvY2Fs
cy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRoZSBzdGFjayBpcyBz
ZW5zaWJsZS4KICAgICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFzc3VtZSB0aGF0IHRo
ZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNpZGUgb2YgaXRzCiAg
ICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0aGUgREZHIHdvdWxk
bid0IGRvIHRoYXQuCiAKLSAgICBlbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxv
Y2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKKyAgICBlbWl0UmVzdG9yZUFyZ3VtZW50cyhqaXQs
IG9wZXJhbmRzKTsKIAogICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRl
ci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CiAgICAgLy8gdGhhdCBhbGwgbmV3
IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVj
dXRlCkBAIC02NjIsMTYxICs3MjUsMjYgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChD
b250ZXh0JiBjbwogICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291
bnRlciB0bwogICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KIAot
ICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hlY2tJ
Zk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6Ok9wdGltaXplQWN0aW9u
OjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KGJhc2Vs
aW5lQ29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGNvbnRl
eHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQo
Y29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4aXQpOwotfQotCi1z
dGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVC
bG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5m
cCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2
ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0Ci0gICAgLy8g
aW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQob3V0ZXJtb3N0QmFz
ZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAg
ZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIGNvbnN0IENvZGVPcmlnaW4qIGNvZGVP
cmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3Jp
Z2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4tPmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKmNvZGVPcmlnaW4sIG91
dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
IHRydWVDYWxsZXJDYWxsS2luZDsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1ZUNhbGxlciA9IGlu
bGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRydWVDYWxsZXJDYWxs
S2luZCk7Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lID0gY3B1LmZwKCk7Ci0KLSAgICAgICAg
aWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5p
c1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZyYW1lLmdldDx2b2lkKj4o
Q2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lk
Kj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5QQyk7Ci0gICAgICAg
ICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5
dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gbnVsbHB0cjsKLQot
ICAgICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKLSAgICAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFy
YXJnczoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdz
OgotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsOgotICAgICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsVmFyYXJnczogewotICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgICAgICAgICAgYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Y2FsbEJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mbyk7Ci0KLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJD
YWxsOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KLSAg
ICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5m
byhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8pOwotCi0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IHN0dWJJ
bmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAg
ICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBoYW5k
bGVFeGl0Q291bnRzKGppdCwgZXhpdCk7CiAKLSAgICAgICAgICAgIGZyYW1lLnNldDx2b2lkKj4o
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0KTsKLSAgICAgICAg
fQorICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCiAKLSAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgICAgIC8vIFJlc3RvcmUg
dGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgotICAgICAgICAv
LyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVybiBi
YWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gY29weSB0
aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBmb3Ig
dGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNhdmVPckNvcHlDYWxsZWVT
YXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0KLSAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJhbWUpOwotICAgICAg
ICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSwg
Y2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkuYml0cygp
OwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2Nh
dGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhl
IDMyLWJpdCBwYXJ0Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5l
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi0+Ynl0ZWNvZGVJ
bmRleDsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0
cnVjdGlvbikuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90Pihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwg
VGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQz
Ml90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
LCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0g
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAg
ZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0
YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFy
dCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgfQorICAgIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKIAotICAgIC8vIERvbid0IG5lZWQgdG8gc2V0
IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxs
cwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBv
dXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZz
ZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQorICAgIC8vIEFuZCBmaW5pc2guCisgICAgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYgZXhpdCkKK3ZvaWQg
SklUX09QRVJBVElPTiBPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWls
dXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lkKiBzY3JhdGNoKQog
ewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3RhdGUuZ2V0KCk7Cisg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CiAKLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6
aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhl
Y3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJs
b2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3Qg
anVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0
IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQK
LSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsg
YSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWln
aHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0gICAgLy8gZnJvbSBh
LgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1l
bWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgotICAg
IElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICBjb250ZXh0
LmZwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICB2
b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAgIEFTU0VSVChqdW1w
VGFyZ2V0KTsKLQotICAgIGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBl
eGl0U3RhdGUtPnN0YWNrUG9pbnRlck9mZnNldDsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3
ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1lRm9y
Q2F0Y2ggPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7Ci0gICAgfQotCi0gICAgdm0udG9wQ2Fs
bEZyYW1lID0gY29udGV4dC5mcDxFeGVjU3RhdGUqPigpOwotICAgIGNvbnRleHQucGMoKSA9IGp1
bXBUYXJnZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0
LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQpCi17Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gY29udGV4dC5mcDxFeGVjU3RhdGUqPigpOwotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVi
dWdJbmZvKiBkZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qPihkZWJ1Z0luZm9SYXcpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZv
LT5jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKTsKLSAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7Ci0gICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwotCiAg
ICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJsb2NrKTsKLSAgICBk
YXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKGJjIyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOworICAgIGRhdGFMb2co
IiBAIGV4aXQgIyIsIHZtLT5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVnSW5mby0+Ynl0ZWNv
ZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5raW5kKSwgIikgd2l0
aCAiKTsKICAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAg
ICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigp
LApAQCAtODI2LDE4ICs3NTQsMjEgQEAgc3RhdGljIHZvaWQgcHJpbnRPU1JFeGl0KENvbnRleHQm
IGNvbnRleAogICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUu
IHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKICAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVy
ID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKICAgICBkYXRhTG9nKCIg
ICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7CisgICAgY2hhciogc2NyYXRjaFBvaW50ZXIgPSBz
dGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKICAgICAgICAgR1BSUmVnIGdwciA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdw
ck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Cisg
ICAgICAgIGRhdGFMb2coIiAiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKSwgIjoiLCBSYXdQb2lu
dGVyKCpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHNjcmF0Y2hQb2ludGVyKSkpOworICAg
ICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgIH0KICAg
ICBkYXRhTG9nKCJcbiIpOwogICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRpbWUgb2YgZXhpdDoi
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkgewogICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9SZWdpc3RlcihpKTsK
LSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAiOiIpOwotICAgICAg
ICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7Ci0gICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7CisgICAgICAgIGRhdGFMb2coIiAiLCBGUFJJ
bmZvOjpkZWJ1Z05hbWUoZnByKSwgIjoiKTsKKyAgICAgICAgdWludDY0X3QgYml0cyA9ICpyZWlu
dGVycHJldF9jYXN0X3B0cjx1aW50NjRfdCo+KHNjcmF0Y2hQb2ludGVyKTsKKyAgICAgICAgZG91
YmxlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGRvdWJsZSo+KHNjcmF0Y2hQb2ludGVy
KTsKICAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihi
aXRzKSwgdmFsdWUpOworICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwogICAgIH0KICAgICBkYXRhTG9nKCJcbiIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTAgQEAKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCi0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFByb2JlIHsKLWNsYXNz
IENvbnRleHQ7Ci19IC8vIG5hbWVzcGFjZSBQcm9iZQotCi1uYW1lc3BhY2UgUHJvZmlsZXIgewot
Y2xhc3MgT1NSRXhpdDsKLX0gLy8gbmFtZXNwYWNlIFByb2ZpbGVyCitjbGFzcyBDQ2FsbEhlbHBl
cnM7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC05OCwzMiArOTEsNiBAQCBwcml2YXRlOgogICAg
IFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKIH07CiAKLXN0cnVjdCBPU1JFeGl0U3Rh
dGUgOiBSZWZDb3VudGVkPE9TUkV4aXRTdGF0ZT4gewotICAgIE9TUkV4aXRTdGF0ZShPU1JFeGl0
QmFzZSYgZXhpdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2ssIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNv
dmVyeSogcmVjb3ZlcnksIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZzZXQsIGludDMyX3QgYWN0
aXZlVGhyZXNob2xkLCBkb3VibGUgbWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZCwgdm9pZCog
anVtcFRhcmdldCkKLSAgICAgICAgOiBleGl0KGV4aXQpCi0gICAgICAgICwgY29kZUJsb2NrKGNv
ZGVCbG9jaykKLSAgICAgICAgLCBiYXNlbGluZUNvZGVCbG9jayhiYXNlbGluZUNvZGVCbG9jaykK
LSAgICAgICAgLCBvcGVyYW5kcyhvcGVyYW5kcykKLSAgICAgICAgLCByZWNvdmVyeShyZWNvdmVy
eSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXJPZmZzZXQoc3RhY2tQb2ludGVyT2Zmc2V0KQotICAg
ICAgICAsIGFjdGl2ZVRocmVzaG9sZChhY3RpdmVUaHJlc2hvbGQpCi0gICAgICAgICwgbWVtb3J5
VXNhZ2VBZGp1c3RlZFRocmVzaG9sZChtZW1vcnlVc2FnZUFkanVzdGVkVGhyZXNob2xkKQotICAg
ICAgICAsIGp1bXBUYXJnZXQoanVtcFRhcmdldCkKLSAgICB7IH0KLQotICAgIE9TUkV4aXRCYXNl
JiBleGl0OwotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2s7Ci0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAg
U3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zlcnk7Ci0gICAgcHRyZGlmZl90IHN0YWNrUG9pbnRl
ck9mZnNldDsKLSAgICB1aW50MzJfdCBhY3RpdmVUaHJlc2hvbGQ7Ci0gICAgZG91YmxlIG1lbW9y
eVVzYWdlQWRqdXN0ZWRUaHJlc2hvbGQ7Ci0gICAgdm9pZCoganVtcFRhcmdldDsKLQotICAgIFBy
b2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgeyBudWxscHRyIH07Ci19OwotCiAvLyA9PT0g
T1NSRXhpdCA9PT0KIC8vCiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQg
dGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKQEAgLTEzMSwyMCArOTgsMzIgQEAgc3RydWN0IE9TUkV4
aXRTdGF0ZSA6IFJlZkNvdW50ZWQ8T1NSRXhpdAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NS
RXhpdEJhc2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5k
ZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOworICAgIHN0YXRpYyB2b2lkIEpJVF9P
UEVSQVRJT04gY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogCi0gICAg
UmVmUHRyPE9TUkV4aXRTdGF0ZT4gZXhpdFN0YXRlOworICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxl
Q29kZU9mZnNldCB7IDAgfTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2Rl
OwogICAgIAogICAgIEpTVmFsdWVTb3VyY2UgbV9qc1ZhbHVlU291cmNlOwogICAgIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CiAgICAgCiAgICAgdW5zaWduZWQg
bV9yZWNvdmVyeUluZGV4OwogCisgICAgdm9pZCBzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBnZXRQ
YXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OworICAgIHZvaWQgY29ycmVj
dEp1bXAoTGlua0J1ZmZlciYpOworCiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKICAgICB2
b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRD
b2RlQmxvY2spCiAgICAgewogICAgICAgICBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9tREZHKTsKICAgICB9CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgY29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiwgVk0m
LCBjb25zdCBPU1JFeGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mLCBTcGVjdWxh
dGlvblJlY292ZXJ5Kik7CisgICAgc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0Nh
bGxIZWxwZXJzJiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mKTsKKyAgICBzdGF0aWMg
dm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUo
RXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB9OwogCiBzdHJ1Y3QgU3Bl
Y3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDIy
MjAwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXgg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHZvaWQgaGFu
ZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQp
CiB7CiAgICAgaWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9raW5kKSkgewpAQCAtMTQ0
LDcgKzE0Myw2IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAg
ICBkb25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLS8vIEZJWE1FOiByZW1vdmUgdGhpcyB3
aGVuIHdlIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1
Lgogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBP
U1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhv
bGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKQEAgLTI1NCw3ICsy
NTIsNiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgfQog
fQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmll
cihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaCkKIHsKICAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5i
YXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG93bmVyKTsKQEAgLTI3NSw3ICsyNzIsNiBAQCBzdGF0
aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKCZqaXQpOwogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3
ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHZv
aWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9TUkV4aXRCYXNlJiBleGl0KQogewogICAgIGppdC5tZW1vcnlGZW5jZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDYgQEAg
dm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYsIGNvbgogdm9pZCByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNl
Jik7CiAKLS8vIEZJWE1FOiBUaGlzIHdvbid0IGJlIG5lZWRlZCBvbmNlIHdlIGZpeCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1LgogdGVtcGxhdGUgPHR5cGVu
YW1lIEpJVENvZGVUeXBlPgogdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5PU1JFeGl0Q29tcGls
ZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSogdm0sIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw2ICsxNDg3LDYyIEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG8KICAgICAgICAgZXhlYywgc3RydWN0
dXJlLCBhcmd1bWVudFN0YXJ0LCBsZW5ndGgsIGNhbGxlZSk7CiB9CiAKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0
ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNh
bGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRhcmdldCgmdm0sIGV4ZWMpOworICAgIAorICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jazsKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwor
ICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7CisgICAgdW5zaWduZWQgY2Fw
YWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKKyAgICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERp
cmVjdEFyZ3VtZW50czo6Y3JlYXRlKAorICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2FwYWNpdHkpOworICAg
IAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgCisg
ICAgUmVnaXN0ZXIqIGFyZ3VtZW50cyA9CisgICAgICAgIGV4ZWMtPnJlZ2lzdGVycygpICsgKGlu
bGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKSArCisgICAg
ICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgYXJn
dW1lbnRzW2ldLmpzVmFsdWUoKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4
aXQoRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNG
dW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0KCZ2bSwgZXhlYyk7
CisgICAgCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAg
IENvZGVCbG9jayogY29kZUJsb2NrOworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
IGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNh
bGxGcmFtZSk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKKyAgICBD
bG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCisg
ICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5jbG9uZWRBcmd1bWVudHNTdHJ1
Y3R1cmUoKSwgY2FsbGVlLCBsZW5ndGgpOworICAgIAorICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMg
PQorICAgICAgICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkgKworICAgICAgICBDYWxsRnJhbWU6OmFyZ3VtZW50
T2Zmc2V0KDApOworICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBhcmd1bWVudHNbaV0uanNWYWx1ZSgpKTsK
KworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIGFyZ3VtZW50U3Rh
cnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAs
OSBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyCiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFM
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5bWJvbFRhYmxlKiwgRW5jb2RlZEpT
VmFsdWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtaW5D
YXBhY2l0eSk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJn
dW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9u
KiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIq
IGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIEpTTGV4
aWNhbEVudmlyb25tZW50Kik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
Q2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBK
U0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
UmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlc3QoRXhlY1N0YXRl
KiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwLCB1bnNpZ25lZCBhcnJheVNpemUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDEyICs0MCw2NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewog
ICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICBqaXQucHJvYmUoT1NSRXhpdDo6ZXhlY3V0ZU9T
UkV4aXQsIHZtKTsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSB3ZSB1c2Ug
dGhlIHNjcmF0Y2ggYnVmZmVyIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBhbHNvIHVzZXMgdGhlIHNj
cmF0Y2ggYnVmZmVyLgorICAgIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4aXRDb21waWxlclRo
dW5rPERGRzo6SklUQ29kZT4oaml0LCB2bSwgSklUQ29kZTo6REZHSklUKTsKKyAgICAKKyAgICBz
aXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRj
aFNpemUpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpLCBidWZmZXIgKyBpKTsKKyNlbHNlCisgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnRv
UmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QwKSk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGwgR0MgbWFyayBwaGFz
ZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgor
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIt
PmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICAvLyBTZXQgdXAgb25lIGFy
Z3VtZW50LgorI2lmIENQVShYODYpCisgICAgaml0LnBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIDApOworI2Vsc2UKKyAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKKworICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0
aCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDApLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZlciArIGksIEdQUkluZm86
OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgaml0LmxvYWQzMihidWZmZXIgKyBpLCBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBqaXQuanVt
cChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1bXBEZXN0aW5h
dGlvbikpOworICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyBPU1Ig
ZXhpdCB0aHVuayIpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwg
T1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOworICAgIAorICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9uIDIyMjAwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzUsNyArMzUsNyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAg
RXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YQogICAgIHJldHVybiBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpOwogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIFZlY3RvcjxCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKSk7CkBAIC04MjEsNiArODIwLDYxIEBAIGJvb2wgQXNzZW1ibHlIZWxwZXJz
OjpzdG9yZVdhc21Db250ZXh0TmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAor
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbChWTSYgdm0sIFZfRGVidWdPcGVyYXRpb25f
RVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3sKKyAgICBzaXplX3Qgc2NyYXRjaFNpemUg
PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsg
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgRW5jb2Rl
ZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbHNlCisg
ICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZW5k
aWYKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgfQorCisgICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNo
IGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpIHx8IENQVShNSVBT
KQorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisjZWxpZiBDUFUoWDg2KQorICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IDApOworICAgIHBva2UoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIDEpOworICAgIHBva2UoVHJ1
c3RlZEltbVB0cihidWZmZXIpLCAyKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QwOworI2Vsc2UKKyNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4i
CisjZW5kaWYKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZnVuY3Rpb24pKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoKTsKKworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpyZWdU
MCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBsb2Fk
RG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICB9Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyAr
K2kpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsb2FkNjQoYnVmZmVyICsgaSwgR1BS
SW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAgICBsb2FkMzIoYnVmZmVyICsgaSwg
R1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZW5kaWYKKyAgICB9Cit9CisKIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCiB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyMjAwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5Miw2ICs5OTIsOSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNTsKICAgICB9CiAKKyAgICAv
LyBBZGQgYSBkZWJ1ZyBjYWxsLiBUaGlzIGNhbGwgaGFzIG5vIGVmZmVjdCBvbiBKSVQgY29kZSBl
eGVjdXRpb24gc3RhdGUuCisgICAgdm9pZCBkZWJ1Z0NhbGwoVk0mLCBWX0RlYnVnT3BlcmF0aW9u
X0VQUCBmdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOworCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBK
SVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVja3MgLSBha2luIHRvIEFTU0VSVHMu
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZvaWQgaml0QXNzZXJ0SXNJbnQzMihHUFJSZWcp
OwpAQCAtMTQ2Miw3ICsxNDY1LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZW1pdER1bWJW
aXJ0dWFsQ2FsbChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAotICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyB3aGVuIHdlIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1MTQ1LgogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVk
Q29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CkBAIC0xNjU0LDcgKzE2NTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAKLSAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NTE0NS4KICAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+PiBtX2RlY29kZWRDb2RlTWFwczsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMyOSw3ICsyMzI5LDYgQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihy
ZXN1bHQpOwogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0
NDgsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0
b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFM
OwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Ci0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiAK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4
aXQuaAkocmV2aXNpb24gMjIyMDA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIHVpbnQ2NF90KiBjb3VudGVyQWRkcmVzcygpIHsgcmV0dXJuICZtX2NvdW50ZXI7
IH0KICAgICB1aW50NjRfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlcjsgfQotICAg
IHZvaWQgaW5jQ291bnQoKSB7IG1fY291bnRlcisrOyB9Ci0KKyAgICAKICAgICBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMjIwMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQ0LDkgKzM0NCwxMiBAQCBwdWJsaWM6CiAgICAgdWlu
dDMyX3QgdGFnKCkgY29uc3Q7CiAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAKLSAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIExMSW50IEMgTG9vcCBpbnRlcnByZXRl
ciBhbmQgT1NSRXhpdCBjb2RlIHdobyBuZWVkcwotICAgIC8vIHN5bnRoZXNpemUgSlNWYWx1ZSBm
cm9tIGl0cyAicmVnaXN0ZXIicyBob2xkaW5nIHRhZyBhbmQgcGF5bG9hZCB2YWx1ZXMuCisjaWYg
IUVOQUJMRShKSVQpCisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSBMTElu
dCBDIExvb3AgaW50ZXJwcmV0ZXIgd2hvIG5lZWRzCisgICAgLy8gc3ludGhlc2l6ZSBKU1ZhbHVl
IGZyb20gaXRzICJyZWdpc3RlciJzIGhvbGRpbmcgdGFnIGFuZCBwYXlsb2FkCisgICAgLy8gdmFs
dWVzLgogICAgIGV4cGxpY2l0IEpTVmFsdWUoaW50MzJfdCB0YWcsIGludDMyX3QgcGF5bG9hZCk7
CisjZW5kaWYKIAogI2VsaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvKgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lv
biAyMjIwMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgaW5saW5lIEpTVmFsdWU6
OkpTVmFsdWUoaW50IGkpCiAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7CiB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorI2lmICFFTkFCTEUoSklUKQogaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
aW50MzJfdCB0YWcsIGludDMyX3QgcGF5bG9hZCkKIHsKICAgICB1LmFzQml0cy50YWcgPSB0YWc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyMjAwNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
MSw2ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7
CiAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJvdzsKICAgICB1aW50
MzJfdCBvc3JFeGl0SW5kZXg7CisgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0aW5hdGlvbjsKICAg
ICBib29sIGlzRXhlY3V0aW5nSW5SZWdFeHBKSVQgeyBmYWxzZSB9OwogCiAgICAgLy8gVGhlIHRo
cmVhZGluZyBwcm90b2NvbCBoZXJlIGlzIGFzIGZvbGxvd3M6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320725</attachid>
            <date>2017-09-13 21:14:33 -0700</date>
            <delta_ts>2017-09-13 21:14:33 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-176888.patch</filename>
            <type>text/plain</type>
            <size>122542</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjIwMDgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE3LTA5LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBSb2xsaW5nIG91dCByMjIxODMyOiBSZWdyZXNzZXMgU3BlZWRvbWV0ZXIg
YnkgfjQlIGFuZCBEcm9tYWVvIENTUyBZVUkgYnkgfjIwJS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njg4OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzQzODE4MzI+CisKKyAgICAgICAgTm90IHJldmlld2VkLgorCisgICAgICAgICogc3RyZXNz
L29wX21vZC1Db25zdFZhci5qczoKKyAgICAgICAgKiBzdHJlc3Mvb3BfbW9kLVZhckNvbnN0Lmpz
OgorICAgICAgICAqIHN0cmVzcy9vcF9tb2QtVmFyVmFyLmpzOgorCiAyMDE3LTA5LTEzICBSeWFu
IEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgMyBvcF9tb2Qg
dGVzdHMgb24gRGVidWcgSlNDIGJvdHMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9vcF9tb2QtQ29u
c3RWYXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb3BfbW9kLUNvbnN0VmFyLmpz
CShyZXZpc2lvbiAyMjIwMDgpCisrKyBKU1Rlc3RzL3N0cmVzcy9vcF9tb2QtQ29uc3RWYXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYgJGJ1aWxkVHlwZSA9PSAicmVs
ZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRpcGxpZXI9MS41IikgZWxzZSBz
a2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVsdGlwbGllcj0xLjUiKQogCiAv
LyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdpbGwgdGVybWluYXRlIHNpbGVu
dGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4gU2VlIGJpbmFyeS1vcC10ZXN0
LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9vcF9tb2QtVmFyQ29uc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb3BfbW9k
LVZhckNvbnN0LmpzCShyZXZpc2lvbiAyMjIwMDgpCisrKyBKU1Rlc3RzL3N0cmVzcy9vcF9tb2Qt
VmFyQ29uc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYgJGJ1aWxk
VHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRpcGxpZXI9
MS41IikgZWxzZSBza2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVsdGlwbGll
cj0xLjUiKQogCiAvLyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdpbGwgdGVy
bWluYXRlIHNpbGVudGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4gU2VlIGJp
bmFyeS1vcC10ZXN0LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9vcF9tb2QtVmFyVmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL29wX21vZC1WYXJWYXIuanMJKHJldmlzaW9uIDIyMjAwOCkKKysrIEpTVGVzdHMvc3RyZXNz
L29wX21vZC1WYXJWYXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vL0AgaWYg
JGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5GVExOb0NKSVQoIi0tdGltZW91dE11bHRp
cGxpZXI9MS41IikgZWxzZSBza2lwIGVuZAorLy9AIHJ1bkZUTE5vQ0pJVCgiLS10aW1lb3V0TXVs
dGlwbGllcj0xLjUiKQogCiAvLyBJZiBhbGwgZ29lcyB3ZWxsLCB0aGlzIHRlc3QgbW9kdWxlIHdp
bGwgdGVybWluYXRlIHNpbGVudGx5LiBJZiBub3QsIGl0IHdpbGwgcHJpbnQKIC8vIGVycm9ycy4g
U2VlIGJpbmFyeS1vcC10ZXN0LmpzIGZvciBkZWJ1Z2dpbmcgb3B0aW9ucyBpZiBuZWVkZWQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDkgQEAK
KzIwMTctMDktMTMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJv
bGxpbmcgb3V0IHIyMjE4MzI6IFJlZ3Jlc3NlcyBTcGVlZG9tZXRlciBieSB+NCUgYW5kIERyb21h
ZW8gQ1NTIFlVSSBieSB+MjAlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc2ODg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDM4MTgzMj4KKwor
ICAgICAgICBOb3QgcmV2aWV3ZWQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5j
cHA6CisgICAgICAgIChKU0M6OnN0ZEZ1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwOgorICAgICAgICAoSlNDOjpQcmludGVyOjpw
cmludENhbGxiYWNrKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUHJvYmVDb250ZXh0Lmg6CisgICAg
ICAgIChKU0M6OlByb2JlOjogY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6
Q29udGV4dCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpncHIpOgorICAgICAgICAo
SlNDOjpQcm9iZTo6Q29udGV4dDo6c3ByKToKKyAgICAgICAgKEpTQzo6UHJvYmU6OkNvbnRleHQ6
OmZwcik6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpncHJOYW1lKToKKyAgICAgICAg
KEpTQzo6UHJvYmU6OkNvbnRleHQ6OnNwck5hbWUpOgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29u
dGV4dDo6ZnByTmFtZSk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpwYyk6CisgICAg
ICAgIChKU0M6OlByb2JlOjpDb250ZXh0OjpmcCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDb250
ZXh0OjpzcCk6CisgICAgICAgIChKU0M6OlByb2JlOjpDUFVTdGF0ZTo6Z3ByIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvYmU6OkNQVVN0YXRlOjpzcHIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpQcm9iZTo6Q29udGV4dDo6YXJnKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6UHJvYmU6OkNvbnRleHQ6OmdwciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlByb2JlOjpDb250ZXh0OjpzcHIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9i
ZTo6Q29udGV4dDo6ZnByIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvUHJv
YmVGcmFtZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGFzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIGFzc2VtYmxlci9Q
cm9iZVN0YWNrLmg6CisgICAgICAgIChKU0M6OlByb2JlOjpQYWdlOjpnZXQpOgorICAgICAgICAo
SlNDOjpQcm9iZTo6UGFnZTo6c2V0KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlBhZ2U6OnBoeXNp
Y2FsQWRkcmVzc0Zvcik6CisgICAgICAgIChKU0M6OlByb2JlOjpTdGFjazo6bG93V2F0ZXJtYXJr
KToKKyAgICAgICAgKEpTQzo6UHJvYmU6OlN0YWNrOjpnZXQpOgorICAgICAgICAoSlNDOjpQcm9i
ZTo6U3RhY2s6OnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcDoKKyAg
ICAgICAgKiBieXRlY29kZS9Bcml0aFByb2ZpbGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpvYnNlcnZlQXJyYXlNb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0
aW1pemUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk9TUkV4aXRDb3VudGVyKToKKyAgICAgICAgKiBi
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50
ZXI6Omhhc0Nyb3NzZWRUaHJlc2hvbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpF
eGVjdXRpb25Db3VudGVyOjpzZXROZXdUaHJlc2hvbGRGb3JPU1JFeGl0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDoK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
SW1wbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGU6OmZpbmRQQyk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhp
dDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6
Z2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6Y29ycmVjdEp1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVt
aXRSZXN0b3JlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxl
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZh
aWx1cmUpOgorICAgICAgICAoSlNDOjpERkc6OmpzVmFsdWVGb3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OnJlc3RvcmVDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6c2F2ZUNhbGxlZVNhdmVzRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnNhdmVPckNv
cHlDYWxsZWVTYXZlc0Zvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y3JlYXRlRGly
ZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Y3Jl
YXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RB
bmRKdW1wVG9UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OnByaW50T1NSRXhp
dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0U3RhdGU6Ok9TUkV4aXRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6Om9zckV4aXRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
ICogZGZnL0RGR1RodW5rcy5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAgICogaml0
L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
T1NSRXhpdC5oOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T1NSRXhpdDo6aW5jQ291bnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTct
MDktMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
W0pTQ10gTW92ZSBjbGFzcy9zdHJ1Y3QgdXNlZCBpbiBvdGhlciBjbGFzcycgbWVtYmVyIG91dCBv
ZiBhbm9ueW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0NDQsNyArMjQ0
NCw2IEBACiAJCUZFMTBBQUVDMUY0NEQ1NDUwMDlERURDNSAvKiBQcm9iZVN0YWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTBBQUU5MUY0NEQ1
MTAwMDlERURDNSAvKiBQcm9iZVN0YWNrLmNwcCAqLzsgfTsKIAkJRkUxMEFBRUUxRjQ0RDk1NDAw
OURFREM1IC8qIFByb2JlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxMEFBRUQxRjQ0RDk0NjAwOURFREM1IC8qIFByb2JlQ29udGV4dC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMTBB
QUY0MUY0NjgzOTYwMDlERURDNSAvKiBQcm9iZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxMEFBRjMxRjQ2ODI2RDAwOURFREM1IC8q
IFByb2JlQ29udGV4dC5jcHAgKi87IH07Ci0JCUZFMTBBQUZGMUY0RTM4RTUwMDlERURDNSAvKiBQ
cm9iZUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTEwQUFGRTFGNEUzOERBMDA5REVEQzUgLyogUHJvYmVGcmFtZS5oICovOyB9OwogCQlGRTEy
MjAyNzFCRTdGNThDMDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmggKi87IH07CiAJCUZFMTIyMDI4MUJFN0Y1OTEwMDM5RTZGMiAv
KiBKSVRBZGRHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUxMjIwMjUxQkU3RjU2NDAwMzlFNkYyIC8qIEpJVEFkZEdlbmVyYXRvci5j
cHAgKi87IH07CiAJCUZFMTg3QTAxMUJGQkU1NUUwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxODc5
RkYxQkZCQzczQzAwMzhCQkNBIC8qIEpJVE11bEdlbmVyYXRvci5jcHAgKi87IH07CkBAIC01MTM5
LDcgKzUxMzgsNiBAQAogCQlGRTEwQUFFQTFGNDRENTEyMDA5REVEQzUgLyogUHJvYmVTdGFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9iZVN0YWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTBBQUVEMUY0NEQ5NDYwMDlERURDNSAvKiBQcm9iZUNv
bnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvYmVDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTBBQUYzMUY0NjgyNkQwMDlERURDNSAv
KiBQcm9iZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJvYmVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkUxMEFBRkUx
RjRFMzhEQTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvYmVGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTEy
MjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFkZEdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQWRkR2VuZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3OUZGMUJGQkM3M0MwMDM4QkJD
QSAvKiBKSVRNdWxHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUTXVsR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc3MjQsNyArNzcyMiw2IEBACiAJCQkJRkU2M0RENTMxRUE5QjYwRTAwMTAzQTY5IC8qIFByaW50
ZXIuaCAqLywKIAkJCQlGRTEwQUFGMzFGNDY4MjZEMDA5REVEQzUgLyogUHJvYmVDb250ZXh0LmNw
cCAqLywKIAkJCQlGRTEwQUFFRDFGNDREOTQ2MDA5REVEQzUgLyogUHJvYmVDb250ZXh0LmggKi8s
Ci0JCQkJRkUxMEFBRkUxRjRFMzhEQTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCAqLywKIAkJCQlG
RTEwQUFFOTFGNDRENTEwMDA5REVEQzUgLyogUHJvYmVTdGFjay5jcHAgKi8sCiAJCQkJRkUxMEFB
RUExRjQ0RDUxMjAwOURFREM1IC8qIFByb2JlU3RhY2suaCAqLywKIAkJCQlGRTUzM0NBMDFGMjE3
QzMxMDAxNkExRkUgLyogdGVzdG1hc20uY3BwICovLApAQCAtOTY5Miw3ICs5Njg5LDYgQEAKIAkJ
CQlBRDJGQ0MxRDFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdDODFEREQwQUFFMDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzJEMURCODM4
RkQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkUxMEFBRkYxRjRFMzhFNTAwOURFREM1IC8qIFByb2JlRnJhbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQkY5MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxRTFEQjU5Q0IyMDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkZCMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjIyMDA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVy
Ojp0d29Ub1RoZTMyIAogI2lmIEVOQUJMRShNQVNNX1BST0JFKQogc3RhdGljIHZvaWQgc3RkRnVu
Y3Rpb25DYWxsYmFjayhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBhdXRvIGZ1bmMg
PSBjb250ZXh0LmFyZzxjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUHJvYmU6OkNvbnRleHQmKT4q
PigpOworICAgIGF1dG8gZnVuYyA9IHN0YXRpY19jYXN0PGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9p
ZChQcm9iZTo6Q29udGV4dCYpPio+KGNvbnRleHQuYXJnKTsKICAgICAoKmZ1bmMpKGNvbnRleHQp
OwogfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclByaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcAkocmV2aXNpb24gMjIyMDA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclByaW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBwcmludE1lbW9yeShQcmlu
dFN0cmVhbSYgb3V0LCBDb250ZQogdm9pZCBwcmludENhbGxiYWNrKFByb2JlOjpDb250ZXh0JiBw
cm9iZUNvbnRleHQpCiB7CiAgICAgYXV0byYgb3V0ID0gV1RGOjpkYXRhRmlsZSgpOwotICAgIFBy
aW50UmVjb3JkTGlzdCYgbGlzdCA9ICpwcm9iZUNvbnRleHQuYXJnPFByaW50UmVjb3JkTGlzdCo+
KCk7CisgICAgUHJpbnRSZWNvcmRMaXN0JiBsaXN0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UHJpbnRS
ZWNvcmRMaXN0Kj4ocHJvYmVDb250ZXh0LmFyZyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGF1dG8mIHJlY29yZCA9IGxpc3RbaV07CiAg
ICAgICAgIENvbnRleHQgY29udGV4dChwcm9iZUNvbnRleHQsIHJlY29yZC5kYXRhKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRleHQuaAkocmV2
aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsMTQgQEAgc3RydWN0IENQVVN0YXRl
IHsKICAgICBpbmxpbmUgdWludHB0cl90JiBzcHIoU1BSZWdpc3RlcklEKTsKICAgICBpbmxpbmUg
ZG91YmxlJiBmcHIoRlBSZWdpc3RlcklEKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Z3ByKFJlZ2lzdGVySUQpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgc3ByKFNQ
UmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+
CisgICAgVCBncHIoUmVnaXN0ZXJJRCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZT46OnR5cGUq
ID0gbnVsbHB0cj4KKyAgICBUIGdwcihSZWdpc3RlcklEKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2
YWx1ZT46OnR5cGUqID0gbnVsbHB0cj4KKyAgICBUIHNwcihTUFJlZ2lzdGVySUQpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
cG9pbnRlcjxUPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+CisgICAgVCBzcHIoU1BSZWdpc3Rl
cklEKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVySUQp
IGNvbnN0OwogCiAgICAgdm9pZComIHBjKCk7CkBAIC03OSwyNCArODUsMzIgQEAgaW5saW5lIGRv
dWJsZSYgQ1BVU3RhdGU6OmZwcihGUFJlZ2lzdGVySQogICAgIHJldHVybiBmcHJzW2lkXTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlPjo6dHlwZSo+CiBUIENQVVN0
YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkgY29uc3QKIHsKICAgICBDUFVTdGF0ZSogY3B1ID0gY29u
c3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMpOwotICAgIGF1dG8mIGZyb20gPSBjcHUtPmdwcihpZCk7
Ci0gICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUgdG8geyB9OwotICAgIHN0
ZDo6bWVtY3B5KCZ0bywgJmZyb20sIHNpemVvZih0bykpOyAvLyBVc2Ugc3RkOjptZW1jcHkgdG8g
YXZvaWQgc3RyaWN0IGFsaWFzaW5nIGlzc3Vlcy4KLSAgICByZXR1cm4gdG87CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Bv
aW50ZXI8VD46OnZhbHVlPjo6dHlwZSo+CitUIENQVVN0YXRlOjpncHIoUmVnaXN0ZXJJRCBpZCkg
Y29uc3QKK3sKKyAgICBDUFVTdGF0ZSogY3B1ID0gY29uc3RfY2FzdDxDUFVTdGF0ZSo+KHRoaXMp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+Z3ByKGlkKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdy
YWw8VD46OnZhbHVlPjo6dHlwZSo+CitUIENQVVN0YXRlOjpzcHIoU1BSZWdpc3RlcklEIGlkKSBj
b25zdAoreworICAgIENQVVN0YXRlKiBjcHUgPSBjb25zdF9jYXN0PENQVVN0YXRlKj4odGhpcyk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGNwdS0+c3ByKGlkKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfcG9pbnRlcjxUPjo6
dmFsdWU+Ojp0eXBlKj4KIFQgQ1BVU3RhdGU6OnNwcihTUFJlZ2lzdGVySUQgaWQpIGNvbnN0CiB7
CiAgICAgQ1BVU3RhdGUqIGNwdSA9IGNvbnN0X2Nhc3Q8Q1BVU3RhdGUqPih0aGlzKTsKLSAgICBh
dXRvJiBmcm9tID0gY3B1LT5zcHIoaWQpOwotICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0
PFQ+Ojp0eXBlIHRvIHsgfTsKLSAgICBzdGQ6Om1lbWNweSgmdG8sICZmcm9tLCBzaXplb2YodG8p
KTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBhbGlhc2luZyBpc3N1ZXMuCi0g
ICAgcmV0dXJuIHRvOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KGNwdS0+c3ByKGlk
KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xOTEsMzEgKzIwNSwyNSBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgRlBSZWdpc3RlcklEID0gTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJ
RDsKIAogICAgIENvbnRleHQoU3RhdGUqIHN0YXRlKQotICAgICAgICA6IGNwdShzdGF0ZS0+Y3B1
KQotICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAg
ICAgICAgLCBhcmcoc3RhdGUtPmFyZykKKyAgICAgICAgLCBjcHUoc3RhdGUtPmNwdSkKICAgICB7
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBhcmcoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFQ+KG1fc3RhdGUtPmFyZyk7IH0KLQotICAgIHVpbnRwdHJfdCYgZ3ByKFJl
Z2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5ncHIoaWQpOyB9Ci0gICAgdWludHB0cl90JiBzcHIo
U1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuc3ByKGlkKTsgfQotICAgIGRvdWJsZSYgZnBy
KEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gY3B1LmZwcihpZCk7IH0KLSAgICBjb25zdCBjaGFy
KiBncHJOYW1lKFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIGNwdS5ncHJOYW1lKGlkKTsgfQotICAg
IGNvbnN0IGNoYXIqIHNwck5hbWUoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBjcHUuc3ByTmFt
ZShpZCk7IH0KLSAgICBjb25zdCBjaGFyKiBmcHJOYW1lKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1
cm4gY3B1LmZwck5hbWUoaWQpOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGdwcihS
ZWdpc3RlcklEIGlkKSBjb25zdCB7IHJldHVybiBjcHUuZ3ByPFQ+KGlkKTsgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgc3ByKFNQUmVnaXN0ZXJJRCBpZCkgY29uc3QgeyByZXR1cm4gY3B1
LnNwcjxUPihpZCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGZwcihGUFJlZ2lzdGVy
SUQgaWQpIGNvbnN0IHsgcmV0dXJuIGNwdS5mcHI8VD4oaWQpOyB9Ci0KLSAgICB2b2lkKiYgcGMo
KSB7IHJldHVybiBjcHUucGMoKTsgfQotICAgIHZvaWQqJiBmcCgpIHsgcmV0dXJuIGNwdS5mcCgp
OyB9Ci0gICAgdm9pZComIHNwKCkgeyByZXR1cm4gY3B1LnNwKCk7IH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgcGMoKSB7IHJldHVybiBjcHUucGM8VD4oKTsgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgZnAoKSB7IHJldHVybiBjcHUuZnA8VD4oKTsgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgc3AoKSB7IHJldHVybiBjcHUuc3A8VD4oKTsgfQorICAgIHVpbnRwdHJf
dCYgZ3ByKFJlZ2lzdGVySUQgaWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5ncHIoaWQpOyB9Cisg
ICAgdWludHB0cl90JiBzcHIoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUu
c3ByKGlkKTsgfQorICAgIGRvdWJsZSYgZnByKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4gbV9z
dGF0ZS0+Y3B1LmZwcihpZCk7IH0KKyAgICBjb25zdCBjaGFyKiBncHJOYW1lKFJlZ2lzdGVySUQg
aWQpIHsgcmV0dXJuIG1fc3RhdGUtPmNwdS5ncHJOYW1lKGlkKTsgfQorICAgIGNvbnN0IGNoYXIq
IHNwck5hbWUoU1BSZWdpc3RlcklEIGlkKSB7IHJldHVybiBtX3N0YXRlLT5jcHUuc3ByTmFtZShp
ZCk7IH0KKyAgICBjb25zdCBjaGFyKiBmcHJOYW1lKEZQUmVnaXN0ZXJJRCBpZCkgeyByZXR1cm4g
bV9zdGF0ZS0+Y3B1LmZwck5hbWUoaWQpOyB9CisKKyAgICB2b2lkKiYgcGMoKSB7IHJldHVybiBt
X3N0YXRlLT5jcHUucGMoKTsgfQorICAgIHZvaWQqJiBmcCgpIHsgcmV0dXJuIG1fc3RhdGUtPmNw
dS5mcCgpOyB9CisgICAgdm9pZComIHNwKCkgeyByZXR1cm4gbV9zdGF0ZS0+Y3B1LnNwKCk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgcGMoKSB7IHJldHVybiBtX3N0YXRlLT5jcHUu
cGM8VD4oKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgZnAoKSB7IHJldHVybiBtX3N0
YXRlLT5jcHUuZnA8VD4oKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgc3AoKSB7IHJl
dHVybiBtX3N0YXRlLT5jcHUuc3A8VD4oKTsgfQogCiAgICAgU3RhY2smIHN0YWNrKCkKICAgICB7
CkBAIC0yMjYsMTAgKzIzNCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNXcml0ZXNUb0ZsdXNo
KCkgeyByZXR1cm4gbV9zdGFjay5oYXNXcml0ZXNUb0ZsdXNoKCk7IH0KICAgICBTdGFjayogcmVs
ZWFzZVN0YWNrKCkgeyByZXR1cm4gbmV3IFN0YWNrKFdURk1vdmUobV9zdGFjaykpOyB9CiAKK3By
aXZhdGU6CisgICAgU3RhdGUqIG1fc3RhdGU7CitwdWJsaWM6CisgICAgdm9pZCogYXJnOwogICAg
IENQVVN0YXRlJiBjcHU7CiAKIHByaXZhdGU6Ci0gICAgU3RhdGUqIG1fc3RhdGU7CiAgICAgU3Rh
Y2sgbV9zdGFjazsKIAogICAgIGZyaWVuZCBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBwcm9iZVN0
YXRlRm9yQ29udGV4dChDb250ZXh0Jik7IC8vIE5vdCBmb3IgZ2VuZXJhbCB1c2UuIFRoaXMgc2hv
dWxkIG9ubHkgYmUgZm9yIHdyaXRpbmcgdGVzdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1Byb2JlRnJhbWUuaAkocmV2aXNpb24gMjIyMDA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLQotI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgotI2luY2x1ZGUgIlByb2JlU3RhY2suaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci1u
YW1lc3BhY2UgUHJvYmUgewotCi1jbGFzcyBGcmFtZSB7Ci1wdWJsaWM6Ci0gICAgRnJhbWUodm9p
ZCogZnJhbWVCYXNlLCBTdGFjayYgc3RhY2spCi0gICAgICAgIDogbV9mcmFtZUJhc2UgeyByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihmcmFtZUJhc2UpIH0KLSAgICAgICAgLCBtX3N0YWNrIHsg
c3RhY2sgfQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0g
ICAgVCBhcmd1bWVudChpbnQgYXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+
KENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoYXJndW1lbnQpICogc2l6ZW9mKFJlZ2lzdGVyKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQgPSBKU1ZhbHVlPgotICAgIFQgb3BlcmFu
ZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4oc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOwot
ICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIG9wZXJhbmQo
aW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0
PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IGFyZ3VtZW50LCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAq
IHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIFQgdmFsdWUpCi0gICAgewotICAg
ICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQs
IFQgdmFsdWUpCi0gICAgewotICAgICAgICBzZXQ8VD4oc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihvcGVyYW5kKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVl
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUID0gSlNWYWx1ZT4KLSAgICBUIGdl
dChwdHJkaWZmX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2suZ2V0PFQ+
KG1fZnJhbWVCYXNlICsgb2Zmc2V0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIHNldChwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAg
bV9zdGFjay5zZXQ8VD4obV9mcmFtZUJhc2UgKyBvZmZzZXQsIHZhbHVlKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgdWludDhfdCogbV9mcmFtZUJhc2U7Ci0gICAgU3RhY2smIG1fc3RhY2s7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBQcm9iZQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoTUFTTV9QUk9CRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvUHJvYmVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Qcm9iZVN0YWNrLmNwcAkocmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNiBAQCBuYW1lc3BhY2UgUHJvYmUgewogCiBQYWdlOjpQYWdlKHZvaWQqIGJhc2VBZGRy
ZXNzKQogICAgIDogbV9iYXNlTG9naWNhbEFkZHJlc3MoYmFzZUFkZHJlc3MpCi0gICAgLCBtX3Bo
eXNpY2FsQWRkcmVzc09mZnNldChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbV9idWZmZXIp
IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYmFzZUFkZHJlc3MpKQogewogICAgIG1lbWNw
eSgmbV9idWZmZXIsIGJhc2VBZGRyZXNzLCBzX3BhZ2VTaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVTdGFjay5oCShyZXZpc2lvbiAyMjIwMDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlU3RhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMjggKzU2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIFQgZ2V0KHZvaWQqIGxvZ2ljYWxBZGRyZXNzKQogICAgIHsKLSAgICAgICAgdm9p
ZCogZnJvbSA9IHBoeXNpY2FsQWRkcmVzc0Zvcihsb2dpY2FsQWRkcmVzcyk7Ci0gICAgICAgIHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlIHRvIHsgfTsKLSAgICAgICAgc3RkOjpt
ZW1jcHkoJnRvLCBmcm9tLCBzaXplb2YodG8pKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lk
IHN0cmljdCBhbGlhc2luZyBpc3N1ZXMuCi0gICAgICAgIHJldHVybiB0bzsKLSAgICB9Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldCh2b2lkKiBsb2dpY2FsQmFzZUFkZHJlc3Ms
IHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykgKyBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9naWNhbEFkZHJlc3MpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBzZXQodm9pZCogbG9naWNhbEFk
ZHJlc3MsIFQgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RpcnR5Qml0cyB8PSBkaXJ0eUJpdEZv
cihsb2dpY2FsQWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIHRvID0gcGh5c2ljYWxBZGRyZXNzRm9y
KGxvZ2ljYWxBZGRyZXNzKTsKLSAgICAgICAgc3RkOjptZW1jcHkodG8sICZ2YWx1ZSwgc2l6ZW9m
KFQpKTsgLy8gVXNlIHN0ZDo6bWVtY3B5IHRvIGF2b2lkIHN0cmljdCBhbGlhc2luZyBpc3N1ZXMu
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXQodm9pZCogbG9n
aWNhbEJhc2VBZGRyZXNzLCBwdHJkaWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgc2V0PFQ+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykg
KyBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgKnBoeXNpY2FsQWRkcmVzc0ZvcjxUKj4obG9naWNh
bEFkZHJlc3MpID0gdmFsdWU7CiAgICAgfQogCiAgICAgYm9vbCBoYXNXcml0ZXNUb0ZsdXNoKCkg
Y29uc3QgeyByZXR1cm4gISFtX2RpcnR5Qml0czsgfQpAQCAtOTQsMTYgKzgwLDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChvZmZzZXQg
Pj4gc19jaHVua1NpemVTaGlmdCk7CiAgICAgfQogCi0gICAgdm9pZCogcGh5c2ljYWxBZGRyZXNz
Rm9yKHZvaWQqIGxvZ2ljYWxBZGRyZXNzKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZT46
OnR5cGU+CisgICAgVCBwaHlzaWNhbEFkZHJlc3NGb3Iodm9pZCogbG9naWNhbEFkZHJlc3MpCiAg
ICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9naWNhbEFk
ZHJlc3MpICsgbV9waHlzaWNhbEFkZHJlc3NPZmZzZXQ7CisgICAgICAgIHVpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9naWNhbEFkZHJlc3MpICYgc19wYWdl
TWFzazsKKyAgICAgICAgdm9pZCogcGh5c2ljYWxBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJm1fYnVmZmVyKSArIG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VD4ocGh5c2ljYWxBZGRyZXNzKTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoV3JpdGVz
KCk7CiAKICAgICB2b2lkKiBtX2Jhc2VMb2dpY2FsQWRkcmVzcyB7IG51bGxwdHIgfTsKICAgICB1
aW50cHRyX3QgbV9kaXJ0eUJpdHMgeyAwIH07Ci0gICAgcHRyZGlmZl90IG1fcGh5c2ljYWxBZGRy
ZXNzT2Zmc2V0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19wYWdlU2l6ZSA9IDEw
MjQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc19wYWdlTWFzayA9IHNfcGFnZVNp
emUgLSAxOwpAQCAtMTMyLDM5ICsxMjAsNDAgQEAgcHVibGljOgogICAgIHsgfQogICAgIFN0YWNr
KFN0YWNrJiYgb3RoZXIpOwogCi0gICAgdm9pZCogbG93V2F0ZXJtYXJrKCkKLSAgICB7Ci0gICAg
ICAgIC8vIFdlIHVzZSB0aGUgY2h1bmtBZGRyZXNzIGZvciB0aGUgbG93IHdhdGVybWFyayBiZWNh
dXNlIHdlJ2xsIGJlIGRvaW5nIHdyaXRlIGJhY2tzCi0gICAgICAgIC8vIHRvIHRoZSBzdGFjayBp
biBpbmNyZW1lbnRzIG9mIGNodW5rcy4gSGVuY2UsIHdlJ2xsIHRyZWF0IHRoZSBsb3dlc3QgYWRk
cmVzcyBvZgotICAgICAgICAvLyB0aGUgY2h1bmsgYXMgdGhlIGxvdyB3YXRlcm1hcmsgb2YgYW55
IGdpdmVuIHNldCBhZGRyZXNzLgotICAgICAgICByZXR1cm4gUGFnZTo6Y2h1bmtBZGRyZXNzRm9y
KG1fbG93V2F0ZXJtYXJrKTsKLSAgICB9CisgICAgdm9pZCogbG93V2F0ZXJtYXJrKCkgeyByZXR1
cm4gbV9sb3dXYXRlcm1hcms7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBn
ZXQodm9pZCogYWRkcmVzcykKKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19z
YW1lPGRvdWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZSwgVD46
OnR5cGUgZ2V0KHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBQYWdlKiBwYWdlID0gcGFn
ZUZvcihhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuIHBhZ2UtPmdldDxUPihhZGRyZXNzKTsKICAg
ICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldCh2b2lkKiBsb2dpY2FsQmFz
ZUFkZHJlc3MsIHB0cmRpZmZfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0PFQ+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvZ2ljYWxCYXNlQWRkcmVzcykgKyBvZmZzZXQp
OwotICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPGRv
dWJsZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8VD46OnR5cGU+Ojp2YWx1ZT46OnR5cGU+CiAg
ICAgdm9pZCBzZXQodm9pZCogYWRkcmVzcywgVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIFBhZ2Uq
IHBhZ2UgPSBwYWdlRm9yKGFkZHJlc3MpOwogICAgICAgICBwYWdlLT5zZXQ8VD4oYWRkcmVzcywg
dmFsdWUpOwogCi0gICAgICAgIGlmIChhZGRyZXNzIDwgbV9sb3dXYXRlcm1hcmspCi0gICAgICAg
ICAgICBtX2xvd1dhdGVybWFyayA9IGFkZHJlc3M7CisgICAgICAgIC8vIFdlIHVzZSB0aGUgY2h1
bmtBZGRyZXNzIGZvciB0aGUgbG93IHdhdGVybWFyayBiZWNhdXNlIHdlJ2xsIGJlIGRvaW5nIHdy
aXRlIGJhY2tzCisgICAgICAgIC8vIHRvIHRoZSBzdGFjayBpbiBpbmNyZW1lbnRzIG9mIGNodW5r
cy4gSGVuY2UsIHdlJ2xsIHRyZWF0IHRoZSBsb3dlc3QgYWRkcmVzcyBvZgorICAgICAgICAvLyB0
aGUgY2h1bmsgYXMgdGhlIGxvdyB3YXRlcm1hcmsgb2YgYW55IGdpdmVuIHNldCBhZGRyZXNzLgor
ICAgICAgICB2b2lkKiBjaHVua0FkZHJlc3MgPSBQYWdlOjpjaHVua0FkZHJlc3NGb3IoYWRkcmVz
cyk7CisgICAgICAgIGlmIChjaHVua0FkZHJlc3MgPCBtX2xvd1dhdGVybWFyaykKKyAgICAgICAg
ICAgIG1fbG93V2F0ZXJtYXJrID0gY2h1bmtBZGRyZXNzOwogICAgIH0KKwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXQodm9pZCogbG9naWNhbEJhc2VBZGRyZXNzLCBwdHJk
aWZmX3Qgb2Zmc2V0LCBUIHZhbHVlKQorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxkb3VibGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWUs
IFQ+Ojp0eXBlIGdldCh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUGFnZSogcGFnZSA9
IHBhZ2VGb3IoYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPihw
YWdlLT5nZXQ8dWludDY0X3Q+KGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxk
b3VibGUsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlPgor
ICAgIHZvaWQgc2V0KHZvaWQqIGFkZHJlc3MsIGRvdWJsZSB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHNldDxUPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2dpY2FsQmFzZUFkZHJlc3MpICsg
b2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldDx1aW50NjRfdD4oYWRkcmVzcywgYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSkpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBh
Z2UqIGVuc3VyZVBhZ2VGb3Iodm9pZCogYWRkcmVzcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmNwcAkocmV2aXNpb24gMjIyMDA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FyaXRoUHJvZmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsOCArMzIsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoSklU
KQotLy8gRklYTUU6IFRoaXMgaXMgYmVpbmcgc3VwcGxhbnRlZCBieSBvYnNlcnZlUmVzdWx0KCku
IFJlbW92ZSB0aGlzIG9uZQotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTE0NSBoYXMgYmVlbiBmaXhlZC4KIHZvaWQgQXJpdGhQcm9maWxlOjplbWl0T2JzZXJ2
ZVJlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJz
TW9kZSBtb2RlKQogewogICAgIGlmICghc2hvdWxkRW1pdFNldERvdWJsZSgpICYmICFzaG91bGRF
bWl0U2V0Tm9uTnVtYmVyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QXJpdGhQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FyaXRoUHJvZmlsZS5oCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjExLDggKzIxMSw2
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKSAgICAKICAgICAvLyBTZXRzIChJbnQzMk92ZXJm
bG93IHwgSW50NTJPdmVyZmxvdyB8IE5vbk5lZ1plcm9Eb3VibGUgfCBOZWdaZXJvRG91YmxlKSBp
ZiBpdCBzZWVzIGEKICAgICAvLyBkb3VibGUuIFNldHMgTm9uTnVtYmVyIGlmIGl0IHNlZXMgYSBu
b24tbnVtYmVyLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGJlaW5nIHN1cHBsYW50ZWQgYnkgb2Jz
ZXJ2ZVJlc3VsdCgpLiBSZW1vdmUgdGhpcyBvbmUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1IGhhcyBiZWVuIGZpeGVkLgogICAgIHZvaWQgZW1p
dE9ic2VydmVSZXN1bHQoQ0NhbGxIZWxwZXJzJiwgSlNWYWx1ZVJlZ3MsIFRhZ1JlZ2lzdGVyc01v
ZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKTsKICAgICAKICAgICAvLyBTZXRzIChJbnQzMk92ZXJmbG93
IHwgSW50NTJPdmVyZmxvdyB8IE5vbk5lZ1plcm9Eb3VibGUgfCBOZWdaZXJvRG91YmxlKS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJl
dmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTgsNyArMjE4LDYgQEAgcHVibGljOgogICAg
IHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IENvZGVCbG9jayopOwogICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIFN0cnVjdHVyZSogbGFzdFNlZW5TdHJ1Y3R1
cmUpOwogICAgIAotICAgIHZvaWQgb2JzZXJ2ZUFycmF5TW9kZShBcnJheU1vZGVzIG1vZGUpIHsg
bV9vYnNlcnZlZEFycmF5TW9kZXMgfD0gbW9kZTsgfQogICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWRB
cnJheU1vZGVzKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fb2Jz
ZXJ2ZWRBcnJheU1vZGVzOyB9CiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXM7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyMCw1
MyArMjMyMCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXMKICAg
ICByZXR1cm4gbV9qaXRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dCh0aGlzKTsKIH0KIAotYXV0byBDb2RlQmxvY2s6OnVwZGF0ZU9TUkV4aXRDb3VudGVyQW5kQ2hl
Y2tJZk5lZWRUb1Jlb3B0aW1pemUoREZHOjpPU1JFeGl0U3RhdGUmIGV4aXRTdGF0ZSkgLT4gT3B0
aW1pemVBY3Rpb24KLXsKLSAgICBERkc6Ok9TUkV4aXRCYXNlJiBleGl0ID0gZXhpdFN0YXRlLmV4
aXQ7Ci0gICAgaWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9raW5kKSkgewotICAgICAg
ICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbm90aWNlIHRoYXQgd2UncmUgZnJlcXVlbnRseSBl
eGl0aW5nCi0gICAgICAgIC8vIGF0IGFuIG9wX2NhdGNoIHRoYXQgd2UgZGlkbid0IGNvbXBpbGUg
YW4gZW50cnlwb2ludCBmb3IsIGFuZAotICAgICAgICAvLyB0aGVuIHRyaWdnZXIgYSByZW9wdGlt
aXphdGlvbiBvZiB0aGlzIENvZGVCbG9jazoKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTg0MgotICAgICAgICByZXR1cm4gT3B0aW1pemVBY3Rp
b246Ok5vbmU7Ci0gICAgfQotCi0gICAgZXhpdC5tX2NvdW50Kys7Ci0gICAgbV9vc3JFeGl0Q291
bnRlcisrOwotCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5i
YXNlbGluZUNvZGVCbG9jazsKLSAgICBBU1NFUlQoYmFzZWxpbmVDb2RlQmxvY2sgPT0gYmFzZWxp
bmVBbHRlcm5hdGl2ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoYmFzZWxpbmVDb2RlQmxvY2stPmpp
dEV4ZWN1dGVDb3VudGVyKCkuaGFzQ3Jvc3NlZFRocmVzaG9sZCgpKSkKLSAgICAgICAgcmV0dXJu
IE9wdGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93OwotCi0gICAgLy8gV2Ugd2FudCB0byBmaWd1
cmUgb3V0IGlmIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSB0aGF0IHdlJ3JlIGluIGEgbG9vcC4gRm9y
IHRoZSBvdXRlcm1vc3QKLSAgICAvLyBjb2RlIGJsb2NrIGluIHRoZSBpbmxpbmUgc3RhY2ssIHdl
IGhhbmRsZSB0aGlzIGFwcHJvcHJpYXRlbHkgYnkgaGF2aW5nIHRoZSBsb29wIE9TUiB0cmlnZ2Vy
Ci0gICAgLy8gY2hlY2sgdGhlIGV4aXQgY291bnQgb2YgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBD
b2RlQmxvY2sgZnJvbSB3aGljaCB3ZSBhcmUgT1NSaW5nLiBUaGUKLSAgICAvLyBwcm9ibGVtIGlz
IHRoZSBpbmxpbmVkIGZ1bmN0aW9ucywgd2hpY2ggbWlnaHQgYWxzbyBoYXZlIGxvb3BzLCBidXQg
d2hvc2UgYmFzZWxpbmUgdmVyc2lvbnMKLSAgICAvLyBkb24ndCBrbm93IHdoZXJlIHRvIGxvb2sg
Zm9yIHRoZSBleGl0IGNvdW50LiBGaWd1cmUgb3V0IGlmIHRob3NlIGxvb3BzIGFyZSBzZXZlcmUg
ZW5vdWdoCi0gICAgLy8gdGhhdCB3ZSBoYWQgdHJpZWQgdG8gT1NSIGVudGVyLiBJZiBzbywgdGhl
biB3ZSBzaG91bGQgdXNlIHRoZSBsb29wIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCi0gICAgLy8g
T3RoZXJ3aXNlLCB3ZSBzaG91bGQgdXNlIHRoZSBub3JtYWwgcmVvcHRpbWl6YXRpb24gdHJpZ2dl
ci4KLQotICAgIGJvb2wgZGlkVHJ5VG9FbnRlckluTG9vcCA9IGZhbHNlOwotICAgIGZvciAoSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+ZGlk
VHJ5VG9FbnRlckluTG9vcCgpKSB7Ci0gICAgICAgICAgICBkaWRUcnlUb0VudGVySW5Mb29wID0g
dHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdWludDMy
X3QgZXhpdENvdW50VGhyZXNob2xkID0gZGlkVHJ5VG9FbnRlckluTG9vcAotICAgICAgICA/IGV4
aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AoKQotICAgICAgICA6IGV4
aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCk7Ci0KLSAgICBpZiAobV9vc3JFeGl0
Q291bnRlciA+IGV4aXRDb3VudFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuIE9wdGltaXplQWN0
aW9uOjpSZW9wdGltaXplTm93OwotCi0gICAgLy8gVG9vIGZldyBmYWlscy4gQWRqdXN0IHRoZSBl
eGVjdXRpb24gY291bnRlciBzdWNoIHRoYXQgdGhlIHRhcmdldCBpcyB0byBvbmx5IG9wdGltaXpl
IGFmdGVyIGEgd2hpbGUuCi0gICAgYmFzZWxpbmVDb2RlQmxvY2stPm1faml0RXhlY3V0ZUNvdW50
ZXIuc2V0TmV3VGhyZXNob2xkRm9yT1NSRXhpdChleGl0U3RhdGUuYWN0aXZlVGhyZXNob2xkLCBl
eGl0U3RhdGUubWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZCk7Ci0gICAgcmV0dXJuIE9wdGlt
aXplQWN0aW9uOjpOb25lOwotfQotCiB2b2lkIENvZGVCbG9jazo6b3B0aW1pemVOZXh0SW52b2Nh
dGlvbigpCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIyMjAwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsMTAgKzc3LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBERkcg
ewotc3RydWN0IE9TUkV4aXRTdGF0ZTsKLX0gLy8gbmFtZXNwYWNlIERGRwotCiBjbGFzcyBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM7CiBjbGFzcyBDb2RlQmxvY2tTZXQ7CiBjbGFzcyBFeGVjU3Rh
dGU7CkBAIC03NjYsMTAgKzc2Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY291bnRPU1JFeGl0
KCkgeyBtX29zckV4aXRDb3VudGVyKys7IH0KIAotICAgIGVudW0gY2xhc3MgT3B0aW1pemVBY3Rp
b24geyBOb25lLCBSZW9wdGltaXplTm93IH07Ci0gICAgT3B0aW1pemVBY3Rpb24gdXBkYXRlT1NS
RXhpdENvdW50ZXJBbmRDaGVja0lmTmVlZFRvUmVvcHRpbWl6ZShERkc6Ok9TUkV4aXRTdGF0ZSYp
OworICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZPU1JFeGl0Q291bnRlcigpIHsgcmV0dXJuICZtX29z
ckV4aXRDb3VudGVyOyB9CiAKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXgg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mT1NSRXhpdENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX29zckV4aXRDb3VudGVyKTsgfQogCiAgICAgdWludDMyX3QgYWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNiBAQCBlbnVt
IENvdW50aW5nVmFyaWFudCB7CiBkb3VibGUgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3MoaW50
MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CiBpbnQzMl90IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzQW5kQ29udmVydFRvSW50KGludDMyX3QgdmFsdWUsIENvZGVCbG9jayopOwogCi0vLyBGSVhN
RTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTE0NS4KIGlubGluZSBpbnQzMl90IGZvcm1hdHRlZFRvdGFsRXhlY3V0aW9u
Q291bnQoZmxvYXQgdmFsdWUpCiB7CiAgICAgdW5pb24gewpAQCAtNTgsMTkgKzU3LDExIEBAIHB1
YmxpYzoKICAgICBFeGVjdXRpb25Db3VudGVyKCk7CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29u
Y3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7Ci0gICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xk
KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KICAgICB2b2lkIHNldE5ld1RocmVz
aG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9pZCBkZWZlckluZGVm
aW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkRm9yT1NSRXhp
dCh1aW50MzJfdCBhY3RpdmVUaHJlc2hvbGQsIGRvdWJsZSBtZW1vcnlVc2FnZUFkanVzdGVkVGhy
ZXNob2xkKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSBhY3RpdmVUaHJlc2hv
bGQ7Ci0gICAgICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC1tZW1vcnlVc2Fn
ZUFkanVzdGVkVGhyZXNob2xkKTsKLSAgICAgICAgbV90b3RhbENvdW50ID0gbWVtb3J5VXNhZ2VB
ZGp1c3RlZFRocmVzaG9sZDsKLSAgICB9Ci0KICAgICBzdGF0aWMgaW50MzJfdCBtYXhpbXVtRXhl
Y3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
Y291bnRpbmdWYXJpYW50KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
OCArNDYsNiBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIE1ldGhvZE9mR2V0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gRklYTUU6IFRoaXMgaXMgYmVpbmcgc3VwcGxhbnRlZCBi
eSByZXBvcnRWYWx1ZSgpLiBSZW1vdmUgdGhpcyBvbmUKLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUxNDUgaGFzIGJlZW4gZml4ZWQuCiB2b2lkIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwg
SlNWYWx1ZVJlZ3MgcmVncykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtNzYs
MzQgKzc0LDYgQEAgdm9pZCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjplbWl0UgogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2gg
KG1fa2luZCkgewotICAgIGNhc2UgTm9uZToKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBS
ZWFkeToKLSAgICAgICAgKnUucHJvZmlsZS0+c3BlY0ZhaWxCdWNrZXQoMCkgPSBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIExhenlPcGVyYW5kOiB7
Ci0gICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFuZC5vcGVyYW5kKSk7Ci0K
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQot
ICAgICAgICAgICAgdS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlcygpLmFkZChsb2NrZXIsIGtleSk7Ci0gICAgICAgICpwcm9maWxlLT5zcGVjRmFpbEJ1Y2tl
dCgwKSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjYXNlIEFyaXRoUHJvZmlsZVJlYWR5OiB7Ci0gICAgICAgIHUuYXJpdGhQcm9maWxlLT5v
YnNlcnZlUmVzdWx0KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gfQotCi0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCwxMiArNzAs
OSBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayosIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5Jik7CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCAhPSBOb25lOyB9Ci0KLSAgICAvLyBGSVhNRTogZW1pdFJlcG9ydFZhbHVl
IGlzIGJlaW5nIHN1cHBsYW50ZWQgYnkgcmVwb3J0VmFsdWUoKS4gUmVtb3ZlIHRoaXMgb25lCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NSBoYXMg
YmVlbiBmaXhlZC4KKyAgICAKICAgICB2b2lkIGVtaXRSZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMm
LCBKU1ZhbHVlUmVncykgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWYWx1ZShKU1ZhbHVlKTsKLQor
ICAgIAogcHJpdmF0ZToKICAgICBlbnVtIEtpbmQgewogICAgICAgICBOb25lLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMjIyMDA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtODksNyArODksNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhlIERGRyBp
cyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8gbWFrZSBz
dXJlIHRoYXQgYWxsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIHZtLmdldENUSVN0dWIob3NyRXhpdFRodW5rR2VuZXJhdG9yKTsK
KyAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsK
ICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENU
SVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjIyMDA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI1LDYgKzIyNSwxOCBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
CiAgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsK
IH0KIAorc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBKSVRDb2RlOjpmaW5kUEMoQ29kZUJsb2Nr
Kiwgdm9pZCogcGMpCit7CisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAg
ICAgICBpZiAoRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gZXhpdC5tX2NvZGUuZXhl
Y3V0YWJsZU1lbW9yeSgpKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlLT5zdGFydCgpIDw9IHBj
ICYmIHBjIDwgaGFuZGxlLT5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxDb2RlT3JpZ2luPihleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKIHZvaWQgSklUQ29k
ZTo6ZmluYWxpemVPU1JFbnRyeXBvaW50cygpCiB7CiAgICAgYXV0byBjb21wYXJhdG9yID0gW10g
KGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CiAKKyAgICBzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7Cisg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklU
Q29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODUsOSArODUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsg
PSB2bSgpLT5nZXRDVElTdHViKG9zckV4aXRUaHVua0dlbmVyYXRvcik7Ci0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgb3NyRXhpdFRodW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1
bmsuY29kZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9z
ckV4aXRbaV07CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRD
b21waWxhdGlvbkluZm9baV07CiAgICAgICAgIEp1bXBMaXN0JiBmYWlsdXJlSnVtcHMgPSBpbmZv
Lm1fZmFpbHVyZUp1bXBzOwogICAgICAgICBpZiAoIWZhaWx1cmVKdW1wcy5lbXB0eSgpKQpAQCAt
OTcsMTAgKzk2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKIAogICAgICAg
ICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihpKSwgJnZtKCktPm9zckV4aXRJbmRleCk7Ci0gICAgICAgIEp1bXAgdGFyZ2V0ID0ganVt
cCgpOwotICAgICAgICBhZGRMaW5rVGFzayhbdGFyZ2V0LCBvc3JFeGl0VGh1bmtMYWJlbF0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayh0YXJn
ZXQsIG9zckV4aXRUaHVua0xhYmVsKTsKLSAgICAgICAgfSk7CisgICAgICAgIGV4aXQuc2V0UGF0
Y2hhYmxlQ29kZU9mZnNldChwYXRjaGFibGVKdW1wKCkpOwogICAgIH0KIH0KIApAQCAtMzA3LDgg
KzMwMywxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuY2FsbCkpOwogICAg
IH0KICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0gdm0oKS0+
Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KTsgKytpKSB7CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07
CiAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2V4aXRDb21waWxhdGlv
bkluZm9baV07CisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGl0LmdldFBhdGNoYWJsZUNvZGVP
ZmZzZXRBc0p1bXAoKSwgdGFyZ2V0KTsKKyAgICAgICAgZXhpdC5jb3JyZWN0SnVtcChsaW5rQnVm
ZmVyKTsKICAgICAgICAgaWYgKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZS5pc1NldCgpKSB7CiAg
ICAgICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRzLmFwcGVuZChKdW1w
UmVwbGFjZW1lbnQoCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8u
bV9yZXBsYWNlbWVudFNvdXJjZSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjIxICsyOSwxOCBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRl
ICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAj
aW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJn
dW1lbnRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVU
cmFjZXJzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKLSNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKLSNpbmNsdWRlICJQcm9iZUZyYW1lLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotdXNpbmcgQ1BVU3RhdGUgPSBQcm9iZTo6Q1BVU3RhdGU7Ci11c2luZyBDb250ZXh0
ID0gUHJvYmU6OkNvbnRleHQ7Ci11c2luZyBGcmFtZSA9IFByb2JlOjpGcmFtZTsKLQotc3RhdGlj
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhQcm9iZTo6Q29udGV4dCYsIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4aXRCYXNlJik7Ci1zdGF0aWMgdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoUHJvYmU6OkNvbnRleHQmLCBWTSYsIENvZGVCbG9jayosIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2ssIE9TUkV4aXQmKTsKLXN0YXRpYyB2b2lkIHByaW50T1NS
RXhpdChDb250ZXh0JiwgdWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0Jik7Ci0K
LXN0YXRpYyBKU1ZhbHVlIGpzVmFsdWVGb3IoQ1BVU3RhdGUmIGNwdSwgSlNWYWx1ZVNvdXJjZSBz
b3VyY2UpCi17Ci0gICAgaWYgKHNvdXJjZS5pc0FkZHJlc3MoKSkgewotICAgICAgICBKU1ZhbHVl
IHJlc3VsdDsKLSAgICAgICAgc3RkOjptZW1jcHkoJnJlc3VsdCwgY3B1Lmdwcjx1aW50OF90Kj4o
c291cmNlLmJhc2UoKSkgKyBzb3VyY2Uub2Zmc2V0KCksIHNpemVvZihKU1ZhbHVlKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShjcHUuZ3ByPEVuY29kZWRKU1ZhbHVlPihzb3VyY2UuZ3ByKCkpKTsK
LSNlbHNlCi0gICAgaWYgKHNvdXJjZS5oYXNLbm93blRhZygpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZShzb3VyY2UudGFnKCksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnRhZ0dQUigpKSwg
Y3B1LmdwcjxpbnQzMl90Pihzb3VyY2UucGF5bG9hZEdQUigpKSk7Ci0jZW5kaWYKLX0KLQotI2lm
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotCi1zdGF0aWNfYXNzZXJ0KGlz
NjRCaXQoKSwgIndlIG9ubHkgc3VwcG9ydCBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgb24gNjQtYml0
Iik7Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZl
c0ZvcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0g
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFs
bEZQUnMoKSk7Ci0gICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7Ci0KLSAgICB1aW50cHRyX3QqIHBoeXNpY2FsU3RhY2tGcmFtZSA9IGNvbnRleHQuZnA8dWlu
dHB0cl90Kj4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7Ci0gICAgICAgIGlmIChkb250UmVzdG9yZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFRoZSBjYWxsZWUgc2F2ZWQgdmFsdWVz
IGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgc3RhY2ssIG5vdCB0aGUgcmVjb3ZlcmVkIHN0YWNrLgot
ICAgICAgICAvLyBIZW5jZSwgd2UgcmVhZCB0aGUgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHBo
eXNpY2FsIHN0YWNrIG1lbW9yeSBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGdvaW5nIHRocm91Z2gg
Y29udGV4dC5zdGFjaygpLgotICAgICAgICBBU1NFUlQoIShlbnRyeS5vZmZzZXQoKSAlIHNpemVv
Zih1aW50cHRyX3QpKSk7Ci0gICAgICAgIGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9
IHBoeXNpY2FsU3RhY2tGcmFtZVtlbnRyeS5vZmZzZXQoKSAvIHNpemVvZih1aW50cHRyX3QpXTsK
LSAgICB9Ci19Ci0KLS8vIEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6ZW1pdFNhdmVDYWxsZWVT
YXZlc0ZvcigpLgotc3RhdGljIHZvaWQgc2F2ZUNhbGxlZVNhdmVzRm9yKENvbnRleHQmIGNvbnRl
eHQsIENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGF1dG8mIHN0YWNrID0gY29udGV4dC5z
dGFjaygpOwotICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
UmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7Ci0gICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgIGlmIChkb250U2F2ZVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0
YWNrLnNldChjb250ZXh0LmZwKCksIGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0Lmdwcjx1aW50cHRy
X3Q+KGVudHJ5LnJlZygpLmdwcigpKSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigpLgotc3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRl
eHQuYXJnPFZNKj4oKTsKLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZl
cyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
LSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQot
ICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BWTUVu
dHJ5RnJhbWUpOwotICAgIHVpbnRwdHJfdCogY2FsbGVlU2F2ZUJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXIp
OwotCi0gICAgLy8gUmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRSZXN0b3Jl
UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgc2l6ZV90IHVpbnRwdHJPZmZzZXQgPSBlbnRyeS5vZmZzZXQoKSAvIHNpemVvZih1aW50cHRy
X3QpOwotICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKLSAgICAgICAgICAgIGNvbnRl
eHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKSA9IGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNl
dF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZw
cigpKSA9IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNl
dF0pOwotICAgIH0KLX0KLQotLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCi1zdGF0aWMgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKENvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsKLSAgICBhdXRvJiBzdGFj
ayA9IGNvbnRleHQuc3RhY2soKTsKLQotICAgIFZNRW50cnlSZWNvcmQqIGVudHJ5UmVjb3JkID0g
dm1FbnRyeVJlY29yZCh2bS50b3BWTUVudHJ5RnJhbWUpOwotICAgIHZvaWQqIGNhbGxlZVNhdmVC
dWZmZXIgPSBlbnRyeVJlY29yZC0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcjsKLQotICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50
ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9
IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYgKGRvbnRDb3B5UmVnaXN0ZXJzLmdl
dChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5
LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICBzdGFjay5zZXQoY2FsbGVlU2F2ZUJ1ZmZlciwg
ZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPHVpbnRwdHJfdD4oZW50cnkucmVnKCkuZ3ByKCkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhY2suc2V0KGNhbGxlZVNhdmVCdWZmZXIs
IGVudHJ5Lm9mZnNldCgpLCBjb250ZXh0LmZwcjx1aW50cHRyX3Q+KGVudHJ5LnJlZygpLmZwcigp
KSk7Ci0gICAgfQotfQotCi0vLyBCYXNlZCBvbiBBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlT3JD
b3B5Q2FsbGVlU2F2ZXNGb3IoKS4KLXN0YXRpYyB2b2lkIHNhdmVPckNvcHlDYWxsZWVTYXZlc0Zv
cihDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVy
IG9mZnNldFZpcnR1YWxSZWdpc3RlciwgYm9vbCB3YXNDYWxsZWRWaWFUYWlsQ2FsbCkKLXsKLSAg
ICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlclNldCBkb250U2F2
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBS
ZWdpc3RlclNldDo6YWxsRlBScygpKTsKLSAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2Fs
bGVlU2F2ZXMtPnNpemUoKTsKLQotICAgIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZXMg
PSBSZWdpc3RlclNldDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgaWYg
KGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICB1aW50cHRyX3Qgc2F2ZWRSZWdpc3RlclZhbHVlOwotCi0gICAgICAgIGlm
ICh3YXNDYWxsZWRWaWFUYWlsQ2FsbCAmJiBiYXNlbGluZUNhbGxlZVNhdmVzLmdldChlbnRyeS5y
ZWcoKSkpCi0gICAgICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBmcmFtZS5nZXQ8dWludHB0
cl90PihlbnRyeS5vZmZzZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNhdmVkUmVn
aXN0ZXJWYWx1ZSA9IGNvbnRleHQuZ3ByKGVudHJ5LnJlZygpLmdwcigpKTsKLQotICAgICAgICBm
cmFtZS5zZXQob2Zmc2V0VmlydHVhbFJlZ2lzdGVyLm9mZnNldEluQnl0ZXMoKSArIGVudHJ5Lm9m
ZnNldCgpLCBzYXZlZFJlZ2lzdGVyVmFsdWUpOwotICAgIH0KLX0KLSNlbHNlIC8vIG5vdCBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIHZvaWQgcmVzdG9yZUNh
bGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqKSB7IH0KLXN0YXRpYyB2b2lkIHNhdmVD
YWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Ci1zdGF0aWMgdm9pZCByZXN0
b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYp
IHsgfQotc3RhdGljIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihDb250ZXh0JikgeyB9Ci1zdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2FsbGVlU2F2ZXNG
b3IoQ29udGV4dCYsIENvZGVCbG9jayosIFZpcnR1YWxSZWdpc3RlciwgYm9vbCkgeyB9Ci0KLSNl
bmRpZiAvLyBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLQotc3RhdGljIEpT
Q2VsbCogY3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQotewotICAgIFZNJiB2bSA9
ICpjb250ZXh0LmFyZzxWTSo+KCk7Ci0KLSAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkp
OwotCi0gICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgY29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLQotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOwotICAgIHVuc2lnbmVkIGNhcGFjaXR5
ID0gc3RkOjptYXgobGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkgLSAxKSk7Ci0gICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RB
cmd1bWVudHM6OmNyZWF0ZSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLQotICAgIHJl
c3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7Ci0KLSAgICB2b2lkKiBmcmFt
ZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7Ci0gICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNl
LCBjb250ZXh0LnN0YWNrKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykK
LSAgICAgICAgcmVzdWx0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIGZyYW1lLmFyZ3VtZW50KGkp
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIGNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IGludDMyX3QgYXJndW1lbnRDb3VudCkKLXsKLSAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0q
PigpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLQot
ICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0KLSAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lKQotICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRD
b3VudCAtIDE7Ci0gICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1bWVudHM6
OmNyZWF0ZUVtcHR5KAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Y2xv
bmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKLQotICAgIHZvaWQqIGZy
YW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/IGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKLSAgICBGcmFtZSBmcmFtZShmcmFtZUJh
c2UsIGNvbnRleHQuc3RhY2soKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07
KQotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGZyYW1lLmFyZ3VtZW50
KGkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVh
bUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogT1NSRXhpdEJhc2Uoa2luZCwg
aml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljLCBqaXQtPm1fb3Jp
Z2luLndhc0hvaXN0ZWQpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKQEAg
LTI1OSwxMCArNTYsMzAgQEAgT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVl
UwogICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVudE5vZGUs
IGNhbkV4aXQpOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0UmVzdG9yZUFyZ3VtZW50cyhDb250ZXh0
JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgREZHOjpKSVRDb2RlKiBkZmdKSVRDb2Rl
LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCit2b2lkIE9TUkV4aXQ6
OnNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgY2hl
Y2spCiB7Ci0gICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwor
ICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGNoZWNrLm1fanVtcC5tX2xhYmVsLm1fb2Zmc2V0
OworfQogCitNYWNyb0Fzc2VtYmxlcjo6SnVtcCBPU1JFeGl0OjpnZXRQYXRjaGFibGVDb2RlT2Zm
c2V0QXNKdW1wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXAoQXNz
ZW1ibGVyTGFiZWwobV9wYXRjaGFibGVDb2RlT2Zmc2V0KSk7Cit9CisKK0NvZGVMb2NhdGlvbkp1
bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGRmZ0NvZGVCbG9j
aykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChkZmdDb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGF0YUFkZHJlc3NBdE9mZnNldChtX3BhdGNoYWJsZUNvZGVPZmZzZXQpKTsKK30K
Kwordm9pZCBPU1JFeGl0Ojpjb3JyZWN0SnVtcChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorewor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbDsKKyAgICBsYWJlbC5tX2xhYmVsLm1fb2Zm
c2V0ID0gbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9
IGxpbmtCdWZmZXIub2Zmc2V0T2YobGFiZWwpOworfQorCit2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0
b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgb3BlcmFuZHMpCit7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlB
bGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1hcHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBv
cGVyYW5kLgogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CkBAIC0yNzUsMTIgKzkyLDE0IEBAIHN0YXRpYyB2b2lkIGVtaXRSZXN0
b3JlQXJndW1lbnRzKENvbnRleHQKICAgICAgICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5v
ZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIgPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZp
bmQoaWQpOwogICAgICAgICBpZiAoaXRlciAhPSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGZyYW1lLm9wZXJh
bmQoaXRlci0+dmFsdWUpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKGl0
ZXItPnZhbHVlKSwgcmVncyk7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZShyZWdzLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAogICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9Ci0g
ICAgICAgICAgICBkZmdKSVRDb2RlLT5taW5pZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFt
ZSgpOworICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZygpLT5taW5p
ZmllZERGRy5hdChpZCktPmlubGluZUNhbGxGcmFtZSgpOwogCiAgICAgICAgIGludCBzdGFja09m
ZnNldDsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKQEAgLTI4OCw0OCArMTA3LDUzIEBA
IHN0YXRpYyB2b2lkIGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgc3RhY2tPZmZzZXQgPSAwOwogCi0gICAgICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZTsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Ns
b3N1cmVDYWxsKQotICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihmcmFt
ZS5vcGVyYW5kKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS5hc0NlbGwoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CisgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
LAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXND
ZWxsKCkpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgfQogCi0g
ICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyZ3VtZW50
Q291bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihzdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnQpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
fQogCi0gICAgICAgIEpTQ2VsbCogYXJndW1lbnRzT2JqZWN0OworICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
MSk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QgPSBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KGNvbnRleHQsIGNvZGVC
bG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291bnQpOworICAgICAgICAg
ICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4ob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb25lZEFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKLSAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdCA9
IGNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBpbmxp
bmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBqaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09i
amVjdCkpOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
aml0LnN0b3JlQ2VsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKG9wZXJhbmQpKTsKIAogICAgICAgICBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRz
LmFkZChpZCwgb3BlcmFuZCk7CiAgICAgfQogfQogCi12b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JF
eGl0KENvbnRleHQmIGNvbnRleHQpCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGls
ZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxW
TSo+KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7
Ci0gICAgQVNTRVJUKCZleGVjLT52bSgpID09ICZ2bSk7Ci0KLSAgICBpZiAodm0uY2FsbEZyYW1l
Rm9yQ2F0Y2gpIHsKLSAgICAgICAgZXhlYyA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOwotICAgICAg
ICBjb250ZXh0LmZwKCkgPSBleGVjOwotICAgIH0KKyAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNh
dGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhl
Yyk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAg
IEFTU0VSVChjb2RlQmxvY2spOwpAQCAtMzM3LDEwMiArMTYxLDc5IEBAIHZvaWQgT1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY28KIAogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJh
YmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291
bGRuJ3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KLSAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFw
KTsKIAotICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IHZtLm9zckV4aXRJbmRleDsKLSAgICBERkc6
OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Ci0gICAg
T1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKKyAgICB1aW50
MzJfdCBleGl0SW5kZXggPSB2bS0+b3NyRXhpdEluZGV4OworICAgIE9TUkV4aXQmIGV4aXQgPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckV4aXRbZXhpdEluZGV4XTsKIAotICAgIEFT
U0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCk7CisgICAgQVNTRVJUKCF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggfHwgZXhpdC5tX2tpbmQgPT0g
R2VuZXJpY1Vud2luZCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOworICAgIAorICAg
IHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7CiAK
LSAgICBpZiAoVU5MSUtFTFkoIWV4aXQuZXhpdFN0YXRlKSkgewotICAgICAgICAvLyBXZSBvbmx5
IG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQu
IFRoZSBjb21wdXRlZAotICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBP
U1JFeGl0U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIC8v
IGV4aXQgcmFtcCBjb2RlLgotCi0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGJhc2VsaW5lIGNv
ZGVCbG9ja3MgdG8gT1NSIGV4aXQgdG8uCi0gICAgICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NS
RXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7Ci0KLSAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwotICAgICAg
ICBBU1NFUlQoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7Ci0KLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KLSAgICAg
ICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7Ci0gICAgICAgIGRmZ0pJVENvZGUt
PnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9y
aWdpbiwgZGZnSklUQ29kZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFu
ZHMpOwotCi0gICAgICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gbnVsbHB0cjsK
LSAgICAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQotICAgICAgICAg
ICAgcmVjb3ZlcnkgPSAmZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVj
b3ZlcnlJbmRleF07Ci0KLSAgICAgICAgaW50MzJfdCBhY3RpdmVUaHJlc2hvbGQgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7Ci0gICAgICAgIGRvdWJsZSBhZGp1c3RlZFRocmVzaG9s
ZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVydFRvSW50KGFjdGl2ZVRocmVz
aG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOwotICAgICAgICBBU1NFUlQoYWRqdXN0ZWRUaHJlc2hv
bGQgPiAwKTsKLSAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgYWRqdXN0
ZWRUaHJlc2hvbGQpOwotCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVP
cmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPmpp
dENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRDb2RlTWFwKTsKLQotICAgICAgICBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0LCB1bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwg
ZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
OjpnZXRCeXRlY29kZUluZGV4KTsKLQotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0gICAgICAg
IEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGZpbmFsU3RhY2tQb2ludGVyT2Zmc2V0
ID0gY29kZUJsb2NrRm9yRXhpdC0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpOwotCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlQmxvY2tGb3JFeGl0LT5qaXRD
b2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQobWFwcGluZy0+bV9tYWNoaW5lQ29kZU9m
ZnNldCk7CisgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KKyAgICBPcGVyYW5k
czxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKKyAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
KCktPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5taW5pZmllZERGRywgZXhpdC5t
X3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CisKKyAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNv
dmVyeSA9IDA7CisgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4ICE9IFVJTlRfTUFYKQorICAg
ICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNwZWN1bGF0aW9u
UmVjb3ZlcnlbZXhpdC5tX3JlY292ZXJ5SW5kZXhdOworCisgICAgeworICAgICAgICBDQ2FsbEhl
bHBlcnMgaml0KGNvZGVCbG9jayk7CisKKyAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEdlbmVy
aWNVbndpbmQpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9w
X2NhdGNoIGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCisgICAg
ICAgICAgICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBw
b2ludGVyLgorICAgICAgICAgICAgaml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0pOworICAgICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFk
ZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICAgICAgfQorICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgICAgIGV4aXQuZXhpdFN0YXRl
ID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0LCBjb2RlQmxvY2ssIGJhc2VsaW5lQ29k
ZUJsb2NrLCBvcGVyYW5kcywgcmVjb3ZlcnksIGZpbmFsU3RhY2tQb2ludGVyT2Zmc2V0LCBhY3Rp
dmVUaHJlc2hvbGQsIGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0KSk7CisgICAgICAgIGpp
dC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT5jb21waWxhdGlvbikpIHsKLSAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0
YWJhc2UgPSAqdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBpZiAoVU5MSUtFTFko
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCktPmNvbXBpbGF0aW9uKSkgeworICAgICAgICAgICAgUHJvZmlsZXI6OkRhdGFiYXNlJiBk
YXRhYmFzZSA9ICp2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwogICAgICAgICAgICAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CiAKICAgICAgICAgICAgIFByb2ZpbGVyOjpPU1JF
eGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKICAgICAgICAgICAg
ICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2Nr
LCBleGl0Lm1fY29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQu
bV9raW5kID09IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsKLSAgICAgICAgICAgIGV4aXQuZXhp
dFN0YXRlLT5wcm9maWxlckV4aXQgPSBwcm9maWxlckV4aXQ7CisgICAgICAgICAgICBqaXQuYWRk
NjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVB
ZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJi
b3NlREZHT1NSRXhpdCgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBPU1IgZXhpdCAj
JXUgKCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzXG4iLAorICAgICAgICBjb21w
aWxlRXhpdChqaXQsICp2bSwgZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKKworICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgZXhpdC5tX2Nv
ZGUgPSBGSU5BTElaRV9DT0RFX0lGKAorICAgICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VERkdPU1JFeGl0
KCksCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIE9TUiBleGl0
ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAgICAgICAg
ICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAg
ICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29k
ZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4
dDxEdW1wQ29udGV4dD4ob3BlcmFuZHMpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgT1NSRXhpdFN0YXRlJiBleGl0U3RhdGUgPSAqZXhpdC5leGl0U3RhdGUuZ2V0KCk7Ci0gICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGV4aXRTdGF0ZS5iYXNlbGluZUNvZGVCbG9j
azsKLSAgICBBU1NFUlQoYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7Ci0KLSAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMgPSBl
eGl0U3RhdGUub3BlcmFuZHM7Ci0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSBl
eGl0U3RhdGUucmVjb3Zlcnk7Ci0KLSAgICBpZiAoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCkgewotICAgICAgICAvLyBXZSBhcmUgYWN0aW5nIGFzIGEgZGVmYWN0byBvcF9jYXRjaCBiZWNh
dXNlIHdlIGFycml2ZSBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCgpLgotICAgICAgICAvLyBTbywg
d2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAg
ICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoY29u
dGV4dCk7Ci0gICAgICAgIEFTU0VSVChjb250ZXh0LmZwKCkgPT0gdm0uY2FsbEZyYW1lRm9yQ2F0
Y2gpOworICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRl
eHQ+KG9wZXJhbmRzKSkuZGF0YSgpKSk7CiAgICAgfQotICAgIGNvbnRleHQuc3AoKSA9IGNvbnRl
eHQuZnA8dWludDhfdCo+KCkgKyAoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpOwogCi0gICAgQVNTRVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkg
JiAweDcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoZXhpdC5jb2RlTG9jYXRp
b25Gb3JSZXBhdGNoKGNvZGVCbG9jayksIENvZGVMb2NhdGlvbkxhYmVsKGV4aXQubV9jb2RlLmNv
ZGUoKSkpOwogCi0gICAgaWYgKGV4aXRTdGF0ZS5wcm9maWxlckV4aXQpCi0gICAgICAgIGV4aXRT
dGF0ZS5wcm9maWxlckV4aXQtPmluY0NvdW50KCk7CisgICAgdm0tPm9zckV4aXRKdW1wRGVzdGlu
YXRpb24gPSBleGl0Lm1fY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KIAotICAg
IGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250
ZXh0LnN0YWNrKCkpOwordm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGpp
dCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQoreworICAgIGpp
dC5qaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBBU1NF
UlQoY3B1LmdwcihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpID09IFRhZ1R5cGVOdW1i
ZXIpOwotICAgIEFTU0VSVChjcHUuZ3ByKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikgPT0gVGFn
TWFzayk7Ci0jZW5kaWYKKyAgICAvLyBQcm8tZm9ybWEgc3R1ZmYuCisgICAgaWYgKE9wdGlvbnM6
OnByaW50RWFjaE9TUkV4aXQoKSkgeworICAgICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgICAg
IGRlYnVnSW5mby0+Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgICAgICBkZWJ1Z0lu
Zm8tPmtpbmQgPSBleGl0Lm1fa2luZDsKKyAgICAgICAgZGVidWdJbmZvLT5ieXRlY29kZU9mZnNl
dCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSkKLSAgICAgICAgcHJpbnRPU1JFeGl0KGNvbnRl
eHQsIHZtLm9zckV4aXRJbmRleCwgZXhpdCk7CisgICAgICAgIGppdC5kZWJ1Z0NhbGwodm0sIGRl
YnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CisgICAgfQog
CiAgICAgLy8gUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGlu
dG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgogICAgIC8vIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBi
ZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgpAQCAt
NDQwLDI0ICsyNDEsMjIgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBj
bwogICAgIGlmIChyZWNvdmVyeSkgewogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkp
IHsKICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKLSAgICAgICAgICAgIGNwdS5ncHIocmVj
b3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNw
dS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7CisgICAgICAgICAgICBqaXQuc3ViMzIo
cmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOwot
ICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBUYWdUeXBlTnVtYmVyOwor
ICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNv
dmVyeS0+ZGVzdCgpKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKLSAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zlcnkt
PmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSByZWNvdmVy
eS0+aW1tZWRpYXRlKCkpOworICAgICAgICAgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6
SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgICAgIEFTU0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3Qo
KSkgPj4gMzIpKTsKLSAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gVGFn
VHlwZU51bWJlcjsKKyAgICAgICAgICAgIGppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBjcHUuZ3ByKHJlY292
ZXJ5LT5kZXN0KCkpIF4gVmFsdWVGYWxzZTsKKyAgICAgICAgICAgIGppdC54b3I2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IHJlY292ZXJ5LT5kZXN0KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDgw
LDExMyArMjc5LDM5NSBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNv
CiAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBhY2Nlc3MsIG9yIGR1ZSB0byBhbiBhcnJheSBwcm9m
aWxlKS4KIAogICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNv
ZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmIChBcnJheVByb2Zp
bGUqIGFycmF5UHJvZmlsZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0ganNWYWx1ZUZvcihjcHUsIGV4aXQubV9qc1ZhbHVlU291cmNlKS5hc0NlbGwoKS0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1
Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGFibGUgdG8gdXNlIGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoKSB0byBkZXRlcm1pbmUgdGhlIG9i
c2VydmVkIEFycmF5TW9kZSBoZXJlLgotICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGN1cnJl
bnRseSwgZG9pbmcgc28gd291bGQgcmVzdWx0IGluIGEgcGRmanMgcHJlZm9ybWFuY2UgcmVncmVz
c2lvbi4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc2NDczCi0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZlQXJy
YXlNb2RlKGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAg
ICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgICAgICBHUFJSZWcgdXNlZFJl
Z2lzdGVyOworICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJl
c3MoKSkKKyAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVT
b3VyY2UuYmFzZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
dXNlZFJlZ2lzdGVyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCk7CisjZWxzZQorICAgICAg
ICAgICAgICAgIEdQUlJlZyB1c2VkUmVnaXN0ZXIxOworICAgICAgICAgICAgICAgIEdQUlJlZyB1
c2VkUmVnaXN0ZXIyOworICAgICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5p
c0FkZHJlc3MoKSkgeworICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIxID0gZXhpdC5t
X2pzVmFsdWVTb3VyY2UuYmFzZSgpOworICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXIy
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB1c2VkUmVnaXN0ZXIxID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigp
OworICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaGFzS25vd25U
YWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcjIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXIyID0gZXhpdC5tX2pzVmFsdWVTb3VyY2UudGFnR1BSKCk7CisgICAgICAgICAg
ICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDE7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICAgICAgc2NyYXRjaDEgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNl
ZFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzY3JhdGNoMiA9IEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUih1c2VkUmVnaXN0ZXIsIHNjcmF0Y2gxKTsKKyNlbHNlCisgICAgICAg
ICAgICAgICAgc2NyYXRjaDEgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNl
ZFJlZ2lzdGVyMSwgdXNlZFJlZ2lzdGVyMik7CisgICAgICAgICAgICAgICAgc2NyYXRjaDIgPSBB
c3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIodXNlZFJlZ2lzdGVyMSwgdXNlZFJlZ2lz
dGVyMiwgc2NyYXRjaDEpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlKHNjcmF0Y2gxKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaDIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnB1c2goc2NyYXRjaDIpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpdC5t
X2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBzY3JhdGNoMTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV4aXQu
bV9qc1ZhbHVlU291cmNlLnBheWxvYWRHUFIoKTsKKworICAgICAgICAgICAgICAgIGppdC5sb2Fk
MzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDEs
IGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRj
aDEpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlP
ZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAg
ICAgaml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgaml0
Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNB
Uk02NCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaDIp
OworICAgICAgICAgICAgICAgICAgICBqaXQucG9wVG9SZXN0b3JlKHNjcmF0Y2gxKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBqaXQucG9wKHNjcmF0Y2gy
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnBvcChzY3JhdGNoMSk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAg
ICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKGpzVmFsdWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNv
dXJjZSkpOworICAgICAgICBpZiAoTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBpZiAoZXhpdC5tX2pzVmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4ndCBiZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyLiBTbyB1
c2UgdGhlIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAvLyBzaW5jZSB3
ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBwcm9maWxl
LmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVSZWdzKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0
VmFsdWUoaml0LCBKU1ZhbHVlUmVncyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSkpOworI2Vs
c2UgLy8gbm90IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBpZiAoZXhpdC5tX2pzVmFsdWVT
b3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVnaXN0ZXIg
c28gd2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFBheWxvYWQg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoZXhpdC5tX2pzVmFsdWVTb3VyY2Uu
YmFzZSgpKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVs
cGVyczo6c2VsZWN0U2NyYXRjaEdQUihleGl0Lm1fanNWYWx1ZVNvdXJjZS5iYXNlKCksIHNjcmF0
Y2hQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2ZShzY3JhdGNoUGF5bG9h
ZCk7CisgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmUoc2NyYXRjaFRhZyk7CisKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyBzY3JhdGNoKHNjcmF0Y2hUYWcsIHNjcmF0Y2hQYXlsb2Fk
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQubG9hZFZhbHVlKGV4aXQu
bV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICBw
cm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoc2NyYXRjaFRhZyk7CisgICAgICAgICAg
ICAgICAgaml0LnBvcFRvUmVzdG9yZShzY3JhdGNoUGF5bG9hZCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGV4aXQubV9qc1ZhbHVlU291cmNlLmhhc0tub3duVGFnKCkpIHsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaFRhZyA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihleGl0Lm1fanNWYWx1ZVNvdXJjZS5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIGpp
dC5wdXNoVG9TYXZlKHNjcmF0Y2hUYWcpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQubV9qc1ZhbHVlU291cmNlLnRhZygpKSwgc2Ny
YXRjaFRhZyk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUoc2NyYXRjaFRhZywg
ZXhpdC5tX2pzVmFsdWVTb3VyY2UucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBwcm9m
aWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBqaXQucG9w
VG9SZXN0b3JlKHNjcmF0Y2hUYWcpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBleGl0Lm1fanNWYWx1ZVNvdXJjZS5yZWdz
KCkpOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIH0KICAgICB9CiAKLSAgICAv
LyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGlu
dG8gdGhlIHN0YWNrLgotICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVjb3ZlciB2YWx1ZXMgYmVm
b3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cKLSAgICAvLyBiZWNhdXNl
IHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBvZiBjYWxsZWUgc2F2ZSBy
ZWdpc3RlcnMuCisgICAgLy8gV2hhdCBmb2xsb3dzIGlzIGFuIGludGVudGlvbmFsbHkgc2ltcGxl
IE9TUiBleGl0IGltcGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzCisgICAgLy8gZmFpcmx5IHBv
b3IgY29kZSBidXQgaXMgdmVyeSBlYXN5IHRvIGhhY2suIEluIHBhcnRpY3VsYXIsIGl0IGR1bXBz
IGFsbCBzdGF0ZSB0aGF0CisgICAgLy8gbmVlZHMgY29udmVyc2lvbiBpbnRvIGEgc2NyYXRjaCBi
dWZmZXIgc28gdGhhdCBpbiBzdGVwIDYsIHdoZXJlIHdlIGFjdHVhbGx5IGRvIHRoZQorICAgIC8v
IGNvbnZlcnNpb25zLCB3ZSBrbm93IHRoYXQgYWxsIHRlbXAgcmVnaXN0ZXJzIGFyZSBmcmVlIHRv
IHVzZSBhbmQgdGhlIHZhcmlhYmxlIGlzCisgICAgLy8gZGVmaW5pdGVseSBpbiBhIHdlbGwta25v
d24gc3BvdCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGhh
ZAorICAgIC8vIG9yaWdpbmFsbHkgYmVlbiBpbiBhIHJlZ2lzdGVyIG9yIHNwaWxsZWQuIFRoaXMg
YWxsb3dzIHVzIHRvIGRlY291cGxlICJ3aGVyZSB3YXMKKyAgICAvLyB0aGUgdmFyaWFibGUiIGZy
b20gImhvdyB3YXMgaXQgcmVwcmVzZW50ZWQiLiBDb25zaWRlciB0aGF0IHRoZQorICAgIC8vIElu
dDMyRGlzcGxhY2VkSW5KU1N0YWNrIHJlY292ZXJ5OiBpdCB0ZWxscyB1cyB0aGF0IHRoZSB2YWx1
ZSBpcyBpbiBhCisgICAgLy8gcGFydGljdWxhciBwbGFjZSBhbmQgdGhhdCB0aGF0IHBsYWNlIGhv
bGRzIGFuIHVuYm94ZWQgaW50MzIuIFdlIGhhdmUgdHdvIGRpZmZlcmVudAorICAgIC8vIHBsYWNl
cyB0aGF0IGEgdmFsdWUgY291bGQgYmUgKGRpc3BsYWNlZCwgcmVnaXN0ZXIpIGFuZCBhIGJ1bmNo
IG9mIGRpZmZlcmVudAorICAgIC8vIHdheXMgb2YgcmVwcmVzZW50aW5nIGEgdmFsdWUuIFRoZSBu
dW1iZXIgb2YgcmVjb3ZlcmllcyBpcyB0d28gKiBhIGJ1bmNoLiBUaGUgY29kZQorICAgIC8vIGJl
bG93IG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBoYXZlIHR3byArIGEgYnVuY2ggY2FzZXMgcmF0aGVy
IHRoYW4gdHdvICogYSBidW5jaC4KKyAgICAvLyBPbmNlIHdlIGhhdmUgbG9hZGVkIHRoZSB2YWx1
ZSBmcm9tIHdoZXJldmVyIGl0IHdhcywgdGhlIHJlYm94aW5nIGlzIHRoZSBzYW1lCisgICAgLy8g
cmVnYXJkbGVzcyBvZiBpdHMgbG9jYXRpb24uIExpa2V3aXNlLCBiZWZvcmUgd2UgZG8gdGhlIHJl
Ym94aW5nLCB0aGUgd2F5IHdlIGdldCB0bworICAgIC8vIHRoZSB2YWx1ZSAoaS5lLiB3aGVyZSB3
ZSBsb2FkIGl0IGZyb20pIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuIEJlY2F1
c2UKKyAgICAvLyB0aGUgY29kZSBiZWxvdyBhbHdheXMgZHVtcHMgZXZlcnl0aGluZyBpbnRvIGEg
c2NyYXRjaCBidWZmZXIgZmlyc3QsIHRoZSB0d28KKyAgICAvLyBxdWVzdGlvbnMgYmVjb21lIG9y
dGhvZ29uYWwsIHdoaWNoIHNpbXBsaWZpZXMgYWRkaW5nIG5ldyB0eXBlcyBhbmQgYWRkaW5nIG5l
dworICAgIC8vIGxvY2F0aW9ucy4KKyAgICAvLworICAgIC8vIFRoaXMgcmFpc2VzIHRoZSBxdWVz
dGlvbjogZG9lcyB1c2luZyBzdWNoIGEgc3Vib3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBPU1Ig
ZXhpdCwKKyAgICAvLyB3aGVyZSB3ZSBhbHdheXMgZW1pdCBjb2RlIHRvIGR1bXAgYWxsIHN0YXRl
IGludG8gYSBzY3JhdGNoIGJ1ZmZlciBvbmx5IHRvIHRoZW4KKyAgICAvLyBkdW1wIGl0IHJpZ2h0
IGJhY2sgaW50byB0aGUgc3RhY2ssIGh1cnQgdXMgaW4gYW55IHdheT8gVGhlIGFzbndlciBpcyB0
aGF0IE9TUiBleGl0cworICAgIC8vIGFyZSByYXJlLiBPdXIgdGllcmluZyBzdHJhdGVneSBlbnN1
cmVzIHRoaXMuIFRoaXMgaXMgYmVjYXVzZSBpZiBhbiBPU1IgZXhpdCBpcworICAgIC8vIHRha2Vu
IG1vcmUgdGhhbiB+MTAwIHRpbWVzLCB3ZSBqZXR0aXNvbiB0aGUgREZHIGNvZGUgYmxvY2sgYWxv
bmcgd2l0aCBhbGwgb2YgaXRzCisgICAgLy8gZXhpdHMuIEl0IGlzIGltcG9zc2libGUgZm9yIGFu
IE9TUiBleGl0IC0gaS5lLiB0aGUgY29kZSB3ZSBjb21waWxlIGJlbG93IC0gdG8KKyAgICAvLyBl
eGVjdXRlIGZyZXF1ZW50bHkgZW5vdWdoIGZvciB0aGUgY29kZWdlbiB0byBtYXR0ZXIgdGhhdCBt
dWNoLiBJdCBwcm9iYWJseSBtYXR0ZXJzCisgICAgLy8gZW5vdWdoIHRoYXQgd2UgZG9uJ3Qgd2Fu
dCB0byB0dXJuIHRoaXMgaW50byBzb21lIHN1cGVyLXNsb3cgZnVuY3Rpb24gY2FsbCwgYnV0IHNv
CisgICAgLy8gbG9uZyBhcyB3ZSdyZSBnZW5lcmF0aW5nIHN0cmFpZ2h0LWxpbmUgY29kZSwgdGhh
dCBjb2RlIGNhbiBiZSBwcmV0dHkgYmFkLiBBbHNvCisgICAgLy8gYmVjYXVzZSB3ZSB0ZW5kIHRv
IGV4aXQgb25seSBhbG9uZyBvbmUgT1NSIGV4aXQgZnJvbSBhbnkgREZHIGNvZGUgYmxvY2sgLSB0
aGF0J3MgYW4KKyAgICAvLyBlbXBpcmljYWwgcmVzdWx0IHRoYXQgd2UncmUgZXh0cmVtZWx5IGNv
bmZpZGVudCBhYm91dCAtIHRoZSBjb2RlIHNpemUgb2YgdGhpcworICAgIC8vIGRvZXNuJ3QgbWF0
dGVyIG11Y2guIEhlbmNlIGFueSBhdHRlbXB0IHRvIG9wdGltaXplIHRoZSBjb2RlZ2VuIGhlcmUg
aXMganVzdCBwdXJlbHkKKyAgICAvLyBoYXJtZnVsIHRvIHRoZSBzeXN0ZW06IGl0IHByb2JhYmx5
IHdvbid0IHJlZHVjZSBlaXRoZXIgbmV0IG1lbW9yeSB1c2FnZSBvciBuZXQKKyAgICAvLyBleGVj
dXRpb24gdGltZS4gSXQgd2lsbCBvbmx5IHByZXZlbnQgdXMgZnJvbSBjbGVhbmx5IGRlY291cGxp
bmcgIndoZXJlIHdhcyB0aGUKKyAgICAvLyB2YXJpYWJsZSIgZnJvbSAiaG93IHdhcyBpdCByZXBy
ZXNlbnRlZCIsIHdoaWNoIHdpbGwgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBhZGQKKyAgICAv
LyBmZWF0dXJlcyBpbiB0aGUgZnV0dXJlIGFuZCBpdCB3aWxsIG1ha2UgaXQgaGFyZGVyIHRvIHJl
YXNvbiBhYm91dCBidWdzLgogCi0gICAgaW50IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycyA9IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKLSAgICBzaXplX3QgbnVtYmVyT2ZPcGVyYW5kcyA9IG9w
ZXJhbmRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVy
T2ZPcGVyYW5kczsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9w
ZXJhbmRzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKyAgICAvLyBTYXZlIGFsbCBz
dGF0ZSBmcm9tIEdQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCiAKLSAgICAgICAgaWYgKHJl
Zy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICogb3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0
Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSkgOiAwOwogCi0gICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwgZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5mcHI8SlNWYWx1ZT4ocmVjb3ZlcnkuZnByKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6
CisgICAgICAgIGNhc2UgVW5ib3hlZENlbGxJbkdQUjoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBjYXNlIEluR1BSOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBj
cHUuZ3ByPEpTVmFsdWU+KHJlY292ZXJ5LmdwcigpKSk7CisgICAgICAgIGNhc2UgVW5ib3hlZElu
dDUySW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaCArIGluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwogI2Vsc2UKKyAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BSOgor
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkuZ3ByKCks
CisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4o
c2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIo
KSksIGNwdS5ncHI8aW50MzJfdD4ocmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOworICAgICAgICAg
ICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkudGFnR1BSKCksCisgICAg
ICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRj
aCArIGluZGV4KS0+YXNCaXRzLnRhZyk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgICAgICByZWNvdmVyeS5wYXlsb2FkR1BSKCksCisgICAgICAgICAgICAgICAgJmJpdHdp
c2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRz
LnBheWxvYWQpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKIAotICAgICAgICBjYXNlIFVu
Ym94ZWRDZWxsSW5HUFI6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsKKyAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGNhc2Ug
Q2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwgSlNWYWx1ZShleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVk
Q2VsbCgpKSk7CisgICAgLy8gQW5kIHZvaWxhLCBhbGwgR1BScyBhcmUgZnJlZSB0byByZXVzZS4K
KworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZl
ci4KKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CisKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewor
ICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNo
ICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUo
cmVjb3ZlcnkuZnByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7
CiAgICAgICAgICAgICBicmVhazsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNh
c2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7CisgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgorICAgICAgICB9CisgICAgfQog
CisgICAgLy8gTm93LCBhbGwgRlBScyBhcmUgYWxzbyBmcmVlLgorCisgICAgLy8gU2F2ZSBhbGwg
c3RhdGUgZnJvbSB0aGUgc3RhY2sgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEZvciBzaW1wbGlj
aXR5IHdlCisgICAgLy8gZG8gdGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3MgYWxyZWFkeSBpbiB0
aGUgcmlnaHQgcGxhY2Ugb24gdGhlIHN0YWNrLgorICAgIC8vIEl0IG1ha2VzIHRoaW5ncyBzaW1w
bGVyIGxhdGVyLgorCisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRz
LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IG9wZXJhbmRzW2luZGV4XTsKKworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIENl
bGxEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2Fz
ZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSkuanNWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFj
azoKKyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAg
ICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBicmVhazsKICNl
bHNlCi0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGpzQm9vbGVhbihleGVj
LT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5qc1ZhbHVlKCkucGF5bG9hZCgpKSk7Cisg
ICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwKKyAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksCisg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgaml0LnN0b3JlMzIo
CisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAgICAgJmJpdHdp
c2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRz
LnRhZyk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMSwKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgICAgICBi
cmVhazsKICNlbmRpZgorCisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KIAotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50MzJfdD4o
cmVjb3ZlcnkuZ3ByKCkpKSk7CisgICAgLy8gTmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sg
cG9pbnRlciBhY2NvdW50cyBmb3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNhZ2UgYXQgZXhpdC4g
VGhpcworICAgIC8vIGNvdWxkIHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUgREZHIHVzZWQuIFdl
IG5lZWQgdG8gZG8gaXQgYmVmb3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0cworICAgIC8vIHVz
ZWQgYnkgYmFzZWxpbmUuCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoCisgICAgICAgICAgICAtaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0ICogc2l6ZW9mKFJlZ2lzdGVy
KSksCisgICAgICAgIENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNh
bGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRoZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4K
KyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGppdC5lbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKTsKKworICAgIC8vIFRoZSB0YWcgcmVn
aXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KKyAgICBq
aXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChleGl0Lmlz
RXhjZXB0aW9uSGFuZGxlcigpKQorICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSk7CisKKyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQg
Y29udmVyc2lvbnMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgorCisgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1YWxSZWdpc3Rl
ckZvckluZGV4KGluZGV4KTsKKworICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAmJiByZWcudG9M
b2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Y2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaW50IG9wZXJhbmQgPSByZWcub2Zmc2V0KCk7CisKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgY2FzZSBJbkZQUjoKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIElu
R1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZSAvLyBu
b3QgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgY2FzZSBJblBhaXI6CisgICAgICAgICAgICBqaXQu
bG9hZDMyKAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3Jp
cHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy50YWcsCisgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAm
Yml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5h
c0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAg
ICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwKKyAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAg
ICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShleGVjLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkSW50MzIoKSkpOworICAgICAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnBheWxvYWQsCisgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkp
OworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDAsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQp
KTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQ
UjoKKyAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAg
aml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPihzY3JhdGNoICsgaW5kZXgpLT5hc0JpdHMucGF5bG9hZCwKKyAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7Cisg
ICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwK
KyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKworICAgICAgICBj
YXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0
YWNrOgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6
Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1Lmdwcjxp
bnQ2NF90PihyZWNvdmVyeS5ncHIoKSkgPj4gSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwor
ICAgICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyNlbHNlCisg
ICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICZiaXR3aXNlX2Nhc3Q8RW5j
b2RlZFZhbHVlRGVzY3JpcHRvcio+KHNjcmF0Y2ggKyBpbmRleCktPmFzQml0cy5wYXlsb2FkLAor
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVy
YW5kKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMCwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3Bl
cmFuZCkpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIAorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIGNhc2UgVW5ib3hlZEludDUySW5HUFI6CiAgICAgICAgIGNhc2UgSW50NTJEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpT
VmFsdWUoZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUyKCkp
KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBqaXQucnNoaWZ0NjQoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
b3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBVbmJveGVkU3Ry
aWN0SW50NTJJbkdQUjoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShjcHUuZ3ByPGludDY0X3Q+KHJlY292ZXJ5LmdwcigpKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0KICAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShleGVjLT5yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKS51bmJveGVkU3RyaWN0SW50NTIoKSkpOworICAgICAgICAgICAg
aml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAjZW5kaWYKIAogICAgICAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKLSAg
ICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgcHVyaWZ5TmFOKGNwdS5mcHIocmVjb3ZlcnkuZnByKCkpKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0g
ICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHB1cmlmeU5hTihleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
KS51bmJveGVkRG91YmxlKCkpKSk7CisgICAgICAgICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5wdXJpZnlOYU4oRlBS
SW5mbzo6ZnBSZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5ib3hE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisjZWxzZQorICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisjZW5kaWYKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIHJlY292ZXJ5LmNvbnN0YW50KCkpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgICAgICBqaXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQo
KSkpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CisjZWxzZQorICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSksCisg
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Iob3BlcmFuZCkpOworICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2FkKCkpLAorICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CisjZW5kaWYKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkOgpAQCAtNjAwLDMxICs2ODEsMTMgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChD
b250ZXh0JiBjbwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTmVlZCB0byBlbnN1cmUgdGhh
dCB0aGUgc3RhY2sgcG9pbnRlciBhY2NvdW50cyBmb3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNh
Z2UgYXQgZXhpdC4gVGhpcwotICAgIC8vIGNvdWxkIHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUg
REZHIHVzZWQuIFdlIG5lZWQgdG8gZG8gaXQgYmVmb3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0
cwotICAgIC8vIHVzZWQgYnkgYmFzZWxpbmUuCi0gICAgY3B1LnNwKCkgPSBjcHUuZnA8dWludDhf
dCo+KCkgLSAoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5yZXF1aXJlZFJlZ2lz
dGVyQ291bnRGb3JFeGl0ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRo
ZSBERkcgY2FsbGVlIHNhdmVzIGFuZCB0aGVuIHNhdmUgdGhlIG9uZXMgdGhlIGJhc2VsaW5lIEpJ
VCB1c2VzLgotICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBjb2RlQmxvY2spOwot
ICAgIHNhdmVDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jayk7Ci0KLSAg
ICAvLyBUaGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJp
ZXMgYmVsb3cuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjcHUuZ3ByKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikgPSBUYWdUeXBlTnVtYmVyOwotICAgIGNwdS5ncHIoR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKSA9IFRhZ1R5cGVOdW1iZXIgfCBUYWdCaXRUeXBlT3RoZXI7Ci0jZW5k
aWYKLQotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGNvbnRleHQpOwotCiAgICAg
Ly8gTm93IHRoYXQgdGhpbmdzIG9uIHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJn
dW1lbnRzIHJlY292ZXJ5LiBXZSBhc3N1bWUgdGhhdCBhcmd1bWVudHMKICAgICAvLyByZWNvdmVy
aWVzIGRvbid0IHJlY3Vyc2l2ZWx5IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3Qg
dHJ5IHRvIGFzc3VtZSB0aGF0IHRoZXkgb25seQogICAgIC8vIHJlZmVyIHRvIGNlcnRhaW4gcmFu
Z2VzIG9mIGxvY2Fscy4gSGVuY2Ugd2h5IHdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlLCBvbmNlIHRo
ZSBzdGFjayBpcyBzZW5zaWJsZS4KICAgICAvLyBOb3RlIHRoYXQgd2UgYWxzbyByb3VnaGx5IGFz
c3VtZSB0aGF0IHRoZSBhcmd1bWVudHMgbWlnaHQgc3RpbGwgYmUgbWF0ZXJpYWxpemVkIG91dHNp
ZGUgb2YgaXRzCiAgICAgLy8gaW5saW5lIGNhbGwgZnJhbWUgc2NvcGUgLSBidXQgZm9yIG5vdyB0
aGUgREZHIHdvdWxkbid0IGRvIHRoYXQuCiAKLSAgICBlbWl0UmVzdG9yZUFyZ3VtZW50cyhjb250
ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKKyAgICBlbWl0UmVzdG9yZUFy
Z3VtZW50cyhqaXQsIG9wZXJhbmRzKTsKIAogICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CiAgICAgLy8g
dGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQs
IHNvIHRoZSBleGVjdXRlCkBAIC02NjIsMTYxICs3MjUsMjYgQEAgdm9pZCBPU1JFeGl0OjpleGVj
dXRlT1NSRXhpdChDb250ZXh0JiBjbwogICAgIC8vIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdl
IHNldCB0aGUgY291bnRlciB0bwogICAgIC8vIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4KIAotICAgIGlmIChVTkxJS0VMWShjb2RlQmxvY2stPnVwZGF0ZU9TUkV4aXRDb3Vu
dGVyQW5kQ2hlY2tJZk5lZWRUb1Jlb3B0aW1pemUoZXhpdFN0YXRlKSA9PSBDb2RlQmxvY2s6Ok9w
dGltaXplQWN0aW9uOjpSZW9wdGltaXplTm93KSkKLSAgICAgICAgdHJpZ2dlclJlb3B0aW1pemF0
aW9uTm93KGJhc2VsaW5lQ29kZUJsb2NrLCAmZXhpdCk7Ci0KLSAgICByZWlmeUlubGluZWRDYWxs
RnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKLSAgICBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIGV4
aXQpOwotfQotCi1zdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0IE9TUkV4
aXRCYXNlJiBleGl0KQotewotICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OwotICAgIEZyYW1l
IGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBl
eGl0Ci0gICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKLSAgICBBU1NFUlQo
b3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7Ci0gICAgZnJhbWUuc2V0T3BlcmFuZDxDb2RlQmxvY2sqPihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2ssIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIGNvbnN0IENvZGVP
cmlnaW4qIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3Jp
Z2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdp
biA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2Fs
bHMoKSkgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKmNv
ZGVPcmlnaW4sIG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kIHRydWVDYWxsZXJDYWxsS2luZDsKLSAgICAgICAgQ29kZU9yaWdpbiogdHJ1
ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoJnRy
dWVDYWxsZXJDYWxsS2luZCk7Ci0gICAgICAgIHZvaWQqIGNhbGxlckZyYW1lID0gY3B1LmZwKCk7
Ci0KLSAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5l
Q2FsbEZyYW1lLT5pc1RhaWwoKSk7Ci0gICAgICAgICAgICB2b2lkKiByZXR1cm5QQyA9IGZyYW1l
LmdldDx2b2lkKj4oQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKTsKLSAgICAgICAgICAgIGZy
YW1lLnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCByZXR1cm5Q
Qyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZSA9IGZyYW1lLmdldDx2b2lkKj4oQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKCp0cnVlQ2FsbGVyLCBvdXRlcm1vc3RCYXNlbGlu
ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRy
dWVDYWxsZXItPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
bnVsbHB0cjsKLQotICAgICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKLSAg
ICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgotICAgICAgICAgICAgY2FzZSBJ
bmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3RWYXJhcmdzOgotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxs
OgotICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsVmFyYXJnczogewot
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAg
ICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0KLSAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwotCi0gICAgICAgICAgICAgICAganVtcFRh
cmdldCA9IHN0dWJJbmZvLT5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICAgICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2Fs
bGVyLT5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKKyAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7CiAKLSAgICAgICAgICAgIGZyYW1l
LnNldDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpLCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgfQorICAgIC8vIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCiAKLSAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx2b2lkKj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxvY2spOwotCi0gICAgICAg
IC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3MgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
LgotICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUgaXMgYSB0YWlsIGNhbGwgdGhhdCB3
aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIsIHdlIG5lZWQgdG8KLSAgICAg
ICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhlIHRhZyByZWdpc3RlcnMgYWxyZWFk
eSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMgZnJhbWUuCi0gICAgICAgIHNhdmVP
ckNvcHlDYWxsZWVTYXZlc0Zvcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jaywgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLCAhdHJ1ZUNhbGxlcik7Ci0KLSAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFBheWxvYWRPZmZzZXQsIGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgICAgICBBU1NFUlQoY2FsbGVyRnJh
bWUpOwotICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWVPZmZzZXQoKSwgY2FsbGVyRnJhbWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJ
bmRleCkuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXND
bG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNv
IHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleDsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwotICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVp
bnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwotICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpD
ZWxsVGFnKSk7Ci0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQot
ICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZUNvbnN0YW50KCkpOwotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0
aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAg
fQorICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKIAotICAgIC8vIERvbid0
IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxp
bmUgdGFpbCBjYWxscwotICAgIGlmIChjb2RlT3JpZ2luKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KS5iaXRzKCk7Ci0jZWxzZQotICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKLSNlbmRpZgotICAg
ICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7Ci0gICAgfQorICAgIC8vIEFuZCBmaW5pc2gu
CisgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KHZtLCBqaXQsIGV4aXQpOwogfQogCi1zdGF0aWMg
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaywgT1NSRXhpdCYg
ZXhpdCkKK3ZvaWQgSklUX09QRVJBVElPTiBPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3Bl
Y3VsYXRpb25GYWlsdXJlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogZGVidWdJbmZvUmF3LCB2b2lk
KiBzY3JhdGNoKQogewotICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0U3Rh
dGUuZ2V0KCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKLSAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8v
IFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFu
aXNtIHdpbGwgZXhlY3V0ZSB0aGlzIGZlbmNlLgotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJh
c2VsaW5lQ29kZUJsb2NrKTsKLQotICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVz
IC0tIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sgLS0KLSAgICAvLyBiZWNh
dXNlIHdlIGRvbid0IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBw
cm9maWxlIHRoYXQKLSAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2Fz
ZSBvZiAiZigpIHsgYSgpOyBiKCk7IH0iLCBpZiBib3RoCi0gICAgLy8gYSBhbmQgYiBhcmUgaW5s
aW5lZCwgd2UgbWlnaHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCi0g
ICAgLy8gZnJvbSBhLgotICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHNob3VsZCByZW1lbWJlciB3aGljaCBDb2RlQmxvY2sgb3ducwotICAgIC8vIHRoZSB2YWx1ZSBw
cm9maWxlLgotICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKLSAg
ICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewotICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICBjb250ZXh0LmZwKCkgPSBjb250ZXh0LmZwPHVpbnQ4X3QqPigpICsgZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0KLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OwotICAg
IEFTU0VSVChqdW1wVGFyZ2V0KTsKLQotICAgIGNvbnRleHQuc3AoKSA9IGNvbnRleHQuZnA8dWlu
dDhfdCo+KCkgKyBleGl0U3RhdGUtPnN0YWNrUG9pbnRlck9mZnNldDsKLSAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRv
IG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0u
Y2FsbEZyYW1lRm9yQ2F0Y2ggPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7Ci0gICAgfQotCi0g
ICAgdm0udG9wQ2FsbEZyYW1lID0gY29udGV4dC5mcDxFeGVjU3RhdGUqPigpOwotICAgIGNvbnRl
eHQucGMoKSA9IGp1bXBUYXJnZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50T1NSRXhpdChDb250
ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNvbnN0IE9TUkV4aXQmIGV4aXQp
Ci17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gY29udGV4dC5mcDxFeGVjU3RhdGUqPigpOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgU3BlY3VsYXRp
b25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZh
aWx1cmVEZWJ1Z0luZm8qPihkZWJ1Z0luZm9SYXcpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZGVidWdJbmZvLT5jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKLSAgICBFeGl0S2luZCBraW5kID0gZXhpdC5tX2tpbmQ7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4OwotCiAgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAiLCAqY29kZUJs
b2NrKTsKLSAgICBkYXRhTG9nKCIgQCBleGl0ICMiLCBvc3JFeGl0SW5kZXgsICIgKGJjIyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiLCAiLCBleGl0S2luZFRvU3RyaW5nKGtpbmQpLCAiKSB3aXRoICIpOwor
ICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIHZtLT5vc3JFeGl0SW5kZXgsICIgKGJjIyIsIGRlYnVn
SW5mby0+Ynl0ZWNvZGVPZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoZGVidWdJbmZvLT5r
aW5kKSwgIikgd2l0aCAiKTsKICAgICBpZiAoYWx0ZXJuYXRpdmUpIHsKICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICJleGVjdXRlQ291bnRlciA9ICIsIGFsdGVybmF0aXZlLT5qaXRFeGVj
dXRlQ291bnRlcigpLApAQCAtODI2LDE4ICs3NTQsMjEgQEAgc3RhdGljIHZvaWQgcHJpbnRPU1JF
eGl0KENvbnRleHQmIGNvbnRleAogICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2Rl
IGJsb2NrIChpLmUuIHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKICAgICBkYXRhTG9nKCIsIG9z
ckV4aXRDb3VudGVyID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKICAg
ICBkYXRhTG9nKCIgICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7CisgICAgY2hhciogc2NyYXRj
aFBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKICAgICAgICAg
R1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgIGRhdGFMb2coIiAi
LCBjb250ZXh0Lmdwck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQq
PihncHIpKSk7CisgICAgICAgIGRhdGFMb2coIiAiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKSwg
IjoiLCBSYXdQb2ludGVyKCpyZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHNjcmF0Y2hQb2lu
dGVyKSkpOworICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OwogICAgIH0KICAgICBkYXRhTG9nKCJcbiIpOwogICAgIGRhdGFMb2coIiAgICBGUFJzIGF0IHRp
bWUgb2YgZXhpdDoiKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBGUFJSZWcgZnByID0gRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKTsKLSAgICAgICAgZGF0YUxvZygiICIsIGNvbnRleHQuZnByTmFtZShmcHIpLCAi
OiIpOwotICAgICAgICB1aW50NjRfdCBiaXRzID0gY29udGV4dC5mcHI8dWludDY0X3Q+KGZwcik7
Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnRleHQuZnByKGZwcik7CisgICAgICAgIGRhdGFM
b2coIiAiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKSwgIjoiKTsKKyAgICAgICAgdWludDY0X3Qg
Yml0cyA9ICpyZWludGVycHJldF9jYXN0X3B0cjx1aW50NjRfdCo+KHNjcmF0Y2hQb2ludGVyKTsK
KyAgICAgICAgZG91YmxlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGRvdWJsZSo+KHNj
cmF0Y2hQb2ludGVyKTsKICAgICAgICAgZGF0YUxvZ0YoIiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOworICAgICAgICBzY3JhdGNoUG9pbnRlciArPSBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwogICAgIH0KICAgICBkYXRhTG9nKCJcbiIpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDIyMjAwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxNyArMzMsMTAgQEAKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCi0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFBy
b2JlIHsKLWNsYXNzIENvbnRleHQ7Ci19IC8vIG5hbWVzcGFjZSBQcm9iZQotCi1uYW1lc3BhY2Ug
UHJvZmlsZXIgewotY2xhc3MgT1NSRXhpdDsKLX0gLy8gbmFtZXNwYWNlIFByb2ZpbGVyCitjbGFz
cyBDQ2FsbEhlbHBlcnM7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC05OCwzMiArOTEsNiBAQCBw
cml2YXRlOgogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKIH07CiAKLXN0cnVj
dCBPU1JFeGl0U3RhdGUgOiBSZWZDb3VudGVkPE9TUkV4aXRTdGF0ZT4gewotICAgIE9TUkV4aXRT
dGF0ZShPU1JFeGl0QmFzZSYgZXhpdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2ssIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3Bl
Y3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnksIHB0cmRpZmZfdCBzdGFja1BvaW50ZXJPZmZzZXQs
IGludDMyX3QgYWN0aXZlVGhyZXNob2xkLCBkb3VibGUgbWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVz
aG9sZCwgdm9pZCoganVtcFRhcmdldCkKLSAgICAgICAgOiBleGl0KGV4aXQpCi0gICAgICAgICwg
Y29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAgICAgLCBiYXNlbGluZUNvZGVCbG9jayhiYXNlbGlu
ZUNvZGVCbG9jaykKLSAgICAgICAgLCBvcGVyYW5kcyhvcGVyYW5kcykKLSAgICAgICAgLCByZWNv
dmVyeShyZWNvdmVyeSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXJPZmZzZXQoc3RhY2tQb2ludGVy
T2Zmc2V0KQotICAgICAgICAsIGFjdGl2ZVRocmVzaG9sZChhY3RpdmVUaHJlc2hvbGQpCi0gICAg
ICAgICwgbWVtb3J5VXNhZ2VBZGp1c3RlZFRocmVzaG9sZChtZW1vcnlVc2FnZUFkanVzdGVkVGhy
ZXNob2xkKQotICAgICAgICAsIGp1bXBUYXJnZXQoanVtcFRhcmdldCkKLSAgICB7IH0KLQotICAg
IE9TUkV4aXRCYXNlJiBleGl0OwotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2s7Ci0gICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3Bl
cmFuZHM7Ci0gICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zlcnk7Ci0gICAgcHRyZGlmZl90
IHN0YWNrUG9pbnRlck9mZnNldDsKLSAgICB1aW50MzJfdCBhY3RpdmVUaHJlc2hvbGQ7Ci0gICAg
ZG91YmxlIG1lbW9yeVVzYWdlQWRqdXN0ZWRUaHJlc2hvbGQ7Ci0gICAgdm9pZCoganVtcFRhcmdl
dDsKLQotICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgeyBudWxscHRyIH07Ci19
OwotCiAvLyA9PT0gT1NSRXhpdCA9PT0KIC8vCiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMg
aG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKQEAgLTEzMSwyMCArOTgsMzIgQEAg
c3RydWN0IE9TUkV4aXRTdGF0ZSA6IFJlZkNvdW50ZWQ8T1NSRXhpdAogc3RydWN0IE9TUkV4aXQg
OiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOworICAgIHN0YXRp
YyB2b2lkIEpJVF9PUEVSQVRJT04gY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwogCi0gICAgUmVmUHRyPE9TUkV4aXRTdGF0ZT4gZXhpdFN0YXRlOworICAgIHVuc2lnbmVk
IG1fcGF0Y2hhYmxlQ29kZU9mZnNldCB7IDAgfTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbV9jb2RlOwogICAgIAogICAgIEpTVmFsdWVTb3VyY2UgbV9qc1ZhbHVlU291cmNlOwog
ICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CiAgICAgCiAg
ICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OwogCisgICAgdm9pZCBzZXRQYXRjaGFibGVDb2Rl
T2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBnZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CisgICAgQ29kZUxv
Y2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OworICAg
IHZvaWQgY29ycmVjdEp1bXAoTGlua0J1ZmZlciYpOworCiAgICAgdW5zaWduZWQgbV9zdHJlYW1J
bmRleDsKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2spCiAgICAgewogICAgICAgICBPU1JFeGl0QmFzZTo6Y29uc2lk
ZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9tREZH
KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgY29tcGlsZUV4aXQoQ0NhbGxI
ZWxwZXJzJiwgVk0mLCBjb25zdCBPU1JFeGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVy
eT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CisgICAgc3RhdGljIHZvaWQgZW1pdFJlc3RvcmVB
cmd1bWVudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mKTsK
KyAgICBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxh
dGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB9Owog
CiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJ
KHJldmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMg
d2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0
NS4KIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhp
dEJhc2UmIGV4aXQpCiB7CiAgICAgaWYgKCFleGl0S2luZE1heUpldHRpc29uKGV4aXQubV9raW5k
KSkgewpAQCAtMTQ0LDcgKzE0Myw2IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBl
cnMmIGppdCwKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLS8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyB3aGVuIHdlIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MTQ1Lgogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
bid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQK
QEAgLTI1NCw3ICsyNTIsNiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzCiAgICAgfQogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHN0YXRpYyB2b2lkIG9z
cldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2Ny
YXRjaCkKIHsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGppdC5iYXJyaWVyQnJhbmNoV2l0aG91dEZlbmNlKG93bmVyKTsKQEAgLTI3NSw3ICsy
NzIsNiBAQCBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAgICAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOwogfQogCi0vLyBGSVhNRTogcmVtb3Zl
IHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTE0NS4KIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogewogICAgIGppdC5tZW1vcnlGZW5jZSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQw
LDcgKzQwLDYgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYsIGNvbgogdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNl
Jik7CiB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYsIENDYWxsSGVscGVycyYsIGNvbnN0
IE9TUkV4aXRCYXNlJik7CiAKLS8vIEZJWE1FOiBUaGlzIHdvbid0IGJlIG5lZWRlZCBvbmNlIHdl
IGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1LgogdGVt
cGxhdGUgPHR5cGVuYW1lIEpJVENvZGVUeXBlPgogdm9pZCBhZGp1c3RGcmFtZUFuZFN0YWNrSW5P
U1JFeGl0Q29tcGlsZXJUaHVuayhNYWNyb0Fzc2VtYmxlciYgaml0LCBWTSogdm0sIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4Nyw2ICsxNDg3
LDYyIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG8KICAgICAgICAg
ZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudFN0YXJ0LCBsZW5ndGgsIGNhbGxlZSk7CiB9CiAKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdF
eGl0KEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpT
RnVuY3Rpb24qIGNhbGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRhcmdldCgmdm0sIGV4ZWMp
OworICAgIAorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVD
YWxsRnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRDb3VudCAtIDE7CisgICAg
dW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKKyAgICBEaXJlY3RBcmd1bWVudHMq
IHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAorICAgICAgICB2bSwgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCksIGxlbmd0aCwgY2Fw
YWNpdHkpOworICAgIAorICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxl
ZSk7CisgICAgCisgICAgUmVnaXN0ZXIqIGFyZ3VtZW50cyA9CisgICAgICAgIGV4ZWMtPnJlZ2lz
dGVycygpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
OiAwKSArCisgICAgICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2ts
eSh2bSwgaSwgYXJndW1lbnRzW2ldLmpzVmFsdWUoKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3Vt
ZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdGFyZ2V0
KCZ2bSwgZXhlYyk7CisgICAgCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXAp
OworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrOworICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZy
YW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50
IC0gMTsKKyAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IENsb25lZEFyZ3VtZW50czo6Y3Jl
YXRlRW1wdHkoCisgICAgICAgIHZtLCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5jbG9uZWRB
cmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVlLCBsZW5ndGgpOworICAgIAorICAgIFJlZ2lzdGVy
KiBhcmd1bWVudHMgPQorICAgICAgICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkgKworICAgICAgICBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0KDApOworICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0t
OykKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBhcmd1bWVudHNbaV0u
anNWYWx1ZSgpKTsKKworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVSZXN0KEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIq
IGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBh
cnJheVNpemUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMjIyMDA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1MCw3ICsxNTAsOSBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikg
V1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdGl2
YXRpb25EaXJlY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5bWJvbFRhYmxl
KiwgRW5jb2RlZEpTVmFsdWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZURpcmVjdEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90IGxlbmd0aCwg
aW50MzJfdCBtaW5DYXBhY2l0eSk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUq
LCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBj
YWxsZWUsIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVD
YWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1
bmN0aW9uKiBjYWxsZWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJl
c3QoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwLCB1bnNpZ25lZCBhcnJheVNpemUpOwogZG91YmxlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMjIw
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDEyICs0MCw2NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICBqaXQucHJvYmUoT1NSRXhp
dDo6ZXhlY3V0ZU9TUkV4aXQsIHZtKTsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJl
Zm9yZSB3ZSB1c2UgdGhlIHNjcmF0Y2ggYnVmZmVyIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBhbHNv
IHVzZXMgdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgIGFkanVzdEZyYW1lQW5kU3RhY2tJbk9TUkV4
aXRDb21waWxlclRodW5rPERGRzo6SklUQ29kZT4oaml0LCB2bSwgSklUQ29kZTo6REZHSklUKTsK
KyAgICAKKyAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMp
OworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZv
clNpemUoc2NyYXRjaFNpemUpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbHNlCisgICAgICAgIGppdC5zdG9yZTMy
KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgfQorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZl
ciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGwg
R0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1
cmluZyBjYWxsLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6
ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICAvLyBT
ZXQgdXAgb25lIGFyZ3VtZW50LgorI2lmIENQVShYODYpCisgICAgaml0LnBva2UoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIDApOworI2Vsc2UKKyAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyNlbmRpZgorCisgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKKworICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NP
ZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDApKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICB9
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2kpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZlciAr
IGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgaml0LmxvYWQzMihi
dWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgIH0KKyAgICAK
KyAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhp
dEp1bXBEZXN0aW5hdGlvbikpOworICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoIkRGRyBPU1IgZXhpdCB0aHVuayIpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOworICAgIAorICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRGRyBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5r
IikpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihW
TSogdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHJldmlzaW9u
IDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIERGRyB7
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSopOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDYgQEAgRXhlY3V0YWJsZUJhc2UqIEFzc2VtYmx5SGVscGVyczo6ZXhlY3V0YQogICAg
IHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpOwogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXgg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJseUhlbHBlcnM6OmRlY29kZWRDb2RlTWFw
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CkBAIC04MjEsNiArODIwLDYxIEBAIGJvb2wgQXNz
ZW1ibHlIZWxwZXJzOjpzdG9yZVdhc21Db250ZXh0TmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbChWTSYgdm0sIFZfRGVi
dWdPcGVyYXRpb25fRVBQIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3sKKyAgICBzaXplX3Qg
c2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpOworICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CisgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVl
Kj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBp
KTsKKyNlbHNlCisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVy
ICsgaSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgfQorCisgICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9m
IHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJ
bmZvOjpyZWdUMCk7CisKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNKSB8fCBDUFUoQVJNNjQp
IHx8IENQVShNSVBTKQorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZmZXIpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHNlbGVjdFNjcmF0Y2hH
UFIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7CisjZWxpZiBDUFUoWDg2KQorICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIDApOworICAgIHBva2UoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIDEpOwor
ICAgIHBva2UoVHJ1c3RlZEltbVB0cihidWZmZXIpLCAyKTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QwOworI2Vsc2UKKyNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhp
cyBwbGF0Zm9ybS4iCisjZW5kaWYKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoKTsKKwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5n
dGgoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBH
UFJJbmZvOjpyZWdUMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVm
ZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBsb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBsb2FkNjQoYnVm
ZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQorICAgICAgICBsb2FkMzIo
YnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZW5kaWYKKyAgICB9Cit9CisK
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIpCiB7CiAjaWYgTlVNQkVS
X09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyMjAwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
Miw2ICs5OTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUNTsKICAg
ICB9CiAKKyAgICAvLyBBZGQgYSBkZWJ1ZyBjYWxsLiBUaGlzIGNhbGwgaGFzIG5vIGVmZmVjdCBv
biBKSVQgY29kZSBleGVjdXRpb24gc3RhdGUuCisgICAgdm9pZCBkZWJ1Z0NhbGwoVk0mLCBWX0Rl
YnVnT3BlcmF0aW9uX0VQUCBmdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOworCiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVja3MgLSBha2lu
IHRvIEFTU0VSVHMuCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZvaWQgaml0QXNzZXJ0SXNJ
bnQzMihHUFJSZWcpOwpAQCAtMTQ2Miw3ICsxNDY1LDYgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAotICAgIC8v
IEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHdlIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1MTQ1LgogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIAogICAgIHZvaWQgbWFrZVNwYWNl
T25TdGFja0ZvckNDYWxsKCk7CkBAIC0xNjU0LDcgKzE2NTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sqIG1fYmFzZWxpbmVDb2RlQmxv
Y2s7CiAKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBmaXggaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KICAgICBIYXNoTWFwPENvZGVCbG9j
ayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+PiBtX2RlY29kZWRDb2RlTWFwczsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyOSw3ICsyMzI5LDYgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSBm
aXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4KIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjIyMDA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0OCw3ICs0NDgsNiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dy
b3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkg
V1RGX0lOVEVSTkFMOwogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hl
biB3ZSBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0NS4K
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXp6KEV4
ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
T1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlck9TUkV4aXQuaAkocmV2aXNpb24gMjIyMDA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDggKzQzLDcg
QEAgcHVibGljOgogICAgIAogICAgIHVpbnQ2NF90KiBjb3VudGVyQWRkcmVzcygpIHsgcmV0dXJu
ICZtX2NvdW50ZXI7IH0KICAgICB1aW50NjRfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlcjsgfQotICAgIHZvaWQgaW5jQ291bnQoKSB7IG1fY291bnRlcisrOyB9Ci0KKyAgICAKICAg
ICBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMjIwMDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQ0LDkgKzM0NCwxMiBAQCBwdWJs
aWM6CiAgICAgdWludDMyX3QgdGFnKCkgY29uc3Q7CiAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29u
c3Q7CiAKLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIExMSW50IEMgTG9v
cCBpbnRlcnByZXRlciBhbmQgT1NSRXhpdCBjb2RlIHdobyBuZWVkcwotICAgIC8vIHN5bnRoZXNp
emUgSlNWYWx1ZSBmcm9tIGl0cyAicmVnaXN0ZXIicyBob2xkaW5nIHRhZyBhbmQgcGF5bG9hZCB2
YWx1ZXMuCisjaWYgIUVOQUJMRShKSVQpCisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSB1c2Vk
IGJ5IHRoZSBMTEludCBDIExvb3AgaW50ZXJwcmV0ZXIgd2hvIG5lZWRzCisgICAgLy8gc3ludGhl
c2l6ZSBKU1ZhbHVlIGZyb20gaXRzICJyZWdpc3RlciJzIGhvbGRpbmcgdGFnIGFuZCBwYXlsb2Fk
CisgICAgLy8gdmFsdWVzLgogICAgIGV4cGxpY2l0IEpTVmFsdWUoaW50MzJfdCB0YWcsIGludDMy
X3QgcGF5bG9hZCk7CisjZW5kaWYKIAogI2VsaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvKgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5l
cy5oCShyZXZpc2lvbiAyMjIwMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkpCiAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7CiB9
CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmICFFTkFCTEUoSklUKQogaW5saW5lIEpTVmFs
dWU6OkpTVmFsdWUoaW50MzJfdCB0YWcsIGludDMyX3QgcGF5bG9hZCkKIHsKICAgICB1LmFzQml0
cy50YWcgPSB0YWc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDIyMjAwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3MSw2ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogdGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3c7CiAgICAgSW5zdHJ1Y3Rpb24qIHRhcmdldEludGVycHJldGVyUENGb3JUaHJv
dzsKICAgICB1aW50MzJfdCBvc3JFeGl0SW5kZXg7CisgICAgdm9pZCogb3NyRXhpdEp1bXBEZXN0
aW5hdGlvbjsKICAgICBib29sIGlzRXhlY3V0aW5nSW5SZWdFeHBKSVQgeyBmYWxzZSB9OwogCiAg
ICAgLy8gVGhlIHRocmVhZGluZyBwcm90b2NvbCBoZXJlIGlzIGFzIGZvbGxvd3M6Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>