<?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>107455</bug_id>
          
          <creation_ts>2013-01-21 08:11:20 -0800</creation_ts>
          <short_desc>[chromium] move spell checking mocks to TestRunner library</short_desc>
          <delta_ts>2013-01-22 01:02:12 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91308</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>812169</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-01-21 08:11:20 -0800</bug_when>
    <thetext>[chromium] move spell checking mocks to TestRunner library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812172</commentid>
    <comment_count>1</comment_count>
      <attachid>183790</attachid>
    <who name="">jochen</who>
    <bug_when>2013-01-21 08:12:12 -0800</bug_when>
    <thetext>Created attachment 183790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812176</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-21 08:16:11 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812616</commentid>
    <comment_count>3</comment_count>
      <attachid>183790</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-01-21 22:28:16 -0800</bug_when>
    <thetext>Comment on attachment 183790
Patch

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

&gt; Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h:57
&gt; -    virtual void fillSpellingSuggestionList(const WebKit::WebString&amp; word, WebKit::WebVector&lt;WebKit::WebString&gt;* suggestions) = 0;
&gt; +    virtual void fillSpellingSuggestionList(const WebKit::WebString&amp;, WebKit::WebVector&lt;WebKit::WebString&gt;*) { }

nit: You don&apos;t need to remove the argument names.  &quot;word&quot; &quot;suggestions&quot; have additional information.

