<?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>122487</bug_id>
          
          <creation_ts>2013-10-07 22:01:59 -0700</creation_ts>
          <short_desc>FTL should use llvm.webkit.stackmap for OSR exit</short_desc>
          <delta_ts>2013-11-02 20:13:55 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>122518</dependson>
    
    <dependson>122538</dependson>
    
    <dependson>122666</dependson>
    
    <dependson>122688</dependson>
          <blocked>122318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>937370</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-07 22:01:59 -0700</bug_when>
    <thetext>Patch forthcoming.

This will take some iterating to get right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937371</commentid>
    <comment_count>1</comment_count>
      <attachid>213652</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-07 22:02:26 -0700</bug_when>
    <thetext>Created attachment 213652
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937622</commentid>
    <comment_count>2</comment_count>
      <attachid>213707</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 12:40:38 -0700</bug_when>
    <thetext>Created attachment 213707
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937802</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 20:25:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/15183189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939356</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-13 21:54:08 -0700</bug_when>
    <thetext>Leaving this open until the LLVM side of the patches lands and we can enable this by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941095</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-17 23:15:22 -0700</bug_when>
    <thetext>This works reliably as of http://trac.webkit.org/changeset/157382, but I&apos;ll leave it open until the functionality is available in LLVM trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946370</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-02 20:13:55 -0700</bug_when>
    <thetext>It&apos;s in trunk.  The remaining work to port the implementation to the slight changes between the original LLVM patch and what landed will be covered in https://bugs.webkit.org/show_bug.cgi?id=122318.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213652</attachid>
            <date>2013-10-07 22:02:26 -0700</date>
            <delta_ts>2013-10-08 12:40:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23807</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTcwNjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBACiAJCTBGOUQzMzcwMTY1REJC
OTAwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07CiAJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgKi87IH07CiAJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBE
RkdGbHVzaGVkQXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk4MTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovOyB9OworCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjIxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9OwogCQkwRjlGQjRGNTE3RkNC
OTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAg
Ki87IH07CkBAIC0xNTI4LDYgKzE1MzAsOCBAQAogCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcg
LyogRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGbHVzaGVkQXQuY3BwOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmx1c2hlZEF0Lmg7IHBh
dGggPSBkZmcvREZHRmx1c2hlZEF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OUQzMzk4MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU3RhY2tNYXBzLmNwcDsgcGF0aCA9IGZ0bC9GVExT
dGFja01hcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEMzM5OTE4MDNB
REI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDQsOCBAQAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBC
QjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMT3V0cHV0LmggKi8sCisJCQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNr
TWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAg
Ki8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJ
QTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENhc2UuaCAqLywKQEAgLTQ0OTks
NiArNDUwNSw3IEBACiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJERjQ0MzAxNzA3QUMwMTAwQTVD
QTk2IC8qIFN1cGVyUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOUQzMzlCMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRB
MjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzQ1LDYgKzUzNTIsNyBAQAog
CQkJCTg2NzA0Qjg0MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY3MDRCODYxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJu
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExT
dGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdC
IC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTcwNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTIgKzI2NCwxOCBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChP
cHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAgICAgIGJlZm9yZUZUTCA9IGN1
cnJlbnRUaW1lTVMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlz
RmFpbHMoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29t
cGlsZSgpKSB7CiAgICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0
dXJuIEZUTFBhdGg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEZUTDo6Y29tcGlsZShz
dGF0ZSk7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmso
KSkgeworICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBG
VExQYXRoOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOwog
ICAgICAgICByZXR1cm4gRlRMUGF0aDsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1NzA2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIK
ICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCkBAIC00
MiwxMSArNDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiB1c2luZyBuYW1l
c3BhY2UgREZHOwogCiBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAotICAg
IHZvaWQqIG9wYXF1ZVN0YXRlLCB1aW50cHRyX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50LCB1
bnNpZ25lZCBzZWN0aW9uSUQsCi0gICAgY29uc3QgY2hhciogc2VjdGlvbk5hbWUpCisgICAgdm9p
ZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVuc2ln
bmVkLCBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlv
bklEKTsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbk5hbWUpOwogICAgIAogICAgIFN0YXRlJiBz
dGF0ZSA9ICpzdGF0aWNfY2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKICAgICAKQEAgLTU3LDYg
KzU1LDcgQEAgc3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICAgICAg
ICAgIHN0YXRlLmdyYXBoLm1fdm0sIHNpemUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkKTsKICAgICAKICAgICBzdGF0ZS5qaXRDb2RlLT5hZGRIYW5k
bGUocmVzdWx0KTsKKyAgICBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFt
ZSk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihyZXN1bHQtPnN0YXJ0
KCkpOwogfQpAQCAtNjYsNyArNjUsNiBAQCBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZURhdGFT
ZWN0aW9uKAogICAgIGNvbnN0IGNoYXIqIHNlY3Rpb25OYW1lLCBMTFZNQm9vbCBpc1JlYWRPbmx5
KQogewogICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uSUQpOwotICAgIFVOVVNFRF9QQVJBTShzZWN0
aW9uTmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKGlzUmVhZE9ubHkpOwogCiAgICAgU3RhdGUmIHN0
YXRlID0gKnN0YXRpY19jYXN0PFN0YXRlKj4ob3BhcXVlU3RhdGUpOwpAQCAtNzYsNyArNzQsMTIg
QEAgc3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVEYXRhU2VjdGlvbigKICAgICBSZWZDb3VudGVk
QXJyYXk8TFNlY3Rpb25Xb3JkPiBzZWN0aW9uKAogICAgICAgICAoc2l6ZSArIHNpemVvZihMU2Vj
dGlvbldvcmQpIC0gMSkgLyBzaXplb2YoTFNlY3Rpb25Xb3JkKSk7CiAgICAgCi0gICAgc3RhdGUu
aml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7CisgICAgaWYgKCFzdHJjbXAoc2VjdGlv
bk5hbWUsICJfX2pzX3N0YWNrbWFwcyIpKQorICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9u
ID0gc2VjdGlvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNl
Y3Rpb24oc2VjdGlvbik7CisgICAgICAgIHN0YXRlLmRhdGFTZWN0aW9uTmFtZXMuYXBwZW5kKHNl
Y3Rpb25OYW1lKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50OF90
Kj4oc2VjdGlvbi5kYXRhKCkpOwogfQpAQCAtOTAsNiArOTMsMTUgQEAgc3RhdGljIHZvaWQgbW1E
ZXN0cm95KHZvaWQqKQogewogfQogCitzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oUmVmQ291
bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc2VjdGlvbiwgY29uc3QgY2hhciogcHJlZml4KQorewor
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzZWN0aW9uLnNpemUoKTsgKytqKSB7CisgICAg
ICAgIGNoYXIgYnVmWzMyXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4
JWx4Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
c2VjdGlvbi5kYXRhKCkgKyBqKSkpOworICAgICAgICBkYXRhTG9nRigiJXMlMTZzOiAweCUwMTZs
bHhcbiIsIHByZWZpeCwgYnVmLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlY3Rpb25bal0pKTsK
KyAgICB9Cit9CisKIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiB7CiAgICAgY2hhciogZXJy
b3IgPSAwOwpAQCAtMTUxLDcgKzE2Myw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAg
ICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBjb2Rl
IGZvciAiLAogICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBo
Lm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLAotICAgICAgICAgICAgICAgICIgIyIsIGks
ICI6XG4iKTsKKyAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlv
bk5hbWVzW2ldLCAiOlxuIik7CiAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXpl
SW5CeXRlcygpLAogICAgICAgICAgICAgICAgICIgICAgIiwgV1RGOjpkYXRhRmlsZSgpLCBMTFZN
U3Vic2V0KTsKQEAgLTE2MiwxNCArMTc0LDI4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUp
CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBk
YXRhIHNlY3Rpb24gZm9yICIsCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUo
c3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksCi0gICAgICAgICAgICAg
ICAgIiAjIiwgaSwgIjpcbiIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHNlY3Rpb24uc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07Ci0g
ICAgICAgICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2VjdGlvbi5kYXRh
KCkgKyBqKSkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgJTE2czogMHglMDE2bGx4
XG4iLCBidWYsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VjdGlvbltqXSkpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmRhdGFTZWN0aW9uTmFt
ZXNbaV0sICI6XG4iKTsKKyAgICAgICAgICAgIGR1bXBEYXRhU2VjdGlvbihzZWN0aW9uLCAiICAg
ICIpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGlmIChzdGF0ZS5zdGFja21hcHNTZWN0
aW9uLnNpemUoKSkgeworICAgICAgICBSZWZQdHI8RGF0YVZpZXc+IHN0YWNrbWFwc0RhdGEgPSBE
YXRhVmlldzo6Y3JlYXRlKAorICAgICAgICAgICAgQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS5z
dGFja21hcHNTZWN0aW9uLmRhdGEoKSwgc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5ieXRlU2l6ZSgp
KSk7CisgICAgICAgIHN0YXRlLnN0YWNrbWFwcy5wYXJzZShzdGFja21hcHNEYXRhLmdldCgpKTsK
KyAgICAKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBzdGFja21hcHMgc2Vj
dGlvbiBmb3IgIiwKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5n
cmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOworICAgICAgICAgICAg
ZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7CisgICAgICAgICAgICBkdW1wRGF0YVNlY3Rpb24o
c3RhdGUuc3RhY2ttYXBzU2VjdGlvbiwgIiAgICAiKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBTdHJ1Y3R1cmVkIGRhdGE6XG4iKTsKKyAgICAgICAgICAgIHN0YXRlLnN0YWNrbWFwcy5kdW1w
TXVsdGlsaW5lKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAgICAgIik7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgc3RhdGUubW9kdWxlID0gMDsgLy8gV2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9k
dWxlLgogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRmFpbC5jcHAJKHJldmlzaW9uIDE1NzA2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAg
dm9pZCBmYWlsKFN0YXRlJiBzdGF0ZSkKIHsKICAgICBzdGF0ZS5ncmFwaC5tX3BsYW4uZmluYWxp
emVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcihzdGF0ZS5ncmFwaC5tX3BsYW4pKTsK
ICAgICAKLSAgICBMTFZNRGlzcG9zZU1vZHVsZShzdGF0ZS5tb2R1bGUpOworICAgIGlmIChzdGF0
ZS5tb2R1bGUpCisgICAgICAgIExMVk1EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNTcwNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxv
dy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFu
KSwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5z
c3ViLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0
LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3Zl
cmZsb3c2NCwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1
Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCisgICAg
bWFjcm8od2Via2l0U3RhY2ttYXAsICJsbHZtLndlYmtpdC5zdGFja21hcCIsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyh0cmFwLCAi
bGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXAogICAgIG1hY3JvKG9zckV4aXQs
ICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGJvb2xlYW4sIGludDMy
LCBWYXJpYWRpYykpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTcwNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5MCw2
ICszMjkwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0
LmNvbnN0SW50MzIoaW5kZXgpKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKSkgeworICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChtX291dC5jb25zdEludDMyKGluZGV4KSk7CisgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KG1fY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwpAQCAtMzM0MSw2ICszMzQ2LDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IGlmIChPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkpIHsKKyAgICAgICAgICAgIG1f
b3V0LmNhbGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9vdXQuY2Fs
bCgKICAgICAgICAgICAgIG1fb3V0LmludFRvUHRyKAogICAgICAgICAgICAgICAgIG1fb3V0Lmdl
dChpbmZvLm1fdGh1bmtBZGRyZXNzKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCByZWFkT2JqZWN0KERhdGFWaWV3KiB2
aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIFQgcmVzdWx0OworICAgIHJlc3VsdC5wYXJz
ZSh2aWV3LCBvZmZzZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3RhY2tNYXBz
OjpDb25zdGFudDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7Cisg
ICAgaW50ZWdlciA9IHZpZXctPnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0cnVlKTsKK30KKwordm9p
ZCBTdGFja01hcHM6OkNvbnN0YW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50ZigiMHglMDE2bGx4IiwgaW50ZWdlcik7Cit9CisKK3ZvaWQgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7Cisg
ICAgdWludDE2X3QgdGFnZ2VkUmVnID0gdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVl
KTsKKyAgICBkd2FyZlJlZ051bSA9IHRhZ2dlZFJlZyAmICgoMSA8PCAxMikgLSAxKTsKKyAgICBr
aW5kID0gc3RhdGljX2Nhc3Q8S2luZD4odGFnZ2VkUmVnID4+IDEyKTsKKworICAgIGNhbGxzaXRl
T2Zmc2V0ID0gdmlldy0+cmVhZDxpbnQxNl90PihvZmZzZXQsIHRydWUpOworfQorCit2b2lkIFN0
YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoIigiLCBraW5kLCAiLCByZWciLCBkd2FyZlJlZ051bSwgIiwgIiwgY2FsbHNpdGVP
ZmZzZXQsICIpIik7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3
KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJl
YWQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgaW5zdHJ1Y3Rpb25PZmZzZXQgPSB2aWV3
LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGZsYWdzID0gdmlldy0+cmVhZDx1
aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB2aWV3
LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChsZW5ndGgtLSkKKyAg
ICAgICAgbG9jYXRpb25zLmFwcGVuZChyZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBvZmZzZXQp
KTsKK30KKwordm9pZCBTdGFja01hcHM6OlJlY29yZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIigjIiwgcGF0Y2hwb2ludElELCAiLCBv
ZmZzZXQgPSAiLCBpbnN0cnVjdGlvbk9mZnNldCwgIiwgZmxhZ3MgPSAiLCBmbGFncywKKyAgICAg
ICAgIiwgWyIsIGxpc3REdW1wKGxvY2F0aW9ucyksICJdKSIpOworfQorCit2b2lkIFN0YWNrTWFw
czo6cGFyc2UoRGF0YVZpZXcqIHZpZXcpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAg
ICAKKyAgICB1aW50MzJfdCBudW1Db25zdGFudHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZz
ZXQsIHRydWUpOworICAgIHdoaWxlIChudW1Db25zdGFudHMtLSkKKyAgICAgICAgY29uc3RhbnRz
LmFwcGVuZChyZWFkT2JqZWN0PENvbnN0YW50Pih2aWV3LCBvZmZzZXQpKTsKKyAgICAKKyAgICB1
aW50MzJfdCBudW1SZWNvcmRzID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsK
KyAgICB3aGlsZSAobnVtUmVjb3Jkcy0tKQorICAgICAgICByZWNvcmRzLmFwcGVuZChyZWFkT2Jq
ZWN0PFJlY29yZD4odmlldywgb2Zmc2V0KSk7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDb25zdGFudHM6WyIsIGxp
c3REdW1wKGNvbnN0YW50cyksICJdLCBSZWNvcmRzOlsiLCBsaXN0RHVtcChyZWNvcmRzKSwgIl0i
KTsKK30KKwordm9pZCBTdGFja01hcHM6OmR1bXBNdWx0aWxpbmUoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4KSBjb25zdAoreworICAgIG91dC5wcmludChwcmVmaXgsICJDb25z
dGFudHM6XG4iKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29uc3RhbnRzLnNpemUo
KTsgKytpKQorICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICAgICIsIGNvbnN0YW50c1tpXSwg
IlxuIik7CisgICAgb3V0LnByaW50KHByZWZpeCwgIlJlY29yZHM6XG4iKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVjb3Jkcy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50
KHByZWZpeCwgIiAgICAiLCByZWNvcmRzW2ldLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRM
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tN
YXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6CisgICAgICAgIG91dC5wcmludCgiVW5wcm9jZXNz
ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVn
aXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6SW5kaXJlY3Q6CisgICAgICAgIG91dC5wcmlu
dCgiSW5kaXJlY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKKyAg
ICAgICAgb3V0LnByaW50KCJDb25zdGFudEluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZGF0YUxvZygiVW5yZWNvZ25pemVkIGtpbmQ6ICIsIHN0YXRpY19jYXN0PGludD4oa2lu
ZCksICJcbiIpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTFN0YWNrTWFwc19oCisjZGVmaW5lIEZUTFN0YWNrTWFwc19oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
RGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworc3RydWN0IFN0YWNrTWFwcyB7CisgICAgdW5pb24gQ29uc3RhbnQg
eworICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgaW50NjRfdCBpbnRlZ2Vy
OworICAgICAgICAKKyAgICAgICAgdm9pZCBwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQm
IG9mZnNldCk7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICB9OworICAgIAorICAgIHN0cnVjdCBMb2NhdGlvbiB7CisgICAgICAgIGVudW0gS2luZCB7Cisg
ICAgICAgICAgICBVbnByb2Nlc3NlZCwKKyAgICAgICAgICAgIFJlZ2lzdGVyLAorICAgICAgICAg
ICAgSW5kaXJlY3QsCisgICAgICAgICAgICBDb25zdGFudCwKKyAgICAgICAgICAgIENvbnN0YW50
SW5kZXgKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IGR3YXJmUmVnTnVt
OyAvLyBSZXByZXNlbnRlZCBhcyBhIDEyLWJpdCBpbnQgaW4gdGhlIHNlY3Rpb24uCisgICAgICAg
IEtpbmQga2luZDsKKyAgICAgICAgaW50MTZfdCBjYWxsc2l0ZU9mZnNldDsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpOworICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgfTsKKyAgICAKKyAg
ICBzdHJ1Y3QgUmVjb3JkIHsKKyAgICAgICAgdWludDMyX3QgcGF0Y2hwb2ludElEOworICAgICAg
ICB1aW50MzJfdCBpbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgdWludDE2X3QgZmxhZ3M7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpOworICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgfTsKKyAgICAKKyAg
ICBWZWN0b3I8Q29uc3RhbnQ+IGNvbnN0YW50czsKKyAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRz
OworICAgIAorICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqIHZpZXcpOworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB2b2lkIGR1bXBNdWx0aWxpbmUoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9uOjpLaW5kKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TFN0YWNrTWFwc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJl
dmlzaW9uIDE1NzA2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIK
ICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgiCisjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTU3LDYg
KzU4LDEwIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3Ny
RXhpdDsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRG
aW5hbGl6ZXIqIGZpbmFsaXplcjsKKyAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1l
czsKKyAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKKyAgICBSZWZDb3VudGVk
QXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9uOworICAgIFN0YWNrTWFwcyBzdGFj
a21hcHM7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkocmV2aXNp
b24gMTU3MDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMiBAQCBQYXNzUmVmUHRyPERhdGFWaWV3PiBE
YXRhVmlldzo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVy
LCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERh
dGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQorewor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyLCAwLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKIEpTQXJyYXlC
dWZmZXJWaWV3KiBEYXRhVmlldzo6d3JhcChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMTU3MDYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCBP
VkVSUklERQogICAgIHsKQEAgLTY4LDYgKzY5LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQodW5zaWduZWQmIG9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBUIHJlc3Vs
dCA9IHRoaXMtPnRlbXBsYXRlIGdldDxUPihvZmZzZXQsIGxpdHRsZUVuZGlhbiwgc3RhdHVzKTsK
KyAgICAgICAgaWYgKCFzdGF0dXMgfHwgKnN0YXR1cykKKyAgICAgICAgICAgIG9mZnNldCArPSBz
aXplb2YoVCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBzZXQodW5zaWduZWQgb2Zmc2V0LCBUIHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgYm9vbCogc3RhdHVzID0gMCkKICAgICB7CiAgICAgICAgIGlmIChz
dGF0dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDE1NzA2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMSBAQCB0eXBlZGVmIE9wdGlvblJhbmdl
IG9wdGlvblJhbmdlOwogICAgIHYoYm9vbCwgdXNlTExWTVNtYWxsQ29kZU1vZGVsLCBmYWxzZSkg
XAogICAgIHYoYm9vbCwgZnRsVHJhcHNPbk9TUkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBm
dGxPU1JFeGl0T21pdHNNYXJzaGFsbGluZywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGZ0bE9TUkV4
aXRVc2VzU3RhY2ttYXAsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VMTFZNT1NSRXhpdEludHJp
bnNpYywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBMTFZNSVIsIGZhbHNlKSBcCi0gICAgdihi
b29sLCBsbHZtQWx3YXlzRmFpbHMsIGZhbHNlKSBcCisgICAgdihib29sLCBsbHZtQWx3YXlzRmFp
bHNCZWZvcmVDb21waWxlLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVm
b3JlTGluaywgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlv
bkxldmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBc
CiAgICAgdih1bnNpZ25lZCwgbGx2bVNpemVMZXZlbCwgMCkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213707</attachid>
            <date>2013-10-08 12:40:38 -0700</date>
            <delta_ts>2013-10-08 12:40:38 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34395</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTcxMTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBACiAJCTBGOUQzMzcwMTY1REJC
OTAwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8qIERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07CiAJCTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgKi87IH07CiAJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBE
RkdGbHVzaGVkQXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk4MTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovOyB9OworCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjIxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9OwogCQkwRjlGQjRGNTE3RkNC
OTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAg
Ki87IH07CkBAIC0xNTI4LDYgKzE1MzAsOCBAQAogCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcg
LyogRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGbHVzaGVkQXQuY3BwOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmx1c2hlZEF0Lmg7IHBh
dGggPSBkZmcvREZHRmx1c2hlZEF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OUQzMzk4MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU3RhY2tNYXBzLmNwcDsgcGF0aCA9IGZ0bC9GVExT
dGFja01hcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlEMzM5OTE4MDNB
REI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3Rh
Y2tMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdGFja0xheW91dFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjMxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU3RhY2tMYXlvdXRQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDQsOCBAQAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBC
QjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMT3V0cHV0LmggKi8sCisJCQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNr
TWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAg
Ki8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJ
QTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENhc2UuaCAqLywKQEAgLTQ0OTks
NiArNDUwNSw3IEBACiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJERjQ0MzAxNzA3QUMwMTAwQTVD
QTk2IC8qIFN1cGVyUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOUQzMzlCMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRB
MjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC01MzQ1LDYgKzUzNTIsNyBAQAog
CQkJCTg2NzA0Qjg0MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY3MDRCODYxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJu
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExT
dGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdC
IC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTIgKzI2NCwxOCBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChP
cHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKICAgICAgICAgICAgIGJlZm9yZUZUTCA9IGN1
cnJlbnRUaW1lTVMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlz
RmFpbHMoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29t
cGlsZSgpKSB7CiAgICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0
dXJuIEZUTFBhdGg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEZUTDo6Y29tcGlsZShz
dGF0ZSk7CisKKyAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmso
KSkgeworICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBG
VExQYXRoOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOwog
ICAgICAgICByZXR1cm4gRlRMUGF0aDsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
NSBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIK
ICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0xMVk1IZWFkZXJzLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQyLDExICs0Niw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIHN0YXRpYyB1aW50
OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rpb24oCi0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRw
dHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVuc2lnbmVkIHNlY3Rpb25JRCwKLSAgICBj
b25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKKyAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0cl90
IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQsIGNvbnN0IGNoYXIqIHNlY3Rpb25O
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uSUQpOwotICAgIFVOVVNFRF9QQVJBTShz
ZWN0aW9uTmFtZSk7CiAgICAgCiAgICAgU3RhdGUmIHN0YXRlID0gKnN0YXRpY19jYXN0PFN0YXRl
Kj4ob3BhcXVlU3RhdGUpOwogICAgIApAQCAtNTcsNiArNTgsNyBAQCBzdGF0aWMgdWludDhfdCog
bW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAogICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgc2l6
ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwog
ICAgIAogICAgIHN0YXRlLmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOworICAgIHN0YXRlLmNv
ZGVTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKICAgICAKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KHJlc3VsdC0+c3RhcnQoKSk7CiB9CkBAIC02Niw3ICs2OCw2IEBA
IHN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlRGF0YVNlY3Rpb24oCiAgICAgY29uc3QgY2hhciog
c2VjdGlvbk5hbWUsIExMVk1Cb29sIGlzUmVhZE9ubHkpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHNl
Y3Rpb25JRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNlY3Rpb25OYW1lKTsKICAgICBVTlVTRURfUEFS
QU0oaXNSZWFkT25seSk7CiAKICAgICBTdGF0ZSYgc3RhdGUgPSAqc3RhdGljX2Nhc3Q8U3RhdGUq
PihvcGFxdWVTdGF0ZSk7CkBAIC03Niw3ICs3NywxMiBAQCBzdGF0aWMgdWludDhfdCogbW1BbGxv
Y2F0ZURhdGFTZWN0aW9uKAogICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHNlY3Rp
b24oCiAgICAgICAgIChzaXplICsgc2l6ZW9mKExTZWN0aW9uV29yZCkgLSAxKSAvIHNpemVvZihM
U2VjdGlvbldvcmQpKTsKICAgICAKLSAgICBzdGF0ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlvbihz
ZWN0aW9uKTsKKyAgICBpZiAoIXN0cmNtcChzZWN0aW9uTmFtZSwgIl9fanNfc3RhY2ttYXBzIikp
CisgICAgICAgIHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24gPSBzZWN0aW9uOworICAgIGVsc2Ugewor
ICAgICAgICBzdGF0ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAg
c3RhdGUuZGF0YVNlY3Rpb25OYW1lcy5hcHBlbmQoc2VjdGlvbk5hbWUpOworICAgIH0KICAgICAK
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihzZWN0aW9uLmRhdGEoKSk7CiB9CkBA
IC05MCw2ICs5Niw2MCBAQCBzdGF0aWMgdm9pZCBtbURlc3Ryb3kodm9pZCopCiB7CiB9CiAKK3N0
YXRpYyB2b2lkIGR1bXBEYXRhU2VjdGlvbihSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBz
ZWN0aW9uLCBjb25zdCBjaGFyKiBwcmVmaXgpCit7CisgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHNlY3Rpb24uc2l6ZSgpOyArK2opIHsKKyAgICAgICAgY2hhciBidWZbMzJdOworICAgICAg
ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglbHgiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzZWN0aW9uLmRhdGEoKSArIGopKSk7Cisg
ICAgICAgIGRhdGFMb2dGKCIlcyUxNnM6IDB4JTAxNmxseFxuIiwgcHJlZml4LCBidWYsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oc2VjdGlvbltqXSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAorICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRl
ZEZ1bmN0aW9uLAorICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXApCit7CisgICAg
Vk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdFRodW5rID0KKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25M
YWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKworICAgIEV4aXRUaHVua0dlbmVyYXRvciBleGl0
VGh1bmtHZW5lcmF0b3Ioc3RhdGUpOworICAgIGV4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmtz
KCk7CisgICAgaWYgKGV4aXRUaHVua0dlbmVyYXRvci5kaWRUaGluZ3MoKSkgeworICAgICAgICBP
d25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKAor
ICAgICAgICAgICAgdm0sICZleGl0VGh1bmtHZW5lcmF0b3IsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKHN0YXRlLm9zckV4
aXQuc2l6ZSgpID09IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gc3RhdGUub3Ny
RXhpdFtpXTsKKyAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ld
OworICAgICAgICAgICAgCisgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGluZm8ubV90aHVu
a0p1bXAsIHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluZm8ubV90aHVua0Fk
ZHJlc3MgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVm
ZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIobGlu
a0J1ZmZlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOworICAgIAorICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0gaml0
Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykgeworICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gc3RhdGUub3NyRXhpdFtleGl0SW5kZXhdOworICAgICAgICBP
U1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOworICAgICAgICBTdGFj
a01hcHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3JkTWFwLmZpbmQoZXhpdC5tX3N0YWNrbWFwSUQp
LT52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1w
KAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgYml0d2lz
ZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZz
ZXQpLAorICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgfQorfQorCiB2b2lk
IGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogewogICAgIGNoYXIqIGVycm9yID0gMDsKQEAgLTE0Mywx
NSArMjAzLDEyIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAgICAgTExWTURpc3Bvc2VF
eGVjdXRpb25FbmdpbmUoZW5naW5lKTsKIAogICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkgewotICAgICAgICAvLyBGSVhNRTogZm91cnRoVGllcjogRlRMIG1lbW9yeSBhbGxvY2F0b3Ig
c2hvdWxkIGJlIGFibGUgdG8gdGVsbCB1cyB3aGljaCBvZgotICAgICAgICAvLyB0aGVzZSB0aGlu
Z3MgaXMgYWN0dWFsbHkgY29kZSBvciBkYXRhLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MTg5CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9IHN0YXRlLmppdENvZGUtPmhhbmRs
ZXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgIkdl
bmVyYXRlZCBMTFZNIGNvZGUgZm9yICIsCiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJ
VFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksCi0gICAgICAg
ICAgICAgICAgIiAjIiwgaSwgIjpcbiIpOworICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIs
IHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKICAgICAgICAgICAgIGRpc2Fzc2Vt
YmxlKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihoYW5kbGUtPnN0YXJ0
KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCiAgICAgICAgICAgICAgICAgIiAgICAiLCBXVEY6
OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwpAQCAtMTYyLDE0ICsyMTksNTIgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
IkdlbmVyYXRlZCBMTFZNIGRhdGEgc2VjdGlvbiBmb3IgIiwKICAgICAgICAgICAgICAgICBDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwKLSAgICAgICAgICAgICAgICAiICMiLCBpLCAiOlxuIik7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgc2VjdGlvbi5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAg
IGNoYXIgYnVmWzMyXTsKLSAgICAgICAgICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCAiMHglbHgiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzZWN0aW9uLmRhdGEoKSArIGopKSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
ICAlMTZzOiAweCUwMTZsbHhcbiIsIGJ1Ziwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWN0aW9u
W2pdKSk7CisgICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwgIiwgc3RhdGUuZGF0YVNlY3Rpb25O
YW1lc1tpXSwgIjpcbiIpOworICAgICAgICAgICAgZHVtcERhdGFTZWN0aW9uKHNlY3Rpb24sICIg
ICAgIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHN0YXRlLnN0YWNrbWFwc1Nl
Y3Rpb24uc2l6ZSgpKSB7CisgICAgICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgewor
ICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gc3Rh
Y2ttYXBzIHNlY3Rpb24gZm9yICIsCisgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5
cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBSYXcgZGF0YTpcbiIpOworICAgICAgICAgICAgZHVtcERh
dGFTZWN0aW9uKHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24sICIgICAgIik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlZlB0cjxEYXRhVmlldz4gc3RhY2ttYXBzRGF0YSA9IERhdGFWaWV3
OjpjcmVhdGUoCisgICAgICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLnN0YWNrbWFw
c1NlY3Rpb24uZGF0YSgpLCBzdGF0ZS5zdGFja21hcHNTZWN0aW9uLmJ5dGVTaXplKCkpKTsKKyAg
ICAgICAgc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnBhcnNlKHN0YWNrbWFwc0RhdGEuZ2V0KCkp
OworICAgIAorICAgICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBTdHJ1Y3R1cmVkIGRhdGE6XG4iKTsKKyAgICAgICAgICAgIHN0YXRl
LmppdENvZGUtPnN0YWNrbWFwcy5kdW1wTXVsdGlsaW5lKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAg
ICAgIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFw
IHJlY29yZE1hcCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5nZXRSZWNvcmRNYXAoKTsKKyAg
ICAgICAgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAorICAgICAgICAgICAgc3RhdGUsIHN0
YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBzdGF0ZS5qaXRDb2RlLmdldCgpLCBzdGF0ZS5nZW5lcmF0
ZWRGdW5jdGlvbiwKKyAgICAgICAgICAgIHJlY29yZE1hcCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSAhPSAiX190ZXh0IikKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFu
ZGxlcygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAg
ICAgICAgICJHZW5lcmF0ZWQgTExWTSBjb2RlIGFmdGVyIHN0YWNrbWFwLWJhc2VkIGZpeC11cCBm
b3IgIiwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3Jh
cGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksCisgICAgICAgICAgICAgICAgICAgICIg
IyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKKyAgICAgICAg
ICAgICAgICBkaXNhc3NlbWJsZSgKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHN0YXRlLm1vZHVsZSA9IDA7IC8v
IFdlIG5vIGxvbmdlciBvd24gdGhlIG1vZHVsZS4KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2
ICs1NywxMiBAQCB2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnCiAgICAg
bV9kaWRUaGluZ3MgPSB0cnVlOwogfQogCit2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRo
dW5rcygpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhdGUub3NyRXhpdC5z
aXplKCk7ICsraSkKKyAgICAgICAgZW1pdFRodW5rKGkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgfkV4aXRU
aHVua0dlbmVyYXRvcigpOwogICAgIAogICAgIHZvaWQgZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4
KTsKKyAgICB2b2lkIGVtaXRUaHVua3MoKTsKICAgICAKICAgICBib29sIGRpZFRoaW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkVGhpbmdzOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRmFpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExGYWlsLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGYWlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCB2b2lkIGZh
aWwoU3RhdGUmIHN0YXRlKQogewogICAgIHN0YXRlLmdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBh
ZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKHN0YXRlLmdyYXBoLm1fcGxhbikpOwogICAgIAot
ICAgIExMVk1EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7CisgICAgaWYgKHN0YXRlLm1vZHVs
ZSkKKyAgICAgICAgTExWTURpc3Bvc2VNb2R1bGUoc3RhdGUubW9kdWxlKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAg
ICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211bC53aXRoLm92ZXJmbG93Lmk2NCIs
IGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2
NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0
aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMy
LCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0
LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUo
bV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKKyAgICBtYWNybyh3
ZWJraXRTdGFja21hcCwgImxsdm0ud2Via2l0LnN0YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1hY3JvKHRyYXAsICJsbHZtLnRy
YXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAgbWFjcm8ob3NyRXhpdCwgIndlYmtp
dF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgYm9vbGVhbiwgaW50MzIsIFZhcmlh
ZGljKSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJERkdDb21tb25EYXRh
LmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgog
I2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlIDx3dGYvTExWTUhlYWRlcnMuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JF
eGl0LCA4PiBvc3JFeGl0OworICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CiAgICAgCiBwcml2YXRl
OgogICAgIFZlY3RvcjxSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPj4gbV9kYXRhU2VjdGlv
bnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBERkc7CiAKIHN0YXRpYyBpbnQgY29tcGlsZUNvdW50ZXI7CiAKK3N0YXRp
YyBib29sIGdlbmVyYXRlRXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuICFPcHRpb25zOjp1c2VM
TFZNT1NSRXhpdEludHJpbnNpYygpICYmICFPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFw
KCk7Cit9CisKIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byBy
ZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKIC8vIHNpZ25pZmljYW50bHkgbGVz
cyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCkBAIC03NSw2ICs4MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKICAgICAg
ICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUu
Z3JhcGgsIG1fc3RhdGUpCisgICAgICAgICwgbV9zdGFja21hcElEcygwKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC0zMjU2LDggKzMyNjIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRp
b24pOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKLSAgICAgICAg
ICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1f
b3V0LmludFB0cik7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVFeGl0VGh1bmtzKCkpIHsKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAgICAgICAg
ICBpbmZvLm1fdGh1bmtBZGRyZXNzVmFsdWUgPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIs
IG1fb3V0LmludFB0cik7CisgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAg
fQpAQCAtMzI2NSw3ICszMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKE9wdGlvbnM6OmZ0
bE9TUkV4aXRPbWl0c01hcnNoYWxsaW5nKCkpIHsKICAgICAgICAgICAgIG1fb3V0LmNhbGwoCiAg
ICAgICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ2V0
KGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCiAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJU
eXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSkpKSk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGZhaWxDb25kaXRpb24sIGluZGV4LCBleGl0LCBpbmZv
LCBsb3dWYWx1ZSwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CkBAIC0zMjc1LDcgKzMyODMsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAgICAgICBtX2V4aXRUaHVua0dlbmVy
YXRvci5lbWl0VGh1bmsoaW5kZXgpOworICAgICAgICAgICAgaWYgKGdlbmVyYXRlRXhpdFRodW5r
cygpKQorICAgICAgICAgICAgICAgIG1fZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVuayhpbmRl
eCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zMjkwLDYgKzMyOTksMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihpbmRleCkp
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdFVz
ZXNTdGFja21hcCgpKSB7CisgICAgICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2tt
YXBJRHMrKzsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihl
eGl0Lm1fc3RhY2ttYXBJRCkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5j
b25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7
CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChs
b3dWYWx1ZS52YWx1ZSgpKTsKQEAgLTMzNDEsOSArMzM1NiwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6
ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgpKSB7CisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0
LndlYmtpdFN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAg
ICBtX291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5r
QWRkcmVzcyksCisgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3NW
YWx1ZSksCiAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZv
aWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAogICAgICAgICAgICAgYXJndW1lbnRzKTsKICAgICB9
CkBAIC0zNDk5LDcgKzM1MTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0LnNl
dCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVj
dXRhYmxlQWRkcmVzcygpKSwKLSAgICAgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVz
cyk7CisgICAgICAgICAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxp
bmtCdWZmZXItPm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOwogICAgICAgICAgICAgfQpAQCAt
MzY5Niw2ICszNzE2LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAg
ICBOb2RlKiBtX25vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247Cisg
ICAgCisgICAgdWludDMyX3QgbV9zdGFja21hcElEczsKIH07CiAKIHZvaWQgbG93ZXJERkdUb0xM
Vk0oU3RhdGUmIHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDggQEAgc3RydWN0IE9TUkV4aXQg
OiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4g
bV92YWx1ZXM7CiAgICAgCisgICAgdWludDMyX3QgbV9zdGFja21hcElEOworICAgIAogICAgIENv
ZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVC
bG9jaykgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBp
bGF0aW9uSW5mbyB7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV90
aHVua0FkZHJlc3MoMCkKKyAgICAgICAgOiBtX3RodW5rQWRkcmVzc1ZhbHVlKDApCiAgICAgewog
ICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90aHVua0xhYmVsOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fdGh1bmtKdW1wOwotICAgIExWYWx1ZSBt
X3RodW5rQWRkcmVzczsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3RodW5rQWRkcmVzczsKKyAg
ICBMVmFsdWUgbV90aHVua0FkZHJlc3NWYWx1ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZUTFN0YWNrTWFwcy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorVCByZWFkT2JqZWN0KERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zm
c2V0KQoreworICAgIFQgcmVzdWx0OworICAgIHJlc3VsdC5wYXJzZSh2aWV3LCBvZmZzZXQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpDb25zdGFudDo6cGFyc2Uo
RGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7CisgICAgaW50ZWdlciA9IHZpZXct
PnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0cnVlKTsKK30KKwordm9pZCBTdGFja01hcHM6OkNvbnN0
YW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiMHgl
MDE2bGx4IiwgaW50ZWdlcik7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2Uo
RGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7CisgICAgdWludDE2X3QgdGFnZ2Vk
UmVnID0gdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50MTZfdD4odGFnZ2VkUmVnKSA8IDApIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICJEZXRlY3RlZCBhIG5lZ2F0aXZlIHRhZ2dlZCByZWdpc3RlciAiLCBzdGF0aWNfY2Fz
dDxpbnQxNl90Pih0YWdnZWRSZWcpLAorICAgICAgICAgICAgIiBhdCBvZmZzZXQgIiwgb2Zmc2V0
LCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgZHdhcmZSZWdOdW0gPSB0YWdnZWRSZWcgJiAoKDEgPDwgMTIpIC0gMSk7CisgICAga2luZCA9
IHN0YXRpY19jYXN0PEtpbmQ+KHRhZ2dlZFJlZyA+PiAxMik7CisKKyAgICB0aGlzLT5vZmZzZXQg
PSB2aWV3LT5yZWFkPGludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7Cit9CisKK3ZvaWQgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJmUmVnTnVtLCAiLCAiLCBvZmZzZXQsICIpIik7Cit9
CisKK2Jvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNpZ25l
ZCYgb2Zmc2V0KQoreworICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJlYWQ8dWludDMyX3Q+KG9m
ZnNldCwgdHJ1ZSk7CisgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KHBhdGNocG9pbnRJRCkg
PCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW5zdHJ1Y3Rpb25PZmZzZXQg
PSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGZsYWdzID0gdmlldy0+
cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChsZW5ndGgt
LSkKKyAgICAgICAgbG9jYXRpb25zLmFwcGVuZChyZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBv
ZmZzZXQpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdGFja01hcHM6OlJl
Y29yZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAg
ICAgICAgIigjIiwgcGF0Y2hwb2ludElELCAiLCBvZmZzZXQgPSAiLCBpbnN0cnVjdGlvbk9mZnNl
dCwgIiwgZmxhZ3MgPSAiLCBmbGFncywKKyAgICAgICAgIiwgWyIsIGxpc3REdW1wKGxvY2F0aW9u
cyksICJdKSIpOworfQorCitib29sIFN0YWNrTWFwczo6cGFyc2UoRGF0YVZpZXcqIHZpZXcpCit7
CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1aW50MzJfdCBudW1Db25zdGFu
dHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1D
b25zdGFudHMtLSkKKyAgICAgICAgY29uc3RhbnRzLmFwcGVuZChyZWFkT2JqZWN0PENvbnN0YW50
Pih2aWV3LCBvZmZzZXQpKTsKKyAgICAKKyAgICB1aW50MzJfdCBudW1SZWNvcmRzID0gdmlldy0+
cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtUmVjb3Jkcy0tKSB7
CisgICAgICAgIFJlY29yZCByZWNvcmQ7CisgICAgICAgIGlmICghcmVjb3JkLnBhcnNlKHZpZXcs
IG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlY29yZHMuYXBw
ZW5kKHJlY29yZCk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0
YWNrTWFwczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
Q29uc3RhbnRzOlsiLCBsaXN0RHVtcChjb25zdGFudHMpLCAiXSwgUmVjb3JkczpbIiwgbGlzdER1
bXAocmVjb3JkcyksICJdIik7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpkdW1wTXVsdGlsaW5lKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQocHJlZml4LCAiQ29uc3RhbnRzOlxuIik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvbnN0YW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgICAi
LCBjb25zdGFudHNbaV0sICJcbiIpOworICAgIG91dC5wcmludChwcmVmaXgsICJSZWNvcmRzOlxu
Iik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY29yZHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgcmVjb3Jkc1tpXSwgIlxuIik7Cit9CisK
K1N0YWNrTWFwczo6UmVjb3JkTWFwIFN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKCkgY29uc3QKK3sK
KyAgICBSZWNvcmRNYXAgcmVzdWx0OworICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29yZHMuc2l6
ZSgpOyBpLS07KQorICAgICAgICByZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hwb2ludElELCBy
ZWNvcmRzW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja01hcHM6OkxvY2F0aW9u
OjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja01hcHM6
OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoKKyAgICAgICAgb3V0LnByaW50KCJVbnByb2Nlc3NlZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpSZWdpc3Rl
cjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpJbmRpcmVjdDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bmRpcmVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9u
OjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFudEluZGV4OgorICAgICAg
ICBvdXQucHJpbnQoIkNvbnN0YW50SW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBkYXRhTG9nKCJVbnJlY29nbml6ZWQga2luZDogIiwgc3RhdGljX2Nhc3Q8aW50PihraW5kKSwg
IlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMU3RhY2tNYXBzX2gKKyNkZWZpbmUgRlRMU3RhY2tNYXBzX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJEYXRh
Vmlldy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBTdGFja01hcHMg
eworICAgIHVuaW9uIENvbnN0YW50IHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7Cisg
ICAgICAgIGludDY0X3QgaW50ZWdlcjsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcGFyc2UoRGF0
YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpOworICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgfTsKKyAgICAKKyAgICBzdHJ1Y3QgTG9jYXRpb24gewor
ICAgICAgICBlbnVtIEtpbmQgeworICAgICAgICAgICAgVW5wcm9jZXNzZWQsCisgICAgICAgICAg
ICBSZWdpc3RlciwKKyAgICAgICAgICAgIEluZGlyZWN0LAorICAgICAgICAgICAgQ29uc3RhbnQs
CisgICAgICAgICAgICBDb25zdGFudEluZGV4CisgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICB1aW50MTZfdCBkd2FyZlJlZ051bTsgLy8gUmVwcmVzZW50ZWQgYXMgYSAxMi1iaXQgaW50IGlu
IHRoZSBzZWN0aW9uLgorICAgICAgICBLaW5kIGtpbmQ7CisgICAgICAgIGludDE2X3Qgb2Zmc2V0
OworICAgICAgICAKKyAgICAgICAgdm9pZCBwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQm
IG9mZnNldCk7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICB9OworICAgIAorICAgIHN0cnVjdCBSZWNvcmQgeworICAgICAgICB1aW50MzJfdCBwYXRjaHBv
aW50SUQ7CisgICAgICAgIHVpbnQzMl90IGluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICB1aW50
MTZfdCBmbGFnczsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25z
OworICAgICAgICAKKyAgICAgICAgYm9vbCBwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQm
IG9mZnNldCk7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAg
ICB9OworICAgIAorICAgIFZlY3RvcjxDb25zdGFudD4gY29uc3RhbnRzOworICAgIFZlY3RvcjxS
ZWNvcmQ+IHJlY29yZHM7CisgICAgCisgICAgYm9vbCBwYXJzZShEYXRhVmlldyogdmlldyk7IC8v
IFJldHVybnMgdHJ1ZSBvbiBwYXJzZSBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLiBGYWlsdXJl
IG1lYW5zIHRoYXQgTExWTSBpcyBzaWduYWxpbmcgY29tcGlsZSBmYWlsdXJlIHRvIHVzLgorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB2b2lkIGR1bXBNdWx0aWxp
bmUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKKyAgICAKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIFJlY29yZCwgV1RGOjpJbnRIYXNoPHVpbnQzMl90
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJlY29yZE1h
cDsKKyAgICAKKyAgICBSZWNvcmRNYXAgZ2V0UmVjb3JkTWFwKCkgY29uc3Q7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6S2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExTdGFja01hcHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CkBAIC01Nyw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9u
SW5mbz4gb3NyRXhpdDsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsK
ICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKKyAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNl
Y3Rpb25OYW1lczsKKyAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9uOwogICAgIAogICAg
IHZvaWQgZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgTWFj
cm9Bc3NlbWJsZXIgaml0OwogICAgIAogICAgIC8vIFByZXRlbmQgdGhhdCB3ZSdyZSBhIEMgY2Fs
bCBmcmFtZS4KKyAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgpKQorICAg
ICAgICBqaXQucHVzaChUcnVzdGVkSW1tMzIoMCkpOyAvLyBIZWgsIHRoaXMgbWlnaHQgY2xvYmJl
ciBzb21lIHJlZ2lzdGVyIG9uIG5vbi1YODYgcGxhdGZvcm1zLgogICAgIGppdC5wdXNoKE1hY3Jv
QXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsMTIgQEAgUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0
ZSgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCkpOwogfQogCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlcikKK3sKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZl
ciwgMCwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworfQorCiBKU0FycmF5QnVmZmVyVmlldyogRGF0
YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogewogICAgIHJldHVybiBKU0RhdGFWaWV3OjpjcmVhdGUoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgcHJvdGVjdGVkOgogICAgIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7CiAgICAg
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgT1ZFUlJJREUKICAgICB7
CkBAIC02OCw2ICs2OSwxNSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgVCByZWFkKHVuc2lnbmVkJiBvZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBib29sKiBzdGF0dXMgPSAwKQorICAgIHsKKyAgICAgICAgVCByZXN1bHQgPSB0aGlzLT50ZW1w
bGF0ZSBnZXQ8VD4ob2Zmc2V0LCBsaXR0bGVFbmRpYW4sIHN0YXR1cyk7CisgICAgICAgIGlmICgh
c3RhdHVzIHx8ICpzdGF0dXMpCisgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFQpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIGJvb2wqIHN0YXR1cyA9IDApCiAgICAgewogICAgICAgICBpZiAoc3RhdHVzKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMyw5ICsxMjMsMTEgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsK
ICAgICB2KGJvb2wsIHVzZUxMVk1TbWFsbENvZGVNb2RlbCwgZmFsc2UpIFwKICAgICB2KGJvb2ws
IGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZnRsT1NSRXhpdE9taXRz
TWFyc2hhbGxpbmcsIGZhbHNlKSBcCisgICAgdihib29sLCBmdGxPU1JFeGl0VXNlc1N0YWNrbWFw
LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdXNlTExWTU9TUkV4aXRJbnRyaW5zaWMsIGZhbHNlKSBc
CiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgbGx2bUFsd2F5
c0ZhaWxzLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGls
ZSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNl
KSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bUJhY2tlbmRPcHRpbWl6YXRpb25MZXZlbCwgMikgXAog
ICAgIHYodW5zaWduZWQsIGxsdm1PcHRpbWl6YXRpb25MZXZlbCwgMikgXAogICAgIHYodW5zaWdu
ZWQsIGxsdm1TaXplTGV2ZWwsIDApIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>