<?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>99805</bug_id>
          
          <creation_ts>2012-10-18 22:04:37 -0700</creation_ts>
          <short_desc>Add Stack statistics collection mechanism</short_desc>
          <delta_ts>2012-10-19 13:11:51 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fmalita</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>745969</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-18 22:04:37 -0700</bug_when>
    <thetext>Adding a utility to collect statistics on native stack usage in JSC and WebCore.  This code is disabled by default, and should effectively be a no-op.

Also made use of the mechanism and applied it in JSC and WebCore to do some of the necessary stack sampling.  Again, this added code are effectively no-op unless the mechanism is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746021</commentid>
    <comment_count>1</comment_count>
      <attachid>169552</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-18 23:10:11 -0700</bug_when>
    <thetext>Created attachment 169552
Fix.

Also renamed StackBounds::recursiveCheck() to StackBounds::isSafeToRecurse().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746476</commentid>
    <comment_count>2</comment_count>
      <attachid>169552</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-19 11:21:32 -0700</bug_when>
    <thetext>Comment on attachment 169552
Fix.

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

Please remove the change to Options.cpp.

&gt; Source/WTF/wtf/StackStats.cpp:43
&gt; +FILE* StackStats::s_logFile = 0;

Can we use dataLog() instead?

&gt; Source/WTF/wtf/StackStats.cpp:60
&gt; +#define STACK_STATS_LOG_FILE &quot;/tmp/stack-stats.log&quot;

We typically prefer &quot;static const char* const&quot; vs macro.

