<?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>183623</bug_id>
          
          <creation_ts>2018-03-13 19:37:07 -0700</creation_ts>
          <short_desc>Enhance the MacroAssembler and LinkBuffer to support pointer profiling.</short_desc>
          <delta_ts>2019-11-12 14:22:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1406335</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-13 19:37:07 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406336</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-13 19:37:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/38443314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406337</commentid>
    <comment_count>2</comment_count>
      <attachid>335755</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-13 19:46:14 -0700</bug_when>
    <thetext>Created attachment 335755
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406339</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-13 19:48:05 -0700</bug_when>
    <thetext>Attachment 335755 did not pass style-queue:


ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:321:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:326:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:330:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:345:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/assembler/LinkBuffer.h:348:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 5 in 70 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406445</commentid>
    <comment_count>4</comment_count>
      <attachid>335755</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-03-14 10:55:12 -0700</bug_when>
    <thetext>Comment on attachment 335755
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406482</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-14 13:06:27 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r229609: &lt;http://trac.webkit.org/r229609&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589636</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-11-12 14:22:29 -0800</bug_when>
    <thetext>*** Bug 183622 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335755</attachid>
            <date>2018-03-13 19:46:14 -0700</date>
            <delta_ts>2018-03-14 10:55:12 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-183623.patch</filename>
            <type>text/plain</type>
            <size>160825</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI5NTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MSBA
