<?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>115297</bug_id>
          
          <creation_ts>2013-04-26 20:47:45 -0700</creation_ts>
          <short_desc>fourthTier: ASSERT that commonly used not-thread-safe methods in the runtime are not being called during compilation</short_desc>
          <delta_ts>2013-04-29 11:31:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882119</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-26 20:47:45 -0700</bug_when>
    <thetext>We have a bunch of methods that we traditionally did call during compilation, like WatchpointSet::isStillValid() and Structure::get().  At least for those methods, we should add asserts that check that they are not being called during compilation.  In a serial compilation mode, we should set a thread-local to denote start/end of compilation; in a concurrent compilation mode, we should check that we aren&apos;t in the compiler thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882441</commentid>
    <comment_count>1</comment_count>
      <attachid>199979</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-28 18:47:54 -0700</bug_when>
    <thetext>Created attachment 199979
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882451</commentid>
    <comment_count>2</comment_count>
      <attachid>199979</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-28 21:12:00 -0700</bug_when>
    <thetext>Comment on attachment 199979
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882698</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-29 11:31:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149301</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199979</attachid>
            <date>2013-04-28 18:47:54 -0700</date>
            <delta_ts>2013-04-28 21:12:00 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48531</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5MjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDEzLTA0LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogQVNTRVJUIHRoYXQgY29tbW9ubHkgdXNlZCBub3QtdGhyZWFkLXNhZmUgbWV0