&gt; Source/WTF/wtf/StackStats.cpp:312
&gt; +        fprintf(log, &quot; LAYOUT %p diff %d/%.1fk/max %.1fk | reentry %d/max %d | height %.1fk/max %.1fk | stack %p size %.1fk\n&quot;,

and here too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746580</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-19 13:11:51 -0700</bug_when>
    <thetext>Changes made, and landed in  r131938: &lt;http://trac.webkit.org/changeset/131938&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169552</attachid>
            <date>2012-10-18 23:10:11 -0700</date>
            <delta_ts>2012-10-19 11:21:32 -0700</delta_ts>
            <desc>Fix.</desc>
            <filename>bug-99805.patch</filename>
            <type>text/plain</type>
            <size>61265</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxODUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEyLTEwLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRlZCBXVEY6OlN0YWNrU3RhdHMgbWVjaGFuaXNtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4MDUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgU3RhY2tTdGF0cyBjaGVja3BvaW50cyBhbmQg
cHJvYmVzLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Tm9kZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dCk6CisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBl
bmQpOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
ZHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmZp
bmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cmVwYXJlRm9yUmVwZWF0Q2FsbCk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OmNhblJlY3Vyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5j
cHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oOgorICAgICAgICAoU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlcik6CisKIDIwMTItMTAtMTggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgY29udmVydFVURjhUb1VURjE2KCkgU2hvdWxkIENoZWNrIGZvciBBU0NJSSBJ
bnB1dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTMxODE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjcsNyArMzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAvLyBOb2Rl
OjplbWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9j
YWwgb3IgYSByZWZlcmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8
IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJl
ZkNvdW50KCkpOwogICAgICAgICAgICAgYWRkTGluZUluZm8obi0+bGluZU5vKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKQorICAgICAgICAgICAgcmV0dXJu
IG1fc3RhY2suaXNTYWZlVG9SZWN1cnNlKCkKICAgICAgICAgICAgICAgICA/IG4tPmVtaXRCeXRl
Y29kZSgqdGhpcywgZHN0KQogICAgICAgICAgICAgICAgIDogZW1pdFRocm93RXhwcmVzc2lvblRv
b0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgfQpAQCAtMzgwLDcgKzM4MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KEV4cHJlc3Np
b25Ob2RlKiBuLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZhbHNlVGFyZ2V0LCBib29sIGZh
bGxUaHJvdWdoTWVhbnNUcnVlKQogICAgICAgICB7CiAgICAgICAgICAgICBhZGRMaW5lSW5mbyhu
LT5saW5lTm8oKSk7Ci0gICAgICAgICAgICBpZiAobV9zdGFjay5yZWN1cnNpb25DaGVjaygpKQor
ICAgICAgICAgICAgaWYgKG1fc3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgICAgICAg
ICAgbi0+ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KCp0aGlzLCB0cnVlVGFyZ2V0LCBm
YWxzZVRhcmdldCwgZmFsbFRocm91Z2hNZWFuc1RydWUpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAx
MzE4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL1N0YWNrU3RhdHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU4LDYgKzU5LDcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29u
c2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogeworICAgIFN0YWNrU3RhdHM6OnBy
b2JlKCk7CiAgICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwog
ICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpAQCAtNjYsNiArNjgsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vCiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQog
eworICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJ
TElORykKICAgICBtX3Zpc2l0ZWRUeXBlQ291bnRzLmNvdW50KGNlbGwpOwogI2VuZGlmCkBAIC05
Miw2ICs5NSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbigKIAog
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiB7CisgICAgU3RhY2tTdGF0
czo6cHJvYmUoKTsKICAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2Fu
IGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0
aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCkBAIC0xMTksNiArMTIzLDcgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkK
IHsKKyAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1v
ZGUpOwogICAgCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtMTQ0LDYgKzE0OSw3IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hh
cmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCiB7CisgICAgU3RhY2tTdGF0czo6
cHJvYmUoKTsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKICAgICBBU1NF
UlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7CkBAIC0yMjEsNiArMjI3LDcgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogCiB2b2lkIFNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKCkKIHsKKyAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwogICAgIEFT
U0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQg
d2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NoYXJlZC5tX29wYXF1ZVJvb3RzTG9jayk7CkBAIC0yNzYsNiArMjgzLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAgIC8vIGFzIGl0
IGNhbiBjaGFuZ2UgdGhlIEpTVmFsdWUgcG9pbnRlZCB0byBiZSB0aGUgYXJndW1lbnQgd2hlbiB0
aGUgb3JpZ2luYWwgSlNWYWx1ZQogICAgIC8vIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhl
IHNhbWUgY29udGVudHMgYXMgYW5vdGhlciBzdHJpbmcuCiAKKyAgICBTdGFja1N0YXRzOjpwcm9i
ZSgpOwogICAgIEFTU0VSVChzbG90KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gKnNsb3Q7CiAgICAg
QVNTRVJUKHZhbHVlKTsKQEAgLTMwOSwxMiArMzE3LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6aW50ZXJuYWwKIAogdm9pZCBTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZl
cmVuY2VzKCkKIHsKKyAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwogICAgIGZvciAoV2Vha1JlZmVy
ZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rl
cnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQogICAgICAgICBj
dXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCp0aGlzKTsKIH0KIAogdm9pZCBTbG90VmlzaXRv
cjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7CisgICAgU3RhY2tTdGF0czo6
cHJvYmUoKTsKICAgICB3aGlsZSAobV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5o
YXNOZXh0KCkpCiAgICAgICAgIG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVt
b3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxMzE4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiU3Ryb25n
SW5saW5lcy5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC03NjQsNiArNzY1LDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogICAgIGlmIChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgQ1JBU0goKTsKIAorICAg
IFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwogICAgIGlmIChtX3JlZW50
cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+
PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCiAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCkBA
IC05MjYsNiArOTI4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZy
YQogICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFj
a0NoZWNrUG9pbnQ7CiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVl
bnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1h
eFJlZW50cnlEZXB0aCkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKQEAgLTEwMjEsNiArMTAyNCw3IEBAIEpTT2JqZWN0
KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICBpZiAoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJu
KHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCisgICAgU3RhY2tTdGF0czo6
Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7CiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1h
eFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKQEAgLTExMTgsNiArMTEy
Miw3IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKICAgICBpZiAo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVy
biBDYWxsRnJhbWVDbG9zdXJlKCk7CiAKKyAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNr
Q2hlY2tQb2ludDsKICAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVu
dHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4
UmVlbnRyeURlcHRoKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0xMTU5LDYgKzExNjQs
OCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAgICAgQVNTRVJU
KCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsK
ICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1
c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQ
b2ludCBzdGFja0NoZWNrUG9pbnQ7CiAgICAgY2xvc3VyZS5yZXNldENhbGxGcmFtZSgpOwogICAg
IGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2xv
c3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOwpAQCAtMTIwMSw2ICsxMjA4LDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogCiAgICAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgp
LCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBz
dGFja0NoZWNrUG9pbnQ7CiAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFk
UmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
Lm1heFJlZW50cnlEZXB0aCkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFj
a092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTMxODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODgyLDcgKzg4Miw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgYm9vbCBjYW5SZWN1cnNlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X3N0YWNrLnJlY3Vyc2lvbkNoZWNrKCk7CisgICAgICAgIHJldHVybiBtX3N0YWNrLmlzU2FmZVRv
UmVjdXJzZSgpOwogICAgIH0KICAgICAKICAgICBpbnQgbGFzdFRva2VuRW5kKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAx
MzE4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgp
CiAjaWYgIUVOQUJMRShZQVJSX0pJVCkKICAgICB1c2VSZWdFeHBKSVQoKSA9IGZhbHNlOwogI2Vu
ZGlmCi0gICAgCisKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtl
IGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA+PSB0aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCShyZXZpc2lvbiAxMzE4
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlcl9oCiAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgPHd0
Zi9TdGFja1N0YXRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2ICs0Miw4IEBAIHBy
aXZhdGU6CiAgICAgRXhlY1N0YXRlKiBtX2V4ZWM7CiAgICAgSlNPYmplY3QqIG1fdGhpc09iamVj
dDsKICAgICBKU1ZhbHVlIG1fZWFybHlSZXR1cm5WYWx1ZTsKKworICAgIFN0YWNrU3RhdHM6OkNo
ZWNrUG9pbnQgc3RhY2tDaGVja3BvaW50OwogfTsKIAogaW5saW5lIEpTVmFsdWUgU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKCkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzE4NTMpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisy
MDEyLTEwLTE4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRl
ZCBXVEY6OlN0YWNrU3RhdHMgbWVjaGFuaXNtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4MDUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRGlzYWJsZWQgYnkgZGVmYXVsdC4gU2hvdWxkIGhhdmUgbm8g
cGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBjb3N0IHdoZW4KKyAgICAgICAgZGlzYWJsZWQuIFRvIGVu
YWJsZSwgI2RlZmluZSBFTkFCTEVfU1RBQ0tfU1RBVFMgMSBpbiBTdGFja1N0YXRzLmguCisgICAg
ICAgIFRoZSBvdXRwdXQgaXMgY3VycmVudGx5IGhhcmRjb2RlZCB0byBiZSBkdW1wZWQgaW4gL3Rt
cC9zdGFjay1zdGF0cy5sb2csCisgICAgICAgIGFuZCBpcyBpbiB0aGUgZm9ybSBvZiBzdGFjayBz
YW1wbGUgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCBvbmx5IGxvZ3MKKyAgICAgICAgYSBzYW1wbGUg
ZXZlbnQgd2hlbiBhIG5ldyBoaWdoIHdhdGVybWFyayB2YWx1ZSBpcyBlbmNvdW50ZXJlZC4KKwor
ICAgICAgICBBbHNvIHJlbmFtZWQgU3RhY2tCb3VuZHM6OnJlY3Vyc2l2ZUNoZWNrKCkgdG8gaXNT
YWZlVG9SZWN1cnNlKCkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFN0YWNrQm91bmRzKToK
KyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OnNpemUpOgorICAgICAgICAoV1RGOjpTdGFja0Jv
dW5kczo6aXNTYWZlVG9SZWN1cnNlKToKKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRT
dGF0cyk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6OkNoZWNrUG9pbnQp
OgorICAgICAgICAoV1RGOjpTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQb2ludCk6Cisg
ICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6U3RhY2tTdGF0
czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6OlN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQ6On5MYXlvdXRDaGVja1BvaW50KToKKyAgICAgICAg
KiB3dGYvU3RhY2tTdGF0cy5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChTdGFj
a1N0YXRzKToKKyAgICAgICAgKENoZWNrUG9pbnQpOgorICAgICAgICAoV1RGOjpTdGFja1N0YXRz
OjpDaGVja1BvaW50OjpDaGVja1BvaW50KToKKyAgICAgICAgKFBlclRocmVhZFN0YXRzKToKKyAg
ICAgICAgKFdURjo6U3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHM6OlBlclRocmVhZFN0YXRzKToK
KyAgICAgICAgKExheW91dENoZWNrUG9pbnQpOgorICAgICAgICAoV1RGOjpTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50OjpMYXlvdXRDaGVja1BvaW50KToKKyAgICAgICAgKFdURjo6U3RhY2tT
dGF0czo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OnByb2JlKToKKyAg
ICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKToKKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAg
IChXVEY6OldURlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZU
aHJlYWREYXRhLmg6CisgICAgICAgIChXVEZUaHJlYWREYXRhKToKKyAgICAgICAgKFdURjo6V1RG
VGhyZWFkRGF0YTo6c3RhY2tTdGF0cyk6CisKIDIwMTItMTAtMTggIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgY29udmVydFVURjhUb1VURjE2KCkgU2hvdWxk
IENoZWNrIGZvciBBU0NJSSBJbnB1dApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNiArMjgyLDggQEAKIAkJ
RjM1MjVFNDYxNjE5QTRFRTAwMjc4QkMxIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNTI1RTQ1
MTYxOUE0RUUwMDI3OEJDMSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmggKi87IH07
CiAJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNo
Q291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjNGQkM3MUQxNjFBRjdCRjAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hD
b3VudGVkU2V0LmggKi87IH07CiAJCUYzRkJDNzIwMTYxQUY3Q0QwMEJCNEJENCAvKiBNZW1vcnlJ
bnN0cnVtZW50YXRpb25TZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjNGQkM3MUYxNjFBRjdDRDAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1l
bnRhdGlvblNlcXVlbmNlLmggKi87IH07CisJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKKwkJ
RkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAv
KiBTdGFja1N0YXRzLmggKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCkBAIC01NjksNiArNTcxLDggQEAK
IAkJRjM1MjVFNDUxNjE5QTRFRTAwMjc4QkMxIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZCQzcxRDE2MUFG
N0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENv
dW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNGQkM3MUYxNjFBRjdD
RDAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNr
U3RhdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRURBQ0QzQzE2MzBGODNG
MDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGFja1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmls
ZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KQEAgLTc3OCw2ICs3ODIsOCBAQAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQx
MjNGRiAvKiBTcGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBT
dGFja0JvdW5kcy5jcHAgKi8sCiAJCQkJQThBNDczMEYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNr
Qm91bmRzLmggKi8sCisJCQkJRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
Y3BwICovLAorCQkJCUZFREFDRDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi8s
CiAJCQkJQThBNDczMTAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oICov
LAogCQkJCUE4QTQ3MzExMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCAqLywKIAkJ
CQkxQTZCQjc2ODE2MkYzMDA1MDBERDE2REIgLyogU3RyZWFtQnVmZmVyLmggKi8sCkBAIC0xMTI0
LDYgKzExMzAsNyBAQAogCQkJCUE4QTQ3NDI0MTUxQTgyNUIwMDQxMjNGRiAvKiBTaW5nbHlMaW5r
ZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVCMDA0MTIzRkYgLyog
U3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI4MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5
NjM0IC8qIFN0YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI5MTUxQTgyNUIw
MDQxMjNGRiAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDJBMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNkJCNzY5MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMxNCw2ICsxMzIxLDcgQEAKIAkJCQlBOEE0NzQyMTE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyog
U2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIz
RkYgLyogU3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkVEQUNEM0QxNjMwRjgz
RjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0Mx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThBNDc0MkIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ0MDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24gMTMxODE2KQorKysgU291
cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTUg
QEAKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBTdGFja0JvdW5kcyB7Ci0gICAgLy8gcmVjdXJz
aW9uQ2hlY2soKSAvIHJlY3Vyc2lvbkxpbWl0KCkgdGVzdHMgKGJ5IGRlZmF1bHQpCisgICAgLy8g
aXNTYWZlVG9SZWN1cnNlKCkgLyByZWN1cnNpb25MaW1pdCgpIHRlc3RzIChieSBkZWZhdWx0KQog
ICAgIC8vIHRoYXQgd2UgYXJlIGF0IGxlYXN0IHRoaXMgZmFyIGZyb20gdGhlIGVuZCBvZiB0aGUg
c3RhY2suCi0gICAgY29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0
YSA9IDQwOTY7CisgICAgLy8KKyAgICAvLyBUaGlzIDY0ayBudW1iZXIgd2FzIHBpY2tlZCBiZWNh
dXNlIGEgc2FtcGxpbmcgb2Ygc3RhY2sgdXNhZ2UgZGlmZmVyZW5jZXMKKyAgICAvLyBiZXR3ZWVu
IGNvbnNlY3V0aXZlIGVudHJpZXMgaW50byBvbmUgb2YgdGhlIEludGVycHJldGVyOjpleGVjdXRl
Li4uKCkKKyAgICAvLyBmdW5jdGlvbnMgd2FzIHNlZW4gdG8gYmUgYXMgaGlnaCBhcyAyN2suIEhl
bmNlLCA2NGsgaXMgY2hvc2VuIGFzIGEKKyAgICAvLyBjb25zZXJ2YXRpdmUgYXZhaWxhYmlsaXR5
IHZhbHVlIHRoYXQgaXMgbm90IHRvbyBsYXJnZSBidXQgY29tZm9ydGFibHkKKyAgICAvLyBleGNl
ZWRzIDI3ayB3aXRoIHNvbWUgYnVmZmVyIGZvciBlcnJvci4KKyAgICBjb25zdCBzdGF0aWMgc2l6
ZV90IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhID0gNjQgKiAxMDI0OwogCiBwdWJsaWM6CiAg
ICAgU3RhY2tCb3VuZHMoKQpAQCAtNjIsNiArNjgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gY3VycmVudFBvc2l0aW9uOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IHN0
YXRpY19jYXN0PGNoYXIqPihtX29yaWdpbikgLSBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkK
KyAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYm91bmQpIC0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG1fb3JpZ2luKTsKKyAgICB9CisKICAgICB2b2lkKiByZWN1cnNpb25MaW1pdChzaXpl
X3QgbWluQXZhaWxhYmxlRGVsdGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSkgY29uc3QK
ICAgICB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTcwLDcgKzgzLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFp
bGFibGVEZWx0YTsKICAgICB9CiAKLSAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5B
dmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIGJv
b2wgaXNTYWZlVG9SZWN1cnNlKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2
YWlsYWJpbGl0eURlbHRhKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQpAQCAtMTA1LDYgKzExOCw4IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkKiBtX29yaWdpbjsKICAgICB2b2lkKiBtX2JvdW5kOworCisg
ICAgZnJpZW5kIGNsYXNzIFN0YWNrU3RhdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1N0YWNrU3RhdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU3Rh
Y2tTdGF0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTdGFja1N0YXRzLmgiCisKKyNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpIAorCisjaW5j
bHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIldURlRocmVhZERhdGEuaCIKKworLy8gRGVm
aW5lIHRoZSBmb2xsb3dpbmcgZmxhZyBpZiB5b3Ugd2FudCB0byBjb2xsZWN0IHN0YXRzIG9uIGV2
ZXJ5IHNpbmdsZQorLy8gY2hlY2twb2ludC4gQnkgZGVmYXVsdCwgd2Ugb25seSBsb2cgY2hlY2tw
b2ludHMgdGhhdCBlc3RhYmxpc2ggbmV3CisvLyBtYXggdmFsdWVzLgorCisvLyAjZGVmaW5lIEVO
QUJMRV9WRVJCT1NFX1NUQUNLX1NUQVRTIDEKKworCituYW1lc3BhY2UgV1RGIHsKKworRklMRSog
U3RhY2tTdGF0czo6c19sb2dGaWxlID0gMDsKKworLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50Ogor
TXV0ZXgqIFN0YWNrU3RhdHM6OnNfc2hhcmVkTG9jayA9IDA7CitTdGFja1N0YXRzOjpDaGVja1Bv
aW50KiBTdGFja1N0YXRzOjpzX3RvcENoZWNrUG9pbnQgPSAwOworU3RhY2tTdGF0czo6TGF5b3V0
Q2hlY2tQb2ludCogU3RhY2tTdGF0czo6c19maXJzdExheW91dENoZWNrUG9pbnQgPSAwOworU3Rh
Y2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCogU3RhY2tTdGF0czo6c190b3BMYXlvdXRDaGVja1Bv
aW50ID0gMDsKKworLy8gSGlnaCB3YXRlcm1hcmsgc3RhdHM6CitpbnQgU3RhY2tTdGF0czo6c19t
YXhDaGVja1BvaW50RGlmZiA9IDA7CitpbnQgU3RhY2tTdGF0czo6c19tYXhTdGFja0hlaWdodCA9
IDA7CitpbnQgU3RhY2tTdGF0czo6c19tYXhSZWVudHJ5RGVwdGggPSAwOworCitpbnQgU3RhY2tT
dGF0czo6c19tYXhMYXlvdXRDaGVja1BvaW50RGlmZiA9IDA7CitpbnQgU3RhY2tTdGF0czo6c19t
YXhUb3RhbExheW91dENoZWNrUG9pbnREaWZmID0gMDsKK2ludCBTdGFja1N0YXRzOjpzX21heExh
eW91dFJlZW50cnlEZXB0aCA9IDA7CisKKyNkZWZpbmUgU1RBQ0tfU1RBVFNfTE9HX0ZJTEUgIi90
bXAvc3RhY2stc3RhdHMubG9nIgorCisvLyBJbml0aWFsaXplcyBsb2NrcyBhbmQgdGhlIGxvZyBm
aWxlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4KK3ZvaWQgU3RhY2tTdGF0czo6aW5pdGlh
bGl6ZSgpCit7CisgICAgc19zaGFyZWRMb2NrID0gbmV3IE11dGV4KCk7CisgICAgc19sb2dGaWxl
ID0gZm9wZW4oU1RBQ0tfU1RBVFNfTE9HX0ZJTEUsICJhKyIpOworICAgIEFTU0VSVChzX2xvZ0Zp
bGUpOworICAgIGlmICghc19sb2dGaWxlKQorICAgICAgICBleGl0KDI1NSk7IC8vIEJhZG5lc3Mu
IEFib3J0LiAKKworICAgIGZwcmludGYoc19sb2dGaWxlLCAiID09PSBGSUxFIG9wZW4gPT09PT09
PT1cbiIpOworICAgIGZmbHVzaChzX2xvZ0ZpbGUpOworfQorCitTdGFja1N0YXRzOjpQZXJUaHJl
YWRTdGF0czo6UGVyVGhyZWFkU3RhdHMoKQoreworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFj
ayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAgIG1fcmVlbnRyeURlcHRoID0gMDsKKyAg
ICBtX3N0YWNrU3RhcnQgPSAoY2hhciopc3RhY2sub3JpZ2luKCk7CisgICAgbV9jdXJyZW50Q2hl
Y2tQb2ludCA9IDA7CisKKyAgICBGSUxFKiBsb2cgPSBTdGFja1N0YXRzOjpzX2xvZ0ZpbGU7Cisg
ICAgZnByaW50Zihsb2csICIgPT09IFRIUkVBRCBuZXcgc3RhY2tTdGFydCAlcCA9PT09PT09PVxu
IiwgbV9zdGFja1N0YXJ0KTsKKyAgICBmZmx1c2gobG9nKTsKK30KKworU3RhY2tTdGF0czo6Q2hl
Y2tQb2ludDo6Q2hlY2tQb2ludCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpTdGFja1N0
YXRzOjpzX3NoYXJlZExvY2spOworICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25z
dF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKKyAgICBTdGFja1N0YXRz
OjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKKyAgICBjb25z
dCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0aHJlYWREYXRhLT5zdGFjaygpOworCisgICAgYm9vbCBp
c0dyb3dpbmdEb3dud2FyZCA9IHN0YWNrLmlzR3Jvd2luZ0Rvd253YXJkKCk7CisgICAgYm9vbCBu
ZWVkVG9QcmludCA9IGZhbHNlOworICAgIGNoYXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPih0aGlzKTsKKyAgICBjaGFyKiBsYXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dC5tX2N1cnJlbnRDaGVja1BvaW50KTsKKworICAgIC8vIElmIHRoZXJlIHdhcyBubyBwcmV2aW91
cyBjaGVja3BvaW50LCBtZWFzdXJlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjazoKKyAgICBp
ZiAoIWxhc3QpCisgICAgICAgIGxhc3QgPSB0Lm1fc3RhY2tTdGFydDsKKworICAgIC8vIFVwZGF0
ZSB0aGUgcmVlbnRyeSBkZXB0aCBzdGF0czoKKyAgICB0Lm1fcmVlbnRyeURlcHRoKys7CisgICAg
aWYgKHQubV9yZWVudHJ5RGVwdGggPiBTdGFja1N0YXRzOjpzX21heFJlZW50cnlEZXB0aCkgewor
ICAgICAgICBTdGFja1N0YXRzOjpzX21heFJlZW50cnlEZXB0aCA9IHQubV9yZWVudHJ5RGVwdGg7
CisgICAgICAgIG5lZWRUb1ByaW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgdGhl
IHN0YWNrIGhlaWdodCBzdGF0czoKKyAgICBpbnQgaGVpZ2h0ID0gdC5tX3N0YWNrU3RhcnQgLSBj
dXJyZW50OworICAgIGlmICghaXNHcm93aW5nRG93bndhcmQpCisgICAgICAgIGhlaWdodCA9IC1o
ZWlnaHQ7CisgICAgaWYgKGhlaWdodCA+IFN0YWNrU3RhdHM6OnNfbWF4U3RhY2tIZWlnaHQpIHsK
KyAgICAgICAgU3RhY2tTdGF0czo6c19tYXhTdGFja0hlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
bmVlZFRvUHJpbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgY2hlY2twb2lu
dCBkaWZmIHN0YXRzOgorICAgIGludCBkaWZmID0gbGFzdCAtIGN1cnJlbnQ7CisgICAgaWYgKCFp
c0dyb3dpbmdEb3dud2FyZCkKKyAgICAgICAgZGlmZiA9IC1kaWZmOworICAgIGlmIChkaWZmID4g
U3RhY2tTdGF0czo6c19tYXhDaGVja1BvaW50RGlmZikgeworICAgICAgICBTdGFja1N0YXRzOjpz
X21heENoZWNrUG9pbnREaWZmID0gZGlmZjsKKyAgICAgICAgbmVlZFRvUHJpbnQgPSB0cnVlOwor
ICAgIH0KKworICAgIC8vIFB1c2ggdGhpcyBjaGVja3BvaW50OgorICAgIG1fcHJldiA9IHQubV9j
dXJyZW50Q2hlY2tQb2ludDsKKyAgICB0Lm1fY3VycmVudENoZWNrUG9pbnQgPSB0aGlzOworCisg
ICAgLy8gTG9nIHRoaXMgY2hlY2twb2ludCBpZiBuZWVkZWQ6CisjaWYgIUVOQUJMRShWRVJCT1NF
X1NUQUNLX1NUQVRTKQorICAgIGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgorICAgIHsKKyAgICAg
ICAgQVNTRVJUKFN0YWNrU3RhdHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJTEUqIGxvZyA9IFN0
YWNrU3RhdHM6OnNfbG9nRmlsZTsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBDSEVDS1BPSU5U
ICVwIGRpZmYgJWQvJS4xZmsvbWF4ICUuMWZrIHwgcmVlbnRyeSAlZC9tYXggJWQgfCBoZWlnaHQg
JS4xZmsvbWF4ICUuMWZrIHwgc3RhY2sgJXAgc2l6ZSAlLjFma1xuIiwKKyAgICAgICAgICAgIHRo
aXMsIGRpZmYsIGRpZmYgLyAxMDI0LjAsIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQb2ludERpZmYg
LyAxMDI0LjAsCisgICAgICAgICAgICB0Lm1fcmVlbnRyeURlcHRoLCBTdGFja1N0YXRzOjpzX21h
eFJlZW50cnlEZXB0aCwKKyAgICAgICAgICAgIGhlaWdodCAvIDEwMjQuMCwgU3RhY2tTdGF0czo6
c19tYXhTdGFja0hlaWdodCAvIDEwMjQuMCwKKyAgICAgICAgICAgIHN0YWNrLm9yaWdpbigpLCBz
dGFjay5zaXplKCkgLyAxMDI0LjApOworICAgICAgICBmZmx1c2gobG9nKTsKKyAgICB9Cit9CisK
K1N0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6On5DaGVja1BvaW50KCkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIoKlN0YWNrU3RhdHM6OnNfc2hhcmVkTG9jayk7CisgICAgV1RGVGhyZWFkRGF0YSog
dGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkp
OworICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tT
dGF0cygpOworCisgICAgLy8gUG9wIHRvIHByZXZpb3VzIGNoZWNrcG9pbnQ6CisgICAgdC5tX2N1
cnJlbnRDaGVja1BvaW50ID0gbV9wcmV2OworICAgIC0tdC5tX3JlZW50cnlEZXB0aDsKKworICAg
IC8vIExvZyB0aGlzIGNoZWNrcG9pbnQgaWYgbmVlZGVkOgorI2lmIEVOQUJMRShWRVJCT1NFX1NU
QUNLX1NUQVRTKQorICAgIGlmICghbV9wcmV2KSB7CisgICAgICAgIEFTU0VSVChTdGFja1N0YXRz
OjpzX2xvZ0ZpbGUpOworICAgICAgICBGSUxFKiBsb2cgPSBTdGFja1N0YXRzOjpzX2xvZ0ZpbGU7
CisgICAgICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7
CisgICAgICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQgPSBzdGFjay5pc0dyb3dpbmdEb3dud2Fy
ZCgpOworCisgICAgICAgIGNoYXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0
aGlzKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHQubV9zdGFja1N0YXJ0IC0gY3VycmVudDsKKwor
ICAgICAgICBpZiAoIWlzR3Jvd2luZ0Rvd253YXJkKQorICAgICAgICAgICAgaGVpZ2h0ID0gLWhl
aWdodDsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBQT1AgdG8gJXAgZGlmZiBtYXggJS4xZmsg
fCByZWVudHJ5ICVkLyVkIG1heCB8IGhlaWdodCAlLjFmay9tYXggJS4xZmsgfCBzdGFjayAlcCBz
aXplICUuMWZrKVxuIiwKKyAgICAgICAgICAgIHRoaXMsIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQ
b2ludERpZmYgLyAxMDI0LjAsCisgICAgICAgICAgICB0Lm1fcmVlbnRyeURlcHRoLCBTdGFja1N0
YXRzOjpzX21heFJlZW50cnlEZXB0aCwKKyAgICAgICAgICAgIGhlaWdodCAvIDEwMjQuMCwgU3Rh
Y2tTdGF0czo6c19tYXhTdGFja0hlaWdodCAvIDEwMjQuMCwKKyAgICAgICAgICAgIHN0YWNrLm9y
aWdpbigpLCBzdGFjay5zaXplKCkgLyAxMDI0LjApOworICAgICAgICBmZmx1c2gobG9nKTsKKyAg
ICB9CisjZW5kaWYKK30KKwordm9pZCBTdGFja1N0YXRzOjpwcm9iZSgpCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKCpTdGFja1N0YXRzOjpzX3NoYXJlZExvY2spOworICAgIFdURlRocmVhZERh
dGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0
YSgpKTsKKyAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0
YWNrU3RhdHMoKTsKKyAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0aHJlYWREYXRhLT5z
dGFjaygpOworCisgICAgYm9vbCBpc0dyb3dpbmdEb3dud2FyZCA9IHN0YWNrLmlzR3Jvd2luZ0Rv
d253YXJkKCk7CisKKyAgICBib29sIG5lZWRUb1ByaW50ID0gZmFsc2U7CisKKyAgICBpbnQgZHVt
bXk7CisgICAgY2hhciogY3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZkdW1teSk7
CisgICAgY2hhciogbGFzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHQubV9jdXJyZW50Q2hl
Y2tQb2ludCk7CisKKyAgICAvLyBJZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgY2hlY2twb2ludCwg
bWVhc3VyZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RhY2s6CisgICAgaWYgKCFsYXN0KQorICAg
ICAgICBsYXN0ID0gdC5tX3N0YWNrU3RhcnQ7CisKKyAgICAvLyBXZSBkaWQgbm90IHJlYWNoIGFu
b3RoZXIgY2hlY2twb2ludCB5ZXQuIEhlbmNlLCB3ZSBkbyBub3QgdG91Y2ggdGhlCisgICAgLy8g
cmVlbnRyeSBzdGF0cy4KKworICAgIC8vIFVwZGF0ZSB0aGUgc3RhY2sgaGVpZ2h0IHN0YXRzOgor
ICAgIGludCBoZWlnaHQgPSB0Lm1fc3RhY2tTdGFydCAtIGN1cnJlbnQ7CisgICAgaWYgKCFpc0dy
b3dpbmdEb3dud2FyZCkKKyAgICAgICAgaGVpZ2h0ID0gLWhlaWdodDsKKyAgICBpZiAoaGVpZ2h0
ID4gU3RhY2tTdGF0czo6c19tYXhTdGFja0hlaWdodCkgeworICAgICAgICBTdGFja1N0YXRzOjpz
X21heFN0YWNrSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBuZWVkVG9QcmludCA9IHRydWU7Cisg
ICAgfQorCisgICAgLy8gVXBkYXRlIHRoZSBjaGVja3BvaW50IGRpZmYgc3RhdHM6CisgICAgaW50
IGRpZmYgPSBsYXN0IC0gY3VycmVudDsKKyAgICBpZiAoIWlzR3Jvd2luZ0Rvd253YXJkKQorICAg
ICAgICBkaWZmID0gLWRpZmY7CisgICAgaWYgKGRpZmYgPiBTdGFja1N0YXRzOjpzX21heENoZWNr
UG9pbnREaWZmKSB7CisgICAgICAgIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQb2ludERpZmYgPSBk
aWZmOworICAgICAgICBuZWVkVG9QcmludCA9IHRydWU7CisgICAgfQorCisjaWYgIUVOQUJMRShW
RVJCT1NFX1NUQUNLX1NUQVRTKQorICAgIGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgorICAgIHsK
KyAgICAgICAgQVNTRVJUKFN0YWNrU3RhdHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJTEUqIGxv
ZyA9IFN0YWNrU3RhdHM6OnNfbG9nRmlsZTsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBQUk9C
RSAlcCBkaWZmICVkLyUuMWZrL21heCAlLjFmayB8IHJlZW50cnkgJWQvbWF4ICVkIHwgaGVpZ2h0
ICUuMWZrL21heCAlLjFmayB8IHN0YWNrICVwIHNpemUgJS4xZmtcbiIsCisgICAgICAgICAgICBj
dXJyZW50LCBkaWZmLCBkaWZmIC8gMTAyNC4wLCBTdGFja1N0YXRzOjpzX21heENoZWNrUG9pbnRE
aWZmIC8gMTAyNC4wLAorICAgICAgICAgICAgdC5tX3JlZW50cnlEZXB0aCwgU3RhY2tTdGF0czo6
c19tYXhSZWVudHJ5RGVwdGgsCisgICAgICAgICAgICBoZWlnaHQgLyAxMDI0LjAsIFN0YWNrU3Rh
dHM6OnNfbWF4U3RhY2tIZWlnaHQgLyAxMDI0LjAsCisgICAgICAgICAgICBzdGFjay5vcmlnaW4o
KSwgc3RhY2suc2l6ZSgpIC8gMTAyNC4wKTsKKyAgICAgICAgZmZsdXNoKGxvZyk7CisgICAgfQor
fQorCitTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50OjpMYXlvdXRDaGVja1BvaW50KCkKK3sK
KyAgICAvLyBXaGlsZSBhIGxheW91dCBjaGVja3BvaW50IGlzIG5vdCBuZWNlc3NhcmlseSBhIGNo
ZWNrcG9pbnQgd2hlcmUgd2UKKyAgICAvLyB3ZSB3aWxsIGRvIGEgcmVjdXJzaW9uIGNoZWNrLCBp
dCBpcyBhIGNvbnZlbmllbnQgc3BvdCBmb3IgZG9pbmcgYQorICAgIC8vIHByb2JlIHRvIG1lYXN1
cmUgdGhlIGhlaWdodCBvZiBzdGFjayB1c2FnZS4KKyAgICAvLworICAgIC8vIFdlJ2xsIGRvIHRo
aXMgcHJvYmUgYmVmb3JlIHdlIGNvbW1lbmNlIHdpdGggdGhlIGxheW91dCBjaGVja3BvaW50Lgor
ICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGUgcHJvYmUgYWxzbyBsb2NrcyB0aGUgc2hhcmVkTG9j
ay4gQnkgY2FsbGluZyB0aGUKKyAgICAvLyBwcm9iZSBmaXJzdCwgd2UgY2FuIGF2b2lkIHJlLWVu
dGVyaW5nIHRoZSBsb2NrLgorICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CisKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIoKlN0YWNrU3RhdHM6OnNfc2hhcmVkTG9jayk7CisgICAgV1RGVGhyZWFkRGF0
YSogdGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRh
KCkpOworICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3Rh
Y2tTdGF0cygpOworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0
YWNrKCk7CisKKyAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkID0gc3RhY2suaXNHcm93aW5nRG93
bndhcmQoKTsKKworICAgIC8vIFB1c2ggdGhpcyBjaGVja3BvaW50OgorICAgIG1fcHJldiA9IFN0
YWNrU3RhdHM6OnNfdG9wTGF5b3V0Q2hlY2tQb2ludDsKKyAgICBpZiAobV9wcmV2KQorICAgICAg
ICBtX2RlcHRoID0gbV9wcmV2LT5tX2RlcHRoICsgMTsKKyAgICBlbHNlIHsKKyAgICAgICAgU3Rh
Y2tTdGF0czo6c19maXJzdExheW91dENoZWNrUG9pbnQgPSB0aGlzOworICAgICAgICBtX2RlcHRo
ID0gMDsKKyAgICB9CisgICAgU3RhY2tTdGF0czo6c190b3BMYXlvdXRDaGVja1BvaW50ID0gdGhp
czsKKworICAgIC8vIAorICAgIGNoYXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNoYXIq
Pih0aGlzKTsKKyAgICBjaGFyKiBsYXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9wcmV2
KTsKKyAgICBjaGFyKiByb290ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oU3RhY2tTdGF0czo6
c19maXJzdExheW91dENoZWNrUG9pbnQpOworICAgIGJvb2wgbmVlZFRvUHJpbnQgPSBmYWxzZTsK
KworICAgIGludCBkaWZmID0gbGFzdCAtIGN1cnJlbnQ7CisgICAgaWYgKCFsYXN0KQorICAgICAg
ICBkaWZmID0gMDsKKyAgICBpbnQgdG90YWxEaWZmID0gcm9vdCAtIGN1cnJlbnQ7CisgICAgaWYg
KCFyb290KQorICAgICAgICB0b3RhbERpZmYgPSAwOworCisgICAgLy8gVXBkYXRlIHRoZSBzdGFj
ayBoZWlnaHQgc3RhdHM6CisgICAgaW50IGhlaWdodCA9IHQubV9zdGFja1N0YXJ0IC0gY3VycmVu
dDsKKyAgICBpZiAoIWlzR3Jvd2luZ0Rvd253YXJkKQorICAgICAgICBoZWlnaHQgPSAtaGVpZ2h0
OworICAgIGlmIChoZWlnaHQgPiBTdGFja1N0YXRzOjpzX21heFN0YWNrSGVpZ2h0KSB7CisgICAg
ICAgIFN0YWNrU3RhdHM6OnNfbWF4U3RhY2tIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG5lZWRU
b1ByaW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIGxheW91dCBjaGVja3Bv
aW50IGRpZmYgc3RhdHM6CisgICAgaWYgKCFpc0dyb3dpbmdEb3dud2FyZCkKKyAgICAgICAgZGlm
ZiA9IC1kaWZmOworICAgIGlmIChkaWZmID4gU3RhY2tTdGF0czo6c19tYXhMYXlvdXRDaGVja1Bv
aW50RGlmZikgeworICAgICAgICBTdGFja1N0YXRzOjpzX21heExheW91dENoZWNrUG9pbnREaWZm
ID0gZGlmZjsKKyAgICAgICAgbmVlZFRvUHJpbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFVw
ZGF0ZSB0aGUgdG90YWwgbGF5b3V0IGNoZWNrcG9pbnQgZGlmZiBzdGF0czoKKyAgICBpZiAoIWlz
R3Jvd2luZ0Rvd253YXJkKQorICAgICAgICB0b3RhbERpZmYgPSAtdG90YWxEaWZmOworICAgIGlm
ICh0b3RhbERpZmYgPiBTdGFja1N0YXRzOjpzX21heFRvdGFsTGF5b3V0Q2hlY2tQb2ludERpZmYp
IHsKKyAgICAgICAgU3RhY2tTdGF0czo6c19tYXhUb3RhbExheW91dENoZWNrUG9pbnREaWZmID0g
dG90YWxEaWZmOworICAgICAgICBuZWVkVG9QcmludCA9IHRydWU7CisgICAgfQorCisjaWYgIUVO
QUJMRShWRVJCT1NFX1NUQUNLX1NUQVRTKQorICAgIGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgor
ICAgIHsKKyAgICAgICAgQVNTRVJUKFN0YWNrU3RhdHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJ
TEUqIGxvZyA9IFN0YWNrU3RhdHM6OnNfbG9nRmlsZTsKKworICAgICAgICBmcHJpbnRmKGxvZywg
IiBMQVlPVVQgJXAgZGlmZiAlZC8lLjFmay9tYXggJS4xZmsgfCByZWVudHJ5ICVkL21heCAlZCB8
IGhlaWdodCAlLjFmay9tYXggJS4xZmsgfCBzdGFjayAlcCBzaXplICUuMWZrXG4iLAorICAgICAg
ICAgICAgY3VycmVudCwgZGlmZiwgZGlmZiAvIDEwMjQuMCwgU3RhY2tTdGF0czo6c19tYXhMYXlv
dXRDaGVja1BvaW50RGlmZiAvIDEwMjQuMCwKKyAgICAgICAgICAgIG1fZGVwdGgsIFN0YWNrU3Rh
dHM6OnNfbWF4TGF5b3V0UmVlbnRyeURlcHRoLAorICAgICAgICAgICAgdG90YWxEaWZmIC8gMTAy
NC4wLCBTdGFja1N0YXRzOjpzX21heFRvdGFsTGF5b3V0Q2hlY2tQb2ludERpZmYgLyAxMDI0LjAs
CisgICAgICAgICAgICBzdGFjay5vcmlnaW4oKSwgc3RhY2suc2l6ZSgpIC8gMTAyNC4wKTsKKyAg
ICAgICAgZmZsdXNoKGxvZyk7CisgICAgfQorfQorCitTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50Ojp+TGF5b3V0Q2hlY2tQb2ludCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpTdGFj
a1N0YXRzOjpzX3NoYXJlZExvY2spOworCisgICAgLy8gUG9wIHRvIHRoZSBwcmV2aW91cyBsYXlv
dXQgY2hlY2twb2ludDoKKyAgICBTdGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSBt
X3ByZXY7CisgICAgaWYgKCFtX2RlcHRoKQorICAgICAgICBTdGFja1N0YXRzOjpzX2ZpcnN0TGF5
b3V0Q2hlY2tQb2ludCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKFNUQUNLX1NUQVRTKQorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFN0YWNrU3RhdHNfaAorI2RlZmluZSBTdGFja1N0YXRzX2gKKworLy8gRGVmaW5lIHRoaXMg
ZmxhZyB0byBlbmFibGUgU3RhY2sgc3RhdHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0dXJlIGlzIHVz
ZWZ1bAorLy8gZm9yIGdldHRpbmcgYSBzYW1wbGUgb2YgbmF0aXZlIHN0YWNrIHVzYWdlIHNpemVz
LgorLy8KKy8vIEVuYWJsaW5nIHRoaXMgd2lsbCBjYXVzZSBzdGF0cyB0byBiZSBjb2xsZWN0ZWQg
YW5kIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZSBhdAorLy8gdmFyaW91cyAgaW5zdHJ1bWVudGVkIHBv
aW50cyBpbiB0aGUgY29kZS4gSXQgd2lsbCByZXN1bHQgaW4gbm90aWNlYWJsZQorLy8gcGVyZm9y
bWFuY2UgbG9zcy4gSGVuY2UsIHRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlIHdoZW4geW91IHdh
bnQgdG8gZG8KKy8vIHNvbWUgc3RhdHMgbG9jYXRpb24gaW4geW91ciBsb2NhbCBidWlsZC4gVGhp
cyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgYXMgYQorLy8gY29udmVuaWVuY2UgZm9yIGNvbGxlY3Rp
bmcgdGhhdCBkYXRhLiBJdCBpcyBub3QgbWVhbnQgdG8gYmUgZW5hYmxlZCBieQorLy8gZGVmYXVs
dCBvbiByZWxlYXNlIG9yIGRlYnVnIGJ1aWxkcy4KKworLy8gI2RlZmluZSBFTkFCTEVfU1RBQ0tf
U1RBVFMgMQorCisjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKSAKKyNpbmNsdWRlICJFeHBvcnRNYWNy
b3MuaCIKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworI2lmICFFTkFCTEUoU1RBQ0tfU1RBVFMp
IAorCitjbGFzcyBTdGFja1N0YXRzIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgQ2hlY2tQb2ludCBj
bGFzcyBpcyBmb3IgbWFya2luZyBjaGVjayBwb2ludHMgY29ycmVzcG9uZGluZworICAgIC8vIGVh
Y2ggbG9jYXRpb24gaW4gY29kZSB3aGVyZSBhIHN0YWNrIHJlY3Vyc2lvbiBjaGVjayBpcyBiZWlu
ZyBkb25lLgorCisgICAgY2xhc3MgQ2hlY2tQb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBD
aGVja1BvaW50KCkgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFBlclRocmVhZFN0YXRzIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBlclRocmVhZFN0YXRzKCkgeyB9CisgICAgfTsKKworICAgIGNs
YXNzIExheW91dENoZWNrUG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5b3V0Q2hlY2tQ
b2ludCgpIHsgfQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9Cisg
ICAgc3RhdGljIHZvaWQgcHJvYmUoKSB7IH0KK307CisKKyNlbHNlIC8vIEVOQUJMRShTVEFDS19T
VEFUUykKKworY2xhc3MgU3RhY2tTdGF0cyB7CitwdWJsaWM6CisgICAgLy8gVGhlIENoZWNrUG9p
bnQgY2xhc3MgaXMgZm9yIG1hcmtpbmcgY2hlY2sgcG9pbnRzIGNvcnJlc3BvbmRpbmcKKyAgICAv
LyBlYWNoIGxvY2F0aW9uIGluIGNvZGUgd2hlcmUgYSBzdGFjayByZWN1cnNpb24gY2hlY2sgaXMg
YmVpbmcgZG9uZS4KKworICAgIGNsYXNzIENoZWNrUG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgQ2hlY2tQb2ludCgpOworICAgICAgICB+Q2hlY2tQb2ludCgpOworICAgIHByaXZhdGU6Cisg
ICAgICAgIENoZWNrUG9pbnQqIG1fcHJldjsKKyAgICB9OworCisgICAgY2xhc3MgUGVyVGhyZWFk
U3RhdHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGVyVGhyZWFkU3RhdHMoKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIGludCBtX3JlZW50cnlEZXB0aDsKKyAgICAgICAgY2hhciogbV9zdGFj
a1N0YXJ0OworICAgICAgICBDaGVja1BvaW50KiBtX2N1cnJlbnRDaGVja1BvaW50OworCisgICAg
ICAgIGZyaWVuZCBjbGFzcyBDaGVja1BvaW50OworICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tT
dGF0czsKKyAgICB9OworCisgICAgY2xhc3MgTGF5b3V0Q2hlY2tQb2ludCB7CisgICAgcHVibGlj
OgorICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTGF5b3V0Q2hlY2tQb2ludCgpOworICAgICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfkxheW91dENoZWNrUG9pbnQoKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIExheW91dENoZWNrUG9pbnQqIG1fcHJldjsKKyAgICAgICAgaW50IG1fZGVwdGg7
CisgICAgfTsKKworICAgIC8vIEluaXRpYWxpemVzIGxvY2tzIGFuZCB0aGUgbG9nIGZpbGUuIFNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsK
KworICAgIC8vIFVzZWQgZm9yIHByb2JpbmcgdGhlIHN0YWNrIGF0IHBsYWNlcyB3aGVyZSB3ZSBz
dXNwZWN0IHRvIGJlIGhpZ2gKKyAgICAvLyBwb2ludHMgb2Ygc3RhY2sgdXNhZ2UgYnV0IGFyZSBO
T1QgY2hlY2sgcG9pbnRzIHdoZXJlIHN0YWNrIHJlY3Vyc2lvbgorICAgIC8vIGlzIGNoZWNrZWQu
CisgICAgLy8KKyAgICAvLyBUaGUgbW9yZSBwbGFjZXMgd2hlcmUgd2UgYWRkIHRoaXMgcHJvYmUs
IHRoZSBtb3JlIGFjY3VyYXRlIG91cgorICAgIC8vIHN0YXRzIGRhdGEgd2lsbCBiZS4gSG93ZXZl
ciwgYWRkaW5nIHRvbyBtYW55IHByb2JlcyB3aWxsIGFsc28KKyAgICAvLyByZXN1bHQgaW4gdW5u
ZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zcy4gU28sIG9ubHkgYWRkIHRoZXNlIHByb2JlcworICAg
IC8vIGp1ZGljaW91c2x5IHdoZXJlIGFwcHJvcHJpYXRlLgorICAgIHN0YXRpYyB2b2lkIHByb2Jl
KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEZJTEUqIHNfbG9nRmlsZTsKKworICAgIC8vIENo
ZWNrUG9pbnQgbWFuYWdlbWVudDoKKyAgICBzdGF0aWMgTXV0ZXgqIHNfc2hhcmVkTG9jazsKKyAg
ICBzdGF0aWMgQ2hlY2tQb2ludCogc190b3BDaGVja1BvaW50OworICAgIHN0YXRpYyBMYXlvdXRD
aGVja1BvaW50KiBzX2ZpcnN0TGF5b3V0Q2hlY2tQb2ludDsKKyAgICBzdGF0aWMgTGF5b3V0Q2hl
Y2tQb2ludCogc190b3BMYXlvdXRDaGVja1BvaW50OworCisgICAgLy8gSGlnaCB3YXRlcm1hcmsg
c3RhdHM6CisgICAgc3RhdGljIGludCBzX21heENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBp
bnQgc19tYXhTdGFja0hlaWdodDsKKyAgICBzdGF0aWMgaW50IHNfbWF4UmVlbnRyeURlcHRoOwor
CisgICAgc3RhdGljIGludCBzX21heExheW91dENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBp
bnQgc19tYXhUb3RhbExheW91dENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBpbnQgc19tYXhM
YXlvdXRSZWVudHJ5RGVwdGg7CisKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tQb2ludDsKKyAgICBm
cmllbmQgY2xhc3MgTGF5b3V0Q2hlY2tQb2ludDsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RB
Q0tfU1RBVFMpIAorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGFja1N0YXRz
OworCisjZW5kaWYgLy8gSlNTdGF0c19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJkdG9h
L2NhY2hlZC1wb3dlcnMuaCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5jbHVkZSAiUmFuZG9t
TnVtYmVyU2VlZC5oIgorI2luY2x1ZGUgIlN0YWNrU3RhdHMuaCIKICNpbmNsdWRlICJTdGRMaWJF
eHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKICNpbmNsdWRl
ICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCkBAIC0xMzgsNiArMTM5LDcgQEAgdm9p
ZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgIGluaXRp
YWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6
aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICBTdGFja1N0YXRzOjppbml0aWFsaXplKCk7CiAgICAgd3Rm
VGhyZWFkRGF0YSgpOwogICAgIHNfZHRvYVA1TXV0ZXggPSBuZXcgTXV0ZXg7CiAgICAgaW5pdGlh
bGl6ZURhdGVzKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMTMx
ODE2KQorKysgU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDEwIEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgICwg
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQogICAg
ICwgbV9jdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSkKICAg
ICAsIG1fc3RhY2tCb3VuZHMoU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygp
KQorI2lmIEVOQUJMRShTVEFDS19TVEFUUykKKyAgICAsIG1fc3RhY2tTdGF0cygpCiAjZW5kaWYK
KyNlbmRpZiAvLyBVU0UoSlNDKQogewogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJl
YWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShy
ZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgor
I2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KQEAgLTEwOCw3ICsxMDksMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fc3RhY2tCb3VuZHM7CiAgICAgfQorCisjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQorICAg
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiBzdGFja1N0YXRzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3N0YWNrU3RhdHM7CisgICAgfQogI2VuZGlmCisjZW5kaWYgLy8gVVNFKEpTQykK
IAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsK
QEAgLTExOCw3ICsxMjYsMTAgQEAgcHJpdmF0ZToKICAgICBKU0M6OklkZW50aWZpZXJUYWJsZSog
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlOwogICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBtX2N1
cnJlbnRJZGVudGlmaWVyVGFibGU7CiAgICAgU3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsKKyNp
ZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCisgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMgbV9z
dGFja1N0YXRzOwogI2VuZGlmCisjZW5kaWYgLy8gVVNFKEpTQykKIAogICAgIHN0YXRpYyBXVEZf
RVhQT1JUREFUQSBUaHJlYWRTcGVjaWZpYzxXVEZUaHJlYWREYXRhPiogc3RhdGljRGF0YTsKICAg
ICBmcmllbmQgV1RGVGhyZWFkRGF0YSYgd3RmVGhyZWFkRGF0YSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTMxODUzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTItMTAtMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgorCisgICAgICAgIEFkZGVkIFdURjo6U3RhY2tTdGF0cyBtZWNoYW5pc20uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTgwNS4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBTdGFja1N0
YXRzIHByb2JlcyBpbiBsYXlvdXQgbWV0aG9kcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRpYWxvZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEaWFsb2c6OmxheW91dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJl
YWQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySUZyYW1lOjps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbWFnZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0SXRlbTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZWRpYTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bGF5b3V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclJlcGxhY2VkOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsaWNh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxpY2E6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UnVieVJ1bjo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNjcm9s
bGJhclBhcnQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmxheW91dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6
bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRUcmFja0N1ZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OmxheW91dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bGF5
b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcldpZGdldDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWlu
ZXI6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmxheW91
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpsYXlvdXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR0ltYWdlOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXI6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpsYXlvdXQpOgorCiAyMDEyLTEw
LTE4ICBLdW5paGlrbyBTYWthbW90byAgPGtzYWthbW90b0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW1wbGVtZW50IHZhbHVlIHNhbml0aXphdGlvbiBhbGdvcml0aG0gZm9yIHR5cGU9ZGF0ZXRp
bWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMxODE2KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyNiw2ICsx
OTI2LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0KCkKIAogICAgIHVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKIAorICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hl
Y2tQb2ludDsKICAgICAvLyBPbmx5IGRvIGEgbGF5b3V0IGlmIGNoYW5nZXMgaGF2ZSBvY2N1cnJl
ZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5LiAgICAgIAogICAgIEZyYW1lVmlldyogdiA9IHZpZXco
KTsKICAgICBpZiAodiAmJiByZW5kZXJlcigpICYmICh2LT5sYXlvdXRQZW5kaW5nKCkgfHwgcmVu
ZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzMsNiArMTM3Myw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckwKIAogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91
dENoZWNrUG9pbnQ7CiAgICAgT3ZlcmZsb3dFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcih0aGlz
KTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QgbGV0dGVyIGluZm8gbm93LgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTQsNiArMzE0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUZyb21TdHlsZSgpCiAKIHZvaWQg
UmVuZGVyQm94OjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQg
bGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKICAgICBSZW5k
ZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEaWFsb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBSZW5kZXJEaWFsb2c6OmxheW91dCgp
CiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50Owog
ICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIHRydWUpOwogICAgIExheW91dFN0
YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCks
IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjgsNiArMjI4LDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVw
bGFjZW1lbgogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogeworICAgIFN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CiAKICAgICB1cGRhdGVMb2dpY2FsV2lkdGgoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDEz
MTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw3IEBAIHByaXZhdGU6CiAKIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
IGxheW91dENoZWNrUG9pbnQ7CiAgICAgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBtX3Jl
Z2lvbnNJbnZhbGlkYXRlZCAmJiBldmVySGFkTGF5b3V0KCk7CiAgICAgaWYgKG1fcmVnaW9uc0lu
dmFsaWRhdGVkKSB7CiAgICAgICAgIG1fcmVnaW9uc0ludmFsaWRhdGVkID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9u
IDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1OSw2ICs0NTksNyBAQCBGcmFtZUVkZ2VJbmZvIFJlbmRlckZy
YW1lU2V0OjplZGdlSW5mbygpCiAKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheW91dCgpCiB7Cisg
ICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIGJvb2wgZG9GdWxsUmVwYWludCA9IHNlbGZOZWVk
c0xheW91dCgpICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDcsNiArMTQ3LDcgQEAgdm9pZCBSZW5kZXJJRnJhbWU6OmxheW91dFNlYW1sZXNzbHko
KQogCiB2b2lkIFJlbmRlcklGcmFtZTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwogCiAgICAgaWYgKGlzU2VhbWxlc3MoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzMsNiArNTMzLDcg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiAKIHZvaWQgUmVuZGVySW1hZ2U6
OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVj
a1BvaW50OwogICAgIFJlbmRlclJlcGxhY2VkOjpsYXlvdXQoKTsKIAogICAgIC8vIFByb3BhZ2F0
ZSBjb250YWluZXIgc2l6ZSB0byBpbWFnZSByZXNvdXJjZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDYgKzE3Miw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2VsZWN0aW9uQ2hhbmdlZCgpCiAK
IHZvaWQgUmVuZGVyTGlzdEJveDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRD
aGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwog
CiAgICAgaWYgKG1fdkJhcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcg
QEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y29tcHV0ZVByZWZlcnJlZExvZwogCiB2b2lkIFJlbmRl
ckxpc3RJdGVtOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQg
bGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7IAogCiAgICAgdXBk
YXRlTWFya2VyTG9jYXRpb24oKTsgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDIsNiArMTMwMiw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAK
IAogdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQo
KSk7CiAgCiAgICAgaWYgKGlzSW1hZ2UoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBA
IEhUTUxNZWRpYUVsZW1lbnQqIFJlbmRlck1lZGlhOjptZWRpYUVsZW0KIAogdm9pZCBSZW5kZXJN
ZWRpYTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91
dENoZWNrUG9pbnQ7CiAgICAgTGF5b3V0U2l6ZSBvbGRTaXplID0gY29udGVudEJveFJlY3QoKS5z
aXplKCk7CiAKICAgICBSZW5kZXJJbWFnZTo6bGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTMxODE2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
ODIsNiArMjU4Miw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzY2hlZHVsZVJlbGF5b3V0KCkKIAog
dm9pZCBSZW5kZXJPYmplY3Q6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKICAg
ICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24g
MTMxODE2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCw3
IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZUQKIAogdm9pZCBSZW5k
ZXJSZWdpb246OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBs
YXlvdXRDaGVja1BvaW50OwogICAgIFJlbmRlclJlcGxhY2VkOjpsYXlvdXQoKTsKICAgICBpZiAo
bV9mbG93VGhyZWFkICYmIGlzVmFsaWQoKSkgewogICAgICAgICBMYXlvdXRSZWN0IG9sZFJlZ2lv
blJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw2ICs3OSw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWwKIAog
dm9pZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRD
aGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwog
ICAgIAogICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsaWNhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGljYS5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsaWNhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBSZW5k
ZXJSZXBsaWNhOjp+UmVuZGVyUmVwbGljYSgpCiAgICAgCiB2b2lkIFJlbmRlclJlcGxpY2E6Omxh
eW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1Bv
aW50OwogICAgIHNldEZyYW1lUmVjdChwYXJlbnRCb3goKS0+Ym9yZGVyQm94UmVjdCgpKTsKICAg
ICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9u
IDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNyw3IEBAIFJlbmRlclJ1YnlSdW4qIFJlbmRlclJ1
YnlSdW46OnN0YXRpY0NyZWEKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJSdWJ5UnVuOjpsYXlvdXRT
cGVjaWFsRXhjbHVkZWRDaGlsZChib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CisgICAgU3RhY2tT
dGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIC8vIERvbid0IGJv
dGhlciBwb3NpdGlvbmluZyB0aGUgUmVuZGVyUnVieVJ1biB5ZXQuCiAgICAgUmVuZGVyUnVieVRl
eHQqIHJ0ID0gcnVieVRleHQoKTsKICAgICBpZiAoIXJ0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAkocmV2aXNpb24gMTMxODE2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIFJlbmRlclNjcm9sbGJhclBhcnQ6On5SZW5k
ZXJTY3JvbGxiYXJQYXIKIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpsYXlvdXQoKQogewor
ICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBz
ZXRMb2NhdGlvbihMYXlvdXRQb2ludCgpKTsgLy8gV2UgZG9uJ3Qgd29ycnkgYWJvdXQgcG9zaXRp
b25pbmcgb3Vyc2VsdmVzLiBXZSdyZSBqdXN0IGRldGVybWluaW5nIG91ciBtaW5pbXVtIHdpZHRo
L2hlaWdodC4KICAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikKICAgICAgICAgbGF5b3V0SG9yaXpvbnRhbFBhcnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpjb21wdXRlUHJlZmVycmVk
TG9naWMKIAogdm9pZCBSZW5kZXJTbGlkZXI6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6
TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIC8vIEZJWE1FOiBGaW5kIGEg
d2F5IHRvIGNhc2NhZGUgYXBwZWFyYW5jZS4KICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYy
NTM1CiAgICAgUmVuZGVyQm94KiB0aHVtYkJveCA9IHNsaWRlclRodW1iRWxlbWVudE9mKG5vZGUo
KSktPnJlbmRlckJveCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6ZGlzdHJpYnV0ZUV4dHJhTG9naWNhbAogCiB2b2lkIFJlbmRlclRhYmxlOjpsYXlv
dXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2lu
dDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKICAgICBpZiAoc2ltcGxpZmllZExheW91
dCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNiArMjQxLDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OnNldENlbGxMb2dpY2FsV2lkdAogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNr
UG9pbnQ7CiAgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICBsYXlvdXRCbG9jayhjZWxsV2lk
dGhDaGFuZ2VkKCkpOwogICAgIHNldENlbGxXaWR0aENoYW5nZWQoZmFsc2UpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAxMzE4
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hp
bGQoUmVuZGVyT2JqZQogCiB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQoKQogeworICAgIFN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CiAKICAgICAvLyBUYWJsZSByb3dzIGRvIG5vdCBhZGQgdHJhbnNsYXRp
b24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAkocmV2aXNpb24gMTMxODE2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsNyBAQCBp
bnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlCiAKIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQg
bGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJU
KCFuZWVkc0NlbGxSZWNhbGMoKSk7CiAgICAgQVNTRVJUKCF0YWJsZSgpLT5uZWVkc1NlY3Rpb25S
ZWNhbGMoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTMxODE2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OgogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0
KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7
CisKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGUgaGVpZ2h0LXJlbGF0ZWQgaGFj
a3MgaW4gbGF5b3V0KCkgYW5kCiAgICAgLy8gc3R5bGVEaWRDaGFuZ2UoKS4gV2UgbmVlZCB0aGVt
IGJlY2F1c2UKICAgICAvLyAtIENlbnRlciB0aGUgaW5uZXIgZWxlbWVudHMgdmVydGljYWxseSBp
ZiB0aGUgaW5wdXQgaGVpZ2h0IGlzIHRhbGxlciB0aGFuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dFRyYWNrQ3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTMxODE2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRUcmFja0N1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgUmVuZGVyVGV4dFRyYWNrQ3VlOjpSZW5kZXJUZXh0
VHJhY2tDdWUoVAogCiB2b2lkIFJlbmRlclRleHRUcmFja0N1ZTo6bGF5b3V0KCkKIHsKKyAgICBT
dGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVy
QmxvY2s6OmxheW91dCgpOwogCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVy
KHZpZXcoKSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVm
bGVjdGlvbigpIHx8IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCShyZXZpc2lvbiAxMzE4
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgdm9pZCBSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNl
ZChQYWludEluZgogCiB2b2lkIFJlbmRlclZpZGVvOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3Rh
dHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBSZW5kZXJNZWRpYTo6
bGF5b3V0KCk7CiAgICAgdXBkYXRlUGxheWVyKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYs
NyBAQCB2b2lkIFJlbmRlclZpZXc6OmNoZWNrTGF5b3V0U3RhdGUoY29uc3QgCiAKIHZvaWQgUmVu
ZGVyVmlldzo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxh
eW91dENoZWNrUG9pbnQ7CiAgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdpbmF0ZWQoKSkKICAgICAg
ICAgc2V0UGFnZUxvZ2ljYWxIZWlnaHQoMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIx
MSw3IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRXaWRnZXQoUGFzc1JlZlB0cjwKIAogdm9pZCBS
ZW5kZXJXaWRnZXQ6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2lu
dCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDEzMTgxNikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBSZW5kZXJTVkdDb250YWluZXI6On5SZW5kZXJTVkdD
b250YWluZXIoCiAKIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogeworICAgIFN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CiAKICAgICAvLyBSZW5kZXJTVkdSb290IGRpc2FibGVzIGxheW91dFN0
YXRlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZp
c2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Zv
cmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpjb21wdXRlTG9naQogCiB2b2lkIFJlbmRlclNWR0ZvcmVp
Z25PYmplY3Q6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBs
YXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKICAgICBBU1NFUlQo
IXZpZXcoKS0+bGF5b3V0U3RhdGVFbmFibGVkKCkpOyAvLyBSZW5kZXJTVkdSb290IGRpc2FibGVz
IGxheW91dFN0YXRlIGZvciB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlLgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3Au
Y3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAg
dm9pZCBSZW5kZXJTVkdHcmFkaWVudFN0b3A6OnN0eWxlRGlkQ2hhbgogCiB2b2lkIFJlbmRlclNW
R0dyYWRpZW50U3RvcDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdIaWRkZW5Db250YWluZXIuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpSZW5kZXJTVkdI
aWRkZQogCiB2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKKyAgICBT
dGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmxheW91dENoaWxkcmVuKHRo
aXMsIHNlbGZOZWVkc0xheW91dCgpKTsgCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOyAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBib29sIFJl
bmRlclNWR0ltYWdlOjp1cGRhdGVJbWFnZVZpZXdwb3J0CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6
OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVj
a1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIExheW91dFJlcGFpbnRl
ciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZO
ZWVkc0xheW91dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCShyZXZpc2lvbiAxMzE4
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcjo6flJlbmRlclNWR1JlCiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXI6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlv
dXRDaGVja1BvaW50OwogICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBvdXIgbGF5
b3V0IGNoYW5nZWQuCiAgICAgaWYgKGV2ZXJIYWRMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQo
KSkKICAgICAgICAgUmVuZGVyU1ZHUm9vdDo6YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZhbGlkYXRp
b24odGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2aXNpb24gMTMxODE2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6On5S
ZW5kZXJTVkdSZXNvdQogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpsYXlvdXQoKQog
eworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAg
ICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgogICAg
IGlmIChldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCiAgICAgICAgIFJlbmRl
clNWR1Jvb3Q6OmFkZFJlc291cmNlRm9yQ2xpZW50SW52YWxpZGF0aW9uKHRoaXMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZp
c2lvbiAxMzE4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNiArMjE4LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZQogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgp
CiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50Owog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIG1fcmVzb3VyY2VzTmVlZGluZ1RvSW52
YWxpZGF0ZUNsaWVudHMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHU2hhcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCShyZXZpc2lvbiAxMzE4MTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDYgKzE0NCw3IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNv
bnMKIAogdm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgTGF5b3V0UmVwYWludGVyIHJl
cGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRz
TGF5b3V0KCkpOwogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHJldmlzaW9uIDEzMTgxNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw2ICszNDcsNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgdXBkYXRlRm9udEluQWxsRGVzY2VuCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5
b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9p
bnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKIAo=
</data>
<flag name="review"
          id="182899"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>