QAorMjAxOC0wMy0xMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
RW5oYW5jZSB0aGUgTWFjcm9Bc3NlbWJsZXIgYW5kIExpbmtCdWZmZXIgdG8gc3VwcG9ydCBwb2lu
dGVyIHByb2ZpbGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MzYyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzg0NDMzMTQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gQWRkZWQgYSBQdHJU
YWcgYXJndW1lbnQgdG8gaW5kaXJlY3QgY2FsbCgpIGFuZCBpbmRpcmVjdCBqdW1wKCkgTWFjcm9B
c3NlbWJsZXIKKyAgICAgICAgICAgZW1pdHRlcnMgdG8gc3VwcG9ydCBwb2ludGVyIHByb2ZpbGlu
Zy4KKworICAgICAgICAyLiBBbHNvIGFkZGVkIHRhZ1B0cigpLCB1bnRhZ1B0cigpLCBhbmQgcmVt
b3ZlUHRyVGFnKCkgcGxhY2Vob2xkZXIgbWV0aG9kcy4KKworICAgICAgICAzLiBBZGRlZCBhIFB0
clRhZyB0byBMaW5rQnVmZmVyIGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpIGFuZCBj
bGllbnRzLgorCisgICAgICAgIDQuIFVwZGF0ZWQgY2xpZW50cyB0byBwYXNzIGEgUHRyVGFnLiAg
Rm9yIHRoZSBtb3N0IHBhcnQsIEkganVzdCBhcHBseSBOb1B0clRhZyBhcworICAgICAgICAgICBh
IHBsYWNlaG9sZGVyIHVudGlsIHdlIGhhdmUgdGltZSB0byBhbmFseXplIHdoYXQgcG9pbnRlciBw
cm9maWxlIGVhY2ggY2xpZW50CisgICAgICAgICAgIHNpdGUgaGFzIGxhdGVyLgorICAgIAorICAg
ICAgICA1LiBBcHBseSBQdHJUYWdzIHRvIHRoZSBZYXJySklULgorCisgICAgICAgICogYXNzZW1i
bGVyL0FSTTY0QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5r
SnVtcE9yQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVz
cyk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnRhZ1B0cik6CisgICAg
ICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnVudGFnUHRyKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cmVtb3ZlUHRyVGFnKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFsaXpl
Q29kZVdpdGhvdXREaXNhc3NlbWJseSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmZpbmFs
aXplQ29kZVdpdGhEaXNhc3NlbWJseSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGluayk6CisgICAgICAgIChKU0M6OkxpbmtC
dWZmZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6Omxv
Y2F0aW9uT2YpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpjYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJl
YWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpjYWxsKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bGlua0NhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3
Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Omp1bXApOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZWxhdGl2ZVRhYmxlSnVtcCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTXY3OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlTExJbnRDb2RlUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVMTEludENvZGVSZWYpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OkZ1bmN0aW9uUHRyKToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjogY29uc3QpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6cmV0YWdnZWRDb2RlIGNvbnN0KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6
anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6Y2FsbCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Njo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpqdW1wKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODY6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlcjo6cHJvYmUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6anVt
cCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpjYWxsKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4
Nl82NDo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpyZWFkQ2Fs
bFRhcmdldCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6Omludm9rZSk6CisgICAgICAgICogYjMvQjNDb21w
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUpOgorICAgICAgICAqIGIzL0IzTG93
ZXJNYWNyb3MuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKiBi
My9haXIvdGVzdGFpci5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6Omludm9rZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SW50ZXJwcmV0ZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEVudHJ5U3dpdGNoU2ltcGxlKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RFbnRyeVN3aXRjaE5vRW50cnlTd2l0Y2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEVu
dHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3
aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vblRyaXZpYWxFbnRyeXBvaW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RFbnRyeVN3aXRjaExvb3ApOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6
U2xvd1BhdGhDYWxsR2VuZXJhdG9yV2l0aEFyZ3VtZW50czo6Z2VuZXJhdGVJbXBsKToKKyAgICAg
ICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpsaW5rQ29kZUlu
bGluZSk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZUNhdGNoRW50cnlwb2ludCk6
CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmFwcGVuZENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRGaW5hbGl6ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmVtaXRSZXN0b3Jl
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCk6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6b3NyV3JpdGVC
YXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpv
c3JFeGl0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6Om9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6Om9zckVudHJ5VGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToKKyAgICAgICAgKiBmdGwv
RlRMTGF6eVNsb3dQYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3NTcHJlYWQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVD
YWxsRXZhbCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExP
U1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRpb25UaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAg
ICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCk6CisgICAg
ICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6Omp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjpqaXRX
cml0ZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
bGluayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENhbGwp
OgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoKKyAgICAgICAgKEpTQzo6aXNQcm9maWxlRW1w
dHkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFN0dWJSb3V0aW5lLmg6
CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpyZWFkQ2FsbFRhcmdl
dCk6CisgICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXNl
dFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9TbG93UGF0aENhbGwuaDoKKyAgICAgICAgKEpTQzo6
SklUU2xvd1BhdGhDYWxsOjpjYWxsKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmNhbGxEb3VibGVUb0RvdWJsZSk6CisgICAg
ICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnNsb3dQYXRoRm9y
KToKKyAgICAgICAgKEpTQzo6bGlua0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxUaHVua0Zvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp1bnJlYWNoYWJsZUdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVy
YXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2VuZXJhdGVUaHVua1dpdGhKdW1wVG8pOgorICAgICAgICAoSlNDOjpMTEludDo6ZnVu
Y3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkxMSW50Ojpm
dW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpM
TEludDo6ZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OnByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6Om1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL1B0clRhZy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUp
OgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3
YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6dGhyb3dTdGFja092ZXJmbG93RnJvbVdhc21UaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdUaWVyVXBUaHVua0dlbmVy
YXRvcik6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OmhhbmRsZUJhZEk2NFVzZSk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKyAg
ICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJh
dG9yOjpsb2FkRnJvbUZyYW1lQW5kSnVtcCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjpsaW5rRGF0YUxhYmVscyk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxw
ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6WWFyckdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpqaXRDb21waWxlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisKIDIwMTgtMDMtMTIgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEdhcmRlbmluZzogc3BlY3VsYXRpdmUg
YnVpbGQgZml4IGZvciBXaW5DYWlyby4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCiAjaW5j
bHVkZSAiQXNzZW1ibGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8
bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC0zMDMzLDcgKzMwMzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoaXNDYWxsLCAobGluayA9PSBpc0NhbGwpIHx8IGRpc2Fzc2VtYmxlTm9wKGZyb20pKTsK
ICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsK
LSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Cisg
ICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZW1vdmVDb2RlUHRyVGFnPGludHB0cl90Pih0bykg
LSByZW1vdmVDb2RlUHRyVGFnPGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwogICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CiAKICAgICAg
ICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGlj
X2Nhc3Q8aW50PihvZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyMjk1
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVySGVscGVycy5oIgog
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdHJUYWcuaCIKICNpbmNsdWRlIDx3dGYv
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgpAQCAtODcxLDkgKzg3MiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2
YWx1ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCogZ2V0
TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCkKKyAgICAvLyBG
SVhNRTogcmVtb3ZlIHRoZSBkZWZhdWx0IFB0clRhZyB2YWx1ZSBvbmNlIHdlJ3ZlIHRhZ2dlZCBh
bGwgdGhlIGNsaWVudHMuCisgICAgc3RhdGljIHZvaWQqIGdldExpbmtlckFkZHJlc3Modm9pZCog
Y29kZSwgQXNzZW1ibGVyTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7
Ci0gICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUs
IGxhYmVsKTsKKyAgICAgICAgcmV0dXJuIHRhZ0NvZGVQdHIoQXNzZW1ibGVyVHlwZTo6Z2V0UmVs
b2NhdGVkQWRkcmVzcyhjb2RlLCBsYWJlbCksIHRhZyk7CiAgICAgfQogCiAgICAgc3RhdGljIHVu
c2lnbmVkIGdldExpbmtlckNhbGxSZXR1cm5PZmZzZXQoQ2FsbCBjYWxsKQpAQCAtOTUxLDYgKzk1
MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGJ1ZmZlci5zZXRDb2RlU2l6ZSh0YXJnZXRDb2RlU2l6
ZSk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBQ
dHJUYWcpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdQdHIoUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCkgeyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUHRyKFJlZ2lzdGVySUQs
IFB0clRhZykgeyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUHRyKFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZW1vdmVQdHJUYWcoUmVn
aXN0ZXJJRCkgeyB9CisKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyKCkK
ICAgICAgICAgOiBtX3JhbmRvbVNvdXJjZSgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQsMjAgKzQ0LDIwIEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVC
bG9jayoKICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7CiB9CiAKLUxpbmtC
dWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
KCkKK0xpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5KFB0clRhZyB0YWcpCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwogICAg
IAogICAgIEFTU0VSVChtX2RpZEFsbG9jYXRlKTsKICAgICBpZiAobV9leGVjdXRhYmxlTWVtb3J5
KQotICAgICAgICByZXR1cm4gQ29kZVJlZigqbV9leGVjdXRhYmxlTWVtb3J5KTsKKyAgICAgICAg
cmV0dXJuIENvZGVSZWYoKm1fZXhlY3V0YWJsZU1lbW9yeSwgdGFnKTsKICAgICAKLSAgICByZXR1
cm4gQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cihtX2NvZGUpKTsKKyAgICByZXR1cm4gQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cih0YWdDb2RlUHRyKG1fY29kZSwgdGFnKSkpOwogfQogCi1M
aW5rQnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJs
eShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK0xpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZl
cjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KFB0clRhZyB0YWcsIGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKQogewotICAgIENvZGVSZWYgcmVzdWx0ID0gZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5KCk7CisgICAgQ29kZVJlZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlz
YXNzZW1ibHkodGFnKTsKIAogICAgIGlmIChtX2FscmVhZHlEaXNhc3NlbWJsZWQpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CkBAIC03MCw3ICs3MCw4IEBAIExpbmtCdWZmZXI6OkNvZGVSZWYgTGlu
a0J1ZmZlcjo6ZmluYWxpemUKICAgICB2YV9lbmQoYXJnTGlzdCk7CiAgICAgb3V0LnByaW50Zigi
OlxuIik7CiAKLSAgICBvdXQucHJpbnRmKCIgICAgQ29kZSBhdCBbJXAsICVwKTpcbiIsIHJlc3Vs
dC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVzdWx0LmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzczxjaGFyKj4oKSArIHJlc3VsdC5zaXplKCkpOworICAgIHVpbnQ4X3QqIGV4ZWN1dGFibGVB
ZGRyZXNzID0gcmVtb3ZlQ29kZVB0clRhZzx1aW50OF90Kj4ocmVzdWx0LmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICBvdXQucHJpbnRmKCIgICAgQ29kZSBhdCBbJXAsICVwKTpcbiIs
IGV4ZWN1dGFibGVBZGRyZXNzLCBleGVjdXRhYmxlQWRkcmVzcyArIHJlc3VsdC5zaXplKCkpOwog
ICAgIAogICAgIENTdHJpbmcgaGVhZGVyID0gb3V0LnRvQ1N0cmluZygpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9u
IDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDEzIEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGxpbmsgb3Igc2V0IHZhbHVlcyBhdCBjb2RlIGdl
bmVyYXRpb24gdGltZS4KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3Bv
aW50ZXI8RnVuYz46OnR5cGU+Ojp2YWx1ZT4+CisgICAgdm9pZCBsaW5rKENhbGwgY2FsbCwgRnVu
YyBmdW5jTmFtZSwgUHRyVGFnIHRhZykKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uKGZ1bmNOYW1lLCB0YWcpOworICAgICAgICBsaW5rKGNhbGwsIGZ1bmN0aW9uKTsKKyAgICB9
CisKICAgICB2b2lkIGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICB7
CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwpAQCAtMTc1
LDcgKzE4Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1Nl
dChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6
TmVhcikpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJs
ZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSwK
KyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRM
aW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSwgTmVhckNhbGxQ
dHJUYWcpLAogICAgICAgICAgICAgY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkgPyBOZWFyQ2Fs
bE1vZGU6OlRhaWwgOiBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgIH0KIApAQCAtMTg0LDkg
KzE5MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGp1bXAubV9q
dW1wLm1fbGFiZWwpKSk7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25P
ZihMYWJlbCBsYWJlbCkKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBkZWZhdWx0IFB0clRhZyB2
YWx1ZSBvbmNlIHdlJ3ZlIHRhZ2dlZCBhbGwgdGhlIGNsaWVudHMuCisgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbG9jYXRpb25PZihMYWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5vUHRyVGFnKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyOjpnZXRM
aW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkpKTsKKyAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRy
ZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCksIHRhZykpOwogICAgIH0KIAog
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsb2NhdGlvbk9mKERhdGFMYWJlbFB0ciBsYWJl
bCkKQEAgLTIzMiw4ICsyNDAsOCBAQCBwdWJsaWM6CiAgICAgLy8gZmluYWxpemVDb2RlV2l0aG91
dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYgeW91IGhhdmUgeW91ciBvd24gd2F5IG9mCiAgICAg
Ly8gZGlzcGxheWluZyBkaXNhc3NlbWJseS4KICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBD
b2RlUmVmIGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENvZGVSZWYgZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAzKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBDb2RlUmVmIGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseShQdHJUYWcpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIENvZGVSZWYgZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KFB0
clRhZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDMsIDQp
OwogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFiZWwgbGFiZWwpCiAgICAgewpAQCAtMzA3
LDE5ICszMTUsMTkgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiB9OwogCi0jZGVmaW5lIEZJTkFMSVpFX0NP
REVfSUYoY29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCAuLi4pICBcCisjZGVmaW5lIEZJ
TkFMSVpFX0NPREVfSUYoY29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJU
YWcsIC4uLikgIFwKICAgICAoVU5MSUtFTFkoKGNvbmRpdGlvbikpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgPyAobGlua0J1ZmZlclJlZmVy
ZW5jZSkuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KF9fVkFfQVJHU19fKSBcCi0gICAgICAg
IDogKGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgp
KQorICAgICAgICA/IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRoRGlzYXNz
ZW1ibHkocmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykgXAorICAgICAgICA6IChsaW5rQnVmZmVy
UmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkocmVzdWx0UHRyVGFnKSkK
IAogYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiAKLSNkZWZpbmUg
RklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCAuLi4pICBc
Ci0gICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9j
aykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwg
X19WQV9BUkdTX18pCisjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1
ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCisgICAgRklOQUxJWkVfQ09ERV9J
Rigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNE
aXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FS
R1NfXykKIAogLy8gVXNlIHRoaXMgdG8gZmluYWxpemUgY29kZSwgbGlrZSBzbzoKIC8vCi0vLyBD
b2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJteSBzdXBlciB0aGluZ3kg
bnVtYmVyICVkIiwgbnVtYmVyKTsKKy8vIENvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgdGFnLCAibXkgc3VwZXIgdGhpbmd5IG51bWJlciAlZCIsIG51bWJlcik7CiAvLwog
Ly8gV2hpY2gsIGluIGRpc2Fzc2VtYmx5IG1vZGUsIHdpbGwgcHJpbnQ6CiAvLwpAQCAtMzMzLDEx
ICszNDEsMTEgQEAgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKgogLy8g
Tm90ZSB0aGF0IHRoZSBmb3JtYXQgc3RyaW5nIGFuZCBwcmludCBhcmd1bWVudHMgYXJlIG9ubHkg
ZXZhbHVhdGVkIHdoZW4gZHVtcERpc2Fzc2VtYmx5CiAvLyBpcyB0cnVlLCBzbyB5b3UgY2FuIGhp
ZGUgZXhwZW5zaXZlIGRpc2Fzc2VtYmx5LW9ubHkgY29tcHV0YXRpb25zIGluc2lkZSB0aGVyZS4K
IAotI2RlZmluZSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXJSZWZlcmVuY2UsIC4uLikgIFwKLSAg
ICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBK
U0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgX19W
QV9BUkdTX18pCisjZGVmaW5lIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlclJlZmVyZW5jZSwgcmVz
dWx0UHRyVGFnLCAuLi4pICBcCisgICAgRklOQUxJWkVfQ09ERV9JRigoSlNDOjpPcHRpb25zOjph
c3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlNDOjpPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSksIGxp
bmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAKLSNkZWZpbmUg
RklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlclJlZmVyZW5jZSwgLi4uKSAgXAotICAgIEZJTkFM
SVpFX0NPREVfSUYoKEpTQzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkp
LCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgRklOQUxJWkVfREZH
X0NPREUobGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCisgICAgRklO
QUxJWkVfQ09ERV9JRigoSlNDOjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlNDOjpP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHko
KSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjI5NTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwODQsNyArMzA4NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEp1bXBz
LCBjYWxscywgcmV0dXJucwogCi0gICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoKQorICAgIEFM
V0FZU19JTkxJTkUgQ2FsbCBjYWxsKFB0clRhZykKICAgICB7CiAgICAgICAgIEFzc2VtYmxlckxh
YmVsIHBvaW50ZXJMYWJlbCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAgICAgICAgIG1vdmVXaXRo
Rml4ZWRXaWR0aChUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lz
dGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMzA5NSwxNyArMzA5NSwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBDYWxsKGNhbGxMYWJlbCwgQ2FsbDo6TGlua2FibGUpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIEFMV0FZ
U19JTkxJTkUgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewogICAg
ICAgICBpbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwogICAgICAgICBtX2Fzc2VtYmxlci5i
bHIodGFyZ2V0KTsKICAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubGFiZWwoKSwgQ2Fs
bDo6Tm9uZSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUHRy
VGFnIHRhZykKICAgICB7CiAgICAgICAgIGxvYWQ2NChhZGRyZXNzLCBnZXRDYWNoZWREYXRhVGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwotICAgICAgICByZXR1cm4gY2FsbChkYXRhVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGNhbGwoZGF0YVRlbXBSZWdpc3RlciwgdGFnKTsK
ICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEp1bXAganVtcCgpCkBAIC0zMTE1LDI0ICszMTE1
LDI0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobGFiZWwsIG1fbWFrZUp1bXBQYXRj
aGFibGUgPyBBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSA6IEFzc2VtYmxlcjo6
SnVtcE5vQ29uZGl0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJn
ZXQpCisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5icih0YXJnZXQpOwogICAgIH0KIAotICAgIHZvaWQganVtcChBZGRy
ZXNzIGFkZHJlc3MpCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcywgUHRyVGFnKQogICAg
IHsKICAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmJyKGRhdGFUZW1wUmVnaXN0ZXIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGp1bXAoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgdm9p
ZCBqdW1wKEJhc2VJbmRleCBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBsb2FkNjQo
YWRkcmVzcywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKICAg
ICAgICAgbV9hc3NlbWJsZXIuYnIoZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgdm9p
ZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHZvaWQganVtcChBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcywgUHRyVGFnKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MubV9wdHIpLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRl
KCkpOwogICAgICAgICBsb2FkNjQoQWRkcmVzcyhkYXRhVGVtcFJlZ2lzdGVyKSwgZGF0YVRlbXBS
ZWdpc3Rlcik7CkBAIC0zNzY0LDcgKzM3NjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnVu
Y3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJl
dHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldChjYWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVFbnRyeVB0clRhZyk7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0aW9uTGFi
ZWwgaW5zdHJ1Y3Rpb25TdGFydCkKQEAgLTQ0MzEsMTEgKzQ0MzEsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBpZiAoIWNhbGwuaXNGbGFnU2V0KENhbGw6Ok5l
YXIpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rUG9pbnRlcihjb2RlLCBjYWxsLm1fbGFi
ZWwubGFiZWxBdE9mZnNldChSRVBBVENIX09GRlNFVF9DQUxMX1RPX1BPSU5URVIpLCBmdW5jdGlv
bi52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSwgY2Fs
bC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9PRkZTRVRfQ0FMTF9UT19QT0lOVEVSKSwg
ZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGwuaXNG
bGFnU2V0KENhbGw6OlRhaWwpKQotICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2Rl
LCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAgICAgICAgQXNzZW1ibGVy
OjpsaW5rSnVtcChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtDYWxsKGNvZGUs
IGNhbGwubV9sYWJlbCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgICAgICBBc3NlbWJsZXI6
OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogCiAgICAgQ2FjaGVkVGVtcFJlZ2lzdGVyIG1fZGF0YU1lbW9yeVRlbXBSZWdp
c3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNLmgJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzg5
LDE3ICs3ODksMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
bXAoKSk7CiAgICAgfQogCi0gICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHZv
aWQganVtcChSZWdpc3RlcklEIHRhcmdldCwgUHRyVGFnKQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuYngodGFyZ2V0KTsKICAgICB9CiAKLSAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNz
KQorICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MsIFB0clRhZykKICAgICB7CiAgICAgICAg
IGxvYWQzMihhZGRyZXNzLCBBUk1SZWdpc3RlcnM6OnBjKTsKICAgICB9CiAKLSAgICB2b2lkIGp1
bXAoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBqdW1wKEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRk
cmVzcy5tX3B0ciksIEFSTVJlZ2lzdGVyczo6UzApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhB
Uk1SZWdpc3RlcnM6OlMwLCAwKSwgQVJNUmVnaXN0ZXJzOjpwYyk7CkBAIC05ODgsMTIgKzk4OCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcCgpLCBDYWxs
OjpMaW5rYWJsZU5lYXJUYWlsKTsKICAgICB9CiAKLSAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0
YXJnZXQpCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7
CiAgICAgfQogCi0gICAgdm9pZCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIGNhbGwo
QWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBjYWxsMzIoYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLm9mZnNldCk7CiAgICAgfQpAQCAtMTExOCw3ICsxMTE4LDcgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci5tb3YoQVJNUmVnaXN0ZXJzOjpyMCwgQVJNUmVnaXN0ZXJz
OjpyMCk7CiAgICAgfQogCi0gICAgQ2FsbCBjYWxsKCkKKyAgICBDYWxsIGNhbGwoUHRyVGFnKQog
ICAgIHsKICAgICAgICAgZW5zdXJlU3BhY2UoMiAqIHNpemVvZihBUk1Xb3JkKSwgc2l6ZW9mKEFS
TVdvcmQpKTsKICAgICAgICAgbV9hc3NlbWJsZXIubG9hZEJyYW5jaFRhcmdldChBUk1SZWdpc3Rl
cnM6OlMxLCBBUk1Bc3NlbWJsZXI6OkFMLCB0cnVlKTsKQEAgLTE0OTksNyArMTQ5OSw3IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChDb2RlTG9jYXRp
b25DYWxsIGNhbGwpCiAgICAgewotICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKCopKCk+KEFSTUFzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoY2FsbC5kYXRh
TG9jYXRpb24oKSkpKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCgqKSgpPihBUk1Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0
aW9uKCkpKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjI5NTkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OTksMTkgKzE1OTksMTkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1hc2s4KTsKICAg
ICB9CiAKLSAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgdm9pZCBqdW1wKFJl
Z2lzdGVySUQgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5ieCh0
YXJnZXQpOwogICAgIH0KIAogICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1vcnkgbG9jYXRpb24gY29u
dGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCi0gICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRk
cmVzcykKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAg
ICAgICBsb2FkMzIoYWRkcmVzcywgZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgIG1fYXNzZW1i
bGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGp1bXAoQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5t
X3B0ciksIGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhkYXRhVGVt
cFJlZ2lzdGVyKSwgZGF0YVRlbXBSZWdpc3Rlcik7CkBAIC0xNzYzLDcgKzE3NjMsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgU2hpZnRUeXBlQW5kQW1vdW50IHNoaWZ0KFNSVHlwZV9MU0wsIHNjYWxl
KTsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkKGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGluZGV4LCBzaGlmdCk7Ci0gICAgICAgIGp1bXAoZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIGp1bXAoZGF0YVRlbXBSZWdpc3RlciwgTm9QdHJUYWcpOwogICAgIH0KIAogICAgIC8v
IE1pc2NlbGxhbmVvdXMgb3BlcmF0aW9uczoKQEAgLTE3ODcsMTggKzE3ODcsMTggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKSwg
Q2FsbDo6TGlua2FibGVOZWFyVGFpbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBDYWxs
IGNhbGwoKQorICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxsKFB0clRhZykKICAgICB7CiAgICAg
ICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoVHJ1c3RlZEltbTMyKDApLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKICAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0
ZXIpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBDYWxsIGNh
bGwoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoUmVnaXN0
ZXJJRCB0YXJnZXQsIFB0clRhZykKICAgICB7CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1i
bGVyLmJseCh0YXJnZXQpLCBDYWxsOjpOb25lKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IENhbGwgY2FsbChBZGRyZXNzIGFkZHJlc3MpCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwo
QWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBsb2FkMzIoYWRkcmVzcywg
ZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseChk
YXRhVGVtcFJlZ2lzdGVyKSwgQ2FsbDo6Tm9uZSk7CkBAIC0xOTc3LDcgKzE5NzcsNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVMb2Nh
dGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwu
ZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0
YUxvY2F0aW9uKCkpKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGlj
IGJvb2wgY2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOSArMzMsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50
Q29kZVB0cihPcGNvZGVJRCBjb2RlSWQpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0cihj
b2RlSWQpKTsKKyAgICBBU1NFUlQob3Bjb2RlSUQgPj0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7
CisgICAgcmV0dXJuIGNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhMTEludDo6Z2V0Q29kZVB0
cihvcGNvZGVJRCkpOwogfQogCiB2b2lkIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhO
YW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC01Niw5ICs1
Nyw5IEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpkdW1wKFByaW50U3QKICAgICBkdW1w
V2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYoT3Bjb2RlSUQgY29kZUlkKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRD
b2RlUmVmKE9wY29kZUlEIG9wY29kZUlEKQogewotICAgIHJldHVybiBjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MoTExJbnQ6OmdldENvZGVQdHIoY29kZUlkKSkpOworICAgIHJldHVybiBjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIob3Bj
b2RlSUQpKTsKIH0KIAogYm9vbCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OnRyeVRvRGlzYXNzZW1i
bGUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSlND
UG9pc29uLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBA
IC02Myw5ICs2NCw5IEBAIGNsYXNzIEZ1bmN0aW9uUHRyIHsKIHB1YmxpYzoKICAgICBGdW5jdGlv
blB0cigpIHsgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgcmV0dXJuVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRyKHJldHVyblR5cGUoKnZhbHVlKShBcmd1bWVu
dHMuLi4pKQotICAgICAgICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUp
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBGdW5jdGlvblB0cihSZXR1cm5UeXBlKCp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRy
VGFnIHRhZyA9IFNsb3dQYXRoUHRyVGFnKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9u
UHRyPHZvaWQqPih2YWx1ZSwgdGFnKSkKICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6
YXNzZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVf
UE9JTlRFUihtX3ZhbHVlKTsKQEAgLTc1LDkgKzc2LDkgQEAgcHVibGljOgogLy8gZGlmZmVyZW50
IHR5cGVzOyB0aGVzZSBtZXRob2RzIGFscmVhZHkgZGVmaW5lZCBmb3IgZmFzdGNhbGwsIGJlbG93
LgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMICYmICFPUyhXSU5ET1dTKQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgcmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgot
ICAgIEZ1bmN0aW9uUHRyKHJldHVyblR5cGUoQ0RFQ0wgKnZhbHVlKShBcmd1bWVudHMuLi4pKQot
ICAgICAgICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBG
dW5jdGlvblB0cihSZXR1cm5UeXBlKENERUNMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFn
IHRhZyA9IFNsb3dQYXRoUHRyVGFnKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqPih2YWx1ZSwgdGFnKSkKICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNz
ZXJ0SXNOb3RQb2lzb25lZChtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9J
TlRFUihtX3ZhbHVlKTsKQEAgLTg3LDkgKzg4LDkgQEAgcHVibGljOgogCiAjaWYgQ09NUElMRVJf
U1VQUE9SVFMoRkFTVENBTExfQ0FMTElOR19DT05WRU5USU9OKQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgcmV0dXJuVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEZ1bmN0aW9uUHRy
KHJldHVyblR5cGUoRkFTVENBTEwgKnZhbHVlKShBcmd1bWVudHMuLi4pKQotICAgICAgICA6IG1f
dmFsdWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBGdW5jdGlvblB0cihS
ZXR1cm5UeXBlKEZBU1RDQUxMICp2YWx1ZSkoQXJndW1lbnRzLi4uKSwgUHRyVGFnIHRhZyA9IFNs
b3dQYXRoUHRyVGFnKQorICAgICAgICA6IG1fdmFsdWUodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPih2
YWx1ZSwgdGFnKSkKICAgICB7CiAgICAgICAgIFBvaXNvbmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQ
b2lzb25lZChtX3ZhbHVlKTsKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3Zh
bHVlKTsKQEAgLTk4LDExICs5OSwxMSBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gQ09NUElMRVJfU1VQ
UE9SVFMoRkFTVENBTExfQ0FMTElOR19DT05WRU5USU9OKQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlPgotICAgIGV4cGxpY2l0IEZ1bmN0aW9uUHRyKEZ1bmN0aW9uVHlwZSog
dmFsdWUpCisgICAgZXhwbGljaXQgRnVuY3Rpb25QdHIoRnVuY3Rpb25UeXBlKiB2YWx1ZSwgUHRy
VGFnIHRhZyA9IFNsb3dQYXRoUHRyVGFnKQogICAgICAgICAvLyBVc2luZyBhIEMtY3R5bGUgY2Fz
dCBoZXJlIHRvIGF2b2lkIGNvbXBpbGVyIGVycm9yIG9uIFJWVEM6CiAgICAgICAgIC8vIEVycm9y
OiAgIzY5NDogcmVpbnRlcnByZXRfY2FzdCBjYW5ub3QgY2FzdCBhd2F5IGNvbnN0IG9yIG90aGVy
IHR5cGUgcXVhbGlmaWVycwogICAgICAgICAvLyAoSSBndWVzcyBvbiBSVlRDIGZ1bmN0aW9uIHBv
aW50ZXJzIGhhdmUgYSBkaWZmZXJlbnQgY29uc3RuZXNzIHRvIEdDQy9NU1ZDPykKLSAgICAgICAg
OiBtX3ZhbHVlKCh2b2lkKil2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHRhZ0NvZGVQdHI8dm9p
ZCo+KHZhbHVlLCB0YWcpKQogICAgIHsKICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJ
c05vdFBvaXNvbmVkKG1fdmFsdWUpOwogICAgICAgICBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVS
KG1fdmFsdWUpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiB2YWx1ZSgp
IGNvbnN0CiAgICAgewogICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29u
ZWQobV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgICAgICByZXR1cm4gcmVt
b3ZlQ29kZVB0clRhZyhtX3ZhbHVlKTsKICAgICB9CiAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJl
c3MoKSBjb25zdAogICAgIHsKQEAgLTE4Myw3ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZS51
bnBvaXNvbmVkKCkpOwogICAgIH0KLSAgICAKKwogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHZvaWQqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKQEAgLTIyNyw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBtX3ZhbHVlLmFzc2VydElzUG9pc29uZWQoKTsKICAgICAgICAgQVNTRVJUX1ZBTElE
X0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUudW5wb2lzb25l
ZDxUPigpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KG1fdmFsdWUgPyByZW1vdmVD
b2RlUHRyVGFnKG1fdmFsdWUudW5wb2lzb25lZCgpKSA6IG51bGxwdHIpOwogICAgIH0KICNlbmRp
ZgogCkBAIC0zMTUsOCArMzE2LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoUmVmPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+JiYgZXhlY3V0YWJs
ZU1lbW9yeSkKLSAgICAgICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSkK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoUmVmPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+JiYg
ZXhlY3V0YWJsZU1lbW9yeSwgUHRyVGFnIHRhZykKKyAgICAgICAgOiBtX2NvZGVQdHIodGFnQ29k
ZVB0cihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpLCB0YWcpKQogICAgICAgICAsIG1fZXhlY3V0
YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOwpAQCAtMzQ0LDcgKzM0NSwxMiBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlUHRyOwogICAgIH0KLSAgICAK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXRhZ2dlZENvZGUoUHRyVGFnIG9sZFRhZywg
UHRyVGFnIG5ld1RhZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIocmV0YWdDb2RlUHRyKG1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBvbGRU
YWcsIG5ld1RhZykpOworICAgIH0KKwogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAy
Mjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
TUlQUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU2LDE0ICsxNzU2LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKE1JUFNSZWdpc3RlcnM6Onplcm8sIE1JUFNSZWdpc3Rl
cnM6Onplcm8pOwogICAgIH0KIAotICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAg
ICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZykKICAgICB7CiAgICAgICAgIG1v
dmUodGFyZ2V0LCBNSVBTUmVnaXN0ZXJzOjp0OSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmpyKE1J
UFNSZWdpc3RlcnM6OnQ5KTsKICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CiAgICAgfQogCi0g
ICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRy
ZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBtX2ZpeGVkV2lkdGggPSB0cnVlOwogICAgICAg
ICBsb2FkMzIoYWRkcmVzcywgTUlQU1JlZ2lzdGVyczo6dDkpOwpAQCAtMTc3Miw3ICsxNzcyLDcg
QEAgcHVibGljOgogICAgICAgICBtX2ZpeGVkV2lkdGggPSBmYWxzZTsKICAgICB9CiAKLSAgICB2
b2lkIGp1bXAoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBqdW1wKEFic29sdXRl
QWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAgICAgewogICAgICAgICBtX2ZpeGVkV2lkdGggPSB0
cnVlOwogICAgICAgICBsb2FkMzIoYWRkcmVzcy5tX3B0ciwgTUlQU1JlZ2lzdGVyczo6dDkpOwpA
QCAtMjI1MCw3ICsyMjUwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2Vt
Ymxlci5sYWJlbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXJUYWlsKTsKICAgICB9CiAKLSAgICBDYWxs
IGNhbGwoKQorICAgIENhbGwgY2FsbChQdHJUYWcpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5sdWkoTUlQU1JlZ2lzdGVyczo6dDksIDApOwogICAgICAgICBtX2Fzc2VtYmxlci5vcmkoTUlQ
U1JlZ2lzdGVyczo6dDksIE1JUFNSZWdpc3RlcnM6OnQ5LCAwKTsKQEAgLTIyNTksNyArMjI1OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIubGFiZWwoKSwgQ2Fs
bDo6TGlua2FibGUpOwogICAgIH0KIAotICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkK
KyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZykKICAgICB7CiAgICAgICAg
IG1vdmUodGFyZ2V0LCBNSVBTUmVnaXN0ZXJzOjp0OSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmph
bHIoTUlQU1JlZ2lzdGVyczo6dDkpOwpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5sYWJlbCgpLCBDYWxsOjpOb25lKTsKICAgICB9
CiAKLSAgICBDYWxsIGNhbGwoQWRkcmVzcyBhZGRyZXNzKQorICAgIENhbGwgY2FsbChBZGRyZXNz
IGFkZHJlc3MsIFB0clRhZykKICAgICB7CiAgICAgICAgIG1fZml4ZWRXaWR0aCA9IHRydWU7CiAg
ICAgICAgIGxvYWQzMihhZGRyZXNzLCBNSVBTUmVnaXN0ZXJzOjp0OSk7CkBAIC0zMDc4LDcgKzMw
NzgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihNSVBTQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdl
dChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKCopKCk+KE1JUFNBc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNh
bGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9CiAKICAgICBzdGF0
aWMgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFy
dCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCShyZXZpc2lvbiAy
Mjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEzLDEzICsyMTMsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCi0gICAgQ2FsbCBjYWxsKCkKKyAgICBDYWxsIGNhbGwoUHRyVGFnKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpMaW5rYWJsZSk7CiAg
ICAgfQogCiAgICAgLy8gQWRkcmVzcyBpcyBhIG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIHRo
ZSBhZGRyZXNzIHRvIGp1bXAgdG8KLSAgICB2b2lkIGp1bXAoQWJzb2x1dGVBZGRyZXNzIGFkZHJl
c3MpCisgICAgdm9pZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAgICAg
ewogICAgICAgICBtX2Fzc2VtYmxlci5qbXBfbShhZGRyZXNzLm1fcHRyKTsKICAgICB9CkBAIC0y
OTgsNyArMjk4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRh
cmdldChDb2RlTG9jYXRpb25DYWxsIGNhbGwpCiAgICAgewogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSByZWludGVycHJldF9jYXN0PGludDMyX3QqPihjYWxsLmRhdGFMb2NhdGlvbigpKVstMV07
Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FsbC5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQpKTsK
KyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYWxsLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldCksIENv
ZGVFbnRyeVB0clRhZyk7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgY2FuSnVtcFJlcGxhY2VQ
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03NTMsNyArNzUzLDcgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHJvYmUoUHJvYmU6OkZ1
bmN0aQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5j
dGlvbikpLCBSZWdpc3RlcklEOjplZHgpOwogICAgIHB1c2goUmVnaXN0ZXJJRDo6ZWJ4KTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoYXJnKSwgUmVnaXN0ZXJJRDo6ZWJ4KTsKLSAgICBjYWxsKFJl
Z2lzdGVySUQ6OmVheCk7CisgICAgY2FsbChSZWdpc3RlcklEOjplYXgsIENGdW5jdGlvblB0clRh
Zyk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjY5NiwxOSAr
MjY5NiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgp
KTsKICAgICB9CiAKLSAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgdm9pZCBq
dW1wKFJlZ2lzdGVySUQgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5qbXBfcih0YXJnZXQpOwogICAgIH0KIAogICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1vcnkgbG9j
YXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCi0gICAgdm9pZCBqdW1wKEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5qbXBfbShhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlKTsKICAgICB9CiAKICAgICAvLyBBZGRyZXNzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRh
aW5pbmcgdGhlIGFkZHJlc3MgdG8ganVtcCB0bwotICAgIHZvaWQganVtcChCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB2b2lkIGp1bXAoQmFzZUluZGV4IGFkZHJlc3MsIFB0clRhZykKICAgICB7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLmptcF9tKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgIH0KQEAgLTI4OTQsMTIgKzI4OTQsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6
OkxpbmthYmxlTmVhcik7CiAgICAgfQogCi0gICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0
KQorICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCwgUHRyVGFnKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25lKTsKICAg
ICB9CiAKLSAgICB2b2lkIGNhbGwoQWRkcmVzcyBhZGRyZXNzKQorICAgIHZvaWQgY2FsbChBZGRy
ZXNzIGFkZHJlc3MsIFB0clRhZykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNhbGxfbShh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJs
aWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICBDYWxsIGNhbGwoKQorICAgIENhbGwgY2FsbChQdHJU
YWcpCiAgICAgewogI2lmIE9TKFdJTkRPV1MpCiAgICAgICAgIC8vIEpJVCByZWxpZXMgb24gdGhl
IENhbGxlckZyYW1lIChmcmFtZSBwb2ludGVyKSBiZWluZyBwdXQgb24gdGhlIHN0YWNrLApAQCAt
MjI0LDEwICsyMjQsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZHJlc3MgaXMgYSBt
ZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCi0gICAgdm9p
ZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHZvaWQganVtcChBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcywgUHRyVGFnIHRhZykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBqdW1wKEFk
ZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKKyAgICAgICAganVtcChBZGRyZXNzKHNjcmF0Y2hS
ZWdpc3RlcigpKSwgdGFnKTsKICAgICB9CiAKICAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkK
QEAgLTE4NzAsNyArMTg3MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgRnVuY3Rpb25Q
dHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyKFg4NkFzc2VtYmxlcjo6cmVhZFBvaW50ZXIoY2FsbC5kYXRhTGFi
ZWxQdHJBdE9mZnNldCgtUkVQQVRDSF9PRkZTRVRfQ0FMTF9SMTEpLmRhdGFMb2NhdGlvbigpKSk7
CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihYODZBc3NlbWJsZXI6OnJlYWRQb2ludGVyKGNh
bGwuZGF0YUxhYmVsUHRyQXRPZmZzZXQoLVJFUEFUQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9j
YXRpb24oKSksIENvZGVFbnRyeVB0clRhZyk7CiAgICAgfQogCiAgICAgYm9vbCBoYXZlU2NyYXRj
aFJlZ2lzdGVyRm9yQmxpbmRpbmcoKSB7IHJldHVybiBtX2FsbG93U2NyYXRjaFJlZ2lzdGVyOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAko
cmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxMyArMTQ5LDE0IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb21waWxlKEdlbmVyYXRvciYKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAg
IGdlbmVyYXRlKGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7
Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgInRlc3RtYXNtIGNvbXBpbGF0
aW9uIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRh
ZywgInRlc3RtYXNtIGNvbXBpbGF0aW9uIik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KIFQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRz
Li4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVu
Y3Rpb25QdHIoY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSklUQ29kZVB0clRhZyk7
CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJn
dW1lbnRzLi4uKT4oZXhlY3V0YWJsZUFkZHJlc3MpOwogICAgIHJldHVybiBmdW5jdGlvbihhcmd1
bWVudHMuLi4pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNw
cAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29tcGlsYXRpb24gY29tcGls
ZShQcm9jZWR1cmUmIHByb2MpCiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAotICAgIHJldHVybiBDb21waWxhdGlvbihG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJCMzo6Q29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAiQjM6OkNvbXBpbGF0aW9uIiksIHByb2MucmVsZWFzZUJ5
cHJvZHVjdHMoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24gMjI5NTkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTEsNyArNTExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFibGUpLCBzY3JhdGNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoc2NyYXRjaCwgaW5kZXgsIENDYWxsSGVscGVyczo6dGltZXNQdHIoKSksIHNjcmF0Y2gp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnhvcjY0KHBvaXNvblNjcmF0Y2gsIHNjcmF0
Y2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoLCBOb1B0clRhZyk7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZXNlIGxhYmVscyBhcmUgZ3VhcmFudGVlZCB0byBiZSBwb3B1
bGF0ZWQgYmVmb3JlIGVpdGhlciBsYXRlIHBhdGhzIG9yCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBsaW5rIHRhc2tzIHJ1bi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
CShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxDb21w
aWxhdGlvbj4gY29tcGlsZVByb2MKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KIFQgaW52b2tlKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCiB7Ci0gICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lz
ZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDRnVuY3Rpb25QdHIocHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpJVENvZGVQdHJUYWcpOworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRz
Li4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGV4ZWN1dGFibGVBZGRyZXNz
KTsKICAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKIH0KIApAQCAtMTMwNDIsMTIg
KzEzMDQzLDEyIEBAIHZvaWQgdGVzdEludGVycHJldGVyKCkKICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENvZGVQb2lzb246OmtleSgpKSwgcG9pc29u
U2NyYXRjaCk7CiAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFzZUluZGV4
KHNjcmF0Y2gsIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjp0aW1lc1B0cigpKSwgc2Ny
YXRjaCk7CiAgICAgICAgICAgICBqaXQueG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7Ci0g
ICAgICAgICAgICBqaXQuanVtcChzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0
Y2gsIE5vUHRyVGFnKTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgIFsmLCBqdW1wVGFibGUsIGxhYmVsc10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGFiZWxzLnNpemUoKTsgaS0t
OykKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZigqbGFiZWxzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtp
XSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2ldLCBOb1B0clRhZyk7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIApAQCAtMTMyOTYsMTIgKzEzMjk3LDEyIEBA
IHZvaWQgdGVzdEVudHJ5U3dpdGNoU2ltcGxlKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAg
IGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVs
bHB0cik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxh
YmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgInRlc3RiMyBjb21waWxhdGlv
biIpOwotICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgy
KSwgSklUQ29kZVB0clRhZyk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RiMyBjb21waWxh
dGlvbiIpOworCiAgICAgQ0hFQ0soaW52b2tlPGludD4obGFiZWxPbmUsIDEsIDIpID09IDMpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVsVHdvLCAxLCAyKSA9PSAtMSk7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4obGFiZWxUaHJlZSwgMSwgMikgPT0gMik7CkBAIC0xMzMyOSwxMiArMTMzMzAs
MTIgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKCkKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgbnVsbHB0cik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2lu
dExhYmVsKDEpKTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgInRlc3Ri
MyBjb21waWxhdGlvbiIpOwotICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRy
VGFnKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5
cG9pbnRMYWJlbCgyKSwgSklUQ29kZVB0clRhZyk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRl
c3RiMyBjb21waWxhdGlvbiIpOworCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxPbmUs
IDEsIDIpLCAzKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PihsYWJlbFR3bywgMSwgMiksIDMp
OwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsVGhyZWUsIDEsIDIpLCAzKTsKQEAgLTEz
NDE2LDEyICsxMzQxNywxMiBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocygp
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwogICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDAp
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
aHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7Ci0g
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKLSAgICAKKyAgICBDb2RlTG9jYXRpb25M
YWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJl
bCgwKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUd28gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSksIEpJVENvZGVQdHJU
YWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMiksIEpJVENvZGVQdHJUYWcpOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpJ
VENvZGVQdHJUYWcsICJ0ZXN0YjMgY29tcGlsYXRpb24iKTsKKwogICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KGxhYmVsT25lLCAxLCAyLCAxMCksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KGxhYmVsVHdvLCAxLCAyLCAxMCksIC0xKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PihsYWJl
bFRocmVlLCAxLCAyLCAxMCksIDIpOwpAQCAtMTM1MzMsMTIgKzEzNTM0LDEyIEBAIHZvaWQgdGVz
dEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzQW5kTm8KICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
ICAgIGdlbmVyYXRlKHByb2MsIGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
bnVsbHB0cik7Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEp
KTsKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgInRlc3RiMyBjb21waWxh
dGlvbiIpOwotICAgIAorICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFnKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9j
LmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7CisgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJl
bCgyKSwgSklUQ29kZVB0clRhZyk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJl
ZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgInRlc3RiMyBjb21w
aWxhdGlvbiIpOworCiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxPbmUsIDEsIDIsIDEw
LCBmYWxzZSksIDMpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KGxhYmVsVHdvLCAxLCAyLCAx
MCwgZmFsc2UpLCAtMSk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4obGFiZWxUaHJlZSwgMSwg
MiwgMTAsIGZhbHNlKSwgMik7CkBAIC0xMzYxMSwxMCArMTM2MTIsMTAgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hMb29wKCkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2Ms
IGppdCk7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7Ci0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRy
eXBvaW50TGFiZWwoMCkpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKLSAgICAKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgInRl
c3RiMyBjb21waWxhdGlvbiIpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApLCBKSVRDb2RlUHRyVGFn
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSwgSklUQ29kZVB0clRhZyk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29k
ZVB0clRhZywgInRlc3RiMyBjb21waWxhdGlvbiIpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludD4o
bGFiZWxPbmUsIDApID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KGxhYmVsT25lLCA0Mikg
PT0gNDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM0LDE0ICsx
MzQsMTQgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdAogICAgIGNh
c2UgQXJnOjpJbW06CiAgICAgY2FzZSBBcmc6OkJpZ0ltbToKICAgICAgICAgaml0Lm1vdmUoaW5z
dC5hcmdzW2NhbGxlZUFyZ09mZnNldF0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rl
cik7Ci0gICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxs
KHNjcmF0Y2hSZWdpc3RlciwgTm9QdHJUYWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFy
Zzo6VG1wOgotICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5ncHIo
KSk7CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmdwcigpLCBO
b1B0clRhZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXJnOjpBZGRyOgogICAgIGNhc2Ug
QXJnOjpFeHRlbmRlZE9mZnNldEFkZHI6Ci0gICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxs
ZWVBcmdPZmZzZXRdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzW2Nh
bGxlZUFyZ09mZnNldF0uYXNBZGRyZXNzKCksIE5vUHRyVGFnKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2aXNpb24gMjI5NTkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsMTMgKzkwLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+
IGNvbXBpbGUKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgInRlc3RhaXIgY29tcGlsYXRpb24iKSwgcHJvYy5yZWxlYXNl
Qnlwcm9kdWN0cygpKTsKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2Rl
UHRyVGFnLCAidGVzdGFpciBjb21waWxhdGlvbiIpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBUIGlu
dm9rZShjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CiB7Ci0gICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKiko
QXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB1bnRhZ0NGdW5jdGlvblB0cihjb2RlLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpLCBKSVRDb2RlUHRyVGFnKTsKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3Vt
ZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihleGVjdXRhYmxlQWRk
cmVzcyk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9u
IDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYzLDcgKzg2Myw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICNlbmRpZgogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKIAotICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBvcGVyYXRpb25DYWxs
ID0gaml0LmNhbGwoTm9QdHJUYWcpOwogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cih0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLm1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7CiAgICAgICAgICAgICB9KTsKQEAgLTEw
MDcsNyArMTAwNyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUK
ICAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewogICAgICAgICAgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpPihiYXNlR1BSKTsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLApAQCAtMTAxOSw3ICsxMDE5LDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSk+KAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxGdW5jdGlvblR5cGU+
KHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cykuLi4pOwogCi0gICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAgICAg
ICAgIGF1dG8gZnVuY3Rpb24gPSBtX2Z1bmN0aW9uOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIoZnVuY3Rpb24pKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
Mjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IGJvb2wgbGlua0NvZGVJbmxpbmUKICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwg
c3R1YkluZm8ucGF0Y2guc3RhcnQuZGF0YUxvY2F0aW9uKCksIHN0dWJJbmZvLnBhdGNoLmlubGlu
ZVNpemUsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7
CiAgICAgICAgIEFTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAgICAgICAgIGZ1bmN0aW9u
KGxpbmtCdWZmZXIpOwotICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJJbmxpbmVB
Y2Nlc3NUeXBlOiAnJXMnIiwgbmFtZSk7CisgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgSklUQ29kZVB0clRhZywgIklubGluZUFjY2Vzc1R5cGU6ICclcyciLCBuYW1lKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydQogICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZm
ZXIuaXNWYWxpZCgpKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0KTsKIAotICAg
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFu
dCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb2RlUHRyVGFnLCAi
SW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSwxMCArMTk5LDEwIEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGlj
aXQKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxs
KCk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2Fs
bCA9IGppdC0+Y2FsbChOb1B0clRhZyk7CiAgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRp
b25IYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlciwgTm9QdHJUYWcpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAg
ICB9CkBAIC01MzgsNyArNTM4LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhp
Y0FjY2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0RXhj
ZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAgICAg
IEhhbmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAgICAg
ICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KG1ha2VzaGlmdENhdGNoSGFuZGxlcik7CisgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0
ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtYWtlc2hpZnRDYXRjaEhhbmRs
ZXIsIE5vUHRyVGFnKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5zdGFydCA9
IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUuYml0cygpOwogICAgICAgICAgICAgICAgIGhh
bmRsZXJUb1JlZ2lzdGVyLmVuZCA9IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUuYml0cygp
ICsgMTsKICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIo
aGFuZGxlclRvUmVnaXN0ZXIpOwpAQCAtNTY4LDcgKzU2OCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgZGF0YUxvZyhGdWxsQ29kZU9yaWdpbihj
b2RlQmxvY2ssIHN0dWJJbmZvLmNvZGVPcmlnaW4pLCAiOiBHZW5lcmF0aW5nIHBvbHltb3JwaGlj
IGFjY2VzcyBzdHViIGZvciAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgY29kZUJs
b2NrLCBsaW5rQnVmZmVyLAorICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5vUHRyVGFn
LAogICAgICAgICAiJXMiLCB0b0NTdHJpbmcoIkFjY2VzcyBzdHViIGZvciAiLCAqY29kZUJsb2Nr
LCAiICIsIHN0dWJJbmZvLmNvZGVPcmlnaW4sICIgd2l0aCByZXR1cm4gcG9pbnQgIiwgc3VjY2Vz
c0xhYmVsLCAiOiAiLCBsaXN0RHVtcChjYXNlcykpLmRhdGEoKSk7CiAKICAgICBib29sIGRvZXND
YWxscyA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICBwb2tlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCAxKTsKICNlbmRpZgotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxs
KCksIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChOb1B0clRhZyksIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSgpKTsKICAgICB9CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRpZgotICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChO
b1B0clRhZyksIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKIAogICAgICAgICBqdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCp2bSgpKTsKICAgICB9CkBAIC0yMTQsMTQgKzIxNCwxNCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIAogICAgICAgICB1c2Vk
SnVtcFRhYmxlcy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KTsKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKKyAgICAg
ICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdLCBOb1B0clRhZyk7CiAgICAgICAgIHRhYmxl
LmN0aU9mZnNldHMuZ3Jvdyh0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAg
ICAgdGFibGUuY3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0
Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zm
c2V0c1tteUNhc2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0YS5raW5kKSAtIHRhYmxlLm1p
bl0gPQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNb
bXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQuYmxvY2stPmluZGV4XSwgTm9Q
dHJUYWcpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
dGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbZGF0
YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9j
ay0+aW5kZXhdLCBOb1B0clRhZyk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zm
c2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5n
T2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAg
ICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNb
al07CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFs
dWUuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5k
KTsKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKKyAgICAgICAg
ICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2Nr
SGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5kZXhdLCBOb1B0clRhZyk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgICAgIGluZm8ucGF0Y2guc3RhcnQgPSBzdGFydDsKIAogICAgICAg
ICBwdHJkaWZmX3QgaW5saW5lU2l6ZSA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2Vl
bkNvZGVQdHIoCi0gICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fZG9uZSkpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2luc1tpXS5tX2RvbmUsIE5vUHRyVGFnKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlubGlu
ZVNpemUgPj0gMCk7CiAgICAgICAgIGluZm8ucGF0Y2guaW5saW5lU2l6ZSA9IGlubGluZVNpemU7
CiAKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ld
Lm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSkpOwogCiAgICAgICAgIGluZm8ucGF0Y2guZGVs
dGFGcm9tU3RhcnRUb1Nsb3dQYXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgICAgICBzdGFy
dCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxh
YmVsKCksIE5vUHRyVGFnKSk7CiAgICAgfQogICAgIAogICAgIGZvciAoYXV0byYgcmVjb3JkIDog
bV9qc0NhbGxzKSB7CkBAIC0yOTcsMTAgKzI5NywxMCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgZm9yIChKU0RpcmVjdENhbGxSZWNvcmQmIHJl
Y29yZCA6IG1fanNEaXJlY3RDYWxscykgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAq
cmVjb3JkLmluZm87Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhyZWNvcmQuY2FsbCwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCkpOworICAgICAgICBsaW5rQnVmZmVyLmxp
bmsocmVjb3JkLmNhbGwsIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQuc2xvd1BhdGgsIE5v
UHRyVGFnKSk7CiAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucygKICAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKCksCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVj
b3JkLnNsb3dQYXRoKSwKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihyZWNvcmQu
c2xvd1BhdGgsIE5vUHRyVGFnKSwKICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKHJlY29yZC5jYWxsKSk7CiAgICAgfQogICAgIApAQCAtMzA4LDcgKzMwOCw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKnJlY29yZC5pbmZvOwogICAgICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMo
CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnBhdGNoYWJsZUp1bXAp
LAotICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHJlY29yZC5zbG93UGF0aCksCisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocmVjb3JkLnNsb3dQYXRoLCBOb1B0clRh
ZyksCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChyZWNvcmQuY2Fs
bCkpOwogICAgIH0KICAgICAKQEAgLTMyMyw4ICszMjMsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIH0KICAgICAgICAgaWYgKGluZm8ubV9yZXBs
YWNlbWVudFNvdXJjZS5pc1NldCgpKSB7CiAgICAgICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5q
dW1wUmVwbGFjZW1lbnRzLmFwcGVuZChKdW1wUmVwbGFjZW1lbnQoCi0gICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudFNvdXJjZSksCi0gICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0
aW9uKSkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1fcmVw
bGFjZW1lbnRTb3VyY2UsIE5vUHRyVGFnKSwKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24sIE5vUHRyVGFnKSkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4mIGxhYmVs
cyA9IG1fZXhpdFNpdGVMYWJlbHNbaV07CiAgICAgICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+
IGFkZHJlc3NlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsYWJlbHMu
c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgYWRkcmVzc2VzLmFwcGVuZChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YobGFiZWxzW2pdKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAg
ICAgICBhZGRyZXNzZXMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZihsYWJlbHNbal0sIE5v
UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGls
YXRpb24oKS0+YWRkT1NSRXhpdFNpdGUoYWRkcmVzc2VzKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZQpAQCAtMzUxLDcgKzM1MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgICAgIC8vIGkuZSwgd2UgZXhwbGljaXRseSBlbWl0dGVkIGFuIGV4Y2Vw
dGlvbkNoZWNrIHRoYXQgd2Uga25vdyB3aWxsIGJlIGNhdWdodCBpbiB0aGlzIG1hY2hpbmUgZnJh
bWUuCiAgICAgICAgICAgICAvLyBJZiB0aGlzICppcyBzZXQqLCBpdCBtZWFucyB3ZSB3aWxsIGJl
IGxhbmRpbmcgYXQgdGhpcyBjb2RlIGxvY2F0aW9uIGZyb20gZ2VuZXJpY1Vud2luZCBmcm9tIGFu
CiAgICAgICAgICAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2hpbGQgY2FsbCBmcmFtZS4K
LSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhdGNoTGFiZWwgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaW5mby5tX3JlcGxhY2VtZW50RGVzdGluYXRpb24pOworICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY2F0Y2hMYWJlbCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1f
cmVwbGFjZW1lbnREZXN0aW5hdGlvbiwgTm9QdHJUYWcpOwogICAgICAgICAgICAgSGFuZGxlcklu
Zm8gbmV3RXhjZXB0aW9uSGFuZGxlciA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0
ZXNbaV0uYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogICAgICAgICAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZSA9IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXNbaV0uY2FsbFNp
dGVJbmRleDsKICAgICAgICAgICAgIG5ld0V4Y2VwdGlvbkhhbmRsZXIuc3RhcnQgPSBjYWxsU2l0
ZS5iaXRzKCk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1
bmN0aW9uKCkKICAgICBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
LmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgdGhpcyk7CiAgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihD
b2RlT3JpZ2luKDApKTsKICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgIG1fY2FsbEFyaXR5Rml4dXAgPSBjYWxsKCk7CisgICAgbV9j
YWxsQXJpdHlGaXh1cCA9IGNhbGwoTm9QdHJUYWcpOwogICAgIGp1bXAoZnJvbUFyaXR5Q2hlY2sp
OwogICAgIAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgpAQCAtNTM0LDcgKzUzNCw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAKICAgICBkaXNhc3NlbWJs
ZSgqbGlua0J1ZmZlcik7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hl
Y2sgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2Fy
aXR5Q2hlY2ssIE5vUHRyVGFnKTsKIAogICAgIG1fZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0
ZDo6bWFrZV91bmlxdWU8SklURmluYWxpemVyPigKICAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1f
aml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxpbmtCdWZmZXIpLCB3aXRoQXJpdHlD
aGVjayk7CkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bm90aWNlQ2F0Y2hF
bnRyeXBvaW50KAogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2ljQmxvY2suaXNDYXRjaEVudHJ5
cG9pbnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2ljQmxvY2suaW50ZXJzZWN0aW9uT2ZDRkFI
YXNWaXNpdGVkKTsgLy8gQW4gZW50cnlwb2ludCBpcyByZWFjaGFibGUgYnkgZGVmaW5pdGlvbi4K
LSAgICBtX2ppdENvZGUtPmNvbW1vbi5hcHBlbmRDYXRjaEVudHJ5cG9pbnQoYmFzaWNCbG9jay5i
eXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYmxvY2tIZWFkKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOworICAgIG1faml0Q29kZS0+Y29t
bW9uLmFwcGVuZENhdGNoRW50cnlwb2ludChiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtC
dWZmZXIubG9jYXRpb25PZihibG9ja0hlYWQsIE5vUHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBXVEZNb3ZlKGFyZ3VtZW50Rm9ybWF0cykpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpub3Rp
Y2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxv
Y2tIZWFkLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
NyArMTU4LDcgQEAgcHVibGljOgogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBG
dW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9
IGNhbGwoKTsKKyAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKE5vUHRyVGFnKTsKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlv
bikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDIyOTU5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDcgKzU3LDcgQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6
Y29kZVNpemUoKQogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKICAgICBtX2ppdENv
ZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5r
QnVmZmVyLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklU
VHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpLAorICAgICAg
ICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBOb1B0clRhZywgIkRGRyBKSVQgY29k
ZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
aywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCkpOwogICAgIAogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2Rl
LmNvcHlSZWYoKSk7CkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0Vt
cHR5VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKLSAgICAgICAg
RklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6
REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZl
ciwgTm9QdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSksCiAg
ICAgICAgIG1fd2l0aEFyaXR5Q2hlY2spOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENv
ZGUobV9qaXRDb2RlLmNvcHlSZWYoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDAsNyArMTAw
MCw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGwKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgTm9QdHJUYWcpOwogICAgICAgICBqaXQuc3Rv
cmVDZWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3Iob3BlcmFuZCkpOwogCiAgICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlk
LCBvcGVyYW5kKTsKQEAgLTEwNjksNyArMTA2OSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBPU1JF
eGl0Ojpjb21waWxlT1NSRXgKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNv
ZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAg
ICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8
fCBPcHRpb25zOjp2ZXJib3NlREZHT1NSRXhpdCgpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCiAgICAgICAgICAgICAiREZHIE9T
UiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMiLAogICAgICAg
ICAgICAgICAgIGV4aXRJbmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCks
CiAgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmlu
ZygqY29kZUJsb2NrKS5kYXRhKCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyMjk1OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIGhhbmRsZUV4aXRDb3Vu
dHMoQ0NhbGxIZWxwZXJzJiBqaXQsCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZleGl0KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICNlbmRpZgogICAgIGpp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25B
cmdHUFIwLCBOb1B0clRhZyk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmVBZGp1c3Rp
bmcgPSBqaXQuanVtcCgpOwogICAgIAogICAgIHRvb0Zld0ZhaWxzLmxpbmsoJmppdCk7CkBAIC0y
NjMsNyArMjYzLDcgQEAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwog
CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmll
cik+KG93bmVyKTsKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgc2NyYXRj
aCk7Ci0gICAgaml0LmNhbGwoc2NyYXRjaCk7CisgICAgaml0LmNhbGwoc2NyYXRjaCwgTm9QdHJU
YWcpOwogCiAjaWYgQ1BVKFg4NikKICAgICBqaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSAqIDQpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwpAQCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KFZNJiB2bSwgQ0NhbGwKICAgICB9CiAgICAgCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyLCBOb1B0clRh
Zyk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjI5
NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTY4Miw3ICs1NjgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG9zckVudGVyLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKLSAgICAgICAgICAgIG1faml0Lmp1bXAodGVtcEdQUik7CisgICAgICAgICAgICBt
X2ppdC5qdW1wKHRlbXBHUFIsIE5vUHRyVGFnKTsKICAgICAgICAgfSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg4OSw3ICs5ODg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBtX2ppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKICNlbmRp
ZgotICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCBOb1B0
clRhZyk7CiAgICAgZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKIH0KIApAQCAtOTkyNyw3
ICs5OTI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShOb2RlKgogICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoKTsKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1
ZVJlZ3MuZ3ByKCksIGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKCk7Ci0gICAgICAgIG1faml0Lmp1bXAoc2NyYXRjaCk7CisgICAgICAgIG1f
aml0Lmp1bXAoc2NyYXRjaCwgTm9QdHJUYWcpOwogI2Vsc2UKICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgbm90SW50ID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHZhbHVlUmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSk7CkBAIC05OTQyLDcgKzk5NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tKE5vZGUqCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaElt
bVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0Y2hUYWJsZUlu
ZGV4KTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0gICAgICAgIG1faml0
Lmp1bXAoc2NyYXRjaCk7CisgICAgICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgTm9QdHJUYWcpOwog
I2VuZGlmCiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTAyMDYsNyArMTAyMDYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAg
ICAgICAgICBvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3RhdGljX2Nhc3Q8c2l6ZV90
PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLSAgICAgICAgbV9qaXQuanVtcChzdHJpbmcpOworICAgICAgICBtX2ppdC5q
dW1wKHN0cmluZywgTm9QdHJUYWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAt
MTAyNDQsNyArMTAyNDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5n
T25TCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAg
ICBtX2ppdC5qdW1wKHN0cmluZyk7CisgICAgbV9qaXQuanVtcChzdHJpbmcsIE5vUHRyVGFnKTsK
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZyhOb2RlKiBub2RlLCBT
d2l0Y2hEYXRhKiBkYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtz
LmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0VGh1bmtHZW5lcmEKICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAgICAg
aml0LnByb2JlKE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0LCB2bSk7CiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJERkcgT1NSIGV4aXQgdGh1bmsiKTsKIH0K
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQpAQCAtODIsNyArODIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdl
bmVyYXRpb25UCiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1
bmN0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOwogCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCkpOwpAQCAtOTgsMTQgKzk4LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2Vu
ZXJhdGlvblQKICAgICAgICAgaml0LmxvYWQzMihidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKICNlbmRpZgogICAgIH0KLSAgICAKLSAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+b3NyRXhpdEp1bXBEZXN0aW5hdGlvbikpOwotICAgIAor
CisgICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4
aXRKdW1wRGVzdGluYXRpb24pLCBOb1B0clRhZyk7CisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgT1NSRXhpdDo6Y29tcGlsZU9TUkV4aXQpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZnVuY3Rpb25DYWxsLCBPU1JFeGl0Ojpjb21waWxlT1NSRXhpdCwgTm9QdHJUYWcpOwogICAg
IAotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAiREZHIE9TUiBleGl0IGdl
bmVyYXRpb24gdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsICJERkcgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpOwogfQogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCkBAIC0xNDMsMTAg
KzE0MywxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyCiAgICAg
aml0LnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0t
PnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVy
cygpOwogCi0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5qdW1wKEdQUklu
Zm86OnJlZ1QxLCBOb1B0clRhZyk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICJERkcgT1NSIGVudHJ5IHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5vUHRyVGFnLCAiREZHIE9TUiBlbnRyeSB0aHVuayIpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIGNv
bXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOwog
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMjI5NTkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSwxMyArNzUsMTMgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
Q29tbW9uKCkKICAgICAKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQjNDb2RlKAogICAgICAgICBG
SU5BTElaRV9DT0RFX0lGKAotICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlu
a0J1ZmZlciwKKyAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIs
IENvZGVFbnRyeVB0clRhZywKICAgICAgICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRM
SklUKSkuZGF0YSgpKSk7CiAKICAgICBpZiAoZW50cnlwb2ludExpbmtCdWZmZXIpIHsKICAgICAg
ICAgaml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICAgICAg
RklOQUxJWkVfQ09ERV9JRigKLSAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICplbnRy
eXBvaW50TGlua0J1ZmZlciwKKyAgICAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICplbnRy
eXBvaW50TGlua0J1ZmZlciwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsCiAgICAgICAg
ICAgICAgICAgIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIEIzIGdlbmVyYXRlZCBj
b2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxv
Y2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pKTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShy
ZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93
UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBMYXp5U2xvd1Bh
dGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9u
ZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7Ci0gICAgbV9z
dHViID0gRklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVmZmVyLCAiTGF6eSBzbG93
IHBhdGggY2FsbCBzdHViIik7CisgICAgbV9zdHViID0gRklOQUxJWkVfQ09ERV9GT1IoY29kZUJs
b2NrLCBsaW5rQnVmZmVyLCBOb1B0clRhZywgIkxhenkgc2xvdyBwYXRoIGNhbGwgc3R1YiIpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKG1fcGF0Y2hhYmxlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7CiAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7Ci0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoTm9QdHJUYWcpOwog
CiAgICAgICAgICAgICBhdXRvIG5vRXhjZXB0aW9uID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6R3JlYXRlclRoYW5PckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAgICAgICAgICAgICBq
aXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CiAgICAgICAgICAgICBub0V4Y2VwdGlvbi5s
aW5rKCZqaXQpOwogCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAgbWFp
blBhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4dXAgPSBq
aXQuY2FsbCgpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVw
ID0gaml0LmNhbGwoTm9QdHJUYWcpOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsMTEgKzI4NiwxMSBAQCBwdWJsaWM6CiAK
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dD
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHRocm93Q2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKIAogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJDYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKQEAgLTc2MzYsNyArNzYzNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAg
ICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewog
ICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Y2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAg
ICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7
CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFy
Z3VtZW50R1BSLCBOb1B0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFw
cGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxF
eGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKICAgICAgICAg
ICAgICAgICB9OwogCkBAIC03OTc1LDcgKzc5NzUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsK
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIp
OworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25B
cmd1bWVudEdQUiwgTm9QdHJUYWcpOwogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5h
cHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAg
ICAgICAgICAgfTsKIApAQCAtODE2Myw3ICs4MTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihHUFJJbmZvOjpy
ZWdUMSk7CiAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uQ2FsbEV2YWwpKSwgR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUiwgTm9QdHJUYWcpOwogICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRl
LT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhl
bHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIyOTU5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzM5LDcgKzMzOSw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6
YXRpb24pLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRl
cmlhbGl6YXRpb25Bcmd1bWVudHMpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk1hdGVyaWFsaXpl
T2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBqaXQuY2Fs
bChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIE5vUHRyVGFnKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldChtYXRlcmlhbGl6YXRp
b24pKTsKIAogICAgICAgICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSdyZSBkb25l
LgpAQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5n
ZXQobWF0ZXJpYWxpemF0aW9uKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKSk7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblBvcHVs
YXRlT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBOb1B0clRhZyk7CiAgICAgfQogCiAgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVy
ZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUg
cGxhY2UgaW4KQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICBleGl0Lm1fY29k
ZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8
IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRMT1NSRXhpdCgpLAot
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAogICAg
ICAgICAiRlRMIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0g
JXMiLAogICAgICAgICAgICAgZXhpdElELCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRh
dGEoKSwKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJp
bmcoKmNvZGVCbG9jaykuZGF0YSgpLApAQCAtNTQxLDcgKzU0MSw3IEBAIGV4dGVybiAiQyIgdm9p
ZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICB9CiAKICAgICBwcmVwYXJlQ29kZU9yaWdp
bkZvck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwotICAgIAorCiAgICAgY29tcGls
ZVN0dWIoZXhpdElELCBqaXRDb2RlLCBleGl0LCAmdm0sIGNvZGVCbG9jayk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCw3ICsxMjAsNyBAQCBTbG93UGF0aENhbGxLZXkgU2xvd1BhdGhDYWxsQ29udGV4dDo6a2V5CiAK
IFNsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIHZvaWQq
IGNhbGxUYXJnZXQpCiB7Ci0gICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbCht
X2ppdC5jYWxsKCksIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpOworICAgIFNsb3dQYXRoQ2Fs
bCByZXN1bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbChOb1B0clRhZyksIGtleVdpdGhUYXJn
ZXQoY2FsbFRhcmdldCkpOwogCiAgICAgbV9qaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtyZXN1
bHQsICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lCiAgICAgaml0LnBl
ZWsoCiAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKICAgICAgICAgKHN0YWNrTWlzYWxp
Z25tZW50IC0gTWFjcm9Bc3NlbWJsZXI6OnB1c2hUb1NhdmVCeXRlT2Zmc2V0KCkpIC8gc2l6ZW9m
KHZvaWQqKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNh
bGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbChO
b1B0clRhZyk7CiAgICAgCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3YW50IHRvIG1ha2UgYSB0
YWlsIGNhbGwgdG8gd2hhdCB3YXMgcmV0dXJuZWQgdG8gdXMgaW4gdGhlCiAgICAgLy8gcmV0dXJu
VmFsdWVHUFIuIEJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGRvIHRoaXMsIHdlIG11c3QgcmVz
dG9yZSBhbGwgcmVnaXN0ZXJzLgpAQCAtMTE5LDIxICsxMTksMjEgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZQogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25D
YWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24pOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAiJXMiLCBuYW1lKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgTm9QdHJUYWcsICIlcyIsIG5hbWUpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdW5zaWduZWQgZXh0
cmFQb3BzVG9SZXN0b3JlID0gMDsKICAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dl
bmVyYXRvcigKLSAgICAgICAgdm0sIGNvbXBpbGVGVExPU1JFeGl0LCAiRlRMIE9TUiBleGl0IGdl
bmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3Rt
ZW50UmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxl
RlRMT1NSRXhpdCwgTm9QdHJUYWcpLCAiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiLCBl
eHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50UmVxdWlyZW1lbnQ6Ok5l
ZWRlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewogICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9y
ZSA9IDE7CiAgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCi0gICAg
ICAgIHZtLCBjb21waWxlRlRMTGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVy
YXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUsIEZyYW1lQW5kU3RhY2tBZGp1c3RtZW50
UmVxdWlyZW1lbnQ6Ok5vdE5lZWRlZCk7CisgICAgICAgIHZtLCBGdW5jdGlvblB0cihjb21waWxl
RlRMTGF6eVNsb3dQYXRoLCBOb1B0clRhZyksICJGVEwgbGF6eSBzbG93IHBhdGggZ2VuZXJhdGlv
biB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSwgRnJhbWVBbmRTdGFja0FkanVzdG1lbnRSZXF1
aXJlbWVudDo6Tm90TmVlZGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hl
Y2soQXNzZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQpAQCAtMTk3
LDcgKzE5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAg
ICAKICAgICByZWdpc3RlckNsb2JiZXJDaGVjayhqaXQsIGtleS5hcmd1bWVudFJlZ2lzdGVycygp
KTsKICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAKICAg
ICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBrZXkub2Zmc2V0KCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIpOwogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxUYXJnZXQoKSkpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRv
Q1N0cmluZyhrZXkpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIE5vUHRyVGFnLCAiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmlu
ZyhrZXkpLmRhdGEoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDggKzM0Niw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpjYWxsRXhjZXB0aW9uRnV6eigKICNlbHNlCiAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICNlbmRpZgotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBjYWxsKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
blB0cihvcGVyYXRpb25FeGNlcHRpb25GdXp6LCBTbG93UGF0aFB0clRhZykpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBTbG93UGF0aFB0clRhZyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BS
SW5mbzo6cmVnVDApOwpAQCAtOTQwLDggKzk0MCw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpk
ZWJ1Z0NhbGwoVk0mIHZtLCAKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRo
aXMgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIHNjcmF0Y2gpOwotICAgIGNhbGwoc2NyYXRjaCk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihmdW5jdGlvbiwgU2xvd1BhdGhQ
dHJUYWcpKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCBTbG93UGF0aFB0clRhZyk7CiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVu
Z3RoKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgR1BSSW5mbzo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDggKzU5LDggQEAgdm9p
ZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7CiAgICAgSnVtcCBvayA9IGJyYW5j
aFB0cihCZWxvdywgc2hhZG93UGFja2V0LCBUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4o
KS5sb2dFbmQoKSkpOwogICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblByb2Nl
c3NTaGFkb3dDaGlja2VuTG9nKT4oKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZykpLCBzY3JhdGNoMU5v
bkFyZ0dQUik7Ci0gICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywg
U2xvd1BhdGhQdHJUYWcpKSwgc2NyYXRjaDFOb25BcmdHUFIpOworICAgIGNhbGwoc2NyYXRjaDFO
b25BcmdHUFIsIFNsb3dQYXRoUHRyVGFnKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodm0uc2hh
ZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUiksIHNoYWRvd1BhY2tldCk7CiAg
ICAgb2subGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuaAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxOCw3ICs1MTgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIGdlbmVyaWNVbndpbmQoKSBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2Fs
bEZyYW1lKiBpbiB2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gsCiAgICAgICAgIC8vIGFuZCB0aGUgYWRk
cmVzcyBvZiB0aGUgaGFuZGxlciBpbiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cuCiAgICAg
ICAgIGxvYWRQdHIoJnZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93LCBHUFJJbmZvOjpyZWdUMSk7
Ci0gICAgICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqdW1wKEdQUkluZm86OnJl
Z1QxLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICB9CiAKICAgICB2b2lkIHByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coR1BSUmVnIGNhbGxlZUdQUiA9IEludmFsaWRHUFJSZWcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBAQCBwcml2YXRl
OgogICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVt
b3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZlci4KICAgICAgICAgLy8gVGhlIHNlY29uZCBp
cyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgY29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5n
IHRoZQogICAgICAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdp
bGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCi0gICAgICAgIHJldHVybiBsaW5rQnVmZmVy
LmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpOworICAgICAgICByZXR1cm4gbGlua0J1
ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoTm9QdHJUYWcpOwogICAgIH0KICNl
bHNlIC8vIENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04p
CiAgICAgc3RhdGljIHZvaWQgZ2VuZXJpY1dyaXRlVG9KSVRSZWdpb24ob2ZmX3Qgb2Zmc2V0LCBj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEpJVDo6ZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0
aW1pemUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUik7CisgICAg
anVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRo
aXMpOwogfQogI2VuZGlmCkBAIC03NzYsMzIgKzc3NiwzNiBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OmxpbmsoKQogICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlIHx8IHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKTsg
CiAgICAgICAgICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmJy
YW5jaE9mZnNldHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5j
dGlPZmZzZXRzLnNpemUoKSk7CiAKLSAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc2ltcGxl
SnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1ti
eXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CisgICAgICAgICAgICByZWNv
cmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0s
IE5vUHRyVGFnKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlY29y
ZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcmVjb3JkLmp1bXBUYWJsZS5zaW1w
bGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHNbal07Ci0gICAgICAgICAgICAgICAgcmVjb3JkLmp1
bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQgPyBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNv
cmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAg
ICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNl
dCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZz
ZXRdLCBOb1B0clRhZykgOiByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVm
YXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OlN0cmluZyk7CiAKLSAgICAgICAgICAgIHJl
Y29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7CisgICAgICAgICAgICBhdXRvKiBzdHJpbmdKdW1wVGFibGUgPSByZWNvcmQuanVtcFRhYmxl
LnN0cmluZ0p1bXBUYWJsZTsKKyAgICAgICAgICAgIHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVs
dCA9CisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgTm9QdHJUYWcpOwogCi0gICAgICAg
ICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFi
bGUtPm9mZnNldFRhYmxlLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0
aW9uIDogc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLmJyYW5jaE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBsb2NhdGlvbi5jdGlPZmZzZXQgPSBvZmZzZXQgPyBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSkgOiByZWNvcmQuanVtcFRhYmxl
LnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5j
dGlPZmZzZXQgPSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgTm9QdHJUYWcpCisgICAg
ICAgICAgICAgICAgICAgIDogc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAg
ICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVs
c1toYW5kbGVyLnRhcmdldF0pOworICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2hhbmRsZXIudGFyZ2V0XSwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX2NhbGxzKSB7CiAg
ICAgICAgIGlmIChyZWNvcmQudG8pCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29y
ZC5mcm9tLCBGdW5jdGlvblB0cihyZWNvcmQudG8pKTsKKyAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsocmVjb3JkLmZyb20sIEZ1bmN0aW9uUHRyKHJlY29yZC50bywgU2xvd1BhdGhQdHJUYWcp
KTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dldEJ5SWRzLnNpemUoKTsgaS0t
OykKQEAgLTgxMiw3ICs4MTYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAg
ICAgICBtX3B1dEJ5SWRzW2ldLmZpbmFsaXplKHBhdGNoQnVmZmVyKTsKIAogICAgIGlmIChtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSkgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBl
eGNlcHRpb25IYW5kbGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2V4Y2VwdGlvbkhhbmRs
ZXIpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25IYW5kbGVyID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2V4Y2VwdGlvbkhhbmRsZXIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWcpOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYnlWYWxDb21waWxhdGlvbkluZm8gOiBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvKSB7CiAgICAgICAgICAgICBQYXRjaGFibGVKdW1wIHBhdGNo
YWJsZU5vdEluZGV4SnVtcCA9IGJ5VmFsQ29tcGlsYXRpb25JbmZvLm5vdEluZGV4SnVtcDsKQEAg
LTgyMCw5ICs4MjQsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmxpbmsoKQogICAgICAgICAg
ICAgaWYgKEp1bXAocGF0Y2hhYmxlTm90SW5kZXhKdW1wKS5pc1NldCgpKQogICAgICAgICAgICAg
ICAgIG5vdEluZGV4SnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihwYXRjaGFibGVOb3RJbmRleEp1bXApKTsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
YmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlW
YWxDb21waWxhdGlvbkluZm8uYmFkVHlwZUp1bXApKTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRp
b25JbmZvLmRvbmVUYXJnZXQpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbmV4dEhv
dFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25JbmZv
Lm5leHRIb3RQYXRoVGFyZ2V0KTsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQ
YXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5z
bG93UGF0aFRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5mby5kb25lVGFyZ2V0
LCBOb1B0clRhZyk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBuZXh0SG90UGF0aFRh
cmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbkluZm8ubmV4dEhv
dFBhdGhUYXJnZXQsIE5vUHRyVGFnKTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9uSW5m
by5zbG93UGF0aFRhcmdldCwgTm9QdHJUYWcpOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCByZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9u
SW5mby5yZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICAgICAgKmJ5VmFsQ29tcGlsYXRpb25JbmZv
LmJ5VmFsSW5mbyA9IEJ5VmFsSW5mbygKQEAgLTg1NSw3ICs4NTksNyBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OmxpbmsoKQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNo
ZWNrOwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCi0g
ICAgICAgIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2FyaXR5Q2hl
Y2spOworICAgICAgICB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9h
cml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiAKICAgICBpZiAoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPmR1bXAo
cGF0Y2hCdWZmZXIpOwpAQCAtODcxLDcgKzg3NSw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
bGluaygpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1h
a2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKSwgcGF0Y2hCdWZmZXIpKTsKICAgICAKICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICBwYXRjaEJ1ZmZlciwgQ29k
ZUVudHJ5UHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3Ry
aW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpCYXNlbGluZUpJ
VCkpLmRhdGEoKSk7CiAgICAgCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklULT5hZGQoCkBAIC05MTMsNyArOTE3LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRp
ZgotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoKSwgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5k
bGVyRnJvbUNhbGxlckZyYW1lKS52YWx1ZSgpKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoY2FsbChTbG93UGF0aFB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJG
cmFtZSwgU2xvd1BhdGhQdHJUYWcpLnZhbHVlKCkpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0oKSk7CiAgICAgfQogCkBAIC05MzIsNyArOTM2LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKICNlbmRp
ZgotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoKSwgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5k
bGVyKS52YWx1ZSgpKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbChT
bG93UGF0aFB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVu
Y3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlciwgU2xvd1BhdGhQdHJUYWcpLnZhbHVlKCkp
KTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiAgICAgfQogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWxsIGZ1
bmN0aW9uQ2FsbCA9IGNhbGwoKTsKKyAgICAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2Fs
bChOb1B0clRhZyk7CiAgICAgICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24udmFsdWUoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbV9pbmxpbmVT
dGFydC5kYXRhTG9jYXRpb24oKSwgaml0Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmNvZGVTaXplKCks
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIG5lZWRzQnJhbmNoQ29tcGFjdGlvbik7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobV9jb2RlLmNvZGUoKSkp
OwotICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAiSklUTWF0aElDOiBsaW5r
aW5nIGNvbnN0YW50IGp1bXAgdG8gb3V0IG9mIGxpbmUgc3R1YiIpOworICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25z
dGFudCBqdW1wIHRvIG91dCBvZiBsaW5lIHN0dWIiKTsKICAgICAgICAgfTsKIAogICAgICAgICBh
dXRvIHJlcGxhY2VDYWxsID0gWyZdICgpIHsKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9Eb25lLCBkb25lTG9jYXRp
b24oKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV9jb2RlID0gRklOQUxJWkVfQ09ERV9GT1Io
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsICJKSVRNYXRo
SUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJQyBzbmlwcGV0Iik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElD
OiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMgc25pcHBldCIpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgbmVlZCB0byByZWdlbmVyYXRlLCBz
byB3ZSBjYW4gd2lyZSB0aGUgc2xvdyBwYXRoIGNhbGwKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd1BhdGhKdW1wTGlzdCwgc2xvd1Bh
dGhTdGFydExvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsICJKSVRNYXRoSUM6
IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgSUMgc25pcHBldCIpOworICAgICAgICAgICAgICAgIGNv
ZGVCbG9jaywgbGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0
IG9mIGxpbmUgSUMgc25pcHBldCIpOwogICAgICAgICB9CiAKICAgICAgICAgbGlua0p1bXBUb091
dE9mTGluZVNuaXBwZXQoKTsKQEAgLTIxNiwxNyArMjE2LDE3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluYWxpemVJbmxpbmVDb2RlKGNvbnN0IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgewotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0UGF0aFN0YXJ0KTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3Rh
dGUuZmFzdFBhdGhTdGFydCwgTm9QdHJUYWcpOwogICAgICAgICBtX2lubGluZVN0YXJ0ID0gc3Rh
cnQ7CiAKICAgICAgICAgbV9pbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c3RhdGUuZmFzdFBhdGhFbmQpKTsKKyAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc3RhdGUuZmFzdFBhdGhFbmQsIE5vUHRyVGFnKSk7CiAgICAgICAgIEFTU0VSVChtX2lu
bGluZVNpemUgPiAwKTsKIAogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aENhbGxM
b2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCiAgICAg
ICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoQ2FsbCkp
OwogICAgICAgICBtX2RlbHRhRnJvbVN0YXJ0VG9TbG93UGF0aFN0YXJ0ID0gTWFjcm9Bc3NlbWJs
ZXI6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc3RhdGUuc2xvd1BhdGhTdGFydCkpOworICAgICAgICAgICAgc3RhcnQs
IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBTbG93UGF0aFB0clRh
ZykpOwogICAgIH0KIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4
LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVBy
b2ZpbGUsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIs
IE5vUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVy
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBidWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CkBAIC03NzYsNyArNzc2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbgogCiAgICAgZW1pdExvYWQo
c2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSKTsKKyAgICBqdW1wKHJldHVyblZhbHVl
R1BSLCBOb1B0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03OTIsNyArNzkyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3RpbwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVl
LCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7
Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUik7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9Q
dHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MDcsNyArODA3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdU
MSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVu
a25vd25LZXlUeXBlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKLSAg
ICBqdW1wKHJldHVyblZhbHVlR1BSKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC05MzIsMTEgKzkzMiwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVI
YXNJbmRleGVkUHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwog
ICAgIAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVC
KAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisgICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9w
cm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1NzIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zm
c2V0KTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBqdW1wKHJldHVy
blZhbHVlR1BSKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgc2tp
cE9TUkVudHJ5LmxpbmsodGhpcyk7CiAgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCYgcHJvZmlsZSkgewpAQCAtNjEwLDcgKzYxMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BS
KTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02
MjYsNyArNjI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpbwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0
YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSKTsKKyAgICBqdW1wKHJldHVyblZh
bHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAg
anVtcChyZXR1cm5WYWx1ZUdQUik7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoSW5zdHJ1Y3QKICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRVbnJlYXNvbmFibGVM
b29wSGludEp1bXBUYXJnZXQpOwogICAgICAgICAgICAgb2subGluayh0aGlzKTsKICAgICAgICAg
fQotICAgICAgICBqdW1wKHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAganVtcChyZXR1cm5WYWx1
ZUdQUiwgTm9QdHJUYWcpOwogICAgICAgICBub09wdGltaXplZEVudHJ5LmxpbmsodGhpcyk7CiAK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2xvb3Bf
aGludCkpOwpAQCAtMTA4MSwxMSArMTA4MSwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVI
YXNJbmRleGVkUHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwog
ICAgIAogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVC
KAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisgICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9w
cm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lCiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3
IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQucmV0
KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICJTdHJpbmcgZ2V0X2J5
X3ZhbCBzdHViIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRy
VGFnLCAiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjY1LDExICsx
MjY1LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgCiAgICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRh
ZywKICAgICAgICAgIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtMTI5MiwxNyArMTI5MiwxNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoCiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGNhbGxTaXRlIDogbV9jYWxscykgewogICAgICAgICBpZiAoY2FsbFNpdGUudG8pCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRl
LnRvKSk7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0
aW9uUHRyKGNhbGxTaXRlLnRvLCBTbG93UGF0aFB0clRhZykpOwogICAgIH0KICAgICBnZW4uZmlu
YWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKICAgICAgICAgIkJhc2Vs
aW5lIGdldF9ieV92YWwgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAg
ICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmlj
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9u
R2V0QnlWYWxHZW5lcmljLCBTbG93UGF0aFB0clRhZykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQpAQCAtMTM0NiwyMiArMTM0Niwy
MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJh
cnJpZXIpIHsKICAgICAgICAgQVNTRVJUKG1fY2FsbHMubGFzdCgpLnRvID09IG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxh
c3QoKS5mcm9tLCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk7CisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsIFNsb3dQYXRoUHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0RpcmVjdCA9
IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKICAgICBpZiAoIWlzRGlyZWN0KSB7CiAgICAgICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBh
dGNoQnVmZmVyLCBOb1B0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRh
KCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlf
dmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIH0KICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIoaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIFNsb3dQ
YXRoUHRyVGFnKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAt
MTM4MiwxNyArMTM4MiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhD
YWNoCiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9jYWxscykgewogICAgICAg
ICBpZiAoY2FsbFNpdGUudG8pCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRl
LmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRvKSk7CisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRvLCBTbG93UGF0aFB0
clRhZykpOwogICAgIH0KICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LCBOb1B0clRhZywKICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNhY2hlZCBw
cm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChwdXRLaW5k
ID09IERpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgp
LmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZh
bHVlKCkpOwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKHB1dEtpbmQgPT0gRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNh
bGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIocHV0
S2luZCA9PSBEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRp
b25QdXRCeVZhbEdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CiB9CiAKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjI5NTkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsOCArMTE0LDggQEAgcHJvdGVjdGVkOgogfTsKIAogLy8gSGVscGVyIGZvciB0
aGUgY3JlYXRpb24gb2Ygc2ltcGxlIHN0dWIgcm91dGluZXMgdGhhdCBuZWVkIG5vIGhlbHAgZnJv
bSB0aGUgR0MuCi0jZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgLi4uKSBcCi0gICAgKGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShGSU5BTEla
RV9DT0RFX0ZPUigoY29kZUJsb2NrKSwgKHBhdGNoQnVmZmVyKSwgX19WQV9BUkdTX18pKSkpCisj
ZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgcmVz
dWx0UHRyVGFnLCAuLi4pIFwKKyAgICAoYWRvcHRSZWYobmV3IEpJVFN0dWJSb3V0aW5lKEZJTkFM
SVpFX0NPREVfRk9SKChjb2RlQmxvY2spLCAocGF0Y2hCdWZmZXIpLCAocmVzdWx0UHRyVGFnKSwg
X19WQV9BUkdTX18pKSkpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENvZGVCbAogICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKICAgICAgICAgcmV0dXJuIEZ1
bmN0aW9uUHRyKGNvZGVCbG9jay0+dm0oKS0+ZnRsVGh1bmtzLT5rZXlGb3JTbG93UGF0aENhbGxU
aHVuaygKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKAotICAgICAgICAgICAgICAgIHJlc3VsdC5leGVjdXRhYmxlQWRkcmVzcygp
KSkuY2FsbFRhcmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpLmNhbGxUYXJnZXQoKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwpAQCAtMzg2LDE0ICszODYsMTcgQEAgc3RhdGljIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdAogCiBzdGF0aWMgVl9KSVRPcGVyYXRpb25f
RVNzaUpKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24oY29uc3QgUHV0UHJv
cGVydHlTbG90ICZzbG90LCBQdXRLaW5kIHB1dEtpbmQpCiB7Ci0gICAgaWYgKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpIHsKKyAgICBhdXRvIHBpY2tTbG93UGF0aCA9IFsmXSAoKSAtPiBWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJIHsKKyAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAocHV0
S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOwotICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplOwotICAgIH0KLSAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgfTsKKyAgICByZXR1cm4gdGFnQ0Z1
bmN0aW9uUHRyKHBpY2tTbG93UGF0aCgpLCBTbG93UGF0aFB0clRhZyk7CiB9CiAKIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgUHV0S2luZCBwdXRLaW5kKQpAQCAtMTA2OCw3ICsxMDcxLDcgQEAgdm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKAogICAgICAgICAvLyB3aXRoIGEgbm9uLWRlY29yYXRlZCBib3R0b20gYml0IGJ1
dCBhIG5vcm1hbCBjYWxsIGNhbGxzIGFuIGFkZHJlc3Mgd2l0aCBhIGRlY29yYXRlZCBib3R0b20g
Yml0LgogICAgICAgICBib29sIGlzVGFpbENhbGwgPSBjYWxsVG9Db2RlUHRyLmNhbGwuaXNGbGFn
U2V0KENDYWxsSGVscGVyczo6Q2FsbDo6VGFpbCk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
Ci0gICAgICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGlzVGFpbENhbGwg
PyBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgY2FsbFRvQ29kZVB0ci5j
YWxsLCBGdW5jdGlvblB0cih0YWdDb2RlUHRyKGlzVGFpbENhbGwgPyBjYWxsVG9Db2RlUHRyLmNv
ZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgQ29kZUVudHJ5UHRyVGFnKSkpOwogICAgIH0KICAgICBpZiAoaXNXZWJBc3NlbWJs
eSB8fCBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApKTsKQEAgLTEwNzgsNyArMTA4MSw3IEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRS
ZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09E
RV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAg
ICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCiAgICAgICAgICAg
ICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRz
ICVzIiwKICAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRv
Q1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24oKS5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAg
ICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCkBAIC0xMTI0
LDcgKzExMjcsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgCiAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplOwogICAgIH0KIAotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wdGltaXplZEZ1bmN0aW9uKTsK
KyAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0
aENhbGxMb2NhdGlvbigpLCB0YWdDRnVuY3Rpb25QdHIob3B0aW1pemVkRnVuY3Rpb24sIFNsb3dQ
YXRoUHRyVGFnKSk7CiAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZv
LCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjI5NTkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LT5tb3ZlKEpJVDo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEpJVDo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgbV9qaXQtPm1vdmUoSklUOjpU
cnVzdGVkSW1tUHRyKG1fcGMpLCBKSVQ6OmFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICAgICAg
SklUOjpDYWxsIGNhbGwgPSBtX2ppdC0+Y2FsbCgpOworICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9
IG1faml0LT5jYWxsKE5vUHRyVGFnKTsKICAgICAgICAgbV9qaXQtPm1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoY2FsbCwgbV9qaXQtPm1fYnl0ZWNvZGVPZmZzZXQsIG1fc3R1Yi52YWx1ZSgpKSk7
CiAKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIyOTU5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsMTQgKzE3MCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFs
bGJhY2spKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNp
emUoKTsgaSsrKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5m
aXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICJTcGVjaWFsaXplZCB0aHVuayBmb3IgJXMiLCB0aHVua0tpbmQpOwor
ICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAi
U3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBSZWdpc3RlcjAg
YXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgICAgIC8vIGFuZCByZXR1cm4gdmFsdWUuIExpa2Ug
YW55IHNlbnNpYmxlIGFyY2hpdGVjdHVyZSB3b3VsZC4KICAgICAgICAgdm9pZCBjYWxsRG91Ymxl
VG9Eb3VibGUoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
Y2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoKSwgZnVuY3Rpb24pKTsKKyAgICAgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBm
dW5jdGlvbikpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGNhbGxEb3VibGVU
b0RvdWJsZVByZXNlcnZpbmdSZXR1cm4oRnVuY3Rpb25QdHIgZnVuY3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAy
Mjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dGhyb3dFeGNlcHRpb25Gcm9tCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBOb1B0clRhZyk7CiAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJUaHJvdyBleGNlcHRpb24g
ZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCiBzdGF0aWMgdm9pZCBzbG93UGF0aEZv
cigKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBO
b1B0clRhZyk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCA4KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHNs
b3dQYXRoRm9yKAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShzbG93UGF0aEZ1bmN0
aW9uKT4oR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgTm9QdHJUYWcpOwogICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIHZv
aWQgc2xvd1BhdGhGb3IoCiAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAgIGppdC5q
dW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCkBAIC0xNDEsNyArMTQxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9w
ZXJhdGlvbkxpbmtDYWxsKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
IkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAK
IC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2lu
Y2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgpAQCAtMTUzLDcgKzE1Myw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWwKICAgICBzbG93UGF0aEZvcihqaXQs
IHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKTsKICAgICAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsi
KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJMaW5r
IHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIC8vIEZJWE1FOiBXZSBz
aG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1lZ2Ftb3JwaGljIHZpcnR1YWwgY2FsbCB2cy4g
YSBzbG93CkBAIC0yMjYsNyArMjI2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxU
aHVua0ZvcihWTQogICAgICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQ
UkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5m
bzo6cmVnVDQpOwogICAgIH0KLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIE5vUHRyVGFnKTsKIAogICAgIG5vdEpTRnVuY3Rpb24ubGlu
aygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZv
OjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKQEAgLTIzNiwxMiArMjM2LDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICAKICAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7Ci0gICAgCisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAg
ICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKICAgICAg
ICAgIlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpOwog
fQpAQCAtMjk0LDkgKzI5Myw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZl
Rm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpT
RnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSks
IEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VK
SVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0lu
dGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CisgICAgICAg
IGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRhZyk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdU
MSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSkpOwor
ICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6
cmVnVDEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkp
LCBOb1B0clRhZyk7CiAKICAgICBqaXQuYWRkUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoOCksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAgLTMxNSw3
ICszMTQsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAg
ICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNp
LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgWDg2
UmVnaXN0ZXJzOjpyOSk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW02
NChOYXRpdmVDb2RlUG9pc29uOjprZXkoKSksIFg4NlJlZ2lzdGVyczo6ZXNpKTsKICAgICBqaXQu
eG9yNjQoWDg2UmVnaXN0ZXJzOjplc2ksIFg4NlJlZ2lzdGVyczo6cjkpOwotICAgIGppdC5jYWxs
KFg4NlJlZ2lzdGVyczo6cjkpOworICAgIGppdC5jYWxsKFg4NlJlZ2lzdGVyczo6cjksIE5vUHRy
VGFnKTsKIAogI2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVk
eCwgcjgsIHI5LCAuLi4pOwpAQCAtMzMwLDkgKzMyOSw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtG
dW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBYODZSZWdp
c3RlcnM6OnI5KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKKyAgICAgICAgaml0
LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRhZyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5j
YWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSk7CisgICAgICAgIGppdC5j
YWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgTm9QdHJUYWcpOwogCiAg
ICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDQgKiBzaXplb2YoaW50
NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCkBA
IC0zNTQsNyArMzUzLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JH
ZQogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhBUk02NFJlZ2lz
dGVyczo6eDEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2lu
ZCkpLCBBUk02NFJlZ2lzdGVyczo6eDIpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpU
cnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNvbjo6a2V5KCkpLCBBUk02NFJlZ2lzdGVyczo6eDEp
OwogICAgIGppdC54b3I2NChBUk02NFJlZ2lzdGVyczo6eDEsIEFSTTY0UmVnaXN0ZXJzOjp4Mik7
Ci0gICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6OngyKTsKKyAgICBqaXQuY2FsbChBUk02NFJl
Z2lzdGVyczo6eDIsIE5vUHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAj
aWYgQ1BVKE1JUFMpCkBAIC0zNzAsOSArMzY5LDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0
aW9uVHlwZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJ
VDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgICAgIGppdC54
b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5
KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1
bmN0aW9uKSk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50
ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRhZyk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpT
SW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0
aXZlRnVuY3Rpb25Gb3Ioa2luZCkpKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6
b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIE5vUHRyVGFnKTsKIAogI2lmIENQVShN
SVBTKQogICAgIC8vIFJlc3RvcmUgc3RhY2sgc3BhY2UKQEAgLTQxNiw4ICs0MTUsOCBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAjZW5kaWYKICAgICBqaXQubW92
ZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTSW50ZXJmYWNlSklUOjphcmd1
bWVudEdQUjApOwogI2VuZGlmCi0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW1QdHIoRnVuY3Rpb25QdHIob3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24pLnZhbHVlKCkpLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDMpOwotICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdU
Myk7CisgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoRnVuY3Rpb25Q
dHIob3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24sIE5vUHRyVGFnKS52YWx1ZSgpKSwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QzKTsKKyAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMsIE5v
UHRyVGFnKTsKICNpZiBDUFUoWDg2KSAmJiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGppdC5hZGRQ
dHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwgSlNJbnRlcmZhY2VKSVQ6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICNlbGlmIE9TKFdJTkRPV1MpCkBAIC00MjcsNyArNDI2LDcgQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
IiVzICVzJXMgdHJhbXBvbGluZSIsIHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25U
eXBlOjpKU0Z1bmN0aW9uID8gIm5hdGl2ZSIgOiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50
ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlU
eXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVk
IFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVu
a0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUi
IDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAi
VGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0
U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtp
bmQpLmRhdGEoKSk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJh
dG9yKFZNKiB2bSkKQEAgLTU4NCw3ICs1ODMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJp
dHlGaXh1cEdlbmVyYXRvCiAjZW5kaWYKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAiZml4dXAgYXJpdHkiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsICJmaXh1cCBhcml0eSIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5y
ZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQpAQCAtNTk0LDcgKzU5Myw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXQKICAgICBqaXQuYnJlYWtwb2ludCgpOwogCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICJ1bnJlYWNoYWJsZSB0aHVuayIpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgInVucmVhY2hhYmxl
IHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1
bmtKSVQmIGppdCwgVk0qIHZtKQpAQCAtMTE4Miw3ICsxMTgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC54b3I2NChHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOwogI2VuZGlmCiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQu
Y2FsbChHUFJJbmZvOjpyZWdUMCwgTm9QdHJUYWcpOwogICAgIAogICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKQEAgLTExOTAsNyArMTE4OSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUs
IENvZGVMb2NhdGlvbkxhYmVsKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0
U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBsaW5r
QnVmZmVyLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGgg
bm8gYXJndW1lbnRzIik7CisgICAgICAgIGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiU3BlY2lhbGl6
ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw1MSArNTEs
NTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNfRVhQT1JUX1BSSVZBVEUgdm1FbnRyeQogCiBuYW1lc3Bh
Y2UgTExJbnQgewogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlVGh1bmtX
aXRoSnVtcFRvKFZNKiB2bSwgdm9pZCAoKnRhcmdldCkoKSwgY29uc3QgY2hhciAqdGh1bmtLaW5k
KQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyhW
TSogdm0sIE9wY29kZUlEIG9wY29kZUlELCBQdHJUYWcgdGh1bmtUYWcsIGNvbnN0IGNoYXIgKnRo
dW5rS2luZCkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwotICAgIAorCiAgICAgLy8g
RklYTUU6IHRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0IG9uIFg4NiwgYnV0
IEknbSBub3Qgc3VyZSBJIGNhcmUuCisgICAgTExJbnRDb2RlIHRhcmdldCA9IExMSW50OjpnZXRD
b2RlRnVuY3Rpb25QdHIob3Bjb2RlSUQpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSksIEpTSW50ZXJmYWNlSklU
OjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICAKKyAg
ICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIHB0clRhZyhCeXRlY29kZUhlbHBlclB0
clRhZywgb3Bjb2RlSUQpKTsKKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAiTExJ
bnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCB0aHVua1RhZywgIkxMSW50ICVzIHByb2xvZ3VlIHRodW5rIiwgdGh1
bmtLaW5kKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ2FsbEVudHJ5
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1
bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSksICJmdW5jdGlvbiBmb3IgY2FsbCIpOworICAgIHJldHVybiBnZW5lcmF0ZVRo
dW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUsIENvZGVF
bnRyeVB0clRhZywgImZ1bmN0aW9uIGZvciBjYWxsIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2bSwgTExJbnQ6OmdldENvZGVGdW5j
dGlvblB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgImZ1bmN0aW9u
IGZvciBjb25zdHJ1Y3QiKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0s
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUsIENvZGVFbnRyeVB0clRhZywg
ImZ1bmN0aW9uIGZvciBjb25zdHJ1Y3QiKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1
bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgImZ1bmN0aW9uIGZvciBjYWxs
IHdpdGggYXJpdHkgY2hlY2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8o
dm0sIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrLCBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZywgImZ1bmN0aW9uIGZvciBjYWxsIHdpdGggYXJpdHkgY2hlY2siKTsKIH0K
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1Ro
dW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1w
VG8odm0sIExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eV9jaGVjayksICJmdW5jdGlvbiBmb3IgY29uc3RydWN0IHdpdGggYXJpdHkgY2hl
Y2siKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2ssIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRy
VGFnLCAiZnVuY3Rpb24gZm9yIGNvbnN0cnVjdCB3aXRoIGFyaXR5IGNoZWNrIik7CiB9CiAKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBldmFsRW50cnlUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRlVGh1bmtXaXRoSnVtcFRvKHZtLCBMTEludDo6Z2V0Q29kZUZ1bmN0
aW9uUHRyKGxsaW50X2V2YWxfcHJvbG9ndWUpLCAiZXZhbCIpOworICAgIHJldHVybiBnZW5lcmF0
ZVRodW5rV2l0aEp1bXBUbyh2bSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSwgQ29kZUVudHJ5UHRyVGFn
LCAiZXZhbCIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcHJvZ3JhbUVudHJ5VGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyh2
bSwgTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgInBy
b2dyYW0iKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X3By
b2dyYW1fcHJvbG9ndWUsIENvZGVFbnRyeVB0clRhZywgInByb2dyYW0iKTsKIH0KIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG1vZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKLSAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIExMSW50OjpnZXRDb2Rl
RnVuY3Rpb25QdHIobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpLCAibW9kdWxlX3Byb2dy
YW0iKTsKKyAgICByZXR1cm4gZ2VuZXJhdGVUaHVua1dpdGhKdW1wVG8odm0sIGxsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcsICJtb2R1bGVfcHJvZ3JhbSIpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBMTEludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHRyVGFnLmgJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIGVudW0gUHRy
VGFnIDogdWludHB0cl90IHsKICAgICBOb1B0clRhZyA9IDAsCiAgICAgTmVhckNhbGxQdHJUYWcs
CiAgICAgTmVhckp1bXBQdHJUYWcsCisKICAgICBDRnVuY3Rpb25QdHJUYWcsCiAKICAgICBCeXRl
Y29kZVB0clRhZywKQEAgLTQzLDYgKzQ0LDEyIEBAIGVudW0gUHRyVGFnIDogdWludHB0cl90IHsK
ICAgICBKSVRDb2RlUHRyVGFnLAogICAgIE5hdGl2ZUNvZGVQdHJUYWcsCiAgICAgU2xvd1BhdGhQ
dHJUYWcsCisKKyAgICBZYXJyOEJpdFB0clRhZywKKyAgICBZYXJyMTZCaXRQdHJUYWcsCisgICAg
WWFyck1hdGNoT25seThCaXRQdHJUYWcsCisgICAgWWFyck1hdGNoT25seTE2Qml0UHRyVGFnLAor
ICAgIFlhcnJCYWNrdHJhY2tQdHJUYWcsCiB9OwogCiAjaWYgIVVTRShQT0lOVEVSX1BST0ZJTElO
RykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0Nyw3ICsxMTQ3LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9T
YXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7CiAgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFtyZXR1cm5UeXBlXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAw
IDogMV0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJu
VHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBOb1B0clRhZyk7CiAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgVXBzaWxvblZhbHVlKiBlbWJlZGRlckNhbGxS
ZXN1bHRVcHNpbG9uID0gcmV0dXJuVHlwZSA9PSBWb2lkID8gbnVsbHB0ciA6IGlzRW1iZWRkZXJC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZW1iZWRkZXJD
YWxsUmVzdWx0KTsKQEAgLTEzMzAsNyArMTMzMCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVD
b2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgaml0LmNh
bGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CisgICAgICAgICAg
ICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwg
Tm9QdHJUYWcpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyMjk1OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3Ry
YWN0TG9jCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVu
Y3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzIw
LDcgKzMyMCw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2MKICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5k
ZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIE5vUHRyVGFnLCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVz
IiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1v
dmUoY29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTMgKzc2LDEzIEBAIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKIAogICAgIC8vIFRhaWwgY2FsbCBpbnRv
IHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCiAgICAgaml0LmxvYWRQdHIoc2NyYXRj
aCwgc2NyYXRjaCk7Ci0gICAgaml0Lmp1bXAoc2NyYXRjaCk7CisgICAgaml0Lmp1bXAoc2NyYXRj
aCwgTm9QdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOwogCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGlt
cG9ydEluZGV4KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJU
YWcsICJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
NyArOTgsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgfQog
CiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNv
bXBpbGF0aW9uPigKLSAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAiV2ViQXNzZW1i
bHkgT01HIGZ1bmN0aW9uWyVpXSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisg
ICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJXZWJBc3NlbWJseSBP
TUcgZnVuY3Rpb25bJWldICVzIiwgbV9mdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAg
ICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCiAgICAgb21n
RW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVS
ZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCShyZXZpc2lvbiAyMjk1OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTUgKzUxLDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2Vw
dGlvbkZyb20KICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0g
ICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hv
dWxkIG5vdCByZWFjaCB0aGlzLgogCiAgICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cih0aHJvd1dhc21FeGNlcHRpb24pKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20g
V2FzbSIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93RnJv
bVdhc21UaHVua0dlbmVyYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQpAQCAtNzMs
NyArNzMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dTdGFja092ZXJmbG93CiAgICAg
YXV0byBqdW1wVG9FeGNlcHRpb25IYW5kbGVyID0gaml0Lmp1bXAoKTsKICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIGxpbmtCdWZmZXIubGluayhq
dW1wVG9FeGNlcHRpb25IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChUaHVua3M6OnNpbmdsZXRv
bigpLnN0dWIobG9ja2VyLCB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJUaHJvdyBzdGFj
ayBvdmVyZmxvdyBmcm9tIFdhc20iKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOb1B0clRhZywgIlRocm93IHN0YWNrIG92ZXJmbG93IGZyb20gV2FzbSIpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJpZ2dlck9NR1RpZXJVcFRodW5rR2VuZXJhdG9yKGNvbnN0
IEFic3RyYWN0TG9ja2VyJikKQEAgLTkyLDE0ICs5MiwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdHJpZ2dlck9NR1RpZXJVcFRoCiAgICAgdHlwZWRlZiB2b2lkICgqUnVuKShJbnN0YW5jZSos
IHVpbnQzMl90KTsKICAgICBSdW4gcnVuID0gT01HUGxhbjo6cnVuRm9ySW5kZXg7CiAgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocnVuKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjphcmd1bWVudEdQUjIsIE5vUHRy
VGFnKTsKIAogICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zy
b21TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBSZWdpc3RlclNldCgpLCBudW1i
ZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24sIGV4dHJhUGFkZGluZ0J5
dGVzKTsKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsK
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJUcmlnZ2VyIE9NRyB0aWVyIHVwIik7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJUcmlnZ2VyIE9N
RyB0aWVyIHVwIik7CiB9CiAKIHN0YXRpYyBUaHVua3MqIHRodW5rczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAJKHJldmlzaW9uIDIyOTU5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LCBCCiAgICAgICAgIC8vIExldCdzIGJlIHBhcmFub2lkIG9uIHRoZSBleGNlcHRpb24gcGF0aCBh
bmQgemVybyBvdXQgdGhlIHBvaXNvbiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgaW4gYW4gYXJndW1l
bnQgR1BSLgogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKIAotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgp
OworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAgICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0
KShFeGVjU3RhdGUqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpIC0+IHZvaWQgewpAQCAtMTE2LDcg
KzExNiw3IEBAIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEIKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkp
OwogCiAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7Ci0gICAgICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsKKyAgICAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJXZWJBc3NlbWJseS0+
SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KTsK
ICAgICB9CiAgICAgCiAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwpAQCAtMzAy
LDcgKzMwMiw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKIAog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMg
Pj0gNCwgIldlIHJlbHkgb24gdGhpcyB3aXRoIHRoZSBjYWxsIGJlbG93LiIpOwogICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY2FsbEZ1bmMpPihHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZUluZGV4KSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlcikpOwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CiAgICAgICAgIGF1
dG8gbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKIAogICAgICAgICAvLyBFeGNlcHRpb24gaGVy
ZS4KQEAgLTMxNCw3ICszMTQsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGCiAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKICAgICAgICAgICAg
IEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgIH07Ci0gICAgICAgIGF1
dG8gZXhjZXB0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGF1dG8gZXhjZXB0aW9uQ2Fs
bCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKnZtKTsKIAogICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwpAQCAtMzQyLDcgKzM0
Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKICAgICAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIGNhbGxGdW5jKTsKICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGV4Y2VwdGlvbkNhbGwsIGRvVW53aW5kaW5nKTsKIAotICAgICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCAiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIs
IGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiV2ViQXNzZW1i
bHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmUudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgLy8gTm90ZTogV2UgZG9uJ3Qg
bmVlZCB0byBwZXJmb3JtIGEgc3RhY2sgY2hlY2sgaGVyZSBzaW5jZSBXYXNtQjNJUkdlbmVyYXRv
cgpAQCAtNTQ2LDcgKzU0Niw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmlu
ZGluZ0YKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvSTMyKT4oR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwotICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBhdXRvIGNhbGwgPSBq
aXQuY2FsbChOb1B0clRhZyk7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVt
aXRKdW1wSWZFeGNlcHRpb24oKnZtKSk7CiAKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNTgxLDcgKzU4MSw3IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0YKIAogICAgICAgICBub3RBTnVtYmVyLmxpbmso
JmppdCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9GMzIp
PihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxs
KCk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE5vUHRyVGFnKTsKICAgICAgICAgZXhj
ZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigqdm0pKTsKIAogICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CkBAIC02
MTUsNyArNjE1LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgog
CiAgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKGNvbnZlcnRUb0Y2NCk+KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoTm9QdHJUYWcpOwogICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVt
cElmRXhjZXB0aW9uKCp2bSkpOwogCiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTYzNCw3ICs2MzQsNyBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGCiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZq
aXQpOwogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0tPnRvcEVudHJ5RnJhbWUpOwogICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoTm9QdHJUYWcpOwog
ICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAgICAgICAgIHZvaWQg
KCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lk
IHsKQEAgLTY1OSw3ICs2NTksNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGCiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhl
cik7CiAKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgIldlYkFzc2VtYmx5
LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBOb1B0clRhZywgIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBp
bXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQogCiB2
b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlvblR5
cGUgdHlwZSwgSW5zdGFuY2UqIHdhc21JbnN0YW5jZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMjk1OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFlhcnIgewogCiB0ZW1wbGF0ZTxZYXJySklUQ29tcGls
ZU1vZGUgY29tcGlsZU1vZGU+CiBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtYmxlciB7Ci0gICAgZnJpZW5kIHZvaWQgaml0Q29tcGlsZShWTSosIFlhcnJDb2RlQmxvY2sm
IGppdE9iamVjdCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0dGVy
bnMsIGNvbnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSk7
CisgICAgZnJpZW5kIHZvaWQgaml0Q29tcGlsZShWTSosIFlhcnJDb2RlQmxvY2smLCBjb25zdCBT
dHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVy
cm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsKIAogI2lmIENQVShBUk0pCiAg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBBUk1SZWdpc3RlcnM6OnIwOwpAQCAt
NjA0LDcgKzYwNCw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0K
IAogICAgIHZvaWQgbG9hZEZyb21GcmFtZUFuZEp1bXAodW5zaWduZWQgZnJhbWVMb2NhdGlvbikK
ICAgICB7Ci0gICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZnJhbWVM
b2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAganVtcChBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSksIHB0clRhZyhZYXJy
QmFja3RyYWNrUHRyVGFnLCAmbV9jb2RlQmxvY2spKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBh
bGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVzKHVuc2lnbmVkIGNhbGxGcmFtZVNpemUpCkBAIC05Mjcs
MTEgKzkyNywxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRp
b24gdG8gbGluayBhbGwgcmV0dXJuIGFkZHJlc3Nlcy4KLSAgICAgICAgdm9pZCBsaW5rRGF0YUxh
YmVscyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorICAgICAgICB2b2lkIGxpbmtEYXRhTGFiZWxz
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9jaykKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9iYWNrdHJhY2tSZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIucGF0Y2gobV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fZGF0YUxh
YmVsLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9iYWNrdHJhY2tSZWNvcmRzW2ldLm1fYmFja3Ry
YWNrTG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKG1fYmFja3Ry
YWNrUmVjb3Jkc1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmFja3Ry
YWNrUmVjb3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uLCBwdHJUYWcoWWFyckJhY2t0cmFja1B0
clRhZywgJmNvZGVCbG9jaykpKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTMyODIs
NiArMzI4MiwxMCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAK
ICAgICAgICAgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5ID0gbGFiZWwoKTsKIAorI2lm
IENQVShBUk02NCkKKyAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworI2VuZGlmCisKICAgICAgICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZWdUMCk7
CiAKICAgICAgICAgcmV0KCk7CkBAIC0zMzQzLDYgKzMzNDcsNyBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjplYnAsIDIgKiBzaXplb2Yodm9pZCopKSwgb3V0cHV0KTsKICAgICAjZW5kaWYK
ICNlbGlmIENQVShBUk02NCkKKyAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAg
ICAgICAgICAgcHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigweDEwMDAwKSwgc3VwcGxlbWVudGFyeVBsYW5l
c0Jhc2UpOwpAQCAtMzQxNyw5ICszNDIyLDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKIHB1YmxpYzoKLSAgICBZYXJyR2VuZXJhdG9yKFZNKiB2
bSwgWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKKyAgICBZYXJy
R2VuZXJhdG9yKFZNKiB2bSwgWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDb2RlQmxvY2smIGNv
ZGVCbG9jaywgWWFyckNoYXJTaXplIGNoYXJTaXplKQogICAgICAgICA6IG1fdm0odm0pCiAgICAg
ICAgICwgbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQogICAgICAgICAsIG1fY2hhclNpemUoY2hhclNpemUpCiAgICAgICAgICwgbV9kZWNvZGVTdXJy
b2dhdGVQYWlycyhtX2NoYXJTaXplID09IENoYXIxNiAmJiBtX3BhdHRlcm4udW5pY29kZSgpKQog
ICAgICAgICAsIG1fdW5pY29kZUlnbm9yZUNhc2UobV9wYXR0ZXJuLnVuaWNvZGUoKSAmJiBtX3Bh
dHRlcm4uaWdub3JlQ2FzZSgpKQpAQCAtMzQzMSwxOCArMzQzNywyMCBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCisg
ICAgdm9pZCBjb21waWxlKCkKICAgICB7CisgICAgICAgIFlhcnJDb2RlQmxvY2smIGNvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOworCiAjaWZuZGVmIEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCiAgICAg
ICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7Ci0gICAgICAgICAgICBqaXRPYmplY3Qu
c2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbihKSVRGYWlsdXJlUmVhc29uOjpEZWNvZGVTdXJy
b2dhdGVQYWlyKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJl
UmVhc29uKEpJVEZhaWx1cmVSZWFzb246OkRlY29kZVN1cnJvZ2F0ZVBhaXIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShZQVJSX0pJVF9BTExf
UEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1YnBhdHRl
cm5zKQotICAgICAgICAgICAgaml0T2JqZWN0LnNldFVzZXNQYXRlcm5Db250ZXh0QnVmZmVyKCk7
CisgICAgICAgICAgICBjb2RlQmxvY2suc2V0VXNlc1BhdGVybkNvbnRleHRCdWZmZXIoKTsKICNl
bmRpZgogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSBiZWZvcmUgZ2VuZXJhdGluZyBj
b2RlIHNpbmNlIHdlIHNldCBmbGFncyBiYXNlZCBvbiBjb21waWxhdGlvbiB0aGF0CkBAIC0zNDUw
LDcgKzM0NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG9wQ29tcGlsZUJvZHkobV9wYXR0ZXJuLm1f
Ym9keSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9mYWlsdXJlUmVhc29uKSB7Ci0gICAgICAg
ICAgICBqaXRPYmplY3Quc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJlYXNvbigqbV9mYWlsdXJlUmVh
c29uKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29u
KCptX2ZhaWx1cmVSZWFzb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMzQ5NywzMiArMzUwNSwzMiBAQCBwdWJsaWM6CiAKICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAg
ICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oSklURmFpbHVyZVJl
YXNvbjo6RXhlY3V0YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay5zZXRGYWxsQmFja1dpdGhGYWlsdXJlUmVhc29uKEpJVEZhaWx1cmVSZWFzb246OkV4
ZWN1dGFibGVNZW1vcnlBbGxvY2F0aW9uRmFpbHVyZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIW1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJDYWxscy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHRyeVJlYWRVbmljb2Rl
Q2hhcmFjdGVySGVscGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdHJ5UmVhZFVuaWNvZGVD
aGFyYWN0ZXJFbnRyeSk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0cnlSZWFkVW5p
Y29kZUNoYXJhY3RlckhlbHBlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RyeVJlYWRVbmlj
b2RlQ2hhcmFjdGVyRW50cnksIE5lYXJDYWxsUHRyVGFnKTsKIAogICAgICAgICAgICAgZm9yIChh
dXRvIGNhbGwgOiBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyQ2FsbHMpCiAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKTsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMo
bGlua0J1ZmZlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMo
bGlua0J1ZmZlciwgY29kZUJsb2NrKTsKIAogICAgICAgICBpZiAoY29tcGlsZU1vZGUgPT0gTWF0
Y2hPbmx5KSB7CiAgICAgICAgICAgICBpZiAobV9jaGFyU2l6ZSA9PSBDaGFyOCkKLSAgICAgICAg
ICAgICAgICBqaXRPYmplY3Quc2V0OEJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCAiTWF0Y2gtb25seSA4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLnNldDhCaXRDb2RlTWF0Y2hPbmx5KEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCAmY29kZUJsb2NrKSwgIk1h
dGNoLW9ubHkgOC1iaXQgcmVndWxhciBleHByZXNzaW9uIikpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGppdE9iamVjdC5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCAiTWF0Y2gtb25seSAxNi1iaXQgcmVndWxhciBleHByZXNzaW9uIikp
OworICAgICAgICAgICAgICAgIGNvZGVCbG9jay5zZXQxNkJpdENvZGVNYXRjaE9ubHkoRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCBwdHJUYWcoWWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCAmY29k
ZUJsb2NrKSwgIk1hdGNoLW9ubHkgMTYtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NoYXJTaXplID09IENoYXI4KQotICAgICAg
ICAgICAgICAgIGppdE9iamVjdC5zZXQ4Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICI4LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LnNldDhCaXRDb2RlKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgcHRyVGFnKFlhcnI4Qml0UHRy
VGFnLCAmY29kZUJsb2NrKSwgIjgtYml0IHJlZ3VsYXIgZXhwcmVzc2lvbiIpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBqaXRPYmplY3Quc2V0MTZCaXRDb2RlKEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgIjE2LWJpdCByZWd1bGFyIGV4cHJlc3Npb24iKSk7CisgICAgICAg
ICAgICAgICAgY29kZUJsb2NrLnNldDE2Qml0Q29kZShGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
IHB0clRhZyhZYXJyMTZCaXRQdHJUYWcsICZjb2RlQmxvY2spLCAiMTYtYml0IHJlZ3VsYXIgZXhw
cmVzc2lvbiIpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9mYWlsdXJlUmVhc29uKQotICAg
ICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrV2l0aEZhaWx1cmVSZWFzb24oKm1fZmFpbHVy
ZVJlYXNvbik7CisgICAgICAgICAgICBjb2RlQmxvY2suc2V0RmFsbEJhY2tXaXRoRmFpbHVyZVJl
YXNvbigqbV9mYWlsdXJlUmVhc29uKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTMwLDYgKzM1
MzgsNyBAQCBwcml2YXRlOgogCiAgICAgWWFyclBhdHRlcm4mIG1fcGF0dGVybjsKIAorICAgIFlh
cnJDb2RlQmxvY2smIG1fY29kZUJsb2NrOwogICAgIFlhcnJDaGFyU2l6ZSBtX2NoYXJTaXplOwog
CiAgICAgLy8gVXNlZCB0byBkZXRlY3QgcmVndWxhciBleHByZXNzaW9uIGNvbnN0cnVjdHMgdGhh
dCBhcmUgbm90IGN1cnJlbnRseQpAQCAtMzU5MSwxNCArMzYwMCwxNCBAQCBzdGF0aWMgdm9pZCBk
dW1wQ29tcGlsZUZhaWx1cmUoSklURmFpbHVyCiAgICAgfQogfQogCi12b2lkIGppdENvbXBpbGUo
WWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhcnJDaGFyU2l6ZSBjaGFyU2l6ZSwgVk0qIHZtLCBZYXJy
Q29kZUJsb2NrJiBqaXRPYmplY3QsIFlhcnJKSVRDb21waWxlTW9kZSBtb2RlKQordm9pZCBqaXRD
b21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFZNKiB2
bSwgWWFyckNvZGVCbG9jayYgY29kZUJsb2NrLCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsK
ICAgICBpZiAobW9kZSA9PSBNYXRjaE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hP
bmx5Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKKyAgICAgICAg
WWFyckdlbmVyYXRvcjxNYXRjaE9ubHk+KHZtLCBwYXR0ZXJuLCBjb2RlQmxvY2ssIGNoYXJTaXpl
KS5jb21waWxlKCk7CiAgICAgZWxzZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJw
YXR0ZXJucz4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7CisgICAg
ICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPih2bSwgcGF0dGVybiwgY29kZUJs
b2NrLCBjaGFyU2l6ZSkuY29tcGlsZSgpOwogCi0gICAgaWYgKGF1dG8gZmFpbHVyZVJlYXNvbiA9
IGppdE9iamVjdC5mYWlsdXJlUmVhc29uKCkpIHsKKyAgICBpZiAoYXV0byBmYWlsdXJlUmVhc29u
ID0gY29kZUJsb2NrLmZhaWx1cmVSZWFzb24oKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6ZHVt
cENvbXBpbGVkUmVnRXhwUGF0dGVybnMoKSkKICAgICAgICAgICAgIGR1bXBDb21waWxlRmFpbHVy
ZSgqZmFpbHVyZVJlYXNvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuaAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxLDI1ICsxMDEsMjUgQEAgcHVibGljOgog
ICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwg
dW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0
Q29kZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8WWFy
ckpJVENvZGU4PihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFy
dCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsK
KyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2Rl
OD4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBwdHJUYWcoWWFycjhCaXRQdHJU
YWcsIHRoaXMpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0
LCBwYXJlbkNvbnRleHRTaXplKSk7CiAgICAgfQogCiAgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShj
b25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCog
b3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXpl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZSgpKTsKLSAgICAgICAgcmV0dXJu
IE1hdGNoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGUxNj4obV9yZWYxNi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgZnJl
ZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNj4obV9yZWYxNi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgcHRyVGFnKFlhcnIxNkJpdFB0clRhZywgdGhpcykpKGlucHV0LCBz
dGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUp
KTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwg
dW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0
Q29kZU1hdGNoT25seSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8WWFyckpJVENvZGVNYXRjaE9ubHk4PihtX21hdGNoT25seTguY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0LCBw
YXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5j
dGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTg+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgcHRyVGFnKFlhcnJNYXRjaE9ubHk4Qml0UHRyVGFnLCB0aGlzKSkoaW5w
dXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUp
KTsKICAgICB9CiAKICAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwg
dW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXMxNkJp
dENvZGVNYXRjaE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdChyZWludGVycHJl
dF9jYXN0PFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTY+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBmcmVlUGFyZW5Db250ZXh0
LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NG
dW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2PihtX21hdGNoT25seTE2LmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBwdHJUYWcoWWFyck1hdGNoT25seTE2Qml0UHRyVGFnLCB0aGlz
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4
dFNpemUpKTsKICAgICB9CiAjZWxzZQogICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENo
YXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyOTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE4LTAzLTEzICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBFbmhhbmNlIHRoZSBNYWNyb0Fzc2Vt
YmxlciBhbmQgTGlua0J1ZmZlciB0byBzdXBwb3J0IHBvaW50ZXIgcHJvZmlsaW5nLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzNjIzCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zODQ0MzMxND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuICBKdXN0IGFkZGluZyBQdHJUYWdzIHJl
cXVpcmVkIGJ5IG5ldyBNYWNyb0Fzc2VtYmxlciBBUEkuCisKKyAgICAgICAgKiBjc3NqaXQvRnVu
Y3Rpb25DYWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdGlvbkNhbGw6OnByZXBhcmVBbmRD
YWxsKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUp
OgorCiAyMDE4LTAzLTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1NdIE11dGVkIG1lZGlhIHBsYXliYWNrIGNhbiBpbnRlcnJ1cHQgb3V0LW9mLXByb2Nl
c3MgYXVkaW8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHJldmlzaW9u
IDIyOTU5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92ZShtX2ZpcnN0QXJndW1lbnQsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKICAgICAgICAgfQogCi0gICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IG1fYXNzZW1ibGVyLmNhbGwoKTsKKyAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsID0gbV9hc3NlbWJsZXIuY2FsbChKU0M6OkNGdW5jdGlvblB0clRhZyk7CiAgICAgICAgIG1f
Y2FsbFJlZ2lzdHJ5LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjYWxsLCBtX2Z1bmN0aW9uQWRkcmVz
cykpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmNwcAkocmV2aXNpb24gMjI5NTkzKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ0LDkgKzEyNDQsOSBAQCBpbmxp
bmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvCiAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhtX2Z1bmN0aW9uQ2FsbHNbaV0uZmlyc3QsIG1fZnVuY3Rpb25DYWxsc1tpXS5zZWNvbmQp
OwogCiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKLSAgICBjb2RlUmVmID0gbGlua0J1
ZmZlci5maW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoIkNTUyBTZWxlY3RvciBKSVQgZm9yIFwi
JXNcIiIsIG1fb3JpZ2luYWxTZWxlY3Rvci0+c2VsZWN0b3JUZXh0KCkudXRmOCgpLmRhdGEoKSk7
CisgICAgY29kZVJlZiA9IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KEpT
Qzo6Tm9QdHJUYWcsICJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVzXCIiLCBtX29yaWdpbmFsU2Vs
ZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKLSAgICBjb2RlUmVm
ID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAiQ1NTIFNlbGVjdG9yIEpJVCIpOworICAgIGNv
ZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEpTQzo6Tm9QdHJUYWcsICJDU1MgU2Vs
ZWN0b3IgSklUIik7CiAjZW5kaWYKIAogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlv
blR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciB8fCBtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCg==
</data>
<flag name="review"
          id="354336"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>