aG9kcyBpbiB0aGUgcnVudGltZSBhcmUgbm90IGJlaW5nIGNhbGxlZCBkdXJpbmcgY29tcGlsYXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTI5
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgUHV0IGluIGFzc2VydGlvbnMgdGhhdCB3ZSdyZSBub3QgZG9pbmcgYmFkIHRoaW5ncyBpbiBj
b21waWxhdGlvbiB0aHJlYWRzLiBBbHNvCisgICAgICAgIGZhY3RvcmVkIGNvbXBpbGF0aW9uIGlu
dG8gY29tcGlsZStsaW5rIHNvIHRoYXQgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgeWV0IGhhdmUKKyAg
ICAgICAgY29uY3VycmVudCBjb21waWxhdGlvbiwgd2UgY2FuIGJlIGV4cGxpY2l0IGFib3V0IHdo
aWNoIHBhcnRzIG9mIERGRyB3b3JrIGFyZQorICAgICAgICBtZWFudCB0byBiZSBjb25jdXJyZW50
LCBhbmQgd2hpY2ggYXJlbid0LgorICAgICAgICAKKyAgICAgICAgQWxzbyBmaXggYSBoYW5kZnVs
IG9mIGJ1Z3MgZm91bmQgYnkgdGhlc2UgYXNzZXJ0aW9ucy4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUmVz
b2x2ZUdsb2JhbFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpXYXRj
aHBvaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0OjppbmZs
YXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6fkpJVENvbXBpbGVyKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24pOgor
ICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSklUQ29tcGlsZXIpOgor
ICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMTGluay5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAq
IGZ0bC9GVExMaW5rLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRM
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICog
ZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAoU3RhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6
CisKIDIwMTMtMDQtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGVEwgc2hvdWxkIHN1cHBvcnQgZG91YmxlIHZhcmlhYmxlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTgsNiArMjE4LDggQEAKIAkJMEY4MzM1QjcxNjM5QzFFNjAwMTQ0M0I1IC8qIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgz
NjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzNjRCNTE2NEIwQzBFMDA1MzMy
OUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJC
OTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OworCQkwRjhGMkI5NjE3MkUw
NEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGOTQzQzE2
Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGOTQzQTE2Njc2MzExMDBENjE5
NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgKi87IH07CiAJCTBGOEY5NDQwMTY2NzYz
MzAwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDNEMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxv
Y2tIYXNoLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDExNjY3NjMzMjAwRDYxOTcxIC8qIENvZGVCbG9j
a0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OEY5NDNFMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODEsNiArMTE4Myw4IEBACiAJ
CTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8q
IERGR0JyYW5jaERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdCcmFuY2hEaXJlY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NUEzMUUxNkFCNzZBRTAwNzc1NzFFIC8qIERG
R1ZhcmlhZGljRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFyaWFkaWNGdW5jdGlvbi5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhZGljRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZU
TExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRM
TGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOEYyQjk0MTcyRTA0OUUw
MDdEQkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0
bC9GVExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEY5NDNBMTY2NzYz
MTEwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGOTQzRDE2Njc2MzJEMDBENjE5NzEgLyogQ29kZUJs
b2NrSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlQmxv
Y2tIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0M0UxNjY3NjMy
RDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29kZUJsb2NrSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEx
NCw2ICsyMTE4LDggQEAKIAkJCQkwRkVBMEEyMjE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oICovLAogCQkJCTBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExK
SVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5oICovLAorCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywK
KwkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGRUEw
QTEzMTcwNjM2MzYwMEJCNzIyQyAvKiBGVExMTFZNSGVhZGVycy5oICovLAogCQkJCTBGRUEwQTA0
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgKi8sCiAJCQkJMEZFQTBB
MDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8sCkBAIC0zMzc0LDYg
KzMzODAsNyBAQAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzc1NkZDOTBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdE
QkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZDNTE3NjExODI3NDhEMDA3
MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIzMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0MTVF
QkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MjQ2LDYg
KzQyNTMsNyBAQAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2Ny
aXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTcxMDdFQzdFNzAwNjUwNDQ2IC8q
IFByb3BlcnR5TmFtZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3
RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4RjJC
OTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkVBMEEyQTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29s
dmVHbG9iYWxTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ5MjY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNv
bXB1dGVGb3JTdHIKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKICAgICBKU0Nl
bGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQoKmNvZGVCbG9jay0+dm0oKSwgaWRlbnRpZmllciwgYXR0cmlidXRlc0lnbm9yZWQsIHNw
ZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KCpjb2RlQmxvY2stPnZtKCksIGlkZW50aWZpZXIsIGF0dHJpYnV0ZXNJZ25v
cmVkLCBzcGVjaWZpY1ZhbHVlKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
ICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
Y3BwCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJXYXRjaHBvaW50LmgiCiAKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC01Myw2ICs1NCw3IEBAIFdhdGNocG9pbnRTZXQ6On5XYXRjaHBvaW50
U2V0KCkKIAogdm9pZCBXYXRjaHBvaW50U2V0OjphZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
IHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgaWYgKCF3YXRjaHBv
aW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXQucHVzaCh3YXRjaHBvaW50KTsKQEAgLTgz
LDYgKzg1LDcgQEAgdm9pZCBJbmxpbmVXYXRjaHBvaW50U2V0OjphZGQoV2F0Y2hwb2ludAogV2F0
Y2hwb2ludFNldCogSW5saW5lV2F0Y2hwb2ludFNldDo6aW5mbGF0ZVNsb3coKQogewogICAgIEFT
U0VSVChpc1RoaW4oKSk7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAg
IFdhdGNocG9pbnRTZXQqIGZhdCA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KEluaXRpYWxp
emVkQmxpbmQpKS5sZWFrUmVmKCk7CiAgICAgaWYgKG1fZGF0YSAmIElzSW52YWxpZGF0ZWRGbGFn
KQogICAgICAgICBmYXQtPm1faXNJbnZhbGlkYXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEw
ICs1MSwxMiBAQAogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5o
IgogI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkZUTENvbXBpbGUuaCIK
KyNpbmNsdWRlICJGVExMaW5rLmgiCiAjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xMVk0uaCIKICNp
bmNsdWRlICJGVExTdGF0ZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtODEsNiArODMsNyBAQCBlbnVtIENvbXBpbGVN
b2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21wCiBzdGF0aWMgYm9vbCBjb21waWxlKENvbXBpbGVN
b2RlIGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIp
Iik7CisgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3BlOwogICAgIAogICAgIG51
bUNvbXBpbGF0aW9ucysrOwogICAgIApAQCAtMTcxLDcgKzE3NCw5IEBAIHN0YXRpYyBib29sIGNv
bXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgCiAgICAgICAgIEZUTDo6U3RhdGUg
c3RhdGUoZGZnKTsKICAgICAgICAgRlRMOjpsb3dlckRGR1RvTExWTShzdGF0ZSk7Ci0gICAgICAg
IHJldHVybiBGVEw6OmNvbXBpbGUoc3RhdGUsIGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOworICAgICAgICBGVEw6OmNvbXBpbGUoc3RhdGUpOworICAgICAgICBjb21waWxhdGlvblNj
b3BlLmxlYXZlRWFybHkoKTsKKyAgICAgICAgcmV0dXJuIEZUTDo6bGluayhzdGF0ZSwgaml0Q29k
ZSwgKmppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogICAgIApAQCAtMTgzLDEyICsxODgsMTggQEAgc3RhdGljIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24p
IHsKICAgICAgICAgQVNTRVJUKGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgICAgIAotICAg
ICAgICByZXN1bHQgPSBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oaml0Q29kZSwgKmppdENv
ZGVXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIGlmICghZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbXBpbGF0aW9uU2Nv
cGUubGVhdmVFYXJseSgpOworICAgICAgICByZXN1bHQgPSBkYXRhRmxvd0pJVC5saW5rRnVuY3Rp
b24oaml0Q29kZSwgKmppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVPdGhlcik7CiAgICAgICAgIEFTU0VSVCgh
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IGRhdGFG
bG93SklULmNvbXBpbGUoaml0Q29kZSk7CisgICAgICAgIGlmICghZGF0YUZsb3dKSVQuY29tcGls
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb21waWxhdGlvblNjb3Bl
LmxlYXZlRWFybHkoKTsKKyAgICAgICAgcmVzdWx0ID0gZGF0YUZsb3dKSVQubGluayhqaXRDb2Rl
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDkyNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsMTAgQEAgSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcp
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IERpc2Fzc2VtYmxlcihkZmcp
KTsKIH0KIAorSklUQ29tcGlsZXI6On5KSVRDb21waWxlcigpCit7Cit9CisKIHZvaWQgSklUQ29t
cGlsZXI6OmxpbmtPU1JFeGl0cygpCiB7CiAgICAgQVNTRVJUKG1faml0Q29kZS0+b3NyRXhpdC5z
aXplKCkgPT0gbV9leGl0Q29tcGlsYXRpb25JbmZvLnNpemUoKSk7CkBAIC05Nyw3ICsxMDEsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIGVtaXRQdXRJbW1lZGlhdGVU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsKIH0KIAot
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZl
KQordm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQogewogICAgIC8vIFdlIGdlbmVyYXRl
IHRoZSBzcGVjdWxhdGl2ZSBjb2RlIHBhdGgsIGZvbGxvd2VkIGJ5IE9TUiBleGl0IGNvZGUgdG8g
cmV0dXJuCiAgICAgLy8gdG8gdGhlIG9sZCBKSVQgY29kZSBpZiBzcGVjdWxhdGlvbnMgZmFpbC4K
QEAgLTEwNyw3ICsxMTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keShTcGVjdWxh
dGl2CiAgICAgYnJlYWtwb2ludCgpOwogI2VuZGlmCiAgICAgCi0gICAgYm9vbCBjb21waWxlZFNw
ZWN1bGF0aXZlID0gc3BlY3VsYXRpdmUuY29tcGlsZSgpOworICAgIGJvb2wgY29tcGlsZWRTcGVj
dWxhdGl2ZSA9IG1fc3BlY3VsYXRpdmUtPmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNv
bXBpbGVkU3BlY3VsYXRpdmUsIGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogfQogCkBAIC0yNDUsMjYg
KzI0OSwzMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
bV9ncmFwaC5tX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOwogfQogCi1ib29sIEpJVENvbXBpbGVy
Ojpjb21waWxlKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKK2Jvb2wgSklUQ29tcGlsZXI6
OmNvbXBpbGUoKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQmFj
a2VuZCIpOwogCiAgICAgc2V0U3RhcnRPZkNvZGUoKTsKICAgICBjb21waWxlRW50cnkoKTsKLSAg
ICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7Ci0gICAgY29tcGlsZUJvZHkoc3Bl
Y3VsYXRpdmUpOworICAgIG1fc3BlY3VsYXRpdmUgPSBhZG9wdFB0cihuZXcgU3BlY3VsYXRpdmVK
SVQoKnRoaXMpKTsKKyAgICBjb21waWxlQm9keSgpOwogICAgIHNldEVuZE9mTWFpblBhdGgoKTsK
IAogICAgIC8vIEdlbmVyYXRlIHNsb3cgcGF0aCBjb2RlLgotICAgIHNwZWN1bGF0aXZlLnJ1blNs
b3dQYXRoR2VuZXJhdG9ycygpOworICAgIG1fc3BlY3VsYXRpdmUtPnJ1blNsb3dQYXRoR2VuZXJh
dG9ycygpOwogICAgIAogICAgIGNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwogICAgIGxpbmtP
U1JFeGl0cygpOwogICAgIAogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgaWYg
bmVjZXNzYXJ5LgotICAgIHNwZWN1bGF0aXZlLmNyZWF0ZU9TUkVudHJpZXMoKTsKKyAgICBtX3Nw
ZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKSVRDb21waWxlcjo6bGluayhSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgZW50cnkpCit7CiAgICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYXJlU3Rp
bGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0yNzIsNyArMjgxLDcg
QEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShSZWZQdHI8SlNDOjpKSQogICAgIGlmIChsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBs
aW5rKGxpbmtCdWZmZXIpOwotICAgIHNwZWN1bGF0aXZlLmxpbmtPU1JFbnRyaWVzKGxpbmtCdWZm
ZXIpOworICAgIG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKGxpbmtCdWZmZXIpOwogCiAg
ICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
ZHVtcChsaW5rQnVmZmVyKTsKQEAgLTI4NCw3ICsyOTMsNyBAQCBib29sIEpJVENvbXBpbGVyOjpj
b21waWxlKFJlZlB0cjxKU0M6OkpJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSklUQ29t
cGlsZXI6OmNvbXBpbGVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjaykKK2Jvb2wgSklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbigpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBCYWNrZW5kIik7CiAgICAgCkBAIC0zMDUsOCArMzE0LDggQEAgYm9vbCBKSVRDb21waWxl
cjo6Y29tcGlsZUZ1bmN0aW9uKFJlZlB0cgogCiAKICAgICAvLyA9PT0gRnVuY3Rpb24gYm9keSBj
b2RlIGdlbmVyYXRpb24gPT09Ci0gICAgU3BlY3VsYXRpdmVKSVQgc3BlY3VsYXRpdmUoKnRoaXMp
OwotICAgIGNvbXBpbGVCb2R5KHNwZWN1bGF0aXZlKTsKKyAgICBtX3NwZWN1bGF0aXZlID0gYWRv
cHRQdHIobmV3IFNwZWN1bGF0aXZlSklUKCp0aGlzKSk7CisgICAgY29tcGlsZUJvZHkoKTsKICAg
ICBzZXRFbmRPZk1haW5QYXRoKCk7CiAKICAgICAvLyA9PT0gRnVuY3Rpb24gZm9vdGVyIGNvZGUg
Z2VuZXJhdGlvbiA9PT0KQEAgLTMyMyw4ICszMzIsOCBAQCBib29sIEpJVENvbXBpbGVyOjpjb21w
aWxlRnVuY3Rpb24oUmVmUHRyCiAKICAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsKICAgICBiZWdp
bkNhbGwoQ29kZU9yaWdpbigwKSwgdG9rZW4pOwotICAgIENhbGwgY2FsbFN0YWNrQ2hlY2sgPSBj
YWxsKCk7Ci0gICAgbm90aWZ5Q2FsbChjYWxsU3RhY2tDaGVjaywgQ29kZU9yaWdpbigwKSwgdG9r
ZW4pOworICAgIG1fY2FsbFN0YWNrQ2hlY2sgPSBjYWxsKCk7CisgICAgbm90aWZ5Q2FsbChtX2Nh
bGxTdGFja0NoZWNrLCBDb2RlT3JpZ2luKDApLCB0b2tlbik7CiAgICAganVtcChmcm9tU3RhY2tD
aGVjayk7CiAgICAgCiAgICAgLy8gVGhlIGZhc3QgZW50cnkgcG9pbnQgaW50byBhIGZ1bmN0aW9u
IGRvZXMgbm90IGNoZWNrIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMKQEAgLTMzMiw3
ICszNDEsNyBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oUmVmUHRyCiAgICAg
Ly8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZSBiZWVuIHBh
c3NlZCwgb3IgaGF2ZSBhbHJlYWR5IGNoZWNrZWQpLgogICAgIC8vIEluIGNhc2VzIHdoZXJlIGFu
IGFyaXR5IGNoZWNrIGlzIG5lY2Vzc2FyeSwgd2UgZW50ZXIgaGVyZS4KICAgICAvLyBGSVhNRTog
Y2hhbmdlIHRoaXMgZnJvbSBhIGN0aSBjYWxsIHRvIGEgREZHIHN0eWxlIG9wZXJhdGlvbiAobm9y
bWFsIEMgY2FsbGluZyBjb252ZW50aW9ucykuCi0gICAgTGFiZWwgYXJpdHlDaGVjayA9IGxhYmVs
KCk7CisgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKICAgICBjb21waWxlRW50cnkoKTsKIAog
ICAgIGxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilK
U1N0YWNrOjpBcmd1bWVudENvdW50KSwgR1BSSW5mbzo6cmVnVDEpOwpAQCAtMzQwLDIxICszNDks
MjYgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFJlZlB0cgogICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgcG9rZShH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CiAgICAgYmVnaW5DYWxsKENvZGVP
cmlnaW4oMCksIHRva2VuKTsKLSAgICBDYWxsIGNhbGxBcml0eUNoZWNrID0gY2FsbCgpOwotICAg
IG5vdGlmeUNhbGwoY2FsbEFyaXR5Q2hlY2ssIENvZGVPcmlnaW4oMCksIHRva2VuKTsKKyAgICBt
X2NhbGxBcml0eUNoZWNrID0gY2FsbCgpOworICAgIG5vdGlmeUNhbGwobV9jYWxsQXJpdHlDaGVj
aywgQ29kZU9yaWdpbigwKSwgdG9rZW4pOwogICAgIG1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAK
ICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KLSAgICBzcGVjdWxhdGl2ZS5ydW5TbG93
UGF0aEdlbmVyYXRvcnMoKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5ydW5TbG93UGF0aEdlbmVyYXRv
cnMoKTsKICAgICAKICAgICBjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKICAgICBsaW5rT1NS
RXhpdHMoKTsKICAgICAKICAgICAvLyBDcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5l
Y2Vzc2FyeS4KLSAgICBzcGVjdWxhdGl2ZS5jcmVhdGVPU1JFbnRyaWVzKCk7CisgICAgbV9zcGVj
dWxhdGl2ZS0+Y3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwogICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24oUmVm
UHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0
aEFyaXR5Q2hlY2spCit7CiAgICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYXJlU3RpbGxW
YWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM2MywxOCArMzc3LDE4IEBAIGJv
b2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihSZWZQdHIKICAgICBpZiAobGlua0J1ZmZl
ci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbGluayhs
aW5rQnVmZmVyKTsKLSAgICBzcGVjdWxhdGl2ZS5saW5rT1NSRW50cmllcyhsaW5rQnVmZmVyKTsK
KyAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcyhsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSBzdGFjayBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8g
REZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgotICAgIGxpbmtCdWZmZXIu
bGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKLSAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3Bf
Y29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKKyAgICBsaW5r
QnVmZmVyLmxpbmsobV9jYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKKyAgICBsaW5r
QnVmZmVyLmxpbmsobV9jYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPm1faXNDb25zdHJ1Y3Rv
ciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2sp
OwogICAgIAogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPmR1bXAobGlua0J1ZmZlcik7CiAgICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlv
bikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9ncmFwaC5tX2Nv
bXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsKIAotICAgIGVudHJ5V2l0aEFyaXR5Q2hlY2sg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CisgICAgZW50cnlXaXRoQXJpdHlD
aGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29k
ZS0+aW5pdGlhbGl6ZUNvZGVSZWYobGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHkoKSk7CiAgICAgZW50cnkgPSBtX2ppdENvZGU7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAx
NDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0NSw5ICsyNDUsMTMgQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVj
b3JkIHsKIGNsYXNzIEpJVENvbXBpbGVyIDogcHVibGljIENDYWxsSGVscGVycyB7CiBwdWJsaWM6
CiAgICAgSklUQ29tcGlsZXIoR3JhcGgmIGRmZyk7CisgICAgfkpJVENvbXBpbGVyKCk7CiAgICAg
Ci0gICAgYm9vbCBjb21waWxlKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSk7Ci0gICAgYm9v
bCBjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spOworICAgIGJvb2wgY29tcGlsZSgpOwor
ICAgIGJvb2wgY29tcGlsZUZ1bmN0aW9uKCk7CisgICAgCisgICAgYm9vbCBsaW5rKFJlZlB0cjxK
U0M6OkpJVENvZGU+JiBlbnRyeSk7CisgICAgYm9vbCBsaW5rRnVuY3Rpb24oUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hl
Y2spOwogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBwcm9wZXJ0aWVzLgogICAgIEdyYXBoJiBncmFw
aCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KQEAgLTQzNSw3ICs0MzksNyBAQCBwcml2YXRlOgogICAg
IAogICAgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIHRvIGNvbXBpbGUuCiAgICAgdm9pZCBj
b21waWxlRW50cnkoKTsKLSAgICB2b2lkIGNvbXBpbGVCb2R5KFNwZWN1bGF0aXZlSklUJik7Cisg
ICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQgbGluayhMaW5rQnVmZmVyJik7CiAKICAg
ICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9u
UmVjb3ZlcnkqKTsKQEAgLTQ3OCw2ICs0ODIsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8T1NS
RXhpdENvbXBpbGF0aW9uSW5mbz4gbV9leGl0Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxW
ZWN0b3I8TGFiZWw+ID4gbV9leGl0U2l0ZUxhYmVsczsKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRD
b2RlT3JpZ2luSW5kZXg7CisgICAgCisgICAgQ2FsbCBtX2NhbGxTdGFja0NoZWNrOworICAgIENh
bGwgbV9jYWxsQXJpdHlDaGVjazsKKyAgICBMYWJlbCBtX2FyaXR5Q2hlY2s7CisgICAgT3duUHRy
PFNwZWN1bGF0aXZlSklUPiBtX3NwZWN1bGF0aXZlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2Nr
V2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKLSNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMTExWTUhl
YWRlcnMuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
QEAgLTQwLDE4ICszOSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNp
bmcgbmFtZXNwYWNlIERGRzsKIAotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkdlbmVyYXRlZEZ1
bmN0aW9uKShFeGVjU3RhdGUqKTsKLQotc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxsSGVs
cGVycyYgaml0KQorYm9vbCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBqaXQucHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQuZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0g
ICAgaml0LmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihqaXQuY29kZUJsb2NrKCks
IEpTU3RhY2s6OkNvZGVCbG9jayk7Ci19Ci0KLWJvb2wgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFJl
ZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjaykKLXsKLSAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsK
ICAgICBjaGFyKiBlcnJvciA9IDA7CiAgICAgCiAgICAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25z
IG9wdGlvbnM7CkBAIC02MCwxMyArNDksMTMgQEAgYm9vbCBjb21waWxlKFN0YXRlJiBzdGF0ZSwg
UmVmUHRyPEpTQzo6SgogICAgIG9wdGlvbnMuTm9GcmFtZVBvaW50ZXJFbGltID0gdHJ1ZTsKICAg
ICBvcHRpb25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxTbWFsbDsKICAgICAKLSAgICBpZiAo
TExWTUNyZWF0ZU1DSklUQ29tcGlsZXJGb3JNb2R1bGUoJmVuZ2luZSwgc3RhdGUubW9kdWxlLCAm
b3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKSB7CisgICAgaWYgKExMVk1DcmVhdGVN
Q0pJVENvbXBpbGVyRm9yTW9kdWxlKCZzdGF0ZS5lbmdpbmUsIHN0YXRlLm1vZHVsZSwgJm9wdGlv
bnMsIHNpemVvZihvcHRpb25zKSwgJmVycm9yKSkgewogICAgICAgICBkYXRhTG9nKCJGQVRBTDog
Q291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVycm9yLCAiXG4iKTsK
ICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCiAgICAgTExWTVBhc3NNYW5hZ2VyUmVmIHBh
c3MgPSBMTFZNQ3JlYXRlUGFzc01hbmFnZXIoKTsKLSAgICBMTFZNQWRkVGFyZ2V0RGF0YShMTFZN
R2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0YShlbmdpbmUpLCBwYXNzKTsKKyAgICBMTFZNQWRk
VGFyZ2V0RGF0YShMTFZNR2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0YShzdGF0ZS5lbmdpbmUp
LCBwYXNzKTsKICAgICBMTFZNQWRkQ29uc3RhbnRQcm9wYWdhdGlvblBhc3MocGFzcyk7CiAgICAg
TExWTUFkZEluc3RydWN0aW9uQ29tYmluaW5nUGFzcyhwYXNzKTsKICAgICBMTFZNQWRkUHJvbW90
ZU1lbW9yeVRvUmVnaXN0ZXJQYXNzKHBhc3MpOwpAQCAtODMsOTYgKzcyLDkgQEAgYm9vbCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTkKICAgICAvLyBGSVhNRTogTmVlZCB0byBhZGQg
c3VwcG9ydCBmb3IgdGhlIGNhc2Ugd2hlcmUgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIwCi0g
ICAgR2VuZXJhdGVkRnVuY3Rpb24gZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEdlbmVyYXRl
ZEZ1bmN0aW9uPihMTFZNR2V0UG9pbnRlclRvR2xvYmFsKGVuZ2luZSwgc3RhdGUuZnVuY3Rpb24p
KTsKKyAgICBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2VuZXJh
dGVkRnVuY3Rpb24+KExMVk1HZXRQb2ludGVyVG9HbG9iYWwoc3RhdGUuZW5naW5lLCBzdGF0ZS5m
dW5jdGlvbikpOwogICAgIExMVk1EaXNwb3NlUGFzc01hbmFnZXIocGFzcyk7CiAgICAgCi0gICAg
aWYgKCFzdGF0ZS5ncmFwaC5tX3dhdGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKSkgewotICAgICAg
ICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShlbmdpbmUpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIHN0YXRlLmdyYXBoLm1fd2F0Y2hwb2ludHMucmVhbGx5QWRk
KCk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LgotICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyIGNhbGxpbmcg
Y29udmVudGlvbi4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzNjIxCi0gICAgQ0NhbGxIZWxwZXJzIGppdCgmc3RhdGUuZ3JhcGgubV92bSwgc3RhdGUu
Z3JhcGgubV9jb2RlQmxvY2spOwotICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQpOwotICAgIAot
ICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJy
ZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KLSAgICAgICAgCi0gICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBmcm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOwotICAgICAgICAKLSAgICAvLyBQ
bGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpT
U3RhY2suCi0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjI5MQotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBzdGFja0NoZWNrID0gaml0LmJy
YW5jaFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnByZXRlci0+c3RhY2so
KS5hZGRyZXNzT2ZFbmQoKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIGZyb21TdGFja0NoZWNrID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIAotICAg
IGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQ
UkluZm86OnJlZ1QxKTsKLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQu
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOwotICAgIGpp
dC5yZXQoKTsKLSAgICAgICAgCi0gICAgc3RhY2tDaGVjay5saW5rKCZqaXQpOwotICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgaml0LnBva2UoCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAotICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFt
ZSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgCi0gICAgaml0LnN0b3JlMzIoCi0gICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsK
LSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2Vw
dGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBw
cm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5q
dW1wKGZyb21TdGFja0NoZWNrKTsKLSAgICAgICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBh
cml0eUNoZWNrID0gaml0LmxhYmVsKCk7Ci0gICAgY29tcGlsZUVudHJ5KGppdCk7Ci0gICAgaml0
LmxvYWQzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAotICAgICAgICBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgaml0LmJyYW5jaDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3Zl
T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAu
bGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5w
b2tlKAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNU
X09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQq
KSk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtl
IHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlz
IGlzCi0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUg
dG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOwotICAg
ICAgICAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmppdCwg
c3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotICAg
IGxpbmtCdWZmZXIubGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKLSAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2ssIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5t
X2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2Fs
bF9hcml0eUNoZWNrKTsKLSAgICAgICAgCi0gICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIHN0YXRlLmppdENvZGUtPmluaXRp
YWxpemVDb2RlKAotICAgICAgICBlbmdpbmUsCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAot
ICAgICAgICAgICAgbGlua0J1ZmZlciwKLSAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1
bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklU
KSkuZGF0YSgpLCBmdW5jdGlvbikpKTsKLSAgICBqaXRDb2RlID0gc3RhdGUuaml0Q29kZTsKLSAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmgJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotYm9vbCBjb21waWxlKFN0YXRlJiwgUmVmUHRy
PEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlD
aGVjayk7Citib29sIGNvbXBpbGUoU3RhdGUmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMaW5rLmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisj
aW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5j
bHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTExMVk1IZWFkZXJzLmgiCisjaW5jbHVk
ZSAiSklUU3R1YnMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworc3RhdGljIHZvaWQg
Y29tcGlsZUVudHJ5KENDYWxsSGVscGVycyYgaml0KQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVy
bkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5lbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBqaXQu
ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKGppdC5jb2RlQmxvY2soKSwgSlNTdGFj
azo6Q29kZUJsb2NrKTsKK30KKworYm9vbCBsaW5rKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0
eUNoZWNrKQoreworICAgIGlmICghc3RhdGUuZ3JhcGgubV93YXRjaHBvaW50cy5hcmVTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoc3RhdGUuZW5naW5l
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzdGF0ZS5ncmFwaC5t
X3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgZW50cnlw
b2ludC4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hvdWxk
IGp1c3QgdXNlIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgIENDYWxsSGVscGVycyBqaXQoJnN0
YXRlLmdyYXBoLm1fdm0sIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBjb21w
aWxlRW50cnkoaml0KTsKKyAgICAKKyAgICAvLyBUaGlzIHBhcnQgaXMgb25seSBuZWNlc3Nhcnkg
Zm9yIGZ1bmN0aW9ucy4gV2UgY3VycmVudGx5IG9ubHkgY29tcGlsZSBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwo
KTsKKyAgICAgICAgCisgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2Ug
aXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKKyAgICBqaXQuYWRkUHRyKAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc3RhY2tDaGVjayA9IGppdC5icmFuY2hQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QmVs
b3csCisgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHN0YXRlLmdyYXBoLm1f
dm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLAorICAgICAgICBHUFJJbmZv
OjpyZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tU3RhY2tDaGVjayA9IGppdC5s
YWJlbCgpOworICAgICAgICAKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7CisgICAg
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQucmV0KCk7CisgICAgICAgIAor
ICAgIHN0YWNrQ2hlY2subGluaygmaml0KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5wb2tl
KAorICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
CisgICAgICAgIAorICAgIGppdC5zdG9yZTMyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsU3RhY2tDaGVjayA9IGppdC5jYWxsKCk7CisgICAgLy8gRklYTUU6IG5lZWQg
dG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhv
dy4gVGhpcyBpcworICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBi
ZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKKyAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7
CisgICAgICAgIAorICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVjayA9IGppdC5sYWJl
bCgpOworICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEND
YWxsSGVscGVyczo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5i
cmFuY2gzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJl
Z1QxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5ncmFwaC5tX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgLmxpbmtUbyhmcm9tQXJpdHlDaGVj
aywgJmppdCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucG9rZSgKKyAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgIGppdC5zdG9yZTMy
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGpp
dC5jYWxsKCk7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIg
d2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgIC8vIHBhcnQgb2Yg
YSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25z
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIK
KyAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGxB
cml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3Rp
X29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CisgICAg
ICAgIAorICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihh
cml0eUNoZWNrKTsKKyAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKKyAgICAgICAg
c3RhdGUuZW5naW5lLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIsCisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRo
IExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CisgICAgaml0Q29kZSA9IHN0YXRlLmppdENvZGU7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMaW5rX2gKKyNkZWZpbmUgRlRM
TGlua19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitib29sIGxpbmsoU3RhdGUmLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExM
aW5rX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlz
aW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgLCBtb2R1bGUoMCkKICAgICAsIGZ1bmN0aW9uKDApCiAgICAgLCBqaXRDb2RlKGFkb3B0
UmVmKG5ldyBKSVRDb2RlKCkpKQorICAgICwgZW5naW5lKDApCisgICAgLCBnZW5lcmF0ZWRGdW5j
dGlvbigwKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShy
ZXZpc2lvbiAxNDkyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24p
KEV4ZWNTdGF0ZSopOworCiBjbGFzcyBTdGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3RhdGUpOwogICAgIApAQCAtNTEsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGZ1bmN0
aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIFZlY3RvcjxPU1JFeGl0Q29t
cGlsYXRpb25JbmZvPiBvc3JFeGl0OworICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5l
OworICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIAogICAgIHZv
aWQgZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTQ5MjY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEwLDYgKzgxMCw3IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVu
dGwKIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1
ZSkKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKIAogICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSk7CkBAIC05NTcsNiArOTU4LDEwIEBAIHZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlw
ZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7CisgICAgLy8gTm90ZSwgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdHdvIGtpbmRz
IG9mIHBsYWNlczogKDEpIGFzc2VydGlvbnMgYW5kICgyKQorICAgIC8vIHRoZSBjb21waWxhdGlv
biB0aHJlYWQuIEFzIHN1Y2gsIGl0IGRvZXMgdGhpbmdzIHNvbWV3aGF0IGNhcmVmdWxseSB0byBl
bnN1cmUKKyAgICAvLyB0aHJlYWQgc2FmZXR5LiBDdXJyZW50bHkgdGhhdCBvbmx5IGFmZmVjdHMg
dGhlIHdheSB3ZSBkbyBTdHJ1Y3R1cmU6OmdldCgpLgorICAgIAogICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwogICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKICAgICAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXMoKTsKQEAgLTk3MCw3ICs5NzUsNyBAQCBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwog
ICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0Q29u
Y3VycmVudGx5KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwog
ICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvQnl0ZVNw
aW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTM5NSw2ICszOTYsNyBAQCBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOwogICAg
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSkKICAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgQVNTRVJUKGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKSk7CiAgICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpICYmIHBy
ZXZpb3VzSUQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShWTSYgCiAKIGlubGlu
ZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgbWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtKTsKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
QEAgLTY5LDYgKzcwLDcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZN
JgogCiBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBjb25zdCBX
VEY6OlN0cmluZyYgbmFtZSkKIHsKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0pOwogICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTI2NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDQtMjggIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBmb3VydGhUaWVyOiBBU1NFUlQgdGhhdCBj
b21tb25seSB1c2VkIG5vdC10aHJlYWQtc2FmZSBtZXRob2RzIGluIHRoZSBydW50aW1lIGFyZSBu
b3QgYmVpbmcgY2FsbGVkIGR1cmluZyBjb21waWxhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1Mjk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUYXVnaHQgV1RGIHRoZSBub3Rpb24g
b2YgY29tcGlsYXRpb24gdGhyZWFkcy4gVGhpcyBhbGxvd3MgYWxsIHBhcnRzIG9mIG91ciBzdGFj
aworICAgICAgICB0byBhc3NlcnQgdGhhdCB3ZSdyZSBub3QgYmVpbmcgY2FsbGVkIGZyb20gYSBK
U0MgY29tcGlsYXRpb24gdGhyZWFkLiBUaGlzIGlzIGluCisgICAgICAgIFdURiBiZWNhdXNlIGl0
IHdpbGwgcHJvYmFibHkgZW5kIHVwIGJlaW5nIHVzZWQgaW4gU3RyaW5nSW1wbCBhbmQgV1RGU3Ry
aW5nLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd3RmL0NvbXBpbGF0aW9uVGhyZWFkLmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplQ29tcGlsYXRpb25UaHJlYWRzT25jZSk6CisgICAgICAgIChX
VEY6OmluaXRpYWxpemVDb21waWxhdGlvblRocmVhZHMpOgorICAgICAgICAoV1RGOjppc0NvbXBp
bGF0aW9uVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZXhjaGFuZ2VJc0NvbXBpbGF0aW9uVGhyZWFk
KToKKyAgICAgICAgKiB3dGYvQ29tcGlsYXRpb25UaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChX
VEYpOgorICAgICAgICAoQ29tcGlsYXRpb25TY29wZSk6CisgICAgICAgIChXVEY6OkNvbXBpbGF0
aW9uU2NvcGU6OkNvbXBpbGF0aW9uU2NvcGUpOgorICAgICAgICAoV1RGOjpDb21waWxhdGlvblNj
b3BlOjp+Q29tcGlsYXRpb25TY29wZSk6CisgICAgICAgIChXVEY6OkNvbXBpbGF0aW9uU2NvcGU6
OmxlYXZlRWFybHkpOgorCiAyMDEzLTA0LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgZm91cnRoVGllcjogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHF1ZXJ5
IFdhdGNocG9pbnRTZXRzLCBhbmQgYWRkIFdhdGNocG9pbnRzLCBldmVuIGlmIHRoZSBjb21waWxl
ciBpcyBydW5uaW5nIGluIGFub3RoZXIgdGhyZWFkCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0OTI2NCkKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDgg
QEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEw
MDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJ
MEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggKi87IH07CisJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87
IH07CisJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3
MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovOyB9OwogCQkwRjlEMzM2
MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAv
KiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MTE2NURCQTczMDA1QUQzODcg
LyogRmlsZVByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmgg
Ki87IH07CiAJCTBGOUQzMzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1RDE2NURC
QTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwICovOyB9OwpAQCAtMzM0LDYgKzMzNiw4IEBA
CiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENC
MTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJE
QTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJl
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzNUIxNjVEQkE3MzAwNUFE
Mzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRTdHJlYW0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzI2LDYgKzczMCw4IEBACiAJCQkJQThB
NDcyNkExNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThB
NDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJMEZDNEVE
RTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAorCQkJCTBGOEYyQjhGMTcy
RTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCisJCQkJMEY4RjJCOTAx
NzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCiAJCQkJQThBNDcyNzAx
NTFBODI1QTAwNDEyM0ZGIC8qIENvbXBpbGVyLmggKi8sCiAJCQkJQThBNDcyNzExNTFBODI1QTAw
NDEyM0ZGIC8qIENvbXBsZXguaCAqLywKIAkJCQlBOEE0NzI3MzE1MUE4MjVBMDA0MTIzRkYgLyog
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwICovLApAQCAtMTEyNiw2ICsxMTMyLDcg
QEAKIAkJCQlBOEE0NzNCMjE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNBNzE1MUE4MjVCMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQkIxNTFBODI1QjAwNDEyM0ZGIC8qIGR0b2EuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRo
cmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQkQxNTFBODI1QjAwNDEyM0ZGIC8qIER5
bmFtaWNBbm5vdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQzAxNTFBODI1QjAw
NDEyM0ZGIC8qIEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0MxMTUxQTgyNUIw
MDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAtMTM4Miw2ICsxMzg5
LDcgQEAKIAkJCQlBOEE0NzNBMDE1MUE4MjVCMDA0MTIzRkYgLyogRGF0ZU1hdGguY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDczQTIxNTFBODI1QjAwNDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUUxNTFBODI1QjAwNDEyM0ZGIC8qIGRpeS1m
cC5jYyBpbiBTb3VyY2VzICovLAorCQkJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0
MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNC
QTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNC
QzE1MUE4MjVCMDA0MTIzRkYgLyogRHluYW1pY0Fubm90YXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dURi93dGYvQ29tcGlsYXRpb25UaHJlYWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NvbXBpbGF0aW9uVGhyZWFkLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL0NvbXBpbGF0aW9uVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21waWxhdGlvblRocmVhZC5oIgor
CisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisjaW5j
bHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBUaHJl
YWRTcGVjaWZpYzxib29sPiogc19pc0NvbXBpbGF0aW9uVGhyZWFkOworc3RhdGljIHB0aHJlYWRf
b25jZV90IGluaXRpYWxpemVDb21waWxhdGlvblRocmVhZHNLZXlPbmNlID0gUFRIUkVBRF9PTkNF
X0lOSVQ7CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVDb21waWxhdGlvblRocmVhZHNPbmNlKCkK
K3sKKyAgICBzX2lzQ29tcGlsYXRpb25UaHJlYWQgPSBuZXcgVGhyZWFkU3BlY2lmaWM8Ym9vbD4o
KTsKK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNvbXBpbGF0aW9uVGhyZWFkcygpCit7Cisg
ICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXplQ29tcGlsYXRpb25UaHJlYWRzS2V5T25jZSwgaW5p
dGlhbGl6ZUNvbXBpbGF0aW9uVGhyZWFkc09uY2UpOworfQorCitib29sIGlzQ29tcGlsYXRpb25U
aHJlYWQoKQoreworICAgIGlmICghc19pc0NvbXBpbGF0aW9uVGhyZWFkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFzX2lzQ29tcGlsYXRpb25UaHJlYWQtPmlzU2V0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKipzX2lzQ29tcGlsYXRpb25UaHJlYWQ7Cit9
CisKK2Jvb2wgZXhjaGFuZ2VJc0NvbXBpbGF0aW9uVGhyZWFkKGJvb2wgbmV3VmFsdWUpCit7Cisg
ICAgaW5pdGlhbGl6ZUNvbXBpbGF0aW9uVGhyZWFkcygpOworICAgIGJvb2wgb2xkVmFsdWUgPSBp
c0NvbXBpbGF0aW9uVGhyZWFkKCk7CisgICAgKipzX2lzQ29tcGlsYXRpb25UaHJlYWQgPSBuZXdW
YWx1ZTsKKyAgICByZXR1cm4gb2xkVmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21waWxhdGlvblRocmVhZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NvbXBpbGF0aW9uVGhyZWFkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Db21waWxhdGlvblRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDb21waWxhdGlvblRocmVhZF9oCisjZGVmaW5lIENvbXBpbGF0aW9uVGhyZWFkX2gKKworbmFt
ZXNwYWNlIFdURiB7CisKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGlzQ29tcGlsYXRpb25UaHJl
YWQoKTsKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGV4Y2hhbmdlSXNDb21waWxhdGlvblRocmVh
ZChib29sIG5ld1ZhbHVlKTsKKworY2xhc3MgQ29tcGlsYXRpb25TY29wZSB7CitwdWJsaWM6Cisg
ICAgQ29tcGlsYXRpb25TY29wZSgpCisgICAgICAgIDogbV9vbGRWYWx1ZShleGNoYW5nZUlzQ29t
cGlsYXRpb25UaHJlYWQodHJ1ZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+Q29tcGlsYXRp
b25TY29wZSgpCisgICAgeworICAgICAgICBleGNoYW5nZUlzQ29tcGlsYXRpb25UaHJlYWQobV9v
bGRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbGVhdmVFYXJseSgpCisgICAgeworICAg
ICAgICBleGNoYW5nZUlzQ29tcGlsYXRpb25UaHJlYWQobV9vbGRWYWx1ZSk7CisgICAgfQorcHJp
dmF0ZToKKyAgICBib29sIG1fb2xkVmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpDb21waWxhdGlvblNjb3BlOwordXNpbmcgV1RGOjpleGNoYW5nZUlzQ29tcGls
YXRpb25UaHJlYWQ7Cit1c2luZyBXVEY6OmlzQ29tcGlsYXRpb25UaHJlYWQ7CisKKyNlbmRpZiAv
LyBDb21waWxhdGlvblRocmVhZF9oCisK
</data>
<flag name="review"
          id="221460"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>