&gt; Tools/DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:200
&gt; +    , m_spellcheck(new SpellCheckClient)
&gt;  {
&gt;  }
&gt;  
&gt;  WebTestProxyBase::~WebTestProxyBase()
&gt;  {
&gt; +    delete m_spellcheck;

We should avoid manual memory management.  Can you use OwnPtr&lt;&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812619</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2013-01-21 22:38:35 -0800</bug_when>
    <thetext>Won&apos;t I get an unused arguments warning when I don&apos;t remove the names?

I can&apos;t used OwnPtr in a public API header, and I can&apos;t use WebPrivatePtr since the TestRunner&apos;s implementation doesn&apos;t define WEBKIT_IMPLEMENTATION. Therefore, we use raw pointers, see e.g. WebTestInterfaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812620</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-01-21 22:41:40 -0800</bug_when>
    <thetext>Ah, I understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812741</commentid>
    <comment_count>6</comment_count>
      <attachid>183790</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 01:02:07 -0800</bug_when>
    <thetext>Comment on attachment 183790
Patch

Clearing flags on attachment: 183790

Committed r140396: &lt;http://trac.webkit.org/changeset/140396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812742</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 01:02:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183790</attachid>
            <date>2013-01-21 08:12:12 -0800</date>
            <delta_ts>2013-01-22 01:02:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107455-20130121170907.patch</filename>
            <type>text/plain</type>
            <size>66121</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzI1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTkxMTg4MWI0NmNiNWExODNhZjhmOTAxMmE5YzkyNDEz
NzIzNTk1ZC4uYzYwN2I0MjEwOGUxNzI4M2IzYzU0ODc0ZmU2MTllMDA2NzU0OWFmNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3
IEBACisyMDEzLTAxLTIxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBzcGVsbCBjaGVja2luZyBtb2NrcyB0byBUZXN0UnVu
bmVyIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNzQ1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBjb250ZW50IG1vZHVsZSBkb2Vzbid0IHByb3ZpZGUgaXRzIG93biBXZWJTcGVsbENo
ZWNrQ2xpZW50LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0RGVsZWdhdGUuaDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OldlYlRlc3REZWxlZ2F0
ZTo6ZmlsbFNwZWxsaW5nU3VnZ2VzdGlvbkxpc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAgICAgICAoV2ViVGVzdFByb3h5QmFz
ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZl
bnRTZW5kZXIuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0
UnVubmVyOjptYWtlTWVudUl0ZW1TdHJpbmdzRm9yKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmNwcDogUmVuYW1lZCBm
cm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suY3BwLgor
ICAgICAgICAoTW9ja0dyYW1tYXJDaGVjazo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hl
Y2suaDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tHcmFt
bWFyQ2hlY2suaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNb2NrR3JhbW1hckNoZWNr
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2Nr
U3BlbGxDaGVjay5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9Nb2NrU3BlbGxDaGVjay5jcHAuCisgICAgICAgIChNb2NrU3BlbGxDaGVjazo6TW9ja1NwZWxs
Q2hlY2spOgorICAgICAgICAoTW9ja1NwZWxsQ2hlY2s6On5Nb2NrU3BlbGxDaGVjayk6CisgICAg
ICAgIChpc05vdEFTQ0lJQWxwaGEpOgorICAgICAgICAoTW9ja1NwZWxsQ2hlY2s6OnNwZWxsQ2hl
Y2tXb3JkKToKKyAgICAgICAgKE1vY2tTcGVsbENoZWNrOjpmaWxsU3VnZ2VzdGlvbkxpc3QpOgor
ICAgICAgICAoTW9ja1NwZWxsQ2hlY2s6OmluaXRpYWxpemVJZk5lZWRlZCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suaDog
UmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tTcGVsbENoZWNr
LmguCisgICAgICAgIChNb2NrU3BlbGxDaGVjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6U3BlbGxDaGVja0NsaWVudDo6U3BlbGxDaGVja0NsaWVudCk6
CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlNwZWxs
Q2hlY2tDbGllbnQ6On5TcGVsbENoZWNrQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlNwZWxsQ2hlY2tDbGllbnQ6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlNwZWxsQ2hlY2tDbGllbnQ6OnNwZWxsQ2hlY2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6
U3BlbGxDaGVja0NsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViVGVz
dFJ1bm5lcjo6U3BlbGxDaGVja0NsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZUZXh0KToKKyAgICAg
ICAgKFdlYlRlc3RSdW5uZXI6OlNwZWxsQ2hlY2tDbGllbnQ6OmZpbmlzaExhc3RUZXh0Q2hlY2sp
OgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6U3BlbGxDaGVja0NsaWVudDo6YXV0b0NvcnJlY3RX
b3JkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9T
cGVsbENoZWNrQ2xpZW50Lmg6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3REZWxlZ2F0ZS5oLgorICAgICAgICAoV2ViVGVzdFJ1bm5l
cik6CisgICAgICAgIChTcGVsbENoZWNrQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6
OlNwZWxsQ2hlY2tDbGllbnQ6OnRhc2tMaXN0KToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OlNw
ZWxsQ2hlY2tDbGllbnQ6Om1vY2tTcGVsbENoZWNrKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0RGVsZWdhdGUuaDoKKyAgICAgICAgKFRlc3RE
ZWxlZ2F0ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvV2ViVGVzdEludGVyZmFjZXMuY3BwOgorICAgICAgICAoV2ViVGVzdEludGVyZmFjZXM6Oklu
dGVybmFsKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9XZWJUZXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5
QmFzZTo6V2ViVGVzdFByb3h5QmFzZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpXZWJUZXN0
UHJveHlCYXNlOjp+V2ViVGVzdFByb3h5QmFzZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpX
ZWJUZXN0UHJveHlCYXNlOjpzZXREZWxlZ2F0ZSk6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpX
ZWJUZXN0UHJveHlCYXNlOjpzcGVsbENoZWNrQ2xpZW50KToKKyAgICAgICAgKFdlYlRlc3RSdW5u
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoK
KyAgICAgICAgKFdlYlZpZXdIb3N0OjpXZWJWaWV3SG9zdCk6CisgICAgICAgIChXZWJWaWV3SG9z
dDo6c2V0V2ViV2lkZ2V0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5oOgorICAgICAgICAoV2ViVmlld0hvc3QpOgorCiAyMDEzLTAxLTIxICBWaXZlayBH
YWxhdGFnZSAgPHZpdmVrLnZnQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFF0VGVzdEJyb3dzZXIg
c2hvdWxkIHByb3ZpZGUgd2F5IHRvIGNsZWFyIHNlbGVjdGVkIGVsZW1lbnRzCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQppbmRleCAwNjU1MzJmMGIxMjhkZmM2MTU5MDJj
N2E1ODBjZDI3NTlkZmM4NjcyLi42ZWMyMjJmMGJhZDRlNjk4NDk4MzkyNTJkNWFiNjAwNWNiMjdl
MDc0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBp
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKQEAgLTEyLDEw
ICsxMiw2IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9Nb2NrQ29uc3RyYWludHMuY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9Nb2NrQ29uc3RyYWludHMuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vTW9ja0dyYW1t
YXJDaGVjay5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suaCcs
Ci0gICAgICAgICAgICAnY2hyb21pdW0vTW9ja1NwZWxsQ2hlY2suY3BwJywKLSAgICAgICAgICAg
ICdjaHJvbWl1bS9Nb2NrU3BlbGxDaGVjay5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9Nb2Nr
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vTW9ja1dl
YktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9Nb2NrV2ViTWVk
aWFTdHJlYW1DZW50ZXIuY3BwJywKQEAgLTgxLDYgKzc3LDEyIEBACiAgICAgICAgICAgICAnY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvS2V5Q29kZU1hcHBpbmcuY3BwJywKICAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5oJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5oJywKKyAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrU3BlbGxDaGVjay5jcHAnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVsbENoZWNrLmgnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tDbGllbnQuY3BwJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50Lmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNw
cCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMu
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJv
bGxlci5jcHAnLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a0dyYW1tYXJDaGVjay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrR3Jh
bW1hckNoZWNrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwNDQ3NmVkMzQz
NmRiM2E2MjdhZWUyYWEwYzk1OWVhZWRiMWY1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrR3Jh
bW1hckNoZWNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgotCi0jaW5jbHVkZSAiV2ViVGV4
dENoZWNraW5nUmVzdWx0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0KLSNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLWJvb2wgTW9ja0dyYW1tYXJDaGVjazo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgV2Vi
U3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0PiogcmVzdWx0cykKLXsK
LSAgICBBU1NFUlQocmVzdWx0cyk7Ci0gICAgV1RGOjpTdHJpbmcgc3RyaW5nVGV4dCh0ZXh0LmRh
dGEoKSwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgaWYgKHN0cmluZ1RleHQuZmluZChpc0FTQ0lJQWxw
aGEpID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIEZpbmQgbWF0Y2hpbmcgZ3JhbW1hdGljYWwgZXJyb3JzIGZyb20ga25vd24gb25lcy4g
VGhpcyBmdW5jdGlvbiBoYXMgdG8KLSAgICAvLyBjaGVjayBhbGwgZXJyb3JzIGJlY2F1c2UgdGhl
IGdpdmVuIHRleHQgbWF5IGNvbnNpc3Qgb2YgdHdvIG9yIG1vcmUKLSAgICAvLyBzZW50ZW5jZXMg
dGhhdCBoYXZlIGdyYW1tYXRpY2FsIGVycm9ycy4KLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsK
LSAgICAgICAgY29uc3QgY2hhciogdGV4dDsKLSAgICAgICAgaW50IGxvY2F0aW9uOwotICAgICAg
ICBpbnQgbGVuZ3RoOwotICAgIH0gZ3JhbW1hckVycm9yc1tdID0gewotICAgICAgICB7IkkgaGF2
ZSBhIGlzc3VlLiIsIDcsIDF9LAotICAgICAgICB7IkkgaGF2ZSBhbiBncmFwZS4iLCA3LCAyfSwK
LSAgICAgICAgeyJJIGhhdmUgYW4ga2l3aS4iLCA3LCAyfSwKLSAgICAgICAgeyJJIGhhdmUgYW4g
bXVzY2F0LiIsIDcsIDJ9LAotICAgICAgICB7IllvdSBoYXMgdGhlIHJpZ2h0LiIsIDQsIDN9LAot
ICAgICAgICB7ImFwcGxlIG9yYW5nZSB6ei4iLCAwLCAxNn0sCi0gICAgICAgIHsiYXBwbGUgenog
b3JhbmdlLiIsIDAsIDE2fSwKLSAgICAgICAgeyJhcHBsZSx6eixvcmFuZ2UuIiwgMCwgMTZ9LAot
ICAgICAgICB7Im9yYW5nZSx6eixhcHBsZS4iLCAwLCAxNn0sCi0gICAgICAgIHsidGhlIHRoZSBh
ZGxqIGFkYWFzaiBzZGtsai4gdGhlcmUgdGhlcmUiLCAwLCAzOH0sCi0gICAgICAgIHsienogYXBw
bGUgb3JhbmdlLiIsIDAsIDE2fSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
QVJSQVlTSVpFX1VOU0FGRShncmFtbWFyRXJyb3JzKTsgKytpKSB7Ci0gICAgICAgIGludCBvZmZz
ZXQgPSAwOwotICAgICAgICB3aGlsZSAoKG9mZnNldCA9IHN0cmluZ1RleHQuZmluZChncmFtbWFy
RXJyb3JzW2ldLnRleHQsIG9mZnNldCkpICE9IC0xKSB7Ci0gICAgICAgICAgICByZXN1bHRzLT5h
cHBlbmQoV2ViVGV4dENoZWNraW5nUmVzdWx0KFdlYlRleHRDaGVja2luZ1R5cGVHcmFtbWFyLCBv
ZmZzZXQgKyBncmFtbWFyRXJyb3JzW2ldLmxvY2F0aW9uLCBncmFtbWFyRXJyb3JzW2ldLmxlbmd0
aCkpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IGdyYW1tYXJFcnJvcnNbaV0ubGVuZ3RoOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL01vY2tHcmFtbWFyQ2hlY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjQyNzFiM2ZhM2MyYzAxYWMxMzZjOGUxMDMwNzE2MTkyNmQzZTk4My4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9Nb2NrR3JhbW1hckNoZWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBNb2NrR3JhbW1hckNoZWNrX2gKLSNkZWZpbmUgTW9ja0dyYW1tYXJDaGVj
a19oCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci1zdHJ1Y3Qg
V2ViVGV4dENoZWNraW5nUmVzdWx0OwotCi19Ci0KLS8vIEEgbW9jayBpbXBsZW1lbnRhdGlvbiBv
ZiBhIGdyYW1tYXItY2hlY2tlciB1c2VkIGZvciBXZWJLaXQgdGVzdHMuIFRoaXMgY2xhc3MKLS8v
IG9ubHkgaW1wbGVtZW50cyB0aGUgbWluaW1hbCBmdW5jdGlvbmFyaXRpZXMgcmVxdWlyZWQgYnkg
V2ViS2l0IHRlc3RzLCBpLmUuCi0vLyB0aGlzIGNsYXNzIGp1c3QgY29tcGFyZXMgdGhlIGdpdmVu
IHN0cmluZyB3aXRoIGtub3duIGdyYW1tYXIgbWlzdGFrZXMgaW4KLS8vIHdlYmtpdCB0ZXN0cyBh
bmQgYWRkcyBncmFtbWFyIG1hcmtlcnMgb24gdGhlbS4gRXZlbiB0aG91Z2ggdGhpcyBpcyBzdWZm
aWNlbnQKLS8vIGZvciB3ZWJraXQgdGVzdHMsIHRoaXMgY2xhc3MgaXMgbm90IHN1aXRhYmxlIGZv
ciBhbnkgb3RoZXIgdXNhZ2VzLgotY2xhc3MgTW9ja0dyYW1tYXJDaGVjayB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGJvb2wgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmLCBWZWN0b3I8V2ViS2l0OjpXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+Kik7Ci19OwotCi0jZW5k
aWYgLy8gTW9ja1NwZWxsQ2hlY2tfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1NwZWxsQ2hlY2suY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTW9ja1NwZWxsQ2hlY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTkz
YzcxOTA0MjM1MGQyYzIxZWFhMTlkYWI5ZjVhOTk5OTBhODgxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L01vY2tTcGVsbENoZWNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCi0KLSNpbmNsdWRlIDx3
dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLU1vY2tT
cGVsbENoZWNrOjpNb2NrU3BlbGxDaGVjaygpCi0gICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKSB7
IH0KLQotTW9ja1NwZWxsQ2hlY2s6On5Nb2NrU3BlbGxDaGVjaygpIHsgfQotCi1zdGF0aWMgYm9v
bCBpc05vdEFTQ0lJQWxwaGEoVUNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9
Ci0KLWJvb2wgTW9ja1NwZWxsQ2hlY2s6OnNwZWxsQ2hlY2tXb3JkKGNvbnN0IFdlYlN0cmluZyYg
dGV4dCwgaW50KiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQqIG1pc3NwZWxsZWRMZW5ndGgpCi17Ci0g
ICAgQVNTRVJUKG1pc3NwZWxsZWRPZmZzZXQpOwotICAgIEFTU0VSVChtaXNzcGVsbGVkTGVuZ3Ro
KTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhpcyBzcGVsbGNoZWNrZXIuCi0gICAgaW5pdGlhbGl6
ZUlmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXNldCB0aGUgcmVzdWx0IHZhbHVlcyBhcyBvdXIgc3Bl
bGxjaGVja2VyIGRvZXMuCi0gICAgKm1pc3NwZWxsZWRPZmZzZXQgPSAwOwotICAgICptaXNzcGVs
bGVkTGVuZ3RoID0gMDsKLQotICAgIC8vIENvbnZlcnQgdG8gYSBTdHJpbmcgYmVjYXVzZSB3ZSBz
dG9yZSBTdHJpbmcgaW5zdGFuY2VzIGluCi0gICAgLy8gbV9taXNzcGVsbGVkV29yZHMgYW5kIFdl
YlN0cmluZyBoYXMgbm8gZmluZCgpLgotICAgIFdURjo6U3RyaW5nIHN0cmluZ1RleHQodGV4dC5k
YXRhKCksIHRleHQubGVuZ3RoKCkpOwotICAgIGludCBza2lwcGVkTGVuZ3RoID0gMDsKLQotICAg
IHdoaWxlICghc3RyaW5nVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gRXh0cmFjdCB0aGUg
Zmlyc3QgcG9zc2libGUgRW5nbGlzaCB3b3JkIGZyb20gdGhlIGdpdmVuIHN0cmluZy4KLSAgICAg
ICAgLy8gVGhlIGdpdmVuIHN0cmluZyBtYXkgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycyBv
ciBudW1iZXJzLiBTbywgd2UKLSAgICAgICAgLy8gc2hvdWxkIGZpbHRlciBvdXQgc3VjaCBjaGFy
YWN0ZXJzIGJlZm9yZSBzdGFydCBsb29raW5nIHVwIG91cgotICAgICAgICAvLyBtaXNzcGVsbGVk
LXdvcmQgdGFibGUuCi0gICAgICAgIC8vIChUaGlzIGlzIGEgc2ltcGxlIHZlcnNpb24gb2Ygb3Vy
IFNwZWxsQ2hlY2tXb3JkSXRlcmF0b3IgY2xhc3MuKQotICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4g
c3RyaW5nIGRvZXNuJ3QgaW5jbHVkZSBhbnkgQVNDSUkgY2hhcmFjdGVycywgd2UgY2FuIHRyZWF0
IHRoZQotICAgICAgICAvLyBzdHJpbmcgYXMgdmFsaWQgb25lLgotICAgICAgICAvLyBVbmZvcnR1
bmF0ZWx5LCBUaGlzIGltcGxlbWVudGF0aW9uIHNwbGl0cyBhIGNvbnRyYWN0aW9uLCBpLmUuICJp
c24ndCIgaXMKLSAgICAgICAgLy8gc3BsaXQgaW50byB0d28gcGllY2VzICJpc24iIGFuZCAidCIu
IFRoaXMgaXMgT0sgYmVjYXVzZSB3ZWJraXQgdGVzdHMKLSAgICAgICAgLy8gZG9uJ3QgaGF2ZSBt
aXNzcGVsbGVkIGNvbnRyYWN0aW9ucy4KLSAgICAgICAgaW50IHdvcmRPZmZzZXQgPSBzdHJpbmdU
ZXh0LmZpbmQoaXNBU0NJSUFscGhhKTsKLSAgICAgICAgaWYgKHdvcmRPZmZzZXQgPT0gLTEpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaW50IHdvcmRFbmQgPSBzdHJpbmdUZXh0
LmZpbmQoaXNOb3RBU0NJSUFscGhhLCB3b3JkT2Zmc2V0KTsKLSAgICAgICAgaW50IHdvcmRMZW5n
dGggPSB3b3JkRW5kID09IC0xID8gc3RhdGljX2Nhc3Q8aW50PihzdHJpbmdUZXh0Lmxlbmd0aCgp
KSAtIHdvcmRPZmZzZXQgOiB3b3JkRW5kIC0gd29yZE9mZnNldDsKLQotICAgICAgICAvLyBMb29r
IHVwIG91ciBtaXNzcGVsbGVkLXdvcmQgdGFibGUgdG8gY2hlY2sgaWYgdGhlIGV4dHJhY3RlZCB3
b3JkIGlzIGEKLSAgICAgICAgLy8ga25vd24gbWlzc3BlbGxlZCB3b3JkLCBhbmQgcmV0dXJuIHRo
ZSBvZmZzZXQgYW5kIHRoZSBsZW5ndGggb2YgdGhlCi0gICAgICAgIC8vIGV4dHJhY3RlZCB3b3Jk
IGlmIHRoaXMgd29yZCBpcyBhIGtub3duIG1pc3NwZWxsZWQgd29yZC4KLSAgICAgICAgLy8gKFNl
ZSB0aGUgY29tbWVudCBpbiBNb2NrU3BlbGxDaGVjazo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkgd2h5
IHdlIHVzZSBhCi0gICAgICAgIC8vIG1pc3NwZWxsZWQtd29yZCB0YWJsZS4pCi0gICAgICAgIFdU
Rjo6U3RyaW5nIHdvcmQgPSBzdHJpbmdUZXh0LnN1YnN0cmluZyh3b3JkT2Zmc2V0LCB3b3JkTGVu
Z3RoKTsKLSAgICAgICAgaWYgKG1fbWlzc3BlbGxlZFdvcmRzLmNvbnRhaW5zKHdvcmQpKSB7Ci0g
ICAgICAgICAgICAqbWlzc3BlbGxlZE9mZnNldCA9IHdvcmRPZmZzZXQgKyBza2lwcGVkTGVuZ3Ro
OwotICAgICAgICAgICAgKm1pc3NwZWxsZWRMZW5ndGggPSB3b3JkTGVuZ3RoOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoMCA8IHdvcmRPZmZzZXQgKyB3
b3JkTGVuZ3RoKTsKLSAgICAgICAgc3RyaW5nVGV4dCA9IHN0cmluZ1RleHQuc3Vic3RyaW5nKHdv
cmRPZmZzZXQgKyB3b3JkTGVuZ3RoKTsKLSAgICAgICAgc2tpcHBlZExlbmd0aCArPSB3b3JkT2Zm
c2V0ICsgd29yZExlbmd0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
TW9ja1NwZWxsQ2hlY2s6OmZpbGxTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJTdHJpbmcmIHdvcmQs
IFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykKLXsKLSAgICBpZiAod29yZCA9PSBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJ3ZWxsY29tZSIpKSB7Ci0gICAgICAgIFdlYlZlY3RvcjxXZWJT
dHJpbmc+IHJlc3VsdChzdWdnZXN0aW9ucy0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3VnZ2VzdGlvbnMtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgcmVz
dWx0W2ldID0gKCpzdWdnZXN0aW9ucylbaV07Ci0gICAgICAgIHJlc3VsdFtzdWdnZXN0aW9ucy0+
c2l6ZSgpXSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIndlbGNvbWUiKTsKLSAgICAgICAgc3VnZ2Vz
dGlvbnMtPnN3YXAocmVzdWx0KTsKLSAgICB9Ci19Ci0KLWJvb2wgTW9ja1NwZWxsQ2hlY2s6Omlu
aXRpYWxpemVJZk5lZWRlZCgpCi17Ci0gICAgLy8gRXhpdCBpZiB3ZSBoYXZlIGFscmVhZHkgaW5p
dGlhbGl6ZWQgdGhpcyBvYmplY3QuCi0gICAgaWYgKG1faW5pdGlhbGl6ZWQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSBhIHRhYmxlIHRoYXQgY29uc2lzdHMgb2YgbWlz
c3BlbGxlZCB3b3JkcyB1c2VkIGluIFdlYktpdCBsYXlvdXQKLSAgICAvLyB0ZXN0cy4KLSAgICAv
LyBTaW5jZSBXZWJLaXQgbGF5b3V0IHRlc3RzIGRvbid0IGhhdmUgc28gbWFueSBtaXNzcGVsbGVk
IHdvcmRzIGFzCi0gICAgLy8gd2VsbC1zcGVsbGVkIHdvcmRzLCBpdCBpcyBlYXNpZXIgdG8gY29t
cGFyZSB0aGUgZ2l2ZW4gd29yZCB3aXRoIG1pc3NwZWxsZWQKLSAgICAvLyBvbmVzIHRoYW4gdG8g
Y29tcGFyZSB3aXRoIHdlbGwtc3BlbGxlZCBvbmVzLgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBt
aXNzcGVsbGVkV29yZHNbXSA9IHsKLSAgICAgICAgLy8gVGhlc2Ugd29yZHMgYXJlIGtub3duIG1p
c3NwZWxsZWQgd29yZHMgaW4gd2Via2l0IHRlc3RzLgotICAgICAgICAvLyBJZiB0aGVyZSBhcmUg
b3RoZXIgbWlzc3BlbGxlZCB3b3JkcyBpbiB3ZWJraXQgdGVzdHMsIHBsZWFzZSBhZGQgdGhlbSBp
bgotICAgICAgICAvLyB0aGlzIGFycmF5LgotICAgICAgICAiZm9vIiwKLSAgICAgICAgIkZvbyIs
Ci0gICAgICAgICJiYXoiLAotICAgICAgICAiZm8iLAotICAgICAgICAiTGliZXJ0eUYiLAotICAg
ICAgICAiY2hlbGxvIiwKLSAgICAgICAgInh4eHRlc3R4eHgiLAotICAgICAgICAiWFh4eHgiLAot
ICAgICAgICAiVGV4dHgiLAotICAgICAgICAiYmxvY2txdW90ZWQiLAotICAgICAgICAiYXNkIiwK
LSAgICAgICAgIkxvcmVtIiwKLSAgICAgICAgIk51bmMiLAotICAgICAgICAiQ3VyYWJpdHVyIiwK
LSAgICAgICAgImV1IiwKLSAgICAgICAgImFkbGoiLAotICAgICAgICAiYWRhYXNqIiwKLSAgICAg
ICAgInNka2xqIiwKLSAgICAgICAgImpsa2RzIiwKLSAgICAgICAgImpzYWFkYSIsCi0gICAgICAg
ICJqbGRhIiwKLSAgICAgICAgInp6IiwKLSAgICAgICAgImNvbnRlbnRFZGl0YWJsZSIsCi0gICAg
ICAgIC8vIFRoZSBmb2xsb3dpbmcgd29yZHMgYXJlIHVzZWQgYnkgdW5pdCB0ZXN0cy4KLSAgICAg
ICAgImlmbW1wIiwKLSAgICAgICAgInF3ZXJ0eXVpb3Bhc2QiLAotICAgICAgICAicXdlcnR5dWlv
cGFzZGYiLAotICAgICAgICAid2VsbGNvbWUiCi0gICAgfTsKLQotICAgIG1fbWlzc3BlbGxlZFdv
cmRzLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUobWlzc3Bl
bGxlZFdvcmRzKTsgKytpKQotICAgICAgICBtX21pc3NwZWxsZWRXb3Jkcy5hZGQoV1RGOjpTdHJp
bmc6OmZyb21VVEY4KG1pc3NwZWxsZWRXb3Jkc1tpXSksIGZhbHNlKTsKLQotICAgIC8vIE1hcmsg
YXMgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCB0aGlzIG9iamVjdCBmcm9tIGJlaW5nIGluaXRpYWxp
emVkIHR3aWNlCi0gICAgLy8gb3IgbW9yZS4KLSAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKLQot
ICAgIC8vIFNpbmNlIHRoaXMgTW9ja1NwZWxsQ2hlY2sgY2xhc3MgZG9lc24ndCBkb3dubG9hZCBk
aWN0aW9uYXJpZXMsIHRoaXMKLSAgICAvLyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4K
LSAgICByZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9Nb2NrU3BlbGxDaGVjay5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1NwZWxsQ2hlY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMDc4Nzhl
ZWZjNzZmZGQ3NjE0YzlmYjUyNGIxODhiNTM0OTdlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2Nr
U3BlbGxDaGVjay5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1Nw
ZWxsQ2hlY2tfaAotI2RlZmluZSBNb2NrU3BlbGxDaGVja19oCi0KLSNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotLy8gQSBtb2NrIGltcGxlbWVudGF0aW9uIG9m
IGEgc3BlbGwtY2hlY2tlciB1c2VkIGZvciBXZWJLaXQgdGVzdHMuCi0vLyBUaGlzIGNsYXNzIG9u
bHkgaW1wbGVtZW50cyB0aGUgbWluaW1hbCBmdW5jdGlvbmFyaXRpZXMgcmVxdWlyZWQgYnkgV2Vi
S2l0Ci0vLyB0ZXN0cywgaS5lLiB0aGlzIGNsYXNzIGp1c3QgY29tcGFyZXMgdGhlIGdpdmVuIHN0
cmluZyB3aXRoIGtub3duIG1pc3NwZWxsZWQKLS8vIHdvcmRzIGluIHdlYmtpdCB0ZXN0cyBhbmQg
bWFyayB0aGVtIGFzIG1pc3NzcGVsbGVkLgotLy8gRXZlbiB0aG91Z2ggdGhpcyBpcyBzdWZmaWNl
bnQgZm9yIHdlYmtpdCB0ZXN0cywgdGhpcyBjbGFzcyBpcyBub3Qgc3VpdGFibGUKLS8vIGZvciBh
bnkgb3RoZXIgdXNhZ2VzLgotY2xhc3MgTW9ja1NwZWxsQ2hlY2sgewotcHVibGljOgotICAgIE1v
Y2tTcGVsbENoZWNrKCk7Ci0gICAgfk1vY2tTcGVsbENoZWNrKCk7Ci0KLSAgICAvLyBDaGVja3Mg
dGhlIHNwZWxsaW5ncyBvZiB0aGUgc3BlY2lmaWVkIHRleHQuCi0gICAgLy8gVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRydWUgaWYgdGhlIHRleHQgY29uc2lzdHMgb2YgdmFsaWQgd29yZHMsIGFuZAot
ICAgIC8vIHJldHVybnMgZmFsc2UgaWYgaXQgaW5jbHVkZXMgaW52YWxpZCB3b3Jkcy4KLSAgICAv
LyBXaGVuIHRoZSBnaXZlbiB0ZXh0IGluY2x1ZGVzIGludmFsaWQgd29yZHMsIHRoaXMgZnVuY3Rp
b24gc2V0cyB0aGUKLSAgICAvLyBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgaW52YWxpZCB3b3JkIHRv
IG1pc3NwZWxsZWRPZmZzZXQsIGFuZCB0aGUgbGVuZ3RoIG9mCi0gICAgLy8gdGhlIGZpcnN0IGlu
dmFsaWQgd29yZCB0byBtaXNzcGVsbGVkTGVuZ3RoLCByZXNwZWN0aXZlbHkuCi0gICAgLy8gRm9y
IGV4YW1wbGUsIHdoZW4gdGhlIGdpdmVuIHRleHQgaXMgIiAgIHp6IHp6IiwgdGhpcyBmdW5jdGlv
biBzZXRzIDMgdG8KLSAgICAvLyBtaXNzcGVsbGVkT2Zmc2V0IGFuZCAyIHRvIG1pc3NwZWxsZWRM
ZW5ndGgsIHJlc3BlY3RpdmVseS4KLSAgICBib29sIHNwZWxsQ2hlY2tXb3JkKGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBtaXNzcGVs
bGVkT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBtaXNzcGVsbGVkTGVuZ3Ro
KTsKLQotICAgIHZvaWQgZmlsbFN1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiB3b3JkLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4qIHN1Z2dlc3Rpb25z
KTsKLQotcHJpdmF0ZToKLSAgICAvLyBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCByZXNvdXJjZXMg
aWYgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0LgotICAgIC8vIEluaXRpYWxpemluZyB0aGlzIG9i
amVjdCBtYXkgdGFrZSBsb25nIHRpbWUuIFRvIHByZXZlbnQgZnJvbSBodXJ0aW5nCi0gICAgLy8g
dGhlIHBlcmZvcm1hbmNlIG9mIHRlc3Rfc2hlbGwsIHdlIGluaXRpYWxpemUgdGhpcyBvYmplY3Qg
d2hlbgotICAgIC8vIFNwZWxsQ2hlY2tXb3JkKCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGlt
ZS4KLSAgICAvLyBUbyBiZSBjb21wbGlhbnQgd2l0aCBTcGVsbENoZWNrOkluaXRpYWxpemVJZk5l
ZWRlZCgpLCB0aGlzIGZ1bmN0aW9uCi0gICAgLy8gcmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0
IGlzIGRvd25sb2FkaW5nIGEgZGljdGlvbmFyeSwgb3RoZXJ3aXNlCi0gICAgLy8gaXQgcmV0dXJu
cyBmYWxzZS4KLSAgICBib29sIGluaXRpYWxpemVJZk5lZWRlZCgpOwotCi0gICAgLy8gQSB0YWJs
ZSB0aGF0IGNvbnNpc3RzIG9mIG1pc3NwZWxsZWQgd29yZHMuCi0gICAgSGFzaE1hcDxXVEY6OlN0
cmluZywgYm9vbD4gbV9taXNzcGVsbGVkV29yZHM7Ci0KLSAgICAvLyBBIGZsYWcgcmVwcmVzZW50
aW5nIHdoZXRoZXIgb3Igbm90IHRoaXMgb2JqZWN0IGlzIGluaXRpYWxpemVkLgotICAgIGJvb2wg
bV9pbml0aWFsaXplZDsKLX07Ci0KLSNlbmRpZiAvLyBNb2NrU3BlbGxDaGVja19oCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJU
ZXN0RGVsZWdhdGUuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
cHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCmluZGV4IDkxNTI1NDQ3OWYyNmI5Nzk3OWIwMDkyOTJi
ZjhhZWQ3YTllNmFlOWUuLjYxMTJiNTZmMTYxOGMzZDA3NWVjMzEyMTYxNzg3MjJiNDM0ZGYxMDEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVi
bGljL1dlYlRlc3REZWxlZ2F0ZS5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5oCkBAIC01NCw3ICs1NCw3IEBAIGNs
YXNzIFdlYlRlc3REZWxlZ2F0ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29u
dGV4dE1lbnVEYXRhKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckVkaXRDb21tYW5kKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsU3BlbGxpbmdTdWdnZXN0aW9uTGlzdChjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYgd29yZCwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJTdHJp
bmc+KiBzdWdnZXN0aW9ucykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsU3BlbGxpbmdTdWdn
ZXN0aW9uTGlzdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIFdlYktpdDo6V2ViVmVjdG9yPFdl
YktpdDo6V2ViU3RyaW5nPiopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZChj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7CiAg
ICAgdmlydHVhbCBXZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YSogbGFzdENvbnRleHRNZW51RGF0
YSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0R2FtZXBhZERhdGEoY29uc3QgV2Vi
S2l0OjpXZWJHYW1lcGFkcyYpID0gMDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKaW5kZXgg
YzA5ZjhmNDUzZGMyYTJkYTFhNTU4YjcyZmU0M2NlY2Y2M2IwZDJjMS4uNTg0MTJmNjlmODU1ZGRi
N2VhZGQ4YWU4YTdlZjAyYWEzMjQxYWZkMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgK
QEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3Mg
V2ViU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU7CitjbGFz
cyBXZWJTcGVsbENoZWNrQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOwog
Y2xhc3MgV2ViVVJMUmVxdWVzdDsKQEAgLTY2LDYgKzY3LDcgQEAgc3RydWN0IFdlYldpbmRvd0Zl
YXR1cmVzOwogCiBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CiAKK2NsYXNzIFNwZWxsQ2hlY2tD
bGllbnQ7CiBjbGFzcyBXZWJUZXN0RGVsZWdhdGU7CiBjbGFzcyBXZWJUZXN0SW50ZXJmYWNlczsK
IGNsYXNzIFdlYlRlc3RSdW5uZXI7CkBAIC03Nyw2ICs3OSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcmVzZXQoKTsKIAorICAgIFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudCAqc3BlbGxDaGVj
a0NsaWVudCgpIGNvbnN0OworCiAgICAgdm9pZCBzZXRQYWludFJlY3QoY29uc3QgV2ViS2l0OjpX
ZWJSZWN0Jik7CiAgICAgV2ViS2l0OjpXZWJSZWN0IHBhaW50UmVjdCgpIGNvbnN0OwogCkBAIC0x
MzYsNiArMTQwLDggQEAgcHJpdmF0ZToKICAgICBXZWJUZXN0SW50ZXJmYWNlcyogbV90ZXN0SW50
ZXJmYWNlczsKICAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7CiAKKyAgICBTcGVsbENo
ZWNrQ2xpZW50KiBtX3NwZWxsY2hlY2s7CisKICAgICBXZWJLaXQ6OldlYlJlY3QgbV9wYWludFJl
Y3Q7CiAgICAgc3RkOjptYXA8dW5zaWduZWQsIHN0ZDo6c3RyaW5nPiBtX3Jlc291cmNlSWRlbnRp
Zmllck1hcDsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAKaW5kZXggYzk5YWY5YTMyOWIxYWMx
MTMxY2MxMWZkZmNjNDEzMTFhNzk2NDhiYy4uZTE4MjU5ZWJmZDdkNDU4YTkyZTlhMDlhMjcyYTY0
YWNjODM1MzA1NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmNwcApAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAKICNpbmNsdWRlICJLZXlDb2RlTWFwcGluZy5oIgor
I2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCiAjaW5jbHVkZSAiVGVzdERlbGVnYXRlLmgiCiAj
aW5jbHVkZSAiV2ViQ29udGV4dE1lbnVEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRHJhZ09wZXJhdGlv
bi5oIgpAQCAtODI3LDcgKzgyOCw3IEBAIHN0YXRpYyBWZWN0b3I8V2ViU3RyaW5nPiBtYWtlTWVu
dUl0ZW1TdHJpbmdzRm9yKFdlYkNvbnRleHRNZW51RGF0YSogY29udGV4dE1lbnUsCiAgICAgICAg
IGZvciAoY29uc3QgY2hhcioqIGl0ZW0gPSBlZGl0YWJsZU1lbnVTdHJpbmdzOyAqaXRlbTsgKytp
dGVtKSAKICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKFdlYlN0cmluZzo6ZnJvbVVURjgoKml0
ZW0pKTsKICAgICAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAg
IGRlbGVnYXRlLT5maWxsU3BlbGxpbmdTdWdnZXN0aW9uTGlzdChjb250ZXh0TWVudS0+bWlzc3Bl
bGxlZFdvcmQsICZzdWdnZXN0aW9ucyk7CisgICAgICAgIE1vY2tTcGVsbENoZWNrOjpmaWxsU3Vn
Z2VzdGlvbkxpc3QoY29udGV4dE1lbnUtPm1pc3NwZWxsZWRXb3JkLCAmc3VnZ2VzdGlvbnMpOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Z2dlc3Rpb25zLnNpemUoKTsgKytpKSAK
ICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHN1Z2dlc3Rpb25zW2ldKTsKICAgICB9IGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTW9ja0dyYW1tYXJDaGVjay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDA0NDc2ZWQz
NDM2ZGIzYTYyN2FlZTJhYTBjOTU5ZWFlZGIxZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5j
cHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb2NrR3Jh
bW1hckNoZWNrLmgiCisKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tpbmdSZXN1bHQuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworYm9vbCBNb2NrR3JhbW1hckNoZWNr
OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJU
ZXh0Q2hlY2tpbmdSZXN1bHQ+KiByZXN1bHRzKQoreworICAgIEFTU0VSVChyZXN1bHRzKTsKKyAg
ICBXVEY6OlN0cmluZyBzdHJpbmdUZXh0KHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAg
ICBpZiAoc3RyaW5nVGV4dC5maW5kKGlzQVNDSUlBbHBoYSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90
PigtMSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gRmluZCBtYXRjaGluZyBncmFt
bWF0aWNhbCBlcnJvcnMgZnJvbSBrbm93biBvbmVzLiBUaGlzIGZ1bmN0aW9uIGhhcyB0bworICAg
IC8vIGNoZWNrIGFsbCBlcnJvcnMgYmVjYXVzZSB0aGUgZ2l2ZW4gdGV4dCBtYXkgY29uc2lzdCBv
ZiB0d28gb3IgbW9yZQorICAgIC8vIHNlbnRlbmNlcyB0aGF0IGhhdmUgZ3JhbW1hdGljYWwgZXJy
b3JzLgorICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBjb25zdCBjaGFyKiB0ZXh0
OworICAgICAgICBpbnQgbG9jYXRpb247CisgICAgICAgIGludCBsZW5ndGg7CisgICAgfSBncmFt
bWFyRXJyb3JzW10gPSB7CisgICAgICAgIHsiSSBoYXZlIGEgaXNzdWUuIiwgNywgMX0sCisgICAg
ICAgIHsiSSBoYXZlIGFuIGdyYXBlLiIsIDcsIDJ9LAorICAgICAgICB7IkkgaGF2ZSBhbiBraXdp
LiIsIDcsIDJ9LAorICAgICAgICB7IkkgaGF2ZSBhbiBtdXNjYXQuIiwgNywgMn0sCisgICAgICAg
IHsiWW91IGhhcyB0aGUgcmlnaHQuIiwgNCwgM30sCisgICAgICAgIHsiYXBwbGUgb3JhbmdlIHp6
LiIsIDAsIDE2fSwKKyAgICAgICAgeyJhcHBsZSB6eiBvcmFuZ2UuIiwgMCwgMTZ9LAorICAgICAg
ICB7ImFwcGxlLHp6LG9yYW5nZS4iLCAwLCAxNn0sCisgICAgICAgIHsib3JhbmdlLHp6LGFwcGxl
LiIsIDAsIDE2fSwKKyAgICAgICAgeyJ0aGUgdGhlIGFkbGogYWRhYXNqIHNka2xqLiB0aGVyZSB0
aGVyZSIsIDAsIDM4fSwKKyAgICAgICAgeyJ6eiBhcHBsZSBvcmFuZ2UuIiwgMCwgMTZ9LAorICAg
IH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBUlJBWVNJWkVfVU5TQUZFKGdyYW1tYXJF
cnJvcnMpOyArK2kpIHsKKyAgICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgIHdoaWxlICgo
b2Zmc2V0ID0gc3RyaW5nVGV4dC5maW5kKGdyYW1tYXJFcnJvcnNbaV0udGV4dCwgb2Zmc2V0KSkg
IT0gLTEpIHsKKyAgICAgICAgICAgIHJlc3VsdHMtPmFwcGVuZChXZWJUZXh0Q2hlY2tpbmdSZXN1
bHQoV2ViVGV4dENoZWNraW5nVHlwZUdyYW1tYXIsIG9mZnNldCArIGdyYW1tYXJFcnJvcnNbaV0u
bG9jYXRpb24sIGdyYW1tYXJFcnJvcnNbaV0ubGVuZ3RoKSk7CisgICAgICAgICAgICBvZmZzZXQg
Kz0gZ3JhbW1hckVycm9yc1tpXS5sZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0Mjcx
YjNmYTNjMmMwMWFjMTM2YzhlMTAzMDcxNjE5MjZkM2U5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNo
ZWNrLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTW9ja0dyYW1tYXJDaGVja19oCisjZGVmaW5l
IE1vY2tHcmFtbWFyQ2hlY2tfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
U3RyaW5nOworc3RydWN0IFdlYlRleHRDaGVja2luZ1Jlc3VsdDsKKworfQorCisvLyBBIG1vY2sg
aW1wbGVtZW50YXRpb24gb2YgYSBncmFtbWFyLWNoZWNrZXIgdXNlZCBmb3IgV2ViS2l0IHRlc3Rz
LiBUaGlzIGNsYXNzCisvLyBvbmx5IGltcGxlbWVudHMgdGhlIG1pbmltYWwgZnVuY3Rpb25hcml0
aWVzIHJlcXVpcmVkIGJ5IFdlYktpdCB0ZXN0cywgaS5lLgorLy8gdGhpcyBjbGFzcyBqdXN0IGNv
bXBhcmVzIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBrbm93biBncmFtbWFyIG1pc3Rha2VzIGluCisv
LyB3ZWJraXQgdGVzdHMgYW5kIGFkZHMgZ3JhbW1hciBtYXJrZXJzIG9uIHRoZW0uIEV2ZW4gdGhv
dWdoIHRoaXMgaXMgc3VmZmljZW50CisvLyBmb3Igd2Via2l0IHRlc3RzLCB0aGlzIGNsYXNzIGlz
IG5vdCBzdWl0YWJsZSBmb3IgYW55IG90aGVyIHVzYWdlcy4KK2NsYXNzIE1vY2tHcmFtbWFyQ2hl
Y2sgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiwgVmVjdG9yPFdlYktpdDo6V2ViVGV4dENoZWNraW5nUmVzdWx0
PiopOworfTsKKworI2VuZGlmIC8vIE1vY2tTcGVsbENoZWNrX2gKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVsbENoZWNrLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVs
bENoZWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTkzYzcxOTA0MjM1MGQyYzIxZWFhMTlkYWI5ZjVhOTk5
OTBhODgxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCisKKyNpbmNsdWRlIDx3
dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK01vY2tT
cGVsbENoZWNrOjpNb2NrU3BlbGxDaGVjaygpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKSB7
IH0KKworTW9ja1NwZWxsQ2hlY2s6On5Nb2NrU3BlbGxDaGVjaygpIHsgfQorCitzdGF0aWMgYm9v
bCBpc05vdEFTQ0lJQWxwaGEoVUNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9
CisKK2Jvb2wgTW9ja1NwZWxsQ2hlY2s6OnNwZWxsQ2hlY2tXb3JkKGNvbnN0IFdlYlN0cmluZyYg
dGV4dCwgaW50KiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQqIG1pc3NwZWxsZWRMZW5ndGgpCit7Cisg
ICAgQVNTRVJUKG1pc3NwZWxsZWRPZmZzZXQpOworICAgIEFTU0VSVChtaXNzcGVsbGVkTGVuZ3Ro
KTsKKworICAgIC8vIEluaXRpYWxpemUgdGhpcyBzcGVsbGNoZWNrZXIuCisgICAgaW5pdGlhbGl6
ZUlmTmVlZGVkKCk7CisKKyAgICAvLyBSZXNldCB0aGUgcmVzdWx0IHZhbHVlcyBhcyBvdXIgc3Bl
bGxjaGVja2VyIGRvZXMuCisgICAgKm1pc3NwZWxsZWRPZmZzZXQgPSAwOworICAgICptaXNzcGVs
bGVkTGVuZ3RoID0gMDsKKworICAgIC8vIENvbnZlcnQgdG8gYSBTdHJpbmcgYmVjYXVzZSB3ZSBz
dG9yZSBTdHJpbmcgaW5zdGFuY2VzIGluCisgICAgLy8gbV9taXNzcGVsbGVkV29yZHMgYW5kIFdl
YlN0cmluZyBoYXMgbm8gZmluZCgpLgorICAgIFdURjo6U3RyaW5nIHN0cmluZ1RleHQodGV4dC5k
YXRhKCksIHRleHQubGVuZ3RoKCkpOworICAgIGludCBza2lwcGVkTGVuZ3RoID0gMDsKKworICAg
IHdoaWxlICghc3RyaW5nVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRXh0cmFjdCB0aGUg
Zmlyc3QgcG9zc2libGUgRW5nbGlzaCB3b3JkIGZyb20gdGhlIGdpdmVuIHN0cmluZy4KKyAgICAg
ICAgLy8gVGhlIGdpdmVuIHN0cmluZyBtYXkgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycyBv
ciBudW1iZXJzLiBTbywgd2UKKyAgICAgICAgLy8gc2hvdWxkIGZpbHRlciBvdXQgc3VjaCBjaGFy
YWN0ZXJzIGJlZm9yZSBzdGFydCBsb29raW5nIHVwIG91cgorICAgICAgICAvLyBtaXNzcGVsbGVk
LXdvcmQgdGFibGUuCisgICAgICAgIC8vIChUaGlzIGlzIGEgc2ltcGxlIHZlcnNpb24gb2Ygb3Vy
IFNwZWxsQ2hlY2tXb3JkSXRlcmF0b3IgY2xhc3MuKQorICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4g
c3RyaW5nIGRvZXNuJ3QgaW5jbHVkZSBhbnkgQVNDSUkgY2hhcmFjdGVycywgd2UgY2FuIHRyZWF0
IHRoZQorICAgICAgICAvLyBzdHJpbmcgYXMgdmFsaWQgb25lLgorICAgICAgICAvLyBVbmZvcnR1
bmF0ZWx5LCBUaGlzIGltcGxlbWVudGF0aW9uIHNwbGl0cyBhIGNvbnRyYWN0aW9uLCBpLmUuICJp
c24ndCIgaXMKKyAgICAgICAgLy8gc3BsaXQgaW50byB0d28gcGllY2VzICJpc24iIGFuZCAidCIu
IFRoaXMgaXMgT0sgYmVjYXVzZSB3ZWJraXQgdGVzdHMKKyAgICAgICAgLy8gZG9uJ3QgaGF2ZSBt
aXNzcGVsbGVkIGNvbnRyYWN0aW9ucy4KKyAgICAgICAgaW50IHdvcmRPZmZzZXQgPSBzdHJpbmdU
ZXh0LmZpbmQoaXNBU0NJSUFscGhhKTsKKyAgICAgICAgaWYgKHdvcmRPZmZzZXQgPT0gLTEpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaW50IHdvcmRFbmQgPSBzdHJpbmdUZXh0
LmZpbmQoaXNOb3RBU0NJSUFscGhhLCB3b3JkT2Zmc2V0KTsKKyAgICAgICAgaW50IHdvcmRMZW5n
dGggPSB3b3JkRW5kID09IC0xID8gc3RhdGljX2Nhc3Q8aW50PihzdHJpbmdUZXh0Lmxlbmd0aCgp
KSAtIHdvcmRPZmZzZXQgOiB3b3JkRW5kIC0gd29yZE9mZnNldDsKKworICAgICAgICAvLyBMb29r
IHVwIG91ciBtaXNzcGVsbGVkLXdvcmQgdGFibGUgdG8gY2hlY2sgaWYgdGhlIGV4dHJhY3RlZCB3
b3JkIGlzIGEKKyAgICAgICAgLy8ga25vd24gbWlzc3BlbGxlZCB3b3JkLCBhbmQgcmV0dXJuIHRo
ZSBvZmZzZXQgYW5kIHRoZSBsZW5ndGggb2YgdGhlCisgICAgICAgIC8vIGV4dHJhY3RlZCB3b3Jk
IGlmIHRoaXMgd29yZCBpcyBhIGtub3duIG1pc3NwZWxsZWQgd29yZC4KKyAgICAgICAgLy8gKFNl
ZSB0aGUgY29tbWVudCBpbiBNb2NrU3BlbGxDaGVjazo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkgd2h5
IHdlIHVzZSBhCisgICAgICAgIC8vIG1pc3NwZWxsZWQtd29yZCB0YWJsZS4pCisgICAgICAgIFdU
Rjo6U3RyaW5nIHdvcmQgPSBzdHJpbmdUZXh0LnN1YnN0cmluZyh3b3JkT2Zmc2V0LCB3b3JkTGVu
Z3RoKTsKKyAgICAgICAgaWYgKG1fbWlzc3BlbGxlZFdvcmRzLmNvbnRhaW5zKHdvcmQpKSB7Cisg
ICAgICAgICAgICAqbWlzc3BlbGxlZE9mZnNldCA9IHdvcmRPZmZzZXQgKyBza2lwcGVkTGVuZ3Ro
OworICAgICAgICAgICAgKm1pc3NwZWxsZWRMZW5ndGggPSB3b3JkTGVuZ3RoOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoMCA8IHdvcmRPZmZzZXQgKyB3
b3JkTGVuZ3RoKTsKKyAgICAgICAgc3RyaW5nVGV4dCA9IHN0cmluZ1RleHQuc3Vic3RyaW5nKHdv
cmRPZmZzZXQgKyB3b3JkTGVuZ3RoKTsKKyAgICAgICAgc2tpcHBlZExlbmd0aCArPSB3b3JkT2Zm
c2V0ICsgd29yZExlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
TW9ja1NwZWxsQ2hlY2s6OmZpbGxTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJTdHJpbmcmIHdvcmQs
IFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykKK3sKKyAgICBpZiAod29yZCA9PSBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJ3ZWxsY29tZSIpKSB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJT
dHJpbmc+IHJlc3VsdChzdWdnZXN0aW9ucy0+c2l6ZSgpICsgMSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3VnZ2VzdGlvbnMtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVz
dWx0W2ldID0gKCpzdWdnZXN0aW9ucylbaV07CisgICAgICAgIHJlc3VsdFtzdWdnZXN0aW9ucy0+
c2l6ZSgpXSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIndlbGNvbWUiKTsKKyAgICAgICAgc3VnZ2Vz
dGlvbnMtPnN3YXAocmVzdWx0KTsKKyAgICB9Cit9CisKK2Jvb2wgTW9ja1NwZWxsQ2hlY2s6Omlu
aXRpYWxpemVJZk5lZWRlZCgpCit7CisgICAgLy8gRXhpdCBpZiB3ZSBoYXZlIGFscmVhZHkgaW5p
dGlhbGl6ZWQgdGhpcyBvYmplY3QuCisgICAgaWYgKG1faW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIHRhYmxlIHRoYXQgY29uc2lzdHMgb2YgbWlz
c3BlbGxlZCB3b3JkcyB1c2VkIGluIFdlYktpdCBsYXlvdXQKKyAgICAvLyB0ZXN0cy4KKyAgICAv
LyBTaW5jZSBXZWJLaXQgbGF5b3V0IHRlc3RzIGRvbid0IGhhdmUgc28gbWFueSBtaXNzcGVsbGVk
IHdvcmRzIGFzCisgICAgLy8gd2VsbC1zcGVsbGVkIHdvcmRzLCBpdCBpcyBlYXNpZXIgdG8gY29t
cGFyZSB0aGUgZ2l2ZW4gd29yZCB3aXRoIG1pc3NwZWxsZWQKKyAgICAvLyBvbmVzIHRoYW4gdG8g
Y29tcGFyZSB3aXRoIHdlbGwtc3BlbGxlZCBvbmVzLgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBt
aXNzcGVsbGVkV29yZHNbXSA9IHsKKyAgICAgICAgLy8gVGhlc2Ugd29yZHMgYXJlIGtub3duIG1p
c3NwZWxsZWQgd29yZHMgaW4gd2Via2l0IHRlc3RzLgorICAgICAgICAvLyBJZiB0aGVyZSBhcmUg
b3RoZXIgbWlzc3BlbGxlZCB3b3JkcyBpbiB3ZWJraXQgdGVzdHMsIHBsZWFzZSBhZGQgdGhlbSBp
bgorICAgICAgICAvLyB0aGlzIGFycmF5LgorICAgICAgICAiZm9vIiwKKyAgICAgICAgIkZvbyIs
CisgICAgICAgICJiYXoiLAorICAgICAgICAiZm8iLAorICAgICAgICAiTGliZXJ0eUYiLAorICAg
ICAgICAiY2hlbGxvIiwKKyAgICAgICAgInh4eHRlc3R4eHgiLAorICAgICAgICAiWFh4eHgiLAor
ICAgICAgICAiVGV4dHgiLAorICAgICAgICAiYmxvY2txdW90ZWQiLAorICAgICAgICAiYXNkIiwK
KyAgICAgICAgIkxvcmVtIiwKKyAgICAgICAgIk51bmMiLAorICAgICAgICAiQ3VyYWJpdHVyIiwK
KyAgICAgICAgImV1IiwKKyAgICAgICAgImFkbGoiLAorICAgICAgICAiYWRhYXNqIiwKKyAgICAg
ICAgInNka2xqIiwKKyAgICAgICAgImpsa2RzIiwKKyAgICAgICAgImpzYWFkYSIsCisgICAgICAg
ICJqbGRhIiwKKyAgICAgICAgInp6IiwKKyAgICAgICAgImNvbnRlbnRFZGl0YWJsZSIsCisgICAg
ICAgIC8vIFRoZSBmb2xsb3dpbmcgd29yZHMgYXJlIHVzZWQgYnkgdW5pdCB0ZXN0cy4KKyAgICAg
ICAgImlmbW1wIiwKKyAgICAgICAgInF3ZXJ0eXVpb3Bhc2QiLAorICAgICAgICAicXdlcnR5dWlv
cGFzZGYiLAorICAgICAgICAid2VsbGNvbWUiCisgICAgfTsKKworICAgIG1fbWlzc3BlbGxlZFdv
cmRzLmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUobWlzc3Bl
bGxlZFdvcmRzKTsgKytpKQorICAgICAgICBtX21pc3NwZWxsZWRXb3Jkcy5hZGQoV1RGOjpTdHJp
bmc6OmZyb21VVEY4KG1pc3NwZWxsZWRXb3Jkc1tpXSksIGZhbHNlKTsKKworICAgIC8vIE1hcmsg
YXMgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCB0aGlzIG9iamVjdCBmcm9tIGJlaW5nIGluaXRpYWxp
emVkIHR3aWNlCisgICAgLy8gb3IgbW9yZS4KKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIC8vIFNpbmNlIHRoaXMgTW9ja1NwZWxsQ2hlY2sgY2xhc3MgZG9lc24ndCBkb3dubG9hZCBk
aWN0aW9uYXJpZXMsIHRoaXMKKyAgICAvLyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrU3BlbGxDaGVjay5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNzFiMGUyMzM3OWZmZGJjZjBiZDYwNjcwNjYzNTFhMDA2ZWY2NmQ4Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1Nw
ZWxsQ2hlY2suaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrU3BlbGxDaGVja19oCisjZGVm
aW5lIE1vY2tTcGVsbENoZWNrX2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisvLyBBIG1vY2sgaW1wbGVtZW50YXRpb24gb2YgYSBzcGVsbC1jaGVja2Vy
IHVzZWQgZm9yIFdlYktpdCB0ZXN0cy4KKy8vIFRoaXMgY2xhc3Mgb25seSBpbXBsZW1lbnRzIHRo
ZSBtaW5pbWFsIGZ1bmN0aW9uYXJpdGllcyByZXF1aXJlZCBieSBXZWJLaXQKKy8vIHRlc3RzLCBp
LmUuIHRoaXMgY2xhc3MganVzdCBjb21wYXJlcyB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGgga25vd24g
bWlzc3BlbGxlZAorLy8gd29yZHMgaW4gd2Via2l0IHRlc3RzIGFuZCBtYXJrIHRoZW0gYXMgbWlz
c3NwZWxsZWQuCisvLyBFdmVuIHRob3VnaCB0aGlzIGlzIHN1ZmZpY2VudCBmb3Igd2Via2l0IHRl
c3RzLCB0aGlzIGNsYXNzIGlzIG5vdCBzdWl0YWJsZQorLy8gZm9yIGFueSBvdGhlciB1c2FnZXMu
CitjbGFzcyBNb2NrU3BlbGxDaGVjayB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgZmlsbFN1
Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB3b3JkLCBXZWJLaXQ6OldlYlZl
Y3RvcjxXZWJLaXQ6OldlYlN0cmluZz4qIHN1Z2dlc3Rpb25zKTsKKworICAgIE1vY2tTcGVsbENo
ZWNrKCk7CisgICAgfk1vY2tTcGVsbENoZWNrKCk7CisKKyAgICAvLyBDaGVja3MgdGhlIHNwZWxs
aW5ncyBvZiB0aGUgc3BlY2lmaWVkIHRleHQuCisgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5z
IHRydWUgaWYgdGhlIHRleHQgY29uc2lzdHMgb2YgdmFsaWQgd29yZHMsIGFuZAorICAgIC8vIHJl
dHVybnMgZmFsc2UgaWYgaXQgaW5jbHVkZXMgaW52YWxpZCB3b3Jkcy4KKyAgICAvLyBXaGVuIHRo
ZSBnaXZlbiB0ZXh0IGluY2x1ZGVzIGludmFsaWQgd29yZHMsIHRoaXMgZnVuY3Rpb24gc2V0cyB0
aGUKKyAgICAvLyBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgaW52YWxpZCB3b3JkIHRvIG1pc3NwZWxs
ZWRPZmZzZXQsIGFuZCB0aGUgbGVuZ3RoIG9mCisgICAgLy8gdGhlIGZpcnN0IGludmFsaWQgd29y
ZCB0byBtaXNzcGVsbGVkTGVuZ3RoLCByZXNwZWN0aXZlbHkuCisgICAgLy8gRm9yIGV4YW1wbGUs
IHdoZW4gdGhlIGdpdmVuIHRleHQgaXMgIiAgIHp6IHp6IiwgdGhpcyBmdW5jdGlvbiBzZXRzIDMg
dG8KKyAgICAvLyBtaXNzcGVsbGVkT2Zmc2V0IGFuZCAyIHRvIG1pc3NwZWxsZWRMZW5ndGgsIHJl
c3BlY3RpdmVseS4KKyAgICBib29sIHNwZWxsQ2hlY2tXb3JkKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiB0ZXh0LCBpbnQqIG1pc3NwZWxsZWRPZmZzZXQsIGludCogbWlzc3BlbGxlZExlbmd0aCk7
CisKK3ByaXZhdGU6CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgcmVzb3VyY2VzIGlm
IHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdC4KKyAgICAvLyBJbml0aWFsaXppbmcgdGhpcyBvYmpl
Y3QgbWF5IHRha2UgbG9uZyB0aW1lLiBUbyBwcmV2ZW50IGZyb20gaHVydGluZworICAgIC8vIHRo
ZSBwZXJmb3JtYW5jZSBvZiB0ZXN0X3NoZWxsLCB3ZSBpbml0aWFsaXplIHRoaXMgb2JqZWN0IHdo
ZW4KKyAgICAvLyBTcGVsbENoZWNrV29yZCgpIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUu
CisgICAgLy8gVG8gYmUgY29tcGxpYW50IHdpdGggU3BlbGxDaGVjazpJbml0aWFsaXplSWZOZWVk
ZWQoKSwgdGhpcyBmdW5jdGlvbgorICAgIC8vIHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9iamVjdCBp
cyBkb3dubG9hZGluZyBhIGRpY3Rpb25hcnksIG90aGVyd2lzZQorICAgIC8vIGl0IHJldHVybnMg
ZmFsc2UuCisgICAgYm9vbCBpbml0aWFsaXplSWZOZWVkZWQoKTsKKworICAgIC8vIEEgdGFibGUg
dGhhdCBjb25zaXN0cyBvZiBtaXNzcGVsbGVkIHdvcmRzLgorICAgIEhhc2hNYXA8V1RGOjpTdHJp
bmcsIGJvb2w+IG1fbWlzc3BlbGxlZFdvcmRzOworCisgICAgLy8gQSBmbGFnIHJlcHJlc2VudGlu
ZyB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBpcyBpbml0aWFsaXplZC4KKyAgICBib29sIG1f
aW5pdGlhbGl6ZWQ7Cit9OworCisjZW5kaWYgLy8gTW9ja1NwZWxsQ2hlY2tfaApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVj
a0NsaWVudC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9TcGVsbENoZWNrQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZWYwZjViMTlmYWFjN2MxYjkzZDY0
Njc3NGIxYjgyNmU3YzVmYzgwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHAKQEAgLTAsMCAr
MSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlbGxDaGVja0NsaWVudC5o
IgorCisjaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgorI2luY2x1ZGUgIldlYlRlc3REZWxl
Z2F0ZS5oIgorI2luY2x1ZGUgIldlYlRleHRDaGVja2luZ0NvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJXZWJUZXh0Q2hlY2tpbmdSZXN1bHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBIb3N0TWV0
aG9kVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFNwZWxsQ2hlY2tDbGllbnQ+IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIHZvaWQgKFNwZWxsQ2hlY2tDbGllbnQ6OipDYWxsYmFja01ldGhvZFR5
cGUpKCk7CisgICAgSG9zdE1ldGhvZFRhc2soU3BlbGxDaGVja0NsaWVudCogb2JqZWN0LCBDYWxs
YmFja01ldGhvZFR5cGUgY2FsbGJhY2spCisgICAgICAgIDogV2ViTWV0aG9kVGFzazxTcGVsbENo
ZWNrQ2xpZW50PihvYmplY3QpCisgICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyAobV9vYmplY3QtPiptX2NhbGxi
YWNrKSgpOyB9CisKK3ByaXZhdGU6CisgICAgQ2FsbGJhY2tNZXRob2RUeXBlIG1fY2FsbGJhY2s7
Cit9OworCit9CisKK1NwZWxsQ2hlY2tDbGllbnQ6OlNwZWxsQ2hlY2tDbGllbnQoKQorICAgIDog
bV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbigwKQoreworfQorCitTcGVsbENo
ZWNrQ2xpZW50Ojp+U3BlbGxDaGVja0NsaWVudCgpCit7Cit9CisKK3ZvaWQgU3BlbGxDaGVja0Ns
aWVudDo6c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICBtX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy8vIFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudAor
dm9pZCBTcGVsbENoZWNrQ2xpZW50OjpzcGVsbENoZWNrKGNvbnN0IFdlYlN0cmluZyYgdGV4dCwg
aW50JiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQmIG1pc3NwZWxsZWRMZW5ndGgsIFdlYlZlY3RvcjxX
ZWJTdHJpbmc+KiBvcHRpb25hbFN1Z2dlc3Rpb25zKQoreworICAgIC8vIENoZWNrIHRoZSBzcGVs
bGluZyBvZiB0aGUgZ2l2ZW4gdGV4dC4KKyAgICBtX3NwZWxsY2hlY2suc3BlbGxDaGVja1dvcmQo
dGV4dCwgJm1pc3NwZWxsZWRPZmZzZXQsICZtaXNzcGVsbGVkTGVuZ3RoKTsKK30KKwordm9pZCBT
cGVsbENoZWNrQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBXZWJTdHJpbmcmIHRl
eHQsIFdlYlRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ssIFdlYlZlY3RvcjxXZWJUZXh0Q2hlY2tp
bmdSZXN1bHQ+KiB3ZWJSZXN1bHRzKQoreworICAgIFZlY3RvcjxXZWJUZXh0Q2hlY2tpbmdSZXN1
bHQ+IHJlc3VsdHM7CisgICAgaWYgKG1hc2sgJiBXZWJUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcp
IHsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSB0
ZXh0Lmxlbmd0aCgpOworICAgICAgICBjb25zdCBXZWJVQ2hhciogZGF0YSA9IHRleHQuZGF0YSgp
OworICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpbnQgbWlz
c3BlbGxlZFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGVkTGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIG1fc3BlbGxjaGVjay5zcGVsbENoZWNrV29yZChXZWJTdHJpbmcoJmRh
dGFbb2Zmc2V0XSwgbGVuZ3RoIC0gb2Zmc2V0KSwgJm1pc3NwZWxsZWRQb3NpdGlvbiwgJm1pc3Nw
ZWxsZWRMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkTGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgV2ViVGV4dENoZWNraW5nUmVzdWx0IHJlc3Vs
dDsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
OworICAgICAgICAgICAgcmVzdWx0LmxvY2F0aW9uID0gb2Zmc2V0ICsgbWlzc3BlbGxlZFBvc2l0
aW9uOworICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IG1pc3NwZWxsZWRMZW5ndGg7CisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgb2Zmc2V0ICs9IG1p
c3NwZWxsZWRQb3NpdGlvbiArIG1pc3NwZWxsZWRMZW5ndGg7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKG1hc2sgJiBXZWJUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKKyAgICAgICAgTW9ja0dy
YW1tYXJDaGVjazo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcodGV4dCwgJnJlc3VsdHMpOworICAgIHdl
YlJlc3VsdHMtPmFzc2lnbihyZXN1bHRzKTsKK30KKwordm9pZCBTcGVsbENoZWNrQ2xpZW50Ojpy
ZXF1ZXN0Q2hlY2tpbmdPZlRleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBXZWJUZXh0Q2hlY2tp
bmdDb21wbGV0aW9uKiBjb21wbGV0aW9uKQoreworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24tPmRpZENhbmNl
bENoZWNraW5nVGV4dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sYXN0UmVx
dWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbiA9IGNvbXBsZXRpb247CisgICAgbV9sYXN0UmVx
dWVzdGVkVGV4dENoZWNrU3RyaW5nID0gdGV4dDsKKyAgICBtX2RlbGVnYXRlLT5wb3N0RGVsYXll
ZFRhc2sobmV3IEhvc3RNZXRob2RUYXNrKHRoaXMsICZTcGVsbENoZWNrQ2xpZW50OjpmaW5pc2hM
YXN0VGV4dENoZWNrKSwgMCk7Cit9CisKK3ZvaWQgU3BlbGxDaGVja0NsaWVudDo6ZmluaXNoTGFz
dFRleHRDaGVjaygpCit7CisgICAgVmVjdG9yPFdlYlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
czsKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICBTdHJpbmcgdGV4dChtX2xhc3RSZXF1ZXN0ZWRU
ZXh0Q2hlY2tTdHJpbmcuZGF0YSgpLCBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tTdHJpbmcubGVu
Z3RoKCkpOworICAgIHdoaWxlICh0ZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgIGludCBtaXNzcGVs
bGVkUG9zaXRpb24gPSAwOworICAgICAgICBpbnQgbWlzc3BlbGxlZExlbmd0aCA9IDA7CisgICAg
ICAgIG1fc3BlbGxjaGVjay5zcGVsbENoZWNrV29yZChXZWJTdHJpbmcodGV4dC5jaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCkpLCAmbWlzc3BlbGxlZFBvc2l0aW9uLCAmbWlzc3BlbGxlZExlbmd0
aCk7CisgICAgICAgIGlmICghbWlzc3BlbGxlZExlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAgbV9zcGVs
bGNoZWNrLmZpbGxTdWdnZXN0aW9uTGlzdChXZWJTdHJpbmcodGV4dC5jaGFyYWN0ZXJzKCkgKyBt
aXNzcGVsbGVkUG9zaXRpb24sIG1pc3NwZWxsZWRMZW5ndGgpLCAmc3VnZ2VzdGlvbnMpOworICAg
ICAgICByZXN1bHRzLmFwcGVuZChXZWJUZXh0Q2hlY2tpbmdSZXN1bHQoV2ViVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nLCBvZmZzZXQgKyBtaXNzcGVsbGVkUG9zaXRpb24sIG1pc3NwZWxsZWRMZW5n
dGgsIHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSA/IFdlYlN0cmluZygpIDogc3VnZ2VzdGlvbnNbMF0p
KTsKKyAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsZWRQb3NpdGlvbiArIG1p
c3NwZWxsZWRMZW5ndGgpOworICAgICAgICBvZmZzZXQgKz0gbWlzc3BlbGxlZFBvc2l0aW9uICsg
bWlzc3BlbGxlZExlbmd0aDsKKyAgICB9CisgICAgTW9ja0dyYW1tYXJDaGVjazo6Y2hlY2tHcmFt
bWFyT2ZTdHJpbmcobV9sYXN0UmVxdWVzdGVkVGV4dENoZWNrU3RyaW5nLCAmcmVzdWx0cyk7Cisg
ICAgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbi0+ZGlkRmluaXNoQ2hlY2tp
bmdUZXh0KHJlc3VsdHMpOworICAgIG1fbGFzdFJlcXVlc3RlZFRleHRDaGVja2luZ0NvbXBsZXRp
b24gPSAwOworfQorCitXZWJTdHJpbmcgU3BlbGxDaGVja0NsaWVudDo6YXV0b0NvcnJlY3RXb3Jk
KGNvbnN0IFdlYlN0cmluZyYpCit7CisgICAgLy8gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgYXMg
TWFjIFdlYktpdCAoJ1dlYktpdFN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tJykKKyAgICAvLyBk
b2VzLiAoSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLWVtcHR5IHN0cmluZywgV2ViS2l0
IHJlcGxhY2VzIHRoZQorICAgIC8vIGdpdmVuIG1pc3NwZWxsZWQgc3RyaW5nIHdpdGggdGhlIHJl
c3VsdCBvbmUuIFRoaXMgcHJvY2VzcyBleGVjdXRlcyBzb21lCisgICAgLy8gZWRpdG9yIGNvbW1h
bmRzIGFuZCBjYXVzZXMgbGF5b3V0LXRlc3QgZmFpbHVyZXMuKQorICAgIHJldHVybiBXZWJTdHJp
bmcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEy
MGUzMmZlYTAzNzg3NzZjYjdiODRmYjljMjA5MDA5ODRkMzNkNjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNr
Q2xpZW50LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlbGxDaGVja0NsaWVudF9oCisjZGVm
aW5lIFNwZWxsQ2hlY2tDbGllbnRfaAorCisjaW5jbHVkZSAiTW9ja1NwZWxsQ2hlY2suaCIKKyNp
bmNsdWRlICJXZWJTcGVsbENoZWNrQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVGFzay5oIgorCitu
YW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7CisKK2NsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKKworY2xh
c3MgU3BlbGxDaGVja0NsaWVudCA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQg
eworcHVibGljOgorICAgIFNwZWxsQ2hlY2tDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5TcGVsbENo
ZWNrQ2xpZW50KCk7CisKKyAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOwor
CisgICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KKyAg
ICBNb2NrU3BlbGxDaGVjayogbW9ja1NwZWxsQ2hlY2soKSB7IHJldHVybiAmbV9zcGVsbGNoZWNr
OyB9CisKKyAgICAvLyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQgaW1wbGVtZW50YXRpb24u
CisgICAgdmlydHVhbCB2b2lkIHNwZWxsQ2hlY2soY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBp
bnQmIG9mZnNldCwgaW50JiBsZW5ndGgsIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViU3Ry
aW5nPiogb3B0aW9uYWxTdWdnZXN0aW9ucyk7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9m
UGFyYWdyYXBoKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgV2ViS2l0OjpXZWJUZXh0Q2hlY2tp
bmdUeXBlTWFzaywgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJUZXh0Q2hlY2tpbmdSZXN1
bHQ+Kik7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mVGV4dChjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYsIFdlYktpdDo6V2ViVGV4dENoZWNraW5nQ29tcGxldGlvbiopOworICAg
IHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgYXV0b0NvcnJlY3RXb3JkKGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5pc2hMYXN0VGV4dENoZWNrKCk7
CisKKyAgICAvLyBUaGUgbW9jayBzcGVsbGNoZWNrZXIgdXNlZCBpbiBzcGVsbENoZWNrKCkuCisg
ICAgTW9ja1NwZWxsQ2hlY2sgbV9zcGVsbGNoZWNrOworCisgICAgV2ViS2l0OjpXZWJTdHJpbmcg
bV9sYXN0UmVxdWVzdGVkVGV4dENoZWNrU3RyaW5nOworICAgIFdlYktpdDo6V2ViVGV4dENoZWNr
aW5nQ29tcGxldGlvbiogbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbjsKKwor
ICAgIFdlYlRhc2tMaXN0IG1fdGFza0xpc3Q7CisKKyAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVs
ZWdhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBTcGVsbENoZWNrQ2xpZW50X2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3REZWxl
Z2F0ZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVz
dERlbGVnYXRlLmgKaW5kZXggZjhlY2ViNmQwNjE3MmY4NzcwMjMyZDg5MjNiOGFhZWE0MWU0M2E1
MS4uNWI0ZDk3MTY2YmU3MTU3MWE2MzFhMWIwNDUzMDRkNjIzOTljNzI3ZiAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdERlbGVnYXRl
LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVz
dERlbGVnYXRlLmgKQEAgLTQ3LDcgKzQ3LDYgQEAgY2xhc3MgVGVzdERlbGVnYXRlIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb250ZXh0TWVudURhdGEoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGNsZWFyRWRpdENvbW1hbmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxT
cGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB3b3JkLCBXZWJL
aXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4qIHN1Z2dlc3Rpb25zKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpID0gMDsKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQ29udGV4
dE1lbnVEYXRhKiBsYXN0Q29udGV4dE1lbnVEYXRhKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRHYW1lcGFkRGF0YShjb25zdCBXZWJLaXQ6OldlYkdhbWVwYWRzJikgPSAwOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
VGVzdEludGVyZmFjZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvV2ViVGVzdEludGVyZmFjZXMuY3BwCmluZGV4IGY1OTZlMzhhZTE4MmU5ZGY2MWM5
NTBjNTlhNWMzM2ZlMzIxNTg5YmQuLmE1M2EwOWVmODQ1YTIxMDZiNDk1NzkzNjM3ZThjNGU4OTBj
YTRjYWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1dlYlRlc3RJbnRlcmZhY2VzLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0SW50ZXJmYWNlcy5jcHAKQEAgLTY1LDcgKzY1
LDYgQEAgcHVibGljOgogICAgIC8vIFRlc3REZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJDb250ZXh0TWVudURhdGEoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJFZGl0Q29tbWFuZCgpOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsU3BlbGxpbmdTdWdnZXN0aW9u
TGlzdChjb25zdCBXZWJTdHJpbmcmIHdvcmQsIFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBzdWdnZXN0
aW9ucyk7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwogICAgIHZpcnR1YWwgV2ViQ29udGV4
dE1lbnVEYXRhKiBsYXN0Q29udGV4dE1lbnVEYXRhKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHNldEdhbWVwYWREYXRhKGNvbnN0IFdlYkdhbWVwYWRzJik7CkBAIC0xMzMsMTEgKzEzMiw2IEBA
IHZvaWQgV2ViVGVzdEludGVyZmFjZXM6OkludGVybmFsOjpjbGVhckVkaXRDb21tYW5kKCkKICAg
ICBtX2RlbGVnYXRlLT5jbGVhckVkaXRDb21tYW5kKCk7CiB9CiAKLXZvaWQgV2ViVGVzdEludGVy
ZmFjZXM6OkludGVybmFsOjpmaWxsU3BlbGxpbmdTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJTdHJp
bmcmIHdvcmQsIFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykKLXsKLSAgICBtX2Rl
bGVnYXRlLT5maWxsU3BlbGxpbmdTdWdnZXN0aW9uTGlzdCh3b3JkLCBzdWdnZXN0aW9ucyk7Ci19
Ci0KIHZvaWQgV2ViVGVzdEludGVyZmFjZXM6OkludGVybmFsOjpzZXRFZGl0Q29tbWFuZChjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewogICAgIG1f
ZGVsZWdhdGUtPnNldEVkaXRDb21tYW5kKG5hbWUsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0UHJv
eHkuY3BwCmluZGV4IDc3YWVkMmI4YThmMDE0MmZiNWM3MTJhMWQ5NmQ0OTkzZmIxN2EyOTMuLjQ0
MzJhZmY1NTEwN2VjMDhjMDU5MjY3YmQ2MDc4MzgyMTg4OGYwZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVz
dFByb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYlRlc3RQcm94eS5oIgogCisjaW5jbHVkZSAiU3BlbGxDaGVja0NsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbi5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKQEAgLTE5MCwxMSArMTkxLDEzIEBAIHZvaWQgYmxvY2tSZXF1ZXN0KFdlYlVSTFJlcXVlc3Qm
IHJlcXVlc3QpCiBXZWJUZXN0UHJveHlCYXNlOjpXZWJUZXN0UHJveHlCYXNlKCkKICAgICA6IG1f
dGVzdEludGVyZmFjZXMoMCkKICAgICAsIG1fZGVsZWdhdGUoMCkKKyAgICAsIG1fc3BlbGxjaGVj
ayhuZXcgU3BlbGxDaGVja0NsaWVudCkKIHsKIH0KIAogV2ViVGVzdFByb3h5QmFzZTo6fldlYlRl
c3RQcm94eUJhc2UoKQogeworICAgIGRlbGV0ZSBtX3NwZWxsY2hlY2s7CiB9CiAKIHZvaWQgV2Vi
VGVzdFByb3h5QmFzZTo6c2V0SW50ZXJmYWNlcyhXZWJUZXN0SW50ZXJmYWNlcyogaW50ZXJmYWNl
cykKQEAgLTIwNSw2ICsyMDgsNyBAQCB2b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNldEludGVyZmFj
ZXMoV2ViVGVzdEludGVyZmFjZXMqIGludGVyZmFjZXMpCiB2b2lkIFdlYlRlc3RQcm94eUJhc2U6
OnNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCiB7CiAgICAgbV9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOworICAgIG1fc3BlbGxjaGVjay0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwog
fQogCiB2b2lkIFdlYlRlc3RQcm94eUJhc2U6OnJlc2V0KCkKQEAgLTIxMyw2ICsyMTcsMTEgQEAg
dm9pZCBXZWJUZXN0UHJveHlCYXNlOjpyZXNldCgpCiAgICAgbV9yZXNvdXJjZUlkZW50aWZpZXJN
YXAuY2xlYXIoKTsKIH0KIAorV2ViU3BlbGxDaGVja0NsaWVudCogV2ViVGVzdFByb3h5QmFzZTo6
c3BlbGxDaGVja0NsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3BlbGxjaGVjazsKK30K
Kwogdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRQYWludFJlY3QoY29uc3QgV2ViUmVjdCYgcmVj
dCkKIHsKICAgICBtX3BhaW50UmVjdCA9IHJlY3Q7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggMDI3ZjY0ZmE5NDA2YTQzYzFmOTI5ZDk4Y2Q3
YTc0MzZjYzY2OTZkOS4uZGI3MTBhZjE0MTQ4ZWIxMjg3NjMxODI0ZDQ2NjI3ZjUzOGQ0NjY3MyAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAt
MzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgogI2luY2x1ZGUg
IkRSVFRlc3RSdW5uZXIuaCIKLSNpbmNsdWRlICJNb2NrR3JhbW1hckNoZWNrLmgiCiAjaW5jbHVk
ZSAiTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyLmgiCiAjaW5jbHVkZSAiVGFzay5oIgpAQCAtNjEsOCArNjAsNiBAQAogI2lu
Y2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlTmFtZXNwYWNlLmgi
CiAjaW5jbHVkZSAiV2ViVGVzdFBsdWdpbi5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2luZ0Nv
bXBsZXRpb24uaCIKLSNpbmNsdWRlICJXZWJUZXh0Q2hlY2tpbmdSZXN1bHQuaCIKICNpbmNsdWRl
ICJXZWJVc2VyTWVkaWFDbGllbnRNb2NrLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1
ZGUgIldlYldpbmRvd0ZlYXR1cmVzLmgiCkBAIC0zMTgsODYgKzMxNSw2IEBAIHZvaWQgV2ViVmll
d0hvc3Q6OndpbGxBZGRQcmVyZW5kZXIoV2ViS2l0OjpXZWJQcmVyZW5kZXIqKQogfQogCiAKLS8v
IFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudAotCi12b2lkIFdlYlZpZXdIb3N0OjpzcGVsbENo
ZWNrKGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgaW50JiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQmIG1p
c3NwZWxsZWRMZW5ndGgsIFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBvcHRpb25hbFN1Z2dlc3Rpb25z
KQotewotICAgIC8vIENoZWNrIHRoZSBzcGVsbGluZyBvZiB0aGUgZ2l2ZW4gdGV4dC4KLSAgICBt
X3NwZWxsY2hlY2suc3BlbGxDaGVja1dvcmQodGV4dCwgJm1pc3NwZWxsZWRPZmZzZXQsICZtaXNz
cGVsbGVkTGVuZ3RoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBXZWJUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNrLCBX
ZWJWZWN0b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0Piogd2ViUmVzdWx0cykKLXsKLSAgICBWZWN0
b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGlmIChtYXNrICYgV2ViVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7Ci0gICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICAgICAgY29uc3QgV2ViVUNo
YXIqIGRhdGEgPSB0ZXh0LmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkg
ewotICAgICAgICAgICAgaW50IG1pc3NwZWxsZWRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBp
bnQgbWlzc3BlbGxlZExlbmd0aCA9IDA7Ci0gICAgICAgICAgICBtX3NwZWxsY2hlY2suc3BlbGxD
aGVja1dvcmQoV2ViU3RyaW5nKCZkYXRhW29mZnNldF0sIGxlbmd0aCAtIG9mZnNldCksICZtaXNz
cGVsbGVkUG9zaXRpb24sICZtaXNzcGVsbGVkTGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghbWlz
c3BlbGxlZExlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFdlYlRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFdlYlRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgIHJlc3VsdC5sb2NhdGlvbiA9IG9m
ZnNldCArIG1pc3NwZWxsZWRQb3NpdGlvbjsKLSAgICAgICAgICAgIHJlc3VsdC5sZW5ndGggPSBt
aXNzcGVsbGVkTGVuZ3RoOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgICAgIG9mZnNldCArPSBtaXNzcGVsbGVkUG9zaXRpb24gKyBtaXNzcGVsbGVkTGVuZ3Ro
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtYXNrICYgV2ViVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIpCi0gICAgICAgIE1vY2tHcmFtbWFyQ2hlY2s6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHRl
eHQsICZyZXN1bHRzKTsKLSAgICB3ZWJSZXN1bHRzLT5hc3NpZ24ocmVzdWx0cyk7Ci19Ci0KLXZv
aWQgV2ViVmlld0hvc3Q6OnJlcXVlc3RDaGVja2luZ09mVGV4dChjb25zdCBXZWJTdHJpbmcmIHRl
eHQsIFdlYlRleHRDaGVja2luZ0NvbXBsZXRpb24qIGNvbXBsZXRpb24pCi17Ci0gICAgaWYgKHRl
eHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAgY29t
cGxldGlvbi0+ZGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdDb21wbGV0aW9uID0gY29tcGxldGlv
bjsKLSAgICBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tTdHJpbmcgPSB0ZXh0OwotICAgIHBvc3RE
ZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJldlYlZpZXdIb3N0OjpmaW5pc2hM
YXN0VGV4dENoZWNrKSwgMCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmZpbmlzaExhc3RUZXh0
Q2hlY2soKQotewotICAgIFZlY3RvcjxXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0g
ICAgaW50IG9mZnNldCA9IDA7Ci0gICAgU3RyaW5nIHRleHQobV9sYXN0UmVxdWVzdGVkVGV4dENo
ZWNrU3RyaW5nLmRhdGEoKSwgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNrU3RyaW5nLmxlbmd0aCgp
KTsKLSAgICB3aGlsZSAodGV4dC5sZW5ndGgoKSkgewotICAgICAgICBpbnQgbWlzc3BlbGxlZFBv
c2l0aW9uID0gMDsKLSAgICAgICAgaW50IG1pc3NwZWxsZWRMZW5ndGggPSAwOwotICAgICAgICBt
X3NwZWxsY2hlY2suc3BlbGxDaGVja1dvcmQoV2ViU3RyaW5nKHRleHQuY2hhcmFjdGVycygpLCB0
ZXh0Lmxlbmd0aCgpKSwgJm1pc3NwZWxsZWRQb3NpdGlvbiwgJm1pc3NwZWxsZWRMZW5ndGgpOwot
ICAgICAgICBpZiAoIW1pc3NwZWxsZWRMZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIG1fc3BlbGxjaGVj
ay5maWxsU3VnZ2VzdGlvbkxpc3QoV2ViU3RyaW5nKHRleHQuY2hhcmFjdGVycygpICsgbWlzc3Bl
bGxlZFBvc2l0aW9uLCBtaXNzcGVsbGVkTGVuZ3RoKSwgJnN1Z2dlc3Rpb25zKTsKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQoV2ViVGV4dENoZWNraW5nUmVzdWx0KFdlYlRleHRDaGVja2luZ1R5cGVT
cGVsbGluZywgb2Zmc2V0ICsgbWlzc3BlbGxlZFBvc2l0aW9uLCBtaXNzcGVsbGVkTGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMu
aXNFbXB0eSgpID8gV2ViU3RyaW5nKCkgOiBzdWdnZXN0aW9uc1swXSkpOwotICAgICAgICB0ZXh0
ID0gdGV4dC5zdWJzdHJpbmcobWlzc3BlbGxlZFBvc2l0aW9uICsgbWlzc3BlbGxlZExlbmd0aCk7
Ci0gICAgICAgIG9mZnNldCArPSBtaXNzcGVsbGVkUG9zaXRpb24gKyBtaXNzcGVsbGVkTGVuZ3Ro
OwotICAgIH0KLSAgICBNb2NrR3JhbW1hckNoZWNrOjpjaGVja0dyYW1tYXJPZlN0cmluZyhtX2xh
c3RSZXF1ZXN0ZWRUZXh0Q2hlY2tTdHJpbmcsICZyZXN1bHRzKTsKLSAgICBtX2xhc3RSZXF1ZXN0
ZWRUZXh0Q2hlY2tpbmdDb21wbGV0aW9uLT5kaWRGaW5pc2hDaGVja2luZ1RleHQocmVzdWx0cyk7
Ci0gICAgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbiA9IDA7Ci19Ci0KLQot
V2ViU3RyaW5nIFdlYlZpZXdIb3N0OjphdXRvQ29ycmVjdFdvcmQoY29uc3QgV2ViU3RyaW5nJikK
LXsKLSAgICAvLyBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBhcyBNYWMgV2ViS2l0ICgnV2ViS2l0
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0nKQotICAgIC8vIGRvZXMuIChJZiB0aGlzIGZ1bmN0
aW9uIHJldHVybnMgYSBub24tZW1wdHkgc3RyaW5nLCBXZWJLaXQgcmVwbGFjZXMgdGhlCi0gICAg
Ly8gZ2l2ZW4gbWlzc3BlbGxlZCBzdHJpbmcgd2l0aCB0aGUgcmVzdWx0IG9uZS4gVGhpcyBwcm9j
ZXNzIGV4ZWN1dGVzIHNvbWUKLSAgICAvLyBlZGl0b3IgY29tbWFuZHMgYW5kIGNhdXNlcyBsYXlv
dXQtdGVzdCBmYWlsdXJlcy4pCi0gICAgcmV0dXJuIFdlYlN0cmluZygpOwotfQotCiB2b2lkIFdl
YlZpZXdIb3N0OjpydW5Nb2RhbEFsZXJ0RGlhbG9nKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIHByaW50ZigiQUxFUlQ6ICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5k
YXRhKCkpOwpAQCAtNTA1LDExICs0MjIsNiBAQCBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1v
Y2sqIFdlYlZpZXdIb3N0OjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQogICAgIHJldHVy
biBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5nZXQoKTsKIH0KIAotTW9ja1NwZWxsQ2hl
Y2sqIFdlYlZpZXdIb3N0Ojptb2NrU3BlbGxDaGVjaygpCi17Ci0gICAgcmV0dXJuICZtX3NwZWxs
Y2hlY2s7Ci19Ci0KIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50KiBXZWJWaWV3SG9zdDo6ZGV2
aWNlT3JpZW50YXRpb25DbGllbnQoKQogewogICAgIHJldHVybiBkZXZpY2VPcmllbnRhdGlvbkNs
aWVudE1vY2soKTsKQEAgLTk2NCwxMSArODc2LDYgQEAgdm9pZCBXZWJWaWV3SG9zdDo6Y2xlYXJF
ZGl0Q29tbWFuZCgpCiAgICAgbV9lZGl0Q29tbWFuZFZhbHVlLmNsZWFyKCk7CiB9CiAKLXZvaWQg
V2ViVmlld0hvc3Q6OmZpbGxTcGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiB3b3JkLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4qIHN1Z2dl
c3Rpb25zKQotewotICAgIG1vY2tTcGVsbENoZWNrKCktPmZpbGxTdWdnZXN0aW9uTGlzdCh3b3Jk
LCBzdWdnZXN0aW9ucyk7Ci19Ci0KIHZvaWQgV2ViVmlld0hvc3Q6OnNldEdhbWVwYWREYXRhKGNv
bnN0IFdlYkdhbWVwYWRzJiBwYWRzKQogewogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRHYW1lcGFk
RGF0YShwYWRzKTsKQEAgLTEyMjEsNyArMTEyOCw2IEBAIFdlYlZpZXdIb3N0OjpXZWJWaWV3SG9z
dChUZXN0U2hlbGwqIHNoZWxsKQogICAgIDogbV9zaGVsbChzaGVsbCkKICAgICAsIG1fcHJveHko
MCkKICAgICAsIG1fd2ViV2lkZ2V0KDApCi0gICAgLCBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tp
bmdDb21wbGV0aW9uKDApCiB7CiAgICAgcmVzZXQoKTsKIH0KQEAgLTEyNDksNyArMTE1NSw3IEBA
IFdlYlZpZXdIb3N0Ojp+V2ViVmlld0hvc3QoKQogdm9pZCBXZWJWaWV3SG9zdDo6c2V0V2ViV2lk
Z2V0KFdlYktpdDo6V2ViV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgbV93ZWJXaWRnZXQgPSB3aWRn
ZXQ7Ci0gICAgd2ViVmlldygpLT5zZXRTcGVsbENoZWNrQ2xpZW50KHRoaXMpOworICAgIHdlYlZp
ZXcoKS0+c2V0U3BlbGxDaGVja0NsaWVudChwcm94eSgpLT5zcGVsbENoZWNrQ2xpZW50KCkpOwog
ICAgIHdlYlZpZXcoKS0+c2V0UHJlcmVuZGVyZXJDbGllbnQodGhpcyk7CiAgICAgd2ViVmlldygp
LT5zZXRDb21wb3NpdG9yU3VyZmFjZVJlYWR5KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuaAppbmRleCA2MWY4MDRhNjcwOWMwY2RhNTdiZDUzOWM0ZjFh
NDJlN2UwYzdlZGI3Li42MTRhZGE4ZWJiMDhmMzlmNTQxZjI0OTcwODQ3NTA1ZjViYTJiZjg4IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTMxLDE0
ICszMSwxMiBAQAogI2lmbmRlZiBXZWJWaWV3SG9zdF9oCiAjZGVmaW5lIFdlYlZpZXdIb3N0X2gK
IAotI2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCiAjaW5jbHVkZSAiVGVzdE5hdmlnYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbi5oIgog
I2luY2x1ZGUgIldlYkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgog
I2luY2x1ZGUgIldlYkludGVudFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJQcmVyZW5kZXJlckNs
aWVudC5oIgotI2luY2x1ZGUgIldlYlNwZWxsQ2hlY2tDbGllbnQuaCIKICNpbmNsdWRlICJXZWJU
YXNrLmgiCiAjaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCiAjaW5jbHVkZSAiV2ViVGVzdFBy
b3h5LmgiCkBAIC03Nyw5ICs3NSw3IEBAIGNsYXNzIE1lZGlhU3RyZWFtVXRpbDsKIGNsYXNzIFRl
c3RNZWRpYVN0cmVhbUNsaWVudDsKIH0KIAotY2xhc3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJGcmFtZUNsaWVudCwgcHVibGlj
IE5hdmlnYXRpb25Ib3N0LAotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJQ
cmVyZW5kZXJlckNsaWVudCwgcHVibGljIFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudCwKLSAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYlRlc3REZWxlZ2F0ZSB7
CitjbGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1Ymxp
YyBXZWJLaXQ6OldlYkZyYW1lQ2xpZW50LCBwdWJsaWMgTmF2aWdhdGlvbkhvc3QsIHB1YmxpYyBX
ZWJLaXQ6OldlYlByZXJlbmRlcmVyQ2xpZW50LCBwdWJsaWMgV2ViVGVzdFJ1bm5lcjo6V2ViVGVz
dERlbGVnYXRlIHsKICBwdWJsaWM6CiAgICAgV2ViVmlld0hvc3QoVGVzdFNoZWxsKik7CiAgICAg
dmlydHVhbCB+V2ViVmlld0hvc3QoKTsKQEAgLTExOSw3ICsxMTUsNiBAQCBjbGFzcyBXZWJWaWV3
SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZy
YW1lQ2xpZW50LAogICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbnRleHRNZW51RGF0YSgpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZChjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJFZGl0Q29tbWFuZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsU3Bl
bGxpbmdTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgd29yZCwgV2ViS2l0
OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEdhbWVwYWREYXRhKGNvbnN0IFdlYktpdDo6V2ViR2FtZXBhZHMm
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnRNZXNzYWdlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBtZXNzYWdlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soV2ViVGVz
dFJ1bm5lcjo6V2ViVGFzayopIE9WRVJSSURFOwpAQCAtMTgyLDEyICsxNzcsNiBAQCBjbGFzcyBX
ZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6
OldlYkZyYW1lQ2xpZW50LAogICAgIC8vIFdlYktpdDo6V2ViUHJlcmVuZGVyZXJDbGllbnQKICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbEFkZFByZXJlbmRlcihXZWJLaXQ6OldlYlByZXJlbmRlciopIE9W
RVJSSURFOwogCi0gICAgLy8gV2ViS2l0OjpXZWJTcGVsbENoZWNrQ2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIHNwZWxsQ2hlY2soY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBpbnQmIG9mZnNldCwg
aW50JiBsZW5ndGgsIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiogb3B0aW9u
YWxTdWdnZXN0aW9ucyk7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNv
bnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgV2ViS2l0OjpXZWJUZXh0Q2hlY2tpbmdUeXBlTWFzaywg
V2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+Kik7Ci0gICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mVGV4dChjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYsIFdlYktpdDo6V2ViVGV4dENoZWNraW5nQ29tcGxldGlvbiopOwotICAgIHZpcnR1YWwgV2Vi
S2l0OjpXZWJTdHJpbmcgYXV0b0NvcnJlY3RXb3JkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7
Ci0KICAgICAvLyBXZWJLaXQ6OldlYlZpZXdDbGllbnQKICAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
VmlldyogY3JlYXRlVmlldyhXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0JiwgY29uc3QgV2ViS2l0OjpXZWJXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiwgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5KTsKICAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViV2lkZ2V0KiBjcmVhdGVQb3B1cE1lbnUoV2ViS2l0OjpXZWJQb3B1cFR5cGUpOwpA
QCAtMjg4LDEwICsyNzcsNiBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6Oldl
YlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZyYW1lQ2xpZW50LAogICAgICAgICBXZWJL
aXQ6OldlYlNlY3VyaXR5T3JpZ2luIHRhcmdldCwgV2ViS2l0OjpXZWJET01NZXNzYWdlRXZlbnQp
OwogCiAgICAgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIGRldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jaygpOwotICAgIAotICAgIC8vIFNwZWxsY2hlY2sgcmVsYXRlZCBo
ZWxwZXIgQVBJcwotICAgIE1vY2tTcGVsbENoZWNrKiBtb2NrU3BlbGxDaGVjaygpOwotICAgIHZv
aWQgZmluaXNoTGFzdFRleHRDaGVjaygpOwogCiAgICAgLy8gR2VvbG9jYXRpb24gY2xpZW50IG1v
Y2tzIGZvciBEUlRUZXN0UnVubmVyCiAgICAgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1v
Y2sqIGdlb2xvY2F0aW9uQ2xpZW50TW9jaygpOwpAQCAtNDAyLDkgKzM4Nyw2IEBAIHByaXZhdGU6
CiAgICAgc3RkOjpzdHJpbmcgbV9lZGl0Q29tbWFuZE5hbWU7CiAgICAgc3RkOjpzdHJpbmcgbV9l
ZGl0Q29tbWFuZFZhbHVlOwogCi0gICAgLy8gVGhlIG1vY2sgc3BlbGxjaGVja2VyIHVzZWQgaW4g
c3BlbGxDaGVjaygpLgotICAgIE1vY2tTcGVsbENoZWNrIG1fc3BlbGxjaGVjazsKLQogICAgIC8v
IFBhaW50aW5nLgogICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7CiAgICAgV2ViS2l0OjpX
ZWJSZWN0IG1fcGFpbnRSZWN0OwpAQCAtNDMxLDkgKzQxMyw2IEBAIHByaXZhdGU6CiAKICAgICBP
d25QdHI8VGVzdE5hdmlnYXRpb25Db250cm9sbGVyPiBtX25hdmlnYXRpb25Db250cm9sbGVyOwog
Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNrU3RyaW5nOwot
ICAgIFdlYktpdDo6V2ViVGV4dENoZWNraW5nQ29tcGxldGlvbiogbV9sYXN0UmVxdWVzdGVkVGV4
dENoZWNraW5nQ29tcGxldGlvbjsKLQogICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0IG1f
dGFza0xpc3Q7CiAgICAgVmVjdG9yPFdlYktpdDo6V2ViV2lkZ2V0Kj4gbV9wb3B1cG1lbnVzOwog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>