<?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>148140</bug_id>
          
          <creation_ts>2015-08-18 14:08:27 -0700</creation_ts>
          <short_desc>Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition</short_desc>
          <delta_ts>2016-05-19 14:38:11 -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>Other</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147841</blocked>
    
    <blocked>157924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118627</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 14:08:27 -0700</bug_when>
    <thetext>WTF&apos;s locking primitives are way faster and way smaller.  We should use those always.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118746</commentid>
    <comment_count>1</comment_count>
      <attachid>259335</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 17:46:01 -0700</bug_when>
    <thetext>Created attachment 259335
work so far</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118777</commentid>
    <comment_count>2</comment_count>
      <attachid>259340</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 18:57:00 -0700</bug_when>
    <thetext>Created attachment 259340
it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118790</commentid>
    <comment_count>3</comment_count>
      <attachid>259345</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 20:50:32 -0700</bug_when>
    <thetext>Created attachment 259345
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118794</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 20:53:25 -0700</bug_when>
    <thetext>Attachment 259345 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp:81:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 66 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118807</commentid>
    <comment_count>5</comment_count>
      <attachid>259349</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 21:21:21 -0700</bug_when>
    <thetext>Created attachment 259349
the patch

Fix more builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118810</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 21:23:48 -0700</bug_when>
    <thetext>Attachment 259349 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp:82:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 66 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118827</commentid>
    <comment_count>7</comment_count>
      <attachid>259353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-18 22:01:36 -0700</bug_when>
    <thetext>Created attachment 259353
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118830</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 22:04:32 -0700</bug_when>
    <thetext>Attachment 259353 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cf/LoaderRunLoopCF.cpp:83:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 66 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118929</commentid>
    <comment_count>9</comment_count>
      <attachid>259353</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-19 11:06:57 -0700</bug_when>
    <thetext>Comment on attachment 259353
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118935</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-19 11:18:49 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188642</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259335</attachid>
            <date>2015-08-18 17:46:01 -0700</date>
            <delta_ts>2015-08-18 18:57:00 -0700</delta_ts>
            <desc>work so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51733</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NvbmRpdGlvbi5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
b25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDE3IEBACiAKICNpbmNsdWRl
IDxjaHJvbm8+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtdXRleD4KICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgQ29u
ZGl0aW9uIHsKLXB1YmxpYzoKKy8vIFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNvbnN0cnVj
dG9yIG9yIGRlc3RydWN0b3Igc28gdGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0aWFsaXpl
ZC4KKy8vIFVzZSBMb2NrIGluIGluc3RhbmNlIHZhcmlhYmxlcy4KK3N0cnVjdCBDb25kaXRpb25C
YXNlIHsKICAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OkNsb2NrIENsb2NrOwogICAgIAotICAgIENv
bmRpdGlvbigpCi0gICAgewotICAgICAgICBtX2hhc1dhaXRlcnMuc3RvcmUoZmFsc2UpOwotICAg
IH0KLQogICAgIC8vIFdhaXQgb24gYSBwYXJraW5nIHF1ZXVlIHdoaWxlIHJlbGVhc2luZyB0aGUg
Z2l2ZW4gbG9jay4gSXQgd2lsbCB1bmxvY2sgdGhlIGxvY2sganVzdCBiZWZvcmUKICAgICAvLyBw
YXJraW5nLCBhbmQgcmVsb2NrIGl0IHVwb24gd2FrZXVwLiBSZXR1cm5zIHRydWUgaWYgd2Ugd29r
ZSB1cCBkdWUgdG8gc29tZSBjYWxsIHRvCiAgICAgLy8gbm90aWZ5T25lKCkgb3Igbm90aWZ5QWxs
KCkuIFJldHVybnMgZmFsc2UgaWYgd2Ugd29rZSB1cCBkdWUgdG8gYSB0aW1lb3V0LiBOb3RlIHRo
YXQgdGhpcyBmb3JtCkBAIC0xNzIsNyArMTY4LDcgQEAgcHVibGljOgogICAgICAgICBQYXJraW5n
TG90Ojp1bnBhcmtBbGwoJm1faGFzV2FpdGVycyk7CiAgICAgfQogICAgIAotcHJpdmF0ZToKK3By
b3RlY3RlZDoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KICAgICBib29sIHdhaXRG
b3JTZWNvbmRzSW1wbChMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNlY29u
ZHMpCiAgICAgewpAQCAtMjI0LDExICsyMjAsMjMgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBB
dG9taWM8Ym9vbD4gbV9oYXNXYWl0ZXJzOworfTsgICAgCisKK2NsYXNzIENvbmRpdGlvbiA6IHB1
YmxpYyBDb25kaXRpb25CYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb24p
OworcHVibGljOgorICAgIENvbmRpdGlvbigpCisgICAgeworICAgICAgICBtX2hhc1dhaXRlcnMu
c3RvcmUoZmFsc2UpOworICAgIH0KIH07CiAKK3R5cGVkZWYgQ29uZGl0aW9uQmFzZSBTdGF0aWND
b25kaXRpb247CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkNvbmRpdGlvbjsK
K3VzaW5nIFdURjo6U3RhdGljQ29uZGl0aW9uOwogCiAjZW5kaWYgLy8gV1RGX0NvbmRpdGlvbl9o
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51
bWJlci5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIk5ldmVyRGVzdHJveWVkLmgiCiAjaW5jbHVkZSAiT1NSYW5kb21Tb3VyY2UuaCIK
ICNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtNjQsNyArNjUsNyBAQCBwcml2YXRlOgogCiAgICAgQVJDNFN0cmVhbSBtX3N0cmVh
bTsKICAgICBpbnQgbV9jb3VudDsKLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBt
X211dGV4OwogfTsKIAogQVJDNFN0cmVhbTo6QVJDNFN0cmVhbSgpCkBAIC0xMzYsNyArMTM3LDcg
QEAgdWludDMyX3QgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvcjo6Z2V0VwogCiB1aW50MzJfdCBB
UkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyYW5kb21OdW1iZXIoKQogewotICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9jb3VudCAtPSA0OwogICAgIHN0aXJJZk5lZWRl
ZCgpOwpAQCAtMTQ1LDcgKzE0Niw3IEBAIHVpbnQzMl90IEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0
b3I6OnJhbmQKIAogdm9pZCBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyYW5kb21WYWx1ZXMo
dm9pZCogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogCiAgICAgdW5zaWduZWQgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyKj4oYnVmZmVyKTsKICAgICBzdGlySWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjAgKzM2LDExIEBAIHVuc2lnbmVkIEhhc2hUYWJs
ZVN0YXRzOjpudW1Db2xsaXNpb25zOwogdW5zaWduZWQgSGFzaFRhYmxlU3RhdHM6OmNvbGxpc2lv
bkdyYXBoWzQwOTZdOwogdW5zaWduZWQgSGFzaFRhYmxlU3RhdHM6Om1heENvbGxpc2lvbnM7CiAK
LXN0YXRpYyBzdGQ6Om11dGV4JiBoYXNoVGFibGVTdGF0c011dGV4KCkKLXsKLSAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIHN0ZDo6bXV0ZXgqIG11dGV4Owot
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXggPSBzdGQ6Om1h
a2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkucmVsZWFzZSgpOwotICAgIH0pOwotCi0gICAgcmV0dXJu
ICptdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIGhhc2hUYWJsZVN0YXRzTXV0ZXg7CiAKIHZv
aWQgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQodW5zaWduZWQgY291bnQp
CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soaGFzaFRhYmxlU3RhdHNN
dXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhoYXNoVGFibGVT
dGF0c011dGV4KTsKIAogICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAgICAgICAgIG1h
eENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTU5LDcgKzUwLDcgQEAgdm9pZCBIYXNoVGFibGVTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDbwogCiB2b2lkIEhhc2hUYWJsZVN0YXRzOjpkdW1wU3RhdHMo
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGhhc2hUYWJsZVN0YXRz
TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soaGFzaFRhYmxl
U3RhdHNNdXRleCk7CiAKICAgICBkYXRhTG9nRigiXG5XVEY6Okhhc2hUYWJsZSBzdGF0aXN0aWNz
XG5cbiIpOwogICAgIGRhdGFMb2dGKCIldSBhY2Nlc3Nlc1xuIiwgbnVtQWNjZXNzZXMubG9hZCgp
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDExLCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2aW5AY2hyb21pdW0ub3JnPgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WYWx1ZUNoZWNrLmg+CkBA
IC00ODYsNyArNDg3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEFsbCBhY2Nlc3Mg
dG8gbV9pdGVyYXRvcnMgc2hvdWxkIGJlIGd1YXJkZWQgd2l0aCBtX211dGV4LgogICAgICAgICBt
dXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0ZXJhdG9yczsKICAgICAgICAgLy8gVXNlIHN0ZDo6
dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHkn
ZWQuCi0gICAgICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6bXV0ZXg+IG1fbXV0ZXg7
CisgICAgICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPExvY2s+IG1fbXV0ZXg7CiAjZW5kaWYK
IAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQpAQCAtNTQyLDcgKzU0Myw3IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAjaWYgQ0hFQ0tf
SEFTSFRBQkxFX0lURVJBVE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKDApCi0gICAgICAgICwg
bV9tdXRleChzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkpCisgICAgICAgICwgbV9tdXRl
eChzdGQ6Om1ha2VfdW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICNpZiBEVU1QX0hBU0hUQUJMRV9T
VEFUU19QRVJfVEFCTEUKICAgICAgICAgLCBtX3N0YXRzKHN0ZDo6bWFrZV91bmlxdWU8U3RhdHM+
KCkpCkBAIC0xMjE4LDcgKzEyMTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLCBtX2Rl
bGV0ZWRDb3VudCgwKQogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKICAgICAgICAgLCBt
X2l0ZXJhdG9ycyhudWxscHRyKQotICAgICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1ZTxz
dGQ6Om11dGV4PigpKQorICAgICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1ZTxMb2NrPigp
KQogI2VuZGlmCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCiAgICAgICAgICwg
bV9zdGF0cyhzdGQ6Om1ha2VfdW5pcXVlPFN0YXRzPigqb3RoZXIubV9zdGF0cykpCkBAIC0xMjc2
LDcgKzEyNzcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpIYXNo
VGFibGUoSGFzaFRhYmxlJiYgb3RoZXIpCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
ICAgICAgICA6IG1faXRlcmF0b3JzKG51bGxwdHIpCi0gICAgICAgICwgbV9tdXRleChzdGQ6Om1h
a2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkpCisgICAgICAgICwgbV9tdXRleChzdGQ6Om1ha2VfdW5p
cXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7CiAgICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVy
YXRvcnMoKTsKQEAgLTEzNTYsNyArMTM1Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQogICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKm1fbXV0ZXgpOworICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jaygqbV9tdXRleCk7CiAgICAgICAgIGNvbnN0X2l0ZXJh
dG9yKiBuZXh0OwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7
IHA7IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OwpAQCAtMTM3OCw3
ICsxMzc5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmICghdGFibGUpIHsKICAgICAg
ICAgICAgIGl0LT5tX25leHQgPSAwOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKnRhYmxlLT5tX211dGV4KTsKKyAgICAgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKCp0YWJsZS0+bV9tdXRleCk7CiAgICAgICAg
ICAgICBBU1NFUlQodGFibGUtPm1faXRlcmF0b3JzICE9IGl0KTsKICAgICAgICAgICAgIGl0LT5t
X25leHQgPSB0YWJsZS0+bV9pdGVyYXRvcnM7CiAgICAgICAgICAgICB0YWJsZS0+bV9pdGVyYXRv
cnMgPSBpdDsKQEAgLTEzOTcsNyArMTM5OCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAg
ICAgQVNTRVJUKCFpdC0+bV9uZXh0KTsKICAgICAgICAgICAgIEFTU0VSVCghaXQtPm1fcHJldmlv
dXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2soKml0LT5tX3RhYmxlLT5tX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKCppdC0+bV90YWJsZS0+bV9tdXRleCk7CiAgICAgICAgICAgICBp
ZiAoaXQtPm1fbmV4dCkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+bV9uZXh0LT5tX3By
ZXZpb3VzID09IGl0KTsKICAgICAgICAgICAgICAgICBpdC0+bV9uZXh0LT5tX3ByZXZpb3VzID0g
aXQtPm1fcHJldmlvdXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw5ICsxMjUsOSBAQCB0eXBlZGVmIExv
Y2tlcjxMb2NrQmFzZT4gTG9ja0hvbGRlcjsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5n
IFdURjo6U3RhdGljTG9jazsKIHVzaW5nIFdURjo6TG9jazsKIHVzaW5nIFdURjo6TG9ja0hvbGRl
cjsKK3VzaW5nIFdURjo6U3RhdGljTG9jazsKIAogI2VuZGlmIC8vIFdURl9Mb2NrX2gKIApJbmRl
eDogU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTWFpblRocmVhZC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSA8bXV0
ZXg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KIApAQCAtNjksMTIgKzcwLDcgQEAg
c3RhdGljIGJvb2wgY2FsbGJhY2tzUGF1c2VkOyAvLyBUaGlzIGdsbwogc3RhdGljIFRocmVhZElk
ZW50aWZpZXIgbWFpblRocmVhZElkZW50aWZpZXI7CiAjZW5kaWYKIAotc3RhdGljIHN0ZDo6bXV0
ZXgmIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLSAgICAKLSAgICByZXR1cm4gbXV0ZXg7Ci19Citz
dGF0aWMgU3RhdGljTG9jayBtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4OwogCiBzdGF0aWMg
RnVuY3Rpb25RdWV1ZSYgZnVuY3Rpb25RdWV1ZSgpCiB7CkBAIC0xNTYsNyArMTUyLDcgQEAgdm9p
ZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCkKICAgICBGdW5jdGlvbldpdGhDb250
ZXh0IGludm9jYXRpb247CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgewotICAgICAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVl
dWVNdXRleCgpKTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlv
blF1ZXVlKCkuc2l6ZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaW52
b2NhdGlvbiA9IGZ1bmN0aW9uUXVldWUoKS50YWtlRmlyc3QoKTsKQEAgLTE4MCw3ICsxNzYsNyBA
QCB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTWFpblRocmVhZEZ1bmN0aW9uCiAgICAgQVNTRVJUKGZ1
bmN0aW9uKTsKICAgICBib29sIG5lZWRUb1NjaGVkdWxlID0gZmFsc2U7CiAgICAgewotICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtYWluVGhyZWFkRnVuY3Rpb25RdWV1
ZU11dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhtYWlu
VGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KTsKICAgICAgICAgbmVlZFRvU2NoZWR1bGUgPSBmdW5j
dGlvblF1ZXVlKCkuc2l6ZSgpID09IDA7CiAgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5hcHBlbmQo
RnVuY3Rpb25XaXRoQ29udGV4dChmdW5jdGlvbiwgY29udGV4dCkpOwogICAgIH0KQEAgLTE5Miw3
ICsxODgsNyBAQCB2b2lkIGNhbmNlbENhbGxPbk1haW5UaHJlYWQoTWFpblRocmVhZEZ1CiB7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uKTsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY0xvY2s+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCk7CiAKICAgICBG
dW5jdGlvbldpdGhDb250ZXh0RmluZGVyIHByZWQoRnVuY3Rpb25XaXRoQ29udGV4dChmdW5jdGlv
biwgY29udGV4dCkpOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAKIG5hbWVzcGFjZSBXVEYgewogCiAvLyBDaGVja1BvaW50IG1hbmFnZW1lbnQ6
Ci1zdGQ6Om11dGV4KiBTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4ID0gMDsKK1N0YXRpY0xvY2sg
U3RhY2tTdGF0czo6c19zaGFyZWRNdXRleDsKIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQqIFN0YWNr
U3RhdHM6OnNfdG9wQ2hlY2tQb2ludCA9IDA7CiBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50
KiBTdGFja1N0YXRzOjpzX2ZpcnN0TGF5b3V0Q2hlY2tQb2ludCA9IDA7CiBTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50KiBTdGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSAwOwpA
QCAtNTcsMTMgKzU3LDYgQEAgaW50IFN0YWNrU3RhdHM6OnNfbWF4VG90YWxMYXlvdXRDaGVja1Bv
aQogaW50IFN0YWNrU3RhdHM6OnNfbWF4TGF5b3V0UmVlbnRyeURlcHRoID0gMDsKIAogCi0vLyBJ
bml0aWFsaXplcyBsb2NrcyBhbmQgdGhlIGxvZy4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2Uu
Ci12b2lkIFN0YWNrU3RhdHM6OmluaXRpYWxpemUoKQotewotICAgIHNfc2hhcmVkTXV0ZXggPSBz
dGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkucmVsZWFzZSgpOwotICAgIGRhdGFMb2dGKCIg
PT09IExPRyBuZXcgc3RhY2sgc3RhdHMgPT09PT09PT1cbiIpOwotfQotCiBTdGFja1N0YXRzOjpQ
ZXJUaHJlYWRTdGF0czo6UGVyVGhyZWFkU3RhdHMoKQogewogICAgIGNvbnN0IFN0YWNrQm91bmRz
JiBzdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwpAQCAtNzYsNyArNjksNyBAQCBTdGFj
a1N0YXRzOjpQZXJUaHJlYWRTdGF0czo6UGVyVGhyZWFkU3RhCiAKIFN0YWNrU3RhdHM6OkNoZWNr
UG9pbnQ6OkNoZWNrUG9pbnQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKCpTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayhTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKICAgICBXVEZUaHJlYWRE
YXRhKiB0aHJlYWREYXRhID0gY29uc3RfY2FzdDxXVEZUaHJlYWREYXRhKj4oJnd0ZlRocmVhZERh
dGEoKSk7CiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMmIHQgPSB0aHJlYWREYXRhLT5z
dGFja1N0YXRzKCk7CiAgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gdGhyZWFkRGF0YS0+
c3RhY2soKTsKQEAgLTEzNCw3ICsxMjcsNyBAQCBTdGFja1N0YXRzOjpDaGVja1BvaW50OjpDaGVj
a1BvaW50KCkKIAogU3RhY2tTdGF0czo6Q2hlY2tQb2ludDo6fkNoZWNrUG9pbnQoKQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKCpTdGFja1N0YXRzOjpzX3NoYXJlZE11
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhTdGFja1N0YXRzOjpz
X3NoYXJlZE11dGV4KTsKICAgICBXVEZUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gY29uc3RfY2Fz
dDxXVEZUaHJlYWREYXRhKj4oJnd0ZlRocmVhZERhdGEoKSk7CiAgICAgU3RhY2tTdGF0czo6UGVy
VGhyZWFkU3RhdHMmIHQgPSB0aHJlYWREYXRhLT5zdGFja1N0YXRzKCk7CiAKQEAgLTE2NSw3ICsx
NTgsNyBAQCBTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQb2ludCgpCiAKIHZvaWQgU3Rh
Y2tTdGF0czo6cHJvYmUoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KCpTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayhTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKICAgICBXVEZUaHJlYWREYXRh
KiB0aHJlYWREYXRhID0gY29uc3RfY2FzdDxXVEZUaHJlYWREYXRhKj4oJnd0ZlRocmVhZERhdGEo
KSk7CiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMmIHQgPSB0aHJlYWREYXRhLT5zdGFj
a1N0YXRzKCk7CiAgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gdGhyZWFkRGF0YS0+c3Rh
Y2soKTsKQEAgLTIyNiw3ICsyMTksNyBAQCBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50OjpM
YXlvdXRDaGVjCiAgICAgLy8gcHJvYmUgZmlyc3QsIHdlIGNhbiBhdm9pZCByZS1lbnRlcmluZyB0
aGUgbG9jay4KICAgICBTdGFja1N0YXRzOjpwcm9iZSgpOwogCi0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwog
ICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEq
Pigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9
IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sg
PSB0aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMjk1LDcgKzI4OCw3IEBAIFN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQ6OkxheW91dENoZWMKIAogU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2lu
dDo6fkxheW91dENoZWNrUG9pbnQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4
PiBsb2NrKCpTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKIAogICAgIC8vIFBv
cCB0byB0aGUgcHJldmlvdXMgbGF5b3V0IGNoZWNrcG9pbnQ6CiAgICAgU3RhY2tTdGF0czo6c190
b3BMYXlvdXRDaGVja1BvaW50ID0gbV9wcmV2OwpJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tT
dGF0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuaAkocmV2aXNp
b24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJFeHBvcnRNYWNyb3MuaCIKICNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogCiAKIC8vIERlZmluZSB0aGlzIGZsYWcg
dG8gZW5hYmxlIFN0YWNrIHN0YXRzIGNvbGxlY3Rpb24uIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwK
QEAgLTY3LDcgKzY4LDYgQEAgcHVibGljOgogICAgICAgICBMYXlvdXRDaGVja1BvaW50KCkgeyB9
CiAgICAgfTsKIAotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBzdGF0aWMg
dm9pZCBwcm9iZSgpIHsgfQogfTsKIApAQCAtMTA5LDkgKzEwOSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgaW50IG1fZGVwdGg7CiAgICAgfTsKIAotICAgIC8vIEluaXRpYWxpemVzIGxvY2tzIGFuZCB0
aGUgbG9nIGZpbGUuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgotICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoKTsKLQogICAgIC8vIFVzZWQgZm9yIHByb2JpbmcgdGhlIHN0YWNrIGF0IHBs
YWNlcyB3aGVyZSB3ZSBzdXNwZWN0IHRvIGJlIGhpZ2gKICAgICAvLyBwb2ludHMgb2Ygc3RhY2sg
dXNhZ2UgYnV0IGFyZSBOT1QgY2hlY2sgcG9pbnRzIHdoZXJlIHN0YWNrIHJlY3Vyc2lvbgogICAg
IC8vIGlzIGNoZWNrZWQuCkBAIC0xMjQsNyArMTIxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIC8vIENoZWNrUG9pbnQgbWFuYWdlbWVudDoKLSAgICBzdGF0aWMgc3RkOjptdXRleCogc19z
aGFyZWRNdXRleDsKKyAgICBzdGF0aWMgU3RhdGljTG9jayBzX3NoYXJlZE11dGV4OwogICAgIHN0
YXRpYyBDaGVja1BvaW50KiBzX3RvcENoZWNrUG9pbnQ7CiAgICAgc3RhdGljIExheW91dENoZWNr
UG9pbnQqIHNfZmlyc3RMYXlvdXRDaGVja1BvaW50OwogICAgIHN0YXRpYyBMYXlvdXRDaGVja1Bv
aW50KiBzX3RvcExheW91dENoZWNrUG9pbnQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQ
dGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJk
dG9hL2NhY2hlZC1wb3dlcnMuaCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5jbHVkZSAiUmFu
ZG9tTnVtYmVyU2VlZC5oIgotI2luY2x1ZGUgIlN0YWNrU3RhdHMuaCIKICNpbmNsdWRlICJTdGRM
aWJFeHRyYXMuaCIKICNpbmNsdWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKICNpbmNs
dWRlICJUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmgiCkBAIC0xMjQsNyArMTIzLDYgQEAg
dm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgIGlu
aXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKTsKICAgICBUaHJlYWRJZGVudGlmaWVyRGF0
YTo6aW5pdGlhbGl6ZU9uY2UoKTsKLSAgICBTdGFja1N0YXRzOjppbml0aWFsaXplKCk7CiAgICAg
d3RmVGhyZWFkRGF0YSgpOwogICAgIGluaXRpYWxpemVEYXRlcygpOwogfQpJbmRleDogU291cmNl
L1dURi93dGYvbWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbQko
cmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvbWFjL0RlcHJlY2F0ZWRTeW1ib2xz
VXNlZEJ5U2FmYXJpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiTmV2ZXJEZXN0cm95ZWQuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogCiAvLyBUaGlzIGZpbGUgY29udGFpbnMg
ZGVwcmVjYXRlZCBzeW1ib2xzIHRoYXQgdGhlIGxhc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiBTYWZh
cmkgdXNlcy4KIC8vIE9uY2UgU2FmYXJpIHN0b3BzIHVzaW5nIHRoZW0sIHdlIHNob3VsZCByZW1v
dmUgdGhlbS4KQEAgLTQ1LDI1ICs0NiwxNiBAQCB2b2lkIGNhbGxPbk1haW5UaHJlYWQoY29uc3Qg
RnVuY3Rpb248dm9pCiAgICAgY2FsbE9uTWFpblRocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
KGZ1bmN0aW9uKSk7CiB9CiAKLXN0YXRpYyBzdGQ6Om11dGV4JiBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwot
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0gICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25zdHJ1Y3QoKTsKLSAg
ICB9KTsKLQotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIGF0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpY011dGV4OwogCiB2b2lkIGxvY2tBdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCgpCiB7Ci0gICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgo
KS5sb2NrKCk7CisgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgubG9jaygpOwog
fQogCiB2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKIHsKLSAg
ICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpLnVubG9jaygpOworICAgIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4LnVubG9jaygpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQCBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
CiAKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVVRGOC5oPgogCkBAIC0xMTcsMTEgKzExOCw3IEBAIFN0cmluZ1ZpZXc6OlVu
ZGVybHlpbmdTdHJpbmc6OlVuZGVybHlpbmcKIHsKIH0KIAotc3RhdGljIHN0ZDo6bXV0ZXgmIHVu
ZGVybHlpbmdTdHJpbmdzTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6
Om11dGV4PiBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayB1
bmRlcmx5aW5nU3RyaW5nc011dGV4OwogCiBzdGF0aWMgSGFzaE1hcDxjb25zdCBTdHJpbmdJbXBs
KiwgU3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZyo+JiB1bmRlcmx5aW5nU3RyaW5ncygpCiB7
CkBAIC0xMzMsNyArMTMwLDcgQEAgdm9pZCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlKGNvbnN0IFN0
cmluZwogewogICAgIFVuZGVybHlpbmdTdHJpbmcqIHVuZGVybHlpbmdTdHJpbmc7CiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh1bmRlcmx5aW5nU3RyaW5n
c011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRl
cmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAgdW5kZXJseWluZ1N0cmluZyA9IHVuZGVybHlp
bmdTdHJpbmdzKCkudGFrZSgmc3RyaW5nVG9CZURlc3Ryb3llZCk7CiAgICAgICAgIGlmICghdW5k
ZXJseWluZ1N0cmluZykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1Miw3ICsxNDksNyBAQCB2
b2lkIFN0cmluZ1ZpZXc6OmFkb3B0VW5kZXJseWluZ1N0cmluZyhVCiAgICAgaWYgKG1fdW5kZXJs
eWluZ1N0cmluZykgewogICAgICAgICBpZiAoIS0tbV91bmRlcmx5aW5nU3RyaW5nLT5yZWZDb3Vu
dCkgewogICAgICAgICAgICAgaWYgKG1fdW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCkgewotICAg
ICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVuZGVybHlpbmdT
dHJpbmdzTXV0ZXgoKSk7CisgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCk7CiAgICAgICAgICAgICAgICAgdW5kZXJs
eWluZ1N0cmluZ3MoKS5yZW1vdmUoJm1fdW5kZXJseWluZ1N0cmluZy0+c3RyaW5nKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGRlbGV0ZSBtX3VuZGVybHlpbmdTdHJpbmc7CkBAIC0xNjcs
NyArMTY0LDcgQEAgdm9pZCBTdHJpbmdWaWV3OjpzZXRVbmRlcmx5aW5nU3RyaW5nKGNvbgogICAg
IGlmICghc3RyaW5nKQogICAgICAgICB1bmRlcmx5aW5nU3RyaW5nID0gbnVsbHB0cjsKICAgICBl
bHNlIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodW5kZXJseWlu
Z1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gdW5kZXJs
eWluZ1N0cmluZ3MoKS5hZGQoc3RyaW5nLCBudWxscHRyKTsKICAgICAgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5ldyBVbmRl
cmx5aW5nU3RyaW5nKCpzdHJpbmcpOwpJbmRleDogU291cmNlL1dURi93dGYvdW5pY29kZS9pY3Uv
Q29sbGF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvdW5p
Y29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CkBA
IC01MCwxNyArNTEsNyBAQCBzdGF0aWMgVUNvbGxhdG9yKiBjYWNoZWRDb2xsYXRvcjsKIHN0YXRp
YyBjaGFyKiBjYWNoZWRDb2xsYXRvckxvY2FsZTsKIHN0YXRpYyBib29sIGNhY2hlZENvbGxhdG9y
U2hvdWxkU29ydExvd2VyY2FzZUZpcnN0OwogCi1zdGF0aWMgc3RkOjptdXRleCYgY2FjaGVkQ29s
bGF0b3JNdXRleCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotCi0g
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLSAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAg
IH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgY2FjaGVkQ29s
bGF0b3JNdXRleDsKIAogI2lmICEoT1MoREFSV0lOKSAmJiBVU0UoQ0YpKQogCkBAIC0xMTcsNyAr
MTA4LDcgQEAgQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxvY2FsZSwgYgogICAgIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCiAgICAgewotICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4KCkpOworICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4KTsK
ICAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yICYmIGxvY2FsZXNNYXRjaChjYWNoZWRDb2xsYXRv
ckxvY2FsZSwgbG9jYWxlKSAmJiBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRMb3dlcmNhc2VGaXJz
dCA9PSBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QpIHsKICAgICAgICAgICAgIG1fY29sbGF0b3Ig
PSBjYWNoZWRDb2xsYXRvcjsKICAgICAgICAgICAgIG1fbG9jYWxlID0gY2FjaGVkQ29sbGF0b3JM
b2NhbGU7CkBAIC0xNDcsNyArMTM4LDcgQEAgQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIq
IGxvY2FsZSwgYgogCiBDb2xsYXRvcjo6fkNvbGxhdG9yKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4KCkpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0ZXgpOwogICAgIGlmIChj
YWNoZWRDb2xsYXRvcikgewogICAgICAgICB1Y29sX2Nsb3NlKGNhY2hlZENvbGxhdG9yKTsKICAg
ICAgICAgZmFzdEZyZWUoY2FjaGVkQ29sbGF0b3JMb2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9MYW5ndWFnZS5tbQkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyAr
MzEsMTQgQEAKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCA8bXV0
ZXg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNp
bXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
I2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIHN0ZDo6bXV0ZXgmIHByZWZlcnJlZExhbmd1YWdlc011dGV4KCkKLXsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBzdGF0aWMgc3RkOjptdXRleCogbXV0
ZXg7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIG11dGV4ID0g
c3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICB9KTsKLQotICAg
IHJldHVybiAqbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBwcmVmZXJyZWRMYW5ndWFnZXNN
dXRleDsKIAogc3RhdGljIFZlY3RvcjxTdHJpbmc+JiBwcmVmZXJyZWRMYW5ndWFnZXMoKQogewpA
QCAtNjcsNyArNTgsNyBAQCArICh2b2lkKWxhbmd1YWdlUHJlZmVyZW5jZXNEaWRDaGFuZ2U6KE5T
CiAgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKFdlYkNvcmU6OnByZWZlcnJlZExhbmd1YWdlc011
dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhXZWJDb3Jl
OjpwcmVmZXJyZWRMYW5ndWFnZXNNdXRleCk7CiAgICAgICAgIFdlYkNvcmU6OnByZWZlcnJlZExh
bmd1YWdlcygpLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMTgsNyArMTA5LDcgQEAgVmVjdG9yPFN0
cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socHJlZmVy
cmVkTGFuZ3VhZ2VzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2socHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgpOwogICAgIFZlY3RvcjxTdHJpbmc+JiB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzID0gcHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiAKICAgICBpZiAodXNlclBy
ZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAJKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVu
TG9vcENGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTkgKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3BPYmplY3QgPSAwOwogCi1z
dGF0aWMgc3RkOjptdXRleCYgbG9hZGVyUnVuTG9vcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0K
LXN0YXRpYyBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSYgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZh
cmlhYmxlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjpjb25kaXRpb25fdmFy
aWFibGU+IGNvbmRpdGlvblZhcmlhYmxlOwotCi0gICAgcmV0dXJuIGNvbmRpdGlvblZhcmlhYmxl
OwotfQorc3RhdGljIFN0YXRpY0xvY2sgbG9hZGVyUnVuTG9vcE11dGV4Oworc3RhdGljIFN0YXRp
Y0NvbmRpdGlvbiBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGU7CiAKIHN0YXRpYyB2b2lk
IGVtcHR5UGVyZm9ybSh2b2lkKikgCiB7CkBAIC02MSw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGVt
cHR5UGVyZm9ybSh2b2lkKikgCiBzdGF0aWMgdm9pZCBydW5Mb2FkZXJUaHJlYWQodm9pZCopCiB7
CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhsb2FkZXJS
dW5Mb29wTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KGxvYWRlclJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbG9hZGVyUnVuTG9vcE9iamVjdCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKIApAQCAtNzAsNyArNTksNyBAQCBzdGF0aWMgdm9pZCBydW5M
b2FkZXJUaHJlYWQodm9pZCopCiAgICAgICAgIENGUnVuTG9vcFNvdXJjZVJlZiBib2d1c1NvdXJj
ZSA9IENGUnVuTG9vcFNvdXJjZUNyZWF0ZSgwLCAwLCAmY3R4dCk7CiAgICAgICAgIENGUnVuTG9v
cEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wT2JqZWN0LCBib2d1c1NvdXJjZSwga0NGUnVuTG9vcERl
ZmF1bHRNb2RlKTsKIAotICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUoKS5u
b3RpZnlfb25lKCk7CisgICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlPbmUoKTsKICAgICB9CiAKICAgICBTSW50MzIgcmVzdWx0OwpAQCAtODQsMTIgKzczLDEyIEBA
IENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKGxvYWRlclJ1bkxv
b3BNdXRleCgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVy
UnVuTG9vcE11dGV4KTsKIAogICAgIGlmICghbG9hZGVyUnVuTG9vcE9iamVjdCkgewogICAgICAg
ICBjcmVhdGVUaHJlYWQocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExv
YWRlciIpOwogCi0gICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZSgpLndhaXQo
bG9jaywgW10geyByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsgfSk7CisgICAgICAgIGxvYWRl
clJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFtdIHsgcmV0dXJuIGxvYWRlclJ1
bkxvb3BPYmplY3Q7IH0pOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1I
YW5kbGVDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiUHJvdGVj
dGlvblNwYWNlLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+
Ci0jaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIHZvaWQgY2Fs
bE9uTWFpblRocmVhZEFuZFdhaXQoc3RkOgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
c3RkOjptdXRleCBtdXRleDsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kaXRpb25W
YXJpYWJsZTsKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJs
ZTsKIAogICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOwogCiAgICAgY2FsbE9uTWFpblRocmVh
ZChbJl0gewogICAgICAgICBmdW5jdGlvbigpOwogCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKG11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobXV0ZXgpOwogICAgICAgICBpc0ZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgY29uZGl0aW9u
VmFyaWFibGUubm90aWZ5X29uZSgpOworICAgICAgICBjb25kaXRpb25WYXJpYWJsZS5ub3RpZnlP
bmUoKTsKICAgICB9KTsKIAotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayht
dXRleCk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4KTsKICAgICBjb25k
aXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw5ICs0MCw4IEBACiAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAotI2lu
Y2x1ZGUgPG11dGV4PgotCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIApAQCAtMTA1LDggKzEwNCw4IEBAIHByaXZhdGU6CiAKICAgICBUaHJlYWRJZGVudGlm
aWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3RvcFRo
cmVhZCB7IGZhbHNlIH07Ci0gICAgc3RkOjptdXRleCBtX211dGV4U2VuZDsKLSAgICBzdGQ6Om11
dGV4IG1fbXV0ZXhSZWNlaXZlOworICAgIExvY2sgbV9tdXRleFNlbmQ7CisgICAgTG9jayBtX211
dGV4UmVjZWl2ZTsKICAgICBEZXF1ZTxTb2NrZXREYXRhPiBtX3NlbmREYXRhOwogICAgIERlcXVl
PFNvY2tldERhdGE+IG1fcmVjZWl2ZURhdGE7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb24K
IAogICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKIAotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CiAgICAgbV9zZW5kRGF0YS5hcHBlbmQoU29j
a2V0RGF0YSB7IFdURjo6bW92ZShjb3B5KSwgbGVuZ3RoIH0pOwogCiAgICAgcmV0dXJuIGxlbmd0
aDsKQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEo
Q1VSTCogCiAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUg
LSB0b3RhbEJ5dGVzU2VudDsKICAgICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2Vu
ZERhdGEuZGF0YS5nZXQoKSArIHRvdGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKIAotICAgICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleFNlbmQpOworICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwogICAgICAg
ICAgICAgbV9zZW5kRGF0YS5wcmVwZW5kKFNvY2tldERhdGEgeyBXVEY6Om1vdmUoY29weSksIHJl
c3RMZW5ndGggfSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3Bw
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgogCi0j
aW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwxMSArMzUsNyBA
QCBuYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VUcmFja2VyIHsKIHN0YXRpYyBTUUxpdGVEYXRhYmFz
ZVRyYWNrZXJDbGllbnQqIHNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gbnVs
bHB0cjsKIHN0YXRpYyB1bnNpZ25lZCBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPSAw
OwogCi1zdGF0aWMgc3RkOjptdXRleCYgdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiB0aXBNdXRleDsKLSAgICByZXR1
cm4gdGlwTXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayB0cmFuc2FjdGlvbkluUHJvZ3Jlc3NN
dXRleDsKIAogdm9pZCBzZXRDbGllbnQoU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGll
bnQpCiB7CkBAIC01NCw3ICs0OSw3IEBAIHZvaWQgaW5jcmVtZW50VHJhbnNhY3Rpb25JblByb2dy
ZXNzQ291bnQKICAgICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0
cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAKICAgICBzX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzc0NvdW50ZXIrKzsKICAgICBpZiAoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3ND
b3VudGVyID09IDEpCkBAIC02Niw3ICs2MSw3IEBAIHZvaWQgZGVjcmVtZW50VHJhbnNhY3Rpb25J
blByb2dyZXNzQ291bnQKICAgICBpZiAoIXNfc3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xp
ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAKICAgICBBU1NF
UlQoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKTsKICAgICBzX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzc0NvdW50ZXItLTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgogI2lu
Y2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTc2NSw4ICs3NjYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUFuZFN3
YXBOb25TaGFyCiAjaWYgRU5BQkxFKENPTVBBUkVfQU5EX1NXQVApCiAgICAgcmV0dXJuIFdURjo6
d2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvciksIGV4cGVjdGVkLCBuZXdWYWx1ZSk7CiAjZWxzZQotICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChzdGQ6Om11dGV4LCBub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yTXV0ZXgsICgpKTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9ja2VyKG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleCk7CisgICAgc3Rh
dGljIFN0YXRpY0xvY2sgbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4OworICAg
IHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIobm9uU2hhcmVkQ2hhcmFjdGVyQnJl
YWtJdGVyYXRvck11dGV4KTsKICAgICBpZiAobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
ciAhPSBleHBlY3RlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3IgPSBuZXdWYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CkBAIC0xMDYsMTQgKzEwNyw3IEBAIHN0cnVjdCBUZXh0Q29kZWNGYWN0b3J5IHsK
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFRleHRFbmNvZGluZ05h
bWVIYXNoPiBUZXh0RW5jb2RpbmdOYW1lTWFwOwogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBUZXh0Q29kZWNGYWN0b3J5PiBUZXh0Q29kZWNNYXA7CiAKLXN0YXRpYyBzdGQ6Om11dGV4JiBl
bmNvZGluZ1JlZ2lzdHJ5TXV0ZXgoKQotewotICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gY29uc3Ry
dWN0IHRoaXMgbXV0ZXggaW4gYSB0aHJlYWQgc2FmZSB3YXkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9u
Ci0gICAgLy8gaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCBmb3IgYW55IHBhZ2UgYmVmb3Jl
IGl0IGlzIHVzZWQgaW4gd29ya2VyIHRocmVhZHMuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRp
Y0xvY2sgZW5jb2RpbmdSZWdpc3RyeU11dGV4OwogCiBzdGF0aWMgVGV4dEVuY29kaW5nTmFtZU1h
cCogdGV4dEVuY29kaW5nTmFtZU1hcDsKIHN0YXRpYyBUZXh0Q29kZWNNYXAqIHRleHRDb2RlY01h
cDsKQEAgLTI5NCw3ICsyODgsNyBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkK
IAogc3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
ZW5jb2RpbmdSZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7CiAKICAgICBBU1NFUlQodGV4dENvZGVjTWFw
KTsKICAgICBUZXh0Q29kZWNGYWN0b3J5IGZhY3RvcnkgPSB0ZXh0Q29kZWNNYXAtPmdldChlbmNv
ZGluZy5uYW1lKCkpOwpAQCAtMzEwLDcgKzMwNCw3IEBAIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9u
aWNhbFRleHRFbmNvZGluZ04KICAgICBpZiAoIXRleHRFbmNvZGluZ05hbWVNYXApCiAgICAgICAg
IGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKTsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgaWYgKGNvbnN0
IGNoYXIqIGF0b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSkpCiAgICAg
ICAgIHJldHVybiBhdG9taWNOYW1lOwpAQCAtMzc3LDcgKzM3MSw3IEBAIHZvaWQgZHVtcFRleHRF
bmNvZGluZ05hbWVNYXAoKQogICAgIHVuc2lnbmVkIHNpemUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFw
LT5zaXplKCk7CiAgICAgZnByaW50ZihzdGRlcnIsICJEdW1waW5nICV1IGVudHJpZXMgaW4gV2Vi
Q29yZTo6dGV4dEVuY29kaW5nTmFtZU1hcC4uLlxuIiwgc2l6ZSk7CiAKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soZW5jb2RpbmdSZWdpc3RyeU11dGV4KTsKIAog
ICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5n
TmFtZU1hcC0+YmVnaW4oKTsKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5lbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRlICJVUkwuaCIKICNp
bmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00NiwxNyArNDcsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBzdGQ6Om11dGV4JiB0aHJlYWRTZXRNdXRleCgpCi17Ci0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117
Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4
OwotfQorc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkU2V0TXV0ZXg7CiAKIHN0YXRpYyBIYXNoU2V0
PFdvcmtlclRocmVhZCo+JiB3b3JrZXJUaHJlYWRzKCkKIHsKQEAgLTY3LDcgKzU4LDcgQEAgc3Rh
dGljIEhhc2hTZXQ8V29ya2VyVGhyZWFkKj4mIHdvcmtlclRocgogCiB1bnNpZ25lZCBXb3JrZXJU
aHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayh0aHJlYWRTZXRNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayh0aHJlYWRTZXRNdXRleCk7CiAKICAgICByZXR1cm4gd29ya2VyVGhyZWFkcygp
LnNpemUoKTsKIH0KQEAgLTEwNiwxNCArOTcsMTQgQEAgV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJl
YWQoY29uc3QgVVJMJiBzYwogICAgICwgbV9ub3RpZmljYXRpb25DbGllbnQoMCkKICNlbmRpZgog
ewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRocmVhZFNldE11dGV4KCkp
OworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHRocmVhZFNldE11dGV4KTsK
IAogICAgIHdvcmtlclRocmVhZHMoKS5hZGQodGhpcyk7CiB9CiAKIFdvcmtlclRocmVhZDo6fldv
cmtlclRocmVhZCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodGhy
ZWFkU2V0TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodGhy
ZWFkU2V0TXV0ZXgpOwogCiAgICAgQVNTRVJUKHdvcmtlclRocmVhZHMoKS5jb250YWlucyh0aGlz
KSk7CiAgICAgd29ya2VyVGhyZWFkcygpLnJlbW92ZSh0aGlzKTsKQEAgLTIyMSw3ICsyMTIsNyBA
QCB2b2lkIFdvcmtlclRocmVhZDo6c3RvcCgpCiAKIHZvaWQgV29ya2VyVGhyZWFkOjpyZWxlYXNl
RmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKHRocmVhZFNldE11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNMb2NrPiBsb2NrKHRocmVhZFNldE11dGV4KTsKIAogICAgIGZvciAoYXV0byogd29y
a2VyVGhyZWFkIDogd29ya2VyVGhyZWFkcygpKSB7CiAgICAgICAgIHdvcmtlclRocmVhZC0+cnVu
TG9vcCgpLnBvc3RUYXNrKFtdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUlP
Q2hhbm5lbC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRl
eD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0xMTksOCArMTIxLDggQEAgcHVibGljOgog
ICAgIGNvbnN0IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CiAgICAgY29uc3QgVHJhdmVyc2VIYW5kbGVy
IGhhbmRsZXI7CiAKLSAgICBzdGQ6Om11dGV4IGFjdGl2ZU11dGV4OwotICAgIHN0ZDo6Y29uZGl0
aW9uX3ZhcmlhYmxlIGFjdGl2ZUNvbmRpdGlvbjsKKyAgICBMb2NrIGFjdGl2ZU11dGV4OworICAg
IENvbmRpdGlvbiBhY3RpdmVDb25kaXRpb247CiAgICAgdW5zaWduZWQgYWN0aXZlQ291bnQgeyAw
IH07CiB9OwogCkBAIC03NzQsNyArNzc2LDcgQEAgdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2
ZXJzZUZsYWdzIGZsYQogICAgICAgICAgICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uLmZsYWdzICYg
VHJhdmVyc2VGbGFnOjpTaGFyZUNvdW50KQogICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50
ID0gbV9ibG9iU3RvcmFnZS5zaGFyZUNvdW50KGJvZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQ
YXRoKSk7CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayh0
cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPExvY2s+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOwogICAgICAgICAg
ICAgKyt0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAogICAgICAgICAgICAgYXV0byBj
aGFubmVsID0gSU9DaGFubmVsOjpvcGVuKHJlY29yZFBhdGgsIElPQ2hhbm5lbDo6VHlwZTo6UmVh
ZCk7CkBAIC03OTcsOSArNzk5LDkgQEAgdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZs
YWdzIGZsYQogICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZU9wZXJhdGlvbi5oYW5kbGVyKCZy
ZWNvcmQsIGluZm8pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4
KTsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayh0cmF2ZXJzZU9w
ZXJhdGlvbi5hY3RpdmVNdXRleCk7CiAgICAgICAgICAgICAgICAgLS10cmF2ZXJzZU9wZXJhdGlv
bi5hY3RpdmVDb3VudDsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVD
b25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAgICAgICAgIHRyYXZlcnNlT3BlcmF0aW9u
LmFjdGl2ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBtYXhpbXVtUGFyYWxsZWxSZWFkQ291bnQgPSA1OwpAQCAtODA4
LDcgKzgxMCw3IEBAIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoVHJhdmVyc2VGbGFncyBmbGEKICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHJlYWRz
IHRvIGZpbmlzaC4KLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKHRy
YXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxM
b2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKICAgICAgICAgdHJhdmVy
c2VPcGVyYXRpb24uYWN0aXZlQ29uZGl0aW9uLndhaXQobG9jaywgWyZ0cmF2ZXJzZU9wZXJhdGlv
bl0gewogICAgICAgICAgICAgcmV0dXJuICF0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsK
ICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rp
b24uY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToK
ICAgICBCaW5hcnlTZW1hcGhvcmUgbV93YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlOwogCiAgICAg
Ly8gUHJvdGVjdHMgbV9kaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNXb3JrU2V0IGFuZCBtX21l
c3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseS4KLSAgICBzdGQ6Om11dGV4
IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAgICAgLy8gVGhlIHNldCBvZiBjb25uZWN0
aW9ucyBmb3Igd2hpY2ggd2UndmUgc2NoZWR1bGVkIGEgY2FsbCB0byBkaXNwYXRjaE1lc3NhZ2VB
bmRSZXNldERpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc0ZvckNvbm5lY3Rpb24uCiAgICAgSGFz
aFNldDxSZWZQdHI8Q29ubmVjdGlvbj4+IG1fZGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29y
a1NldDsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3Rh
dGU6OnByb2NlCiAgICAgQ29ubmVjdGlvbkFuZEluY29taW5nTWVzc2FnZSBjb25uZWN0aW9uQW5k
SW5jb21pbmdNZXNzYWdlIHsgY29ubmVjdGlvbiwgV1RGOjptb3ZlKG1lc3NhZ2UpIH07CiAKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX2RpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc1dvcmtTZXQuYWRkKCZjb25u
ZWN0aW9uKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBSZWZQdHI8Q29ubmVjdGlvbj4gcHJv
dGVjdGVkQ29ubmVjdGlvbigmY29ubmVjdGlvbik7CkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBD
b25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNwYQogICAgIFZlY3RvcjxDb25uZWN0aW9u
QW5kSW5jb21pbmdNZXNzYWdlPiBtZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5j
UmVwbHk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsK
ICAgICAgICAgbV9tZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkuc3dh
cChtZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAgIH0KIApA
QCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlz
cGEKICAgICB9CiAKICAgICBpZiAoIW1lc3NhZ2VzVG9QdXRCYWNrLmlzRW1wdHkoKSkgewotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRv
JiBtZXNzYWdlIDogbWVzc2FnZXNUb1B1dEJhY2spCiAgICAgICAgICAgICBtX21lc3NhZ2VzVG9E
aXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseS5hcHBlbmQoV1RGOjptb3ZlKG1lc3NhZ2Up
KTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6
OmRpc3BhCiB2b2lkIENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmRpc3BhdGNoTWVzc2Fn
ZUFuZFJlc2V0RGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzRm9yQ29ubmVjdGlvbihDb25uZWN0
aW9uJiBjb25uZWN0aW9uKQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbXV0ZXgpOwogICAgICAgICBBU1NFUlQobV9kaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNX
b3JrU2V0LmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CiAgICAgICAgIG1fZGlkU2NoZWR1bGVEaXNw
YXRjaE1lc3NhZ2VzV29ya1NldC5yZW1vdmUoJmNvbm5lY3Rpb24pOwogICAgIH0KQEAgLTM2Myw3
ICszNjMsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlCiAjZW5k
aWYKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9v
dXRnb2luZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX291dGdvaW5nTWVzc2FnZXNNdXRleCk7CiAgICAgICAgIG1fb3V0Z29pbmdNZXNzYWdlcy5h
cHBlbmQoV1RGOjptb3ZlKGVuY29kZXIpKTsKICAgICB9CiAgICAgCkBAIC0zODgsNyArMzg4LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBDb25uZWN0aQogCiAgICAgLy8gRmly
c3QsIGNoZWNrIGlmIHRoaXMgbWVzc2FnZSBpcyBhbHJlYWR5IGluIHRoZSBpbmNvbWluZyBtZXNz
YWdlcyBxdWV1ZS4KICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOwogCiAgICAgICAgIGZvciAoYXV0byBp
dCA9IG1faW5jb21pbmdNZXNzYWdlcy5iZWdpbigpLCBlbmQgPSBtX2luY29taW5nTWVzc2FnZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1l
c3NhZ2VEZWNvZGVyPiYgbWVzc2FnZSA9ICppdDsKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3RpCiAgICAgV2FpdEZvck1lc3NhZ2VTdGF0
ZSB3YWl0aW5nRm9yTWVzc2FnZShtZXNzYWdlUmVjZWl2ZXJOYW1lLCBtZXNzYWdlTmFtZSwgZGVz
dGluYXRpb25JRCwgd2FpdEZvck1lc3NhZ2VGbGFncyk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAK
ICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgY2xpZW50cyB3YWl0
aW5nIGZvciBtZXNzYWdlcy4KICAgICAgICAgQVNTRVJUKCFtX3dhaXRpbmdGb3JNZXNzYWdlKTsK
QEAgLTQyMyw4ICs0MjMsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5l
Y3RpCiAgICAgfQogCiAgICAgLy8gTm93IHdhaXQgZm9yIGl0IHRvIGJlIHNldC4KKyAgICBDb25k
aXRpb246OkNsb2NrOjp0aW1lX3BvaW50IGFic29sdXRlVGltZW91dCA9IENvbmRpdGlvbjo6Q2xv
Y2s6Om5vdygpICsgdGltZW91dDsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAK
ICAgICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UtPmRlY29kZXIpIHsKICAgICAgICAgICAg
IGF1dG8gZGVjb2RlciA9IFdURjo6bW92ZShtX3dhaXRpbmdGb3JNZXNzYWdlLT5kZWNvZGVyKTsK
QEAgLTQzMyw5ICs0MzQsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5l
Y3RpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cgd2Ugd2FpdC4KLSAgICAgICAgc3RkOjpj
dl9zdGF0dXMgc3RhdHVzID0gbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi53YWl0X2Zvcihsb2Nr
LCB0aW1lb3V0KTsKKyAgICAgICAgYm9vbCBkaWRUaW1lb3V0ID0gIW1fd2FpdEZvck1lc3NhZ2VD
b25kaXRpb24ud2FpdFVudGlsKGxvY2ssIGFic29sdXRlVGltZW91dCk7CiAgICAgICAgIC8vIFdl
IHRpbWVkIG91dCwgbG9zdCBvdXIgY29ubmVjdGlvbiwgb3IgYSBzeW5jIG1lc3NhZ2UgY2FtZSBp
biB3aXRoIEludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcywgc28gc3RvcCB3YWl0
aW5nLgotICAgICAgICBpZiAoc3RhdHVzID09IHN0ZDo6Y3Zfc3RhdHVzOjp0aW1lb3V0IHx8IG1f
d2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJydXB0ZWQpCisgICAgICAgIGlm
IChkaWRUaW1lb3V0IHx8IG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJy
dXB0ZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTY3MCw3ICs2NzEsNyBAQCB2
b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoCiAjZW5kaWYKIAogICAgIGlm
IChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxi
YWNrTXV0ZXgpOwogCiAgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2luY29taW5nU3lu
Y01lc3NhZ2VDYWxsYmFja3MudmFsdWVzKCkpCiAgICAgICAgICAgICBtX2luY29taW5nU3luY01l
c3NhZ2VDYWxsYmFja1F1ZXVlLT5kaXNwYXRjaChjYWxsYmFjayk7CkBAIC02ODYsMTggKzY4Nywx
OCBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoCiAKICAgICAvLyBD
aGVjayBpZiB3ZSdyZSB3YWl0aW5nIGZvciB0aGlzIG1lc3NhZ2UuCiAgICAgewotICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgp
OwogCiAgICAgICAgIGlmIChtX3dhaXRpbmdGb3JNZXNzYWdlICYmIG1fd2FpdGluZ0Zvck1lc3Nh
Z2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUgPT0gbWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgp
ICYmIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VOYW1lID09IG1lc3NhZ2UtPm1lc3NhZ2VO
YW1lKCkgJiYgbV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVzdGluYXRpb25JRCA9PSBtZXNzYWdlLT5k
ZXN0aW5hdGlvbklEKCkpIHsKICAgICAgICAgICAgIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPmRlY29k
ZXIgPSBXVEY6Om1vdmUobWVzc2FnZSk7CiAgICAgICAgICAgICBBU1NFUlQobV93YWl0aW5nRm9y
TWVzc2FnZS0+ZGVjb2Rlcik7Ci0gICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9u
Lm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ubm90
aWZ5T25lKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
bV93YWl0aW5nRm9yTWVzc2FnZSAmJiAobV93YWl0aW5nRm9yTWVzc2FnZS0+d2FpdEZvck1lc3Nh
Z2VGbGFncyAmIEludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcykgJiYgbWVzc2Fn
ZS0+aXNTeW5jTWVzc2FnZSgpKSB7CiAgICAgICAgICAgICBtX3dhaXRpbmdGb3JNZXNzYWdlLT5t
ZXNzYWdlV2FpdGluZ0ludGVycnVwdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fd2FpdEZvck1l
c3NhZ2VDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2Fn
ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzA2LDcgKzcw
Nyw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgKIAogdWludDY0
X3QgQ29ubmVjdGlvbjo6aW5zdGFsbEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFjayhzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGNhbGxiYWNrKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgp
OwogCiAgICAgbV9uZXh0SW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrSUQrKzsKIApAQCAtNzIw
LDEzICs3MjEsMTMgQEAgdWludDY0X3QgQ29ubmVjdGlvbjo6aW5zdGFsbEluY29taW5nU3luYwog
CiB2b2lkIENvbm5lY3Rpb246OnVuaW5zdGFsbEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFjayh1
aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgpOwogICAg
IG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrcy5yZW1vdmUoY2FsbGJhY2tJRCk7CiB9CiAK
IGJvb2wgQ29ubmVjdGlvbjo6aGFzSW5jb21pbmdTeW5jTWVzc2FnZSgpCiB7Ci0gICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKIAog
ICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1faW5jb21pbmdNZXNzYWdlcykgewogICAgICAgICBp
ZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpKQpAQCAtNzYzLDExICs3NjQsMTEgQEAgdm9pZCBD
b25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UoKQogICAgIH0KIAogICAgIHsKLSAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsK
KyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4
KTsKICAgICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UpCiAgICAgICAgICAgICBtX3dhaXRp
bmdGb3JNZXNzYWdlLT5tZXNzYWdlV2FpdGluZ0ludGVycnVwdGVkID0gdHJ1ZTsKICAgICB9Ci0g
ICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgbV93YWl0Rm9y
TWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAogICAgIGlmIChtX2RpZENsb3NlT25Db25u
ZWN0aW9uV29ya1F1ZXVlQ2FsbGJhY2spCiAgICAgICAgIG1fZGlkQ2xvc2VPbkNvbm5lY3Rpb25X
b3JrUXVldWVDYWxsYmFjayh0aGlzKTsKQEAgLTgwMyw3ICs4MDQsNyBAQCB2b2lkIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2VzKCkKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3Nh
Z2VFbmNvZGVyPiBtZXNzYWdlOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fb3V0Z29pbmdNZXNzYWdlc011dGV4KTsKKyAgICAgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fb3V0Z29pbmdNZXNzYWdlc011dGV4KTsK
ICAgICAgICAgICAgIGlmIChtX291dGdvaW5nTWVzc2FnZXMuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbWVzc2FnZSA9IG1fb3V0Z29pbmdNZXNzYWdlcy50
YWtlRmlyc3QoKTsKQEAgLTg2Miw3ICs4NjMsNyBAQCB2b2lkIENvbm5lY3Rpb246OmRpZEZhaWxU
b1NlbmRTeW5jTWVzc2FnCiB2b2lkIENvbm5lY3Rpb246OmVucXVldWVJbmNvbWluZ01lc3NhZ2Uo
c3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBpbmNvbWluZ01lc3NhZ2UpCiB7CiAgICAg
ewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nTWVz
c2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21p
bmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgbV9pbmNvbWluZ01lc3NhZ2VzLmFwcGVuZChXVEY6
Om1vdmUoaW5jb21pbmdNZXNzYWdlKSk7CiAgICAgfQogCkBAIC05MTgsNyArOTE5LDcgQEAgdm9p
ZCBDb25uZWN0aW9uOjpkaXNwYXRjaE9uZU1lc3NhZ2UoKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxN
ZXNzYWdlRGVjb2Rlcj4gbWVzc2FnZTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CiAgICAgICAg
IGlmIChtX2luY29taW5nTWVzc2FnZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKICNpbmNsdWRlICJQcm9jZXNzVHlwZS5oIgogI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRl
IDxjb25kaXRpb25fdmFyaWFibGU+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KQEAgLTI1OSwxNSArMjU5LDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZTsKIAogICAgIC8vIEluY29taW5nIG1lc3NhZ2VzLgotICAg
IHN0ZDo6bXV0ZXggbV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXg7CisgICAgTG9jayBtX2luY29taW5n
TWVzc2FnZXNNdXRleDsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+
PiBtX2luY29taW5nTWVzc2FnZXM7CiAKICAgICAvLyBPdXRnb2luZyBtZXNzYWdlcy4KLSAgICBz
dGQ6Om11dGV4IG1fb3V0Z29pbmdNZXNzYWdlc011dGV4OworICAgIExvY2sgbV9vdXRnb2luZ01l
c3NhZ2VzTXV0ZXg7CiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VFbmNvZGVyPj4g
bV9vdXRnb2luZ01lc3NhZ2VzOwogICAgIAotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1f
d2FpdEZvck1lc3NhZ2VDb25kaXRpb247Ci0gICAgc3RkOjptdXRleCBtX3dhaXRGb3JNZXNzYWdl
TXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb247CisgICAgTG9j
ayBtX3dhaXRGb3JNZXNzYWdlTXV0ZXg7CiAKICAgICBXYWl0Rm9yTWVzc2FnZVN0YXRlKiBtX3dh
aXRpbmdGb3JNZXNzYWdlOwogCkBAIC0zMDcsNyArMzA3LDcgQEAgcHJpdmF0ZToKICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFNlY29uZGFyeVRocmVhZFBlbmRpbmdTeW5jUmVwbHkqPiBT
ZWNvbmRhcnlUaHJlYWRQZW5kaW5nU3luY1JlcGx5TWFwOwogICAgIFNlY29uZGFyeVRocmVhZFBl
bmRpbmdTeW5jUmVwbHlNYXAgbV9zZWNvbmRhcnlUaHJlYWRQZW5kaW5nU3luY1JlcGx5TWFwOwog
Ci0gICAgc3RkOjptdXRleCBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4OworICAg
IExvY2sgbV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleDsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2luY29taW5nU3luY01lc3NhZ2VDYWxs
YmFja3M7CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJh
Y2tRdWV1ZTsKICAgICB1aW50NjRfdCBtX25leHRJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tJ
RCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9CbG9ja2luZ1Jlc3BvbnNlTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0Jsb2NraW5nUmVzcG9uc2VN
YXAuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Jsb2NraW5n
UmVzcG9uc2VNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTQwLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUPiB3YWl0Rm9yUmVzcG9uc2UodWludDY0X3QgcmVxdWVzdElEKQogICAgIHsKICAgICAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayht
X211dGV4KTsKIAogICAgICAgICAgICAgaWYgKG1fY2FuY2VsZWQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC01NiwyNiArNTcsMjYgQEAgcHVibGljOgogCiAgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgcmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8VD4g
cmVzcG9uc2UpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7
CiAgICAgICAgIEFTU0VSVCghbV9yZXNwb25zZXMuY29udGFpbnMocmVxdWVzdElEKSk7CiAKICAg
ICAgICAgbV9yZXNwb25zZXMuc2V0KHJlcXVlc3RJRCwgV1RGOjptb3ZlKHJlc3BvbnNlKSk7CiAK
LSAgICAgICAgLy8gRklYTUU6IFdha2luZyB1cCBhbGwgdGhyZWFkcyBpcyBxdWl0ZSBpbmVmZmlj
aWVudC4KLSAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgICAgICAvLyBGSVhN
RTogQ291bGQgZ2V0IGEgc2xpZ2h0IHNwZWVkLXVwIGZyb20gdXNpbmcgbm90aWZ5T25lKCkuCisg
ICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAgIH0KIAogICAgIHZvaWQgY2FuY2Vs
KCkKICAgICB7CiAgICAgICAgIG1fY2FuY2VsZWQgPSB0cnVlOwogCi0gICAgICAgIC8vIEZJWE1F
OiBXYWtpbmcgdXAgYWxsIHRocmVhZHMgaXMgcXVpdGUgaW5lZmZpY2llbnQuCi0gICAgICAgIG1f
Y29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IENvdWxkIGdldCBhIHNs
aWdodCBzcGVlZC11cCBmcm9tIHVzaW5nIG5vdGlmeU9uZSgpLgorICAgICAgICBtX2NvbmRpdGlv
bi5ub3RpZnlBbGwoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjptdXRleCBtX211dGV4
OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1fY29uZGl0aW9uOworICAgIExvY2sgbV9t
dXRleDsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90
LCBzdGQ6OnVuaXF1ZV9wdHI8VD4+IG1fcmVzcG9uc2VzOwogICAgIGJvb2wgbV9jYW5jZWxlZDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0
ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksNyBAQCBQbHVnaW5JbmZvQ2FjaGU6On5QbHVnaW5JbmZvQ2FjaGUoKQog
CiB2b2lkIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tdXRleCk7CiAKICAgICBnc2l6ZSBkYXRhTGVuZ3RoOwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gZGF0YShnX2tleV9maWxlX3RvX2RhdGEobV9jYWNoZUZpbGUuZ2V0KCksICZkYXRhTGVu
Z3RoLCBudWxscHRyKSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBQbHVnaW5JbmZvQ2FjaGU6
OnVwZGF0ZVBsdWdpbkluZm8oYwogICAgIGlmIChtX2NhY2hlUGF0aCAmJiAhbV9yZWFkT25seU1v
ZGUpIHsKICAgICAgICAgLy8gU2F2ZSB0aGUgY2FjaGUgZmlsZSBpbiBhbiBpZGxlIHRvIG1ha2Ug
c3VyZSBpdCBoYXBwZW5zIGluIHRoZSBtYWluIHRocmVhZCBhbmQKICAgICAgICAgLy8gaXQncyBk
b25lIG9ubHkgb25jZSB3aGVuIHRoaXMgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluIGEgdmVy
eSBzaG9ydCB0aW1lLgotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAg
ICAgICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlLmlzU2NoZWR1bGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVn
aW5JbmZvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgog
I2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg+CiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpAQCAtNTUsNyArNTYsNyBAQCBwcml2YXRl
OgogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jYWNoZVBhdGg7CiAgICAgR01haW5Mb29wU291cmNl
IG1fc2F2ZVRvRmlsZUlkbGU7CiAgICAgYm9vbCBtX3JlYWRPbmx5TW9kZTsKLSAgICBzdGQ6Om11
dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
UHJpbnRpbmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2ltcG9y
dCA8V2ViQ29yZS9JbnRSZWN0SGFzaC5oPgogI2ltcG9ydCA8Y29uZGl0aW9uX3ZhcmlhYmxlPgor
I2ltcG9ydCA8d3RmL0NvbmRpdGlvbi5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTcsOCArNTks
OCBAQCBAaW50ZXJmYWNlIFdLUHJpbnRpbmdWaWV3IDogTlNWaWV3IHsKICAgICB1aW50NjRfdCBf
ZXhwZWN0ZWRQcmludENhbGxiYWNrOwogCiAgICAgQk9PTCBfaXNQcmludGluZ0Zyb21TZWNvbmRh
cnlUaHJlYWQ7Ci0gICAgc3RkOjptdXRleCBfcHJpbnRpbmdDYWxsYmFja011dGV4OwotICAgIHN0
ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uOworICAgIExv
Y2sgX3ByaW50aW5nQ2FsbGJhY2tNdXRleDsKKyAgICBDb25kaXRpb24gX3ByaW50aW5nQ2FsbGJh
Y2tDb25kaXRpb247CiAKICAgICBOU1RpbWVyICpfYXV0b2Rpc3BsYXlSZXN1bWVUaW1lcjsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5t
bQkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1By
aW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQyLDExICsyNDIsMTEgQEAgLSAodm9p
ZClfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2VjbwogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBpZiAoIV93ZWJGcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgIF9wcmlu
dGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgX3ByaW50aW5nQ2Fs
bGJhY2tDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhfcHJpbnRpbmdDYWxsYmFja011dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhfcHJpbnRpbmdDYWxsYmFja011dGV4
KTsKIAogICAgIEFTU0VSVChbc2VsZiBfaGFzUGFnZVJlY3RzXSk7CiAgICAgQVNTRVJUKF9wcmlu
dGVkUGFnZXNEYXRhLmlzRW1wdHkoKSk7CkBAIC0yNzgsNyArMjc4LDcgQEAgLSAodm9pZClfcHJl
cGFyZVBERkRhdGFGb3JQcmludGluZ09uU2VjbwogICAgICAgICAgICAgaWYgKGRhdGEpCiAgICAg
ICAgICAgICAgICAgdmlldy0+X3ByaW50ZWRQYWdlc0RhdGEuYXBwZW5kKGRhdGEtPmJ5dGVzKCks
IGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAgICB2aWV3LT5fZXhwZWN0ZWRQcmludENhbGxiYWNr
ID0gMDsKLSAgICAgICAgICAgIHZpZXctPl9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlm
eV9vbmUoKTsKKyAgICAgICAgICAgIHZpZXctPl9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOwogICAgICAgICB9CiAgICAgfSk7CiAgICAgX2V4cGVjdGVkUHJpbnRDYWxsYmFj
ayA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIHZv
aWQgcHJlcGFyZURhdGFGb3JQcmludGluZ09uU2VjbwogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBXS1ByaW50aW5nVmlldyAqdmlldyA9IHN0YXRpY19jYXN0PFdLUHJpbnRp
bmdWaWV3ICo+KHVudHlwZWRDb250ZXh0KTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jayh2aWV3LT5fcHJpbnRpbmdDYWxsYmFja011dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayh2aWV3LT5fcHJpbnRpbmdDYWxsYmFja011dGV4KTsKIAogICAgIC8vIFdl
IG1heSBoYXZlIHJlY2VpdmVkIHBhZ2UgcmVjdHMgd2hpbGUgYSBtZXNzYWdlIHRvIGNhbGwgdGhp
cyBmdW5jdGlvbiB0cmF2ZWxlZCBmcm9tIHNlY29uZGFyeSB0aHJlYWQgdG8gbWFpbiBvbmUuCiAg
ICAgaWYgKFt2aWV3IF9oYXNQYWdlUmVjdHNdKSB7CkBAIC0zOTUsNyArMzk1LDcgQEAgLSAoQk9P
TClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBvaW50ZXIpcgogICAgICAgICAqcmFuZ2UgPSBOU01h
a2VSYW5nZSgxLCBfcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpKTsKICAgICBlbHNlIGlmICghUnVu
TG9vcDo6aXNNYWluKCkpIHsKICAgICAgICAgQVNTRVJUKCFbc2VsZiBfaXNQcmludGluZ1ByZXZp
ZXddKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKF9wcmludGlu
Z0NhbGxiYWNrTXV0ZXgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2soX3By
aW50aW5nQ2FsbGJhY2tNdXRleCk7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQocHJlcGFyZURh
dGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFkLCBzZWxmKTsKICAgICAgICAgX3ByaW50aW5n
Q2FsbGJhY2tDb25kaXRpb24ud2FpdChsb2NrKTsKICAgICAgICAgKnJhbmdlID0gTlNNYWtlUmFu
Z2UoMSwgX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259340</attachid>
            <date>2015-08-18 18:57:00 -0700</date>
            <delta_ts>2015-08-18 20:50:32 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>119074</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBhbGwgdXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdp
dGggV1RGOjpMb2NrL1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6
CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW06CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVnaXN0ZXJEZWJ1Z2dhYmxlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1dG9t
YXRpY0luc3BlY3RDYW5kaWRhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0
b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rvcjo6c2V0dXBGYWlsZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3I6OnNldHVwQ29tcGxldGVkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3Rv
cCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0
aW9uSWZOZWVkZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6eHBjQ29ubmVjdGlvblJlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3Rvcjo6eHBjQ29ubmVjdGlvbkZhaWxlZCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEluZGljYXRlTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRQcm94eUFwcGxpY2F0aW9uU2V0dXBN
ZXNzYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbjo6Y2xvc2VGcm9tTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmRlc2VyaWFsaXplTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsZUV2ZW50KToKKwog
MjAxNS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBJbnRyb2R1Y2Ugbm9uLXVzZXItb2JzZXJ2YWJsZSBQcm9taXNlIGZ1bmN0aW9ucyB0byB1
c2UgUHJvbWlzZXMgaW50ZXJuYWxseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogI2lt
cG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwpAQCAtMTA4LDcgKzEwOSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gQW55IGRlYnVnZ2FibGUgY2FuIHNlbmQgbWVzc2FnZXMgb3Zl
ciB0aGUgWFBDIGNvbm5lY3Rpb24uCiAgICAgLy8gU28gbG9jayBhY2Nlc3MgdG8gYWxsIG1hcHMg
YW5kIHN0YXRlIGFzIHRoZXkgY2FuIGNoYW5nZQogICAgIC8vIGZyb20gYW55IHRocmVhZC4KLSAg
ICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjpwYWlyPFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqLCBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlSW5mbz4+IG1fZGVidWdnYWJsZU1hcDsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25NYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9S
ZW1vdGVJbnNwZWN0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB1bnNpZ25lZCBSZW1vdGVJbnNwZWN0
b3I6Om5leHRBdmFpbGFibGVJCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWdpc3RlckRlYnVn
Z2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBuZXh0
QXZhaWxhYmxlSWRlbnRpZmllcigpOwogICAgIGRlYnVnZ2FibGUtPnNldElkZW50aWZpZXIoaWRl
bnRpZmllcik7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlZ2lz
dGVyRGVidWdnYWJsZQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dW5yZWdpc3RlckRlYnVnZ2Fi
bGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dh
YmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQpAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWIKIAogdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OnVwZGF0ZURlYnVnZ2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSog
ZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFp
ZGVudGlmaWVyKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRh
dGVEZWJ1Z2dhYmxlKFIKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRhdGVEZWJ1Z2dhYmxlQXV0
b21hdGljSW5zcGVjdENhbmRpZGF0ZShSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKiBkZWJ1Z2dh
YmxlKQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7
CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFJlbW90
ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAKICAgICAgICAgLy8gSW4gY2FzZSBkZWJ1
Z2dlcnMgZmFpbCB0byByZXNwb25kLCBvciB3ZSBjYW5ub3QgY29ubmVjdCB0byB3ZWJpbnNwZWN0
b3JkLCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIGFmdGVyIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUu
CiAgICAgICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1cs
IDAuOCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hf
UVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fYXV0b21hdGljSW5zcGVj
dGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIgPT0gaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiU2tpcHBpbmcgQXV0b21hdGljIEluc3BlY3Rpb24gQ2FuZGlkYXRlIHdpdGgg
cGFnZUlkKCV1KSBiZWNhdXNlIHdlIGZhaWxlZCB0byByZWNlaXZlIGEgcmVzcG9uc2UgaW4gdGlt
ZS4iLCBtX2F1dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyKTsKICAgICAgICAg
ICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVzZWQgPSBmYWxzZTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAgICAgZGVi
dWdnYWJsZS0+cGF1c2VXYWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbigpOwogCiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICAgICAgQVNTRVJU
KG1fYXV0b21hdGljSW5zcGVjdGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIpOwogICAgICAgICBtX2F1
dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyID0gMDsKQEAgLTI0NSw3ICsyNDUs
NyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZEF1dG9tYXRpY0luc3BlCiAKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQodW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogCiAgICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAg
LTI2NSw3ICsyNjUsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1JlbW90
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ25lZCBpZGVudGlmaWVy
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9jb25uZWN0aW9u
TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgUmVtb3Rl
SW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNl
dHVwQ29tcGxldGVkKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tdXRleCk7CiAKICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2F1dG9tYXRpY0luc3BlY3Rp
b25DYW5kaWRhdGVJZGVudGlmaWVyKQogICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVz
ZWQgPSBmYWxzZTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbW90ZUluc3BlY3Rvcjo6d2Fp
dGluZ0ZvckF1dG9tYXRpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdGFydCgpCiB7Ci0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KCkKIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3AoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbXV0ZXgpOwogCiAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7CiB9CkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9w
UwogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0aW9uSWZOZWVkZWQoKQog
ewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgaWYgKG1feHBjQ29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVtb3RlSW5z
cGVjdG9yOjpzZXR1cFhQQ0Nvbm5lY3Rpb24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWRfdCBwaWQsIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1
ZGl0RGF0YSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIGlmICht
X3BhcmVudFByb2Nlc3NJZGVudGlmaWVyIHx8IG1fcGFyZW50UHJvY2Vzc0F1ZGl0RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
ZXRQYXJlbnRQcm9jZXNzSW4KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnhwY0Nvbm5lY3Rpb25S
ZWNlaXZlZE1lc3NhZ2UoUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbiosIE5TU3RyaW5nICpt
ZXNzYWdlTmFtZSwgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX211dGV4KTsKIAogICAgIGlmIChbbWVzc2FnZU5hbWUgaXNFcXVhbFRvU3RyaW5nOldJ
UlBlcm1pc3Npb25EZW5pZWRdKSB7CiAgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpY
UENNZXNzYWdlKTsKQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6eHBj
Q29ubmVjdGlvblJlY2VpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp4cGNDb25uZWN0aW9uRmFp
bGVkKFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBBU1NFUlQoY29ubmVjdGlvbiA9PSBtX3hw
Y0Nvbm5lY3Rpb24pOwogICAgIGlmIChjb25uZWN0aW9uICE9IG1feHBjQ29ubmVjdGlvbikKQEAg
LTUyMiw3ICs1MjIsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKCkK
IAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMC4yICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBpZiAobV9w
dXNoU2NoZWR1bGVkKQogICAgICAgICAgICAgcHVzaExpc3RpbmdOb3coKTsKICAgICB9KTsKQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRJbmRpY2F0ZU1l
CiAgICAgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKF57CiAgICAg
ICAgIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqIGRlYnVnZ2FibGUgPSBudWxscHRyOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgICAgICBhdXRvIGl0ID0gbV9kZWJ1Z2dhYmxlTWFwLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgICAgICAgICBpZiAoaXQgPT0gbV9kZWJ1Z2dhYmxlTWFwLmVuZCgpKQpAQCAtNjcyLDcg
KzY3Miw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZFByb3h5QXBwbGkKICAgICAg
ICAgLy8gV2FpdCBhIGJpdCBmb3IgdGhlIGluZm9ybWF0aW9uLCBidXQgZ2l2ZSB1cCBhZnRlciBh
IHNlY29uZC4KICAgICAgICAgbV9zaG91bGRTZW5kUGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uID0g
dHJ1ZTsKICAgICAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1F
X05PVywgMSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFU
Q0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbikKICAgICAgICAgICAgICAgICBzdG9wSW50ZXJuYWwoU3Rv
cFNvdXJjZTo6WFBDTWVzc2FnZSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb25faAogCiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2lt
cG9ydCA8bXV0ZXg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KIApAQCAt
NjIsNyArNjIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gV2UgaGFuZGxlIFhQQyBldmVudHMgb24g
dGhlIHF1ZXVlLCBidXQgYSBjbGllbnQgbWF5IGNhbGwgY2xvc2UoKSBvbiBhbnkgcXVldWUuCiAg
ICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgbV9jbGllbnQgaXMgdGhyZWFkIHNhZmUgYW5kIGltbWVk
aWF0ZWx5IGNsZWFyZWQgaW4gY2xvc2UoKS4KLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAg
TG9jayBtX211dGV4OwogCiAgICAgeHBjX2Nvbm5lY3Rpb25fdCBtX2Nvbm5lY3Rpb247CiAgICAg
ZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9Mb2Nr
Lmg+CiAjaW1wb3J0IDx3dGYvUmVmLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1w
b3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KQEAgLTc5LDcgKzgwLDcgQEAgUmVtb3RlSW5z
cGVjdG9yWFBDQ29ubmVjdGlvbjo6flJlbW90ZUlucwogCiB2b2lkIFJlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb246OmNsb3NlKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsK
ICAgICBjbG9zZUZyb21NZXNzYWdlKCk7CiB9CiAKQEAgLTg5LDcgKzkwLDcgQEAgdm9pZCBSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpjbG9zZQogICAgIG1fY2xpZW50ID0gbnVsbHB0cjsK
IAogICAgIGRpc3BhdGNoX2FzeW5jKG1fcXVldWUsIF57Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX211dGV4KTsKICAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgb25lIGxhc3Qg
WFBDX0VSUk9SX0NPTk5FQ1RJT05fSU5WQUxJRCBldmVudCBvbiB0aGUgcXVldWUgYW5kIGRlcmVm
IHVzLgogICAgICAgICBjbG9zZU9uUXVldWUoKTsKICAgICB9KTsKQEAgLTExNiw3ICsxMTcsNyBA
QCBOU0RpY3Rpb25hcnkgKlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3RpCiAKICAgICB4cGNfb2Jq
ZWN0X3QgeHBjRGljdGlvbmFyeSA9IHhwY19kaWN0aW9uYXJ5X2dldF92YWx1ZShvYmplY3QsIFJl
bW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb25TZXJpYWxpemVkTWVzc2FnZUtleSk7CiAgICAgaWYg
KCF4cGNEaWN0aW9uYXJ5IHx8IHhwY19nZXRfdHlwZSh4cGNEaWN0aW9uYXJ5KSAhPSBYUENfVFlQ
RV9ESUNUSU9OQVJZKSB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsK
ICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGllbnQtPnhwY0Nvbm5lY3Rp
b25VbmhhbmRsZWRNZXNzYWdlKHRoaXMsIG9iamVjdCk7CiAgICAgICAgIHJldHVybiBuaWw7CkBA
IC0xMzEsNyArMTMyLDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpoYW5k
bAogewogICAgIGlmICh4cGNfZ2V0X3R5cGUob2JqZWN0KSA9PSBYUENfVFlQRV9FUlJPUikgewog
ICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgp
OwogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgICAgIG1fY2xpZW50LT54
cGNDb25uZWN0aW9uRmFpbGVkKHRoaXMpOwogCkBAIC0xNTQsNyArMTU1LDcgQEAgdm9pZCBSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uOjpoYW5kbAogCiAgICAgTlNTdHJpbmcgKm1lc3NhZ2Ug
PSBbZGF0YURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rp
b25NZXNzYWdlTmFtZUtleV07CiAgICAgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbyA9IFtkYXRhRGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvblVzZXJJbmZv
S2V5XTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICBpZiAobV9jbGllbnQp
CiAgICAgICAgIG1fY2xpZW50LT54cGNDb25uZWN0aW9uUmVjZWl2ZWRNZXNzYWdlKHRoaXMsIG1l
c3NhZ2UsIHVzZXJJbmZvKTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODg2MjEpCisrKyBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE1LTA4LTE4
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBhbGwg
dXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdpdGggV1RGOjpMb2Nr
L1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBbHNvIGJlZWYgdXAgQ29uZGl0aW9uIGJ5IGdpdmluZyBpdCBhIFN0YXRpY0NvbmRp
dGlvbiB2YXJpYW50LgorCisgICAgICAgICogd3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RG
OjpDb25kaXRpb25CYXNlOjpub3RpZnlBbGwpOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNl
Ojp3YWl0Rm9yU2Vjb25kc0ltcGwpOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjphYnNv
bHV0ZUZyb21SZWxhdGl2ZSk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbjo6Q29uZGl0aW9uKToK
KyAgICAgICAgKFdURjo6Q29uZGl0aW9uOjpub3RpZnlBbGwpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb246OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbjo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHA6CisgICAgICAgICogd3RmL0hh
c2hUYWJsZS5jcHA6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNp
b25BdENvdW50KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OmR1bXBTdGF0cyk6Cisg
ICAgICAgIChXVEY6Omhhc2hUYWJsZVN0YXRzTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChX
VEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAg
ICAqIHd0Zi9Mb2NrLmg6CisgICAgICAgICogd3RmL01haW5UaHJlYWQuY3BwOgorICAgICAgICAo
V1RGOjpmdW5jdGlvblF1ZXVlKToKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9t
TWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V1RGOjpjYW5jZWxDYWxsT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdURjo6bWFpblRocmVhZEZ1
bmN0aW9uUXVldWVNdXRleCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1N0YWNrU3RhdHMuY3Bw
OgorICAgICAgICAoV1RGOjpTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0czo6UGVyVGhyZWFkU3Rh
dHMpOgorICAgICAgICAoV1RGOjpTdGFja1N0YXRzOjpDaGVja1BvaW50OjpDaGVja1BvaW50KToK
KyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6Q2hlY2tQb2ludDo6fkNoZWNrUG9pbnQpOgorICAg
ICAgICAoV1RGOjpTdGFja1N0YXRzOjpwcm9iZSk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6
OkxheW91dENoZWNrUG9pbnQ6OkxheW91dENoZWNrUG9pbnQpOgorICAgICAgICAoV1RGOjpTdGFj
a1N0YXRzOjpMYXlvdXRDaGVja1BvaW50Ojp+TGF5b3V0Q2hlY2tQb2ludCk6CisgICAgICAgIChX
VEY6OlN0YWNrU3RhdHM6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9TdGFj
a1N0YXRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQ6Okxh
eW91dENoZWNrUG9pbnQpOgorICAgICAgICAoV1RGOjpTdGFja1N0YXRzOjpwcm9iZSk6CisgICAg
ICAgIChXVEY6OlN0YWNrU3RhdHM6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRp
bmcpOgorICAgICAgICAqIHd0Zi9tYWMvRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW06
CisgICAgICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpsb2NrQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpOgorICAgICAgICAoV1RGOjp1bmxvY2tBdG9t
aWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCk6CisgICAgICAgIChXVEY6OmF0b21pY2FsbHlJ
bml0aWFsaXplZFN0YXRpY011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdWaWV3LmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZzo6
VW5kZXJseWluZ1N0cmluZyk6CisgICAgICAgIChXVEY6OnVuZGVybHlpbmdTdHJpbmdzKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z1ZpZXc6OmFkb3B0VW5kZXJseWluZ1N0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OnNldFVuZGVybHlpbmdTdHJpbmcpOgorICAgICAgICAoV1RGOjp1bmRlcmx5aW5nU3RyaW5nc011
dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3Bw
OgorICAgICAgICAoV1RGOjpDb2xsYXRvcjo6Q29sbGF0b3IpOgorICAgICAgICAoV1RGOjpDb2xs
YXRvcjo6fkNvbGxhdG9yKToKKyAgICAgICAgKFdURjo6Y2FjaGVkQ29sbGF0b3JNdXRleCk6IERl
bGV0ZWQuCisKIDIwMTUtMDgtMTggIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlICJwbGF0Zm9ybSB0ZXh0IHRyYWNrIG1lbnUiCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
b25kaXRpb24uaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIxICsyOCwxNyBAQAogCiAjaW5jbHVkZSA8Y2hyb25v
PgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1BhcmtpbmdMb3QuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLWNsYXNzIENvbmRpdGlvbiB7
Ci1wdWJsaWM6CisvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBk
ZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCisvLyBV
c2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCitzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7CiAg
ICAgdHlwZWRlZiBQYXJraW5nTG90OjpDbG9jayBDbG9jazsKICAgICAKLSAgICBDb25kaXRpb24o
KQotICAgIHsKLSAgICAgICAgbV9oYXNXYWl0ZXJzLnN0b3JlKGZhbHNlKTsKLSAgICB9Ci0KICAg
ICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdpdmVuIGxv
Y2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8gcGFya2luZywg
YW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdva2UgdXAgZHVl
IHRvIHNvbWUgY2FsbCB0bwogICAgIC8vIG5vdGlmeU9uZSgpIG9yIG5vdGlmeUFsbCgpLiBSZXR1
cm5zIGZhbHNlIGlmIHdlIHdva2UgdXAgZHVlIHRvIGEgdGltZW91dC4gTm90ZSB0aGF0IHRoaXMg
Zm9ybQpAQCAtMTcyLDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFya2luZ0xvdDo6dW5w
YXJrQWxsKCZtX2hhc1dhaXRlcnMpOwogICAgIH0KICAgICAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CiAgICAgYm9vbCB3YWl0Rm9yU2Vjb25k
c0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzKQogICAg
IHsKQEAgLTIyNCwxMSArMjIwLDIzIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQXRvbWljPGJv
b2w+IG1faGFzV2FpdGVyczsKK307ICAgIAorCitjbGFzcyBDb25kaXRpb24gOiBwdWJsaWMgQ29u
ZGl0aW9uQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uZGl0aW9uKTsKK3B1Ymxp
YzoKKyAgICBDb25kaXRpb24oKQorICAgIHsKKyAgICAgICAgbV9oYXNXYWl0ZXJzLnN0b3JlKGZh
bHNlKTsKKyAgICB9CiB9OwogCit0eXBlZGVmIENvbmRpdGlvbkJhc2UgU3RhdGljQ29uZGl0aW9u
OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpDb25kaXRpb247Cit1c2luZyBX
VEY6OlN0YXRpY0NvbmRpdGlvbjsKIAogI2VuZGlmIC8vIFdURl9Db25kaXRpb25faAogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3Bw
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJOZXZlckRlc3Ryb3llZC5oIgogI2luY2x1ZGUgIk9TUmFuZG9tU291cmNlLmgiCiAjaW5jbHVk
ZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAg
LTY0LDcgKzY1LDcgQEAgcHJpdmF0ZToKIAogICAgIEFSQzRTdHJlYW0gbV9zdHJlYW07CiAgICAg
aW50IG1fY291bnQ7Ci0gICAgc3RkOjptdXRleCBtX211dGV4OworICAgIExvY2sgbV9tdXRleDsK
IH07CiAKIEFSQzRTdHJlYW06OkFSQzRTdHJlYW0oKQpAQCAtMTM2LDcgKzEzNyw3IEBAIHVpbnQz
Ml90IEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I6OmdldFcKIAogdWludDMyX3QgQVJDNFJhbmRv
bU51bWJlckdlbmVyYXRvcjo6cmFuZG9tTnVtYmVyKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8
c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX211dGV4KTsKIAogICAgIG1fY291bnQgLT0gNDsKICAgICBzdGlySWZOZWVkZWQoKTsKQEAg
LTE0NSw3ICsxNDYsNyBAQCB1aW50MzJfdCBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyYW5k
CiAKIHZvaWQgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZG9tVmFsdWVzKHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsK
IAogICAgIHVuc2lnbmVkIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGJ1ZmZlcik7CiAgICAgc3RpcklmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5j
cHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDIwICszNiwxMSBAQCB1bnNpZ25lZCBIYXNoVGFibGVTdGF0czo6
bnVtQ29sbGlzaW9uczsKIHVuc2lnbmVkIEhhc2hUYWJsZVN0YXRzOjpjb2xsaXNpb25HcmFwaFs0
MDk2XTsKIHVuc2lnbmVkIEhhc2hUYWJsZVN0YXRzOjptYXhDb2xsaXNpb25zOwogCi1zdGF0aWMg
c3RkOjptdXRleCYgaGFzaFRhYmxlU3RhdHNNdXRleCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBzdGQ6Om11dGV4KiBtdXRleDsKLSAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4ID0gc3RkOjptYWtlX3VuaXF1
ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICB9KTsKLQotICAgIHJldHVybiAqbXV0ZXg7
Ci19CitzdGF0aWMgU3RhdGljTG9jayBoYXNoVGFibGVTdGF0c011dGV4OwogCiB2b2lkIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHVuc2lnbmVkIGNvdW50KQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgoKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soaGFzaFRhYmxlU3RhdHNNdXRl
eCk7CiAKICAgICBpZiAoY291bnQgPiBtYXhDb2xsaXNpb25zKQogICAgICAgICBtYXhDb2xsaXNp
b25zID0gY291bnQ7CkBAIC01OSw3ICs1MCw3IEBAIHZvaWQgSGFzaFRhYmxlU3RhdHM6OnJlY29y
ZENvbGxpc2lvbkF0Q28KIAogdm9pZCBIYXNoVGFibGVTdGF0czo6ZHVtcFN0YXRzKCkKIHsKLSAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhoYXNoVGFibGVTdGF0c011dGV4KCkp
OworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0
ZXgpOwogCiAgICAgZGF0YUxvZ0YoIlxuV1RGOjpIYXNoVGFibGUgc3RhdGlzdGljc1xuXG4iKTsK
ICAgICBkYXRhTG9nRigiJXUgYWNjZXNzZXNcbiIsIG51bUFjY2Vzc2VzLmxvYWQoKSk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAx
MSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggRGF2aWQgTGV2aW4gPGxldmluQGNocm9taXVtLm9yZz4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmFsdWVDaGVjay5oPgpAQCAtNDg2LDcg
KzQ4Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRl
cmF0b3JzIHNob3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KICAgICAgICAgbXV0YWJsZSBj
b25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnM7CiAgICAgICAgIC8vIFVzZSBzdGQ6OnVuaXF1ZV9w
dHIgc28gSGFzaFRhYmxlIGNhbiBzdGlsbCBiZSBtZW1tb3ZlJ2Qgb3IgbWVtY3B5J2VkLgotICAg
ICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6Om11dGV4PiBtX211dGV4OworICAgICAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4OwogI2VuZGlmCiAKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKQEAgLTU0Miw3ICs1NDMsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQogI2lmIENIRUNLX0hBU0hUQUJM
RV9JVEVSQVRPUlMKICAgICAgICAgLCBtX2l0ZXJhdG9ycygwKQotICAgICAgICAsIG1fbXV0ZXgo
c3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpKQorICAgICAgICAsIG1fbXV0ZXgoc3RkOjpt
YWtlX3VuaXF1ZTxMb2NrPigpKQogI2VuZGlmCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVS
X1RBQkxFCiAgICAgICAgICwgbV9zdGF0cyhzdGQ6Om1ha2VfdW5pcXVlPFN0YXRzPigpKQpAQCAt
MTIxOCw3ICsxMjE5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV9kZWxldGVkQ291
bnQoMCkKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAgICAgICwgbV9pdGVyYXRv
cnMobnVsbHB0cikKLSAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRl
eD4oKSkKKyAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRp
ZgogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQogICAgICAgICAsIG1fc3RhdHMo
c3RkOjptYWtlX3VuaXF1ZTxTdGF0cz4oKm90aGVyLm1fc3RhdHMpKQpAQCAtMTI3Niw3ICsxMjc3
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKEhh
c2hUYWJsZSYmIG90aGVyKQogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKICAgICAgICAg
OiBtX2l0ZXJhdG9ycyhudWxscHRyKQotICAgICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1
ZTxzdGQ6Om11dGV4PigpKQorICAgICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1ZTxMb2Nr
PigpKQogI2VuZGlmCiAgICAgewogICAgICAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CkBAIC0xMzU2LDcgKzEzNTcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKCptX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2soKm1fbXV0ZXgpOwogICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4
dDsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0g
bmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1fbmV4dDsKQEAgLTEzNzgsNyArMTM3OSw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIXRhYmxlKSB7CiAgICAgICAgICAgICBp
dC0+bV9uZXh0ID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKCp0YWJsZS0+bV9tdXRleCk7CisgICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgQVNT
RVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CiAgICAgICAgICAgICBpdC0+bV9uZXh0ID0g
dGFibGUtPm1faXRlcmF0b3JzOwogICAgICAgICAgICAgdGFibGUtPm1faXRlcmF0b3JzID0gaXQ7
CkBAIC0xMzk3LDcgKzEzOTgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIEFTU0VS
VCghaXQtPm1fbmV4dCk7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5tX3ByZXZpb3VzKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKCppdC0+bV90YWJsZS0+bV9tdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jaygqaXQtPm1fdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKGl0LT5t
X25leHQpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXQtPm1fbmV4dC0+bV9wcmV2aW91cyA9
PSBpdCk7CiAgICAgICAgICAgICAgICAgaXQtPm1fbmV4dC0+bV9wcmV2aW91cyA9IGl0LT5tX3By
ZXZpb3VzOwpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1LDkgQEAgdHlwZWRlZiBMb2NrZXI8TG9j
a0Jhc2U+IExvY2tIb2xkZXI7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlN0
YXRpY0xvY2s7CiB1c2luZyBXVEY6OkxvY2s7CiB1c2luZyBXVEY6OkxvY2tIb2xkZXI7Cit1c2lu
ZyBXVEY6OlN0YXRpY0xvY2s7CiAKICNlbmRpZiAvLyBXVEZfTG9ja19oCiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL01haW5UaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01h
aW5UaHJlYWQuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYWluVGhy
ZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlN0ZExp
YkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKQEAgLTY5LDEyICs3MCw3IEBAIHN0YXRpYyBi
b29sIGNhbGxiYWNrc1BhdXNlZDsgLy8gVGhpcyBnbG8KIHN0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IG1haW5UaHJlYWRJZGVudGlmaWVyOwogI2VuZGlmCiAKLXN0YXRpYyBzdGQ6Om11dGV4JiBtYWlu
VGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
c3RkOjptdXRleD4gbXV0ZXg7Ci0gICAgCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0
YXRpY0xvY2sgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleDsKIAogc3RhdGljIEZ1bmN0aW9u
UXVldWUmIGZ1bmN0aW9uUXVldWUoKQogewpAQCAtMTU2LDcgKzE1Miw3IEBAIHZvaWQgZGlzcGF0
Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpCiAgICAgRnVuY3Rpb25XaXRoQ29udGV4dCBpbnZv
Y2F0aW9uOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgo
KSk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KTsKICAgICAgICAgICAgIGlmICghZnVuY3Rpb25RdWV1ZSgp
LnNpemUoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGludm9jYXRpb24g
PSBmdW5jdGlvblF1ZXVlKCkudGFrZUZpcnN0KCk7CkBAIC0xODAsNyArMTc2LDcgQEAgdm9pZCBj
YWxsT25NYWluVGhyZWFkKE1haW5UaHJlYWRGdW5jdGlvbgogICAgIEFTU0VSVChmdW5jdGlvbik7
CiAgICAgYm9vbCBuZWVkVG9TY2hlZHVsZSA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgp
KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sobWFpblRocmVhZEZ1
bmN0aW9uUXVldWVNdXRleCk7CiAgICAgICAgIG5lZWRUb1NjaGVkdWxlID0gZnVuY3Rpb25RdWV1
ZSgpLnNpemUoKSA9PSAwOwogICAgICAgICBmdW5jdGlvblF1ZXVlKCkuYXBwZW5kKEZ1bmN0aW9u
V2l0aENvbnRleHQoZnVuY3Rpb24sIGNvbnRleHQpKTsKICAgICB9CkBAIC0xOTIsNyArMTg4LDcg
QEAgdm9pZCBjYW5jZWxDYWxsT25NYWluVGhyZWFkKE1haW5UaHJlYWRGdQogewogICAgIEFTU0VS
VChmdW5jdGlvbik7CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtYWlu
VGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgpOwogCiAgICAgRnVuY3Rpb25X
aXRoQ29udGV4dEZpbmRlciBwcmVkKEZ1bmN0aW9uV2l0aENvbnRleHQoZnVuY3Rpb24sIGNvbnRl
eHQpKTsKIApJbmRleDogU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNv
dXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50Ogotc3RkOjpt
dXRleCogU3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCA9IDA7CitTdGF0aWNMb2NrIFN0YWNrU3Rh
dHM6OnNfc2hhcmVkTXV0ZXg7CiBTdGFja1N0YXRzOjpDaGVja1BvaW50KiBTdGFja1N0YXRzOjpz
X3RvcENoZWNrUG9pbnQgPSAwOwogU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCogU3RhY2tT
dGF0czo6c19maXJzdExheW91dENoZWNrUG9pbnQgPSAwOwogU3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludCogU3RhY2tTdGF0czo6c190b3BMYXlvdXRDaGVja1BvaW50ID0gMDsKQEAgLTU3LDEz
ICs1Nyw2IEBAIGludCBTdGFja1N0YXRzOjpzX21heFRvdGFsTGF5b3V0Q2hlY2tQb2kKIGludCBT
dGFja1N0YXRzOjpzX21heExheW91dFJlZW50cnlEZXB0aCA9IDA7CiAKIAotLy8gSW5pdGlhbGl6
ZXMgbG9ja3MgYW5kIHRoZSBsb2cuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgotdm9pZCBT
dGFja1N0YXRzOjppbml0aWFsaXplKCkKLXsKLSAgICBzX3NoYXJlZE11dGV4ID0gc3RkOjptYWtl
X3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICBkYXRhTG9nRigiID09PSBMT0cg
bmV3IHN0YWNrIHN0YXRzID09PT09PT09XG4iKTsKLX0KLQogU3RhY2tTdGF0czo6UGVyVGhyZWFk
U3RhdHM6OlBlclRocmVhZFN0YXRzKCkKIHsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sg
PSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKQEAgLTc2LDcgKzY5LDcgQEAgU3RhY2tTdGF0czo6
UGVyVGhyZWFkU3RhdHM6OlBlclRocmVhZFN0YQogCiBTdGFja1N0YXRzOjpDaGVja1BvaW50OjpD
aGVja1BvaW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3Rh
Y2tTdGF0czo6c19zaGFyZWRNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+
IGxvY2soU3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwog
ICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0
cygpOwogICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7
CkBAIC0xMzQsNyArMTI3LDcgQEAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludDo6Q2hlY2tQb2ludCgp
CiAKIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6On5DaGVja1BvaW50KCkKIHsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soU3RhY2tTdGF0czo6c19zaGFyZWRN
dXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8V1RGVGhy
ZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwogICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0
YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOwogCkBAIC0xNjUsNyArMTU4LDcgQEAg
U3RhY2tTdGF0czo6Q2hlY2tQb2ludDo6fkNoZWNrUG9pbnQoKQogCiB2b2lkIFN0YWNrU3RhdHM6
OnByb2JlKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3RhY2tT
dGF0czo6c19zaGFyZWRNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2soU3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFk
RGF0YSA9IGNvbnN0X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwogICAg
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygp
OwogICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CkBA
IC0yMjYsNyArMjE5LDcgQEAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hl
YwogICAgIC8vIHByb2JlIGZpcnN0LCB3ZSBjYW4gYXZvaWQgcmUtZW50ZXJpbmcgdGhlIGxvY2su
CiAgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKCpTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTG9jaz4gbG9jayhTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4KTsKICAgICBXVEZU
aHJlYWREYXRhKiB0aHJlYWREYXRhID0gY29uc3RfY2FzdDxXVEZUaHJlYWREYXRhKj4oJnd0ZlRo
cmVhZERhdGEoKSk7CiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMmIHQgPSB0aHJlYWRE
YXRhLT5zdGFja1N0YXRzKCk7CiAgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gdGhyZWFk
RGF0YS0+c3RhY2soKTsKQEAgLTI5NSw3ICsyODgsNyBAQCBTdGFja1N0YXRzOjpMYXlvdXRDaGVj
a1BvaW50OjpMYXlvdXRDaGVjCiAKIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQ6On5MYXlv
dXRDaGVja1BvaW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygq
U3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2soU3RhY2tTdGF0czo6c19zaGFyZWRNdXRleCk7CiAKICAgICAvLyBQb3AgdG8gdGhl
IHByZXZpb3VzIGxheW91dCBjaGVja3BvaW50OgogICAgIFN0YWNrU3RhdHM6OnNfdG9wTGF5b3V0
Q2hlY2tQb2ludCA9IG1fcHJldjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRXhwb3J0TWFjcm9zLmgiCiAjaW5jbHVkZSA8bXV0ZXg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogCiAvLyBEZWZpbmUgdGhpcyBmbGFnIHRvIGVuYWJs
ZSBTdGFjayBzdGF0cyBjb2xsZWN0aW9uLiBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsCkBAIC02Nyw3
ICs2OCw2IEBAIHB1YmxpYzoKICAgICAgICAgTGF5b3V0Q2hlY2tQb2ludCgpIHsgfQogICAgIH07
CiAKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9CiAgICAgc3RhdGljIHZvaWQgcHJv
YmUoKSB7IH0KIH07CiAKQEAgLTEwOSw5ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgICAgIGludCBt
X2RlcHRoOwogICAgIH07CiAKLSAgICAvLyBJbml0aWFsaXplcyBsb2NrcyBhbmQgdGhlIGxvZyBm
aWxlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplKCk7Ci0KICAgICAvLyBVc2VkIGZvciBwcm9iaW5nIHRoZSBzdGFjayBhdCBwbGFjZXMgd2hl
cmUgd2Ugc3VzcGVjdCB0byBiZSBoaWdoCiAgICAgLy8gcG9pbnRzIG9mIHN0YWNrIHVzYWdlIGJ1
dCBhcmUgTk9UIGNoZWNrIHBvaW50cyB3aGVyZSBzdGFjayByZWN1cnNpb24KICAgICAvLyBpcyBj
aGVja2VkLgpAQCAtMTI0LDcgKzEyMSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBD
aGVja1BvaW50IG1hbmFnZW1lbnQ6Ci0gICAgc3RhdGljIHN0ZDo6bXV0ZXgqIHNfc2hhcmVkTXV0
ZXg7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgc19zaGFyZWRNdXRleDsKICAgICBzdGF0aWMgQ2hl
Y2tQb2ludCogc190b3BDaGVja1BvaW50OwogICAgIHN0YXRpYyBMYXlvdXRDaGVja1BvaW50KiBz
X2ZpcnN0TGF5b3V0Q2hlY2tQb2ludDsKICAgICBzdGF0aWMgTGF5b3V0Q2hlY2tQb2ludCogc190
b3BMYXlvdXRDaGVja1BvaW50OwpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiZHRvYS9jYWNo
ZWQtcG93ZXJzLmgiCiAjaW5jbHVkZSAiSGFzaE1hcC5oIgogI2luY2x1ZGUgIlJhbmRvbU51bWJl
clNlZWQuaCIKLSNpbmNsdWRlICJTdGFja1N0YXRzLmgiCiAjaW5jbHVkZSAiU3RkTGliRXh0cmFz
LmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIgpAQCAtMTI0LDcgKzEyMyw2IEBAIHZvaWQgaW5p
dGlhbGl6ZVRocmVhZGluZygpCiAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKICAgICBpbml0aWFsaXpl
UmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAgICAgVGhyZWFkSWRlbnRpZmllckRhdGE6OmluaXRp
YWxpemVPbmNlKCk7Ci0gICAgU3RhY2tTdGF0czo6aW5pdGlhbGl6ZSgpOwogICAgIHd0ZlRocmVh
ZERhdGEoKTsKICAgICBpbml0aWFsaXplRGF0ZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9tYWMvRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0JKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XVEYvd3RmL21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNh
ZmFyaS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk5ldmVy
RGVzdHJveWVkLmgiCiAjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAjaW5jbHVkZSA8bXV0ZXg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGRlcHJlY2F0
ZWQgc3ltYm9scyB0aGF0IHRoZSBsYXN0IHJlbGVhc2VkIHZlcnNpb24gb2YgU2FmYXJpIHVzZXMu
CiAvLyBPbmNlIFNhZmFyaSBzdG9wcyB1c2luZyB0aGVtLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW0u
CkBAIC00NSwyNSArNDYsMTYgQEAgdm9pZCBjYWxsT25NYWluVGhyZWFkKGNvbnN0IEZ1bmN0aW9u
PHZvaQogICAgIGNhbGxPbk1haW5UaHJlYWQoc3RkOjpmdW5jdGlvbjx2b2lkICgpPihmdW5jdGlv
bikpOwogfQogCi1zdGF0aWMgc3RkOjptdXRleCYgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXguY29uc3RydWN0KCk7Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleDsKIAogdm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQogewotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkubG9jaygp
OworICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4LmxvY2soKTsKIH0KIAogdm9p
ZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCiB7Ci0gICAgYXRvbWlj
YWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKS51bmxvY2soKTsKKyAgICBhdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleC51bmxvY2soKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSQogCiAjaW5j
bHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VURjguaD4KIApAQCAtMTE3LDExICsxMTgsNyBAQCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5n
U3RyaW5nOjpVbmRlcmx5aW5nCiB7CiB9CiAKLXN0YXRpYyBzdGQ6Om11dGV4JiB1bmRlcmx5aW5n
U3RyaW5nc011dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4g
bXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgdW5kZXJseWlu
Z1N0cmluZ3NNdXRleDsKIAogc3RhdGljIEhhc2hNYXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmlu
Z1ZpZXc6OlVuZGVybHlpbmdTdHJpbmcqPiYgdW5kZXJseWluZ1N0cmluZ3MoKQogewpAQCAtMTMz
LDcgKzEzMCw3IEBAIHZvaWQgU3RyaW5nVmlldzo6aW52YWxpZGF0ZShjb25zdCBTdHJpbmcKIHsK
ICAgICBVbmRlcmx5aW5nU3RyaW5nKiB1bmRlcmx5aW5nU3RyaW5nOwogICAgIHsKLSAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCgp
KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodW5kZXJseWluZ1N0
cmluZ3NNdXRleCk7CiAgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSB1bmRlcmx5aW5nU3RyaW5n
cygpLnRha2UoJnN0cmluZ1RvQmVEZXN0cm95ZWQpOwogICAgICAgICBpZiAoIXVuZGVybHlpbmdT
dHJpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTIsNyArMTQ5LDcgQEAgdm9pZCBTdHJp
bmdWaWV3OjphZG9wdFVuZGVybHlpbmdTdHJpbmcoVQogICAgIGlmIChtX3VuZGVybHlpbmdTdHJp
bmcpIHsKICAgICAgICAgaWYgKCEtLW1fdW5kZXJseWluZ1N0cmluZy0+cmVmQ291bnQpIHsKICAg
ICAgICAgICAgIGlmIChtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQpIHsKLSAgICAgICAgICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011
dGV4KCkpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOwogICAgICAgICAgICAgICAgIHVuZGVybHlpbmdTdHJp
bmdzKCkucmVtb3ZlKCZtX3VuZGVybHlpbmdTdHJpbmctPnN0cmluZyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBkZWxldGUgbV91bmRlcmx5aW5nU3RyaW5nOwpAQCAtMTY3LDcgKzE2NCw3
IEBAIHZvaWQgU3RyaW5nVmlldzo6c2V0VW5kZXJseWluZ1N0cmluZyhjb24KICAgICBpZiAoIXN0
cmluZykKICAgICAgICAgdW5kZXJseWluZ1N0cmluZyA9IG51bGxwdHI7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVuZGVybHlpbmdTdHJpbmdz
TXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHVuZGVy
bHlpbmdTdHJpbmdzTXV0ZXgpOwogICAgICAgICBhdXRvIHJlc3VsdCA9IHVuZGVybHlpbmdTdHJp
bmdzKCkuYWRkKHN0cmluZywgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXcgVW5kZXJseWluZ1N0
cmluZygqc3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9y
SUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRv
cklDVS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5j
bHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpAQCAtNTAsMTcg
KzUxLDcgQEAgc3RhdGljIFVDb2xsYXRvciogY2FjaGVkQ29sbGF0b3I7CiBzdGF0aWMgY2hhciog
Y2FjaGVkQ29sbGF0b3JMb2NhbGU7CiBzdGF0aWMgYm9vbCBjYWNoZWRDb2xsYXRvclNob3VsZFNv
cnRMb3dlcmNhc2VGaXJzdDsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0
ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLQotICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0gICAgc3RkOjpjYWxsX29u
Y2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLQot
ICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIGNhY2hlZENvbGxhdG9yTXV0
ZXg7CiAKICNpZiAhKE9TKERBUldJTikgJiYgVVNFKENGKSkKIApAQCAtMTE3LDcgKzEwOCw3IEBA
IENvbGxhdG9yOjpDb2xsYXRvcihjb25zdCBjaGFyKiBsb2NhbGUsIGIKICAgICBVRXJyb3JDb2Rl
IHN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRleCgpKTsKKyAgICAgICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRleCk7CiAgICAgICAg
IGlmIChjYWNoZWRDb2xsYXRvciAmJiBsb2NhbGVzTWF0Y2goY2FjaGVkQ29sbGF0b3JMb2NhbGUs
IGxvY2FsZSkgJiYgY2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPT0gc2hv
dWxkU29ydExvd2VyY2FzZUZpcnN0KSB7CiAgICAgICAgICAgICBtX2NvbGxhdG9yID0gY2FjaGVk
Q29sbGF0b3I7CiAgICAgICAgICAgICBtX2xvY2FsZSA9IGNhY2hlZENvbGxhdG9yTG9jYWxlOwpA
QCAtMTQ3LDcgKzEzOCw3IEBAIENvbGxhdG9yOjpDb2xsYXRvcihjb25zdCBjaGFyKiBsb2NhbGUs
IGIKIAogQ29sbGF0b3I6On5Db2xsYXRvcigpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4KTsKICAgICBpZiAoY2FjaGVkQ29s
bGF0b3IpIHsKICAgICAgICAgdWNvbF9jbG9zZShjYWNoZWRDb2xsYXRvcik7CiAgICAgICAgIGZh
c3RGcmVlKGNhY2hlZENvbGxhdG9yTG9jYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
ODYyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0MiBAQAorMjAxNS0wOC0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2Ygc3RkOjptdXRleC9zdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZSB3aXRoIFdURjo6TG9jay9XVEY6OkNvbmRpdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3
IGJlaGF2aW9yLgorCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9j
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVy
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZUZvckNvbnRleHRUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb252b2x2ZXJOb2RlOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZl
ck5vZGU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZvbHZlck5vZGU6OnNldEJ1ZmZl
cik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6CisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6OnNldEZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTo6cHJvY2Vz
cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T3NjaWxsYXRvck5vZGU6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6T3NjaWxsYXRvck5vZGU6OnNldFBlcmlvZGljV2F2ZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUGFu
bmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYW5uZXJOb2RlOjpwcm9jZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhbm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFwZXJQ
cm9jZXNzb3I6OnNldEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFwZXJQcm9jZXNz
b3I6OnNldE92ZXJzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2F2ZVNoYXBlclByb2Nlc3Nv
cjo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vz
c29yLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpyZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6Z3VpZFRvVmVyc2lvbk1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVy
aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZURhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpzZXRDYWNoZWRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRN
dXRleCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpleGlzdGluZ0Rh
dGFiYXNlQ29udGV4dEZvcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnJl
Z2lzdGVyRGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdl
cjo6dW5yZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU1hbmFnZXI6OmRpZENvbnN0cnVjdERhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU1hbmFnZXI6OmRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6YWRkUHJvcG9zZWREYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnJlbW92ZVByb3Bvc2VkRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4p
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAg
ICAgICogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbToKKyAgICAgICAgKGdldERPTVdyYXBw
ZXIpOgorICAgICAgICAoYWRkRE9NV3JhcHBlcik6CisgICAgICAgIChyZW1vdmVET01XcmFwcGVy
KToKKyAgICAgICAgKHdyYXBwZXJDYWNoZUxvY2spOiBEZWxldGVkLgorICAgICAgICAqIGNyeXB0
by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5OjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Z2V0SWRlbnRpZmllckZvck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6Om5hbWVGb3JJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnJlZ2lzdGVyQWxnb3Jp
dGhtKToKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdHJ5TXV0ZXgpOiBEZWxldGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6fldvcmtlckRlYnVnZ2VyQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6aW50ZXJydXB0QW5kRGlzcGF0Y2hJbnNw
ZWN0b3JDb21tYW5kcyk6CisgICAgICAgICogcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpjbGVhckFsbFRlc3RE
ZWZlcnJhbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpzZXRU
ZXN0Q2FsbGJhY2tBbmRTdGFydE5vdGlmaWNhdGlvblRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6ZGVmZXJUZXN0c0ZvclJlYXNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnRyaWdnZXJUZXN0
VGltZXJGaXJlZCk6CisgICAgICAgICogcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVGhyZWFkOjppbml0aWFsaXplUnVuTG9vcCk6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJldmVyYkNvbnZv
bHZlcjo6flJldmVyYkNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252b2x2
ZXI6OmJhY2tncm91bmRUaHJlYWRFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXZlcmJDb252
b2x2ZXI6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpyZXNl
dCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVuLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvTGFuZ3VhZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpwcmVmZXJyZWRMYW5ndWFn
ZXMpOgorICAgICAgICAoK1tXZWJMYW5ndWFnZUNoYW5nZU9ic2VydmVyIGxhbmd1YWdlUHJlZmVy
ZW5jZXNEaWRDaGFuZ2U6XSk6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybVVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENG
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVtcHR5UGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpydW5Mb2FkZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpsb2FkZXJSdW5Mb29wTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6bG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZVRyYWNrZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6OmluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tlcjo6ZGVjcmVtZW50VHJhbnNhY3Rpb25JblBy
b2dyZXNzQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjp0
cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQW5k
U3dhcE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3VGV4
dENvZGVjKToKKyAgICAgICAgKFdlYkNvcmU6OmF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6ZHVtcFRleHRFbmNvZGluZ05hbWVNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jb2RpbmdSZWdpc3RyeU11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3b3JrZXJUaHJlYWRz
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKToK
KyAgICAgICAgKFdlYkNvcmU6OnRocmVhZFNldE11dGV4KTogRGVsZXRlZC4KKwogMjAxNS0wOC0x
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpIGluc3RlYWQgb2YgY3NzVmFsdWVQb29sKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291
cmNlTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQs
NyArOTQsNyBAQCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJvY2VzcyhzaXplCiAgICAg
fQogCiAgICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4ndCBibG9jayBvbiB0aGlzIGxvY2ssIHNv
IHdlIHVzZSBzdGQ6OnRyeV90b19sb2NrIGluc3RlYWQuCi0gICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBz
dGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkgewogICAgICAgICAvLyBUb28gYmFkIC0g
dGhlIHRyeV9sb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdp
bmcgYnVmZmVycyBhbmQgd2VyZSBhbHJlYWR5IG91dHB1dHRpbmcgc2lsZW5jZSBhbnl3YXkuCiAg
ICAgICAgIG91dHB1dEJ1cy0+emVybygpOwpAQCAtNDE2LDcgKzQxNiw3IEBAIGJvb2wgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIoQXUKICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2Nr
ZXIgY29udGV4dExvY2tlcigqY29udGV4dCgpKTsKICAgICAKICAgICAvLyBUaGlzIHN5bmNocm9u
aXplcyB3aXRoIHByb2Nlc3MoKS4KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhtX3Byb2Nlc3NNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9j
ZXNzTXV0ZXgpOwogICAgIAogICAgIGlmIChidWZmZXIpIHsKICAgICAgICAgLy8gRG8gYW55IG5l
Y2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUgYnVmZmVyJ3MgbnVtYmVyIG9mIGNoYW5u
ZWxzLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIlBhbm5lck5vZGUuaCIKICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8bXV0ZXg+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgUGFu
bmVyTm9kZSogbV9wYW5uZXJOb2RlOwogCiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2Vz
cygpIHdpdGggc2V0QnVmZmVyKCkgd2hpY2ggY2FuIGNhdXNlIGR5bmFtaWMgY2hhbm5lbCBjb3Vu
dCBjaGFuZ2VzLgotICAgIG11dGFibGUgc3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBt
dXRhYmxlIExvY2sgbV9wcm9jZXNzTXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDcgKzgwLDcgQEAgdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6Omluc2VydEV2ZW50KGNvbgog
ICAgIGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2V2ZW50c011dGV4KTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX2V2ZW50c011dGV4KTsKICAgICAKICAgICB1bnNpZ25lZCBpID0g
MDsKICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwpAQCAtMTAyLDcgKzEwMiw3
IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRFdmVudChjb24KIAogdm9pZCBBdWRp
b1BhcmFtVGltZWxpbmU6OmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpCiB7
Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9ldmVudHNNdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9ldmVudHNNdXRleCk7CiAKICAgICAvLyBS
ZW1vdmUgYWxsIGV2ZW50cyBzdGFydGluZyBhdCBzdGFydFRpbWUuCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZXZlbnRzLnNpemUoKTsgKytpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAg
ZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZUZvckNvbnRleAogICAgIEFTU0VSVChjb250
ZXh0KTsKIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
KG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOworICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPExvY2s+IGxvY2sobV9ldmVudHNNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CiAgICAgICAg
IGlmICghbG9jay5vd25zX2xvY2soKSB8fCAhY29udGV4dCB8fCAhbV9ldmVudHMuc2l6ZSgpIHx8
IGNvbnRleHQtPmN1cnJlbnRUaW1lKCkgPCBtX2V2ZW50c1swXS50aW1lKCkpIHsKICAgICAgICAg
ICAgIGhhc1ZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwpA
QCAtMTQwLDcgKzE0MCw3IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250
ZXgKIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlKGRvdWJsZSBz
dGFydFRpbWUsIGRvdWJsZSBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1
ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBkb3VibGUgc2FtcGxlUmF0ZSwgZG91YmxlIGNv
bnRyb2xSYXRlKQogewogICAgIC8vIFdlIGNhbid0IGNvbnRlbmQgdGhlIGxvY2sgaW4gdGhlIHJl
YWx0aW1lIGF1ZGlvIHRocmVhZC4KLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2sobV9ldmVudHNNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9j
azxMb2NrPiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICgh
bG9jay5vd25zX2xvY2soKSkgewogICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZWYWx1ZXM7ICsraSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
aAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogI2Rl
ZmluZSBBdWRpb1BhcmFtVGltZWxpbmVfaAogCiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0j
aW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMDcsNyArMTA3
LDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxQYXJhbUV2ZW50PiBtX2V2ZW50czsKIAotICAg
IHN0ZDo6bXV0ZXggbV9ldmVudHNNdXRleDsKKyAgICBMb2NrIG1fZXZlbnRzTXV0ZXg7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDb252b2x2ZXJOb2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZQogICAgIEFTU0VSVChvdXRwdXRCdXMpOwogCiAgICAgLy8gU3luY2hyb25pemUgd2l0
aCBwb3NzaWJsZSBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2UuCi0gICAg
c3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRy
eV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0
ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkgewogICAg
ICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeV9sb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRo
ZSBtaWRkbGUgb2Ygc2V0dGluZyBhIG5ldyBpbXB1bHNlIHJlc3BvbnNlLgogICAgICAgICBvdXRw
dXRCdXMtPnplcm8oKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBDb252b2x2ZXJOb2RlOjpwcm9j
ZXNzKHNpemVfdCBmcmFtZQogCiB2b2lkIENvbnZvbHZlck5vZGU6OnJlc2V0KCkKIHsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogICAgIGlmIChtX3JldmVy
YikKICAgICAgICAgbV9yZXZlcmItPnJlc2V0KCk7CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9p
ZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZQogCiAgICAgewogICAgICAgICAv
LyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4KLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX3Byb2Nlc3NNdXRleCk7CiAgICAgICAgIG1fcmV2ZXJiID0gV1RGOjptb3Zl
KHJldmVyYik7CiAgICAgICAgIG1fYnVmZmVyID0gYnVmZmVyOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9O
b2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1
ZmZlcjsKIAogICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUg
Y29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3MoKS4KLSAgICBtdXRhYmxl
IHN0ZDo6bXV0ZXggbV9wcm9jZXNzTXV0ZXg7CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011
dGV4OwogCiAgICAgLy8gTm9ybWFsaXplIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9yIG5vdC4gTXVz
dCBkZWZhdWx0IHRvIHRydWUuCiAgICAgYm9vbCBtX25vcm1hbGl6ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpwcm9jZXMKICAgICAvLyBVc2UgYSBzdGQ6OnRyeV90b19sb2NrIHRvIGF2b2lkIGNvbnRl
bnRpb24gaW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCiAgICAgLy8gSWYgd2UgZmFpbCB0
byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQgbXVzdCBiZSBpbiB0
aGUgbWlkZGxlIG9mCiAgICAgLy8gcmVjb25maWd1cmluZyBpdHMgcGxheWJhY2sgZW5naW5lLCBz
byB3ZSBvdXRwdXQgc2lsZW5jZSBpbiB0aGlzIGNhc2UuCi0gICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBz
dGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkgewogICAgICAgICAvLyBXZSBmYWlsZWQg
dG8gYWNxdWlyZSB0aGUgbG9jay4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiTXVsdGlDaGFubmVsUmVzYW1wbGVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgot
I2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNyArNjcsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRp
YUVsZW1lbnQ7Ci0gICAgc3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBMb2NrIG1fcHJv
Y2Vzc011dGV4OwogCiAgICAgdW5zaWduZWQgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzOwogICAg
IGRvdWJsZSBtX3NvdXJjZVNhbXBsZVJhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2Rl
LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKKyAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogCiAgICAgICAgIG1f
c291cmNlTnVtYmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHM7CiAKQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzCiAgICAgLy8g
VXNlIHN0ZDo6dHJ5X3RvX2xvY2sgdG8gYXZvaWQgY29udGVudGlvbiBpbiB0aGUgcmVhbC10aW1l
IGF1ZGlvIHRocmVhZC4KICAgICAvLyBJZiB3ZSBmYWlsIHRvIGFjcXVpcmUgdGhlIGxvY2sgdGhl
biB0aGUgTWVkaWFTdHJlYW0gbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mCiAgICAgLy8gYSBmb3Jt
YXQgY2hhbmdlLCBzbyB3ZSBvdXRwdXQgc2lsZW5jZSBpbiB0aGlzIGNhc2UuCi0gICAgc3RkOjp1
bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19s
b2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0
ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkgewogICAgICAgICAv
LyBXZSBmYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9jay4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJv
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJBdWRpb1NvdXJj
ZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+
IG1fYXVkaW9UcmFjazsKICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBtX2F1ZGlvU291cmNlUHJv
dmlkZXI7CiAKLSAgICBzdGQ6Om11dGV4IG1fcHJvY2Vzc011dGV4OworICAgIExvY2sgbV9wcm9j
ZXNzTXV0ZXg7CiAKICAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHM7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9y
Tm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcg
QEAgdm9pZCBPc2NpbGxhdG9yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJsb2NrIG9uIHRoaXMgbG9jaywg
c28gd2UgdXNlIHN0ZDo6dHJ5X3RvX2xvY2sgaW5zdGVhZC4KLSAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3RkOjp0cnlfdG9f
bG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKSB7CiAgICAgICAgIC8vIFRvbyBiYWQg
LSB0aGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZiBjaGFu
Z2luZyB3YXZlLXRhYmxlcy4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CkBAIC0zNDAsNyAr
MzQwLDcgQEAgdm9pZCBPc2NpbGxhdG9yTm9kZTo6c2V0UGVyaW9kaWNXYXZlKFBlcgogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB3aXRoIHBy
b2Nlc3MoKS4KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwog
ICAgIG1fcGVyaW9kaWNXYXZlID0gcGVyaW9kaWNXYXZlOwogICAgIG1fdHlwZSA9IENVU1RPTTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0
b3JOb2RlLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgogI2luY2x1ZGUg
IkF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oIgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKQEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV92aXJ0
dWFsUmVhZEluZGV4OwogCiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2VzcygpLgotICAg
IG11dGFibGUgc3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9w
cm9jZXNzTXV0ZXg7CiAKICAgICAvLyBTdG9yZXMgc2FtcGxlLWFjY3VyYXRlIHZhbHVlcyBjYWxj
dWxhdGVkIGFjY29yZGluZyB0byBmcmVxdWVuY3kgYW5kIGRldHVuZS4KICAgICBBdWRpb0Zsb2F0
QXJyYXkgbV9waGFzZUluY3JlbWVudHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1Bhbm5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw3ICsxMjAsNyBAQCB2b2lkIFBhbm5lck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1Rv
CiAgICAgfQogCiAgICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4ndCBibG9jayBvbiB0aGlzIGxv
Y2ssIHNvIHdlIHVzZSBzdGQ6OnRyeV90b19sb2NrIGluc3RlYWQuCi0gICAgc3RkOjp1bmlxdWVf
bG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcGFubmVyTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwor
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3Bhbm5lck11dGV4LCBzdGQ6OnRyeV90
b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsKICAgICAgICAgLy8gVG9vIGJh
ZCAtIFRoZSB0cnlfbG9jaygpIGZhaWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGNo
YW5naW5nIHRoZSBwYW5uZXIuCiAgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CkBAIC0yMDks
NyArMjA5LDcgQEAgYm9vbCBQYW5uZXJOb2RlOjpzZXRQYW5uaW5nTW9kZWwodW5zaWduZQogICAg
IGNhc2UgSFJURjoKICAgICAgICAgaWYgKCFtX3Bhbm5lci5nZXQoKSB8fCBtb2RlbCAhPSBtX3Bh
bm5pbmdNb2RlbCkgewogICAgICAgICAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9j
ZXNzKCkuCi0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Bh
bm5lck11dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGFu
bmVyTXV0ZXgpOwogCiAgICAgICAgICAgICBtX3Bhbm5lciA9IFBhbm5lcjo6Y3JlYXRlKG1vZGVs
LCBzYW1wbGVSYXRlKCksIG1faHJ0ZkRhdGFiYXNlTG9hZGVyLmdldCgpKTsKICAgICAgICAgICAg
IG1fcGFubmluZ01vZGVsID0gbW9kZWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1Bhbm5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1Bhbm5lck5vZGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAKICNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKICNpbmNsdWRlICJQYW5u
ZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25Db3VudDsKIAogICAgIC8vIFN5bmNocm9u
aXplIHByb2Nlc3MoKSBhbmQgc2V0UGFubmluZ01vZGVsKCkgd2hpY2ggY2FuIGNoYW5nZSB0aGUg
cGFubmVyLgotICAgIG11dGFibGUgc3RkOjptdXRleCBtX3Bhbm5lck11dGV4OworICAgIG11dGFi
bGUgTG9jayBtX3Bhbm5lck11dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFw
ZXJQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0RTUEtlcm5lbD4gV2F2ZVNoYXAKIHZv
aWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0Q3VydmUoRmxvYXQzMkFycmF5KiBjdXJ2ZSkKIHsK
ICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB3aXRoIHByb2Nlc3MoKS4KLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogCiAgICAgbV9jdXJ2ZSA9IGN1cnZlOwog
fQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZs
b2F0CiB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldE92ZXJzYW1wbGUoT3ZlclNhbXBsZVR5
cGUgb3ZlcnNhbXBsZSkKIHsKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB3aXRoIHByb2Nlc3Mo
KS4KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogCiAgICAg
bV9vdmVyc2FtcGxlID0gb3ZlcnNhbXBsZTsKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIFdhdmVT
aGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3Rk
Ojp0cnlfdG9fbG9jayBpbnN0ZWFkLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9jayhtX3Byb2Nlc3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBp
ZiAoIWxvY2sub3duc19sb2NrKCkpIHsKICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9j
aygpIGZhaWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2V0Q3VydmUoKSBjYWxs
LgogICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgJKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclBy
b2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiQXVk
aW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKICNpbmNsdWRlICJBdWRpb05vZGUuaCIKICNpbmNsdWRl
IDxtZW1vcnk+Ci0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJy
YXkuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIE92ZXJT
YW1wbGVUeXBlIG1fb3ZlcnNhbXBsZTsKIAogICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHByb2Nl
c3MoKSB3aXRoIHNldEN1cnZlKCkuCi0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fcHJvY2Vzc011
dGV4OworICAgIG11dGFibGUgTG9jayBtX3Byb2Nlc3NNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDE3ICsx
NTcsNyBAQCBzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhCiB9CiAKIC8v
IEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJz
aW9uVHJhY2tlciBjbGFzcy4KLXN0YXRpYyBzdGQ6Om11dGV4JiBndWlkTXV0ZXgoKQotewotICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVz
dHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcs
IFtdIHsKLSAgICAgICAgbXV0ZXguY29uc3RydWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4g
bXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBndWlkTXV0ZXg7CiAKIHR5cGVkZWYgSGFzaE1h
cDxEYXRhYmFzZUd1aWQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7CiBzdGF0aWMgR3VpZFZlcnNp
b25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQpAQCAtMjMzLDcgKzIyMyw3IEBAIERhdGFiYXNlOjpE
YXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlQ28KICAgICAgICAgbV9uYW1lID0gZW1wdHlTdHJp
bmcoKTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tl
cihndWlkTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
ZXIoZ3VpZE11dGV4KTsKIAogICAgICAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShz
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEhhc2hTZXQ8RGF0YWJhc2UqPj4mIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmFk
ZChtX2d1aWQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKQEAgLTM3MCw3ICszNjAsNyBAQCBi
b29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sCiAKICAgICBTdHJpbmcgY3Vy
cmVudFZlcnNpb247CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+
IGxvY2tlcihndWlkTXV0ZXgpOwogCiAgICAgICAgIGF1dG8gZW50cnkgPSBndWlkVG9WZXJzaW9u
TWFwKCkuZmluZChtX2d1aWQpOwogICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1h
cCgpLmVuZCgpKSB7CkBAIC00NjUsNyArNDU1LDcgQEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2VEYXRh
YmFzZSgpCiAgICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5n
IGNhbGxpbmcgcmVtb3ZlT3BlbkRhdGFiYXNlKCkuCiAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwogICAgIHsKLSAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgICAgICBhdXRvIGl0
ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5maW5kKG1fZ3VpZCk7CiAgICAgICAgIEFTU0VSVChpdCAh
PSBndWlkVG9EYXRhYmFzZU1hcCgpLmVuZCgpKTsKQEAgLTUyNCw3ICs1MTQsNyBAQCB2b2lkIERh
dGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgCiAKIFN0cmluZyBEYXRhYmFzZTo6Z2V0
Q2FjaGVkVmVyc2lvbigpIGNvbnN0CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2tlcihndWlkTXV0ZXgpOwogCiAgICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9n
dWlkKS5pc29sYXRlZENvcHkoKTsKIH0KQEAgLTUzMiw3ICs1MjIsNyBAQCBTdHJpbmcgRGF0YWJh
c2U6OmdldENhY2hlZFZlcnNpb24oKSBjb25zCiB2b2lkIERhdGFiYXNlOjpzZXRDYWNoZWRWZXJz
aW9uKGNvbnN0IFN0cmluZyYgYWN0dWFsVmVyc2lvbikKIHsKICAgICAvLyBVcGRhdGUgdGhlIGlu
IG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9j
az4gbG9ja2VyKGd1aWRNdXRleCk7CiAKICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQs
IGFjdHVhbFZlcnNpb24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OnNldElzQXZhaWxhYmxlKGJvbwogCiBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBEYXRhYmFzZU1h
bmFnZXI6OmV4aXN0aW5nRGF0YWJhc2VDb250ZXh0Rm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRl
eCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBBU1NF
UlQobV9kYXRhYmFzZUNvbnRleHRSZWdpc3RlcmVkQ291bnQgPj0gMCk7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2VDb250ZXh0SW5zdGFuY2VDb3VudCA+PSAwKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBS
ZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBEYXRhYmFzZU1hbmFnZXI6CiAKIHZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dChEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNl
Q29udGV4dCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICBtX2NvbnRleHRNYXAuc2V0KGNvbnRleHQsIGRhdGFiYXNlQ29u
dGV4dCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnJlZ2lzdGVy
RGF0YWJhc2VDbwogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6dW5yZWdpc3RlckRhdGFiYXNlQ29u
dGV4dChEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCkKIHsKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX211dGV4KTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQg
PSBkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBBU1NFUlQo
bV9jb250ZXh0TWFwLmdldChjb250ZXh0KSk7CkBAIC0xNjIsMTQgKzE2MiwxNCBAQCB2b2lkIERh
dGFiYXNlTWFuYWdlcjo6dW5yZWdpc3RlckRhdGFiYXNlCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
dm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRpZENvbnN0cnVjdERhdGFiYXNlQ29udGV4dCgpCiB7Ci0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2RhdGFiYXNlQ29udGV4dElu
c3RhbmNlQ291bnQrKzsKIH0KIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRpZERlc3RydWN0RGF0
YWJhc2VDb250ZXh0KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAg
IG1fZGF0YWJhc2VDb250ZXh0SW5zdGFuY2VDb3VudC0tOwogICAgIEFTU0VSVChtX2RhdGFiYXNl
Q29udGV4dFJlZ2lzdGVyZWRDb3VudCA8PSBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQp
OwpAQCAtMjU4LDE0ICsyNTgsMTQgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5h
Z2VyOjpvcAogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6YWRkUHJvcG9zZWREYXRhYmFzZShQcm9w
b3NlZERhdGFiYXNlKiBwcm9wb3NlZERiKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0
ZXgpOwogCiAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5hZGQocHJvcG9zZWREYik7CiB9CiAKIHZv
aWQgRGF0YWJhc2VNYW5hZ2VyOjpyZW1vdmVQcm9wb3NlZERhdGFiYXNlKFByb3Bvc2VkRGF0YWJh
c2UqIHByb3Bvc2VkRGIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAg
ICBtX3Byb3Bvc2VkRGF0YWJhc2VzLnJlbW92ZShwcm9wb3NlZERiKTsKIH0KQEAgLTMyMCw3ICsz
MjAsNyBAQCB2b2lkIERhdGFiYXNlTWFuYWdlcjo6c3RvcERhdGFiYXNlcyhTY3JpCiBTdHJpbmcg
RGF0YWJhc2VNYW5hZ2VyOjpmdWxsUGF0aEZvckRhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKIHsKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgICAgICBm
b3IgKGF1dG8qIHByb3Bvc2VkRGF0YWJhc2UgOiBtX3Byb3Bvc2VkRGF0YWJhc2VzKSB7CiAgICAg
ICAgICAgICBpZiAocHJvcG9zZWREYXRhYmFzZS0+ZGV0YWlscygpLm5hbWUoKSA9PSBuYW1lICYm
IHByb3Bvc2VkRGF0YWJhc2UtPm9yaWdpbigpLT5lcXVhbChvcmlnaW4pKQpAQCAtMzQ5LDcgKzM0
OSw3IEBAIGJvb2wgRGF0YWJhc2VNYW5hZ2VyOjpkYXRhYmFzZU5hbWVzRm9yT3IKIERhdGFiYXNl
RGV0YWlscyBEYXRhYmFzZU1hbmFnZXI6OmRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKGNvbnN0IFN0
cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKICAgICB7Ci0gICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0
byogcHJvcG9zZWREYXRhYmFzZSA6IG1fcHJvcG9zZWREYXRhYmFzZXMpIHsKICAgICAgICAgICAg
IGlmIChwcm9wb3NlZERhdGFiYXNlLT5kZXRhaWxzKCkubmFtZSgpID09IG5hbWUgJiYgcHJvcG9z
ZWREYXRhYmFzZS0+b3JpZ2luKCktPmVxdWFsKG9yaWdpbikpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAkocmV2
aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVk
ZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBw
cml2YXRlOgogICAgIEhhc2hTZXQ8UHJvcG9zZWREYXRhYmFzZSo+IG1fcHJvcG9zZWREYXRhYmFz
ZXM7CiAKICAgICAvLyBUaGlzIG11dGV4IHByb3RlY3RzIG1fY29udGV4dE1hcCwgYW5kIG1fcHJv
cG9zZWREYXRhYmFzZXMuCi0gICAgc3RkOjptdXRleCBtX211dGV4OworICAgIExvY2sgbV9tdXRl
eDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV2Vi
U2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgogI2ltcG9ydCAicnVudGltZV9yb290LmgiCisjaW1wb3J0
IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3
dGYvc3BpL2NvY29hL05TTWFwVGFibGVTUEkuaD4KIApAQCAtNDYsMTYgKzQ3LDcgQEAKIHN0YXRp
YyBOU01hcFRhYmxlKiBET01XcmFwcGVyQ2FjaGU7CiAgICAgCiAjaWZkZWYgTkVFRFNfV1JBUFBF
Ul9DQUNIRV9MT0NLCi1zdGF0aWMgc3RkOjptdXRleCYgd3JhcHBlckNhY2hlTG9jaygpCi17Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxh
ZywgW10gewotICAgICAgICBtdXRleC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLSAgICByZXR1cm4g
bXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayB3cmFwcGVyQ2FjaGVMb2NrOwogI2VuZGlmCiAK
ICNpZiBDT01QSUxFUihDTEFORykKQEAgLTc4LDcgKzcwLDcgQEAgTlNNYXBUYWJsZSogY3JlYXRl
V3JhcHBlckNhY2hlKCkKIE5TT2JqZWN0KiBnZXRET01XcmFwcGVyKERPTU9iamVjdEludGVybmFs
KiBpbXBsKQogewogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwotICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdyYXBwZXJDYWNoZUxvY2soKSk7CisgICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod3JhcHBlckNhY2hlTG9jayk7CiAjZW5kaWYKICAg
ICBpZiAoIURPTVdyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTg4LDcgKzgw
LDcgQEAgTlNPYmplY3QqIGdldERPTVdyYXBwZXIoRE9NT2JqZWN0SW50ZXJuYQogdm9pZCBhZGRE
T01XcmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBET01PYmplY3RJbnRlcm5hbCogaW1wbCkKIHsK
ICNpZmRlZiBORUVEU19XUkFQUEVSX0NBQ0hFX0xPQ0sKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayh3cmFwcGVyQ2FjaGVMb2NrKCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJDYWNoZUxvY2spOwogI2VuZGlmCiAgICAgaWYgKCFET01X
cmFwcGVyQ2FjaGUpCiAgICAgICAgIERPTVdyYXBwZXJDYWNoZSA9IGNyZWF0ZVdyYXBwZXJDYWNo
ZSgpOwpAQCAtOTgsNyArOTAsNyBAQCB2b2lkIGFkZERPTVdyYXBwZXIoTlNPYmplY3QqIHdyYXBw
ZXIsIERPCiB2b2lkIHJlbW92ZURPTVdyYXBwZXIoRE9NT2JqZWN0SW50ZXJuYWwqIGltcGwpCiB7
CiAjaWZkZWYgTkVFRFNfV1JBUFBFUl9DQUNIRV9MT0NLCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sod3JhcHBlckNhY2hlTG9jaygpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayh3cmFwcGVyQ2FjaGVMb2NrKTsKICNlbmRpZgogICAgIGlmICghRE9N
V3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykK
IAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobS5oIgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQxLDE3ICs0MSw3IEBAIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
JiBDcnlwdG9BbGdvcml0aG0KICAgICByZXR1cm4gcmVnaXN0cnk7CiB9CiAKLXN0YXRpYyBzdGQ6
Om11dGV4JiByZWdpc3RyeU11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsK
LQotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXguY29uc3Ry
dWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9j
ayByZWdpc3RyeU11dGV4OwogCiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Q3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkoKQogewpAQCAtNjMsNyArNTMsNyBAQCBib29sIENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpnZXRJZGVudGlmCiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhyZWdpc3Ry
eU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHJlZ2lzdHJ5
TXV0ZXgpOwogCiAgICAgYXV0byBpdGVyID0gbV9uYW1lVG9JZGVudGlmaWVyTWFwLmZpbmQobmFt
ZS5pc29sYXRlZENvcHkoKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9uYW1lVG9JZGVudGlmaWVyTWFw
LmVuZCgpKQpAQCAtNzUsMTQgKzY1LDE0IEBAIGJvb2wgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6
OmdldElkZW50aWYKIAogU3RyaW5nIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpuYW1lRm9ySWRl
bnRpZmllcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIHJldHVy
biBtX2lkZW50aWZpZXJUb05hbWVNYXAuZ2V0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpZGVudGlm
aWVyKSkuaXNvbGF0ZWRDb3B5KCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG0+IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBpZGVudGlmaWVyKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KHJlZ2lzdHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2so
cmVnaXN0cnlNdXRleCk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2lkZW50aWZpZXJUb0NvbnN0cnVj
dG9yTWFwLmZpbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlkZW50aWZpZXIpKTsKICAgICBpZiAo
aXRlciA9PSBtX2lkZW50aWZpZXJUb0NvbnN0cnVjdG9yTWFwLmVuZCgpKQpAQCAtOTMsNyArODMs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BCiAKIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnJlZ2lzdGVyQWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFt
ZSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1D
b25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jayhyZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKHJlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgYm9vbCBhZGRlZCA9IG1fbmFtZVRvSWRlbnRp
Zmllck1hcC5hZGQobmFtZSwgaWRlbnRpZmllcikuaXNOZXdFbnRyeTsKICAgICBBU1NFUlRfVU5V
U0VEKGFkZGVkLCBhZGRlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaD4KICNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8aW5z
cGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmg+Ci0jaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTQ2LDE3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIHsKIAotc3RkOjptdXRleCYgd29ya2VyRGVidWdnZXJBZ2VudHNNdXRl
eCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAgIH0pOwotCi0g
ICAgcmV0dXJuIG11dGV4OwotfQorU3RhdGljTG9jayB3b3JrZXJEZWJ1Z2dlckFnZW50c011dGV4
OwogCiB0eXBlZGVmIEhhc2hNYXA8V29ya2VyVGhyZWFkKiwgV29ya2VyRGVidWdnZXJBZ2VudCo+
IFdvcmtlckRlYnVnZ2VyQWdlbnRzOwogCkBAIC05NSwxMyArODUsMTMgQEAgV29ya2VyRGVidWdn
ZXJBZ2VudDo6V29ya2VyRGVidWdnZXJBZ2VudAogICAgICwgbV9zY3JpcHREZWJ1Z1NlcnZlcihp
bnNwZWN0ZWRXb3JrZXJHbG9iYWxTY29wZSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJU
YXNrTW9kZSkKICAgICAsIG1faW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUoaW5zcGVjdGVkV29y
a2VyR2xvYmFsU2NvcGUpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
d29ya2VyRGVidWdnZXJBZ2VudHNNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayh3b3JrZXJEZWJ1Z2dlckFnZW50c011dGV4KTsKICAgICB3b3JrZXJEZWJ1Z2dl
ckFnZW50cygpLnNldCgmaW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpLCB0aGlz
KTsKIH0KIAogV29ya2VyRGVidWdnZXJBZ2VudDo6fldvcmtlckRlYnVnZ2VyQWdlbnQoKQogewot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRz
TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod29ya2VyRGVi
dWdnZXJBZ2VudHNNdXRleCk7CiAKICAgICBBU1NFUlQod29ya2VyRGVidWdnZXJBZ2VudHMoKS5j
b250YWlucygmbV9pbnNwZWN0ZWRXb3JrZXJHbG9iYWxTY29wZS0+dGhyZWFkKCkpKTsKICAgICB3
b3JrZXJEZWJ1Z2dlckFnZW50cygpLnJlbW92ZSgmbV9pbnNwZWN0ZWRXb3JrZXJHbG9iYWxTY29w
ZS0+dGhyZWFkKCkpOwpAQCAtMTA5LDcgKzk5LDcgQEAgV29ya2VyRGVidWdnZXJBZ2VudDo6fldv
cmtlckRlYnVnZ2VyQWdlbgogCiB2b2lkIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmludGVycnVwdEFu
ZERpc3BhdGNoSW5zcGVjdG9yQ29tbWFuZHMoV29ya2VyVGhyZWFkKiB0aHJlYWQpCiB7Ci0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRl
eCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh3b3JrZXJEZWJ1Z2dl
ckFnZW50c011dGV4KTsKIAogICAgIGlmIChXb3JrZXJEZWJ1Z2dlckFnZW50KiBhZ2VudCA9IHdv
cmtlckRlYnVnZ2VyQWdlbnRzKCkuZ2V0KHRocmVhZCkpCiAgICAgICAgIGFnZW50LT5tX3Njcmlw
dERlYnVnU2VydmVyLmludGVycnVwdEFuZFJ1blRhc2soc3RkOjptYWtlX3VuaXF1ZTxSdW5JbnNw
ZWN0b3JDb21tYW5kc1Rhc2s+KHRocmVhZCwgYWdlbnQtPm1faW5zcGVjdGVkV29ya2VyR2xvYmFs
U2NvcGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJp
Z2dlci5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OldoZWVsRXZlbnRUZXN0VHJpCiAKIHZvaWQgV2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjpjbGVhckFsbFRlc3REZWZlcnJhbHMoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4KTsKICAgICBtX2RlZmVyVGVzdFRyaWdn
ZXJSZWFzb25zLmNsZWFyKCk7CiAgICAgbV90ZXN0Tm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4oKTsKICAgICBtX3Rlc3RUcmlnZ2VyVGltZXIuc3RvcCgpOwpAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0CiB2
b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmlj
YXRpb25UaW1lcihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb25DYWxsYmFjaykKIHsKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdn
ZXJNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fdGVzdFRyaWdn
ZXJNdXRleCk7CiAgICAgICAgIG1fdGVzdE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGOjptb3Zl
KGZ1bmN0aW9uQ2FsbGJhY2spOwogICAgIH0KICAgICAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OnNldFRlc3RDYWxsYgogCiB2b2lkIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6ZGVmZXJUZXN0c0ZvclJlYXNvbihTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIgaWRl
bnRpZmllciwgRGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pCiB7Ci0gICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4KTsKKyAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgIGF1dG8gaXQgPSBt
X2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmZpbmQoaWRlbnRpZmllcik7CiAgICAgaWYgKGl0ID09
IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnMuZW5kKCkpCiAgICAgICAgIGl0ID0gbV9kZWZlclRl
c3RUcmlnZ2VyUmVhc29ucy5hZGQoaWRlbnRpZmllciwgc3RkOjpzZXQ8RGVmZXJUZXN0VHJpZ2dl
clJlYXNvbj4oKSkuaXRlcmF0b3I7CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgV2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjpkZWZlclRlc3RzRm8KIAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnJl
bW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgRGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4KTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgIGF1dG8gaXQgPSBtX2Rl
ZmVyVGVzdFRyaWdnZXJSZWFzb25zLmZpbmQoaWRlbnRpZmllcik7CiAgICAgaWYgKGl0ID09IG1f
ZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMCw3
ICsxMTAsNyBAQCB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6dHJpZ2dlclRlc3RUCiAgICAg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uQ2FsbGJhY2s7CiAKICAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7Cisg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7CiAg
ICAgICAgIGlmICghbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5pc0VtcHR5KCkpIHsKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgICAgICBpZiAoaXNMb2dDaGFubmVsRW5hYmxlZCgiV2hlZWxF
dmVudFRlc3RUcmlnZ2VycyIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50
VGVzdFRyaWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1doZWVsRXZl
bnRUZXN0VHJpZ2dlci5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnRUZXN0VHJpZ2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBA
CiAjaWZuZGVmIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcl9oCiAjZGVmaW5lIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcl9oCiAKLSNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3Rlc3ROb3RpZmljYXRpb25DYWxsYmFjazsKICAgICBSdW5M
b29wOjpUaW1lcjxXaGVlbEV2ZW50VGVzdFRyaWdnZXI+IG1fdGVzdFRyaWdnZXJUaW1lcjsKLSAg
ICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV90ZXN0VHJpZ2dlck11dGV4OworICAgIG11dGFibGUgTG9j
ayBtX3Rlc3RUcmlnZ2VyTXV0ZXg7CiAgICAgV1RGOjpIYXNoTWFwPFNjcm9sbGFibGVBcmVhSWRl
bnRpZmllciwgc3RkOjpzZXQ8RGVmZXJUZXN0VHJpZ2dlclJlYXNvbj4+IG1fZGVmZXJUZXN0VHJp
Z2dlclJlYXNvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUwLDcgKzUwLDcgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6ZnVuYwog
ICAgIHNjcm9sbGluZ1RocmVhZC5jcmVhdGVUaHJlYWRJZk5lZWRlZCgpOwogCiAgICAgewotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhzaW5nbGV0b24oKS5tX2Z1bmN0
aW9uc011dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soc2luZ2xldG9u
KCkubV9mdW5jdGlvbnNNdXRleCk7CiAgICAgICAgIHNjcm9sbGluZ1RocmVhZC5tX2Z1bmN0aW9u
cy5hcHBlbmQoZnVuY3Rpb24pOwogICAgIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNjcm9s
bGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkCiAKICAgICAvLyBXYWl0IGZvciB0aGUgdGhy
ZWFkIHRvIGluaXRpYWxpemUgdGhlIHJ1biBsb29wLgogICAgIHsKLSAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXgp
OwogCiAgICAgICAgIG1fdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCh0aHJlYWRDYWxs
YmFjaywgdGhpcywgIldlYkNvcmU6IFNjcm9sbGluZyIpOwogICAgICAgICAKQEAgLTEwNiw3ICsx
MDYsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGCiAgICAgVmVj
dG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IGZ1bmN0aW9uczsKICAgICAKICAgICB7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Z1bmN0aW9uc011dGV4KTsKICAg
ICAgICAgZnVuY3Rpb25zID0gV1RGOjptb3ZlKG1fZnVuY3Rpb25zKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCiAKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC03NCwxMCArNzUsMTAgQEAgcHJpdmF0ZToKIAogICAgIFRocmVhZElkZW50aWZpZXIg
bV90aHJlYWRJZGVudGlmaWVyOwogCi0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbV9pbml0
aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwotICAgIHN0ZDo6bXV0ZXggbV9pbml0aWFs
aXplUnVuTG9vcE11dGV4OworICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0
aW9uVmFyaWFibGU7CisgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7CiAKLSAgICBz
dGQ6Om11dGV4IG1fZnVuY3Rpb25zTXV0ZXg7CisgICAgTG9jayBtX2Z1bmN0aW9uc011dGV4Owog
ICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Z1bmN0aW9uczsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RocmVhZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFjLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjppbml0
aWFsaXplUnVuTG9vcCgKIHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBydW4gbG9vcC4KICAgICB7
Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5pdGlhbGl6ZVJ1
bkxvb3BNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5pdGlh
bGl6ZVJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbV90aHJlYWRSdW5Mb29wID0gQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpOwogCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpp
bml0aWFsaXplUnVuTG9vcCgKICAgICAgICAgbV90aHJlYWRSdW5Mb29wU291cmNlID0gYWRvcHRD
RihDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoMCwgMCwgJmNvbnRleHQpKTsKICAgICAgICAgQ0ZSdW5M
b29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV90aHJlYWRSdW5Mb29wU291cmNl
LmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogCi0gICAgICAgIG1faW5pdGlhbGl6ZVJ1
bkxvb3BDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlfYWxsKCk7CisgICAgICAgIG1faW5pdGlhbGl6
ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9CiAKICAgICBBU1NF
UlQoaXNDdXJyZW50VGhyZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vUmV2ZXJiQ29udm9sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAsOSArMTQwLDkgQEAgUmV2ZXJiQ29udm9sdmVyOjp+UmV2ZXJiQ29udm9sdmVy
KCkKIAogICAgICAgICAvLyBXYWtlIHVwIHRocmVhZCBzbyBpdCBjYW4gcmV0dXJuCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fYmFja2dy
b3VuZFRocmVhZE11dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fYmFja2dyb3VuZFRocmVhZE11dGV4KTsKICAgICAgICAgICAgIG1fbW9yZUlucHV0QnVmZmVy
ZWQgPSB0cnVlOwotICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5X29uZSgpOworICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9u
VmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgICAgIH0KIAogICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX2JhY2tncm91bmRUaHJlYWQpOwpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQg
UmV2ZXJiQ29udm9sdmVyOjpiYWNrZ3JvdW5kVGhyZWFkRW4KICAgICAgICAgLy8gV2FpdCBmb3Ig
cmVhbHRpbWUgdGhyZWFkIHRvIGdpdmUgdXMgbW9yZSBpbnB1dAogICAgICAgICBtX21vcmVJbnB1
dEJ1ZmZlcmVkID0gZmFsc2U7ICAgICAgICAKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fYmFja2dyb3VuZFRocmVhZE11dGV4KTsKKyAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRN
dXRleCk7CiAKICAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxl
LndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuIG1fbW9yZUlucHV0QnVmZmVyZWQgfHwgbV93YW50
c1RvRXhpdDsgfSk7CiAgICAgICAgIH0KQEAgLTIwOSwxMiArMjA5LDEyIEBAIHZvaWQgUmV2ZXJi
Q29udm9sdmVyOjpwcm9jZXNzKGNvbnN0IEF1ZGkKICAgICAvLyBzaWduYWwgZnJvbSB0aW1lIHRv
IHRpbWUsIHNpbmNlIHdlJ2xsIGdldCB0byBpdCB0aGUgbmV4dCB0aW1lIHdlJ3JlIGNhbGxlZC4g
IFdlJ3JlIGNhbGxlZCByZXBlYXRlZGx5CiAgICAgLy8gYW5kIGZyZXF1ZW50bHkgKGFyb3VuZCBl
dmVyeSAzbXMpLiAgVGhlIGJhY2tncm91bmQgdGhyZWFkIGlzIHByb2Nlc3Npbmcgd2VsbCBpbnRv
IHRoZSBmdXR1cmUgYW5kIGhhcyBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgCiAgICAgLy8gbGVl
d2F5IGhlcmUuLi4KLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9iYWNr
Z3JvdW5kVGhyZWFkTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOworICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8TG9jaz4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7
CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX21v
cmVJbnB1dEJ1ZmZlcmVkID0gdHJ1ZTsKLSAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25W
YXJpYWJsZS5ub3RpZnlfb25lKCk7CisgICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5T25lKCk7CiB9CiAKIHZvaWQgUmV2ZXJiQ29udm9sdmVyOjpyZXNldCgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9SZXZlcmJDb252b2x2ZXIu
aAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2
ZXJiQ29udm9sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw5ICszNiw5IEBACiAjaW5jbHVkZSAiUmV2ZXJi
QWNjdW11bGF0aW9uQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmV2ZXJiQ29udm9sdmVyU3RhZ2UuaCIK
ICNpbmNsdWRlICJSZXZlcmJJbnB1dEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJp
YWJsZT4KICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtODgsOCArODksOCBAQCBwcml2YXRlOgogICAgIFRocmVhZElkZW50aWZpZXIgbV9i
YWNrZ3JvdW5kVGhyZWFkOwogICAgIGJvb2wgbV93YW50c1RvRXhpdDsKICAgICBib29sIG1fbW9y
ZUlucHV0QnVmZmVyZWQ7Ci0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fYmFja2dyb3VuZFRocmVh
ZE11dGV4OwotICAgIG11dGFibGUgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbV9iYWNrZ3JvdW5k
VGhyZWFkQ29uZGl0aW9uVmFyaWFibGU7CisgICAgbXV0YWJsZSBMb2NrIG1fYmFja2dyb3VuZFRo
cmVhZE11dGV4OworICAgIG11dGFibGUgQ29uZGl0aW9uIG1fYmFja2dyb3VuZFRocmVhZENvbmRp
dGlvblZhcmlhYmxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWRSdW4uY3Bw
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dl
YkNvcmVUaHJlYWRSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw3ICszMCw4IEBACiAKICNpbmNs
dWRlICJXZWJDb3JlVGhyZWFkLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZEludGVybmFsLmgi
Ci0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIHsKQEAgLTQ0LDIzICs0NSwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdhaXRGb3JD
b21wbGV0aW9uKCkKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4g
bG9jayhtX3N0YXRlTXV0ZXgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2so
bV9zdGF0ZU11dGV4KTsKIAogICAgICAgICBtX2NvbXBsZXRpb25Db25kaXRpb25WYXJpYWJsZS53
YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX2NvbXBsZXRlZDsgfSk7CiAgICAgfQogCiAgICAg
dm9pZCBzZXRDb21wbGV0ZWQoKQogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9zdGF0ZU11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9zdGF0ZU11dGV4KTsKIAogICAgICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsKICAg
ICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICBtX2NvbXBsZXRpb25Db25kaXRpb25W
YXJpYWJsZS5ub3RpZnlfb25lKCk7CisgICAgICAgIG1fY29tcGxldGlvbkNvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeU9uZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6Om11dGV4IG1fc3Rh
dGVNdXRleDsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtX2NvbXBsZXRpb25Db25kaXRp
b25WYXJpYWJsZTsKKyAgICBMb2NrIG1fc3RhdGVNdXRleDsKKyAgICBDb25kaXRpb24gbV9jb21w
bGV0aW9uQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKIH07CiAKQEAg
LTExMCw3ICsxMTEsNyBAQCBleHRlcm4gIkMiIHsKIAogdHlwZWRlZiBXVEY6OlZlY3RvcjxXZWJU
aHJlYWRCbG9jaz4gV2ViVGhyZWFkUnVuUXVldWU7CiAKLXN0YXRpYyBzdGQ6Om11dGV4KiBydW5R
dWV1ZU11dGV4Oworc3RhdGljIFN0YXRpY0xvY2sgcnVuUXVldWVNdXRleDsKIHN0YXRpYyBDRlJ1
bkxvb3BTb3VyY2VSZWYgcnVuU291cmNlOwogc3RhdGljIFdlYlRocmVhZFJ1blF1ZXVlKiBydW5R
dWV1ZTsKIApAQCAtMTE4LDEzICsxMTksMTIgQEAgc3RhdGljIHZvaWQgSGFuZGxlUnVuU291cmNl
KHZvaWQgKmluZm8pCiB7CiAgICAgVU5VU0VEX1BBUkFNKGluZm8pOwogICAgIEFTU0VSVChXZWJU
aHJlYWRJc0N1cnJlbnQoKSk7Ci0gICAgQVNTRVJUKHJ1blF1ZXVlTXV0ZXgpOwogICAgIEFTU0VS
VChydW5Tb3VyY2UpOwogICAgIEFTU0VSVChydW5RdWV1ZSk7CiAKICAgICBXZWJUaHJlYWRSdW5R
dWV1ZSBxdWV1ZUNvcHk7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jaygqcnVuUXVldWVNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKHJ1blF1ZXVlTXV0ZXgpOwogICAgICAgICBxdWV1ZUNvcHkgPSAqcnVuUXVldWU7
CiAgICAgICAgIHJ1blF1ZXVlLT5jbGVhcigpOwogICAgIH0KQEAgLTE0MCw3ICsxNDAsNiBAQCBz
dGF0aWMgdm9pZCBfV2ViVGhyZWFkUnVuKHZvaWQgKF50YXNrKSgpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBBU1NFUlQocnVuUXVldWVNdXRleCk7CiAgICAgQVNTRVJUKHJ1blNvdXJj
ZSk7CiAgICAgQVNTRVJUKHJ1blF1ZXVlKTsKIApAQCAtMTQ5LDcgKzE0OCw3IEBAIHN0YXRpYyB2
b2lkIF9XZWJUaHJlYWRSdW4odm9pZCAoXnRhc2spKCkKICAgICAgICAgc3RhdGUgPSBuZXcgV2Vi
VGhyZWFkQmxvY2tTdGF0ZTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2soKnJ1blF1ZXVlTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayhydW5RdWV1ZU11dGV4KTsKICAgICAgICAgcnVuUXVldWUtPmFwcGVuZChX
ZWJUaHJlYWRCbG9jayh0YXNrLCBzdGF0ZSkpOwogICAgIH0KIApAQCAtMTc1LDcgKzE3NCw2IEBA
IHZvaWQgV2ViVGhyZWFkUnVuU3luYyh2b2lkIChedGFzaykoKSkKIHZvaWQgV2ViVGhyZWFkSW5p
dFJ1blF1ZXVlKCkKIHsKICAgICBBU1NFUlQoIXJ1blF1ZXVlKTsKLSAgICBBU1NFUlQoIXJ1blF1
ZXVlTXV0ZXgpOwogICAgIEFTU0VSVCghcnVuU291cmNlKTsKIAogICAgIHN0YXRpYyBkaXNwYXRj
aF9vbmNlX3QgcHJlZDsKQEAgLTE4NSw4ICsxODMsNiBAQCB2b2lkIFdlYlRocmVhZEluaXRSdW5R
dWV1ZSgpCiAgICAgICAgIENGUnVuTG9vcFNvdXJjZUNvbnRleHQgcnVuU291cmNlQ29udGV4dCA9
IHswLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBIYW5k
bGVSdW5Tb3VyY2V9OwogICAgICAgICBydW5Tb3VyY2UgPSBDRlJ1bkxvb3BTb3VyY2VDcmVhdGUo
TlVMTCwgLTEsICZydW5Tb3VyY2VDb250ZXh0KTsKICAgICAgICAgQ0ZSdW5Mb29wQWRkU291cmNl
KFdlYlRocmVhZFJ1bkxvb3AoKSwgcnVuU291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwot
Ci0gICAgICAgIHJ1blF1ZXVlTXV0ZXggPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCku
cmVsZWFzZSgpOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvTGFuZ3VhZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0xhbmd1YWdlLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvTGFuZ3VhZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICszMSwxNCBAQAogI2lt
cG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0IDxtdXRleD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgc3RkOjpt
dXRleCYgcHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgoKQotewotICAgIHN0YXRpYyBkaXNwYXRjaF9v
bmNlX3Qgb25jZVRva2VuOwotICAgIHN0YXRpYyBzdGQ6Om11dGV4KiBtdXRleDsKLQotICAgIGRp
c3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAgbXV0ZXggPSBzdGQ6Om1ha2VfdW5p
cXVlPHN0ZDo6bXV0ZXg+KCkucmVsZWFzZSgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuICptdXRl
eDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIHByZWZlcnJlZExhbmd1YWdlc011dGV4OwogCiBzdGF0
aWMgVmVjdG9yPFN0cmluZz4mIHByZWZlcnJlZExhbmd1YWdlcygpCiB7CkBAIC02Nyw3ICs1OCw3
IEBAICsgKHZvaWQpbGFuZ3VhZ2VQcmVmZXJlbmNlc0RpZENoYW5nZTooTlMKICAgICBVTlVTRURf
UEFSQU0obm90aWZpY2F0aW9uKTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soV2ViQ29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgoKSk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFdlYkNvcmU6OnByZWZlcnJlZExh
bmd1YWdlc011dGV4KTsKICAgICAgICAgV2ViQ29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzKCkuY2xl
YXIoKTsKICAgICB9CiAKQEAgLTExOCw3ICsxMDksNyBAQCBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9y
bVVzZXJQcmVmZXJyZWRMYW5nCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhwcmVmZXJyZWRMYW5ndWFnZXNN
dXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhwcmVmZXJyZWRM
YW5ndWFnZXNNdXRleCk7CiAgICAgVmVjdG9yPFN0cmluZz4mIHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXMgPSBwcmVmZXJyZWRMYW5ndWFnZXMoKTsKIAogICAgIGlmICh1c2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Mb2FkZXJSdW5Mb29wQ0YuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MCwxOSArNDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVuTG9vcE9iamVjdCA9IDA7CiAKLXN0YXRpYyBzdGQ6Om11
dGV4JiBsb2FkZXJSdW5Mb29wTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxz
dGQ6Om11dGV4PiBtdXRleDsKLQotICAgIHJldHVybiBtdXRleDsKLX0KLQotc3RhdGljIHN0ZDo6
Y29uZGl0aW9uX3ZhcmlhYmxlJiBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4gY29uZGl0
aW9uVmFyaWFibGU7Ci0KLSAgICByZXR1cm4gY29uZGl0aW9uVmFyaWFibGU7Ci19CitzdGF0aWMg
U3RhdGljTG9jayBsb2FkZXJSdW5Mb29wTXV0ZXg7CitzdGF0aWMgU3RhdGljQ29uZGl0aW9uIGxv
YWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKIAogc3RhdGljIHZvaWQgZW1wdHlQZXJmb3Jt
KHZvaWQqKSAKIHsKQEAgLTYxLDcgKzUwLDcgQEAgc3RhdGljIHZvaWQgZW1wdHlQZXJmb3JtKHZv
aWQqKSAKIHN0YXRpYyB2b2lkIHJ1bkxvYWRlclRocmVhZCh2b2lkKikKIHsKICAgICB7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRleCgp
KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9v
cE11dGV4KTsKIAogICAgICAgICBsb2FkZXJSdW5Mb29wT2JqZWN0ID0gQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpOwogCkBAIC03MCw3ICs1OSw3IEBAIHN0YXRpYyB2b2lkIHJ1bkxvYWRlclRocmVhZCh2
b2lkKikKICAgICAgICAgQ0ZSdW5Mb29wU291cmNlUmVmIGJvZ3VzU291cmNlID0gQ0ZSdW5Mb29w
U291cmNlQ3JlYXRlKDAsIDAsICZjdHh0KTsKICAgICAgICAgQ0ZSdW5Mb29wQWRkU291cmNlKGxv
YWRlclJ1bkxvb3BPYmplY3QsIGJvZ3VzU291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwog
Ci0gICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZSgpLm5vdGlmeV9vbmUoKTsK
KyAgICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAg
IH0KIAogICAgIFNJbnQzMiByZXN1bHQ7CkBAIC04NCwxMiArNzMsMTIgQEAgQ0ZSdW5Mb29wUmVm
IGxvYWRlclJ1bkxvb3AoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KCkpOwor
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgp
OwogCiAgICAgaWYgKCFsb2FkZXJSdW5Mb29wT2JqZWN0KSB7CiAgICAgICAgIGNyZWF0ZVRocmVh
ZChydW5Mb2FkZXJUaHJlYWQsIDAsICJXZWJDb3JlOiBDRk5ldHdvcmsgTG9hZGVyIik7CiAKLSAg
ICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlKCkud2FpdChsb2NrLCBbXSB7IHJl
dHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKKyAgICAgICAgbG9hZGVyUnVuTG9vcENvbmRp
dGlvblZhcmlhYmxlLndhaXQobG9jaywgW10geyByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsg
fSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGxvYWRlclJ1bkxvb3BPYmplY3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAKICNpbmNsdWRlICJQcm90ZWN0aW9uU3BhY2UuaCIK
ICNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KLSNpbmNsdWRlIDxt
dXRleD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCkBAIC0xMzYsMjAgKzEzNiwyMCBAQCBzdGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFk
QW5kV2FpdChzdGQ6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6Om11dGV4IG11
dGV4OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGNvbmRpdGlvblZhcmlhYmxlOworICAg
IExvY2sgbXV0ZXg7CisgICAgQ29uZGl0aW9uIGNvbmRpdGlvblZhcmlhYmxlOwogCiAgICAgYm9v
bCBpc0ZpbmlzaGVkID0gZmFsc2U7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKFsmXSB7CiAgICAg
ICAgIGZ1bmN0aW9uKCk7CiAKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2sobXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtdXRleCk7CiAg
ICAgICAgIGlzRmluaXNoZWQgPSB0cnVlOwotICAgICAgICBjb25kaXRpb25WYXJpYWJsZS5ub3Rp
Znlfb25lKCk7CisgICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgIH0p
OwogCi0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG11dGV4KTsKKyAgICBz
dGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobXV0ZXgpOwogICAgIGNvbmRpdGlvblZhcmlhYmxl
LndhaXQobG9jaywgWyZdIHsgcmV0dXJuIGlzRmluaXNoZWQ7IH0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDkgKzQwLDggQEAKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogCi0jaW5jbHVkZSA8bXV0ZXg+
Ci0KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC0x
MDUsOCArMTA0LDggQEAgcHJpdmF0ZToKIAogICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJU
aHJlYWQgeyAwIH07CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2Ug
fTsKLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXhTZW5kOwotICAgIHN0ZDo6bXV0ZXggbV9tdXRleFJl
Y2VpdmU7CisgICAgTG9jayBtX211dGV4U2VuZDsKKyAgICBMb2NrIG1fbXV0ZXhSZWNlaXZlOwog
ICAgIERlcXVlPFNvY2tldERhdGE+IG1fc2VuZERhdGE7CiAgICAgRGVxdWU8U29ja2V0RGF0YT4g
bV9yZWNlaXZlRGF0YTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcg
QEAgaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbgogCiAgICAgYXV0byBj
b3B5ID0gY3JlYXRlQ29weShkYXRhLCBsZW5ndGgpOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9tdXRleFNlbmQpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbXV0ZXhTZW5kKTsKICAgICBtX3NlbmREYXRhLmFwcGVuZChTb2NrZXREYXRhIHsgV1RG
Ojptb3ZlKGNvcHkpLCBsZW5ndGggfSk7CiAKICAgICByZXR1cm4gbGVuZ3RoOwpAQCAtMTQ2LDcg
KzE0Niw3IEBAIGJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kRGF0YShDVVJMKiAKICAgICAg
ICAgICAgIGNvbnN0IGludCByZXN0TGVuZ3RoID0gc2VuZERhdGEuc2l6ZSAtIHRvdGFsQnl0ZXNT
ZW50OwogICAgICAgICAgICAgYXV0byBjb3B5ID0gY3JlYXRlQ29weShzZW5kRGF0YS5kYXRhLmdl
dCgpICsgdG90YWxCeXRlc1NlbnQsIHJlc3RMZW5ndGgpOwogCi0gICAgICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4U2VuZCk7CisgICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CiAgICAgICAgICAgICBtX3NlbmRE
YXRhLnByZXBlbmQoU29ja2V0RGF0YSB7IFdURjo6bW92ZShjb3B5KSwgcmVzdExlbmd0aCB9KTsK
IAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2VUcmFja2VyLmgiCiAKLSNpbmNsdWRlIDxtdXRl
eD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDExICszNSw3IEBAIG5hbWVzcGFjZSBT
UUxpdGVEYXRhYmFzZVRyYWNrZXIgewogc3RhdGljIFNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dCogc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQgPSBudWxscHRyOwogc3RhdGlj
IHVuc2lnbmVkIHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlciA9IDA7CiAKLXN0YXRpYyBz
dGQ6Om11dGV4JiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IHRpcE11dGV4OwotICAgIHJldHVybiB0aXBNdXRleDsK
LX0KK3N0YXRpYyBTdGF0aWNMb2NrIHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4OwogCiB2b2lk
IHNldENsaWVudChTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQqIGNsaWVudCkKIHsKQEAgLTU0
LDcgKzQ5LDcgQEAgdm9pZCBpbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudAogICAg
IGlmICghc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRyYW5zYWN0aW9uSW5Q
cm9ncmVzc011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHRy
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKIAogICAgIHNfdHJhbnNhY3Rpb25JblByb2dyZXNz
Q291bnRlcisrOwogICAgIGlmIChzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPT0gMSkK
QEAgLTY2LDcgKzYxLDcgQEAgdm9pZCBkZWNyZW1lbnRUcmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3Vu
dAogICAgIGlmICghc19zdGF0aWNTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRyYW5zYWN0
aW9uSW5Qcm9ncmVzc011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBs
b2NrKHRyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKIAogICAgIEFTU0VSVChzX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzc0NvdW50ZXIpOwogICAgIHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRl
ci0tOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiVVRleHRQcm92aWRlclVURjE2LmgiCiAjaW5jbHVkZSA8bXV0ZXg+
CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzY1
LDggKzc2Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQW5kU3dhcE5vblNoYXIKICNp
ZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKICAgICByZXR1cm4gV1RGOjp3ZWFrQ29tcGFyZUFu
ZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0
ZXJhdG9yKSwgZXhwZWN0ZWQsIG5ld1ZhbHVlKTsKICNlbHNlCi0gICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKHN0ZDo6bXV0ZXgsIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3JNdXRleCwgKCkpOwotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4KTsKKyAgICBzdGF0aWMgU3RhdGljTG9j
ayBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXg7CisgICAgc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY0xvY2s+IGxvY2tlcihub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0
ZXgpOwogICAgIGlmIChub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yICE9IGV4cGVjdGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvciA9IG5ld1ZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAg
LTEwNiwxNCArMTA3LDcgQEAgc3RydWN0IFRleHRDb2RlY0ZhY3RvcnkgewogdHlwZWRlZiBIYXNo
TWFwPGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgVGV4dEVuY29kaW5nTmFtZUhhc2g+IFRleHRF
bmNvZGluZ05hbWVNYXA7CiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIFRleHRDb2RlY0Zh
Y3Rvcnk+IFRleHRDb2RlY01hcDsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGVuY29kaW5nUmVnaXN0
cnlNdXRleCgpCi17Ci0gICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjb25zdHJ1Y3QgdGhpcyBtdXRl
eCBpbiBhIHRocmVhZCBzYWZlIHdheSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KLSAgICAvLyBpcyBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIGZvciBhbnkgcGFnZSBiZWZvcmUgaXQgaXMgdXNlZCBp
biB3b3JrZXIgdGhyZWFkcy4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4g
bXV0ZXg7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBlbmNvZGlu
Z1JlZ2lzdHJ5TXV0ZXg7CiAKIHN0YXRpYyBUZXh0RW5jb2RpbmdOYW1lTWFwKiB0ZXh0RW5jb2Rp
bmdOYW1lTWFwOwogc3RhdGljIFRleHRDb2RlY01hcCogdGV4dENvZGVjTWFwOwpAQCAtMjk0LDcg
KzI4OCw3IEBAIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMoKQogCiBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWMoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhlbmNvZGluZ1JlZ2lz
dHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soZW5jb2Rp
bmdSZWdpc3RyeU11dGV4KTsKIAogICAgIEFTU0VSVCh0ZXh0Q29kZWNNYXApOwogICAgIFRleHRD
b2RlY0ZhY3RvcnkgZmFjdG9yeSA9IHRleHRDb2RlY01hcC0+Z2V0KGVuY29kaW5nLm5hbWUoKSk7
CkBAIC0zMTAsNyArMzA0LDcgQEAgY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29k
aW5nTgogICAgIGlmICghdGV4dEVuY29kaW5nTmFtZU1hcCkKICAgICAgICAgYnVpbGRCYXNlVGV4
dENvZGVjTWFwcygpOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soZW5j
b2RpbmdSZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBs
b2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7CiAKICAgICBpZiAoY29uc3QgY2hhciogYXRvbWlj
TmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKSkKICAgICAgICAgcmV0dXJuIGF0
b21pY05hbWU7CkBAIC0zNzcsNyArMzcxLDcgQEAgdm9pZCBkdW1wVGV4dEVuY29kaW5nTmFtZU1h
cCgpCiAgICAgdW5zaWduZWQgc2l6ZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPnNpemUoKTsKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkR1bXBpbmcgJXUgZW50cmllcyBpbiBXZWJDb3JlOjp0ZXh0RW5j
b2RpbmdOYW1lTWFwLi4uXG4iLCBzaXplKTsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgVGV4dEVuY29k
aW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5iZWdp
bigpOwogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRleHRF
bmNvZGluZ05hbWVNYXAtPmVuZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHV0aWxp
dHk+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTQ2LDE3ICs0Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIHN0ZDo6bXV0ZXgmIHRocmVhZFNldE11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4
PiBtdXRleDsKLQotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0
ZXguY29uc3RydWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMg
U3RhdGljTG9jayB0aHJlYWRTZXRNdXRleDsKIAogc3RhdGljIEhhc2hTZXQ8V29ya2VyVGhyZWFk
Kj4mIHdvcmtlclRocmVhZHMoKQogewpAQCAtNjcsNyArNTgsNyBAQCBzdGF0aWMgSGFzaFNldDxX
b3JrZXJUaHJlYWQqPiYgd29ya2VyVGhyCiAKIHVuc2lnbmVkIFdvcmtlclRocmVhZDo6d29ya2Vy
VGhyZWFkQ291bnQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRo
cmVhZFNldE11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHRo
cmVhZFNldE11dGV4KTsKIAogICAgIHJldHVybiB3b3JrZXJUaHJlYWRzKCkuc2l6ZSgpOwogfQpA
QCAtMTA2LDE0ICs5NywxNCBAQCBXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBVUkwm
IHNjCiAgICAgLCBtX25vdGlmaWNhdGlvbkNsaWVudCgwKQogI2VuZGlmCiB7Ci0gICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodGhyZWFkU2V0TXV0ZXgoKSk7CisgICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodGhyZWFkU2V0TXV0ZXgpOwogCiAgICAgd29ya2Vy
VGhyZWFkcygpLmFkZCh0aGlzKTsKIH0KIAogV29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkK
IHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0aHJlYWRTZXRNdXRleCgp
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0aHJlYWRTZXRNdXRleCk7
CiAKICAgICBBU1NFUlQod29ya2VyVGhyZWFkcygpLmNvbnRhaW5zKHRoaXMpKTsKICAgICB3b3Jr
ZXJUaHJlYWRzKCkucmVtb3ZlKHRoaXMpOwpAQCAtMjIxLDcgKzIxMiw3IEBAIHZvaWQgV29ya2Vy
VGhyZWFkOjpzdG9wKCkKIAogdm9pZCBXb3JrZXJUaHJlYWQ6OnJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcygpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2sodGhyZWFkU2V0TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+
IGxvY2sodGhyZWFkU2V0TXV0ZXgpOwogCiAgICAgZm9yIChhdXRvKiB3b3JrZXJUaHJlYWQgOiB3
b3JrZXJUaHJlYWRzKCkpIHsKICAgICAgICAgd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRh
c2soW10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODg2MjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0MSBAQAorMjAxNS0wOC0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2Ygc3RkOjptdXRleC9zdGQ6OmNvbmRpdGlv
bl92YXJpYWJsZSB3aXRoIFdURjo6TG9jay9XVEY6OkNvbmRpdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTQwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpT
dG9yYWdlOjp0cmF2ZXJzZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpwcm9jZXNzSW5j
b21pbmdNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0
ZTo6ZGlzcGF0Y2hNZXNzYWdlcyk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OlN5bmNNZXNz
YWdlU3RhdGU6OmRpc3BhdGNoTWVzc2FnZUFuZFJlc2V0RGlkU2NoZWR1bGVEaXNwYXRjaE1lc3Nh
Z2VzRm9yQ29ubmVjdGlvbik6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRNZXNzYWdl
KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UpOgorICAgICAgICAo
SVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKyAgICAgICAgKElQQzo6
Q29ubmVjdGlvbjo6aW5zdGFsbEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFjayk6CisgICAgICAg
IChJUEM6OkNvbm5lY3Rpb246OnVuaW5zdGFsbEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246Omhhc0luY29taW5nU3luY01lc3NhZ2UpOgorICAg
ICAgICAoSVBDOjpDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpOgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChJUEM6OkNvbm5l
Y3Rpb246OmVucXVldWVJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
OjpkaXNwYXRjaE9uZU1lc3NhZ2UpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9u
Lmg6CisgICAgICAgICogU2hhcmVkL0Jsb2NraW5nUmVzcG9uc2VNYXAuaDoKKyAgICAgICAgKEJs
b2NraW5nUmVzcG9uc2VNYXA6OndhaXRGb3JSZXNwb25zZSk6CisgICAgICAgIChCbG9ja2luZ1Jl
c3BvbnNlTWFwOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoQmxvY2tpbmdSZXNwb25z
ZU1hcDo6Y2FuY2VsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5m
b0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9GaWxl
KToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5JbmZvKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJpbnRpbmdWaWV3IF9wcmVw
YXJlUERGRGF0YUZvclByaW50aW5nT25TZWNvbmRhcnlUaHJlYWRdKToKKyAgICAgICAgKHByZXBh
cmVEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICgtW1dLUHJpbnRp
bmdWaWV3IGtub3dzUGFnZVJhbmdlOl0pOgorCiAyMDE1LTA4LTE4ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkLCBhbmQgZml4IHRoZSB2
ZXJzaW9uIGNoZWNrLgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92
YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0x
MTksOCArMTIxLDggQEAgcHVibGljOgogICAgIGNvbnN0IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CiAg
ICAgY29uc3QgVHJhdmVyc2VIYW5kbGVyIGhhbmRsZXI7CiAKLSAgICBzdGQ6Om11dGV4IGFjdGl2
ZU11dGV4OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIGFjdGl2ZUNvbmRpdGlvbjsKKyAg
ICBMb2NrIGFjdGl2ZU11dGV4OworICAgIENvbmRpdGlvbiBhY3RpdmVDb25kaXRpb247CiAgICAg
dW5zaWduZWQgYWN0aXZlQ291bnQgeyAwIH07CiB9OwogCkBAIC03NzQsNyArNzc2LDcgQEAgdm9p
ZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYQogICAgICAgICAgICAgaWYgKHRy
YXZlcnNlT3BlcmF0aW9uLmZsYWdzICYgVHJhdmVyc2VGbGFnOjpTaGFyZUNvdW50KQogICAgICAg
ICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9iU3RvcmFnZS5zaGFyZUNvdW50KGJvZHlQ
YXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKSk7CiAKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7Cisg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24u
YWN0aXZlTXV0ZXgpOwogICAgICAgICAgICAgKyt0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb3Vu
dDsKIAogICAgICAgICAgICAgYXV0byBjaGFubmVsID0gSU9DaGFubmVsOjpvcGVuKHJlY29yZFBh
dGgsIElPQ2hhbm5lbDo6VHlwZTo6UmVhZCk7CkBAIC03OTcsOSArNzk5LDkgQEAgdm9pZCBTdG9y
YWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYQogICAgICAgICAgICAgICAgICAgICB0cmF2
ZXJzZU9wZXJhdGlvbi5oYW5kbGVyKCZyZWNvcmQsIGluZm8pOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRyYXZl
cnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CiAgICAgICAgICAg
ICAgICAgLS10cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKLSAgICAgICAgICAgICAgICB0
cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAg
ICAgICAgIHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhpbXVtUGFyYWxs
ZWxSZWFkQ291bnQgPSA1OwpAQCAtODA4LDcgKzgxMCw3IEBAIHZvaWQgU3RvcmFnZTo6dHJhdmVy
c2UoVHJhdmVyc2VGbGFncyBmbGEKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICAg
ICAgLy8gV2FpdCBmb3IgYWxsIHJlYWRzIHRvIGZpbmlzaC4KLSAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxzdGQ6Om11dGV4PiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2
ZU11dGV4KTsKICAgICAgICAgdHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlQ29uZGl0aW9uLndhaXQo
bG9jaywgWyZ0cmF2ZXJzZU9wZXJhdGlvbl0gewogICAgICAgICAgICAgcmV0dXJuICF0cmF2ZXJz
ZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBCaW5hcnlTZW1hcGhvcmUgbV93YWl0Rm9yU3lu
Y1JlcGx5U2VtYXBob3JlOwogCiAgICAgLy8gUHJvdGVjdHMgbV9kaWRTY2hlZHVsZURpc3BhdGNo
TWVzc2FnZXNXb3JrU2V0IGFuZCBtX21lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5
bmNSZXBseS4KLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAg
ICAgLy8gVGhlIHNldCBvZiBjb25uZWN0aW9ucyBmb3Igd2hpY2ggd2UndmUgc2NoZWR1bGVkIGEg
Y2FsbCB0byBkaXNwYXRjaE1lc3NhZ2VBbmRSZXNldERpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdl
c0ZvckNvbm5lY3Rpb24uCiAgICAgSGFzaFNldDxSZWZQdHI8Q29ubmVjdGlvbj4+IG1fZGlkU2No
ZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29ya1NldDsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIENv
bm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OnByb2NlCiAgICAgQ29ubmVjdGlvbkFuZEluY29t
aW5nTWVzc2FnZSBjb25uZWN0aW9uQW5kSW5jb21pbmdNZXNzYWdlIHsgY29ubmVjdGlvbiwgV1RG
Ojptb3ZlKG1lc3NhZ2UpIH07CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX211dGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2RpZFNjaGVkdWxlRGlzcGF0Y2hN
ZXNzYWdlc1dvcmtTZXQuYWRkKCZjb25uZWN0aW9uKS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAg
ICBSZWZQdHI8Q29ubmVjdGlvbj4gcHJvdGVjdGVkQ29ubmVjdGlvbigmY29ubmVjdGlvbik7CkBA
IC0xNTUsNyArMTU1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNw
YQogICAgIFZlY3RvcjxDb25uZWN0aW9uQW5kSW5jb21pbmdNZXNzYWdlPiBtZXNzYWdlc1RvRGlz
cGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgbV9tZXNzYWdlc1RvRGlzcGF0Y2hXaGls
ZVdhaXRpbmdGb3JTeW5jUmVwbHkuc3dhcChtZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdG
b3JTeW5jUmVwbHkpOwogICAgIH0KIApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgQ29ubmVjdGlv
bjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlzcGEKICAgICB9CiAKICAgICBpZiAoIW1lc3NhZ2VzVG9Q
dXRCYWNrLmlzRW1wdHkoKSkgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRl
eCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogbWVzc2FnZXNUb1B1dEJhY2spCiAg
ICAgICAgICAgICBtX21lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseS5h
cHBlbmQoV1RGOjptb3ZlKG1lc3NhZ2UpKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIENvbm5l
Y3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmRpc3BhCiB2b2lkIENvbm5lY3Rpb246OlN5bmNNZXNz
YWdlU3RhdGU6OmRpc3BhdGNoTWVzc2FnZUFuZFJlc2V0RGlkU2NoZWR1bGVEaXNwYXRjaE1lc3Nh
Z2VzRm9yQ29ubmVjdGlvbihDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewogICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBBU1NFUlQobV9kaWRT
Y2hlZHVsZURpc3BhdGNoTWVzc2FnZXNXb3JrU2V0LmNvbnRhaW5zKCZjb25uZWN0aW9uKSk7CiAg
ICAgICAgIG1fZGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29ya1NldC5yZW1vdmUoJmNvbm5l
Y3Rpb24pOwogICAgIH0KQEAgLTM2Myw3ICszNjMsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRN
ZXNzYWdlKHN0ZDo6dW5pcXVlCiAjZW5kaWYKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX291dGdvaW5nTWVzc2FnZXNNdXRleCk7CiAgICAg
ICAgIG1fb3V0Z29pbmdNZXNzYWdlcy5hcHBlbmQoV1RGOjptb3ZlKGVuY29kZXIpKTsKICAgICB9
CiAgICAgCkBAIC0zODgsNyArMzg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVy
PiBDb25uZWN0aQogCiAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgbWVzc2FnZSBpcyBhbHJl
YWR5IGluIHRoZSBpbmNvbWluZyBtZXNzYWdlcyBxdWV1ZS4KICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgp
OwogCiAgICAgICAgIGZvciAoYXV0byBpdCA9IG1faW5jb21pbmdNZXNzYWdlcy5iZWdpbigpLCBl
bmQgPSBtX2luY29taW5nTWVzc2FnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiYgbWVzc2FnZSA9ICppdDsKQEAg
LTQxNCw3ICs0MTQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3Rp
CiAgICAgV2FpdEZvck1lc3NhZ2VTdGF0ZSB3YWl0aW5nRm9yTWVzc2FnZShtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBtZXNzYWdlTmFtZSwgZGVzdGluYXRpb25JRCwgd2FpdEZvck1lc3NhZ2VGbGFncyk7
CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fd2Fp
dEZvck1lc3NhZ2VNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
d2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBoYXZp
bmcgbXVsdGlwbGUgY2xpZW50cyB3YWl0aW5nIGZvciBtZXNzYWdlcy4KICAgICAgICAgQVNTRVJU
KCFtX3dhaXRpbmdGb3JNZXNzYWdlKTsKQEAgLTQyMyw4ICs0MjMsOSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3RpCiAgICAgfQogCiAgICAgLy8gTm93IHdhaXQgZm9y
IGl0IHRvIGJlIHNldC4KKyAgICBDb25kaXRpb246OkNsb2NrOjp0aW1lX3BvaW50IGFic29sdXRl
VGltZW91dCA9IENvbmRpdGlvbjo6Q2xvY2s6Om5vdygpICsgdGltZW91dDsKICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0
Rm9yTWVzc2FnZU11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1f
d2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAgICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2Ut
PmRlY29kZXIpIHsKICAgICAgICAgICAgIGF1dG8gZGVjb2RlciA9IFdURjo6bW92ZShtX3dhaXRp
bmdGb3JNZXNzYWdlLT5kZWNvZGVyKTsKQEAgLTQzMyw5ICs0MzQsOSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3RpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cg
d2Ugd2FpdC4KLSAgICAgICAgc3RkOjpjdl9zdGF0dXMgc3RhdHVzID0gbV93YWl0Rm9yTWVzc2Fn
ZUNvbmRpdGlvbi53YWl0X2Zvcihsb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgYm9vbCBkaWRUaW1l
b3V0ID0gIW1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ud2FpdFVudGlsKGxvY2ssIGFic29sdXRl
VGltZW91dCk7CiAgICAgICAgIC8vIFdlIHRpbWVkIG91dCwgbG9zdCBvdXIgY29ubmVjdGlvbiwg
b3IgYSBzeW5jIG1lc3NhZ2UgY2FtZSBpbiB3aXRoIEludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNz
YWdlQXJyaXZlcywgc28gc3RvcCB3YWl0aW5nLgotICAgICAgICBpZiAoc3RhdHVzID09IHN0ZDo6
Y3Zfc3RhdHVzOjp0aW1lb3V0IHx8IG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5n
SW50ZXJydXB0ZWQpCisgICAgICAgIGlmIChkaWRUaW1lb3V0IHx8IG1fd2FpdGluZ0Zvck1lc3Nh
Z2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJydXB0ZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTY3MCw3ICs2NzEsNyBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01l
c3NhZ2UoCiAjZW5kaWYKIAogICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpIHsKLSAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNz
YWdlQ2FsbGJhY2tNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
aW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgpOwogCiAgICAgICAgIGZvciAoYXV0byYg
Y2FsbGJhY2sgOiBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja3MudmFsdWVzKCkpCiAgICAg
ICAgICAgICBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja1F1ZXVlLT5kaXNwYXRjaChjYWxs
YmFjayk7CkBAIC02ODYsMTggKzY4NywxOCBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNv
bWluZ01lc3NhZ2UoCiAKICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3YWl0aW5nIGZvciB0aGlzIG1l
c3NhZ2UuCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X3dhaXRGb3JNZXNzYWdlTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwogCiAgICAgICAgIGlmIChtX3dhaXRpbmdGb3JNZXNz
YWdlICYmIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUgPT0gbWVzc2Fn
ZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpICYmIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VO
YW1lID09IG1lc3NhZ2UtPm1lc3NhZ2VOYW1lKCkgJiYgbV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVz
dGluYXRpb25JRCA9PSBtZXNzYWdlLT5kZXN0aW5hdGlvbklEKCkpIHsKICAgICAgICAgICAgIG1f
d2FpdGluZ0Zvck1lc3NhZ2UtPmRlY29kZXIgPSBXVEY6Om1vdmUobWVzc2FnZSk7CiAgICAgICAg
ICAgICBBU1NFUlQobV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVjb2Rlcik7Ci0gICAgICAgICAgICBt
X3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fd2Fp
dEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZSAmJiAobV93YWl0aW5n
Rm9yTWVzc2FnZS0+d2FpdEZvck1lc3NhZ2VGbGFncyAmIEludGVycnVwdFdhaXRpbmdJZlN5bmNN
ZXNzYWdlQXJyaXZlcykgJiYgbWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpKSB7CiAgICAgICAgICAg
ICBtX3dhaXRpbmdGb3JNZXNzYWdlLT5tZXNzYWdlV2FpdGluZ0ludGVycnVwdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAg
ICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtNzA2LDcgKzcwNyw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0lu
Y29taW5nTWVzc2FnZSgKIAogdWludDY0X3QgQ29ubmVjdGlvbjo6aW5zdGFsbEluY29taW5nU3lu
Y01lc3NhZ2VDYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNhbGxiYWNrKQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNh
bGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdT
eW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXgpOwogCiAgICAgbV9uZXh0SW5jb21pbmdTeW5jTWVzc2Fn
ZUNhbGxiYWNrSUQrKzsKIApAQCAtNzIwLDEzICs3MjEsMTMgQEAgdWludDY0X3QgQ29ubmVjdGlv
bjo6aW5zdGFsbEluY29taW5nU3luYwogCiB2b2lkIENvbm5lY3Rpb246OnVuaW5zdGFsbEluY29t
aW5nU3luY01lc3NhZ2VDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNr
TXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdTeW5jTWVz
c2FnZUNhbGxiYWNrTXV0ZXgpOwogICAgIG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrcy5y
ZW1vdmUoY2FsbGJhY2tJRCk7CiB9CiAKIGJvb2wgQ29ubmVjdGlvbjo6aGFzSW5jb21pbmdTeW5j
TWVzc2FnZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNv
bWluZ01lc3NhZ2VzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5j
b21pbmdNZXNzYWdlc011dGV4KTsKIAogICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1faW5jb21p
bmdNZXNzYWdlcykgewogICAgICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpKQpAQCAt
NzYzLDExICs3NjQsMTEgQEAgdm9pZCBDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UoKQog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKICAgICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3Nh
Z2UpCiAgICAgICAgICAgICBtX3dhaXRpbmdGb3JNZXNzYWdlLT5tZXNzYWdlV2FpdGluZ0ludGVy
cnVwdGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3Rp
ZnlfYWxsKCk7CisgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKIAog
ICAgIGlmIChtX2RpZENsb3NlT25Db25uZWN0aW9uV29ya1F1ZXVlQ2FsbGJhY2spCiAgICAgICAg
IG1fZGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWVDYWxsYmFjayh0aGlzKTsKQEAgLTgwMyw3
ICs4MDQsNyBAQCB2b2lkIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2VzKCkKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VFbmNvZGVyPiBtZXNzYWdlOwogCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fb3V0Z29pbmdN
ZXNzYWdlc011dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
b3V0Z29pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgICAgIGlmIChtX291dGdvaW5nTWVzc2Fn
ZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbWVzc2Fn
ZSA9IG1fb3V0Z29pbmdNZXNzYWdlcy50YWtlRmlyc3QoKTsKQEAgLTg2Miw3ICs4NjMsNyBAQCB2
b2lkIENvbm5lY3Rpb246OmRpZEZhaWxUb1NlbmRTeW5jTWVzc2FnCiB2b2lkIENvbm5lY3Rpb246
OmVucXVldWVJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBp
bmNvbWluZ01lc3NhZ2UpCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgbV9pbmNv
bWluZ01lc3NhZ2VzLmFwcGVuZChXVEY6Om1vdmUoaW5jb21pbmdNZXNzYWdlKSk7CiAgICAgfQog
CkBAIC05MTgsNyArOTE5LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpkaXNwYXRjaE9uZU1lc3NhZ2Uo
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gbWVzc2FnZTsKIAogICAgIHsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ01lc3Nh
Z2VzTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5n
TWVzc2FnZXNNdXRleCk7CiAgICAgICAgIGlmIChtX2luY29taW5nTWVzc2FnZXMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzVHlwZS5oIgogI2lu
Y2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CisjaW5jbHVkZSA8
d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTI1OSwxNSArMjU5LDE1IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZTsKIAogICAgIC8v
IEluY29taW5nIG1lc3NhZ2VzLgotICAgIHN0ZDo6bXV0ZXggbV9pbmNvbWluZ01lc3NhZ2VzTXV0
ZXg7CisgICAgTG9jayBtX2luY29taW5nTWVzc2FnZXNNdXRleDsKICAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+PiBtX2luY29taW5nTWVzc2FnZXM7CiAKICAgICAvLyBP
dXRnb2luZyBtZXNzYWdlcy4KLSAgICBzdGQ6Om11dGV4IG1fb3V0Z29pbmdNZXNzYWdlc011dGV4
OworICAgIExvY2sgbV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXg7CiAgICAgRGVxdWU8c3RkOjp1bmlx
dWVfcHRyPE1lc3NhZ2VFbmNvZGVyPj4gbV9vdXRnb2luZ01lc3NhZ2VzOwogICAgIAotICAgIHN0
ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb247Ci0gICAgc3Rk
OjptdXRleCBtX3dhaXRGb3JNZXNzYWdlTXV0ZXg7CisgICAgQ29uZGl0aW9uIG1fd2FpdEZvck1l
c3NhZ2VDb25kaXRpb247CisgICAgTG9jayBtX3dhaXRGb3JNZXNzYWdlTXV0ZXg7CiAKICAgICBX
YWl0Rm9yTWVzc2FnZVN0YXRlKiBtX3dhaXRpbmdGb3JNZXNzYWdlOwogCkBAIC0zMDcsNyArMzA3
LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNlY29uZGFyeVRo
cmVhZFBlbmRpbmdTeW5jUmVwbHkqPiBTZWNvbmRhcnlUaHJlYWRQZW5kaW5nU3luY1JlcGx5TWFw
OwogICAgIFNlY29uZGFyeVRocmVhZFBlbmRpbmdTeW5jUmVwbHlNYXAgbV9zZWNvbmRhcnlUaHJl
YWRQZW5kaW5nU3luY1JlcGx5TWFwOwogCi0gICAgc3RkOjptdXRleCBtX2luY29taW5nU3luY01l
c3NhZ2VDYWxsYmFja011dGV4OworICAgIExvY2sgbV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJh
Y2tNdXRleDsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBt
X2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja3M7CiAgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9p
bmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tRdWV1ZTsKICAgICB1aW50NjRfdCBtX25leHRJbmNv
bWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tJRCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9CbG9ja2luZ1Jlc3BvbnNlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL0Jsb2NraW5nUmVzcG9uc2VNYXAuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0Jsb2NraW5nUmVzcG9uc2VNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTQwLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiB3YWl0Rm9yUmVzcG9uc2UodWludDY0X3QgcmVx
dWVzdElEKQogICAgIHsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgICAgICAgICAgaWYgKG1fY2Fu
Y2VsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NiwyNiArNTcsMjYg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgcmVxdWVz
dElELCBzdGQ6OnVuaXF1ZV9wdHI8VD4gcmVzcG9uc2UpCiAgICAgewotICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAgIEFTU0VSVCghbV9yZXNwb25zZXMuY29u
dGFpbnMocmVxdWVzdElEKSk7CiAKICAgICAgICAgbV9yZXNwb25zZXMuc2V0KHJlcXVlc3RJRCwg
V1RGOjptb3ZlKHJlc3BvbnNlKSk7CiAKLSAgICAgICAgLy8gRklYTUU6IFdha2luZyB1cCBhbGwg
dGhyZWFkcyBpcyBxdWl0ZSBpbmVmZmljaWVudC4KLSAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5
X2FsbCgpOworICAgICAgICAvLyBGSVhNRTogQ291bGQgZ2V0IGEgc2xpZ2h0IHNwZWVkLXVwIGZy
b20gdXNpbmcgbm90aWZ5T25lKCkuCisgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwog
ICAgIH0KIAogICAgIHZvaWQgY2FuY2VsKCkKICAgICB7CiAgICAgICAgIG1fY2FuY2VsZWQgPSB0
cnVlOwogCi0gICAgICAgIC8vIEZJWE1FOiBXYWtpbmcgdXAgYWxsIHRocmVhZHMgaXMgcXVpdGUg
aW5lZmZpY2llbnQuCi0gICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICAgICAg
Ly8gRklYTUU6IENvdWxkIGdldCBhIHNsaWdodCBzcGVlZC11cCBmcm9tIHVzaW5nIG5vdGlmeU9u
ZSgpLgorICAgICAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgc3RkOjptdXRleCBtX211dGV4OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1f
Y29uZGl0aW9uOworICAgIExvY2sgbV9tdXRleDsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247
CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8VD4+IG1fcmVzcG9uc2Vz
OwogICAgIGJvb2wgbV9jYW5jZWxlZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5m
b0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBQbHVnaW5JbmZvQ2Fj
aGU6On5QbHVnaW5JbmZvQ2FjaGUoKQogCiB2b2lkIFBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmls
ZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBnc2l6ZSBkYXRh
TGVuZ3RoOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGF0YShnX2tleV9maWxlX3RvX2RhdGEobV9j
YWNoZUZpbGUuZ2V0KCksICZkYXRhTGVuZ3RoLCBudWxscHRyKSk7CkBAIC0xNDIsNyArMTQyLDcg
QEAgdm9pZCBQbHVnaW5JbmZvQ2FjaGU6OnVwZGF0ZVBsdWdpbkluZm8oYwogICAgIGlmIChtX2Nh
Y2hlUGF0aCAmJiAhbV9yZWFkT25seU1vZGUpIHsKICAgICAgICAgLy8gU2F2ZSB0aGUgY2FjaGUg
ZmlsZSBpbiBhbiBpZGxlIHRvIG1ha2Ugc3VyZSBpdCBoYXBwZW5zIGluIHRoZSBtYWluIHRocmVh
ZCBhbmQKICAgICAgICAgLy8gaXQncyBkb25lIG9ubHkgb25jZSB3aGVuIHRoaXMgaXMgY2FsbGVk
IG11bHRpcGxlIHRpbWVzIGluIGEgdmVyeSBzaG9ydCB0aW1lLgotICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAgIGlmIChtX3NhdmVUb0ZpbGVJZGxlLmlzU2No
ZWR1bGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgJKHJldmlz
aW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVn
aW5JbmZvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiUGx1Z2luTW9kdWxlSW5mby5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL2ds
aWIvR01haW5Mb29wU291cmNlLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgpA
QCAtNTUsNyArNTYsNyBAQCBwcml2YXRlOgogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbV9jYWNoZVBh
dGg7CiAgICAgR01haW5Mb29wU291cmNlIG1fc2F2ZVRvRmlsZUlkbGU7CiAgICAgYm9vbCBtX3Jl
YWRPbmx5TW9kZTsKLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDggQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0SGFzaC5oPgogI2ltcG9y
dCA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2ltcG9ydCA8d3RmL0NvbmRpdGlvbi5oPgorI2ltcG9y
dCA8d3RmL0xvY2suaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9W
ZWN0b3IuaD4KIApAQCAtNTcsOCArNTksOCBAQCBAaW50ZXJmYWNlIFdLUHJpbnRpbmdWaWV3IDog
TlNWaWV3IHsKICAgICB1aW50NjRfdCBfZXhwZWN0ZWRQcmludENhbGxiYWNrOwogCiAgICAgQk9P
TCBfaXNQcmludGluZ0Zyb21TZWNvbmRhcnlUaHJlYWQ7Ci0gICAgc3RkOjptdXRleCBfcHJpbnRp
bmdDYWxsYmFja011dGV4OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIF9wcmludGluZ0Nh
bGxiYWNrQ29uZGl0aW9uOworICAgIExvY2sgX3ByaW50aW5nQ2FsbGJhY2tNdXRleDsKKyAgICBD
b25kaXRpb24gX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb247CiAKICAgICBOU1RpbWVyICpfYXV0
b2Rpc3BsYXlSZXN1bWVUaW1lcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tQcmludGluZ1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjQyLDExICsyNDIsMTEgQEAgLSAodm9pZClfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2Vj
bwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBpZiAoIV93ZWJGcmFtZS0+
cGFnZSgpKSB7Ci0gICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUo
KTsKKyAgICAgICAgX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhfcHJpbnRpbmdDYWxsYmFja011dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhfcHJpbnRpbmdDYWxsYmFja011dGV4KTsKIAogICAgIEFTU0VSVChbc2VsZiBfaGFzUGFnZVJl
Y3RzXSk7CiAgICAgQVNTRVJUKF9wcmludGVkUGFnZXNEYXRhLmlzRW1wdHkoKSk7CkBAIC0yNzgs
NyArMjc4LDcgQEAgLSAodm9pZClfcHJlcGFyZVBERkRhdGFGb3JQcmludGluZ09uU2VjbwogICAg
ICAgICAgICAgaWYgKGRhdGEpCiAgICAgICAgICAgICAgICAgdmlldy0+X3ByaW50ZWRQYWdlc0Rh
dGEuYXBwZW5kKGRhdGEtPmJ5dGVzKCksIGRhdGEtPnNpemUoKSk7CiAgICAgICAgICAgICB2aWV3
LT5fZXhwZWN0ZWRQcmludENhbGxiYWNrID0gMDsKLSAgICAgICAgICAgIHZpZXctPl9wcmludGlu
Z0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIHZpZXctPl9wcmlu
dGluZ0NhbGxiYWNrQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAgICAgfSk7CiAg
ICAgX2V4cGVjdGVkUHJpbnRDYWxsYmFjayA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CkBAIC0z
NTcsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZURhdGFGb3JQcmludGluZ09uU2Vjbwog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBXS1ByaW50aW5nVmlldyAqdmll
dyA9IHN0YXRpY19jYXN0PFdLUHJpbnRpbmdWaWV3ICo+KHVudHlwZWRDb250ZXh0KTsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh2aWV3LT5fcHJpbnRpbmdDYWxsYmFja011
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayh2aWV3LT5fcHJpbnRpbmdDYWxs
YmFja011dGV4KTsKIAogICAgIC8vIFdlIG1heSBoYXZlIHJlY2VpdmVkIHBhZ2UgcmVjdHMgd2hp
bGUgYSBtZXNzYWdlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB0cmF2ZWxlZCBmcm9tIHNlY29uZGFy
eSB0aHJlYWQgdG8gbWFpbiBvbmUuCiAgICAgaWYgKFt2aWV3IF9oYXNQYWdlUmVjdHNdKSB7CkBA
IC0zOTUsNyArMzk1LDcgQEAgLSAoQk9PTClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBvaW50ZXIp
cgogICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBfcHJpbnRpbmdQYWdlUmVjdHMuc2l6
ZSgpKTsKICAgICBlbHNlIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKICAgICAgICAgQVNTRVJU
KCFbc2VsZiBfaXNQcmludGluZ1ByZXZpZXddKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPExvY2s+IGxvY2soX3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CiAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQocHJlcGFyZURhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhyZWFkLCBz
ZWxmKTsKICAgICAgICAgX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ud2FpdChsb2NrKTsKICAg
ICAgICAgKnJhbmdlID0gTlNNYWtlUmFuZ2UoMSwgX3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259345</attachid>
            <date>2015-08-18 20:50:32 -0700</date>
            <delta_ts>2015-08-18 21:21:21 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121031</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBhbGwgdXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdp
dGggV1RGOjpMb2NrL1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6
CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW06CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVnaXN0ZXJEZWJ1Z2dhYmxlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1dG9t
YXRpY0luc3BlY3RDYW5kaWRhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0
b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rvcjo6c2V0dXBGYWlsZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3I6OnNldHVwQ29tcGxldGVkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3Rv
cCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0
aW9uSWZOZWVkZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6eHBjQ29ubmVjdGlvblJlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3Rvcjo6eHBjQ29ubmVjdGlvbkZhaWxlZCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEluZGljYXRlTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRQcm94eUFwcGxpY2F0aW9uU2V0dXBN
ZXNzYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbjo6Y2xvc2VGcm9tTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmRlc2VyaWFsaXplTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsZUV2ZW50KToKKwog
MjAxNS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBJbnRyb2R1Y2Ugbm9uLXVzZXItb2JzZXJ2YWJsZSBQcm9taXNlIGZ1bmN0aW9ucyB0byB1
c2UgUHJvbWlzZXMgaW50ZXJuYWxseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogI2lt
cG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwpAQCAtMTA4LDcgKzEwOSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gQW55IGRlYnVnZ2FibGUgY2FuIHNlbmQgbWVzc2FnZXMgb3Zl
ciB0aGUgWFBDIGNvbm5lY3Rpb24uCiAgICAgLy8gU28gbG9jayBhY2Nlc3MgdG8gYWxsIG1hcHMg
YW5kIHN0YXRlIGFzIHRoZXkgY2FuIGNoYW5nZQogICAgIC8vIGZyb20gYW55IHRocmVhZC4KLSAg
ICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjpwYWlyPFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqLCBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlSW5mbz4+IG1fZGVidWdnYWJsZU1hcDsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25NYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9S
ZW1vdGVJbnNwZWN0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB1bnNpZ25lZCBSZW1vdGVJbnNwZWN0
b3I6Om5leHRBdmFpbGFibGVJCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWdpc3RlckRlYnVn
Z2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBuZXh0
QXZhaWxhYmxlSWRlbnRpZmllcigpOwogICAgIGRlYnVnZ2FibGUtPnNldElkZW50aWZpZXIoaWRl
bnRpZmllcik7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlZ2lz
dGVyRGVidWdnYWJsZQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dW5yZWdpc3RlckRlYnVnZ2Fi
bGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dh
YmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQpAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWIKIAogdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OnVwZGF0ZURlYnVnZ2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSog
ZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFp
ZGVudGlmaWVyKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRh
dGVEZWJ1Z2dhYmxlKFIKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRhdGVEZWJ1Z2dhYmxlQXV0
b21hdGljSW5zcGVjdENhbmRpZGF0ZShSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKiBkZWJ1Z2dh
YmxlKQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7
CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFJlbW90
ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAKICAgICAgICAgLy8gSW4gY2FzZSBkZWJ1
Z2dlcnMgZmFpbCB0byByZXNwb25kLCBvciB3ZSBjYW5ub3QgY29ubmVjdCB0byB3ZWJpbnNwZWN0
b3JkLCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIGFmdGVyIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUu
CiAgICAgICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1cs
IDAuOCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hf
UVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fYXV0b21hdGljSW5zcGVj
dGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIgPT0gaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiU2tpcHBpbmcgQXV0b21hdGljIEluc3BlY3Rpb24gQ2FuZGlkYXRlIHdpdGgg
cGFnZUlkKCV1KSBiZWNhdXNlIHdlIGZhaWxlZCB0byByZWNlaXZlIGEgcmVzcG9uc2UgaW4gdGlt
ZS4iLCBtX2F1dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyKTsKICAgICAgICAg
ICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVzZWQgPSBmYWxzZTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAgICAgZGVi
dWdnYWJsZS0+cGF1c2VXYWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbigpOwogCiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICAgICAgQVNTRVJU
KG1fYXV0b21hdGljSW5zcGVjdGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIpOwogICAgICAgICBtX2F1
dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyID0gMDsKQEAgLTI0NSw3ICsyNDUs
NyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZEF1dG9tYXRpY0luc3BlCiAKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQodW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogCiAgICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAg
LTI2NSw3ICsyNjUsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1JlbW90
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ25lZCBpZGVudGlmaWVy
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9jb25uZWN0aW9u
TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgUmVtb3Rl
SW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNl
dHVwQ29tcGxldGVkKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tdXRleCk7CiAKICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2F1dG9tYXRpY0luc3BlY3Rp
b25DYW5kaWRhdGVJZGVudGlmaWVyKQogICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVz
ZWQgPSBmYWxzZTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbW90ZUluc3BlY3Rvcjo6d2Fp
dGluZ0ZvckF1dG9tYXRpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdGFydCgpCiB7Ci0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KCkKIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3AoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbXV0ZXgpOwogCiAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7CiB9CkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9w
UwogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0aW9uSWZOZWVkZWQoKQog
ewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgaWYgKG1feHBjQ29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVtb3RlSW5z
cGVjdG9yOjpzZXR1cFhQQ0Nvbm5lY3Rpb24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWRfdCBwaWQsIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1
ZGl0RGF0YSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIGlmICht
X3BhcmVudFByb2Nlc3NJZGVudGlmaWVyIHx8IG1fcGFyZW50UHJvY2Vzc0F1ZGl0RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
ZXRQYXJlbnRQcm9jZXNzSW4KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnhwY0Nvbm5lY3Rpb25S
ZWNlaXZlZE1lc3NhZ2UoUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbiosIE5TU3RyaW5nICpt
ZXNzYWdlTmFtZSwgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX211dGV4KTsKIAogICAgIGlmIChbbWVzc2FnZU5hbWUgaXNFcXVhbFRvU3RyaW5nOldJ
UlBlcm1pc3Npb25EZW5pZWRdKSB7CiAgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpY
UENNZXNzYWdlKTsKQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6eHBj
Q29ubmVjdGlvblJlY2VpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp4cGNDb25uZWN0aW9uRmFp
bGVkKFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBBU1NFUlQoY29ubmVjdGlvbiA9PSBtX3hw
Y0Nvbm5lY3Rpb24pOwogICAgIGlmIChjb25uZWN0aW9uICE9IG1feHBjQ29ubmVjdGlvbikKQEAg
LTUyMiw3ICs1MjIsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKCkK
IAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMC4yICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBpZiAobV9w
dXNoU2NoZWR1bGVkKQogICAgICAgICAgICAgcHVzaExpc3RpbmdOb3coKTsKICAgICB9KTsKQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRJbmRpY2F0ZU1l
CiAgICAgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKF57CiAgICAg
ICAgIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqIGRlYnVnZ2FibGUgPSBudWxscHRyOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgICAgICBhdXRvIGl0ID0gbV9kZWJ1Z2dhYmxlTWFwLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgICAgICAgICBpZiAoaXQgPT0gbV9kZWJ1Z2dhYmxlTWFwLmVuZCgpKQpAQCAtNjcyLDcg
KzY3Miw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZFByb3h5QXBwbGkKICAgICAg
ICAgLy8gV2FpdCBhIGJpdCBmb3IgdGhlIGluZm9ybWF0aW9uLCBidXQgZ2l2ZSB1cCBhZnRlciBh
IHNlY29uZC4KICAgICAgICAgbV9zaG91bGRTZW5kUGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uID0g
dHJ1ZTsKICAgICAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1F
X05PVywgMSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFU
Q0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbikKICAgICAgICAgICAgICAgICBzdG9wSW50ZXJuYWwoU3Rv
cFNvdXJjZTo6WFBDTWVzc2FnZSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb25faAogCiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2lt
cG9ydCA8bXV0ZXg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KIApAQCAt
NjIsNyArNjIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gV2UgaGFuZGxlIFhQQyBldmVudHMgb24g
dGhlIHF1ZXVlLCBidXQgYSBjbGllbnQgbWF5IGNhbGwgY2xvc2UoKSBvbiBhbnkgcXVldWUuCiAg
ICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgbV9jbGllbnQgaXMgdGhyZWFkIHNhZmUgYW5kIGltbWVk
aWF0ZWx5IGNsZWFyZWQgaW4gY2xvc2UoKS4KLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAg
TG9jayBtX211dGV4OwogCiAgICAgeHBjX2Nvbm5lY3Rpb25fdCBtX2Nvbm5lY3Rpb247CiAgICAg
ZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8bXV0ZXg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBv
cnQgPHd0Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgpAQCAtNzksNyArODEsNyBAQCBSZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uOjp+UmVtb3RlSW5zCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bjo6Y2xvc2UoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGNsb3Nl
RnJvbU1lc3NhZ2UoKTsKIH0KIApAQCAtODksNyArOTEsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmNsb3NlCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogCiAgICAgZGlz
cGF0Y2hfYXN5bmMobV9xdWV1ZSwgXnsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0
ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogICAgICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBvbmUgbGFzdCBYUENfRVJST1Jf
Q09OTkVDVElPTl9JTlZBTElEIGV2ZW50IG9uIHRoZSBxdWV1ZSBhbmQgZGVyZWYgdXMuCiAgICAg
ICAgIGNsb3NlT25RdWV1ZSgpOwogICAgIH0pOwpAQCAtMTE2LDcgKzExOCw3IEBAIE5TRGljdGlv
bmFyeSAqUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGkKIAogICAgIHhwY19vYmplY3RfdCB4cGNE
aWN0aW9uYXJ5ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3ZhbHVlKG9iamVjdCwgUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvblNlcmlhbGl6ZWRNZXNzYWdlS2V5KTsKICAgICBpZiAoIXhwY0RpY3Rp
b25hcnkgfHwgeHBjX2dldF90eXBlKHhwY0RpY3Rpb25hcnkpICE9IFhQQ19UWVBFX0RJQ1RJT05B
UlkpIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBp
ZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+eHBjQ29ubmVjdGlvblVuaGFuZGxl
ZE1lc3NhZ2UodGhpcywgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEzMSw3ICsx
MzMsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsCiB7CiAgICAg
aWYgKHhwY19nZXRfdHlwZShvYmplY3QpID09IFhQQ19UWVBFX0VSUk9SKSB7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnhwY0Nvbm5lY3Rp
b25GYWlsZWQodGhpcyk7CiAKQEAgLTE1NCw3ICsxNTYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmhhbmRsCiAKICAgICBOU1N0cmluZyAqbWVzc2FnZSA9IFtkYXRhRGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbk1lc3NhZ2VO
YW1lS2V5XTsKICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW2RhdGFEaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uVXNlckluZm9LZXldOwotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAg
bV9jbGllbnQtPnhwY0Nvbm5lY3Rpb25SZWNlaXZlZE1lc3NhZ2UodGhpcywgbWVzc2FnZSwgdXNl
ckluZm8pOwogfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODYyMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0
ZDo6bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25k
aXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODE0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFs
c28gYmVlZiB1cCBDb25kaXRpb24gYnkgZ2l2aW5nIGl0IGEgU3RhdGljQ29uZGl0aW9uIHZhcmlh
bnQuCisKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAgICAgIChXVEY6OkNvbmRpdGlv
bkJhc2U6Om5vdGlmeUFsbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JT
ZWNvbmRzSW1wbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OmFic29sdXRlRnJvbVJl
bGF0aXZlKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uOjpDb25kaXRpb24pOgorICAgICAgICAo
V1RGOjpDb25kaXRpb246Om5vdGlmeUFsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkNvbmRp
dGlvbjo6d2FpdEZvclNlY29uZHNJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Q29uZGl0
aW9uOjphYnNvbHV0ZUZyb21SZWxhdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcDoKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmNw
cDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6ZHVtcFN0YXRzKToKKyAgICAgICAgKFdU
Rjo6aGFzaFRhYmxlU3RhdHNNdXRleCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJs
ZS5oOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6YWRkSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgICogd3RmL0xv
Y2suaDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0
aW9uUXVldWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmNhbmNl
bENhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjptYWluVGhyZWFkRnVuY3Rpb25RdWV1
ZU11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAg
IChXVEY6OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAg
ICAgIChXVEY6OlN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6OkNoZWNrUG9pbnQpOgorICAgICAgICAo
V1RGOjpTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludDo6TGF5b3V0Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQ6On5MYXlvdXRDaGVja1BvaW50KToKKyAgICAgICAgKFdURjo6U3RhY2tT
dGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1N0YWNrU3RhdHMuaDoK
KyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlY2tQ
b2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6
U3RhY2tTdGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAg
ICAgICogd3RmL21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbToKKyAgICAgICAg
KFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmxvY2tBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleCk6CisgICAgICAgIChXVEY6OnVubG9ja0F0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpY011dGV4KToKKyAgICAgICAgKFdURjo6YXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5n
U3RyaW5nKToKKyAgICAgICAgKFdURjo6dW5kZXJseWluZ1N0cmluZ3MpOgorICAgICAgICAoV1RG
OjpTdHJpbmdWaWV3OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6YWRv
cHRVbmRlcmx5aW5nU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0VW5kZXJs
eWluZ1N0cmluZyk6CisgICAgICAgIChXVEY6OnVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHA6CisgICAgICAg
IChXVEY6OkNvbGxhdG9yOjpDb2xsYXRvcik6CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjp+Q29s
bGF0b3IpOgorICAgICAgICAoV1RGOjpjYWNoZWRDb2xsYXRvck11dGV4KTogRGVsZXRlZC4KKwog
MjAxNS0wOC0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgInBsYXRmb3JtIHRleHQgdHJhY2sgbWVudSIKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5o
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDI2IEBACiAKICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFya2lu
Z0xvdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgQ29uZGl0aW9uIHsKLXB1YmxpYzoK
Ky8vIFRoaXMgaXMgYSBjb25kaXRpb24gdmFyaWFibGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdXNl
IHdpdGggYW55IGxvY2stbGlrZSBvYmplY3QsIGluY2x1ZGluZworLy8gb3VyIG93biBXVEY6Okxv
Y2suIEl0IGZlYXR1cmVzIHN0YW5kYXJkIHdhaXQoKS9ub3RpZnlPbmUoKS9ub3RpZnlBbGwoKSBt
ZXRob2RzIGluIGFkZGl0aW9uIHRvCisvLyBhIHZhcmlldHkgb2Ygd2FpdC13aXRoLXRpbWVvdXQg
bWV0aG9kcy4gVGhpcyBpbmNsdWRlcyBtZXRob2RzIHRoYXQgdXNlIFdURidzIG93biBub3Rpb24g
b2YKKy8vIHRpbWUsIGxpa2Ugd2FsbC1jbG9jayB0aW1lIChpLmUuIGN1cnJlbnRUaW1lKCkpIGFu
ZCBtb25vdG9uaWMgdGltZSAoaS5lLgorLy8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
LiBUaGlzIGlzIGEgdmVyeSBlZmZpY2llbnQgY29uZGl0aW9uIHZhcmlhYmxlLiBJdCBvbmx5IHJl
cXVpcmVzCisvLyBvbmUgYnl0ZSBvZiBtZW1vcnkuIG5vdGlmeU9uZSgpIGFuZCBub3RpZnlBbGwo
KSByZXF1aXJlIGp1c3QgYSBsb2FkIGFuZCBicmFuY2ggZm9yIHRoZSBmYXN0CisvLyBjYXNlIHdo
ZXJlIG5vIHRocmVhZCBpcyB3YWl0aW5nLiBUaGlzIGNvbmRpdGlvbiB2YXJpYWJsZSwgd2hlbiB1
c2VkIHdpdGggV1RGOjpMb2NrLCBjYW4KKy8vIG91dHBlcmZvcm0gYSBzeXN0ZW0gY29uZGl0aW9u
IHZhcmlhYmxlIGFuZCBsb2NrIGJ5IHVwIHRvIDU4eC4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3
aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0
aWNhbGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgor
c3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIHR5cGVkZWYgUGFya2luZ0xvdDo6Q2xvY2sgQ2xv
Y2s7CiAgICAgCi0gICAgQ29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1faGFzV2FpdGVycy5z
dG9yZShmYWxzZSk7Ci0gICAgfQotCiAgICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hp
bGUgcmVsZWFzaW5nIHRoZSBnaXZlbiBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0
IGJlZm9yZQogICAgIC8vIHBhcmtpbmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVy
bnMgdHJ1ZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBzb21lIGNhbGwgdG8KICAgICAvLyBub3RpZnlP
bmUoKSBvciBub3RpZnlBbGwoKS4gUmV0dXJucyBmYWxzZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBh
IHRpbWVvdXQuIE5vdGUgdGhhdCB0aGlzIGZvcm0KQEAgLTE3Miw3ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9oYXNXYWl0ZXJzKTsKICAgICB9CiAg
ICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIGJvb2wgd2FpdEZvclNlY29uZHNJbXBsKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgcmVs
YXRpdmVUaW1lb3V0U2Vjb25kcykKICAgICB7CkBAIC0yMjQsMTEgKzIyOSwyMyBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Cit9OyAgICAKKworY2xh
c3MgQ29uZGl0aW9uIDogcHVibGljIENvbmRpdGlvbkJhc2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbmRpdGlvbik7CitwdWJsaWM6CisgICAgQ29uZGl0aW9uKCkKKyAgICB7CisgICAg
ICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7CisgICAgfQogfTsKIAordHlwZWRlZiBDb25k
aXRpb25CYXNlIFN0YXRpY0NvbmRpdGlvbjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6Q29uZGl0aW9uOwordXNpbmcgV1RGOjpTdGF0aWNDb25kaXRpb247CiAKICNlbmRpZiAv
LyBXVEZfQ29uZGl0aW9uX2gKIApJbmRleDogU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dU
Ri93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV2ZXJEZXN0cm95ZWQuaCIKICNpbmNsdWRlICJP
U1JhbmRvbVNvdXJjZS5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NCw3ICs2NSw3IEBAIHByaXZhdGU6CiAKICAgICBB
UkM0U3RyZWFtIG1fc3RyZWFtOwogICAgIGludCBtX2NvdW50OwotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiBBUkM0U3RyZWFtOjpBUkM0U3RyZWFtKCkK
QEAgLTEzNiw3ICsxMzcsNyBAQCB1aW50MzJfdCBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpn
ZXRXCiAKIHVpbnQzMl90IEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnJhbmRvbU51bWJlcigp
CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2NvdW50IC09IDQ7
CiAgICAgc3RpcklmTmVlZGVkKCk7CkBAIC0xNDUsNyArMTQ2LDcgQEAgdWludDMyX3QgQVJDNFJh
bmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZAogCiB2b2lkIEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0
b3I6OnJhbmRvbVZhbHVlcyh2b2lkKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICB1bnNpZ25lZCBjaGFyKiByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIpOwogICAgIHN0aXJJZk5lZWRl
ZCgpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMCArMzYsMTEgQEAg
dW5zaWduZWQgSGFzaFRhYmxlU3RhdHM6Om51bUNvbGxpc2lvbnM7CiB1bnNpZ25lZCBIYXNoVGFi
bGVTdGF0czo6Y29sbGlzaW9uR3JhcGhbNDA5Nl07CiB1bnNpZ25lZCBIYXNoVGFibGVTdGF0czo6
bWF4Q29sbGlzaW9uczsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGhhc2hUYWJsZVN0YXRzTXV0ZXgo
KQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgc3Rk
OjptdXRleCogbXV0ZXg7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAg
ICBtdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0gICAg
fSk7Ci0KLSAgICByZXR1cm4gKm11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgaGFzaFRhYmxl
U3RhdHNNdXRleDsKIAogdm9pZCBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhoYXNoVGFibGVTdGF0c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgpOwogCiAgICAgaWYgKGNvdW50ID4gbWF4Q29sbGlz
aW9ucykKICAgICAgICAgbWF4Q29sbGlzaW9ucyA9IGNvdW50OwpAQCAtNTksNyArNTAsNyBAQCB2
b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvCiAKIHZvaWQgSGFzaFRhYmxl
U3RhdHM6OmR1bXBTdGF0cygpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2soaGFzaFRhYmxlU3RhdHNNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9j
az4gbG9jayhoYXNoVGFibGVTdGF0c011dGV4KTsKIAogICAgIGRhdGFMb2dGKCJcbldURjo6SGFz
aFRhYmxlIHN0YXRpc3RpY3NcblxuIik7CiAgICAgZGF0YUxvZ0YoIiV1IGFjY2Vzc2VzXG4iLCBu
dW1BY2Nlc3Nlcy5sb2FkKCkpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExldmluIDxsZXZpbkBj
aHJvbWl1bS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZhbHVlQ2hlY2suaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1f
bXV0ZXguCiAgICAgICAgIG11dGFibGUgY29uc3RfaXRlcmF0b3IqIG1faXRlcmF0b3JzOwogICAg
ICAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVt
bW92ZSdkIG9yIG1lbWNweSdlZC4KLSAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8c3Rk
OjptdXRleD4gbV9tdXRleDsKKyAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4g
bV9tdXRleDsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCkBA
IC01NDIsNyArNTQzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV9kZWxldGVkQ291
bnQoMCkKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAgICAgICwgbV9pdGVyYXRv
cnMoMCkKLSAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkK
KyAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQogICAgICAgICAsIG1fc3RhdHMoc3RkOjpt
YWtlX3VuaXF1ZTxTdGF0cz4oKSkKQEAgLTEyMTgsNyArMTIxOSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKG51bGxwdHIpCi0gICAgICAgICwgbV9tdXRleChz
dGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkpCisgICAgICAgICwgbV9tdXRleChzdGQ6Om1h
a2VfdW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUKICAgICAgICAgLCBtX3N0YXRzKHN0ZDo6bWFrZV91bmlxdWU8U3RhdHM+KCpvdGhlci5t
X3N0YXRzKSkKQEAgLTEyNzYsNyArMTI3Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGlu
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46Okhhc2hUYWJsZShIYXNoVGFibGUmJiBvdGhlcikKICNpZiBDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAgICAgICAgIDogbV9pdGVyYXRvcnMobnVsbHB0cikKLSAgICAgICAg
LCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkKKyAgICAgICAgLCBtX211
dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKICAgICAgICAgb3Ro
ZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMTM1Niw3ICsxMzU3LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9y
cygpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqbV9t
dXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKCptX211dGV4KTsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3Iq
IHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBwLT5t
X25leHQ7CkBAIC0xMzc4LDcgKzEzNzksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYg
KCF0YWJsZSkgewogICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqdGFibGUtPm1f
bXV0ZXgpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKnRhYmxlLT5t
X211dGV4KTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwog
ICAgICAgICAgICAgaXQtPm1fbmV4dCA9IHRhYmxlLT5tX2l0ZXJhdG9yczsKICAgICAgICAgICAg
IHRhYmxlLT5tX2l0ZXJhdG9ycyA9IGl0OwpAQCAtMTM5Nyw3ICsxMzk4LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5tX25leHQpOwogICAgICAgICAgICAgQVNT
RVJUKCFpdC0+bV9wcmV2aW91cyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqaXQtPm1fdGFibGUtPm1fbXV0ZXgpOworICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKml0LT5tX3RhYmxlLT5tX211dGV4
KTsKICAgICAgICAgICAgIGlmIChpdC0+bV9uZXh0KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0LT5tX25leHQtPm1fcHJldmlvdXMgPT0gaXQpOwogICAgICAgICAgICAgICAgIGl0LT5tX25l
eHQtPm1fcHJldmlvdXMgPSBpdC0+bV9wcmV2aW91czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDkgKzEy
NSw5IEBAIHR5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAotdXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogdXNpbmcgV1RGOjpMb2NrOwogdXNp
bmcgV1RGOjpMb2NrSG9sZGVyOwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogCiAjZW5kaWYgLy8g
V1RGX0xvY2tfaAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJU
aHJlYWRpbmcuaCIKICNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogCkBAIC02OSwxMiArNzAsNyBAQCBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8v
IFRoaXMgZ2xvCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsK
ICNlbmRpZgogCi1zdGF0aWMgc3RkOjptdXRleCYgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRl
eCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAg
IAotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIG1haW5UaHJlYWRGdW5j
dGlvblF1ZXVlTXV0ZXg7CiAKIHN0YXRpYyBGdW5jdGlvblF1ZXVlJiBmdW5jdGlvblF1ZXVlKCkK
IHsKQEAgLTk0LDcgKzkwLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAKICAgICBt
YWluVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKIAotICAgIG1haW5UaHJlYWRG
dW5jdGlvblF1ZXVlTXV0ZXgoKTsKICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCk7
CiAgICAgaW5pdGlhbGl6ZUdDVGhyZWFkcygpOwogfQpAQCAtMTA1LDcgKzEwMCw2IEBAIHN0YXRp
YyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplTWFpblRocmUKIAogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRPbmNlKCkKIHsKLSAgICBtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4
KCk7CiAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpOwogfQogCkBAIC0xMTcsNyAr
MTExLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAjaWYgIVVTRShXRUJfVEhSRUFE
KQogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkT25j
ZSgpCiB7Ci0gICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOwogICAgIGluaXRpYWxp
emVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRmb3JtKCk7CiB9CiAKQEAgLTE1Niw3
ICsxNDksNyBAQCB2b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKQogICAgIEZ1
bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY0xvY2s+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCk7CiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0aW9uUXVldWUoKS5zaXplKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBpbnZvY2F0aW9uID0gZnVuY3Rpb25RdWV1ZSgpLnRha2VGaXJzdCgpOwpAQCAt
MTgwLDcgKzE3Myw3IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24K
ICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsK
ICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1haW5UaHJl
YWRGdW5jdGlvblF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgpOwogICAgICAgICBuZWVkVG9T
Y2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rpb25R
dWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAg
ICAgfQpAQCAtMTkyLDcgKzE4NSw3IEBAIHZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWlu
VGhyZWFkRnUKIHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwogCi0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpKTsKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11
dGV4KTsKIAogICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5jdGlvbldpdGhD
b250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNr
U3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIENoZWNrUG9p
bnQgbWFuYWdlbWVudDoKLXN0ZDo6bXV0ZXgqIFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXggPSAw
OworU3RhdGljTG9jayBTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4OwogU3RhY2tTdGF0czo6Q2hl
Y2tQb2ludCogU3RhY2tTdGF0czo6c190b3BDaGVja1BvaW50ID0gMDsKIFN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfZmlyc3RMYXlvdXRDaGVja1BvaW50ID0gMDsK
IFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfdG9wTGF5b3V0Q2hl
Y2tQb2ludCA9IDA7CkBAIC01NywxMyArNTcsNiBAQCBpbnQgU3RhY2tTdGF0czo6c19tYXhUb3Rh
bExheW91dENoZWNrUG9pCiBpbnQgU3RhY2tTdGF0czo6c19tYXhMYXlvdXRSZWVudHJ5RGVwdGgg
PSAwOwogCiAKLS8vIEluaXRpYWxpemVzIGxvY2tzIGFuZCB0aGUgbG9nLiBTaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZS4KLXZvaWQgU3RhY2tTdGF0czo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgc19z
aGFyZWRNdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0g
ICAgZGF0YUxvZ0YoIiA9PT0gTE9HIG5ldyBzdGFjayBzdGF0cyA9PT09PT09PVxuIik7Ci19Ci0K
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7CiAgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CkBAIC03Niw3
ICs2OSw3IEBAIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGEKIAogU3Rh
Y2tTdGF0czo6Q2hlY2tQb2ludDo6Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwog
ICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEq
Pigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9
IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sg
PSB0aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMTM0LDcgKzEyNyw3IEBAIFN0YWNrU3RhdHM6OkNo
ZWNrUG9pbnQ6OkNoZWNrUG9pbnQoKQogCiBTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQ
b2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3Rh
dHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAgIFdURlRocmVhZERhdGEqIHRocmVhZERh
dGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBT
dGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsK
IApAQCAtMTY1LDcgKzE1OCw3IEBAIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6On5DaGVja1BvaW50
KCkKIAogdm9pZCBTdGFja1N0YXRzOjpwcm9iZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAg
IFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigm
d3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRo
cmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0
aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMjI2LDcgKzIxOSw3IEBAIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQ6OkxheW91dENoZWMKICAgICAvLyBwcm9iZSBmaXJzdCwgd2UgY2FuIGF2b2lk
IHJlLWVudGVyaW5nIHRoZSBsb2NrLgogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3RhY2tTdGF0czo6c19zaGFyZWRNdXRl
eCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soU3RhY2tTdGF0czo6c19z
aGFyZWRNdXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8
V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwogICAgIFN0YWNrU3RhdHM6OlBlclRo
cmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOwogICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CkBAIC0yOTUsNyArMjg4LDcgQEAg
U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlYwogCiBTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50Ojp+TGF5b3V0Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgp
OwogCiAgICAgLy8gUG9wIHRvIHRoZSBwcmV2aW91cyBsYXlvdXQgY2hlY2twb2ludDoKICAgICBT
dGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSBtX3ByZXY7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TdGFja1N0YXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tT
dGF0cy5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkV4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIAogLy8gRGVm
aW5lIHRoaXMgZmxhZyB0byBlbmFibGUgU3RhY2sgc3RhdHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0
dXJlIGlzIHVzZWZ1bApAQCAtNjcsNyArNjgsNiBAQCBwdWJsaWM6CiAgICAgICAgIExheW91dENo
ZWNrUG9pbnQoKSB7IH0KICAgICB9OwogCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsg
fQogICAgIHN0YXRpYyB2b2lkIHByb2JlKCkgeyB9CiB9OwogCkBAIC0xMDksOSArMTA5LDYgQEAg
cHVibGljOgogICAgICAgICBpbnQgbV9kZXB0aDsKICAgICB9OwogCi0gICAgLy8gSW5pdGlhbGl6
ZXMgbG9ja3MgYW5kIHRoZSBsb2cgZmlsZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0g
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCiAgICAgLy8gVXNlZCBmb3IgcHJvYmluZyB0
aGUgc3RhY2sgYXQgcGxhY2VzIHdoZXJlIHdlIHN1c3BlY3QgdG8gYmUgaGlnaAogICAgIC8vIHBv
aW50cyBvZiBzdGFjayB1c2FnZSBidXQgYXJlIE5PVCBjaGVjayBwb2ludHMgd2hlcmUgc3RhY2sg
cmVjdXJzaW9uCiAgICAgLy8gaXMgY2hlY2tlZC4KQEAgLTEyNCw3ICsxMjEsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50OgotICAgIHN0YXRpYyBz
dGQ6Om11dGV4KiBzX3NoYXJlZE11dGV4OworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHNfc2hhcmVk
TXV0ZXg7CiAgICAgc3RhdGljIENoZWNrUG9pbnQqIHNfdG9wQ2hlY2tQb2ludDsKICAgICBzdGF0
aWMgTGF5b3V0Q2hlY2tQb2ludCogc19maXJzdExheW91dENoZWNrUG9pbnQ7CiAgICAgc3RhdGlj
IExheW91dENoZWNrUG9pbnQqIHNfdG9wTGF5b3V0Q2hlY2tQb2ludDsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBA
QAogI2luY2x1ZGUgImR0b2EvY2FjaGVkLXBvd2Vycy5oIgogI2luY2x1ZGUgIkhhc2hNYXAuaCIK
ICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCi0jaW5jbHVkZSAiU3RhY2tTdGF0cy5oIgog
I2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oIgogI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKQEAgLTEy
NCw3ICsxMjMsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHRocmVhZE1hcE11
dGV4KCk7CiAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwogICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpOwotICAgIFN0YWNrU3RhdHM6OmluaXRp
YWxpemUoKTsKICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvbWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNl
ZEJ5U2FmYXJpLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVw
cmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJOZXZlckRlc3Ryb3llZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJh
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIC8vIFRoaXMg
ZmlsZSBjb250YWlucyBkZXByZWNhdGVkIHN5bWJvbHMgdGhhdCB0aGUgbGFzdCByZWxlYXNlZCB2
ZXJzaW9uIG9mIFNhZmFyaSB1c2VzLgogLy8gT25jZSBTYWZhcmkgc3RvcHMgdXNpbmcgdGhlbSwg
d2Ugc2hvdWxkIHJlbW92ZSB0aGVtLgpAQCAtNDUsMjUgKzQ2LDE2IEBAIHZvaWQgY2FsbE9uTWFp
blRocmVhZChjb25zdCBGdW5jdGlvbjx2b2kKICAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4oZnVuY3Rpb24pKTsKIH0KIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBt
dXRleDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNv
bnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRp
Y0xvY2sgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAKIHZvaWQgbG9ja0F0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKIHsKLSAgICBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCgpLmxvY2soKTsKKyAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleC5sb2NrKCk7CiB9CiAKIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQogewotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkudW5sb2Nr
KCk7CisgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgudW5sb2NrKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQkkKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKQEAgLTExNywxMSArMTE4LDcgQEAg
U3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZzo6VW5kZXJseWluZwogewogfQogCi1zdGF0aWMg
c3RkOjptdXRleCYgdW5kZXJseWluZ1N0cmluZ3NNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRp
YyBTdGF0aWNMb2NrIHVuZGVybHlpbmdTdHJpbmdzTXV0ZXg7CiAKIHN0YXRpYyBIYXNoTWFwPGNv
bnN0IFN0cmluZ0ltcGwqLCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nKj4mIHVuZGVybHlp
bmdTdHJpbmdzKCkKIHsKQEAgLTEzMyw3ICsxMzAsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OmludmFs
aWRhdGUoY29uc3QgU3RyaW5nCiB7CiAgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0
cmluZzsKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVu
ZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOwogICAgICAgICB1bmRlcmx5aW5nU3Ry
aW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0JlRGVzdHJveWVkKTsKICAg
ICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUy
LDcgKzE0OSw3IEBAIHZvaWQgU3RyaW5nVmlldzo6YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFUKICAg
ICBpZiAobV91bmRlcmx5aW5nU3RyaW5nKSB7CiAgICAgICAgIGlmICghLS1tX3VuZGVybHlpbmdT
dHJpbmctPnJlZkNvdW50KSB7CiAgICAgICAgICAgICBpZiAobV91bmRlcmx5aW5nU3RyaW5nLT5p
c1ZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAg
ICAgICAgICB1bmRlcmx5aW5nU3RyaW5ncygpLnJlbW92ZSgmbV91bmRlcmx5aW5nU3RyaW5nLT5z
dHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVsZXRlIG1fdW5kZXJseWluZ1N0
cmluZzsKQEAgLTE2Nyw3ICsxNjQsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdT
dHJpbmcoY29uCiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSBu
dWxscHRyOwogICAgIGVsc2UgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB1bmRlcmx5aW5nU3RyaW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOwogICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbmV3IFVuZGVybHlpbmdTdHJpbmcoKnN0cmluZyk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHVuaWNvZGUvdWNv
bC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KQEAgLTUwLDE3ICs1MSw3IEBAIHN0YXRpYyBVQ29sbGF0b3IqIGNhY2hlZENv
bGxhdG9yOwogc3RhdGljIGNoYXIqIGNhY2hlZENvbGxhdG9yTG9jYWxlOwogc3RhdGljIGJvb2wg
Y2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3Q7CiAKLXN0YXRpYyBzdGQ6Om11
dGV4JiBjYWNoZWRDb2xsYXRvck11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7Ci0KLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11
dGV4OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXguY29u
c3RydWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGlj
TG9jayBjYWNoZWRDb2xsYXRvck11dGV4OwogCiAjaWYgIShPUyhEQVJXSU4pICYmIFVTRShDRikp
CiAKQEAgLTExNyw3ICsxMDgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0b3IoY29uc3QgY2hhciogbG9j
YWxlLCBiCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAKICAgICB7Ci0g
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0
ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGNhY2hlZENv
bGxhdG9yTXV0ZXgpOwogICAgICAgICBpZiAoY2FjaGVkQ29sbGF0b3IgJiYgbG9jYWxlc01hdGNo
KGNhY2hlZENvbGxhdG9yTG9jYWxlLCBsb2NhbGUpICYmIGNhY2hlZENvbGxhdG9yU2hvdWxkU29y
dExvd2VyY2FzZUZpcnN0ID09IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCkgewogICAgICAgICAg
ICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9yOwogICAgICAgICAgICAgbV9sb2NhbGUgPSBj
YWNoZWRDb2xsYXRvckxvY2FsZTsKQEAgLTE0Nyw3ICsxMzgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0
b3IoY29uc3QgY2hhciogbG9jYWxlLCBiCiAKIENvbGxhdG9yOjp+Q29sbGF0b3IoKQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0ZXgoKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRl
eCk7CiAgICAgaWYgKGNhY2hlZENvbGxhdG9yKSB7CiAgICAgICAgIHVjb2xfY2xvc2UoY2FjaGVk
Q29sbGF0b3IpOwogICAgICAgICBmYXN0RnJlZShjYWNoZWRDb2xsYXRvckxvY2FsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODg2MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDIgQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0ZDo6
bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25kaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
QnVmZmVyU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnNldEJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6Omlu
c2VydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2Vs
U2NoZWR1bGVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6
dmFsdWVGb3JDb250ZXh0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxp
bmU6OnZhbHVlc0ZvclRpbWVSYW5nZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjpzZXRCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09z
Y2lsbGF0b3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpwcm9j
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpzZXRQZXJpb2RpY1dhdmUp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFu
bmVyTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYW5uZXJOb2RlOjpzZXRQYW5u
aW5nTW9kZWwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRDdXJ2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb1ZlcnNpb25NYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Z2V0Q2FjaGVkVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpndWlkTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3REYXRhYmFzZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmFkZFByb3Bv
c2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZW1vdmVQ
cm9wb3NlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZnVs
bFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5oOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW06
CisgICAgICAgIChnZXRET01XcmFwcGVyKToKKyAgICAgICAgKGFkZERPTVdyYXBwZXIpOgorICAg
ICAgICAocmVtb3ZlRE9NV3JhcHBlcik6CisgICAgICAgICh3cmFwcGVyQ2FjaGVMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Q3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OmdldElk
ZW50aWZpZXJGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpuYW1lRm9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpyZWdpc3RlckFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RyeU11
dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6Omlu
dGVycnVwdEFuZERpc3BhdGNoSW5zcGVjdG9yQ29tbWFuZHMpOgorICAgICAgICAqIHBhZ2UvV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNG
b3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2UvV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJv
bVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RocmVhZE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3Ap
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJldmVyYkNvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1
bi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKCtbV2ViTGFuZ3VhZ2VDaGFuZ2VP
YnNlcnZlciBsYW5ndWFnZVByZWZlcmVuY2VzRGlkQ2hhbmdlOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZWZlcnJlZExhbmd1YWdlc011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbXB0eVBlcmZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6cnVuTG9hZGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRlclJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJp
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJl
YW1IYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsT25NYWluVGhyZWFkQW5k
V2FpdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1T
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRl
Y3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlYyk6CisgICAgICAgIChXZWJDb3JlOjphdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5j
b2RpbmdOYW1lTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kaW5nUmVnaXN0cnlNdXRleCk6
IERlbGV0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d29ya2VyVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29y
a2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6fldvcmtlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRTZXRNdXRleCk6
IERlbGV0ZWQuCisKIDIwMTUtMDgtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSBpbnN0ZWFkIG9mIGNzc1Zh
bHVlUG9vbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZQogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3Qg
YmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0ZWFkLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZhaWxlZC4gV2UgbXVzdCBiZSBp
biB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIGJ1ZmZlcnMgYW5kIHdlcmUgYWxyZWFkeSBvdXRwdXR0
aW5nIHNpbGVuY2UgYW55d2F5LgogICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKQEAgLTQxNiw3
ICs0MTYsNyBAQCBib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKEF1CiAgICAg
QXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoKmNvbnRleHQoKSk7CiAgICAg
CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICAKICAgICBpZiAoYnVmZmVyKSB7
CiAgICAgICAgIC8vIERvIGFueSBuZWNlc3NzYXJ5IHJlLWNvbmZpZ3VyYXRpb24gdG8gdGhlIGJ1
ZmZlcidzIG51bWJlciBvZiBjaGFubmVscy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTE1OSw3ICsxNTks
NyBAQCBwcml2YXRlOgogICAgIFBhbm5lck5vZGUqIG1fcGFubmVyTm9kZTsKIAogICAgIC8vIFRo
aXMgc3luY2hyb25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVz
ZSBkeW5hbWljIGNoYW5uZWwgY291bnQgY2hhbmdlcy4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXgg
bV9wcm9jZXNzTXV0ZXg7CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVs
aW5lOjppbnNlcnRFdmVudChjb24KICAgICBpZiAoIWlzVmFsaWQpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9ldmVudHNN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9ldmVudHNNdXRleCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZmxvYXQgaW5zZXJ0VGltZSA9IGV2ZW50LnRp
bWUoKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0
RXZlbnQoY29uCiAKIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1
ZXMoZmxvYXQgc3RhcnRUaW1lKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1fZXZlbnRzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fZXZl
bnRzTXV0ZXgpOwogCiAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHMgc3RhcnRpbmcgYXQgc3RhcnRU
aW1lLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkg
ewpAQCAtMTE4LDcgKzExOCw3IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JD
b250ZXgKICAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6
dHJ5X3RvX2xvY2spOwogICAgICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkgfHwgIWNvbnRleHQg
fHwgIW1fZXZlbnRzLnNpemUoKSB8fCBjb250ZXh0LT5jdXJyZW50VGltZSgpIDwgbV9ldmVudHNb
MF0udGltZSgpKSB7CiAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBBdWRpb1BhcmFt
VGltZWxpbmU6OnZhbHVlRm9yQ29udGV4CiBmbG9hdCBBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVl
c0ZvclRpbWVSYW5nZShkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgZmxvYXQgZGVm
YXVsdFZhbHVlLCBmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcywgZG91Ymxl
IHNhbXBsZVJhdGUsIGRvdWJsZSBjb250cm9sUmF0ZSkKIHsKICAgICAvLyBXZSBjYW4ndCBjb250
ZW5kIHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2sp
OworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRy
eV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlcykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFs
dWVzOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKICNkZWZpbmUgQXVkaW9QYXJhbVRpbWVsaW5lX2gKIAogI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UGFyYW1F
dmVudD4gbV9ldmVudHM7CiAKLSAgICBzdGQ6Om11dGV4IG1fZXZlbnRzTXV0ZXg7CisgICAgTG9j
ayBtX2V2ZW50c011dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udm9s
dmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKICAgICBBU1NFUlQob3V0cHV0QnVzKTsKIAog
ICAgIC8vIFN5bmNocm9uaXplIHdpdGggcG9zc2libGUgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBp
bXB1bHNlIHJlc3BvbnNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayht
X3Byb2Nlc3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxM
b2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxv
Y2sub3duc19sb2NrKCkpIHsKICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZh
aWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxzZSBy
ZXNwb25zZS4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKIAogdm9pZCBDb252b2x2ZXJO
b2RlOjpyZXNldCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9w
cm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011
dGV4KTsKICAgICBpZiAobV9yZXZlcmIpCiAgICAgICAgIG1fcmV2ZXJiLT5yZXNldCgpOwogfQpA
QCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVm
ZmUKIAogICAgIHsKICAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogICAgICAg
ICBtX3JldmVyYiA9IFdURjo6bW92ZShyZXZlcmIpOwogICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZl
cjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBk
eW5hbWljIGNoYW5nZXMgdG8gdGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBw
cm9jZXNzKCkuCi0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fcHJvY2Vzc011dGV4OworICAgIG11
dGFibGUgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxz
ZSByZXNwb25zZSBvciBub3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgogICAgIGJvb2wgbV9ub3Jt
YWxpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzCiAgICAgLy8gVXNlIGEgc3RkOjp0cnlf
dG9fbG9jayB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFk
LgogICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1MTWVk
aWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgogICAgIC8vIHJlY29uZmlndXJpbmcg
aXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNlLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAgICAgICAgIG91dHB1
dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIk11bHRpQ2hhbm5lbFJlc2FtcGxlci5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1Np
bGVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwotICAgIHN0ZDo6bXV0ZXggbV9wcm9jZXNz
TXV0ZXg7CisgICAgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIHVuc2lnbmVkIG1fc291cmNl
TnVtYmVyT2ZDaGFubmVsczsKICAgICBkb3VibGUgbV9zb3VyY2VTYW1wbGVSYXRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGU6OnNldEZvcm0KICAgICAgICAgfQogCiAgICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGgg
cHJvY2VzcygpLgotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3By
b2Nlc3NNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4KTsKIAogICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNo
YW5uZWxzOwogCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZTo6cHJvY2VzcwogICAgIC8vIFVzZSBzdGQ6OnRyeV90b19sb2NrIHRvIGF2b2lkIGNvbnRl
bnRpb24gaW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCiAgICAgLy8gSWYgd2UgZmFpbCB0
byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gdGhlIE1lZGlhU3RyZWFtIG11c3QgYmUgaW4gdGhlIG1p
ZGRsZSBvZgogICAgIC8vIGEgZm9ybWF0IGNoYW5nZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4g
dGhpcyBjYXNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nl
c3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3du
c19sb2NrKCkpIHsKICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAg
ICAgICAgIG91dHB1dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaAko
cmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkF1ZGlvU291cmNl
UHJvdmlkZXJDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgPG11
dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBtX2F1ZGlvVHJhY2s7CiAgICAgQXVkaW9Tb3VyY2VQcm92
aWRlciogbV9hdWRpb1NvdXJjZVByb3ZpZGVyOwogCi0gICAgc3RkOjptdXRleCBtX3Byb2Nlc3NN
dXRleDsKKyAgICBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgdW5zaWduZWQgbV9zb3VyY2VO
dW1iZXJPZkNoYW5uZWxzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT3NjaWxsYXRvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnByb2Nlc3Moc2l6
ZV90IGZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4n
dCBibG9jayBvbiB0aGlzIGxvY2ssIHNvIHdlIHVzZSBzdGQ6OnRyeV90b19sb2NrIGluc3RlYWQu
Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBz
dGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9j
ZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkg
ewogICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeV9sb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJl
IGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgd2F2ZS10YWJsZXMuCiAgICAgICAgIG91dHB1dEJ1
cy0+emVybygpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnNldFBl
cmlvZGljV2F2ZShQZXIKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gVGhp
cyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICBtX3BlcmlvZGljV2F2ZSA9IHBlcmlvZGljV2F2ZTsK
ICAgICBtX3R5cGUgPSBDVVNUT007CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1
ZGlvUGFyYW0uaCIKICNpbmNsdWRlICJBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCIKLSNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC05Niw3ICs5Niw3IEBAIHByaXZh
dGU6CiAgICAgZG91YmxlIG1fdmlydHVhbFJlYWRJbmRleDsKIAogICAgIC8vIFRoaXMgc3luY2hy
b25pemVzIHByb2Nlc3MoKS4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9wcm9jZXNzTXV0ZXg7
CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgLy8gU3RvcmVzIHNhbXBs
ZS1hY2N1cmF0ZSB2YWx1ZXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gZnJlcXVlbmN5IGFuZCBk
ZXR1bmUuCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcGhhc2VJbmNyZW1lbnRzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBQYW5uZXJOb2RlOjpw
cm9jZXNzKHNpemVfdCBmcmFtZXNUbwogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQg
Y2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0
ZWFkLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Bhbm5lck11dGV4
LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9w
YW5uZXJNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygp
KSB7CiAgICAgICAgIC8vIFRvbyBiYWQgLSBUaGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3Qg
YmUgaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGUgcGFubmVyLgogICAgICAgICBkZXN0aW5h
dGlvbi0+emVybygpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgUGFubmVyTm9kZTo6c2V0UGFu
bmluZ01vZGVsKHVuc2lnbmUKICAgICBjYXNlIEhSVEY6CiAgICAgICAgIGlmICghbV9wYW5uZXIu
Z2V0KCkgfHwgbW9kZWwgIT0gbV9wYW5uaW5nTW9kZWwpIHsKICAgICAgICAgICAgIC8vIFRoaXMg
c3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9wYW5uZXJNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3Bhbm5lck11dGV4KTsKIAogICAgICAgICAgICAgbV9wYW5uZXIg
PSBQYW5uZXI6OmNyZWF0ZShtb2RlbCwgc2FtcGxlUmF0ZSgpLCBtX2hydGZEYXRhYmFzZUxvYWRl
ci5nZXQoKSk7CiAgICAgICAgICAgICBtX3Bhbm5pbmdNb2RlbCA9IG1vZGVsOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiUGFubmVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291
bnQ7CiAKICAgICAvLyBTeW5jaHJvbml6ZSBwcm9jZXNzKCkgYW5kIHNldFBhbm5pbmdNb2RlbCgp
IHdoaWNoIGNhbiBjaGFuZ2UgdGhlIHBhbm5lci4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9w
YW5uZXJNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wYW5uZXJNdXRleDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9E
U1BLZXJuZWw+IFdhdmVTaGFwCiB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZs
b2F0MzJBcnJheSogY3VydmUpCiB7CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9j
ZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKIAog
ICAgIG1fY3VydmUgPSBjdXJ2ZTsKIH0KQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRDdXJ2ZShGbG9hdAogdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRP
dmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiB7CiAgICAgLy8gVGhpcyBzeW5j
aHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
cHJvY2Vzc011dGV4KTsKIAogICAgIG1fb3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGU7CiAKQEAgLTg1
LDcgKzg1LDcgQEAgdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpwcm9jZXNzKGNvbnN0IAogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJsb2NrIG9uIHRo
aXMgbG9jaywgc28gd2UgdXNlIHN0ZDo6dHJ5X3RvX2xvY2sgaW5zdGVhZC4KLSAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKSB7CiAgICAgICAgIC8v
IFRvbyBiYWQgLSB0aGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3QgYmUgaW4gdGhlIG1pZGRs
ZSBvZiBhIHNldEN1cnZlKCkgY2FsbC4KICAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBl
clByb2Nlc3Nvci5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1
ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY2LDcg
QEAgcHJpdmF0ZToKICAgICBPdmVyU2FtcGxlVHlwZSBtX292ZXJzYW1wbGU7CiAKICAgICAvLyBU
aGlzIHN5bmNocm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRDdXJ2ZSgpLgotICAgIG11dGFibGUg
c3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wcm9jZXNzTXV0
ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NywxNyArMTU3LDcgQEAgc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYQogfQogCiAvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0
aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCi1zdGF0aWMgc3RkOjptdXRl
eCYgZ3VpZE11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLQotICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgZ3VpZE11
dGV4OwogCiB0eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VHdWlkLCBTdHJpbmc+IEd1aWRWZXJzaW9u
TWFwOwogc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKQEAgLTIzMyw3
ICsyMjMsNyBAQCBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNvCiAgICAg
ICAgIG1fbmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRleCk7CiAKICAgICAgICAgbV9ndWlkID0g
Z3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PERhdGFiYXNlKj4+JiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5hZGQobV9ndWlkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CkBAIC0zNzAsNyArMzYwLDcgQEAgYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbAogCiAgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOwogICAgIHsKLSAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgICAgICBhdXRv
IGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVu
dHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewpAQCAtNDY1LDcgKzQ1NSw3IEBAIHZv
aWQgRGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQogICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSB0
b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJlbW92ZU9wZW5EYXRhYmFzZSgpLgogICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRl
eCk7CiAKICAgICAgICAgYXV0byBpdCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZmluZChtX2d1aWQp
OwogICAgICAgICBBU1NFUlQoaXQgIT0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5lbmQoKSk7CkBAIC01
MjQsNyArNTE0LDcgQEAgdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IAog
CiBTdHJpbmcgRGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAogewotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgIHJldHVybiBndWlk
VG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7CiB9CkBAIC01MzIsNyAr
NTIyLDcgQEAgU3RyaW5nIERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKCkgY29ucwogdm9pZCBE
YXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCiB7
CiAgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2tlcihndWlkTXV0ZXgpOwogCiAgICAgdXBkYXRl
R3VpZFZlcnNpb25NYXAobV9ndWlkLCBhY3R1YWxWZXJzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShib28KIAogUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gRGF0YWJhc2VNYW5hZ2VyOjpleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbXV0ZXgpOwogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0UmVnaXN0ZXJlZENvdW50
ID49IDApOwogICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQgPj0gMCk7
CkBAIC0xMzgsNyArMTM4LDcgQEAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0YWJhc2VNYW5h
Z2VyOgogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0
YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJh
c2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgbV9jb250ZXh0TWFwLnNl
dChjb250ZXh0LCBkYXRhYmFzZUNvbnRleHQpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ28KIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRl
eHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgQVNTRVJUKG1fY29udGV4dE1hcC5nZXQoY29udGV4dCkpOwpAQCAtMTYy
LDE0ICsxNjIsMTQgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZQog
I2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3RE
YXRhYmFzZUNvbnRleHQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAg
ICAgbV9kYXRhYmFzZUNvbnRleHRJbnN0YW5jZUNvdW50Kys7CiB9CiAKIHZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXNlQ29udGV4dCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQtLTsK
ICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHRSZWdpc3RlcmVkQ291bnQgPD0gbV9kYXRhYmFz
ZUNvbnRleHRJbnN0YW5jZUNvdW50KTsKQEAgLTI1OCwxNCArMjU4LDE0IEBAIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmFk
ZFByb3Bvc2VkRGF0YWJhc2UoUHJvcG9zZWREYXRhYmFzZSogcHJvcG9zZWREYikKIHsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIG1fcHJvcG9zZWREYXRhYmFzZXMuYWRk
KHByb3Bvc2VkRGIpOwogfQogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVtb3ZlUHJvcG9zZWRE
YXRhYmFzZShQcm9wb3NlZERhdGFiYXNlKiBwcm9wb3NlZERiKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5yZW1vdmUocHJvcG9z
ZWREYik7CiB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnN0b3BE
YXRhYmFzZXMoU2NyaQogU3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRl
SWZEb2VzTm90RXhpc3QpCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRvKiBwcm9wb3NlZERhdGFiYXNlIDogbV9wcm9w
b3NlZERhdGFiYXNlcykgewogICAgICAgICAgICAgaWYgKHByb3Bvc2VkRGF0YWJhc2UtPmRldGFp
bHMoKS5uYW1lKCkgPT0gbmFtZSAmJiBwcm9wb3NlZERhdGFiYXNlLT5vcmlnaW4oKS0+ZXF1YWwo
b3JpZ2luKSkKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJh
c2VOYW1lc0Zvck9yCiBEYXRhYmFzZURldGFpbHMgRGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9y
TmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKGF1dG8qIHByb3Bvc2VkRGF0YWJhc2UgOiBtX3Byb3Bvc2VkRGF0
YWJhc2VzKSB7CiAgICAgICAgICAgICBpZiAocHJvcG9zZWREYXRhYmFzZS0+ZGV0YWlscygpLm5h
bWUoKSA9PSBuYW1lICYmIHByb3Bvc2VkRGF0YWJhc2UtPm9yaWdpbigpLT5lcXVhbChvcmlnaW4p
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRl
IDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFByb3Bvc2VkRGF0YWJh
c2UqPiBtX3Byb3Bvc2VkRGF0YWJhc2VzOwogCiAgICAgLy8gVGhpcyBtdXRleCBwcm90ZWN0cyBt
X2NvbnRleHRNYXAsIGFuZCBtX3Byb3Bvc2VkRGF0YWJhc2VzLgotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHJldmlz
aW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlNjcmlwdENvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKICNpbXBvcnQgInJ1
bnRpbWVfcm9vdC5oIgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9OU01hcFRhYmxlU1BJLmg+CiAKQEAg
LTQ2LDE2ICs0Nyw3IEBACiBzdGF0aWMgTlNNYXBUYWJsZSogRE9NV3JhcHBlckNhY2hlOwogICAg
IAogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwotc3RhdGljIHN0ZDo6bXV0ZXgmIHdy
YXBwZXJDYWNoZUxvY2soKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsK
LSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgbXV0ZXguY29uc3RydWN0KCk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgd3JhcHBl
ckNhY2hlTG9jazsKICNlbmRpZgogCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC03OCw3ICs3MCw3
IEBAIE5TTWFwVGFibGUqIGNyZWF0ZVdyYXBwZXJDYWNoZSgpCiBOU09iamVjdCogZ2V0RE9NV3Jh
cHBlcihET01PYmplY3RJbnRlcm5hbCogaW1wbCkKIHsKICNpZmRlZiBORUVEU19XUkFQUEVSX0NB
Q0hFX0xPQ0sKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh3cmFwcGVyQ2Fj
aGVMb2NrKCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJD
YWNoZUxvY2spOwogI2VuZGlmCiAgICAgaWYgKCFET01XcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJl
dHVybiBuaWw7CkBAIC04OCw3ICs4MCw3IEBAIE5TT2JqZWN0KiBnZXRET01XcmFwcGVyKERPTU9i
amVjdEludGVybmEKIHZvaWQgYWRkRE9NV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgRE9NT2Jq
ZWN0SW50ZXJuYWwqIGltcGwpCiB7CiAjaWZkZWYgTkVFRFNfV1JBUFBFUl9DQUNIRV9MT0NLCi0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sod3JhcHBlckNhY2hlTG9jaygpKTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh3cmFwcGVyQ2FjaGVMb2NrKTsK
ICNlbmRpZgogICAgIGlmICghRE9NV3JhcHBlckNhY2hlKQogICAgICAgICBET01XcmFwcGVyQ2Fj
aGUgPSBjcmVhdGVXcmFwcGVyQ2FjaGUoKTsKQEAgLTk4LDcgKzkwLDcgQEAgdm9pZCBhZGRET01X
cmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBETwogdm9pZCByZW1vdmVET01XcmFwcGVyKERPTU9i
amVjdEludGVybmFsKiBpbXBsKQogewogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdyYXBwZXJDYWNoZUxvY2soKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod3JhcHBlckNhY2hlTG9jayk7
CiAjZW5kaWYKICAgICBpZiAoIURPTVdyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
Y3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIKLSNp
bmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSwxNyArNDEsNyBAQCBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtCiAgICAgcmV0dXJuIHJlZ2lz
dHJ5OwogfQogCi1zdGF0aWMgc3RkOjptdXRleCYgcmVnaXN0cnlNdXRleCgpCi17Ci0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117
Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4
OwotfQorc3RhdGljIFN0YXRpY0xvY2sgcmVnaXN0cnlNdXRleDsKIAogQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5KCkKIHsKQEAgLTYzLDcgKzUzLDcgQEAg
Ym9vbCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Z2V0SWRlbnRpZgogICAgIGlmIChuYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGF1dG8gaXRlciA9IG1fbmFtZVRv
SWRlbnRpZmllck1hcC5maW5kKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgIGlmIChpdGVyID09
IG1fbmFtZVRvSWRlbnRpZmllck1hcC5lbmQoKSkKQEAgLTc1LDE0ICs2NSwxNCBAQCBib29sIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpnZXRJZGVudGlmCiAKIFN0cmluZyBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6bmFtZUZvcklkZW50aWZpZXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHJlZ2lz
dHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socmVnaXN0
cnlNdXRleCk7CiAKICAgICByZXR1cm4gbV9pZGVudGlmaWVyVG9OYW1lTWFwLmdldChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaWRlbnRpZmllcikpLmlzb2xhdGVkQ29weSgpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Y3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhyZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNMb2NrPiBsb2NrKHJlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgYXV0byBpdGVyID0g
bV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1hcC5maW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
ZGVudGlmaWVyKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1h
cC5lbmQoKSkKQEAgLTkzLDcgKzgzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bT4gQ3J5cHRvQQogCiB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpyZWdpc3RlckFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG5hbWUsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtQ29uc3RydWN0b3IgY29uc3RydWN0b3IpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGJvb2wg
YWRkZWQgPSBtX25hbWVUb0lkZW50aWZpZXJNYXAuYWRkKG5hbWUsIGlkZW50aWZpZXIpLmlzTmV3
RW50cnk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRlZCwgYWRkZWQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFu
YWdlci5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oPgotI2luY2x1
ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC00NiwxNyArNDYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0ZDo6bXV0ZXgmIHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4
OwotCi0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25z
dHJ1Y3QoKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBtdXRleDsKLX0KK1N0YXRpY0xvY2sgd29y
a2VyRGVidWdnZXJBZ2VudHNNdXRleDsKIAogdHlwZWRlZiBIYXNoTWFwPFdvcmtlclRocmVhZCos
IFdvcmtlckRlYnVnZ2VyQWdlbnQqPiBXb3JrZXJEZWJ1Z2dlckFnZW50czsKIApAQCAtOTUsMTMg
Kzg1LDEzIEBAIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQKICAgICAs
IG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUsIFdvcmtlckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckds
b2JhbFNjb3BlKGluc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRl
eCk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5zZXQoJmluc3BlY3RlZFdvcmtlckdsb2Jh
bFNjb3BlLT50aHJlYWQoKSwgdGhpcyk7CiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3Jr
ZXJEZWJ1Z2dlckFnZW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayh3b3JrZXJEZWJ1Z2dlckFnZW50c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNMb2NrPiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgpOwogCiAgICAgQVNTRVJUKHdv
cmtlckRlYnVnZ2VyQWdlbnRzKCkuY29udGFpbnMoJm1faW5zcGVjdGVkV29ya2VyR2xvYmFsU2Nv
cGUtPnRocmVhZCgpKSk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5yZW1vdmUoJm1faW5z
cGVjdGVkV29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpKTsKQEAgLTEwOSw3ICs5OSw3IEBAIFdv
cmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJEZWJ1Z2dlckFnZW4KIAogdm9pZCBXb3JrZXJEZWJ1
Z2dlckFnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaEluc3BlY3RvckNvbW1hbmRzKFdvcmtlclRo
cmVhZCogdGhyZWFkKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRleCk7CiAKICAgICBpZiAoV29ya2VyRGVi
dWdnZXJBZ2VudCogYWdlbnQgPSB3b3JrZXJEZWJ1Z2dlckFnZW50cygpLmdldCh0aHJlYWQpKQog
ICAgICAgICBhZ2VudC0+bV9zY3JpcHREZWJ1Z1NlcnZlci5pbnRlcnJ1cHRBbmRSdW5UYXNrKHN0
ZDo6bWFrZV91bmlxdWU8UnVuSW5zcGVjdG9yQ29tbWFuZHNUYXNrPih0aHJlYWQsIGFnZW50LT5t
X2luc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpXaGVlbEV2ZW50VGVzdFRy
aQogCiB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKCkK
IHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7
CiAgICAgbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5jbGVhcigpOwogICAgIG1fdGVzdE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKCk+KCk7CiAgICAgbV90ZXN0VHJp
Z2dlclRpbWVyLnN0b3AoKTsKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OmNsZWFyQWxsVGVzdAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnNldFRlc3RD
YWxsYmFja0FuZFN0YXJ0Tm90aWZpY2F0aW9uVGltZXIoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1
bmN0aW9uQ2FsbGJhY2spCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBtX3Rlc3ROb3RpZmljYXRp
b25DYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbkNhbGxiYWNrKTsKICAgICB9CiAgICAgCkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpzZXRUZXN0Q2FsbGIK
IAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNGb3JSZWFzb24oU2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVh
c29uKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdn
ZXJNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11
dGV4KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50
aWZpZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQog
ICAgICAgICBpdCA9IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnMuYWRkKGlkZW50aWZpZXIsIHN0
ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJSZWFzb24+KCkpLml0ZXJhdG9yOwpAQCAtNzYsNyArNzYs
NyBAQCB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6ZGVmZXJUZXN0c0ZvCiAKIHZvaWQgV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oU2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVhc29u
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4
KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50aWZp
ZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OnRyaWdnZXJUZXN0VAogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbkNhbGxi
YWNrOwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBpZiAoIW1fZGVmZXJUZXN0VHJpZ2dlclJlYXNv
bnMuaXNFbXB0eSgpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICAgICAgaWYgKGlzTG9n
Q2hhbm5lbEVuYWJsZWQoIldoZWVsRXZlbnRUZXN0VHJpZ2dlcnMiKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOSArMjksOSBAQAogI2lmbmRlZiBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAog
I2RlZmluZSBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAogCi0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5j
bHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTYwLDcgKzYwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV90ZXN0Tm90aWZpY2F0
aW9uQ2FsbGJhY2s7CiAgICAgUnVuTG9vcDo6VGltZXI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBt
X3Rlc3RUcmlnZ2VyVGltZXI7Ci0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fdGVzdFRyaWdnZXJN
dXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV90ZXN0VHJpZ2dlck11dGV4OwogICAgIFdURjo6SGFz
aE1hcDxTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIHN0ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJS
ZWFzb24+PiBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQogCisjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNTAsNyArNTEsNyBAQCB2
b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jCiAgICAgc2Nyb2xsaW5nVGhy
ZWFkLmNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zTXV0ZXgpOworICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhzaW5nbGV0b24oKS5tX2Z1bmN0aW9uc011
dGV4KTsKICAgICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlv
bik7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWQKIAogICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6
ZSB0aGUgcnVuIGxvb3AuCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2sobV9pbml0aWFsaXplUnVuTG9vcE11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbV90
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2Vi
Q29yZTogU2Nyb2xsaW5nIik7CiAgICAgICAgIApAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0YKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlv
bjx2b2lkICgpPj4gZnVuY3Rpb25zOwogICAgIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwogICAgICAgICBmdW5jdGlvbnMg
PSBXVEY6Om1vdmUobV9mdW5jdGlvbnMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
IAotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTc0LDEwICs3
NSwxMCBAQCBwcml2YXRlOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZp
ZXI7CiAKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uVmFyaWFibGU7Ci0gICAgc3RkOjptdXRleCBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7
CisgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKKyAg
ICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKIAotICAgIHN0ZDo6bXV0ZXggbV9mdW5j
dGlvbnNNdXRleDsKKyAgICBMb2NrIG1fZnVuY3Rpb25zTXV0ZXg7CiAgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4+IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUaHJlYWRNYWMubW0JKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUaHJlYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEzICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2luY2x1
ZGUgPG11dGV4PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFk
Ojppbml0aWFsaXplUnVuTG9vcCgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3Au
CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luaXRp
YWxpemVSdW5Mb29wTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOwogCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKIApAQCAtNDIsNyArNDQsNyBAQCB2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3AoCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcFNvdXJjZSA9
IGFkb3B0Q0YoQ0ZSdW5Mb29wU291cmNlQ3JlYXRlKDAsIDAsICZjb250ZXh0KSk7CiAgICAgICAg
IENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fdGhyZWFkUnVuTG9v
cFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKIAotICAgICAgICBtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5X2FsbCgpOworICAgICAgICBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQwLDkgKzE0MCw5IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNv
bnZvbHZlcigpCiAKICAgICAgICAgLy8gV2FrZSB1cCB0aHJlYWQgc28gaXQgY2FuIHJldHVybgog
ICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X2JhY2tncm91bmRUaHJlYWRNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCk7CiAgICAgICAgICAgICBtX21vcmVJbnB1
dEJ1ZmZlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAKICAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhyZWFkKTsKQEAgLTE1NSw3ICsxNTUsNyBA
QCB2b2lkIFJldmVyYkNvbnZvbHZlcjo6YmFja2dyb3VuZFRocmVhZEVuCiAgICAgICAgIC8vIFdh
aXQgZm9yIHJlYWx0aW1lIHRocmVhZCB0byBnaXZlIHVzIG1vcmUgaW5wdXQKICAgICAgICAgbV9t
b3JlSW5wdXRCdWZmZXJlZCA9IGZhbHNlOyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRl
eCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5k
VGhyZWFkTXV0ZXgpOwogCiAgICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX21vcmVJbnB1dEJ1ZmZlcmVkIHx8
IG1fd2FudHNUb0V4aXQ7IH0pOwogICAgICAgICB9CkBAIC0yMDksMTIgKzIwOSwxMiBAQCB2b2lk
IFJldmVyYkNvbnZvbHZlcjo6cHJvY2Vzcyhjb25zdCBBdWRpCiAgICAgLy8gc2lnbmFsIGZyb20g
dGltZSB0byB0aW1lLCBzaW5jZSB3ZSdsbCBnZXQgdG8gaXQgdGhlIG5leHQgdGltZSB3ZSdyZSBj
YWxsZWQuICBXZSdyZSBjYWxsZWQgcmVwZWF0ZWRseQogICAgIC8vIGFuZCBmcmVxdWVudGx5IChh
cm91bmQgZXZlcnkgM21zKS4gIFRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBwcm9jZXNzaW5nIHdl
bGwgaW50byB0aGUgZnV0dXJlIGFuZCBoYXMgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIAogICAg
IC8vIGxlZXdheSBoZXJlLi4uCi0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
KG1fYmFja2dyb3VuZFRocmVhZE11dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVu
aXF1ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5kVGhyZWFkTXV0ZXgsIHN0ZDo6dHJ5X3Rv
X2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9tb3JlSW5wdXRCdWZmZXJlZCA9IHRydWU7Ci0gICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogfQogCiB2b2lkIFJldmVyYkNvbnZvbHZlcjo6cmVz
ZXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29u
dm9sdmVyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL1JldmVyYkNvbnZvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzYsOSBAQAogI2luY2x1ZGUg
IlJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIgogI2luY2x1ZGUgIlJldmVyYkNvbnZvbHZlclN0
YWdlLmgiCiAjaW5jbHVkZSAiUmV2ZXJiSW5wdXRCdWZmZXIuaCIKLSNpbmNsdWRlIDxjb25kaXRp
b25fdmFyaWFibGU+CiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTg4LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICBUaHJlYWRJZGVudGlm
aWVyIG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9v
bCBtX21vcmVJbnB1dEJ1ZmZlcmVkOwotICAgIG11dGFibGUgc3RkOjptdXRleCBtX2JhY2tncm91
bmRUaHJlYWRNdXRleDsKLSAgICBtdXRhYmxlIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1fYmFj
a2dyb3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlOworICAgIG11dGFibGUgTG9jayBtX2JhY2tn
cm91bmRUaHJlYWRNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2JhY2tncm91bmRUaHJl
YWRDb25kaXRpb25WYXJpYWJsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1bi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFk
UnVuLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XZWJDb3JlVGhyZWFkUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOCBAQAog
CiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgogI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRJbnRl
cm5hbC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSB7CkBAIC00NCwyMyArNDUsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCB3
YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6
bXV0ZXg+IGxvY2sobV9zdGF0ZU11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2Nr
PiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgbV9jb21wbGV0aW9uQ29uZGl0aW9uVmFy
aWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gbV9jb21wbGV0ZWQ7IH0pOwogICAgIH0K
IAogICAgIHZvaWQgc2V0Q29tcGxldGVkKCkKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fc3RhdGVNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgQVNTRVJUKCFtX2NvbXBsZXRl
ZCk7CiAgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgbV9jb21wbGV0aW9uQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgICAgICBtX2NvbXBsZXRpb25Db25kaXRp
b25WYXJpYWJsZS5ub3RpZnlPbmUoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjptdXRl
eCBtX3N0YXRlTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbV9jb21wbGV0aW9u
Q29uZGl0aW9uVmFyaWFibGU7CisgICAgTG9jayBtX3N0YXRlTXV0ZXg7CisgICAgQ29uZGl0aW9u
IG1fY29tcGxldGlvbkNvbmRpdGlvblZhcmlhYmxlOwogICAgIGJvb2wgbV9jb21wbGV0ZWQ7CiB9
OwogCkBAIC0xMTAsNyArMTExLDcgQEAgZXh0ZXJuICJDIiB7CiAKIHR5cGVkZWYgV1RGOjpWZWN0
b3I8V2ViVGhyZWFkQmxvY2s+IFdlYlRocmVhZFJ1blF1ZXVlOwogCi1zdGF0aWMgc3RkOjptdXRl
eCogcnVuUXVldWVNdXRleDsKK3N0YXRpYyBTdGF0aWNMb2NrIHJ1blF1ZXVlTXV0ZXg7CiBzdGF0
aWMgQ0ZSdW5Mb29wU291cmNlUmVmIHJ1blNvdXJjZTsKIHN0YXRpYyBXZWJUaHJlYWRSdW5RdWV1
ZSogcnVuUXVldWU7CiAKQEAgLTExOCwxMyArMTE5LDEyIEBAIHN0YXRpYyB2b2lkIEhhbmRsZVJ1
blNvdXJjZSh2b2lkICppbmZvKQogewogICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKICAgICBBU1NF
UlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwotICAgIEFTU0VSVChydW5RdWV1ZU11dGV4KTsKICAg
ICBBU1NFUlQocnVuU291cmNlKTsKICAgICBBU1NFUlQocnVuUXVldWUpOwogCiAgICAgV2ViVGhy
ZWFkUnVuUXVldWUgcXVldWVDb3B5OwogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soKnJ1blF1ZXVlTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhydW5RdWV1ZU11dGV4KTsKICAgICAgICAgcXVldWVDb3B5ID0gKnJ1
blF1ZXVlOwogICAgICAgICBydW5RdWV1ZS0+Y2xlYXIoKTsKICAgICB9CkBAIC0xNDAsNyArMTQw
LDYgQEAgc3RhdGljIHZvaWQgX1dlYlRocmVhZFJ1bih2b2lkIChedGFzaykoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHJ1blF1ZXVlTXV0ZXgpOwogICAgIEFTU0VSVChy
dW5Tb3VyY2UpOwogICAgIEFTU0VSVChydW5RdWV1ZSk7CiAKQEAgLTE0OSw3ICsxNDgsNyBAQCBz
dGF0aWMgdm9pZCBfV2ViVGhyZWFkUnVuKHZvaWQgKF50YXNrKSgpCiAgICAgICAgIHN0YXRlID0g
bmV3IFdlYlRocmVhZEJsb2NrU3RhdGU7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKCpydW5RdWV1ZU11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY0xvY2s+IGxvY2socnVuUXVldWVNdXRleCk7CiAgICAgICAgIHJ1blF1ZXVlLT5h
cHBlbmQoV2ViVGhyZWFkQmxvY2sodGFzaywgc3RhdGUpKTsKICAgICB9CiAKQEAgLTE3NSw3ICsx
NzQsNiBAQCB2b2lkIFdlYlRocmVhZFJ1blN5bmModm9pZCAoXnRhc2spKCkpCiB2b2lkIFdlYlRo
cmVhZEluaXRSdW5RdWV1ZSgpCiB7CiAgICAgQVNTRVJUKCFydW5RdWV1ZSk7Ci0gICAgQVNTRVJU
KCFydW5RdWV1ZU11dGV4KTsKICAgICBBU1NFUlQoIXJ1blNvdXJjZSk7CiAKICAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IHByZWQ7CkBAIC0xODUsOCArMTgzLDYgQEAgdm9pZCBXZWJUaHJlYWRJ
bml0UnVuUXVldWUoKQogICAgICAgICBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IHJ1blNvdXJjZUNv
bnRleHQgPSB7MCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM
TCwgSGFuZGxlUnVuU291cmNlfTsKICAgICAgICAgcnVuU291cmNlID0gQ0ZSdW5Mb29wU291cmNl
Q3JlYXRlKE5VTEwsIC0xLCAmcnVuU291cmNlQ29udGV4dCk7CiAgICAgICAgIENGUnVuTG9vcEFk
ZFNvdXJjZShXZWJUaHJlYWRSdW5Mb29wKCksIHJ1blNvdXJjZSwga0NGUnVuTG9vcERlZmF1bHRN
b2RlKTsKLQotICAgICAgICBydW5RdWV1ZU11dGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11
dGV4PigpLnJlbGVhc2UoKTsKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0xhbmd1YWdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9MYW5ndWFnZS5tbQkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMTQg
QEAKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCA8bXV0ZXg+CiAj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9y
dCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IHN0ZDo6bXV0ZXgmIHByZWZlcnJlZExhbmd1YWdlc011dGV4KCkKLXsKLSAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBzdGF0aWMgc3RkOjptdXRleCogbXV0ZXg7Ci0K
LSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIG11dGV4ID0gc3RkOjpt
YWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICB9KTsKLQotICAgIHJldHVy
biAqbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBwcmVmZXJyZWRMYW5ndWFnZXNNdXRleDsK
IAogc3RhdGljIFZlY3RvcjxTdHJpbmc+JiBwcmVmZXJyZWRMYW5ndWFnZXMoKQogewpAQCAtNjcs
NyArNTgsNyBAQCArICh2b2lkKWxhbmd1YWdlUHJlZmVyZW5jZXNEaWRDaGFuZ2U6KE5TCiAgICAg
VU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKFdlYkNvcmU6OnByZWZlcnJlZExhbmd1YWdlc011dGV4KCkp
OworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhXZWJDb3JlOjpwcmVm
ZXJyZWRMYW5ndWFnZXNNdXRleCk7CiAgICAgICAgIFdlYkNvcmU6OnByZWZlcnJlZExhbmd1YWdl
cygpLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMTgsNyArMTA5LDcgQEAgVmVjdG9yPFN0cmluZz4g
cGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socHJlZmVycmVkTGFu
Z3VhZ2VzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socHJl
ZmVycmVkTGFuZ3VhZ2VzTXV0ZXgpOwogICAgIFZlY3RvcjxTdHJpbmc+JiB1c2VyUHJlZmVycmVk
TGFuZ3VhZ2VzID0gcHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiAKICAgICBpZiAodXNlclByZWZlcnJl
ZExhbmd1YWdlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENG
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTkgKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3BPYmplY3QgPSAwOwogCi1zdGF0aWMg
c3RkOjptdXRleCYgbG9hZGVyUnVuTG9vcE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXN0YXRp
YyBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSYgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxl
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+
IGNvbmRpdGlvblZhcmlhYmxlOwotCi0gICAgcmV0dXJuIGNvbmRpdGlvblZhcmlhYmxlOwotfQor
c3RhdGljIFN0YXRpY0xvY2sgbG9hZGVyUnVuTG9vcE11dGV4Oworc3RhdGljIFN0YXRpY0NvbmRp
dGlvbiBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGU7CiAKIHN0YXRpYyB2b2lkIGVtcHR5
UGVyZm9ybSh2b2lkKikgCiB7CkBAIC02MSw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGVtcHR5UGVy
Zm9ybSh2b2lkKikgCiBzdGF0aWMgdm9pZCBydW5Mb2FkZXJUaHJlYWQodm9pZCopCiB7CiAgICAg
ewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhsb2FkZXJSdW5Mb29w
TXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGxvYWRl
clJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbG9hZGVyUnVuTG9vcE9iamVjdCA9IENGUnVuTG9v
cEdldEN1cnJlbnQoKTsKIApAQCAtNzAsNyArNTksNyBAQCBzdGF0aWMgdm9pZCBydW5Mb2FkZXJU
aHJlYWQodm9pZCopCiAgICAgICAgIENGUnVuTG9vcFNvdXJjZVJlZiBib2d1c1NvdXJjZSA9IENG
UnVuTG9vcFNvdXJjZUNyZWF0ZSgwLCAwLCAmY3R4dCk7CiAgICAgICAgIENGUnVuTG9vcEFkZFNv
dXJjZShsb2FkZXJSdW5Mb29wT2JqZWN0LCBib2d1c1NvdXJjZSwga0NGUnVuTG9vcERlZmF1bHRN
b2RlKTsKIAotICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUoKS5ub3RpZnlf
b25lKCk7CisgICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUo
KTsKICAgICB9CiAKICAgICBTSW50MzIgcmVzdWx0OwpAQCAtODQsMTIgKzczLDEyIEBAIENGUnVu
TG9vcFJlZiBsb2FkZXJSdW5Mb29wKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRl
eCgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY0xvY2s+IGxvY2sobG9hZGVyUnVuTG9v
cE11dGV4KTsKIAogICAgIGlmICghbG9hZGVyUnVuTG9vcE9iamVjdCkgewogICAgICAgICBjcmVh
dGVUaHJlYWQocnVuTG9hZGVyVGhyZWFkLCAwLCAiV2ViQ29yZTogQ0ZOZXR3b3JrIExvYWRlciIp
OwogCi0gICAgICAgIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZSgpLndhaXQobG9jaywg
W10geyByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsgfSk7CisgICAgICAgIGxvYWRlclJ1bkxv
b3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFtdIHsgcmV0dXJuIGxvYWRlclJ1bkxvb3BP
YmplY3Q7IH0pOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVD
Rk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAiUHJvdGVjdGlvblNw
YWNlLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+Ci0jaW5j
bHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApAQCAtMTM2LDIwICsxMzYsMjAgQEAgc3RhdGljIHZvaWQgY2FsbE9uTWFp
blRocmVhZEFuZFdhaXQoc3RkOgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RkOjpt
dXRleCBtdXRleDsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kaXRpb25WYXJpYWJs
ZTsKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKIAog
ICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOwogCiAgICAgY2FsbE9uTWFpblRocmVhZChbJl0g
ewogICAgICAgICBmdW5jdGlvbigpOwogCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKG11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobXV0
ZXgpOwogICAgICAgICBpc0ZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgY29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5X29uZSgpOworICAgICAgICBjb25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUoKTsK
ICAgICB9KTsKIAotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtdXRleCk7
CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4KTsKICAgICBjb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9T
b2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw5ICs0MCw4IEBACiAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAotI2luY2x1ZGUg
PG11dGV4PgotCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
IApAQCAtMTA1LDggKzEwNCw4IEBAIHByaXZhdGU6CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1f
d29ya2VyVGhyZWFkIHsgMCB9OwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3RvcFRocmVhZCB7
IGZhbHNlIH07Ci0gICAgc3RkOjptdXRleCBtX211dGV4U2VuZDsKLSAgICBzdGQ6Om11dGV4IG1f
bXV0ZXhSZWNlaXZlOworICAgIExvY2sgbV9tdXRleFNlbmQ7CisgICAgTG9jayBtX211dGV4UmVj
ZWl2ZTsKICAgICBEZXF1ZTxTb2NrZXREYXRhPiBtX3NlbmREYXRhOwogICAgIERlcXVlPFNvY2tl
dERhdGE+IG1fcmVjZWl2ZURhdGE7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJs
LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb24KIAogICAg
IGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKIAotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CiAgICAgbV9zZW5kRGF0YS5hcHBlbmQoU29ja2V0RGF0
YSB7IFdURjo6bW92ZShjb3B5KSwgbGVuZ3RoIH0pOwogCiAgICAgcmV0dXJuIGxlbmd0aDsKQEAg
LTE0Niw3ICsxNDYsNyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEoQ1VSTCog
CiAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUgLSB0b3Rh
bEJ5dGVzU2VudDsKICAgICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2VuZERhdGEu
ZGF0YS5nZXQoKSArIHRvdGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKIAotICAgICAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleFNlbmQpOworICAgICAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwogICAgICAgICAgICAg
bV9zZW5kRGF0YS5wcmVwZW5kKFNvY2tldERhdGEgeyBXVEY6Om1vdmUoY29weSksIHJlc3RMZW5n
dGggfSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZp
c2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIgogCiAjaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0zNiwxMSArMzYsNyBAQCBuYW1lc3BhY2UgU1FMaXRlRGF0YWJhc2VU
cmFja2VyIHsKIHN0YXRpYyBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQqIHNfc3RhdGljU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50ID0gbnVsbHB0cjsKIHN0YXRpYyB1bnNpZ25lZCBzX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIgPSAwOwogCi1zdGF0aWMgc3RkOjptdXRleCYgdHJh
bnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxz
dGQ6Om11dGV4PiB0aXBNdXRleDsKLSAgICByZXR1cm4gdGlwTXV0ZXg7Ci19CitzdGF0aWMgU3Rh
dGljTG9jayB0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKIAogdm9pZCBzZXRDbGllbnQoU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBjbGllbnQpCiB7CkBAIC01NCw3ICs1MCw3IEBAIHZv
aWQgaW5jcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQKICAgICBpZiAoIXNfc3RhdGlj
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCgp
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0cmFuc2FjdGlvbkluUHJv
Z3Jlc3NNdXRleCk7CiAKICAgICBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXIrKzsKICAg
ICBpZiAoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyID09IDEpCkBAIC02Niw3ICs2Miw3
IEBAIHZvaWQgZGVjcmVtZW50VHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnQKICAgICBpZiAoIXNf
c3RhdGljU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0cmFuc2FjdGlvbkluUHJvZ3Jlc3NN
dXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0cmFuc2FjdGlv
bkluUHJvZ3Jlc3NNdXRleCk7CiAKICAgICBBU1NFUlQoc190cmFuc2FjdGlvbkluUHJvZ3Jlc3ND
b3VudGVyKTsKICAgICBzX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50ZXItLTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc2NSw4ICs3NjYsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUFuZFN3YXBOb25TaGFyCiAjaWYgRU5BQkxFKENPTVBB
UkVfQU5EX1NXQVApCiAgICAgcmV0dXJuIFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIGV4cGVj
dGVkLCBuZXdWYWx1ZSk7CiAjZWxzZQotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NB
TChzdGQ6Om11dGV4LCBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0ZXgsICgpKTsK
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKG5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3JNdXRleCk7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbm9uU2hhcmVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvck11dGV4OworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrZXIobm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4KTsKICAgICBpZiAo
bm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciAhPSBleHBlY3RlZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgPSBuZXdWYWx1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xMDYsMTQgKzEwNyw3
IEBAIHN0cnVjdCBUZXh0Q29kZWNGYWN0b3J5IHsKIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIFRleHRFbmNvZGluZ05hbWVIYXNoPiBUZXh0RW5jb2RpbmdOYW1lTWFw
OwogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBUZXh0Q29kZWNGYWN0b3J5PiBUZXh0Q29k
ZWNNYXA7CiAKLXN0YXRpYyBzdGQ6Om11dGV4JiBlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgoKQotewot
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gY29uc3RydWN0IHRoaXMgbXV0ZXggaW4gYSB0aHJlYWQg
c2FmZSB3YXkgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uCi0gICAgLy8gaXMgY2FsbGVkIG9uIHRoZSBt
YWluIHRocmVhZCBmb3IgYW55IHBhZ2UgYmVmb3JlIGl0IGlzIHVzZWQgaW4gd29ya2VyIHRocmVh
ZHMuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAg
cmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgZW5jb2RpbmdSZWdpc3RyeU11dGV4
OwogCiBzdGF0aWMgVGV4dEVuY29kaW5nTmFtZU1hcCogdGV4dEVuY29kaW5nTmFtZU1hcDsKIHN0
YXRpYyBUZXh0Q29kZWNNYXAqIHRleHRDb2RlY01hcDsKQEAgLTI5NCw3ICsyODgsNyBAQCBzdGF0
aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKIAogc3RkOjp1bmlxdWVfcHRyPFRleHRDb2Rl
Yz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soZW5jb2RpbmdSZWdpc3RyeU11dGV4KCkpOwor
ICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRl
eCk7CiAKICAgICBBU1NFUlQodGV4dENvZGVjTWFwKTsKICAgICBUZXh0Q29kZWNGYWN0b3J5IGZh
Y3RvcnkgPSB0ZXh0Q29kZWNNYXAtPmdldChlbmNvZGluZy5uYW1lKCkpOwpAQCAtMzEwLDcgKzMw
NCw3IEBAIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ04KICAgICBpZiAo
IXRleHRFbmNvZGluZ05hbWVNYXApCiAgICAgICAgIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKTsK
IAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlN
dXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1Jl
Z2lzdHJ5TXV0ZXgpOwogCiAgICAgaWYgKGNvbnN0IGNoYXIqIGF0b21pY05hbWUgPSB0ZXh0RW5j
b2RpbmdOYW1lTWFwLT5nZXQobmFtZSkpCiAgICAgICAgIHJldHVybiBhdG9taWNOYW1lOwpAQCAt
Mzc3LDcgKzM3MSw3IEBAIHZvaWQgZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQogICAgIHVuc2ln
bmVkIHNpemUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5zaXplKCk7CiAgICAgZnByaW50ZihzdGRl
cnIsICJEdW1waW5nICV1IGVudHJpZXMgaW4gV2ViQ29yZTo6dGV4dEVuY29kaW5nTmFtZU1hcC4u
LlxuIiwgc2l6ZSk7CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhlbmNv
ZGluZ1JlZ2lzdHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxv
Y2soZW5jb2RpbmdSZWdpc3RyeU11dGV4KTsKIAogICAgIFRleHRFbmNvZGluZ05hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+YmVnaW4oKTsKICAgICBUZXh0
RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0ZXh0RW5jb2RpbmdOYW1lTWFw
LT5lbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAJKHJl
dmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlRocmVhZEdsb2Jh
bERhdGEuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00
NiwxNyArNDcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBzdGQ6Om11dGV4
JiB0aHJlYWRTZXRNdXRleCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFn
OwotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgp
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgdGhy
ZWFkU2V0TXV0ZXg7CiAKIHN0YXRpYyBIYXNoU2V0PFdvcmtlclRocmVhZCo+JiB3b3JrZXJUaHJl
YWRzKCkKIHsKQEAgLTY3LDcgKzU4LDcgQEAgc3RhdGljIEhhc2hTZXQ8V29ya2VyVGhyZWFkKj4m
IHdvcmtlclRocgogCiB1bnNpZ25lZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkK
IHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0aHJlYWRTZXRNdXRleCgp
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0aHJlYWRTZXRNdXRleCk7
CiAKICAgICByZXR1cm4gd29ya2VyVGhyZWFkcygpLnNpemUoKTsKIH0KQEAgLTEwNiwxNCArOTcs
MTQgQEAgV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgVVJMJiBzYwogICAgICwgbV9u
b3RpZmljYXRpb25DbGllbnQoMCkKICNlbmRpZgogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKHRocmVhZFNldE11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNMb2NrPiBsb2NrKHRocmVhZFNldE11dGV4KTsKIAogICAgIHdvcmtlclRocmVhZHMoKS5hZGQo
dGhpcyk7CiB9CiAKIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCiB7Ci0gICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodGhyZWFkU2V0TXV0ZXgoKSk7CisgICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodGhyZWFkU2V0TXV0ZXgpOwogCiAgICAgQVNTRVJU
KHdvcmtlclRocmVhZHMoKS5jb250YWlucyh0aGlzKSk7CiAgICAgd29ya2VyVGhyZWFkcygpLnJl
bW92ZSh0aGlzKTsKQEAgLTIyMSw3ICsyMTIsNyBAQCB2b2lkIFdvcmtlclRocmVhZDo6c3RvcCgp
CiAKIHZvaWQgV29ya2VyVGhyZWFkOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRo
cmVhZHMoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRocmVhZFNl
dE11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHRocmVhZFNl
dE11dGV4KTsKIAogICAgIGZvciAoYXV0byogd29ya2VyVGhyZWFkIDogd29ya2VyVGhyZWFkcygp
KSB7CiAgICAgICAgIHdvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKFtdIChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JikgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjIxKQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAK
KzIwMTUtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXBsYWNlIGFsbCB1c2VzIG9mIHN0ZDo6bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0
aCBXVEY6OkxvY2svV1RGOjpDb25kaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODE0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6dHJhdmVy
c2UpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6
CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmRpc3BhdGNoTWVz
c2FnZXMpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNw
YXRjaE1lc3NhZ2VBbmRSZXNldERpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc0ZvckNvbm5lY3Rp
b24pOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChJ
UEM6OkNvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246Omlu
c3RhbGxJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAoSVBDOjpDb25uZWN0
aW9uOjp1bmluc3RhbGxJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uOjpoYXNJbmNvbWluZ1N5bmNNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6
c2VuZE91dGdvaW5nTWVzc2FnZXMpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjplbnF1ZXVl
SW5jb21pbmdNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6ZGlzcGF0Y2hPbmVN
ZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAq
IFNoYXJlZC9CbG9ja2luZ1Jlc3BvbnNlTWFwLmg6CisgICAgICAgIChCbG9ja2luZ1Jlc3BvbnNl
TWFwOjp3YWl0Rm9yUmVzcG9uc2UpOgorICAgICAgICAoQmxvY2tpbmdSZXNwb25zZU1hcDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKEJsb2NraW5nUmVzcG9uc2VNYXA6OmNhbmNlbCk6
CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6c2F2ZVRvRmlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpbkluZm9DYWNoZTo6dXBkYXRlUGx1Z2luSW5mbyk6CisgICAgICAgICogVUlQ
cm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV0tQcmludGluZ1ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfcHJlcGFyZVBERkRhdGFGb3JQ
cmludGluZ09uU2Vjb25kYXJ5VGhyZWFkXSk6CisgICAgICAgIChwcmVwYXJlRGF0YUZvclByaW50
aW5nT25TZWNvbmRhcnlUaHJlYWQpOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBrbm93c1Bh
Z2VSYW5nZTpdKToKKwogMjAxNS0wOC0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCwgYW5kIGZpeCB0aGUgdmVyc2lvbiBjaGVjay4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVy
cy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVJT0NoYW5uZWwuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CisjaW5j
bHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMTE5LDggKzEyMSw4IEBA
IHB1YmxpYzoKICAgICBjb25zdCBUcmF2ZXJzZUZsYWdzIGZsYWdzOwogICAgIGNvbnN0IFRyYXZl
cnNlSGFuZGxlciBoYW5kbGVyOwogCi0gICAgc3RkOjptdXRleCBhY3RpdmVNdXRleDsKLSAgICBz
dGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBhY3RpdmVDb25kaXRpb247CisgICAgTG9jayBhY3RpdmVN
dXRleDsKKyAgICBDb25kaXRpb24gYWN0aXZlQ29uZGl0aW9uOwogICAgIHVuc2lnbmVkIGFjdGl2
ZUNvdW50IHsgMCB9OwogfTsKIApAQCAtNzc0LDcgKzc3Niw3IEBAIHZvaWQgU3RvcmFnZTo6dHJh
dmVyc2UoVHJhdmVyc2VGbGFncyBmbGEKICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlv
bi5mbGFncyAmIFRyYXZlcnNlRmxhZzo6U2hhcmVDb3VudCkKICAgICAgICAgICAgICAgICBib2R5
U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aEZvclJlY29yZFBh
dGgocmVjb3JkUGF0aCkpOwogCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOworICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsK
ICAgICAgICAgICAgICsrdHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAKICAgICAgICAg
ICAgIGF1dG8gY2hhbm5lbCA9IElPQ2hhbm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6
OlR5cGU6OlJlYWQpOwpAQCAtNzk3LDkgKzc5OSw5IEBAIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2Uo
VHJhdmVyc2VGbGFncyBmbGEKICAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2VPcGVyYXRpb24u
aGFuZGxlcigmcmVjb3JkLCBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5h
Y3RpdmVNdXRleCk7CisgICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
dHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOwogICAgICAgICAgICAgICAgIC0tdHJhdmVy
c2VPcGVyYXRpb24uYWN0aXZlQ291bnQ7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2VPcGVyYXRp
b24uYWN0aXZlQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJz
ZU9wZXJhdGlvbi5hY3RpdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgICAgICB9KTsK
IAogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4aW11bVBhcmFsbGVsUmVhZENvdW50ID0g
NTsKQEAgLTgwOCw3ICs4MTAsNyBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKFRyYXZlcnNlRmxh
Z3MgZmxhCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgICAgIC8vIFdhaXQgZm9y
IGFsbCByZWFkcyB0byBmaW5pc2guCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CiAgICAg
ICAgIHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvbmRpdGlvbi53YWl0KGxvY2ssIFsmdHJhdmVy
c2VPcGVyYXRpb25dIHsKICAgICAgICAgICAgIHJldHVybiAhdHJhdmVyc2VPcGVyYXRpb24uYWN0
aXZlQ291bnQ7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IHByaXZhdGU6CiAgICAgQmluYXJ5U2VtYXBob3JlIG1fd2FpdEZvclN5bmNSZXBseVNlbWFwaG9y
ZTsKIAogICAgIC8vIFByb3RlY3RzIG1fZGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29ya1Nl
dCBhbmQgbV9tZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkuCi0gICAg
c3RkOjptdXRleCBtX211dGV4OworICAgIExvY2sgbV9tdXRleDsKIAogICAgIC8vIFRoZSBzZXQg
b2YgY29ubmVjdGlvbnMgZm9yIHdoaWNoIHdlJ3ZlIHNjaGVkdWxlZCBhIGNhbGwgdG8gZGlzcGF0
Y2hNZXNzYWdlQW5kUmVzZXREaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNGb3JDb25uZWN0aW9u
LgogICAgIEhhc2hTZXQ8UmVmUHRyPENvbm5lY3Rpb24+PiBtX2RpZFNjaGVkdWxlRGlzcGF0Y2hN
ZXNzYWdlc1dvcmtTZXQ7CkBAIC0xMzEsNyArMTMxLDcgQEAgYm9vbCBDb25uZWN0aW9uOjpTeW5j
TWVzc2FnZVN0YXRlOjpwcm9jZQogICAgIENvbm5lY3Rpb25BbmRJbmNvbWluZ01lc3NhZ2UgY29u
bmVjdGlvbkFuZEluY29taW5nTWVzc2FnZSB7IGNvbm5lY3Rpb24sIFdURjo6bW92ZShtZXNzYWdl
KSB9OwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAobV9kaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNXb3JrU2V0
LmFkZCgmY29ubmVjdGlvbikuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgUmVmUHRyPENvbm5l
Y3Rpb24+IHByb3RlY3RlZENvbm5lY3Rpb24oJmNvbm5lY3Rpb24pOwpAQCAtMTU1LDcgKzE1NSw3
IEBAIHZvaWQgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlzcGEKICAgICBWZWN0b3I8
Q29ubmVjdGlvbkFuZEluY29taW5nTWVzc2FnZT4gbWVzc2FnZXNUb0Rpc3BhdGNoV2hpbGVXYWl0
aW5nRm9yU3luY1JlcGx5OwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAgICAgICAgIG1fbWVzc2FnZXNUb0Rpc3BhdGNoV2hpbGVXYWl0aW5nRm9yU3lu
Y1JlcGx5LnN3YXAobWVzc2FnZXNUb0Rpc3BhdGNoV2hpbGVXYWl0aW5nRm9yU3luY1JlcGx5KTsK
ICAgICB9CiAKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIENvbm5lY3Rpb246OlN5bmNNZXNzYWdl
U3RhdGU6OmRpc3BhCiAgICAgfQogCiAgICAgaWYgKCFtZXNzYWdlc1RvUHV0QmFjay5pc0VtcHR5
KCkpIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgICAg
IGZvciAoYXV0byYgbWVzc2FnZSA6IG1lc3NhZ2VzVG9QdXRCYWNrKQogICAgICAgICAgICAgbV9t
ZXNzYWdlc1RvRGlzcGF0Y2hXaGlsZVdhaXRpbmdGb3JTeW5jUmVwbHkuYXBwZW5kKFdURjo6bW92
ZShtZXNzYWdlKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpTeW5jTWVz
c2FnZVN0YXRlOjpkaXNwYQogdm9pZCBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNw
YXRjaE1lc3NhZ2VBbmRSZXNldERpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc0ZvckNvbm5lY3Rp
b24oQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgQVNTRVJUKG1fZGlkU2NoZWR1bGVEaXNwYXRj
aE1lc3NhZ2VzV29ya1NldC5jb250YWlucygmY29ubmVjdGlvbikpOwogICAgICAgICBtX2RpZFNj
aGVkdWxlRGlzcGF0Y2hNZXNzYWdlc1dvcmtTZXQucmVtb3ZlKCZjb25uZWN0aW9uKTsKICAgICB9
CkBAIC0zNjMsNyArMzYzLDcgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVu
aXF1ZQogI2VuZGlmCiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4
PiBsb2NrKG1fb3V0Z29pbmdNZXNzYWdlc011dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXgpOwogICAgICAgICBtX291dGdvaW5n
TWVzc2FnZXMuYXBwZW5kKFdURjo6bW92ZShlbmNvZGVyKSk7CiAgICAgfQogICAgIApAQCAtMzg4
LDcgKzM4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gQ29ubmVjdGkKIAog
ICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIG1lc3NhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgaW5j
b21pbmcgbWVzc2FnZXMgcXVldWUuCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKIAogICAgICAgICBm
b3IgKGF1dG8gaXQgPSBtX2luY29taW5nTWVzc2FnZXMuYmVnaW4oKSwgZW5kID0gbV9pbmNvbWlu
Z01lc3NhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4mIG1lc3NhZ2UgPSAqaXQ7CkBAIC00MTQsNyArNDE0LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBDb25uZWN0aQogICAgIFdhaXRGb3JN
ZXNzYWdlU3RhdGUgd2FpdGluZ0Zvck1lc3NhZ2UobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2Fn
ZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHdhaXRGb3JNZXNzYWdlRmxhZ3MpOwogCiAgICAgewotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0
ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3dhaXRGb3JNZXNzYWdl
TXV0ZXgpOwogCiAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaGF2aW5nIG11bHRpcGxlIGNs
aWVudHMgd2FpdGluZyBmb3IgbWVzc2FnZXMuCiAgICAgICAgIEFTU0VSVCghbV93YWl0aW5nRm9y
TWVzc2FnZSk7CkBAIC00MjMsOCArNDIzLDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNv
ZGVyPiBDb25uZWN0aQogICAgIH0KIAogICAgIC8vIE5vdyB3YWl0IGZvciBpdCB0byBiZSBzZXQu
CisgICAgQ29uZGl0aW9uOjpDbG9jazo6dGltZV9wb2ludCBhYnNvbHV0ZVRpbWVvdXQgPSBDb25k
aXRpb246OkNsb2NrOjpub3coKSArIHRpbWVvdXQ7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRl
eCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3dhaXRGb3JNZXNzYWdl
TXV0ZXgpOwogCiAgICAgICAgIGlmIChtX3dhaXRpbmdGb3JNZXNzYWdlLT5kZWNvZGVyKSB7CiAg
ICAgICAgICAgICBhdXRvIGRlY29kZXIgPSBXVEY6Om1vdmUobV93YWl0aW5nRm9yTWVzc2FnZS0+
ZGVjb2Rlcik7CkBAIC00MzMsOSArNDM0LDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNv
ZGVyPiBDb25uZWN0aQogICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IHdlIHdhaXQuCi0gICAg
ICAgIHN0ZDo6Y3Zfc3RhdHVzIHN0YXR1cyA9IG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ud2Fp
dF9mb3IobG9jaywgdGltZW91dCk7CisgICAgICAgIGJvb2wgZGlkVGltZW91dCA9ICFtX3dhaXRG
b3JNZXNzYWdlQ29uZGl0aW9uLndhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZVRpbWVvdXQpOwogICAg
ICAgICAvLyBXZSB0aW1lZCBvdXQsIGxvc3Qgb3VyIGNvbm5lY3Rpb24sIG9yIGEgc3luYyBtZXNz
YWdlIGNhbWUgaW4gd2l0aCBJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMsIHNv
IHN0b3Agd2FpdGluZy4KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBzdGQ6OmN2X3N0YXR1czo6dGlt
ZW91dCB8fCBtX3dhaXRpbmdGb3JNZXNzYWdlLT5tZXNzYWdlV2FpdGluZ0ludGVycnVwdGVkKQor
ICAgICAgICBpZiAoZGlkVGltZW91dCB8fCBtX3dhaXRpbmdGb3JNZXNzYWdlLT5tZXNzYWdlV2Fp
dGluZ0ludGVycnVwdGVkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC02NzAsNyAr
NjcxLDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKAogI2VuZGlm
CiAKICAgICBpZiAobWVzc2FnZS0+aXNTeW5jTWVzc2FnZSgpKSB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0
ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nU3luY01l
c3NhZ2VDYWxsYmFja011dGV4KTsKIAogICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9p
bmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tzLnZhbHVlcygpKQogICAgICAgICAgICAgbV9pbmNv
bWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tRdWV1ZS0+ZGlzcGF0Y2goY2FsbGJhY2spOwpAQCAtNjg2
LDE4ICs2ODcsMTggQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKAog
CiAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd2FpdGluZyBmb3IgdGhpcyBtZXNzYWdlLgogICAgIHsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0Rm9yTWVzc2Fn
ZU11dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV93YWl0Rm9yTWVz
c2FnZU11dGV4KTsKIAogICAgICAgICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZSAmJiBtX3dhaXRp
bmdGb3JNZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1lID09IG1lc3NhZ2UtPm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSAmJiBtX3dhaXRpbmdGb3JNZXNzYWdlLT5tZXNzYWdlTmFtZSA9PSBtZXNzYWdl
LT5tZXNzYWdlTmFtZSgpICYmIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPmRlc3RpbmF0aW9uSUQgPT0g
bWVzc2FnZS0+ZGVzdGluYXRpb25JRCgpKSB7CiAgICAgICAgICAgICBtX3dhaXRpbmdGb3JNZXNz
YWdlLT5kZWNvZGVyID0gV1RGOjptb3ZlKG1lc3NhZ2UpOwogICAgICAgICAgICAgQVNTRVJUKG1f
d2FpdGluZ0Zvck1lc3NhZ2UtPmRlY29kZXIpOwotICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2Fn
ZUNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UgJiYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UtPndh
aXRGb3JNZXNzYWdlRmxhZ3MgJiBJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMp
ICYmIG1lc3NhZ2UtPmlzU3luY01lc3NhZ2UoKSkgewogICAgICAgICAgICAgbV93YWl0aW5nRm9y
TWVzc2FnZS0+bWVzc2FnZVdhaXRpbmdJbnRlcnJ1cHRlZCA9IHRydWU7Ci0gICAgICAgICAgICBt
X3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fd2Fp
dEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTcwNiw3ICs3MDcsNyBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uo
CiAKIHVpbnQ2NF90IENvbm5lY3Rpb246Omluc3RhbGxJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJh
Y2soc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjYWxsYmFjaykKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4KTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxs
YmFja011dGV4KTsKIAogICAgIG1fbmV4dEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFja0lEKys7
CiAKQEAgLTcyMCwxMyArNzIxLDEzIEBAIHVpbnQ2NF90IENvbm5lY3Rpb246Omluc3RhbGxJbmNv
bWluZ1N5bmMKIAogdm9pZCBDb25uZWN0aW9uOjp1bmluc3RhbGxJbmNvbWluZ1N5bmNNZXNzYWdl
Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4KTsKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011
dGV4KTsKICAgICBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNr
SUQpOwogfQogCiBib29sIENvbm5lY3Rpb246Omhhc0luY29taW5nU3luY01lc3NhZ2UoKQogewot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nTWVzc2FnZXNN
dXRleCk7CiAKICAgICBmb3IgKGF1dG8mIG1lc3NhZ2UgOiBtX2luY29taW5nTWVzc2FnZXMpIHsK
ICAgICAgICAgaWYgKG1lc3NhZ2UtPmlzU3luY01lc3NhZ2UoKSkKQEAgLTc2MywxMSArNzY0LDEx
IEBAIHZvaWQgQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKCkKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fd2FpdEZvck1lc3Nh
Z2VNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fd2FpdEZvck1l
c3NhZ2VNdXRleCk7CiAgICAgICAgIGlmIChtX3dhaXRpbmdGb3JNZXNzYWdlKQogICAgICAgICAg
ICAgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZVdhaXRpbmdJbnRlcnJ1cHRlZCA9IHRydWU7
CiAgICAgfQotICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAg
IG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5QWxsKCk7CiAKICAgICBpZiAobV9kaWRD
bG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1ZUNhbGxiYWNrKQogICAgICAgICBtX2RpZENsb3NlT25D
b25uZWN0aW9uV29ya1F1ZXVlQ2FsbGJhY2sodGhpcyk7CkBAIC04MDMsNyArODA0LDcgQEAgdm9p
ZCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlcygpCiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZXNzYWdlRW5jb2Rlcj4gbWVzc2FnZTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX291dGdvaW5nTWVzc2FnZXNNdXRleCk7
CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX291dGdvaW5nTWVzc2Fn
ZXNNdXRleCk7CiAgICAgICAgICAgICBpZiAobV9vdXRnb2luZ01lc3NhZ2VzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG1lc3NhZ2UgPSBtX291dGdvaW5n
TWVzc2FnZXMudGFrZUZpcnN0KCk7CkBAIC04NjIsNyArODYzLDcgQEAgdm9pZCBDb25uZWN0aW9u
OjpkaWRGYWlsVG9TZW5kU3luY01lc3NhZwogdm9pZCBDb25uZWN0aW9uOjplbnF1ZXVlSW5jb21p
bmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gaW5jb21pbmdNZXNzYWdl
KQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9p
bmNvbWluZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CiAgICAgICAgIG1faW5jb21pbmdNZXNzYWdlcy5h
cHBlbmQoV1RGOjptb3ZlKGluY29taW5nTWVzc2FnZSkpOwogICAgIH0KIApAQCAtOTE4LDcgKzkx
OSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6ZGlzcGF0Y2hPbmVNZXNzYWdlKCkKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IG1lc3NhZ2U7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgp
OwogICAgICAgICBpZiAobV9pbmNvbWluZ01lc3NhZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5o
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1R5cGUuaCIKICNpbmNsdWRlIDxhdG9taWM+
Ci0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0yNTksMTUgKzI1OSwxNSBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9kaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2U7CiAKICAgICAvLyBJbmNvbWluZyBtZXNz
YWdlcy4KLSAgICBzdGQ6Om11dGV4IG1faW5jb21pbmdNZXNzYWdlc011dGV4OworICAgIExvY2sg
bV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXg7CiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPE1lc3Nh
Z2VEZWNvZGVyPj4gbV9pbmNvbWluZ01lc3NhZ2VzOwogCiAgICAgLy8gT3V0Z29pbmcgbWVzc2Fn
ZXMuCi0gICAgc3RkOjptdXRleCBtX291dGdvaW5nTWVzc2FnZXNNdXRleDsKKyAgICBMb2NrIG1f
b3V0Z29pbmdNZXNzYWdlc011dGV4OwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdl
RW5jb2Rlcj4+IG1fb3V0Z29pbmdNZXNzYWdlczsKICAgICAKLSAgICBzdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZSBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uOwotICAgIHN0ZDo6bXV0ZXggbV93YWl0
Rm9yTWVzc2FnZU11dGV4OworICAgIENvbmRpdGlvbiBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9u
OworICAgIExvY2sgbV93YWl0Rm9yTWVzc2FnZU11dGV4OwogCiAgICAgV2FpdEZvck1lc3NhZ2VT
dGF0ZSogbV93YWl0aW5nRm9yTWVzc2FnZTsKIApAQCAtMzA3LDcgKzMwNyw3IEBAIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTZWNvbmRhcnlUaHJlYWRQZW5kaW5nU3lu
Y1JlcGx5Kj4gU2Vjb25kYXJ5VGhyZWFkUGVuZGluZ1N5bmNSZXBseU1hcDsKICAgICBTZWNvbmRh
cnlUaHJlYWRQZW5kaW5nU3luY1JlcGx5TWFwIG1fc2Vjb25kYXJ5VGhyZWFkUGVuZGluZ1N5bmNS
ZXBseU1hcDsKIAotICAgIHN0ZDo6bXV0ZXggbV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tN
dXRleDsKKyAgICBMb2NrIG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXg7CiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9pbmNvbWluZ1N5bmNN
ZXNzYWdlQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxXb3JrUXVldWU+IG1faW5jb21pbmdTeW5jTWVz
c2FnZUNhbGxiYWNrUXVldWU7CiAgICAgdWludDY0X3QgbV9uZXh0SW5jb21pbmdTeW5jTWVzc2Fn
ZUNhbGxiYWNrSUQgeyAwIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQmxvY2tpbmdS
ZXNwb25zZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9CbG9ja2lu
Z1Jlc3BvbnNlTWFwLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9CbG9ja2luZ1Jlc3BvbnNlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAK
ICNpZm5kZWYgQmxvY2tpbmdSZXNwb25zZU1hcF9oCiAjZGVmaW5lIEJsb2NraW5nUmVzcG9uc2VN
YXBfaAogCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPHd0Zi9Db25k
aXRpb24uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBA
IC00MCw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VD4gd2FpdEZvclJl
c3BvbnNlKHVpbnQ2NF90IHJlcXVlc3RJRCkKICAgICB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAg
ICAgICAgICAgIGlmIChtX2NhbmNlbGVkKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtNTYsMjYgKzU3LDI2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKHVpbnQ2NF90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPFQ+IHJlc3BvbnNlKQogICAg
IHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBBU1NF
UlQoIW1fcmVzcG9uc2VzLmNvbnRhaW5zKHJlcXVlc3RJRCkpOwogCiAgICAgICAgIG1fcmVzcG9u
c2VzLnNldChyZXF1ZXN0SUQsIFdURjo6bW92ZShyZXNwb25zZSkpOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBXYWtpbmcgdXAgYWxsIHRocmVhZHMgaXMgcXVpdGUgaW5lZmZpY2llbnQuCi0gICAgICAg
IG1fY29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IENvdWxkIGdldCBh
IHNsaWdodCBzcGVlZC11cCBmcm9tIHVzaW5nIG5vdGlmeU9uZSgpLgorICAgICAgICBtX2NvbmRp
dGlvbi5ub3RpZnlBbGwoKTsKICAgICB9CiAKICAgICB2b2lkIGNhbmNlbCgpCiAgICAgewogICAg
ICAgICBtX2NhbmNlbGVkID0gdHJ1ZTsKIAotICAgICAgICAvLyBGSVhNRTogV2FraW5nIHVwIGFs
bCB0aHJlYWRzIGlzIHF1aXRlIGluZWZmaWNpZW50LgotICAgICAgICBtX2NvbmRpdGlvbi5ub3Rp
ZnlfYWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb3VsZCBnZXQgYSBzbGlnaHQgc3BlZWQtdXAg
ZnJvbSB1c2luZyBub3RpZnlPbmUoKS4KKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKLSAgICBzdGQ6OmNv
bmRpdGlvbl92YXJpYWJsZSBtX2NvbmRpdGlvbjsKKyAgICBMb2NrIG1fbXV0ZXg7CisgICAgQ29u
ZGl0aW9uIG1fY29uZGl0aW9uOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVf
cHRyPFQ+PiBtX3Jlc3BvbnNlczsKICAgICBib29sIG1fY2FuY2VsZWQ7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0Nh
Y2hlLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDcgQEAgUGx1Z2luSW5mb0NhY2hlOjp+UGx1Z2luSW5mb0NhY2hlKCkKIAogdm9pZCBQbHVnaW5J
bmZvQ2FjaGU6OnNhdmVUb0ZpbGUoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4
PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgp
OwogCiAgICAgZ3NpemUgZGF0YUxlbmd0aDsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRhdGEoZ19r
ZXlfZmlsZV90b19kYXRhKG1fY2FjaGVGaWxlLmdldCgpLCAmZGF0YUxlbmd0aCwgbnVsbHB0cikp
OwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgUGx1Z2luSW5mb0NhY2hlOjp1cGRhdGVQbHVnaW5J
bmZvKGMKICAgICBpZiAobV9jYWNoZVBhdGggJiYgIW1fcmVhZE9ubHlNb2RlKSB7CiAgICAgICAg
IC8vIFNhdmUgdGhlIGNhY2hlIGZpbGUgaW4gYW4gaWRsZSB0byBtYWtlIHN1cmUgaXQgaGFwcGVu
cyBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kCiAgICAgICAgIC8vIGl0J3MgZG9uZSBvbmx5IG9uY2Ug
d2hlbiB0aGlzIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHZlcnkgc2hvcnQgdGltZS4K
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBpZiAobV9z
YXZlVG9GaWxlSWRsZS5pc1NjaGVkdWxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdp
bkluZm9DYWNoZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlIDxtdXRl
eD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9nbGliL0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KQEAgLTU1LDcgKzU2LDcgQEAgcHJpdmF0ZToKICAgICBHVW5pcXVl
UHRyPGNoYXI+IG1fY2FjaGVQYXRoOwogICAgIEdNYWluTG9vcFNvdXJjZSBtX3NhdmVUb0ZpbGVJ
ZGxlOwogICAgIGJvb2wgbV9yZWFkT25seU1vZGU7Ci0gICAgc3RkOjptdXRleCBtX211dGV4Owor
ICAgIExvY2sgbV9tdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbXBvcnQgPFdlYkNvcmUvSW50
UmVjdEhhc2guaD4KICNpbXBvcnQgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbXBvcnQgPHd0Zi9D
b25kaXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTU3LDggKzU5LDggQEAgQGludGVyZmFj
ZSBXS1ByaW50aW5nVmlldyA6IE5TVmlldyB7CiAgICAgdWludDY0X3QgX2V4cGVjdGVkUHJpbnRD
YWxsYmFjazsKIAogICAgIEJPT0wgX2lzUHJpbnRpbmdGcm9tU2Vjb25kYXJ5VGhyZWFkOwotICAg
IHN0ZDo6bXV0ZXggX3ByaW50aW5nQ2FsbGJhY2tNdXRleDsKLSAgICBzdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZSBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbjsKKyAgICBMb2NrIF9wcmludGluZ0Nh
bGxiYWNrTXV0ZXg7CisgICAgQ29uZGl0aW9uIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9uOwog
CiAgICAgTlNUaW1lciAqX2F1dG9kaXNwbGF5UmVzdW1lVGltZXI7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0JKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI0MiwxMSArMjQyLDExIEBAIC0gKHZvaWQpX3ByZXBhcmVQREZE
YXRhRm9yUHJpbnRpbmdPblNlY28KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgaWYgKCFfd2ViRnJhbWUtPnBhZ2UoKSkgewotICAgICAgICBfcHJpbnRpbmdDYWxsYmFja0Nv
bmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0aW9u
Lm5vdGlmeU9uZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2soX3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CisgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2soX3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CiAKICAgICBBU1NF
UlQoW3NlbGYgX2hhc1BhZ2VSZWN0c10pOwogICAgIEFTU0VSVChfcHJpbnRlZFBhZ2VzRGF0YS5p
c0VtcHR5KCkpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIC0gKHZvaWQpX3ByZXBhcmVQREZEYXRhRm9y
UHJpbnRpbmdPblNlY28KICAgICAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgICAgIHZp
ZXctPl9wcmludGVkUGFnZXNEYXRhLmFwcGVuZChkYXRhLT5ieXRlcygpLCBkYXRhLT5zaXplKCkp
OwogICAgICAgICAgICAgdmlldy0+X2V4cGVjdGVkUHJpbnRDYWxsYmFjayA9IDA7Ci0gICAgICAg
ICAgICB2aWV3LT5fcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAg
ICAgICAgICB2aWV3LT5fcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAg
ICAgICAgfQogICAgIH0pOwogICAgIF9leHBlY3RlZFByaW50Q2FsbGJhY2sgPSBjYWxsYmFjay0+
Y2FsbGJhY2tJRCgpOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVEYXRh
Rm9yUHJpbnRpbmdPblNlY28KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
V0tQcmludGluZ1ZpZXcgKnZpZXcgPSBzdGF0aWNfY2FzdDxXS1ByaW50aW5nVmlldyAqPih1bnR5
cGVkQ29udGV4dCk7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodmlldy0+
X3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
dmlldy0+X3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CiAKICAgICAvLyBXZSBtYXkgaGF2ZSByZWNl
aXZlZCBwYWdlIHJlY3RzIHdoaWxlIGEgbWVzc2FnZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdHJh
dmVsZWQgZnJvbSBzZWNvbmRhcnkgdGhyZWFkIHRvIG1haW4gb25lLgogICAgIGlmIChbdmlldyBf
aGFzUGFnZVJlY3RzXSkgewpAQCAtMzk1LDcgKzM5NSw3IEBAIC0gKEJPT0wpa25vd3NQYWdlUmFu
Z2U6KE5TUmFuZ2VQb2ludGVyKXIKICAgICAgICAgKnJhbmdlID0gTlNNYWtlUmFuZ2UoMSwgX3By
aW50aW5nUGFnZVJlY3RzLnNpemUoKSk7CiAgICAgZWxzZSBpZiAoIVJ1bkxvb3A6OmlzTWFpbigp
KSB7CiAgICAgICAgIEFTU0VSVCghW3NlbGYgX2lzUHJpbnRpbmdQcmV2aWV3XSk7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhfcHJpbnRpbmdDYWxsYmFja011dGV4
KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKF9wcmludGluZ0NhbGxiYWNr
TXV0ZXgpOwogICAgICAgICBjYWxsT25NYWluVGhyZWFkKHByZXBhcmVEYXRhRm9yUHJpbnRpbmdP
blNlY29uZGFyeVRocmVhZCwgc2VsZik7CiAgICAgICAgIF9wcmludGluZ0NhbGxiYWNrQ29uZGl0
aW9uLndhaXQobG9jayk7CiAgICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9wcmludGlu
Z1BhZ2VSZWN0cy5zaXplKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259349</attachid>
            <date>2015-08-18 21:21:21 -0700</date>
            <delta_ts>2015-08-18 22:01:36 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121470</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBhbGwgdXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdp
dGggV1RGOjpMb2NrL1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6
CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW06CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVnaXN0ZXJEZWJ1Z2dhYmxlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1dG9t
YXRpY0luc3BlY3RDYW5kaWRhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0
b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rvcjo6c2V0dXBGYWlsZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3I6OnNldHVwQ29tcGxldGVkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3Rv
cCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0
aW9uSWZOZWVkZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6eHBjQ29ubmVjdGlvblJlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3Rvcjo6eHBjQ29ubmVjdGlvbkZhaWxlZCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEluZGljYXRlTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRQcm94eUFwcGxpY2F0aW9uU2V0dXBN
ZXNzYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbjo6Y2xvc2VGcm9tTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmRlc2VyaWFsaXplTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsZUV2ZW50KToKKwog
MjAxNS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBJbnRyb2R1Y2Ugbm9uLXVzZXItb2JzZXJ2YWJsZSBQcm9taXNlIGZ1bmN0aW9ucyB0byB1
c2UgUHJvbWlzZXMgaW50ZXJuYWxseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogI2lt
cG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwpAQCAtMTA4LDcgKzEwOSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gQW55IGRlYnVnZ2FibGUgY2FuIHNlbmQgbWVzc2FnZXMgb3Zl
ciB0aGUgWFBDIGNvbm5lY3Rpb24uCiAgICAgLy8gU28gbG9jayBhY2Nlc3MgdG8gYWxsIG1hcHMg
YW5kIHN0YXRlIGFzIHRoZXkgY2FuIGNoYW5nZQogICAgIC8vIGZyb20gYW55IHRocmVhZC4KLSAg
ICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjpwYWlyPFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqLCBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlSW5mbz4+IG1fZGVidWdnYWJsZU1hcDsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25NYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9S
ZW1vdGVJbnNwZWN0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB1bnNpZ25lZCBSZW1vdGVJbnNwZWN0
b3I6Om5leHRBdmFpbGFibGVJCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWdpc3RlckRlYnVn
Z2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBuZXh0
QXZhaWxhYmxlSWRlbnRpZmllcigpOwogICAgIGRlYnVnZ2FibGUtPnNldElkZW50aWZpZXIoaWRl
bnRpZmllcik7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlZ2lz
dGVyRGVidWdnYWJsZQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dW5yZWdpc3RlckRlYnVnZ2Fi
bGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dh
YmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQpAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWIKIAogdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OnVwZGF0ZURlYnVnZ2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSog
ZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFp
ZGVudGlmaWVyKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRh
dGVEZWJ1Z2dhYmxlKFIKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRhdGVEZWJ1Z2dhYmxlQXV0
b21hdGljSW5zcGVjdENhbmRpZGF0ZShSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKiBkZWJ1Z2dh
YmxlKQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7
CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFJlbW90
ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAKICAgICAgICAgLy8gSW4gY2FzZSBkZWJ1
Z2dlcnMgZmFpbCB0byByZXNwb25kLCBvciB3ZSBjYW5ub3QgY29ubmVjdCB0byB3ZWJpbnNwZWN0
b3JkLCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIGFmdGVyIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUu
CiAgICAgICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1cs
IDAuOCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hf
UVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fYXV0b21hdGljSW5zcGVj
dGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIgPT0gaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiU2tpcHBpbmcgQXV0b21hdGljIEluc3BlY3Rpb24gQ2FuZGlkYXRlIHdpdGgg
cGFnZUlkKCV1KSBiZWNhdXNlIHdlIGZhaWxlZCB0byByZWNlaXZlIGEgcmVzcG9uc2UgaW4gdGlt
ZS4iLCBtX2F1dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyKTsKICAgICAgICAg
ICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVzZWQgPSBmYWxzZTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAgICAgZGVi
dWdnYWJsZS0+cGF1c2VXYWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbigpOwogCiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICAgICAgQVNTRVJU
KG1fYXV0b21hdGljSW5zcGVjdGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIpOwogICAgICAgICBtX2F1
dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyID0gMDsKQEAgLTI0NSw3ICsyNDUs
NyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZEF1dG9tYXRpY0luc3BlCiAKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQodW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogCiAgICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAg
LTI2NSw3ICsyNjUsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1JlbW90
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ25lZCBpZGVudGlmaWVy
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9jb25uZWN0aW9u
TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgUmVtb3Rl
SW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNl
dHVwQ29tcGxldGVkKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tdXRleCk7CiAKICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2F1dG9tYXRpY0luc3BlY3Rp
b25DYW5kaWRhdGVJZGVudGlmaWVyKQogICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVz
ZWQgPSBmYWxzZTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbW90ZUluc3BlY3Rvcjo6d2Fp
dGluZ0ZvckF1dG9tYXRpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdGFydCgpCiB7Ci0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KCkKIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3AoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbXV0ZXgpOwogCiAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7CiB9CkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9w
UwogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0aW9uSWZOZWVkZWQoKQog
ewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgaWYgKG1feHBjQ29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVtb3RlSW5z
cGVjdG9yOjpzZXR1cFhQQ0Nvbm5lY3Rpb24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWRfdCBwaWQsIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1
ZGl0RGF0YSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIGlmICht
X3BhcmVudFByb2Nlc3NJZGVudGlmaWVyIHx8IG1fcGFyZW50UHJvY2Vzc0F1ZGl0RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
ZXRQYXJlbnRQcm9jZXNzSW4KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnhwY0Nvbm5lY3Rpb25S
ZWNlaXZlZE1lc3NhZ2UoUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbiosIE5TU3RyaW5nICpt
ZXNzYWdlTmFtZSwgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX211dGV4KTsKIAogICAgIGlmIChbbWVzc2FnZU5hbWUgaXNFcXVhbFRvU3RyaW5nOldJ
UlBlcm1pc3Npb25EZW5pZWRdKSB7CiAgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpY
UENNZXNzYWdlKTsKQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6eHBj
Q29ubmVjdGlvblJlY2VpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp4cGNDb25uZWN0aW9uRmFp
bGVkKFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBBU1NFUlQoY29ubmVjdGlvbiA9PSBtX3hw
Y0Nvbm5lY3Rpb24pOwogICAgIGlmIChjb25uZWN0aW9uICE9IG1feHBjQ29ubmVjdGlvbikKQEAg
LTUyMiw3ICs1MjIsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKCkK
IAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMC4yICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBpZiAobV9w
dXNoU2NoZWR1bGVkKQogICAgICAgICAgICAgcHVzaExpc3RpbmdOb3coKTsKICAgICB9KTsKQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRJbmRpY2F0ZU1l
CiAgICAgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKF57CiAgICAg
ICAgIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqIGRlYnVnZ2FibGUgPSBudWxscHRyOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgICAgICBhdXRvIGl0ID0gbV9kZWJ1Z2dhYmxlTWFwLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgICAgICAgICBpZiAoaXQgPT0gbV9kZWJ1Z2dhYmxlTWFwLmVuZCgpKQpAQCAtNjcyLDcg
KzY3Miw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZFByb3h5QXBwbGkKICAgICAg
ICAgLy8gV2FpdCBhIGJpdCBmb3IgdGhlIGluZm9ybWF0aW9uLCBidXQgZ2l2ZSB1cCBhZnRlciBh
IHNlY29uZC4KICAgICAgICAgbV9zaG91bGRTZW5kUGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uID0g
dHJ1ZTsKICAgICAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1F
X05PVywgMSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFU
Q0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbikKICAgICAgICAgICAgICAgICBzdG9wSW50ZXJuYWwoU3Rv
cFNvdXJjZTo6WFBDTWVzc2FnZSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb25faAogCiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2lt
cG9ydCA8bXV0ZXg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KIApAQCAt
NjIsNyArNjIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gV2UgaGFuZGxlIFhQQyBldmVudHMgb24g
dGhlIHF1ZXVlLCBidXQgYSBjbGllbnQgbWF5IGNhbGwgY2xvc2UoKSBvbiBhbnkgcXVldWUuCiAg
ICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgbV9jbGllbnQgaXMgdGhyZWFkIHNhZmUgYW5kIGltbWVk
aWF0ZWx5IGNsZWFyZWQgaW4gY2xvc2UoKS4KLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAg
TG9jayBtX211dGV4OwogCiAgICAgeHBjX2Nvbm5lY3Rpb25fdCBtX2Nvbm5lY3Rpb247CiAgICAg
ZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8bXV0ZXg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBv
cnQgPHd0Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgpAQCAtNzksNyArODEsNyBAQCBSZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uOjp+UmVtb3RlSW5zCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bjo6Y2xvc2UoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGNsb3Nl
RnJvbU1lc3NhZ2UoKTsKIH0KIApAQCAtODksNyArOTEsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmNsb3NlCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogCiAgICAgZGlz
cGF0Y2hfYXN5bmMobV9xdWV1ZSwgXnsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0
ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogICAgICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBvbmUgbGFzdCBYUENfRVJST1Jf
Q09OTkVDVElPTl9JTlZBTElEIGV2ZW50IG9uIHRoZSBxdWV1ZSBhbmQgZGVyZWYgdXMuCiAgICAg
ICAgIGNsb3NlT25RdWV1ZSgpOwogICAgIH0pOwpAQCAtMTE2LDcgKzExOCw3IEBAIE5TRGljdGlv
bmFyeSAqUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGkKIAogICAgIHhwY19vYmplY3RfdCB4cGNE
aWN0aW9uYXJ5ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3ZhbHVlKG9iamVjdCwgUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvblNlcmlhbGl6ZWRNZXNzYWdlS2V5KTsKICAgICBpZiAoIXhwY0RpY3Rp
b25hcnkgfHwgeHBjX2dldF90eXBlKHhwY0RpY3Rpb25hcnkpICE9IFhQQ19UWVBFX0RJQ1RJT05B
UlkpIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBp
ZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+eHBjQ29ubmVjdGlvblVuaGFuZGxl
ZE1lc3NhZ2UodGhpcywgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEzMSw3ICsx
MzMsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsCiB7CiAgICAg
aWYgKHhwY19nZXRfdHlwZShvYmplY3QpID09IFhQQ19UWVBFX0VSUk9SKSB7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnhwY0Nvbm5lY3Rp
b25GYWlsZWQodGhpcyk7CiAKQEAgLTE1NCw3ICsxNTYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmhhbmRsCiAKICAgICBOU1N0cmluZyAqbWVzc2FnZSA9IFtkYXRhRGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbk1lc3NhZ2VO
YW1lS2V5XTsKICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW2RhdGFEaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uVXNlckluZm9LZXldOwotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAg
bV9jbGllbnQtPnhwY0Nvbm5lY3Rpb25SZWNlaXZlZE1lc3NhZ2UodGhpcywgbWVzc2FnZSwgdXNl
ckluZm8pOwogfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODYyMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0
ZDo6bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25k
aXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODE0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFs
c28gYmVlZiB1cCBDb25kaXRpb24gYnkgZ2l2aW5nIGl0IGEgU3RhdGljQ29uZGl0aW9uIHZhcmlh
bnQuCisKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAgICAgIChXVEY6OkNvbmRpdGlv
bkJhc2U6Om5vdGlmeUFsbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JT
ZWNvbmRzSW1wbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OmFic29sdXRlRnJvbVJl
bGF0aXZlKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uOjpDb25kaXRpb24pOgorICAgICAgICAo
V1RGOjpDb25kaXRpb246Om5vdGlmeUFsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkNvbmRp
dGlvbjo6d2FpdEZvclNlY29uZHNJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Q29uZGl0
aW9uOjphYnNvbHV0ZUZyb21SZWxhdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcDoKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmNw
cDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6ZHVtcFN0YXRzKToKKyAgICAgICAgKFdU
Rjo6aGFzaFRhYmxlU3RhdHNNdXRleCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJs
ZS5oOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6YWRkSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgICogd3RmL0xv
Y2suaDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0
aW9uUXVldWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmNhbmNl
bENhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjptYWluVGhyZWFkRnVuY3Rpb25RdWV1
ZU11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAg
IChXVEY6OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAg
ICAgIChXVEY6OlN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6OkNoZWNrUG9pbnQpOgorICAgICAgICAo
V1RGOjpTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludDo6TGF5b3V0Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQ6On5MYXlvdXRDaGVja1BvaW50KToKKyAgICAgICAgKFdURjo6U3RhY2tT
dGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1N0YWNrU3RhdHMuaDoK
KyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlY2tQ
b2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6
U3RhY2tTdGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAg
ICAgICogd3RmL21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbToKKyAgICAgICAg
KFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmxvY2tBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleCk6CisgICAgICAgIChXVEY6OnVubG9ja0F0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpY011dGV4KToKKyAgICAgICAgKFdURjo6YXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5n
U3RyaW5nKToKKyAgICAgICAgKFdURjo6dW5kZXJseWluZ1N0cmluZ3MpOgorICAgICAgICAoV1RG
OjpTdHJpbmdWaWV3OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6YWRv
cHRVbmRlcmx5aW5nU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0VW5kZXJs
eWluZ1N0cmluZyk6CisgICAgICAgIChXVEY6OnVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHA6CisgICAgICAg
IChXVEY6OkNvbGxhdG9yOjpDb2xsYXRvcik6CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjp+Q29s
bGF0b3IpOgorICAgICAgICAoV1RGOjpjYWNoZWRDb2xsYXRvck11dGV4KTogRGVsZXRlZC4KKwog
MjAxNS0wOC0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgInBsYXRmb3JtIHRleHQgdHJhY2sgbWVudSIKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5o
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDI2IEBACiAKICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFya2lu
Z0xvdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgQ29uZGl0aW9uIHsKLXB1YmxpYzoK
Ky8vIFRoaXMgaXMgYSBjb25kaXRpb24gdmFyaWFibGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdXNl
IHdpdGggYW55IGxvY2stbGlrZSBvYmplY3QsIGluY2x1ZGluZworLy8gb3VyIG93biBXVEY6Okxv
Y2suIEl0IGZlYXR1cmVzIHN0YW5kYXJkIHdhaXQoKS9ub3RpZnlPbmUoKS9ub3RpZnlBbGwoKSBt
ZXRob2RzIGluIGFkZGl0aW9uIHRvCisvLyBhIHZhcmlldHkgb2Ygd2FpdC13aXRoLXRpbWVvdXQg
bWV0aG9kcy4gVGhpcyBpbmNsdWRlcyBtZXRob2RzIHRoYXQgdXNlIFdURidzIG93biBub3Rpb24g
b2YKKy8vIHRpbWUsIGxpa2Ugd2FsbC1jbG9jayB0aW1lIChpLmUuIGN1cnJlbnRUaW1lKCkpIGFu
ZCBtb25vdG9uaWMgdGltZSAoaS5lLgorLy8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
LiBUaGlzIGlzIGEgdmVyeSBlZmZpY2llbnQgY29uZGl0aW9uIHZhcmlhYmxlLiBJdCBvbmx5IHJl
cXVpcmVzCisvLyBvbmUgYnl0ZSBvZiBtZW1vcnkuIG5vdGlmeU9uZSgpIGFuZCBub3RpZnlBbGwo
KSByZXF1aXJlIGp1c3QgYSBsb2FkIGFuZCBicmFuY2ggZm9yIHRoZSBmYXN0CisvLyBjYXNlIHdo
ZXJlIG5vIHRocmVhZCBpcyB3YWl0aW5nLiBUaGlzIGNvbmRpdGlvbiB2YXJpYWJsZSwgd2hlbiB1
c2VkIHdpdGggV1RGOjpMb2NrLCBjYW4KKy8vIG91dHBlcmZvcm0gYSBzeXN0ZW0gY29uZGl0aW9u
IHZhcmlhYmxlIGFuZCBsb2NrIGJ5IHVwIHRvIDU4eC4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3
aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0
aWNhbGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgor
c3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIHR5cGVkZWYgUGFya2luZ0xvdDo6Q2xvY2sgQ2xv
Y2s7CiAgICAgCi0gICAgQ29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1faGFzV2FpdGVycy5z
dG9yZShmYWxzZSk7Ci0gICAgfQotCiAgICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hp
bGUgcmVsZWFzaW5nIHRoZSBnaXZlbiBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0
IGJlZm9yZQogICAgIC8vIHBhcmtpbmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVy
bnMgdHJ1ZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBzb21lIGNhbGwgdG8KICAgICAvLyBub3RpZnlP
bmUoKSBvciBub3RpZnlBbGwoKS4gUmV0dXJucyBmYWxzZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBh
IHRpbWVvdXQuIE5vdGUgdGhhdCB0aGlzIGZvcm0KQEAgLTE3Miw3ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9oYXNXYWl0ZXJzKTsKICAgICB9CiAg
ICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIGJvb2wgd2FpdEZvclNlY29uZHNJbXBsKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgcmVs
YXRpdmVUaW1lb3V0U2Vjb25kcykKICAgICB7CkBAIC0yMjQsMTEgKzIyOSwyMyBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Cit9OyAgICAKKworY2xh
c3MgQ29uZGl0aW9uIDogcHVibGljIENvbmRpdGlvbkJhc2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbmRpdGlvbik7CitwdWJsaWM6CisgICAgQ29uZGl0aW9uKCkKKyAgICB7CisgICAg
ICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7CisgICAgfQogfTsKIAordHlwZWRlZiBDb25k
aXRpb25CYXNlIFN0YXRpY0NvbmRpdGlvbjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6Q29uZGl0aW9uOwordXNpbmcgV1RGOjpTdGF0aWNDb25kaXRpb247CiAKICNlbmRpZiAv
LyBXVEZfQ29uZGl0aW9uX2gKIApJbmRleDogU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dU
Ri93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV2ZXJEZXN0cm95ZWQuaCIKICNpbmNsdWRlICJP
U1JhbmRvbVNvdXJjZS5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NCw3ICs2NSw3IEBAIHByaXZhdGU6CiAKICAgICBB
UkM0U3RyZWFtIG1fc3RyZWFtOwogICAgIGludCBtX2NvdW50OwotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiBBUkM0U3RyZWFtOjpBUkM0U3RyZWFtKCkK
QEAgLTEzNiw3ICsxMzcsNyBAQCB1aW50MzJfdCBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpn
ZXRXCiAKIHVpbnQzMl90IEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnJhbmRvbU51bWJlcigp
CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2NvdW50IC09IDQ7
CiAgICAgc3RpcklmTmVlZGVkKCk7CkBAIC0xNDUsNyArMTQ2LDcgQEAgdWludDMyX3QgQVJDNFJh
bmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZAogCiB2b2lkIEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0
b3I6OnJhbmRvbVZhbHVlcyh2b2lkKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICB1bnNpZ25lZCBjaGFyKiByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIpOwogICAgIHN0aXJJZk5lZWRl
ZCgpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMCArMzYsMTEgQEAg
dW5zaWduZWQgSGFzaFRhYmxlU3RhdHM6Om51bUNvbGxpc2lvbnM7CiB1bnNpZ25lZCBIYXNoVGFi
bGVTdGF0czo6Y29sbGlzaW9uR3JhcGhbNDA5Nl07CiB1bnNpZ25lZCBIYXNoVGFibGVTdGF0czo6
bWF4Q29sbGlzaW9uczsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGhhc2hUYWJsZVN0YXRzTXV0ZXgo
KQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgc3Rk
OjptdXRleCogbXV0ZXg7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAg
ICBtdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0gICAg
fSk7Ci0KLSAgICByZXR1cm4gKm11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgaGFzaFRhYmxl
U3RhdHNNdXRleDsKIAogdm9pZCBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhoYXNoVGFibGVTdGF0c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgpOwogCiAgICAgaWYgKGNvdW50ID4gbWF4Q29sbGlz
aW9ucykKICAgICAgICAgbWF4Q29sbGlzaW9ucyA9IGNvdW50OwpAQCAtNTksNyArNTAsNyBAQCB2
b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvCiAKIHZvaWQgSGFzaFRhYmxl
U3RhdHM6OmR1bXBTdGF0cygpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2soaGFzaFRhYmxlU3RhdHNNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9j
az4gbG9jayhoYXNoVGFibGVTdGF0c011dGV4KTsKIAogICAgIGRhdGFMb2dGKCJcbldURjo6SGFz
aFRhYmxlIHN0YXRpc3RpY3NcblxuIik7CiAgICAgZGF0YUxvZ0YoIiV1IGFjY2Vzc2VzXG4iLCBu
dW1BY2Nlc3Nlcy5sb2FkKCkpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExldmluIDxsZXZpbkBj
aHJvbWl1bS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZhbHVlQ2hlY2suaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1f
bXV0ZXguCiAgICAgICAgIG11dGFibGUgY29uc3RfaXRlcmF0b3IqIG1faXRlcmF0b3JzOwogICAg
ICAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVt
bW92ZSdkIG9yIG1lbWNweSdlZC4KLSAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8c3Rk
OjptdXRleD4gbV9tdXRleDsKKyAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4g
bV9tdXRleDsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCkBA
IC01NDIsNyArNTQzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV9kZWxldGVkQ291
bnQoMCkKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAgICAgICwgbV9pdGVyYXRv
cnMoMCkKLSAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkK
KyAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQogICAgICAgICAsIG1fc3RhdHMoc3RkOjpt
YWtlX3VuaXF1ZTxTdGF0cz4oKSkKQEAgLTEyMTgsNyArMTIxOSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKG51bGxwdHIpCi0gICAgICAgICwgbV9tdXRleChz
dGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkpCisgICAgICAgICwgbV9tdXRleChzdGQ6Om1h
a2VfdW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUKICAgICAgICAgLCBtX3N0YXRzKHN0ZDo6bWFrZV91bmlxdWU8U3RhdHM+KCpvdGhlci5t
X3N0YXRzKSkKQEAgLTEyNzYsNyArMTI3Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGlu
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46Okhhc2hUYWJsZShIYXNoVGFibGUmJiBvdGhlcikKICNpZiBDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAgICAgICAgIDogbV9pdGVyYXRvcnMobnVsbHB0cikKLSAgICAgICAg
LCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkKKyAgICAgICAgLCBtX211
dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKICAgICAgICAgb3Ro
ZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMTM1Niw3ICsxMzU3LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9y
cygpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqbV9t
dXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKCptX211dGV4KTsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3Iq
IHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBwLT5t
X25leHQ7CkBAIC0xMzc4LDcgKzEzNzksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYg
KCF0YWJsZSkgewogICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqdGFibGUtPm1f
bXV0ZXgpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKnRhYmxlLT5t
X211dGV4KTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwog
ICAgICAgICAgICAgaXQtPm1fbmV4dCA9IHRhYmxlLT5tX2l0ZXJhdG9yczsKICAgICAgICAgICAg
IHRhYmxlLT5tX2l0ZXJhdG9ycyA9IGl0OwpAQCAtMTM5Nyw3ICsxMzk4LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5tX25leHQpOwogICAgICAgICAgICAgQVNT
RVJUKCFpdC0+bV9wcmV2aW91cyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqaXQtPm1fdGFibGUtPm1fbXV0ZXgpOworICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKml0LT5tX3RhYmxlLT5tX211dGV4
KTsKICAgICAgICAgICAgIGlmIChpdC0+bV9uZXh0KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0LT5tX25leHQtPm1fcHJldmlvdXMgPT0gaXQpOwogICAgICAgICAgICAgICAgIGl0LT5tX25l
eHQtPm1fcHJldmlvdXMgPSBpdC0+bV9wcmV2aW91czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDkgKzEy
NSw5IEBAIHR5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAotdXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogdXNpbmcgV1RGOjpMb2NrOwogdXNp
bmcgV1RGOjpMb2NrSG9sZGVyOwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogCiAjZW5kaWYgLy8g
V1RGX0xvY2tfaAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJU
aHJlYWRpbmcuaCIKICNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogCkBAIC02OSwxMiArNzAsNyBAQCBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8v
IFRoaXMgZ2xvCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsK
ICNlbmRpZgogCi1zdGF0aWMgc3RkOjptdXRleCYgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRl
eCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAg
IAotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIG1haW5UaHJlYWRGdW5j
dGlvblF1ZXVlTXV0ZXg7CiAKIHN0YXRpYyBGdW5jdGlvblF1ZXVlJiBmdW5jdGlvblF1ZXVlKCkK
IHsKQEAgLTk0LDcgKzkwLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAKICAgICBt
YWluVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKIAotICAgIG1haW5UaHJlYWRG
dW5jdGlvblF1ZXVlTXV0ZXgoKTsKICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCk7
CiAgICAgaW5pdGlhbGl6ZUdDVGhyZWFkcygpOwogfQpAQCAtMTA1LDcgKzEwMCw2IEBAIHN0YXRp
YyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplTWFpblRocmUKIAogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRPbmNlKCkKIHsKLSAgICBtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4
KCk7CiAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpOwogfQogCkBAIC0xMTcsNyAr
MTExLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAjaWYgIVVTRShXRUJfVEhSRUFE
KQogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkT25j
ZSgpCiB7Ci0gICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOwogICAgIGluaXRpYWxp
emVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRmb3JtKCk7CiB9CiAKQEAgLTE1Niw3
ICsxNDksNyBAQCB2b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKQogICAgIEZ1
bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY0xvY2s+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCk7CiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0aW9uUXVldWUoKS5zaXplKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBpbnZvY2F0aW9uID0gZnVuY3Rpb25RdWV1ZSgpLnRha2VGaXJzdCgpOwpAQCAt
MTgwLDcgKzE3Myw3IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24K
ICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsK
ICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1haW5UaHJl
YWRGdW5jdGlvblF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgpOwogICAgICAgICBuZWVkVG9T
Y2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rpb25R
dWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAg
ICAgfQpAQCAtMTkyLDcgKzE4NSw3IEBAIHZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWlu
VGhyZWFkRnUKIHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwogCi0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpKTsKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11
dGV4KTsKIAogICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5jdGlvbldpdGhD
b250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNr
U3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIENoZWNrUG9p
bnQgbWFuYWdlbWVudDoKLXN0ZDo6bXV0ZXgqIFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXggPSAw
OworU3RhdGljTG9jayBTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4OwogU3RhY2tTdGF0czo6Q2hl
Y2tQb2ludCogU3RhY2tTdGF0czo6c190b3BDaGVja1BvaW50ID0gMDsKIFN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfZmlyc3RMYXlvdXRDaGVja1BvaW50ID0gMDsK
IFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfdG9wTGF5b3V0Q2hl
Y2tQb2ludCA9IDA7CkBAIC01NywxMyArNTcsNiBAQCBpbnQgU3RhY2tTdGF0czo6c19tYXhUb3Rh
bExheW91dENoZWNrUG9pCiBpbnQgU3RhY2tTdGF0czo6c19tYXhMYXlvdXRSZWVudHJ5RGVwdGgg
PSAwOwogCiAKLS8vIEluaXRpYWxpemVzIGxvY2tzIGFuZCB0aGUgbG9nLiBTaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZS4KLXZvaWQgU3RhY2tTdGF0czo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgc19z
aGFyZWRNdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0g
ICAgZGF0YUxvZ0YoIiA9PT0gTE9HIG5ldyBzdGFjayBzdGF0cyA9PT09PT09PVxuIik7Ci19Ci0K
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7CiAgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CkBAIC03Niw3
ICs2OSw3IEBAIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGEKIAogU3Rh
Y2tTdGF0czo6Q2hlY2tQb2ludDo6Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwog
ICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEq
Pigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9
IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sg
PSB0aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMTM0LDcgKzEyNyw3IEBAIFN0YWNrU3RhdHM6OkNo
ZWNrUG9pbnQ6OkNoZWNrUG9pbnQoKQogCiBTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQ
b2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3Rh
dHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAgIFdURlRocmVhZERhdGEqIHRocmVhZERh
dGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBT
dGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsK
IApAQCAtMTY1LDcgKzE1OCw3IEBAIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6On5DaGVja1BvaW50
KCkKIAogdm9pZCBTdGFja1N0YXRzOjpwcm9iZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAg
IFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigm
d3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRo
cmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0
aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMjI2LDcgKzIxOSw3IEBAIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQ6OkxheW91dENoZWMKICAgICAvLyBwcm9iZSBmaXJzdCwgd2UgY2FuIGF2b2lk
IHJlLWVudGVyaW5nIHRoZSBsb2NrLgogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3RhY2tTdGF0czo6c19zaGFyZWRNdXRl
eCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soU3RhY2tTdGF0czo6c19z
aGFyZWRNdXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8
V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwogICAgIFN0YWNrU3RhdHM6OlBlclRo
cmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOwogICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CkBAIC0yOTUsNyArMjg4LDcgQEAg
U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlYwogCiBTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50Ojp+TGF5b3V0Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgp
OwogCiAgICAgLy8gUG9wIHRvIHRoZSBwcmV2aW91cyBsYXlvdXQgY2hlY2twb2ludDoKICAgICBT
dGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSBtX3ByZXY7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TdGFja1N0YXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tT
dGF0cy5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkV4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIAogLy8gRGVm
aW5lIHRoaXMgZmxhZyB0byBlbmFibGUgU3RhY2sgc3RhdHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0
dXJlIGlzIHVzZWZ1bApAQCAtNjcsNyArNjgsNiBAQCBwdWJsaWM6CiAgICAgICAgIExheW91dENo
ZWNrUG9pbnQoKSB7IH0KICAgICB9OwogCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsg
fQogICAgIHN0YXRpYyB2b2lkIHByb2JlKCkgeyB9CiB9OwogCkBAIC0xMDksOSArMTA5LDYgQEAg
cHVibGljOgogICAgICAgICBpbnQgbV9kZXB0aDsKICAgICB9OwogCi0gICAgLy8gSW5pdGlhbGl6
ZXMgbG9ja3MgYW5kIHRoZSBsb2cgZmlsZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0g
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCiAgICAgLy8gVXNlZCBmb3IgcHJvYmluZyB0
aGUgc3RhY2sgYXQgcGxhY2VzIHdoZXJlIHdlIHN1c3BlY3QgdG8gYmUgaGlnaAogICAgIC8vIHBv
aW50cyBvZiBzdGFjayB1c2FnZSBidXQgYXJlIE5PVCBjaGVjayBwb2ludHMgd2hlcmUgc3RhY2sg
cmVjdXJzaW9uCiAgICAgLy8gaXMgY2hlY2tlZC4KQEAgLTEyNCw3ICsxMjEsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50OgotICAgIHN0YXRpYyBz
dGQ6Om11dGV4KiBzX3NoYXJlZE11dGV4OworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHNfc2hhcmVk
TXV0ZXg7CiAgICAgc3RhdGljIENoZWNrUG9pbnQqIHNfdG9wQ2hlY2tQb2ludDsKICAgICBzdGF0
aWMgTGF5b3V0Q2hlY2tQb2ludCogc19maXJzdExheW91dENoZWNrUG9pbnQ7CiAgICAgc3RhdGlj
IExheW91dENoZWNrUG9pbnQqIHNfdG9wTGF5b3V0Q2hlY2tQb2ludDsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBA
QAogI2luY2x1ZGUgImR0b2EvY2FjaGVkLXBvd2Vycy5oIgogI2luY2x1ZGUgIkhhc2hNYXAuaCIK
ICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCi0jaW5jbHVkZSAiU3RhY2tTdGF0cy5oIgog
I2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oIgogI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKQEAgLTEy
NCw3ICsxMjMsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHRocmVhZE1hcE11
dGV4KCk7CiAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwogICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpOwotICAgIFN0YWNrU3RhdHM6OmluaXRp
YWxpemUoKTsKICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvbWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNl
ZEJ5U2FmYXJpLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVw
cmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJOZXZlckRlc3Ryb3llZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJh
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIC8vIFRoaXMg
ZmlsZSBjb250YWlucyBkZXByZWNhdGVkIHN5bWJvbHMgdGhhdCB0aGUgbGFzdCByZWxlYXNlZCB2
ZXJzaW9uIG9mIFNhZmFyaSB1c2VzLgogLy8gT25jZSBTYWZhcmkgc3RvcHMgdXNpbmcgdGhlbSwg
d2Ugc2hvdWxkIHJlbW92ZSB0aGVtLgpAQCAtNDUsMjUgKzQ2LDE2IEBAIHZvaWQgY2FsbE9uTWFp
blRocmVhZChjb25zdCBGdW5jdGlvbjx2b2kKICAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4oZnVuY3Rpb24pKTsKIH0KIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBt
dXRleDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNv
bnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRp
Y0xvY2sgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAKIHZvaWQgbG9ja0F0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKIHsKLSAgICBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCgpLmxvY2soKTsKKyAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleC5sb2NrKCk7CiB9CiAKIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQogewotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkudW5sb2Nr
KCk7CisgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgudW5sb2NrKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQkkKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKQEAgLTExNywxMSArMTE4LDcgQEAg
U3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZzo6VW5kZXJseWluZwogewogfQogCi1zdGF0aWMg
c3RkOjptdXRleCYgdW5kZXJseWluZ1N0cmluZ3NNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRp
YyBTdGF0aWNMb2NrIHVuZGVybHlpbmdTdHJpbmdzTXV0ZXg7CiAKIHN0YXRpYyBIYXNoTWFwPGNv
bnN0IFN0cmluZ0ltcGwqLCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nKj4mIHVuZGVybHlp
bmdTdHJpbmdzKCkKIHsKQEAgLTEzMyw3ICsxMzAsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OmludmFs
aWRhdGUoY29uc3QgU3RyaW5nCiB7CiAgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0
cmluZzsKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVu
ZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOwogICAgICAgICB1bmRlcmx5aW5nU3Ry
aW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0JlRGVzdHJveWVkKTsKICAg
ICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUy
LDcgKzE0OSw3IEBAIHZvaWQgU3RyaW5nVmlldzo6YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFUKICAg
ICBpZiAobV91bmRlcmx5aW5nU3RyaW5nKSB7CiAgICAgICAgIGlmICghLS1tX3VuZGVybHlpbmdT
dHJpbmctPnJlZkNvdW50KSB7CiAgICAgICAgICAgICBpZiAobV91bmRlcmx5aW5nU3RyaW5nLT5p
c1ZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAg
ICAgICAgICB1bmRlcmx5aW5nU3RyaW5ncygpLnJlbW92ZSgmbV91bmRlcmx5aW5nU3RyaW5nLT5z
dHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVsZXRlIG1fdW5kZXJseWluZ1N0
cmluZzsKQEAgLTE2Nyw3ICsxNjQsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdT
dHJpbmcoY29uCiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSBu
dWxscHRyOwogICAgIGVsc2UgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB1bmRlcmx5aW5nU3RyaW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOwogICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbmV3IFVuZGVybHlpbmdTdHJpbmcoKnN0cmluZyk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHVuaWNvZGUvdWNv
bC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KQEAgLTUwLDE3ICs1MSw3IEBAIHN0YXRpYyBVQ29sbGF0b3IqIGNhY2hlZENv
bGxhdG9yOwogc3RhdGljIGNoYXIqIGNhY2hlZENvbGxhdG9yTG9jYWxlOwogc3RhdGljIGJvb2wg
Y2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3Q7CiAKLXN0YXRpYyBzdGQ6Om11
dGV4JiBjYWNoZWRDb2xsYXRvck11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7Ci0KLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11
dGV4OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXguY29u
c3RydWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGlj
TG9jayBjYWNoZWRDb2xsYXRvck11dGV4OwogCiAjaWYgIShPUyhEQVJXSU4pICYmIFVTRShDRikp
CiAKQEAgLTExNyw3ICsxMDgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0b3IoY29uc3QgY2hhciogbG9j
YWxlLCBiCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAKICAgICB7Ci0g
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0
ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGNhY2hlZENv
bGxhdG9yTXV0ZXgpOwogICAgICAgICBpZiAoY2FjaGVkQ29sbGF0b3IgJiYgbG9jYWxlc01hdGNo
KGNhY2hlZENvbGxhdG9yTG9jYWxlLCBsb2NhbGUpICYmIGNhY2hlZENvbGxhdG9yU2hvdWxkU29y
dExvd2VyY2FzZUZpcnN0ID09IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCkgewogICAgICAgICAg
ICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9yOwogICAgICAgICAgICAgbV9sb2NhbGUgPSBj
YWNoZWRDb2xsYXRvckxvY2FsZTsKQEAgLTE0Nyw3ICsxMzgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0
b3IoY29uc3QgY2hhciogbG9jYWxlLCBiCiAKIENvbGxhdG9yOjp+Q29sbGF0b3IoKQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0ZXgoKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRl
eCk7CiAgICAgaWYgKGNhY2hlZENvbGxhdG9yKSB7CiAgICAgICAgIHVjb2xfY2xvc2UoY2FjaGVk
Q29sbGF0b3IpOwogICAgICAgICBmYXN0RnJlZShjYWNoZWRDb2xsYXRvckxvY2FsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODg2MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDIgQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0ZDo6
bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25kaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
QnVmZmVyU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnNldEJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6Omlu
c2VydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2Vs
U2NoZWR1bGVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6
dmFsdWVGb3JDb250ZXh0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxp
bmU6OnZhbHVlc0ZvclRpbWVSYW5nZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjpzZXRCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09z
Y2lsbGF0b3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpwcm9j
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpzZXRQZXJpb2RpY1dhdmUp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFu
bmVyTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYW5uZXJOb2RlOjpzZXRQYW5u
aW5nTW9kZWwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRDdXJ2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb1ZlcnNpb25NYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Z2V0Q2FjaGVkVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpndWlkTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3REYXRhYmFzZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmFkZFByb3Bv
c2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZW1vdmVQ
cm9wb3NlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZnVs
bFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5oOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW06
CisgICAgICAgIChnZXRET01XcmFwcGVyKToKKyAgICAgICAgKGFkZERPTVdyYXBwZXIpOgorICAg
ICAgICAocmVtb3ZlRE9NV3JhcHBlcik6CisgICAgICAgICh3cmFwcGVyQ2FjaGVMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Q3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OmdldElk
ZW50aWZpZXJGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpuYW1lRm9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpyZWdpc3RlckFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RyeU11
dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6Omlu
dGVycnVwdEFuZERpc3BhdGNoSW5zcGVjdG9yQ29tbWFuZHMpOgorICAgICAgICAqIHBhZ2UvV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNG
b3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2UvV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJv
bVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RocmVhZE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3Ap
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJldmVyYkNvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1
bi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKCtbV2ViTGFuZ3VhZ2VDaGFuZ2VP
YnNlcnZlciBsYW5ndWFnZVByZWZlcmVuY2VzRGlkQ2hhbmdlOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZWZlcnJlZExhbmd1YWdlc011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbXB0eVBlcmZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6cnVuTG9hZGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRlclJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJp
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJl
YW1IYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsT25NYWluVGhyZWFkQW5k
V2FpdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1T
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRl
Y3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlYyk6CisgICAgICAgIChXZWJDb3JlOjphdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5j
b2RpbmdOYW1lTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kaW5nUmVnaXN0cnlNdXRleCk6
IERlbGV0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d29ya2VyVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29y
a2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6fldvcmtlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRTZXRNdXRleCk6
IERlbGV0ZWQuCisKIDIwMTUtMDgtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSBpbnN0ZWFkIG9mIGNzc1Zh
bHVlUG9vbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZQogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3Qg
YmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0ZWFkLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZhaWxlZC4gV2UgbXVzdCBiZSBp
biB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIGJ1ZmZlcnMgYW5kIHdlcmUgYWxyZWFkeSBvdXRwdXR0
aW5nIHNpbGVuY2UgYW55d2F5LgogICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKQEAgLTQxNiw3
ICs0MTYsNyBAQCBib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKEF1CiAgICAg
QXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoKmNvbnRleHQoKSk7CiAgICAg
CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICAKICAgICBpZiAoYnVmZmVyKSB7
CiAgICAgICAgIC8vIERvIGFueSBuZWNlc3NzYXJ5IHJlLWNvbmZpZ3VyYXRpb24gdG8gdGhlIGJ1
ZmZlcidzIG51bWJlciBvZiBjaGFubmVscy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTE1OSw3ICsxNTks
NyBAQCBwcml2YXRlOgogICAgIFBhbm5lck5vZGUqIG1fcGFubmVyTm9kZTsKIAogICAgIC8vIFRo
aXMgc3luY2hyb25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVz
ZSBkeW5hbWljIGNoYW5uZWwgY291bnQgY2hhbmdlcy4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXgg
bV9wcm9jZXNzTXV0ZXg7CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVs
aW5lOjppbnNlcnRFdmVudChjb24KICAgICBpZiAoIWlzVmFsaWQpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9ldmVudHNN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9ldmVudHNNdXRleCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZmxvYXQgaW5zZXJ0VGltZSA9IGV2ZW50LnRp
bWUoKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0
RXZlbnQoY29uCiAKIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1
ZXMoZmxvYXQgc3RhcnRUaW1lKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1fZXZlbnRzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fZXZl
bnRzTXV0ZXgpOwogCiAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHMgc3RhcnRpbmcgYXQgc3RhcnRU
aW1lLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkg
ewpAQCAtMTE4LDcgKzExOCw3IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JD
b250ZXgKICAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6
dHJ5X3RvX2xvY2spOwogICAgICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkgfHwgIWNvbnRleHQg
fHwgIW1fZXZlbnRzLnNpemUoKSB8fCBjb250ZXh0LT5jdXJyZW50VGltZSgpIDwgbV9ldmVudHNb
MF0udGltZSgpKSB7CiAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBBdWRpb1BhcmFt
VGltZWxpbmU6OnZhbHVlRm9yQ29udGV4CiBmbG9hdCBBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVl
c0ZvclRpbWVSYW5nZShkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgZmxvYXQgZGVm
YXVsdFZhbHVlLCBmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcywgZG91Ymxl
IHNhbXBsZVJhdGUsIGRvdWJsZSBjb250cm9sUmF0ZSkKIHsKICAgICAvLyBXZSBjYW4ndCBjb250
ZW5kIHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2sp
OworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRy
eV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlcykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFs
dWVzOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKICNkZWZpbmUgQXVkaW9QYXJhbVRpbWVsaW5lX2gKIAogI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UGFyYW1F
dmVudD4gbV9ldmVudHM7CiAKLSAgICBzdGQ6Om11dGV4IG1fZXZlbnRzTXV0ZXg7CisgICAgTG9j
ayBtX2V2ZW50c011dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udm9s
dmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKICAgICBBU1NFUlQob3V0cHV0QnVzKTsKIAog
ICAgIC8vIFN5bmNocm9uaXplIHdpdGggcG9zc2libGUgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBp
bXB1bHNlIHJlc3BvbnNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayht
X3Byb2Nlc3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxM
b2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxv
Y2sub3duc19sb2NrKCkpIHsKICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZh
aWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxzZSBy
ZXNwb25zZS4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKIAogdm9pZCBDb252b2x2ZXJO
b2RlOjpyZXNldCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9w
cm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011
dGV4KTsKICAgICBpZiAobV9yZXZlcmIpCiAgICAgICAgIG1fcmV2ZXJiLT5yZXNldCgpOwogfQpA
QCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVm
ZmUKIAogICAgIHsKICAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogICAgICAg
ICBtX3JldmVyYiA9IFdURjo6bW92ZShyZXZlcmIpOwogICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZl
cjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBk
eW5hbWljIGNoYW5nZXMgdG8gdGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBw
cm9jZXNzKCkuCi0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fcHJvY2Vzc011dGV4OworICAgIG11
dGFibGUgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxz
ZSByZXNwb25zZSBvciBub3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgogICAgIGJvb2wgbV9ub3Jt
YWxpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzCiAgICAgLy8gVXNlIGEgc3RkOjp0cnlf
dG9fbG9jayB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFk
LgogICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1MTWVk
aWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgogICAgIC8vIHJlY29uZmlndXJpbmcg
aXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNlLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAgICAgICAgIG91dHB1
dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIk11bHRpQ2hhbm5lbFJlc2FtcGxlci5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1Np
bGVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwotICAgIHN0ZDo6bXV0ZXggbV9wcm9jZXNz
TXV0ZXg7CisgICAgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIHVuc2lnbmVkIG1fc291cmNl
TnVtYmVyT2ZDaGFubmVsczsKICAgICBkb3VibGUgbV9zb3VyY2VTYW1wbGVSYXRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGU6OnNldEZvcm0KICAgICAgICAgfQogCiAgICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGgg
cHJvY2VzcygpLgotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3By
b2Nlc3NNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4KTsKIAogICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNo
YW5uZWxzOwogCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZTo6cHJvY2VzcwogICAgIC8vIFVzZSBzdGQ6OnRyeV90b19sb2NrIHRvIGF2b2lkIGNvbnRl
bnRpb24gaW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCiAgICAgLy8gSWYgd2UgZmFpbCB0
byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gdGhlIE1lZGlhU3RyZWFtIG11c3QgYmUgaW4gdGhlIG1p
ZGRsZSBvZgogICAgIC8vIGEgZm9ybWF0IGNoYW5nZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4g
dGhpcyBjYXNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nl
c3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3du
c19sb2NrKCkpIHsKICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAg
ICAgICAgIG91dHB1dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaAko
cmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkF1ZGlvU291cmNl
UHJvdmlkZXJDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgPG11
dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBtX2F1ZGlvVHJhY2s7CiAgICAgQXVkaW9Tb3VyY2VQcm92
aWRlciogbV9hdWRpb1NvdXJjZVByb3ZpZGVyOwogCi0gICAgc3RkOjptdXRleCBtX3Byb2Nlc3NN
dXRleDsKKyAgICBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgdW5zaWduZWQgbV9zb3VyY2VO
dW1iZXJPZkNoYW5uZWxzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT3NjaWxsYXRvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnByb2Nlc3Moc2l6
ZV90IGZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4n
dCBibG9jayBvbiB0aGlzIGxvY2ssIHNvIHdlIHVzZSBzdGQ6OnRyeV90b19sb2NrIGluc3RlYWQu
Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBz
dGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9j
ZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkg
ewogICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeV9sb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJl
IGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgd2F2ZS10YWJsZXMuCiAgICAgICAgIG91dHB1dEJ1
cy0+emVybygpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnNldFBl
cmlvZGljV2F2ZShQZXIKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gVGhp
cyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICBtX3BlcmlvZGljV2F2ZSA9IHBlcmlvZGljV2F2ZTsK
ICAgICBtX3R5cGUgPSBDVVNUT007CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1
ZGlvUGFyYW0uaCIKICNpbmNsdWRlICJBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCIKLSNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC05Niw3ICs5Niw3IEBAIHByaXZh
dGU6CiAgICAgZG91YmxlIG1fdmlydHVhbFJlYWRJbmRleDsKIAogICAgIC8vIFRoaXMgc3luY2hy
b25pemVzIHByb2Nlc3MoKS4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9wcm9jZXNzTXV0ZXg7
CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgLy8gU3RvcmVzIHNhbXBs
ZS1hY2N1cmF0ZSB2YWx1ZXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gZnJlcXVlbmN5IGFuZCBk
ZXR1bmUuCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcGhhc2VJbmNyZW1lbnRzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBQYW5uZXJOb2RlOjpw
cm9jZXNzKHNpemVfdCBmcmFtZXNUbwogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQg
Y2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0
ZWFkLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Bhbm5lck11dGV4
LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9w
YW5uZXJNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygp
KSB7CiAgICAgICAgIC8vIFRvbyBiYWQgLSBUaGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3Qg
YmUgaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGUgcGFubmVyLgogICAgICAgICBkZXN0aW5h
dGlvbi0+emVybygpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgUGFubmVyTm9kZTo6c2V0UGFu
bmluZ01vZGVsKHVuc2lnbmUKICAgICBjYXNlIEhSVEY6CiAgICAgICAgIGlmICghbV9wYW5uZXIu
Z2V0KCkgfHwgbW9kZWwgIT0gbV9wYW5uaW5nTW9kZWwpIHsKICAgICAgICAgICAgIC8vIFRoaXMg
c3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9wYW5uZXJNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3Bhbm5lck11dGV4KTsKIAogICAgICAgICAgICAgbV9wYW5uZXIg
PSBQYW5uZXI6OmNyZWF0ZShtb2RlbCwgc2FtcGxlUmF0ZSgpLCBtX2hydGZEYXRhYmFzZUxvYWRl
ci5nZXQoKSk7CiAgICAgICAgICAgICBtX3Bhbm5pbmdNb2RlbCA9IG1vZGVsOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiUGFubmVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291
bnQ7CiAKICAgICAvLyBTeW5jaHJvbml6ZSBwcm9jZXNzKCkgYW5kIHNldFBhbm5pbmdNb2RlbCgp
IHdoaWNoIGNhbiBjaGFuZ2UgdGhlIHBhbm5lci4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9w
YW5uZXJNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wYW5uZXJNdXRleDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9E
U1BLZXJuZWw+IFdhdmVTaGFwCiB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZs
b2F0MzJBcnJheSogY3VydmUpCiB7CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9j
ZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKIAog
ICAgIG1fY3VydmUgPSBjdXJ2ZTsKIH0KQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRDdXJ2ZShGbG9hdAogdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRP
dmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiB7CiAgICAgLy8gVGhpcyBzeW5j
aHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
cHJvY2Vzc011dGV4KTsKIAogICAgIG1fb3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGU7CiAKQEAgLTg1
LDcgKzg1LDcgQEAgdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpwcm9jZXNzKGNvbnN0IAogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJsb2NrIG9uIHRo
aXMgbG9jaywgc28gd2UgdXNlIHN0ZDo6dHJ5X3RvX2xvY2sgaW5zdGVhZC4KLSAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKSB7CiAgICAgICAgIC8v
IFRvbyBiYWQgLSB0aGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3QgYmUgaW4gdGhlIG1pZGRs
ZSBvZiBhIHNldEN1cnZlKCkgY2FsbC4KICAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBl
clByb2Nlc3Nvci5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1
ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY2LDcg
QEAgcHJpdmF0ZToKICAgICBPdmVyU2FtcGxlVHlwZSBtX292ZXJzYW1wbGU7CiAKICAgICAvLyBU
aGlzIHN5bmNocm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRDdXJ2ZSgpLgotICAgIG11dGFibGUg
c3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wcm9jZXNzTXV0
ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NywxNyArMTU3LDcgQEAgc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYQogfQogCiAvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0
aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCi1zdGF0aWMgc3RkOjptdXRl
eCYgZ3VpZE11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLQotICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgZ3VpZE11
dGV4OwogCiB0eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VHdWlkLCBTdHJpbmc+IEd1aWRWZXJzaW9u
TWFwOwogc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKQEAgLTIzMyw3
ICsyMjMsNyBAQCBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNvCiAgICAg
ICAgIG1fbmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRleCk7CiAKICAgICAgICAgbV9ndWlkID0g
Z3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PERhdGFiYXNlKj4+JiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5hZGQobV9ndWlkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CkBAIC0zNzAsNyArMzYwLDcgQEAgYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbAogCiAgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOwogICAgIHsKLSAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgICAgICBhdXRv
IGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVu
dHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewpAQCAtNDY1LDcgKzQ1NSw3IEBAIHZv
aWQgRGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQogICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSB0
b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJlbW92ZU9wZW5EYXRhYmFzZSgpLgogICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRl
eCk7CiAKICAgICAgICAgYXV0byBpdCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZmluZChtX2d1aWQp
OwogICAgICAgICBBU1NFUlQoaXQgIT0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5lbmQoKSk7CkBAIC01
MjQsNyArNTE0LDcgQEAgdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IAog
CiBTdHJpbmcgRGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAogewotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgIHJldHVybiBndWlk
VG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7CiB9CkBAIC01MzIsNyAr
NTIyLDcgQEAgU3RyaW5nIERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKCkgY29ucwogdm9pZCBE
YXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCiB7
CiAgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2tlcihndWlkTXV0ZXgpOwogCiAgICAgdXBkYXRl
R3VpZFZlcnNpb25NYXAobV9ndWlkLCBhY3R1YWxWZXJzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShib28KIAogUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gRGF0YWJhc2VNYW5hZ2VyOjpleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbXV0ZXgpOwogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0UmVnaXN0ZXJlZENvdW50
ID49IDApOwogICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQgPj0gMCk7
CkBAIC0xMzgsNyArMTM4LDcgQEAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0YWJhc2VNYW5h
Z2VyOgogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0
YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJh
c2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgbV9jb250ZXh0TWFwLnNl
dChjb250ZXh0LCBkYXRhYmFzZUNvbnRleHQpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ28KIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRl
eHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgQVNTRVJUKG1fY29udGV4dE1hcC5nZXQoY29udGV4dCkpOwpAQCAtMTYy
LDE0ICsxNjIsMTQgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZQog
I2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3RE
YXRhYmFzZUNvbnRleHQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAg
ICAgbV9kYXRhYmFzZUNvbnRleHRJbnN0YW5jZUNvdW50Kys7CiB9CiAKIHZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXNlQ29udGV4dCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQtLTsK
ICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHRSZWdpc3RlcmVkQ291bnQgPD0gbV9kYXRhYmFz
ZUNvbnRleHRJbnN0YW5jZUNvdW50KTsKQEAgLTI1OCwxNCArMjU4LDE0IEBAIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmFk
ZFByb3Bvc2VkRGF0YWJhc2UoUHJvcG9zZWREYXRhYmFzZSogcHJvcG9zZWREYikKIHsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIG1fcHJvcG9zZWREYXRhYmFzZXMuYWRk
KHByb3Bvc2VkRGIpOwogfQogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVtb3ZlUHJvcG9zZWRE
YXRhYmFzZShQcm9wb3NlZERhdGFiYXNlKiBwcm9wb3NlZERiKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5yZW1vdmUocHJvcG9z
ZWREYik7CiB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnN0b3BE
YXRhYmFzZXMoU2NyaQogU3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRl
SWZEb2VzTm90RXhpc3QpCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRvKiBwcm9wb3NlZERhdGFiYXNlIDogbV9wcm9w
b3NlZERhdGFiYXNlcykgewogICAgICAgICAgICAgaWYgKHByb3Bvc2VkRGF0YWJhc2UtPmRldGFp
bHMoKS5uYW1lKCkgPT0gbmFtZSAmJiBwcm9wb3NlZERhdGFiYXNlLT5vcmlnaW4oKS0+ZXF1YWwo
b3JpZ2luKSkKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJh
c2VOYW1lc0Zvck9yCiBEYXRhYmFzZURldGFpbHMgRGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9y
TmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKGF1dG8qIHByb3Bvc2VkRGF0YWJhc2UgOiBtX3Byb3Bvc2VkRGF0
YWJhc2VzKSB7CiAgICAgICAgICAgICBpZiAocHJvcG9zZWREYXRhYmFzZS0+ZGV0YWlscygpLm5h
bWUoKSA9PSBuYW1lICYmIHByb3Bvc2VkRGF0YWJhc2UtPm9yaWdpbigpLT5lcXVhbChvcmlnaW4p
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRl
IDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFByb3Bvc2VkRGF0YWJh
c2UqPiBtX3Byb3Bvc2VkRGF0YWJhc2VzOwogCiAgICAgLy8gVGhpcyBtdXRleCBwcm90ZWN0cyBt
X2NvbnRleHRNYXAsIGFuZCBtX3Byb3Bvc2VkRGF0YWJhc2VzLgotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHJldmlz
aW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlNjcmlwdENvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKICNpbXBvcnQgInJ1
bnRpbWVfcm9vdC5oIgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9OU01hcFRhYmxlU1BJLmg+CiAKQEAg
LTQ2LDE2ICs0Nyw3IEBACiBzdGF0aWMgTlNNYXBUYWJsZSogRE9NV3JhcHBlckNhY2hlOwogICAg
IAogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwotc3RhdGljIHN0ZDo6bXV0ZXgmIHdy
YXBwZXJDYWNoZUxvY2soKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsK
LSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgbXV0ZXguY29uc3RydWN0KCk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgd3JhcHBl
ckNhY2hlTG9jazsKICNlbmRpZgogCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC03OCw3ICs3MCw3
IEBAIE5TTWFwVGFibGUqIGNyZWF0ZVdyYXBwZXJDYWNoZSgpCiBOU09iamVjdCogZ2V0RE9NV3Jh
cHBlcihET01PYmplY3RJbnRlcm5hbCogaW1wbCkKIHsKICNpZmRlZiBORUVEU19XUkFQUEVSX0NB
Q0hFX0xPQ0sKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh3cmFwcGVyQ2Fj
aGVMb2NrKCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJD
YWNoZUxvY2spOwogI2VuZGlmCiAgICAgaWYgKCFET01XcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJl
dHVybiBuaWw7CkBAIC04OCw3ICs4MCw3IEBAIE5TT2JqZWN0KiBnZXRET01XcmFwcGVyKERPTU9i
amVjdEludGVybmEKIHZvaWQgYWRkRE9NV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgRE9NT2Jq
ZWN0SW50ZXJuYWwqIGltcGwpCiB7CiAjaWZkZWYgTkVFRFNfV1JBUFBFUl9DQUNIRV9MT0NLCi0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sod3JhcHBlckNhY2hlTG9jaygpKTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh3cmFwcGVyQ2FjaGVMb2NrKTsK
ICNlbmRpZgogICAgIGlmICghRE9NV3JhcHBlckNhY2hlKQogICAgICAgICBET01XcmFwcGVyQ2Fj
aGUgPSBjcmVhdGVXcmFwcGVyQ2FjaGUoKTsKQEAgLTk4LDcgKzkwLDcgQEAgdm9pZCBhZGRET01X
cmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBETwogdm9pZCByZW1vdmVET01XcmFwcGVyKERPTU9i
amVjdEludGVybmFsKiBpbXBsKQogewogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdyYXBwZXJDYWNoZUxvY2soKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod3JhcHBlckNhY2hlTG9jayk7
CiAjZW5kaWYKICAgICBpZiAoIURPTVdyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
Y3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIKLSNp
bmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSwxNyArNDEsNyBAQCBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtCiAgICAgcmV0dXJuIHJlZ2lz
dHJ5OwogfQogCi1zdGF0aWMgc3RkOjptdXRleCYgcmVnaXN0cnlNdXRleCgpCi17Ci0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117
Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4
OwotfQorc3RhdGljIFN0YXRpY0xvY2sgcmVnaXN0cnlNdXRleDsKIAogQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5KCkKIHsKQEAgLTYzLDcgKzUzLDcgQEAg
Ym9vbCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Z2V0SWRlbnRpZgogICAgIGlmIChuYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGF1dG8gaXRlciA9IG1fbmFtZVRv
SWRlbnRpZmllck1hcC5maW5kKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgIGlmIChpdGVyID09
IG1fbmFtZVRvSWRlbnRpZmllck1hcC5lbmQoKSkKQEAgLTc1LDE0ICs2NSwxNCBAQCBib29sIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpnZXRJZGVudGlmCiAKIFN0cmluZyBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6bmFtZUZvcklkZW50aWZpZXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHJlZ2lz
dHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socmVnaXN0
cnlNdXRleCk7CiAKICAgICByZXR1cm4gbV9pZGVudGlmaWVyVG9OYW1lTWFwLmdldChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaWRlbnRpZmllcikpLmlzb2xhdGVkQ29weSgpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Y3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhyZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNMb2NrPiBsb2NrKHJlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgYXV0byBpdGVyID0g
bV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1hcC5maW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
ZGVudGlmaWVyKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1h
cC5lbmQoKSkKQEAgLTkzLDcgKzgzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bT4gQ3J5cHRvQQogCiB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpyZWdpc3RlckFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG5hbWUsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtQ29uc3RydWN0b3IgY29uc3RydWN0b3IpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGJvb2wg
YWRkZWQgPSBtX25hbWVUb0lkZW50aWZpZXJNYXAuYWRkKG5hbWUsIGlkZW50aWZpZXIpLmlzTmV3
RW50cnk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRlZCwgYWRkZWQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFu
YWdlci5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oPgotI2luY2x1
ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC00NiwxNyArNDYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0ZDo6bXV0ZXgmIHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4
OwotCi0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25z
dHJ1Y3QoKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBtdXRleDsKLX0KK1N0YXRpY0xvY2sgd29y
a2VyRGVidWdnZXJBZ2VudHNNdXRleDsKIAogdHlwZWRlZiBIYXNoTWFwPFdvcmtlclRocmVhZCos
IFdvcmtlckRlYnVnZ2VyQWdlbnQqPiBXb3JrZXJEZWJ1Z2dlckFnZW50czsKIApAQCAtOTUsMTMg
Kzg1LDEzIEBAIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQKICAgICAs
IG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUsIFdvcmtlckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckds
b2JhbFNjb3BlKGluc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRl
eCk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5zZXQoJmluc3BlY3RlZFdvcmtlckdsb2Jh
bFNjb3BlLT50aHJlYWQoKSwgdGhpcyk7CiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3Jr
ZXJEZWJ1Z2dlckFnZW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayh3b3JrZXJEZWJ1Z2dlckFnZW50c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNMb2NrPiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgpOwogCiAgICAgQVNTRVJUKHdv
cmtlckRlYnVnZ2VyQWdlbnRzKCkuY29udGFpbnMoJm1faW5zcGVjdGVkV29ya2VyR2xvYmFsU2Nv
cGUtPnRocmVhZCgpKSk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5yZW1vdmUoJm1faW5z
cGVjdGVkV29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpKTsKQEAgLTEwOSw3ICs5OSw3IEBAIFdv
cmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJEZWJ1Z2dlckFnZW4KIAogdm9pZCBXb3JrZXJEZWJ1
Z2dlckFnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaEluc3BlY3RvckNvbW1hbmRzKFdvcmtlclRo
cmVhZCogdGhyZWFkKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRleCk7CiAKICAgICBpZiAoV29ya2VyRGVi
dWdnZXJBZ2VudCogYWdlbnQgPSB3b3JrZXJEZWJ1Z2dlckFnZW50cygpLmdldCh0aHJlYWQpKQog
ICAgICAgICBhZ2VudC0+bV9zY3JpcHREZWJ1Z1NlcnZlci5pbnRlcnJ1cHRBbmRSdW5UYXNrKHN0
ZDo6bWFrZV91bmlxdWU8UnVuSW5zcGVjdG9yQ29tbWFuZHNUYXNrPih0aHJlYWQsIGFnZW50LT5t
X2luc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpXaGVlbEV2ZW50VGVzdFRy
aQogCiB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKCkK
IHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7
CiAgICAgbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5jbGVhcigpOwogICAgIG1fdGVzdE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKCk+KCk7CiAgICAgbV90ZXN0VHJp
Z2dlclRpbWVyLnN0b3AoKTsKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OmNsZWFyQWxsVGVzdAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnNldFRlc3RD
YWxsYmFja0FuZFN0YXJ0Tm90aWZpY2F0aW9uVGltZXIoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1
bmN0aW9uQ2FsbGJhY2spCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBtX3Rlc3ROb3RpZmljYXRp
b25DYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbkNhbGxiYWNrKTsKICAgICB9CiAgICAgCkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpzZXRUZXN0Q2FsbGIK
IAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNGb3JSZWFzb24oU2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVh
c29uKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdn
ZXJNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11
dGV4KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50
aWZpZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQog
ICAgICAgICBpdCA9IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnMuYWRkKGlkZW50aWZpZXIsIHN0
ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJSZWFzb24+KCkpLml0ZXJhdG9yOwpAQCAtNzYsNyArNzYs
NyBAQCB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6ZGVmZXJUZXN0c0ZvCiAKIHZvaWQgV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oU2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVhc29u
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4
KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50aWZp
ZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OnRyaWdnZXJUZXN0VAogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbkNhbGxi
YWNrOwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBpZiAoIW1fZGVmZXJUZXN0VHJpZ2dlclJlYXNv
bnMuaXNFbXB0eSgpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICAgICAgaWYgKGlzTG9n
Q2hhbm5lbEVuYWJsZWQoIldoZWVsRXZlbnRUZXN0VHJpZ2dlcnMiKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOSArMjksOSBAQAogI2lmbmRlZiBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAog
I2RlZmluZSBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAogCi0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5j
bHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTYwLDcgKzYwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV90ZXN0Tm90aWZpY2F0
aW9uQ2FsbGJhY2s7CiAgICAgUnVuTG9vcDo6VGltZXI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBt
X3Rlc3RUcmlnZ2VyVGltZXI7Ci0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fdGVzdFRyaWdnZXJN
dXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV90ZXN0VHJpZ2dlck11dGV4OwogICAgIFdURjo6SGFz
aE1hcDxTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIHN0ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJS
ZWFzb24+PiBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQogCisjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNTAsNyArNTEsNyBAQCB2
b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jCiAgICAgc2Nyb2xsaW5nVGhy
ZWFkLmNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zTXV0ZXgpOworICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhzaW5nbGV0b24oKS5tX2Z1bmN0aW9uc011
dGV4KTsKICAgICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlv
bik7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWQKIAogICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6
ZSB0aGUgcnVuIGxvb3AuCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2sobV9pbml0aWFsaXplUnVuTG9vcE11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbV90
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2Vi
Q29yZTogU2Nyb2xsaW5nIik7CiAgICAgICAgIApAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0YKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlv
bjx2b2lkICgpPj4gZnVuY3Rpb25zOwogICAgIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwogICAgICAgICBmdW5jdGlvbnMg
PSBXVEY6Om1vdmUobV9mdW5jdGlvbnMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
IAotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTc0LDEwICs3
NSwxMCBAQCBwcml2YXRlOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZp
ZXI7CiAKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uVmFyaWFibGU7Ci0gICAgc3RkOjptdXRleCBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7
CisgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKKyAg
ICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKIAotICAgIHN0ZDo6bXV0ZXggbV9mdW5j
dGlvbnNNdXRleDsKKyAgICBMb2NrIG1fZnVuY3Rpb25zTXV0ZXg7CiAgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4+IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUaHJlYWRNYWMubW0JKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUaHJlYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEzICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2luY2x1
ZGUgPG11dGV4PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFk
Ojppbml0aWFsaXplUnVuTG9vcCgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3Au
CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luaXRp
YWxpemVSdW5Mb29wTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOwogCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKIApAQCAtNDIsNyArNDQsNyBAQCB2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3AoCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcFNvdXJjZSA9
IGFkb3B0Q0YoQ0ZSdW5Mb29wU291cmNlQ3JlYXRlKDAsIDAsICZjb250ZXh0KSk7CiAgICAgICAg
IENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fdGhyZWFkUnVuTG9v
cFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKIAotICAgICAgICBtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5X2FsbCgpOworICAgICAgICBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgog
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTQwLDkgKzE0MSw5IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZv
bHZlcigpCiAKICAgICAgICAgLy8gV2FrZSB1cCB0aHJlYWQgc28gaXQgY2FuIHJldHVybgogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2Jh
Y2tncm91bmRUaHJlYWRNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCk7CiAgICAgICAgICAgICBtX21vcmVJbnB1dEJ1
ZmZlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAKICAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhyZWFkKTsKQEAgLTE1NSw3ICsxNTYsNyBAQCB2
b2lkIFJldmVyYkNvbnZvbHZlcjo6YmFja2dyb3VuZFRocmVhZEVuCiAgICAgICAgIC8vIFdhaXQg
Zm9yIHJlYWx0aW1lIHRocmVhZCB0byBnaXZlIHVzIG1vcmUgaW5wdXQKICAgICAgICAgbV9tb3Jl
SW5wdXRCdWZmZXJlZCA9IGZhbHNlOyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCk7
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5kVGhy
ZWFkTXV0ZXgpOwogCiAgICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25WYXJp
YWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX21vcmVJbnB1dEJ1ZmZlcmVkIHx8IG1f
d2FudHNUb0V4aXQ7IH0pOwogICAgICAgICB9CkBAIC0yMDksMTIgKzIxMCwxMiBAQCB2b2lkIFJl
dmVyYkNvbnZvbHZlcjo6cHJvY2Vzcyhjb25zdCBBdWRpCiAgICAgLy8gc2lnbmFsIGZyb20gdGlt
ZSB0byB0aW1lLCBzaW5jZSB3ZSdsbCBnZXQgdG8gaXQgdGhlIG5leHQgdGltZSB3ZSdyZSBjYWxs
ZWQuICBXZSdyZSBjYWxsZWQgcmVwZWF0ZWRseQogICAgIC8vIGFuZCBmcmVxdWVudGx5IChhcm91
bmQgZXZlcnkgM21zKS4gIFRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBwcm9jZXNzaW5nIHdlbGwg
aW50byB0aGUgZnV0dXJlIGFuZCBoYXMgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIAogICAgIC8v
IGxlZXdheSBoZXJlLi4uCi0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1f
YmFja2dyb3VuZFRocmVhZE11dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1
ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5kVGhyZWFkTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9tb3JlSW5wdXRCdWZmZXJlZCA9IHRydWU7Ci0gICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeU9uZSgpOwogfQogCiB2b2lkIFJldmVyYkNvbnZvbHZlcjo6cmVzZXQo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9s
dmVyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzYsOSBAQAogI2luY2x1ZGUgIlJl
dmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIgogI2luY2x1ZGUgIlJldmVyYkNvbnZvbHZlclN0YWdl
LmgiCiAjaW5jbHVkZSAiUmV2ZXJiSW5wdXRCdWZmZXIuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25f
dmFyaWFibGU+CiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTg4LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICBUaHJlYWRJZGVudGlmaWVy
IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBt
X21vcmVJbnB1dEJ1ZmZlcmVkOwotICAgIG11dGFibGUgc3RkOjptdXRleCBtX2JhY2tncm91bmRU
aHJlYWRNdXRleDsKLSAgICBtdXRhYmxlIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1fYmFja2dy
b3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlOworICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91
bmRUaHJlYWRNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2JhY2tncm91bmRUaHJlYWRD
b25kaXRpb25WYXJpYWJsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1bi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVu
LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dh
ay9XZWJDb3JlVGhyZWFkUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOSBAQAogCiAj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgogI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRJbnRlcm5h
bC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNp
bmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSB7CkBAIC00NCwyMyArNDYsMjMgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9zdGF0ZU11dGV4KTsKKyAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgbV9jb21wbGV0
aW9uQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gbV9jb21wbGV0
ZWQ7IH0pOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29tcGxldGVkKCkKICAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fc3RhdGVNdXRleCk7CisgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgQVNT
RVJUKCFtX2NvbXBsZXRlZCk7CiAgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAg
bV9jb21wbGV0aW9uQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgICAgICBtX2Nv
bXBsZXRpb25Db25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUoKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgc3RkOjptdXRleCBtX3N0YXRlTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFi
bGUgbV9jb21wbGV0aW9uQ29uZGl0aW9uVmFyaWFibGU7CisgICAgTG9jayBtX3N0YXRlTXV0ZXg7
CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGlvbkNvbmRpdGlvblZhcmlhYmxlOwogICAgIGJvb2wg
bV9jb21wbGV0ZWQ7CiB9OwogCkBAIC0xMTAsNyArMTEyLDcgQEAgZXh0ZXJuICJDIiB7CiAKIHR5
cGVkZWYgV1RGOjpWZWN0b3I8V2ViVGhyZWFkQmxvY2s+IFdlYlRocmVhZFJ1blF1ZXVlOwogCi1z
dGF0aWMgc3RkOjptdXRleCogcnVuUXVldWVNdXRleDsKK3N0YXRpYyBTdGF0aWNMb2NrIHJ1blF1
ZXVlTXV0ZXg7CiBzdGF0aWMgQ0ZSdW5Mb29wU291cmNlUmVmIHJ1blNvdXJjZTsKIHN0YXRpYyBX
ZWJUaHJlYWRSdW5RdWV1ZSogcnVuUXVldWU7CiAKQEAgLTExOCwxMyArMTIwLDEyIEBAIHN0YXRp
YyB2b2lkIEhhbmRsZVJ1blNvdXJjZSh2b2lkICppbmZvKQogewogICAgIFVOVVNFRF9QQVJBTShp
bmZvKTsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwotICAgIEFTU0VSVChydW5R
dWV1ZU11dGV4KTsKICAgICBBU1NFUlQocnVuU291cmNlKTsKICAgICBBU1NFUlQocnVuUXVldWUp
OwogCiAgICAgV2ViVGhyZWFkUnVuUXVldWUgcXVldWVDb3B5OwogICAgIHsKLSAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKnJ1blF1ZXVlTXV0ZXgpOworICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhydW5RdWV1ZU11dGV4KTsKICAgICAgICAg
cXVldWVDb3B5ID0gKnJ1blF1ZXVlOwogICAgICAgICBydW5RdWV1ZS0+Y2xlYXIoKTsKICAgICB9
CkBAIC0xNDAsNyArMTQxLDYgQEAgc3RhdGljIHZvaWQgX1dlYlRocmVhZFJ1bih2b2lkIChedGFz
aykoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHJ1blF1ZXVlTXV0ZXgp
OwogICAgIEFTU0VSVChydW5Tb3VyY2UpOwogICAgIEFTU0VSVChydW5RdWV1ZSk7CiAKQEAgLTE0
OSw3ICsxNDksNyBAQCBzdGF0aWMgdm9pZCBfV2ViVGhyZWFkUnVuKHZvaWQgKF50YXNrKSgpCiAg
ICAgICAgIHN0YXRlID0gbmV3IFdlYlRocmVhZEJsb2NrU3RhdGU7CiAKICAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKCpydW5RdWV1ZU11dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socnVuUXVldWVNdXRleCk7CiAgICAg
ICAgIHJ1blF1ZXVlLT5hcHBlbmQoV2ViVGhyZWFkQmxvY2sodGFzaywgc3RhdGUpKTsKICAgICB9
CiAKQEAgLTE3NSw3ICsxNzUsNiBAQCB2b2lkIFdlYlRocmVhZFJ1blN5bmModm9pZCAoXnRhc2sp
KCkpCiB2b2lkIFdlYlRocmVhZEluaXRSdW5RdWV1ZSgpCiB7CiAgICAgQVNTRVJUKCFydW5RdWV1
ZSk7Ci0gICAgQVNTRVJUKCFydW5RdWV1ZU11dGV4KTsKICAgICBBU1NFUlQoIXJ1blNvdXJjZSk7
CiAKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IHByZWQ7CkBAIC0xODUsOCArMTg0LDYgQEAg
dm9pZCBXZWJUaHJlYWRJbml0UnVuUXVldWUoKQogICAgICAgICBDRlJ1bkxvb3BTb3VyY2VDb250
ZXh0IHJ1blNvdXJjZUNvbnRleHQgPSB7MCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg
TlVMTCwgTlVMTCwgTlVMTCwgSGFuZGxlUnVuU291cmNlfTsKICAgICAgICAgcnVuU291cmNlID0g
Q0ZSdW5Mb29wU291cmNlQ3JlYXRlKE5VTEwsIC0xLCAmcnVuU291cmNlQ29udGV4dCk7CiAgICAg
ICAgIENGUnVuTG9vcEFkZFNvdXJjZShXZWJUaHJlYWRSdW5Mb29wKCksIHJ1blNvdXJjZSwga0NG
UnVuTG9vcERlZmF1bHRNb2RlKTsKLQotICAgICAgICBydW5RdWV1ZU11dGV4ID0gc3RkOjptYWtl
X3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKICAgICB9KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9MYW5ndWFnZS5tbQkocmV2aXNpb24gMTg4NjEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwyMyArMzEsMTQgQEAKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgogI2lt
cG9ydCA8bXV0ZXg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xv
Y2suaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIHByZWZlcnJlZExhbmd1YWdlc011dGV4KCkKLXsK
LSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBzdGF0aWMgc3RkOjpt
dXRleCogbXV0ZXg7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAg
IG11dGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICB9
KTsKLQotICAgIHJldHVybiAqbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBwcmVmZXJyZWRM
YW5ndWFnZXNNdXRleDsKIAogc3RhdGljIFZlY3RvcjxTdHJpbmc+JiBwcmVmZXJyZWRMYW5ndWFn
ZXMoKQogewpAQCAtNjcsNyArNTgsNyBAQCArICh2b2lkKWxhbmd1YWdlUHJlZmVyZW5jZXNEaWRD
aGFuZ2U6KE5TCiAgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CiAKICAgICB7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKFdlYkNvcmU6OnByZWZlcnJlZExh
bmd1YWdlc011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9j
ayhXZWJDb3JlOjpwcmVmZXJyZWRMYW5ndWFnZXNNdXRleCk7CiAgICAgICAgIFdlYkNvcmU6OnBy
ZWZlcnJlZExhbmd1YWdlcygpLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMTgsNyArMTA5LDcgQEAg
VmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZwogCiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2socHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y0xvY2s+IGxvY2socHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgpOwogICAgIFZlY3RvcjxTdHJpbmc+
JiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzID0gcHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiAKICAgICBp
ZiAodXNlclByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAJ
KHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
TG9hZGVyUnVuTG9vcENGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSArMjksMTAgQEAKICNpZiBV
U0UoQ0ZORVRXT1JLKQogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24u
aD4KLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CiAjaW5jbHVkZSA8bGltaXRzPgogI2lu
Y2x1ZGUgPHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
QEAgLTQwLDE5ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIENGUnVuTG9v
cFJlZiBsb2FkZXJSdW5Mb29wT2JqZWN0ID0gMDsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGxvYWRl
clJ1bkxvb3BNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+
IG11dGV4OwotCi0gICAgcmV0dXJuIG11dGV4OwotfQotCi1zdGF0aWMgc3RkOjpjb25kaXRpb25f
dmFyaWFibGUmIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZSgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlPiBjb25kaXRpb25WYXJpYWJs
ZTsKLQotICAgIHJldHVybiBjb25kaXRpb25WYXJpYWJsZTsKLX0KK3N0YXRpYyBTdGF0aWNMb2Nr
IGxvYWRlclJ1bkxvb3BNdXRleDsKK3N0YXRpYyBTdGF0aWNDb25kaXRpb24gbG9hZGVyUnVuTG9v
cENvbmRpdGlvblZhcmlhYmxlOwogCiBzdGF0aWMgdm9pZCBlbXB0eVBlcmZvcm0odm9pZCopIAog
ewpAQCAtNjEsNyArNTEsNyBAQCBzdGF0aWMgdm9pZCBlbXB0eVBlcmZvcm0odm9pZCopIAogc3Rh
dGljIHZvaWQgcnVuTG9hZGVyVGhyZWFkKHZvaWQqKQogewogICAgIHsKLSAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobG9hZGVyUnVuTG9vcE11dGV4KCkpOworICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgpOwog
CiAgICAgICAgIGxvYWRlclJ1bkxvb3BPYmplY3QgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7CiAK
QEAgLTcwLDcgKzYwLDcgQEAgc3RhdGljIHZvaWQgcnVuTG9hZGVyVGhyZWFkKHZvaWQqKQogICAg
ICAgICBDRlJ1bkxvb3BTb3VyY2VSZWYgYm9ndXNTb3VyY2UgPSBDRlJ1bkxvb3BTb3VyY2VDcmVh
dGUoMCwgMCwgJmN0eHQpOwogICAgICAgICBDRlJ1bkxvb3BBZGRTb3VyY2UobG9hZGVyUnVuTG9v
cE9iamVjdCwgYm9ndXNTb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAKLSAgICAgICAg
bG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlKCkubm90aWZ5X29uZSgpOworICAgICAgICBs
b2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgfQogCiAgICAg
U0ludDMyIHJlc3VsdDsKQEAgLTg0LDEyICs3NCwxMiBAQCBDRlJ1bkxvb3BSZWYgbG9hZGVyUnVu
TG9vcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9jayhsb2FkZXJSdW5Mb29wTXV0ZXgoKSk7CisgICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNMb2NrPiBsb2NrKGxvYWRlclJ1bkxvb3BNdXRleCk7CiAKICAgICBp
ZiAoIWxvYWRlclJ1bkxvb3BPYmplY3QpIHsKICAgICAgICAgY3JlYXRlVGhyZWFkKHJ1bkxvYWRl
clRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIiKTsKIAotICAgICAgICBsb2Fk
ZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUoKS53YWl0KGxvY2ssIFtdIHsgcmV0dXJuIGxvYWRl
clJ1bkxvb3BPYmplY3Q7IH0pOworICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFi
bGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29wT2JqZWN0OyB9KTsKICAgICB9
CiAKICAgICByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksOCArMzksOCBAQAogI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5oIgogI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
LmgiCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2luY2x1ZGUgPG11dGV4PgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTEzNiwyMCArMTM2LDIwIEBAIHN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0
ZDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6bXV0ZXggbXV0ZXg7Ci0gICAg
c3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uVmFyaWFibGU7CisgICAgTG9jayBtdXRl
eDsKKyAgICBDb25kaXRpb24gY29uZGl0aW9uVmFyaWFibGU7CiAKICAgICBib29sIGlzRmluaXNo
ZWQgPSBmYWxzZTsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoWyZdIHsKICAgICAgICAgZnVuY3Rp
b24oKTsKIAotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtdXRleCk7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKICAgICAgICAgaXNG
aW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeV9vbmUoKTsK
KyAgICAgICAgY29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7CiAgICAgfSk7CiAKLSAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobXV0ZXgpOworICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TG9jaz4gbG9jayhtdXRleCk7CiAgICAgY29uZGl0aW9uVmFyaWFibGUud2FpdChsb2Nr
LCBbJl0geyByZXR1cm4gaXNGaW5pc2hlZDsgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
LmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsOCBA
QAogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKLSNpbmNsdWRlIDxtdXRleD4KLQogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTEwNSw4ICsxMDQs
OCBAQCBwcml2YXRlOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVhZCB7IDAg
fTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3N0b3BUaHJlYWQgeyBmYWxzZSB9OwotICAgIHN0
ZDo6bXV0ZXggbV9tdXRleFNlbmQ7Ci0gICAgc3RkOjptdXRleCBtX211dGV4UmVjZWl2ZTsKKyAg
ICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CiAgICAgRGVxdWU8
U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKICAgICBEZXF1ZTxTb2NrZXREYXRhPiBtX3JlY2VpdmVE
YXRhOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2Nr
ZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBpbnQgU29j
a2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uCiAKICAgICBhdXRvIGNvcHkgPSBjcmVh
dGVDb3B5KGRhdGEsIGxlbmd0aCk7CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayhtX211dGV4U2VuZCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRl
eFNlbmQpOwogICAgIG1fc2VuZERhdGEuYXBwZW5kKFNvY2tldERhdGEgeyBXVEY6Om1vdmUoY29w
eSksIGxlbmd0aCB9KTsKIAogICAgIHJldHVybiBsZW5ndGg7CkBAIC0xNDYsNyArMTQ2LDcgQEAg
Ym9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIAogICAgICAgICAgICAgY29u
c3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXplIC0gdG90YWxCeXRlc1NlbnQ7CiAgICAg
ICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3Rh
bEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CiAKLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKICAgICAgICAgICAgIG1fc2VuZERhdGEucHJlcGVu
ZChTb2NrZXREYXRhIHsgV1RGOjptb3ZlKGNvcHkpLCByZXN0TGVuZ3RoIH0pOwogCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZVRy
YWNrZXIuaCIKIAogI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzYsMTEgKzM2LDcgQEAgbmFtZXNwYWNlIFNRTGl0ZURhdGFiYXNlVHJhY2tlciB7CiBzdGF0aWMg
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudCA9IG51bGxwdHI7CiBzdGF0aWMgdW5zaWduZWQgc190cmFuc2FjdGlvbkluUHJvZ3Jl
c3NDb3VudGVyID0gMDsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIHRyYW5zYWN0aW9uSW5Qcm9ncmVz
c011dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gdGlwTXV0
ZXg7Ci0gICAgcmV0dXJuIHRpcE11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgdHJhbnNhY3Rp
b25JblByb2dyZXNzTXV0ZXg7CiAKIHZvaWQgc2V0Q2xpZW50KFNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudCogY2xpZW50KQogewpAQCAtNTQsNyArNTAsNyBAQCB2b2lkIGluY3JlbWVudFRyYW5z
YWN0aW9uSW5Qcm9ncmVzc0NvdW50CiAgICAgaWYgKCFzX3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJh
Y2tlckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogCiAg
ICAgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKys7CiAgICAgaWYgKHNfdHJhbnNhY3Rp
b25JblByb2dyZXNzQ291bnRlciA9PSAxKQpAQCAtNjYsNyArNjIsNyBAQCB2b2lkIGRlY3JlbWVu
dFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50CiAgICAgaWYgKCFzX3N0YXRpY1NRTGl0ZURhdGFi
YXNlVHJhY2tlckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgp
OwogCiAgICAgQVNTRVJUKHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlcik7CiAgICAgc190
cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyLS07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJVVGV4dFByb3ZpZGVy
VVRGMTYuaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NjUsOCArNzY2LDggQEAgc3RhdGljIGlubGluZSBib29s
IGNvbXBhcmVBbmRTd2FwTm9uU2hhcgogI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQogICAg
IHJldHVybiBXVEY6OndlYWtDb21wYXJlQW5kU3dhcChyZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCBleHBlY3RlZCwgbmV3VmFsdWUpOwog
I2Vsc2UKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoc3RkOjptdXRleCwgbm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4LCAoKSk7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yTXV0
ZXgpOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0
b3JNdXRleDsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKG5vblNoYXJl
ZENoYXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleCk7CiAgICAgaWYgKG5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IgIT0gZXhwZWN0ZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBu
b25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gbmV3VmFsdWU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTA2LDE0ICsxMDcsNyBAQCBzdHJ1Y3QgVGV4dENv
ZGVjRmFjdG9yeSB7CiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBU
ZXh0RW5jb2RpbmdOYW1lSGFzaD4gVGV4dEVuY29kaW5nTmFtZU1hcDsKIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgVGV4dENvZGVjRmFjdG9yeT4gVGV4dENvZGVjTWFwOwogCi1zdGF0aWMg
c3RkOjptdXRleCYgZW5jb2RpbmdSZWdpc3RyeU11dGV4KCkKLXsKLSAgICAvLyBXZSBkb24ndCBo
YXZlIHRvIGNvbnN0cnVjdCB0aGlzIG11dGV4IGluIGEgdGhyZWFkIHNhZmUgd2F5IGJlY2F1c2Ug
dGhpcyBmdW5jdGlvbgotICAgIC8vIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgZm9yIGFu
eSBwYWdlIGJlZm9yZSBpdCBpcyB1c2VkIGluIHdvcmtlciB0aHJlYWRzLgotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLQotICAgIHJldHVybiBtdXRleDsKLX0K
K3N0YXRpYyBTdGF0aWNMb2NrIGVuY29kaW5nUmVnaXN0cnlNdXRleDsKIAogc3RhdGljIFRleHRF
bmNvZGluZ05hbWVNYXAqIHRleHRFbmNvZGluZ05hbWVNYXA7CiBzdGF0aWMgVGV4dENvZGVjTWFw
KiB0ZXh0Q29kZWNNYXA7CkBAIC0yOTQsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4
dENvZGVjTWFwcygpCiAKIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgQVNTRVJU
KHRleHRDb2RlY01hcCk7CiAgICAgVGV4dENvZGVjRmFjdG9yeSBmYWN0b3J5ID0gdGV4dENvZGVj
TWFwLT5nZXQoZW5jb2RpbmcubmFtZSgpKTsKQEAgLTMxMCw3ICszMDQsNyBAQCBjb25zdCBjaGFy
KiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOCiAgICAgaWYgKCF0ZXh0RW5jb2RpbmdOYW1l
TWFwKQogICAgICAgICBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCk7CiAKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soZW5jb2RpbmdSZWdpc3RyeU11dGV4KTsKIAog
ICAgIGlmIChjb25zdCBjaGFyKiBhdG9taWNOYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0
KG5hbWUpKQogICAgICAgICByZXR1cm4gYXRvbWljTmFtZTsKQEAgLTM3Nyw3ICszNzEsNyBAQCB2
b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkKICAgICB1bnNpZ25lZCBzaXplID0gdGV4dEVu
Y29kaW5nTmFtZU1hcC0+c2l6ZSgpOwogICAgIGZwcmludGYoc3RkZXJyLCAiRHVtcGluZyAldSBl
bnRyaWVzIGluIFdlYkNvcmU6OnRleHRFbmNvZGluZ05hbWVNYXAuLi5cbiIsIHNpemUpOwogCi0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soZW5jb2RpbmdSZWdpc3RyeU11dGV4
KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGVuY29kaW5nUmVnaXN0
cnlNdXRleCk7CiAKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4dEVuY29kaW5nTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+ZW5kKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCShyZXZpc2lvbiAxODg2MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVk
ZSAiVVJMLmgiCiAjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDYsMTcgKzQ3LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgc3RkOjptdXRleCYgdGhyZWFkU2V0TXV0ZXgo
KQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAgc3RkOjpjYWxsX29uY2Uo
b25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLQotICAg
IHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZFNldE11dGV4OwogCiBz
dGF0aWMgSGFzaFNldDxXb3JrZXJUaHJlYWQqPiYgd29ya2VyVGhyZWFkcygpCiB7CkBAIC02Nyw3
ICs1OCw3IEBAIHN0YXRpYyBIYXNoU2V0PFdvcmtlclRocmVhZCo+JiB3b3JrZXJUaHIKIAogdW5z
aWduZWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgpCiB7Ci0gICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodGhyZWFkU2V0TXV0ZXgoKSk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodGhyZWFkU2V0TXV0ZXgpOwogCiAgICAgcmV0dXJuIHdv
cmtlclRocmVhZHMoKS5zaXplKCk7CiB9CkBAIC0xMDYsMTQgKzk3LDE0IEBAIFdvcmtlclRocmVh
ZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYgc2MKICAgICAsIG1fbm90aWZpY2F0aW9uQ2xpZW50
KDApCiAjZW5kaWYKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0aHJl
YWRTZXRNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0aHJl
YWRTZXRNdXRleCk7CiAKICAgICB3b3JrZXJUaHJlYWRzKCkuYWRkKHRoaXMpOwogfQogCiBXb3Jr
ZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsb2NrKHRocmVhZFNldE11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKHRocmVhZFNldE11dGV4KTsKIAogICAgIEFTU0VSVCh3b3JrZXJUaHJlYWRzKCku
Y29udGFpbnModGhpcykpOwogICAgIHdvcmtlclRocmVhZHMoKS5yZW1vdmUodGhpcyk7CkBAIC0y
MjEsNyArMjEyLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQogCiB2b2lkIFdvcmtlclRo
cmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCkKIHsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0aHJlYWRTZXRNdXRleCgpKTsKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0aHJlYWRTZXRNdXRleCk7CiAKICAgICBm
b3IgKGF1dG8qIHdvcmtlclRocmVhZCA6IHdvcmtlclRocmVhZHMoKSkgewogICAgICAgICB3b3Jr
ZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhbXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODYyMSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE1LTA4LTE4ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBv
ZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdpdGggV1RGOjpMb2NrL1dURjo6
Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnRyYXZlcnNlKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OlN5
bmNNZXNzYWdlU3RhdGU6OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNwYXRjaE1lc3NhZ2VzKToKKyAgICAgICAg
KElQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlzcGF0Y2hNZXNzYWdlQW5kUmVz
ZXREaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNGb3JDb25uZWN0aW9uKToKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3
YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWlu
Z01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjppbnN0YWxsSW5jb21pbmdTeW5j
TWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6dW5pbnN0YWxsSW5j
b21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6aGFz
SW5jb21pbmdTeW5jTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmNvbm5lY3Rp
b25EaWRDbG9zZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3Nh
Z2VzKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6ZW5xdWV1ZUluY29taW5nTWVzc2FnZSk6
CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmRpc3BhdGNoT25lTWVzc2FnZSk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBTaGFyZWQvQmxvY2tpbmdS
ZXNwb25zZU1hcC5oOgorICAgICAgICAoQmxvY2tpbmdSZXNwb25zZU1hcDo6d2FpdEZvclJlc3Bv
bnNlKToKKyAgICAgICAgKEJsb2NraW5nUmVzcG9uc2VNYXA6OmRpZFJlY2VpdmVSZXNwb25zZSk6
CisgICAgICAgIChCbG9ja2luZ1Jlc3BvbnNlTWFwOjpjYW5jZWwpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpQ
bHVnaW5JbmZvQ2FjaGU6OnNhdmVUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZv
Q2FjaGU6OnVwZGF0ZVBsdWdpbkluZm8pOgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL2d0
ay9QbHVnaW5JbmZvQ2FjaGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdW
aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbToKKyAgICAg
ICAgKC1bV0tQcmludGluZ1ZpZXcgX3ByZXBhcmVQREZEYXRhRm9yUHJpbnRpbmdPblNlY29uZGFy
eVRocmVhZF0pOgorICAgICAgICAocHJlcGFyZURhdGFGb3JQcmludGluZ09uU2Vjb25kYXJ5VGhy
ZWFkKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcga25vd3NQYWdlUmFuZ2U6XSk6CisKIDIw
MTUtMDgtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYnVpbGQsIGFuZCBmaXggdGhlIHZlcnNpb24gY2hlY2suCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDkgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlSU9DaGFubmVs
LmgiCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPG11dGV4PgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTExOSw4ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgVHJhdmVyc2VGbGFncyBmbGFnczsKICAgICBjb25zdCBUcmF2ZXJzZUhhbmRsZXIgaGFuZGxl
cjsKIAotICAgIHN0ZDo6bXV0ZXggYWN0aXZlTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFy
aWFibGUgYWN0aXZlQ29uZGl0aW9uOworICAgIExvY2sgYWN0aXZlTXV0ZXg7CisgICAgQ29uZGl0
aW9uIGFjdGl2ZUNvbmRpdGlvbjsKICAgICB1bnNpZ25lZCBhY3RpdmVDb3VudCB7IDAgfTsKIH07
CiAKQEAgLTc3NCw3ICs3NzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKFRyYXZlcnNlRmxh
Z3MgZmxhCiAgICAgICAgICAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24uZmxhZ3MgJiBUcmF2ZXJz
ZUZsYWc6OlNoYXJlQ291bnQpCiAgICAgICAgICAgICAgICAgYm9keVNoYXJlQ291bnQgPSBtX2Js
b2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keVBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGgpKTsK
IAotICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKHRyYXZlcnNl
T3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9j
az4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CiAgICAgICAgICAgICArK3Ry
YXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwogCiAgICAgICAgICAgICBhdXRvIGNoYW5uZWwg
PSBJT0NoYW5uZWw6Om9wZW4ocmVjb3JkUGF0aCwgSU9DaGFubmVsOjpUeXBlOjpSZWFkKTsKQEAg
LTc5Nyw5ICs3OTksOSBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKFRyYXZlcnNlRmxhZ3MgZmxh
CiAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlT3BlcmF0aW9uLmhhbmRsZXIoJnJlY29yZCwg
aW5mbyk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOworICAg
ICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9u
LmFjdGl2ZU11dGV4KTsKICAgICAgICAgICAgICAgICAtLXRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2
ZUNvdW50OwotICAgICAgICAgICAgICAgIHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvbmRpdGlv
bi5ub3RpZnlfb25lKCk7CisgICAgICAgICAgICAgICAgdHJhdmVyc2VPcGVyYXRpb24uYWN0aXZl
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIG1heGltdW1QYXJhbGxlbFJlYWRDb3VudCA9IDU7CkBAIC04MDgsNyArODEw
LDcgQEAgdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYQogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0pOwogICAgICAgICAvLyBXYWl0IGZvciBhbGwgcmVhZHMgdG8gZmlu
aXNoLgotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sodHJhdmVyc2VP
cGVyYXRpb24uYWN0aXZlTXV0ZXgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxv
Y2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOwogICAgICAgICB0cmF2ZXJzZU9wZXJh
dGlvbi5hY3RpdmVDb25kaXRpb24ud2FpdChsb2NrLCBbJnRyYXZlcnNlT3BlcmF0aW9uXSB7CiAg
ICAgICAgICAgICByZXR1cm4gIXRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwogICAgICAg
ICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJ
KHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIEJp
bmFyeVNlbWFwaG9yZSBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhvcmU7CiAKICAgICAvLyBQcm90
ZWN0cyBtX2RpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc1dvcmtTZXQgYW5kIG1fbWVzc2FnZXNU
b0Rpc3BhdGNoV2hpbGVXYWl0aW5nRm9yU3luY1JlcGx5LgotICAgIHN0ZDo6bXV0ZXggbV9tdXRl
eDsKKyAgICBMb2NrIG1fbXV0ZXg7CiAKICAgICAvLyBUaGUgc2V0IG9mIGNvbm5lY3Rpb25zIGZv
ciB3aGljaCB3ZSd2ZSBzY2hlZHVsZWQgYSBjYWxsIHRvIGRpc3BhdGNoTWVzc2FnZUFuZFJlc2V0
RGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzRm9yQ29ubmVjdGlvbi4KICAgICBIYXNoU2V0PFJl
ZlB0cjxDb25uZWN0aW9uPj4gbV9kaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNXb3JrU2V0OwpA
QCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6cHJv
Y2UKICAgICBDb25uZWN0aW9uQW5kSW5jb21pbmdNZXNzYWdlIGNvbm5lY3Rpb25BbmRJbmNvbWlu
Z01lc3NhZ2UgeyBjb25uZWN0aW9uLCBXVEY6Om1vdmUobWVzc2FnZSkgfTsKIAogICAgIHsKLSAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAKICAgICAgICAg
aWYgKG1fZGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29ya1NldC5hZGQoJmNvbm5lY3Rpb24p
LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDb25uZWN0aW9uPiBwcm90ZWN0ZWRD
b25uZWN0aW9uKCZjb25uZWN0aW9uKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIENvbm5lY3Rp
b246OlN5bmNNZXNzYWdlU3RhdGU6OmRpc3BhCiAgICAgVmVjdG9yPENvbm5lY3Rpb25BbmRJbmNv
bWluZ01lc3NhZ2U+IG1lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseTsK
IAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRl
eCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAg
ICBtX21lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseS5zd2FwKG1lc3Nh
Z2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseSk7CiAgICAgfQogCkBAIC0xNzUs
NyArMTc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNwYQogICAg
IH0KIAogICAgIGlmICghbWVzc2FnZXNUb1B1dEJhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgICAgICBmb3IgKGF1dG8mIG1lc3Nh
Z2UgOiBtZXNzYWdlc1RvUHV0QmFjaykKICAgICAgICAgICAgIG1fbWVzc2FnZXNUb0Rpc3BhdGNo
V2hpbGVXYWl0aW5nRm9yU3luY1JlcGx5LmFwcGVuZChXVEY6Om1vdmUobWVzc2FnZSkpOwpAQCAt
MTg1LDcgKzE4NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlzcGEK
IHZvaWQgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlzcGF0Y2hNZXNzYWdlQW5kUmVz
ZXREaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNGb3JDb25uZWN0aW9uKENvbm5lY3Rpb24mIGNv
bm5lY3Rpb24pCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRl
eCk7CiAgICAgICAgIEFTU0VSVChtX2RpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc1dvcmtTZXQu
Y29udGFpbnMoJmNvbm5lY3Rpb24pKTsKICAgICAgICAgbV9kaWRTY2hlZHVsZURpc3BhdGNoTWVz
c2FnZXNXb3JrU2V0LnJlbW92ZSgmY29ubmVjdGlvbik7CiAgICAgfQpAQCAtMzYzLDcgKzM2Myw3
IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWUKICNlbmRpZgogCiAg
ICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX291dGdvaW5n
TWVzc2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fb3V0
Z29pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgbV9vdXRnb2luZ01lc3NhZ2VzLmFwcGVuZChX
VEY6Om1vdmUoZW5jb2RlcikpOwogICAgIH0KICAgICAKQEAgLTM4OCw3ICszODgsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3RpCiAKICAgICAvLyBGaXJzdCwgY2hl
Y2sgaWYgdGhpcyBtZXNzYWdlIGlzIGFscmVhZHkgaW4gdGhlIGluY29taW5nIG1lc3NhZ2VzIHF1
ZXVlLgogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9p
bmNvbWluZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9p
bmNvbWluZ01lc3NhZ2VzLmJlZ2luKCksIGVuZCA9IG1faW5jb21pbmdNZXNzYWdlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURl
Y29kZXI+JiBtZXNzYWdlID0gKml0OwpAQCAtNDE0LDcgKzQxNCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxNZXNzYWdlRGVjb2Rlcj4gQ29ubmVjdGkKICAgICBXYWl0Rm9yTWVzc2FnZVN0YXRlIHdhaXRp
bmdGb3JNZXNzYWdlKG1lc3NhZ2VSZWNlaXZlck5hbWUsIG1lc3NhZ2VOYW1lLCBkZXN0aW5hdGlv
bklELCB3YWl0Rm9yTWVzc2FnZUZsYWdzKTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKKyAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAogICAgICAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IGhhdmluZyBtdWx0aXBsZSBjbGllbnRzIHdhaXRpbmcgZm9y
IG1lc3NhZ2VzLgogICAgICAgICBBU1NFUlQoIW1fd2FpdGluZ0Zvck1lc3NhZ2UpOwpAQCAtNDIz
LDggKzQyMyw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gQ29ubmVjdGkKICAg
ICB9CiAKICAgICAvLyBOb3cgd2FpdCBmb3IgaXQgdG8gYmUgc2V0LgorICAgIENvbmRpdGlvbjo6
Q2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVUaW1lb3V0ID0gQ29uZGl0aW9uOjpDbG9jazo6bm93
KCkgKyB0aW1lb3V0OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOworICAgICAgICBzdGQ6
OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11dGV4KTsKIAogICAgICAg
ICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVjb2RlcikgewogICAgICAgICAgICAgYXV0byBk
ZWNvZGVyID0gV1RGOjptb3ZlKG1fd2FpdGluZ0Zvck1lc3NhZ2UtPmRlY29kZXIpOwpAQCAtNDMz
LDkgKzQzNCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gQ29ubmVjdGkKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE5vdyB3ZSB3YWl0LgotICAgICAgICBzdGQ6OmN2X3N0YXR1
cyBzdGF0dXMgPSBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLndhaXRfZm9yKGxvY2ssIHRpbWVv
dXQpOworICAgICAgICBib29sIGRpZFRpbWVvdXQgPSAhbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlv
bi53YWl0VW50aWwobG9jaywgYWJzb2x1dGVUaW1lb3V0KTsKICAgICAgICAgLy8gV2UgdGltZWQg
b3V0LCBsb3N0IG91ciBjb25uZWN0aW9uLCBvciBhIHN5bmMgbWVzc2FnZSBjYW1lIGluIHdpdGgg
SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzLCBzbyBzdG9wIHdhaXRpbmcuCi0g
ICAgICAgIGlmIChzdGF0dXMgPT0gc3RkOjpjdl9zdGF0dXM6OnRpbWVvdXQgfHwgbV93YWl0aW5n
Rm9yTWVzc2FnZS0+bWVzc2FnZVdhaXRpbmdJbnRlcnJ1cHRlZCkKKyAgICAgICAgaWYgKGRpZFRp
bWVvdXQgfHwgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZVdhaXRpbmdJbnRlcnJ1cHRlZCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjcwLDcgKzY3MSw3IEBAIHZvaWQgQ29u
bmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgKICNlbmRpZgogCiAgICAgaWYgKG1lc3Nh
Z2UtPmlzU3luY01lc3NhZ2UoKSkgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4KTsKKyAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRl
eCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1faW5jb21pbmdTeW5jTWVzc2Fn
ZUNhbGxiYWNrcy52YWx1ZXMoKSkKICAgICAgICAgICAgIG1faW5jb21pbmdTeW5jTWVzc2FnZUNh
bGxiYWNrUXVldWUtPmRpc3BhdGNoKGNhbGxiYWNrKTsKQEAgLTY4NiwxOCArNjg3LDE4IEBAIHZv
aWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgKIAogICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdhaXRpbmcgZm9yIHRoaXMgbWVzc2FnZS4KICAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CisgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fd2FpdEZvck1lc3NhZ2VNdXRleCk7CiAKICAg
ICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UgJiYgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVz
c2FnZVJlY2VpdmVyTmFtZSA9PSBtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgJiYgbV93
YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZU5hbWUgPT0gbWVzc2FnZS0+bWVzc2FnZU5hbWUoKSAm
JiBtX3dhaXRpbmdGb3JNZXNzYWdlLT5kZXN0aW5hdGlvbklEID09IG1lc3NhZ2UtPmRlc3RpbmF0
aW9uSUQoKSkgewogICAgICAgICAgICAgbV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVjb2RlciA9IFdU
Rjo6bW92ZShtZXNzYWdlKTsKICAgICAgICAgICAgIEFTU0VSVChtX3dhaXRpbmdGb3JNZXNzYWdl
LT5kZWNvZGVyKTsKLSAgICAgICAgICAgIG1fd2FpdEZvck1lc3NhZ2VDb25kaXRpb24ubm90aWZ5
X29uZSgpOworICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlPbmUo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3dhaXRp
bmdGb3JNZXNzYWdlICYmIChtX3dhaXRpbmdGb3JNZXNzYWdlLT53YWl0Rm9yTWVzc2FnZUZsYWdz
ICYgSW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKSAmJiBtZXNzYWdlLT5pc1N5
bmNNZXNzYWdlKCkpIHsKICAgICAgICAgICAgIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VX
YWl0aW5nSW50ZXJydXB0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNv
bmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgICAgICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0
aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MDYsNyArNzA3LDcgQEAg
dm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKAogCiB1aW50NjRfdCBDb25u
ZWN0aW9uOjppbnN0YWxsSW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrKHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gY2FsbGJhY2spCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CiAKICAg
ICBtX25leHRJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tJRCsrOwogCkBAIC03MjAsMTMgKzcy
MSwxMyBAQCB1aW50NjRfdCBDb25uZWN0aW9uOjppbnN0YWxsSW5jb21pbmdTeW5jCiAKIHZvaWQg
Q29ubmVjdGlvbjo6dW5pbnN0YWxsSW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrKHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9p
bmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CiAgICAgbV9pbmNv
bWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFja0lEKTsKIH0KIAogYm9vbCBD
b25uZWN0aW9uOjpoYXNJbmNvbWluZ1N5bmNNZXNzYWdlKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CisgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOwogCiAgICAgZm9y
IChhdXRvJiBtZXNzYWdlIDogbV9pbmNvbWluZ01lc3NhZ2VzKSB7CiAgICAgICAgIGlmIChtZXNz
YWdlLT5pc1N5bmNNZXNzYWdlKCkpCkBAIC03NjMsMTEgKzc2NCwxMSBAQCB2b2lkIENvbm5lY3Rp
b246OmNvbm5lY3Rpb25EaWRDbG9zZSgpCiAgICAgfQogCiAgICAgewotICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOworICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwogICAg
ICAgICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZSkKICAgICAgICAgICAgIG1fd2FpdGluZ0Zvck1l
c3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJydXB0ZWQgPSB0cnVlOwogICAgIH0KLSAgICBtX3dh
aXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICBtX3dhaXRGb3JNZXNzYWdl
Q29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCiAgICAgaWYgKG1fZGlkQ2xvc2VPbkNvbm5lY3Rpb25X
b3JrUXVldWVDYWxsYmFjaykKICAgICAgICAgbV9kaWRDbG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1
ZUNhbGxiYWNrKHRoaXMpOwpAQCAtODAzLDcgKzgwNCw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2Vu
ZE91dGdvaW5nTWVzc2FnZXMoKQogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZUVuY29k
ZXI+IG1lc3NhZ2U7CiAKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXgpOwogICAgICAg
ICAgICAgaWYgKG1fb3V0Z29pbmdNZXNzYWdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBtZXNzYWdlID0gbV9vdXRnb2luZ01lc3NhZ2VzLnRha2VGaXJz
dCgpOwpAQCAtODYyLDcgKzg2Myw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6ZGlkRmFpbFRvU2VuZFN5
bmNNZXNzYWcKIHZvaWQgQ29ubmVjdGlvbjo6ZW5xdWV1ZUluY29taW5nTWVzc2FnZShzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IGluY29taW5nTWVzc2FnZSkKIHsKICAgICB7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ01lc3Nh
Z2VzTXV0ZXgpOwogICAgICAgICBtX2luY29taW5nTWVzc2FnZXMuYXBwZW5kKFdURjo6bW92ZShp
bmNvbWluZ01lc3NhZ2UpKTsKICAgICB9CiAKQEAgLTkxOCw3ICs5MTksNyBAQCB2b2lkIENvbm5l
Y3Rpb246OmRpc3BhdGNoT25lTWVzc2FnZSgpCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VE
ZWNvZGVyPiBtZXNzYWdlOwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgaWYgKG1f
aW5jb21pbmdNZXNzYWdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2lu
Y2x1ZGUgIlByb2Nlc3NUeXBlLmgiCiAjaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNvbmRp
dGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgpAQCAtMjU5LDE1ICsyNTksMTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlOwogCiAgICAgLy8gSW5jb21pbmcgbWVzc2FnZXMuCi0gICAgc3RkOjpt
dXRleCBtX2luY29taW5nTWVzc2FnZXNNdXRleDsKKyAgICBMb2NrIG1faW5jb21pbmdNZXNzYWdl
c011dGV4OwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4+IG1faW5j
b21pbmdNZXNzYWdlczsKIAogICAgIC8vIE91dGdvaW5nIG1lc3NhZ2VzLgotICAgIHN0ZDo6bXV0
ZXggbV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXg7CisgICAgTG9jayBtX291dGdvaW5nTWVzc2FnZXNN
dXRleDsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZUVuY29kZXI+PiBtX291dGdv
aW5nTWVzc2FnZXM7CiAgICAgCi0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbV93YWl0Rm9y
TWVzc2FnZUNvbmRpdGlvbjsKLSAgICBzdGQ6Om11dGV4IG1fd2FpdEZvck1lc3NhZ2VNdXRleDsK
KyAgICBDb25kaXRpb24gbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbjsKKyAgICBMb2NrIG1fd2Fp
dEZvck1lc3NhZ2VNdXRleDsKIAogICAgIFdhaXRGb3JNZXNzYWdlU3RhdGUqIG1fd2FpdGluZ0Zv
ck1lc3NhZ2U7CiAKQEAgLTMwNyw3ICszMDcsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgU2Vjb25kYXJ5VGhyZWFkUGVuZGluZ1N5bmNSZXBseSo+IFNlY29uZGFy
eVRocmVhZFBlbmRpbmdTeW5jUmVwbHlNYXA7CiAgICAgU2Vjb25kYXJ5VGhyZWFkUGVuZGluZ1N5
bmNSZXBseU1hcCBtX3NlY29uZGFyeVRocmVhZFBlbmRpbmdTeW5jUmVwbHlNYXA7CiAKLSAgICBz
dGQ6Om11dGV4IG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTXV0ZXg7CisgICAgTG9jayBt
X2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3Qs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrczsK
ICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja1F1ZXVl
OwogICAgIHVpbnQ2NF90IG1fbmV4dEluY29taW5nU3luY01lc3NhZ2VDYWxsYmFja0lEIHsgMCB9
OwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Jsb2NraW5nUmVzcG9uc2VNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQmxvY2tpbmdSZXNwb25zZU1hcC5oCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQmxvY2tpbmdSZXNwb25z
ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaWZuZGVmIEJsb2NraW5n
UmVzcG9uc2VNYXBfaAogI2RlZmluZSBCbG9ja2luZ1Jlc3BvbnNlTWFwX2gKIAotI2luY2x1ZGUg
PGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtNDAsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHdhaXRGb3JSZXNwb25zZSh1aW50NjRfdCBy
ZXF1ZXN0SUQpCiAgICAgewogICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgICAgICAgICBpZiAobV9j
YW5jZWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU2LDI2ICs1Nywy
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCByZXF1
ZXN0SUQsIHN0ZDo6dW5pcXVlX3B0cjxUPiByZXNwb25zZSkKICAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlcy5j
b250YWlucyhyZXF1ZXN0SUQpKTsKIAogICAgICAgICBtX3Jlc3BvbnNlcy5zZXQocmVxdWVzdElE
LCBXVEY6Om1vdmUocmVzcG9uc2UpKTsKIAotICAgICAgICAvLyBGSVhNRTogV2FraW5nIHVwIGFs
bCB0aHJlYWRzIGlzIHF1aXRlIGluZWZmaWNpZW50LgotICAgICAgICBtX2NvbmRpdGlvbi5ub3Rp
ZnlfYWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb3VsZCBnZXQgYSBzbGlnaHQgc3BlZWQtdXAg
ZnJvbSB1c2luZyBub3RpZnlPbmUoKS4KKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7
CiAgICAgfQogCiAgICAgdm9pZCBjYW5jZWwoKQogICAgIHsKICAgICAgICAgbV9jYW5jZWxlZCA9
IHRydWU7CiAKLSAgICAgICAgLy8gRklYTUU6IFdha2luZyB1cCBhbGwgdGhyZWFkcyBpcyBxdWl0
ZSBpbmVmZmljaWVudC4KLSAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgICAg
ICAvLyBGSVhNRTogQ291bGQgZ2V0IGEgc2xpZ2h0IHNwZWVkLXVwIGZyb20gdXNpbmcgbm90aWZ5
T25lKCkuCisgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUg
bV9jb25kaXRpb247CisgICAgTG9jayBtX211dGV4OworICAgIENvbmRpdGlvbiBtX2NvbmRpdGlv
bjsKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxUPj4gbV9yZXNwb25z
ZXM7CiAgICAgYm9vbCBtX2NhbmNlbGVkOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAJKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5J
bmZvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFBsdWdpbkluZm9D
YWNoZTo6flBsdWdpbkluZm9DYWNoZSgpCiAKIHZvaWQgUGx1Z2luSW5mb0NhY2hlOjpzYXZlVG9G
aWxlKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIGdzaXplIGRh
dGFMZW5ndGg7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBkYXRhKGdfa2V5X2ZpbGVfdG9fZGF0YSht
X2NhY2hlRmlsZS5nZXQoKSwgJmRhdGFMZW5ndGgsIG51bGxwdHIpKTsKQEAgLTE0Miw3ICsxNDIs
NyBAQCB2b2lkIFBsdWdpbkluZm9DYWNoZTo6dXBkYXRlUGx1Z2luSW5mbyhjCiAgICAgaWYgKG1f
Y2FjaGVQYXRoICYmICFtX3JlYWRPbmx5TW9kZSkgewogICAgICAgICAvLyBTYXZlIHRoZSBjYWNo
ZSBmaWxlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBlbnMgaW4gdGhlIG1haW4gdGhy
ZWFkIGFuZAogICAgICAgICAvLyBpdCdzIGRvbmUgb25seSBvbmNlIHdoZW4gdGhpcyBpcyBjYWxs
ZWQgbXVsdGlwbGUgdGltZXMgaW4gYSB2ZXJ5IHNob3J0IHRpbWUuCi0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgaWYgKG1fc2F2ZVRvRmlsZUlkbGUuaXNT
Y2hlZHVsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaAkocmV2
aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1Bs
dWdpbkluZm9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
Z2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CkBAIC01NSw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtX2NhY2hl
UGF0aDsKICAgICBHTWFpbkxvb3BTb3VyY2UgbV9zYXZlVG9GaWxlSWRsZTsKICAgICBib29sIG1f
cmVhZE9ubHlNb2RlOwotICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsOCBAQAogCiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3RIYXNoLmg+CiAjaW1w
b3J0IDxjb25kaXRpb25fdmFyaWFibGU+CisjaW1wb3J0IDx3dGYvQ29uZGl0aW9uLmg+CisjaW1w
b3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC01Nyw4ICs1OSw4IEBAIEBpbnRlcmZhY2UgV0tQcmludGluZ1ZpZXcg
OiBOU1ZpZXcgewogICAgIHVpbnQ2NF90IF9leHBlY3RlZFByaW50Q2FsbGJhY2s7CiAKICAgICBC
T09MIF9pc1ByaW50aW5nRnJvbVNlY29uZGFyeVRocmVhZDsKLSAgICBzdGQ6Om11dGV4IF9wcmlu
dGluZ0NhbGxiYWNrTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgX3ByaW50aW5n
Q2FsbGJhY2tDb25kaXRpb247CisgICAgTG9jayBfcHJpbnRpbmdDYWxsYmFja011dGV4OworICAg
IENvbmRpdGlvbiBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbjsKIAogICAgIE5TVGltZXIgKl9h
dXRvZGlzcGxheVJlc3VtZVRpbWVyOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDIsMTEgKzI0MiwxMSBAQCAtICh2b2lkKV9wcmVwYXJlUERGRGF0YUZvclByaW50aW5nT25T
ZWNvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGlmICghX3dlYkZyYW1l
LT5wYWdlKCkpIHsKLSAgICAgICAgX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5X29u
ZSgpOworICAgICAgICBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOwogCiAgICAgQVNTRVJUKFtzZWxmIF9oYXNQYWdl
UmVjdHNdKTsKICAgICBBU1NFUlQoX3ByaW50ZWRQYWdlc0RhdGEuaXNFbXB0eSgpKTsKQEAgLTI3
OCw3ICsyNzgsNyBAQCAtICh2b2lkKV9wcmVwYXJlUERGRGF0YUZvclByaW50aW5nT25TZWNvCiAg
ICAgICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgICAgICB2aWV3LT5fcHJpbnRlZFBhZ2Vz
RGF0YS5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgICAgIHZp
ZXctPl9leHBlY3RlZFByaW50Q2FsbGJhY2sgPSAwOwotICAgICAgICAgICAgdmlldy0+X3ByaW50
aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAgICAgdmlldy0+X3By
aW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIH0KICAgICB9KTsK
ICAgICBfZXhwZWN0ZWRQcmludENhbGxiYWNrID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKQEAg
LTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRGF0YUZvclByaW50aW5nT25TZWNv
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFdLUHJpbnRpbmdWaWV3ICp2
aWV3ID0gc3RhdGljX2Nhc3Q8V0tQcmludGluZ1ZpZXcgKj4odW50eXBlZENvbnRleHQpOwotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHZpZXctPl9wcmludGluZ0NhbGxiYWNr
TXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKHZpZXctPl9wcmludGluZ0Nh
bGxiYWNrTXV0ZXgpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUgcmVjZWl2ZWQgcGFnZSByZWN0cyB3
aGlsZSBhIG1lc3NhZ2UgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRyYXZlbGVkIGZyb20gc2Vjb25k
YXJ5IHRocmVhZCB0byBtYWluIG9uZS4KICAgICBpZiAoW3ZpZXcgX2hhc1BhZ2VSZWN0c10pIHsK
QEAgLTM5NSw3ICszOTUsNyBAQCAtIChCT09MKWtub3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRl
cilyCiAgICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9wcmludGluZ1BhZ2VSZWN0cy5z
aXplKCkpOwogICAgIGVsc2UgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewogICAgICAgICBBU1NF
UlQoIVtzZWxmIF9pc1ByaW50aW5nUHJldmlld10pOwotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PHN0ZDo6bXV0ZXg+IGxvY2soX3ByaW50aW5nQ2FsbGJhY2tNdXRleCk7CisgICAgICAgIHN0ZDo6
dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhfcHJpbnRpbmdDYWxsYmFja011dGV4KTsKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChwcmVwYXJlRGF0YUZvclByaW50aW5nT25TZWNvbmRhcnlUaHJlYWQs
IHNlbGYpOwogICAgICAgICBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbi53YWl0KGxvY2spOwog
ICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBfcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259353</attachid>
            <date>2015-08-18 22:01:36 -0700</date>
            <delta_ts>2015-08-19 11:06:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121488</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBhbGwgdXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdp
dGggV1RGOjpMb2NrL1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6
CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW06CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVnaXN0ZXJEZWJ1Z2dhYmxlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1dG9t
YXRpY0luc3BlY3RDYW5kaWRhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0
b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rvcjo6c2V0dXBGYWlsZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3I6OnNldHVwQ29tcGxldGVkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3Rv
cCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0
aW9uSWZOZWVkZWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6eHBjQ29ubmVjdGlvblJlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3Rvcjo6eHBjQ29ubmVjdGlvbkZhaWxlZCk6CisgICAgICAgIChJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEluZGljYXRlTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRQcm94eUFwcGxpY2F0aW9uU2V0dXBN
ZXNzYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb24uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nv
bm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbjo6Y2xvc2VGcm9tTWVzc2FnZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmRlc2VyaWFsaXplTWVzc2FnZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsZUV2ZW50KToKKwog
MjAxNS0wOC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAg
ICAgICBJbnRyb2R1Y2Ugbm9uLXVzZXItb2JzZXJ2YWJsZSBQcm9taXNlIGZ1bmN0aW9ucyB0byB1
c2UgUHJvbWlzZXMgaW50ZXJuYWxseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJSZW1v
dGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgogI2lt
cG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwpAQCAtMTA4LDcgKzEwOSw3
IEBAIHByaXZhdGU6CiAgICAgLy8gQW55IGRlYnVnZ2FibGUgY2FuIHNlbmQgbWVzc2FnZXMgb3Zl
ciB0aGUgWFBDIGNvbm5lY3Rpb24uCiAgICAgLy8gU28gbG9jayBhY2Nlc3MgdG8gYWxsIG1hcHMg
YW5kIHN0YXRlIGFzIHRoZXkgY2FuIGNoYW5nZQogICAgIC8vIGZyb20gYW55IHRocmVhZC4KLSAg
ICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAgTG9jayBtX211dGV4OwogCiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjpwYWlyPFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqLCBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlSW5mbz4+IG1fZGVidWdnYWJsZU1hcDsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBSZWZQdHI8UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25NYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9S
ZW1vdGVJbnNwZWN0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB1bnNpZ25lZCBSZW1vdGVJbnNwZWN0
b3I6Om5leHRBdmFpbGFibGVJCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWdpc3RlckRlYnVn
Z2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBuZXh0
QXZhaWxhYmxlSWRlbnRpZmllcigpOwogICAgIGRlYnVnZ2FibGUtPnNldElkZW50aWZpZXIoaWRl
bnRpZmllcik7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlZ2lz
dGVyRGVidWdnYWJsZQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dW5yZWdpc3RlckRlYnVnZ2Fi
bGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSogZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dh
YmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQpAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1bnJlZ2lzdGVyRGVidWdnYWIKIAogdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OnVwZGF0ZURlYnVnZ2FibGUoUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSog
ZGVidWdnYWJsZSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIHVu
c2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7CiAgICAgaWYgKCFp
ZGVudGlmaWVyKQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRh
dGVEZWJ1Z2dhYmxlKFIKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp1cGRhdGVEZWJ1Z2dhYmxlQXV0
b21hdGljSW5zcGVjdENhbmRpZGF0ZShSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKiBkZWJ1Z2dh
YmxlKQogewogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBkZWJ1Z2dhYmxlLT5pZGVudGlmaWVyKCk7
CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFJlbW90
ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAKICAgICAgICAgLy8gSW4gY2FzZSBkZWJ1
Z2dlcnMgZmFpbCB0byByZXNwb25kLCBvciB3ZSBjYW5ub3QgY29ubmVjdCB0byB3ZWJpbnNwZWN0
b3JkLCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIGFmdGVyIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUu
CiAgICAgICAgIGRpc3BhdGNoX2FmdGVyKGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1cs
IDAuOCAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hf
UVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fYXV0b21hdGljSW5zcGVj
dGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIgPT0gaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAg
IExPR19FUlJPUigiU2tpcHBpbmcgQXV0b21hdGljIEluc3BlY3Rpb24gQ2FuZGlkYXRlIHdpdGgg
cGFnZUlkKCV1KSBiZWNhdXNlIHdlIGZhaWxlZCB0byByZWNlaXZlIGEgcmVzcG9uc2UgaW4gdGlt
ZS4iLCBtX2F1dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyKTsKICAgICAgICAg
ICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVzZWQgPSBmYWxzZTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6dXBkYXRlRGVidWdnYWJsZUF1CiAgICAgZGVi
dWdnYWJsZS0+cGF1c2VXYWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbigpOwogCiAgICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICAgICAgQVNTRVJU
KG1fYXV0b21hdGljSW5zcGVjdGlvbkNhbmRpZGF0ZUlkZW50aWZpZXIpOwogICAgICAgICBtX2F1
dG9tYXRpY0luc3BlY3Rpb25DYW5kaWRhdGVJZGVudGlmaWVyID0gMDsKQEAgLTI0NSw3ICsyNDUs
NyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZEF1dG9tYXRpY0luc3BlCiAKIHZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQodW5zaWduZWQgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogCiAgICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAg
LTI2NSw3ICsyNjUsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1JlbW90
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ25lZCBpZGVudGlmaWVy
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9jb25uZWN0aW9u
TWFwLnJlbW92ZShpZGVudGlmaWVyKTsKIApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgUmVtb3Rl
SW5zcGVjdG9yOjpzZXR1cEZhaWxlZCh1bnNpZ24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNl
dHVwQ29tcGxldGVkKHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9tdXRleCk7CiAKICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2F1dG9tYXRpY0luc3BlY3Rp
b25DYW5kaWRhdGVJZGVudGlmaWVyKQogICAgICAgICBtX2F1dG9tYXRpY0luc3BlY3Rpb25QYXVz
ZWQgPSBmYWxzZTsKQEAgLTI5Myw3ICsyOTMsNyBAQCBib29sIFJlbW90ZUluc3BlY3Rvcjo6d2Fp
dGluZ0ZvckF1dG9tYXRpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdGFydCgpCiB7Ci0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KCkKIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3AoKQogewotICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbXV0ZXgpOwogCiAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7CiB9CkBA
IC0zNTUsNyArMzU1LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9w
UwogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBYUENDb25uZWN0aW9uSWZOZWVkZWQoKQog
ewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgaWYgKG1feHBjQ29ubmVj
dGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgUmVtb3RlSW5z
cGVjdG9yOjpzZXR1cFhQQ0Nvbm5lY3Rpb24KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWRfdCBwaWQsIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1
ZGl0RGF0YSkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIGlmICht
X3BhcmVudFByb2Nlc3NJZGVudGlmaWVyIHx8IG1fcGFyZW50UHJvY2Vzc0F1ZGl0RGF0YSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
ZXRQYXJlbnRQcm9jZXNzSW4KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnhwY0Nvbm5lY3Rpb25S
ZWNlaXZlZE1lc3NhZ2UoUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbiosIE5TU3RyaW5nICpt
ZXNzYWdlTmFtZSwgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykKIHsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX211dGV4KTsKIAogICAgIGlmIChbbWVzc2FnZU5hbWUgaXNFcXVhbFRvU3RyaW5nOldJ
UlBlcm1pc3Npb25EZW5pZWRdKSB7CiAgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpY
UENNZXNzYWdlKTsKQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6eHBj
Q29ubmVjdGlvblJlY2VpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjp4cGNDb25uZWN0aW9uRmFp
bGVkKFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBBU1NFUlQoY29ubmVjdGlvbiA9PSBtX3hw
Y0Nvbm5lY3Rpb24pOwogICAgIGlmIChjb25uZWN0aW9uICE9IG1feHBjQ29ubmVjdGlvbikKQEAg
LTUyMiw3ICs1MjIsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdTb29uKCkK
IAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IHRydWU7CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMC4yICogTlNFQ19QRVJfU0VDKSwgZGlzcGF0Y2hf
Z2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBpZiAobV9w
dXNoU2NoZWR1bGVkKQogICAgICAgICAgICAgcHVzaExpc3RpbmdOb3coKTsKICAgICB9KTsKQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRJbmRpY2F0ZU1l
CiAgICAgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKF57CiAgICAg
ICAgIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUqIGRlYnVnZ2FibGUgPSBudWxscHRyOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
CiAgICAgICAgICAgICBhdXRvIGl0ID0gbV9kZWJ1Z2dhYmxlTWFwLmZpbmQoaWRlbnRpZmllcik7
CiAgICAgICAgICAgICBpZiAoaXQgPT0gbV9kZWJ1Z2dhYmxlTWFwLmVuZCgpKQpAQCAtNjcyLDcg
KzY3Miw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZFByb3h5QXBwbGkKICAgICAg
ICAgLy8gV2FpdCBhIGJpdCBmb3IgdGhlIGluZm9ybWF0aW9uLCBidXQgZ2l2ZSB1cCBhZnRlciBh
IHNlY29uZC4KICAgICAgICAgbV9zaG91bGRTZW5kUGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uID0g
dHJ1ZTsKICAgICAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1F
X05PVywgMSAqIE5TRUNfUEVSX1NFQyksIGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFU
Q0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57Ci0gICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFBh
cmVudFByb2Nlc3NJbmZvcm1hdGlvbikKICAgICAgICAgICAgICAgICBzdG9wSW50ZXJuYWwoU3Rv
cFNvdXJjZTo6WFBDTWVzc2FnZSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb25faAogCiAjaW1wb3J0IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2lt
cG9ydCA8bXV0ZXg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KIApAQCAt
NjIsNyArNjIsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gV2UgaGFuZGxlIFhQQyBldmVudHMgb24g
dGhlIHF1ZXVlLCBidXQgYSBjbGllbnQgbWF5IGNhbGwgY2xvc2UoKSBvbiBhbnkgcXVldWUuCiAg
ICAgLy8gV2UgbWFrZSBzdXJlIHRoYXQgbV9jbGllbnQgaXMgdGhyZWFkIHNhZmUgYW5kIGltbWVk
aWF0ZWx5IGNsZWFyZWQgaW4gY2xvc2UoKS4KLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7CisgICAg
TG9jayBtX211dGV4OwogCiAgICAgeHBjX2Nvbm5lY3Rpb25fdCBtX2Nvbm5lY3Rpb247CiAgICAg
ZGlzcGF0Y2hfcXVldWVfdCBtX3F1ZXVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8bXV0ZXg+
CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBv
cnQgPHd0Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgpAQCAtNzksNyArODEsNyBAQCBSZW1vdGVJbnNwZWN0b3JYUEND
b25uZWN0aW9uOjp+UmVtb3RlSW5zCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlv
bjo6Y2xvc2UoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGNsb3Nl
RnJvbU1lc3NhZ2UoKTsKIH0KIApAQCAtODksNyArOTEsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmNsb3NlCiAgICAgbV9jbGllbnQgPSBudWxscHRyOwogCiAgICAgZGlz
cGF0Y2hfYXN5bmMobV9xdWV1ZSwgXnsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0
ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
bXV0ZXgpOwogICAgICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBvbmUgbGFzdCBYUENfRVJST1Jf
Q09OTkVDVElPTl9JTlZBTElEIGV2ZW50IG9uIHRoZSBxdWV1ZSBhbmQgZGVyZWYgdXMuCiAgICAg
ICAgIGNsb3NlT25RdWV1ZSgpOwogICAgIH0pOwpAQCAtMTE2LDcgKzExOCw3IEBAIE5TRGljdGlv
bmFyeSAqUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGkKIAogICAgIHhwY19vYmplY3RfdCB4cGNE
aWN0aW9uYXJ5ID0geHBjX2RpY3Rpb25hcnlfZ2V0X3ZhbHVlKG9iamVjdCwgUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvblNlcmlhbGl6ZWRNZXNzYWdlS2V5KTsKICAgICBpZiAoIXhwY0RpY3Rp
b25hcnkgfHwgeHBjX2dldF90eXBlKHhwY0RpY3Rpb25hcnkpICE9IFhQQ19UWVBFX0RJQ1RJT05B
UlkpIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBp
ZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+eHBjQ29ubmVjdGlvblVuaGFuZGxl
ZE1lc3NhZ2UodGhpcywgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTEzMSw3ICsx
MzMsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb246OmhhbmRsCiB7CiAgICAg
aWYgKHhwY19nZXRfdHlwZShvYmplY3QpID09IFhQQ19UWVBFX0VSUk9SKSB7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAg
ICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnhwY0Nvbm5lY3Rp
b25GYWlsZWQodGhpcyk7CiAKQEAgLTE1NCw3ICsxNTYsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
clhQQ0Nvbm5lY3Rpb246OmhhbmRsCiAKICAgICBOU1N0cmluZyAqbWVzc2FnZSA9IFtkYXRhRGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6UmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbk1lc3NhZ2VO
YW1lS2V5XTsKICAgICBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvID0gW2RhdGFEaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uVXNlckluZm9LZXldOwotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAg
bV9jbGllbnQtPnhwY0Nvbm5lY3Rpb25SZWNlaXZlZE1lc3NhZ2UodGhpcywgbWVzc2FnZSwgdXNl
ckluZm8pOwogfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODYyMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0
ZDo6bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25k
aXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
ODE0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFs
c28gYmVlZiB1cCBDb25kaXRpb24gYnkgZ2l2aW5nIGl0IGEgU3RhdGljQ29uZGl0aW9uIHZhcmlh
bnQuCisKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAgICAgIChXVEY6OkNvbmRpdGlv
bkJhc2U6Om5vdGlmeUFsbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JT
ZWNvbmRzSW1wbCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OmFic29sdXRlRnJvbVJl
bGF0aXZlKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uOjpDb25kaXRpb24pOgorICAgICAgICAo
V1RGOjpDb25kaXRpb246Om5vdGlmeUFsbCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkNvbmRp
dGlvbjo6d2FpdEZvclNlY29uZHNJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Q29uZGl0
aW9uOjphYnNvbHV0ZUZyb21SZWxhdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcDoKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmNw
cDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6ZHVtcFN0YXRzKToKKyAgICAgICAgKFdU
Rjo6aGFzaFRhYmxlU3RhdHNNdXRleCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJs
ZS5oOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6YWRkSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgICogd3RmL0xv
Y2suaDoKKyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0
aW9uUXVldWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFk
KToKKyAgICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmNhbmNl
bENhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjptYWluVGhyZWFkRnVuY3Rpb25RdWV1
ZU11dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAg
IChXVEY6OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAg
ICAgIChXVEY6OlN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6OkNoZWNrUG9pbnQpOgorICAgICAgICAo
V1RGOjpTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludDo6TGF5b3V0Q2hlY2tQb2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQ6On5MYXlvdXRDaGVja1BvaW50KToKKyAgICAgICAgKFdURjo6U3RhY2tT
dGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1N0YWNrU3RhdHMuaDoK
KyAgICAgICAgKFdURjo6U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlY2tQ
b2ludCk6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OnByb2JlKToKKyAgICAgICAgKFdURjo6
U3RhY2tTdGF0czo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAg
ICAgICogd3RmL21hYy9EZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5tbToKKyAgICAgICAg
KFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmxvY2tBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleCk6CisgICAgICAgIChXVEY6OnVubG9ja0F0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpY011dGV4KToKKyAgICAgICAgKFdURjo6YXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ1ZpZXcuY3Bw
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpVbmRlcmx5aW5n
U3RyaW5nKToKKyAgICAgICAgKFdURjo6dW5kZXJseWluZ1N0cmluZ3MpOgorICAgICAgICAoV1RG
OjpTdHJpbmdWaWV3OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6YWRv
cHRVbmRlcmx5aW5nU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2V0VW5kZXJs
eWluZ1N0cmluZyk6CisgICAgICAgIChXVEY6OnVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOiBEZWxl
dGVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHA6CisgICAgICAg
IChXVEY6OkNvbGxhdG9yOjpDb2xsYXRvcik6CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjp+Q29s
bGF0b3IpOgorICAgICAgICAoV1RGOjpjYWNoZWRDb2xsYXRvck11dGV4KTogRGVsZXRlZC4KKwog
MjAxNS0wOC0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgInBsYXRmb3JtIHRleHQgdHJhY2sgbWVudSIKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5o
CShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDI2IEBACiAKICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVk
ZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFya2lu
Z0xvdC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgQ29uZGl0aW9uIHsKLXB1YmxpYzoK
Ky8vIFRoaXMgaXMgYSBjb25kaXRpb24gdmFyaWFibGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgdXNl
IHdpdGggYW55IGxvY2stbGlrZSBvYmplY3QsIGluY2x1ZGluZworLy8gb3VyIG93biBXVEY6Okxv
Y2suIEl0IGZlYXR1cmVzIHN0YW5kYXJkIHdhaXQoKS9ub3RpZnlPbmUoKS9ub3RpZnlBbGwoKSBt
ZXRob2RzIGluIGFkZGl0aW9uIHRvCisvLyBhIHZhcmlldHkgb2Ygd2FpdC13aXRoLXRpbWVvdXQg
bWV0aG9kcy4gVGhpcyBpbmNsdWRlcyBtZXRob2RzIHRoYXQgdXNlIFdURidzIG93biBub3Rpb24g
b2YKKy8vIHRpbWUsIGxpa2Ugd2FsbC1jbG9jayB0aW1lIChpLmUuIGN1cnJlbnRUaW1lKCkpIGFu
ZCBtb25vdG9uaWMgdGltZSAoaS5lLgorLy8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
LiBUaGlzIGlzIGEgdmVyeSBlZmZpY2llbnQgY29uZGl0aW9uIHZhcmlhYmxlLiBJdCBvbmx5IHJl
cXVpcmVzCisvLyBvbmUgYnl0ZSBvZiBtZW1vcnkuIG5vdGlmeU9uZSgpIGFuZCBub3RpZnlBbGwo
KSByZXF1aXJlIGp1c3QgYSBsb2FkIGFuZCBicmFuY2ggZm9yIHRoZSBmYXN0CisvLyBjYXNlIHdo
ZXJlIG5vIHRocmVhZCBpcyB3YWl0aW5nLiBUaGlzIGNvbmRpdGlvbiB2YXJpYWJsZSwgd2hlbiB1
c2VkIHdpdGggV1RGOjpMb2NrLCBjYW4KKy8vIG91dHBlcmZvcm0gYSBzeXN0ZW0gY29uZGl0aW9u
IHZhcmlhYmxlIGFuZCBsb2NrIGJ5IHVwIHRvIDU4eC4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3
aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0
aWNhbGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgor
c3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIHR5cGVkZWYgUGFya2luZ0xvdDo6Q2xvY2sgQ2xv
Y2s7CiAgICAgCi0gICAgQ29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICAgIG1faGFzV2FpdGVycy5z
dG9yZShmYWxzZSk7Ci0gICAgfQotCiAgICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hp
bGUgcmVsZWFzaW5nIHRoZSBnaXZlbiBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0
IGJlZm9yZQogICAgIC8vIHBhcmtpbmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVy
bnMgdHJ1ZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBzb21lIGNhbGwgdG8KICAgICAvLyBub3RpZnlP
bmUoKSBvciBub3RpZnlBbGwoKS4gUmV0dXJucyBmYWxzZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBh
IHRpbWVvdXQuIE5vdGUgdGhhdCB0aGlzIGZvcm0KQEAgLTE3Miw3ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9oYXNXYWl0ZXJzKTsKICAgICB9CiAg
ICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIGJvb2wgd2FpdEZvclNlY29uZHNJbXBsKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgcmVs
YXRpdmVUaW1lb3V0U2Vjb25kcykKICAgICB7CkBAIC0yMjQsMTEgKzIyOSwyMyBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Cit9OyAgICAKKworY2xh
c3MgQ29uZGl0aW9uIDogcHVibGljIENvbmRpdGlvbkJhc2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbmRpdGlvbik7CitwdWJsaWM6CisgICAgQ29uZGl0aW9uKCkKKyAgICB7CisgICAg
ICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7CisgICAgfQogfTsKIAordHlwZWRlZiBDb25k
aXRpb25CYXNlIFN0YXRpY0NvbmRpdGlvbjsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6Q29uZGl0aW9uOwordXNpbmcgV1RGOjpTdGF0aWNDb25kaXRpb247CiAKICNlbmRpZiAv
LyBXVEZfQ29uZGl0aW9uX2gKIApJbmRleDogU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dU
Ri93dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTmV2ZXJEZXN0cm95ZWQuaCIKICNpbmNsdWRlICJP
U1JhbmRvbVNvdXJjZS5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NCw3ICs2NSw3IEBAIHByaXZhdGU6CiAKICAgICBB
UkM0U3RyZWFtIG1fc3RyZWFtOwogICAgIGludCBtX2NvdW50OwotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiBBUkM0U3RyZWFtOjpBUkM0U3RyZWFtKCkK
QEAgLTEzNiw3ICsxMzcsNyBAQCB1aW50MzJfdCBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpn
ZXRXCiAKIHVpbnQzMl90IEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnJhbmRvbU51bWJlcigp
CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2NvdW50IC09IDQ7
CiAgICAgc3RpcklmTmVlZGVkKCk7CkBAIC0xNDUsNyArMTQ2LDcgQEAgdWludDMyX3QgQVJDNFJh
bmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZAogCiB2b2lkIEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0
b3I6OnJhbmRvbVZhbHVlcyh2b2lkKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICB1bnNpZ25lZCBjaGFyKiByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIpOwogICAgIHN0aXJJZk5lZWRl
ZCgpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMCArMzYsMTEgQEAg
dW5zaWduZWQgSGFzaFRhYmxlU3RhdHM6Om51bUNvbGxpc2lvbnM7CiB1bnNpZ25lZCBIYXNoVGFi
bGVTdGF0czo6Y29sbGlzaW9uR3JhcGhbNDA5Nl07CiB1bnNpZ25lZCBIYXNoVGFibGVTdGF0czo6
bWF4Q29sbGlzaW9uczsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGhhc2hUYWJsZVN0YXRzTXV0ZXgo
KQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKLSAgICBzdGF0aWMgc3Rk
OjptdXRleCogbXV0ZXg7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAg
ICBtdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0gICAg
fSk7Ci0KLSAgICByZXR1cm4gKm11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgaGFzaFRhYmxl
U3RhdHNNdXRleDsKIAogdm9pZCBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayhoYXNoVGFibGVTdGF0c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2Nr
PiBsb2NrKGhhc2hUYWJsZVN0YXRzTXV0ZXgpOwogCiAgICAgaWYgKGNvdW50ID4gbWF4Q29sbGlz
aW9ucykKICAgICAgICAgbWF4Q29sbGlzaW9ucyA9IGNvdW50OwpAQCAtNTksNyArNTAsNyBAQCB2
b2lkIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvCiAKIHZvaWQgSGFzaFRhYmxl
U3RhdHM6OmR1bXBTdGF0cygpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2soaGFzaFRhYmxlU3RhdHNNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9j
az4gbG9jayhoYXNoVGFibGVTdGF0c011dGV4KTsKIAogICAgIGRhdGFMb2dGKCJcbldURjo6SGFz
aFRhYmxlIHN0YXRpc3RpY3NcblxuIik7CiAgICAgZGF0YUxvZ0YoIiV1IGFjY2Vzc2VzXG4iLCBu
dW1BY2Nlc3Nlcy5sb2FkKCkpOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExldmluIDxsZXZpbkBj
aHJvbWl1bS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZhbHVlQ2hlY2suaD4KQEAgLTQ4Niw3ICs0ODcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1f
bXV0ZXguCiAgICAgICAgIG11dGFibGUgY29uc3RfaXRlcmF0b3IqIG1faXRlcmF0b3JzOwogICAg
ICAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVt
bW92ZSdkIG9yIG1lbWNweSdlZC4KLSAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8c3Rk
OjptdXRleD4gbV9tdXRleDsKKyAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4g
bV9tdXRleDsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCkBA
IC01NDIsNyArNTQzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV9kZWxldGVkQ291
bnQoMCkKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAgICAgICwgbV9pdGVyYXRv
cnMoMCkKLSAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkK
KyAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQogICAgICAgICAsIG1fc3RhdHMoc3RkOjpt
YWtlX3VuaXF1ZTxTdGF0cz4oKSkKQEAgLTEyMTgsNyArMTIxOSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKG51bGxwdHIpCi0gICAgICAgICwgbV9tdXRleChz
dGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkpCisgICAgICAgICwgbV9tdXRleChzdGQ6Om1h
a2VfdW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUKICAgICAgICAgLCBtX3N0YXRzKHN0ZDo6bWFrZV91bmlxdWU8U3RhdHM+KCpvdGhlci5t
X3N0YXRzKSkKQEAgLTEyNzYsNyArMTI3Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGlu
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46Okhhc2hUYWJsZShIYXNoVGFibGUmJiBvdGhlcikKICNpZiBDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAgICAgICAgIDogbV9pdGVyYXRvcnMobnVsbHB0cikKLSAgICAgICAg
LCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKSkKKyAgICAgICAgLCBtX211
dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKICAgICAgICAgb3Ro
ZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMTM1Niw3ICsxMzU3LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9y
cygpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqbV9t
dXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKCptX211dGV4KTsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3Iq
IHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBwLT5t
X25leHQ7CkBAIC0xMzc4LDcgKzEzNzksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYg
KCF0YWJsZSkgewogICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqdGFibGUtPm1f
bXV0ZXgpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKnRhYmxlLT5t
X211dGV4KTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwog
ICAgICAgICAgICAgaXQtPm1fbmV4dCA9IHRhYmxlLT5tX2l0ZXJhdG9yczsKICAgICAgICAgICAg
IHRhYmxlLT5tX2l0ZXJhdG9ycyA9IGl0OwpAQCAtMTM5Nyw3ICsxMzk4LDcgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5tX25leHQpOwogICAgICAgICAgICAgQVNT
RVJUKCFpdC0+bV9wcmV2aW91cyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqaXQtPm1fdGFibGUtPm1fbXV0ZXgpOworICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKml0LT5tX3RhYmxlLT5tX211dGV4
KTsKICAgICAgICAgICAgIGlmIChpdC0+bV9uZXh0KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0LT5tX25leHQtPm1fcHJldmlvdXMgPT0gaXQpOwogICAgICAgICAgICAgICAgIGl0LT5tX25l
eHQtPm1fcHJldmlvdXMgPSBpdC0+bV9wcmV2aW91czsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODYx
MikKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDkgKzEy
NSw5IEBAIHR5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAotdXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogdXNpbmcgV1RGOjpMb2NrOwogdXNp
bmcgV1RGOjpMb2NrSG9sZGVyOwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwogCiAjZW5kaWYgLy8g
V1RGX0xvY2tfaAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJU
aHJlYWRpbmcuaCIKICNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogCkBAIC02OSwxMiArNzAsNyBAQCBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8v
IFRoaXMgZ2xvCiBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsK
ICNlbmRpZgogCi1zdGF0aWMgc3RkOjptdXRleCYgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRl
eCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAg
IAotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIG1haW5UaHJlYWRGdW5j
dGlvblF1ZXVlTXV0ZXg7CiAKIHN0YXRpYyBGdW5jdGlvblF1ZXVlJiBmdW5jdGlvblF1ZXVlKCkK
IHsKQEAgLTk0LDcgKzkwLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAKICAgICBt
YWluVGhyZWFkSWRlbnRpZmllciA9IGN1cnJlbnRUaHJlYWQoKTsKIAotICAgIG1haW5UaHJlYWRG
dW5jdGlvblF1ZXVlTXV0ZXgoKTsKICAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCk7
CiAgICAgaW5pdGlhbGl6ZUdDVGhyZWFkcygpOwogfQpAQCAtMTA1LDcgKzEwMCw2IEBAIHN0YXRp
YyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplTWFpblRocmUKIAogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRPbmNlKCkKIHsKLSAgICBtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4
KCk7CiAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpOwogfQogCkBAIC0xMTcsNyAr
MTExLDYgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiAjaWYgIVVTRShXRUJfVEhSRUFE
KQogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkT25j
ZSgpCiB7Ci0gICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOwogICAgIGluaXRpYWxp
emVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRmb3JtKCk7CiB9CiAKQEAgLTE1Niw3
ICsxNDksNyBAQCB2b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKQogICAgIEZ1
bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY0xvY2s+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCk7CiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0aW9uUXVldWUoKS5zaXplKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBpbnZvY2F0aW9uID0gZnVuY3Rpb25RdWV1ZSgpLnRha2VGaXJzdCgpOwpAQCAt
MTgwLDcgKzE3Myw3IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24K
ICAgICBBU1NFUlQoZnVuY3Rpb24pOwogICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsK
ICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1haW5UaHJl
YWRGdW5jdGlvblF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgpOwogICAgICAgICBuZWVkVG9T
Y2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rpb25R
dWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAg
ICAgfQpAQCAtMTkyLDcgKzE4NSw3IEBAIHZvaWQgY2FuY2VsQ2FsbE9uTWFpblRocmVhZChNYWlu
VGhyZWFkRnUKIHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwogCi0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpKTsKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11
dGV4KTsKIAogICAgIEZ1bmN0aW9uV2l0aENvbnRleHRGaW5kZXIgcHJlZChGdW5jdGlvbldpdGhD
b250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0YWNr
U3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIC8vIENoZWNrUG9p
bnQgbWFuYWdlbWVudDoKLXN0ZDo6bXV0ZXgqIFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXggPSAw
OworU3RhdGljTG9jayBTdGFja1N0YXRzOjpzX3NoYXJlZE11dGV4OwogU3RhY2tTdGF0czo6Q2hl
Y2tQb2ludCogU3RhY2tTdGF0czo6c190b3BDaGVja1BvaW50ID0gMDsKIFN0YWNrU3RhdHM6Okxh
eW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfZmlyc3RMYXlvdXRDaGVja1BvaW50ID0gMDsK
IFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQqIFN0YWNrU3RhdHM6OnNfdG9wTGF5b3V0Q2hl
Y2tQb2ludCA9IDA7CkBAIC01NywxMyArNTcsNiBAQCBpbnQgU3RhY2tTdGF0czo6c19tYXhUb3Rh
bExheW91dENoZWNrUG9pCiBpbnQgU3RhY2tTdGF0czo6c19tYXhMYXlvdXRSZWVudHJ5RGVwdGgg
PSAwOwogCiAKLS8vIEluaXRpYWxpemVzIGxvY2tzIGFuZCB0aGUgbG9nLiBTaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZS4KLXZvaWQgU3RhY2tTdGF0czo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgc19z
aGFyZWRNdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7Ci0g
ICAgZGF0YUxvZ0YoIiA9PT0gTE9HIG5ldyBzdGFjayBzdGF0cyA9PT09PT09PVxuIik7Ci19Ci0K
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7CiAgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CkBAIC03Niw3
ICs2OSw3IEBAIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGEKIAogU3Rh
Y2tTdGF0czo6Q2hlY2tQb2ludDo6Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwog
ICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEq
Pigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9
IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sg
PSB0aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMTM0LDcgKzEyNyw3IEBAIFN0YWNrU3RhdHM6OkNo
ZWNrUG9pbnQ6OkNoZWNrUG9pbnQoKQogCiBTdGFja1N0YXRzOjpDaGVja1BvaW50Ojp+Q2hlY2tQ
b2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3Rh
dHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAgIFdURlRocmVhZERhdGEqIHRocmVhZERh
dGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKICAgICBT
dGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsK
IApAQCAtMTY1LDcgKzE1OCw3IEBAIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQ6On5DaGVja1BvaW50
KCkKIAogdm9pZCBTdGFja1N0YXRzOjpwcm9iZSgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOwogICAg
IFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERhdGEqPigm
d3RmVGhyZWFkRGF0YSgpKTsKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRo
cmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKICAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0
aHJlYWREYXRhLT5zdGFjaygpOwpAQCAtMjI2LDcgKzIxOSw3IEBAIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQ6OkxheW91dENoZWMKICAgICAvLyBwcm9iZSBmaXJzdCwgd2UgY2FuIGF2b2lk
IHJlLWVudGVyaW5nIHRoZSBsb2NrLgogICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jaygqU3RhY2tTdGF0czo6c19zaGFyZWRNdXRl
eCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soU3RhY2tTdGF0czo6c19z
aGFyZWRNdXRleCk7CiAgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNvbnN0X2Nhc3Q8
V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOwogICAgIFN0YWNrU3RhdHM6OlBlclRo
cmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOwogICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CkBAIC0yOTUsNyArMjg4LDcgQEAg
U3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludDo6TGF5b3V0Q2hlYwogCiBTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50Ojp+TGF5b3V0Q2hlY2tQb2ludCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKlN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgpOworICAgIHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKFN0YWNrU3RhdHM6OnNfc2hhcmVkTXV0ZXgp
OwogCiAgICAgLy8gUG9wIHRvIHRoZSBwcmV2aW91cyBsYXlvdXQgY2hlY2twb2ludDoKICAgICBT
dGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSBtX3ByZXY7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TdGFja1N0YXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RhY2tT
dGF0cy5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkV4cG9ydE1hY3Jv
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIAogLy8gRGVm
aW5lIHRoaXMgZmxhZyB0byBlbmFibGUgU3RhY2sgc3RhdHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0
dXJlIGlzIHVzZWZ1bApAQCAtNjcsNyArNjgsNiBAQCBwdWJsaWM6CiAgICAgICAgIExheW91dENo
ZWNrUG9pbnQoKSB7IH0KICAgICB9OwogCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsg
fQogICAgIHN0YXRpYyB2b2lkIHByb2JlKCkgeyB9CiB9OwogCkBAIC0xMDksOSArMTA5LDYgQEAg
cHVibGljOgogICAgICAgICBpbnQgbV9kZXB0aDsKICAgICB9OwogCi0gICAgLy8gSW5pdGlhbGl6
ZXMgbG9ja3MgYW5kIHRoZSBsb2cgZmlsZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0g
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotCiAgICAgLy8gVXNlZCBmb3IgcHJvYmluZyB0
aGUgc3RhY2sgYXQgcGxhY2VzIHdoZXJlIHdlIHN1c3BlY3QgdG8gYmUgaGlnaAogICAgIC8vIHBv
aW50cyBvZiBzdGFjayB1c2FnZSBidXQgYXJlIE5PVCBjaGVjayBwb2ludHMgd2hlcmUgc3RhY2sg
cmVjdXJzaW9uCiAgICAgLy8gaXMgY2hlY2tlZC4KQEAgLTEyNCw3ICsxMjEsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50OgotICAgIHN0YXRpYyBz
dGQ6Om11dGV4KiBzX3NoYXJlZE11dGV4OworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHNfc2hhcmVk
TXV0ZXg7CiAgICAgc3RhdGljIENoZWNrUG9pbnQqIHNfdG9wQ2hlY2tQb2ludDsKICAgICBzdGF0
aWMgTGF5b3V0Q2hlY2tQb2ludCogc19maXJzdExheW91dENoZWNrUG9pbnQ7CiAgICAgc3RhdGlj
IExheW91dENoZWNrUG9pbnQqIHNfdG9wTGF5b3V0Q2hlY2tQb2ludDsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBA
QAogI2luY2x1ZGUgImR0b2EvY2FjaGVkLXBvd2Vycy5oIgogI2luY2x1ZGUgIkhhc2hNYXAuaCIK
ICNpbmNsdWRlICJSYW5kb21OdW1iZXJTZWVkLmgiCi0jaW5jbHVkZSAiU3RhY2tTdGF0cy5oIgog
I2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oIgogI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCIKQEAgLTEy
NCw3ICsxMjMsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHRocmVhZE1hcE11
dGV4KCk7CiAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwogICAgIFRocmVh
ZElkZW50aWZpZXJEYXRhOjppbml0aWFsaXplT25jZSgpOwotICAgIFN0YWNrU3RhdHM6OmluaXRp
YWxpemUoKTsKICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvbWFjL0RlcHJlY2F0ZWRTeW1ib2xzVXNl
ZEJ5U2FmYXJpLm1tCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9tYWMvRGVw
cmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJOZXZlckRlc3Ryb3llZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJh
cy5oIgogI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIC8vIFRoaXMg
ZmlsZSBjb250YWlucyBkZXByZWNhdGVkIHN5bWJvbHMgdGhhdCB0aGUgbGFzdCByZWxlYXNlZCB2
ZXJzaW9uIG9mIFNhZmFyaSB1c2VzLgogLy8gT25jZSBTYWZhcmkgc3RvcHMgdXNpbmcgdGhlbSwg
d2Ugc2hvdWxkIHJlbW92ZSB0aGVtLgpAQCAtNDUsMjUgKzQ2LDE2IEBAIHZvaWQgY2FsbE9uTWFp
blRocmVhZChjb25zdCBGdW5jdGlvbjx2b2kKICAgICBjYWxsT25NYWluVGhyZWFkKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4oZnVuY3Rpb24pKTsKIH0KIAotc3RhdGljIHN0ZDo6bXV0ZXgmIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBt
dXRleDsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117Ci0gICAgICAgIG11dGV4LmNv
bnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRp
Y0xvY2sgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXg7CiAKIHZvaWQgbG9ja0F0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKIHsKLSAgICBhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCgpLmxvY2soKTsKKyAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNN
dXRleC5sb2NrKCk7CiB9CiAKIHZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQogewotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkudW5sb2Nr
KCk7CisgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgudW5sb2NrKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQkkKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKQEAgLTExNywxMSArMTE4LDcgQEAg
U3RyaW5nVmlldzo6VW5kZXJseWluZ1N0cmluZzo6VW5kZXJseWluZwogewogfQogCi1zdGF0aWMg
c3RkOjptdXRleCYgdW5kZXJseWluZ1N0cmluZ3NNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRp
YyBTdGF0aWNMb2NrIHVuZGVybHlpbmdTdHJpbmdzTXV0ZXg7CiAKIHN0YXRpYyBIYXNoTWFwPGNv
bnN0IFN0cmluZ0ltcGwqLCBTdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nKj4mIHVuZGVybHlp
bmdTdHJpbmdzKCkKIHsKQEAgLTEzMyw3ICsxMzAsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OmludmFs
aWRhdGUoY29uc3QgU3RyaW5nCiB7CiAgICAgVW5kZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0
cmluZzsKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHVu
ZGVybHlpbmdTdHJpbmdzTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNM
b2NrPiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOwogICAgICAgICB1bmRlcmx5aW5nU3Ry
aW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0JlRGVzdHJveWVkKTsKICAg
ICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUy
LDcgKzE0OSw3IEBAIHZvaWQgU3RyaW5nVmlldzo6YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFUKICAg
ICBpZiAobV91bmRlcmx5aW5nU3RyaW5nKSB7CiAgICAgICAgIGlmICghLS1tX3VuZGVybHlpbmdT
dHJpbmctPnJlZkNvdW50KSB7CiAgICAgICAgICAgICBpZiAobV91bmRlcmx5aW5nU3RyaW5nLT5p
c1ZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2sodW5kZXJseWluZ1N0cmluZ3NNdXRleCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAg
ICAgICAgICB1bmRlcmx5aW5nU3RyaW5ncygpLnJlbW92ZSgmbV91bmRlcmx5aW5nU3RyaW5nLT5z
dHJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVsZXRlIG1fdW5kZXJseWluZ1N0
cmluZzsKQEAgLTE2Nyw3ICsxNjQsNyBAQCB2b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdT
dHJpbmcoY29uCiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSBu
dWxscHRyOwogICAgIGVsc2UgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4g
bG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSB1bmRlcmx5aW5nU3RyaW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOwogICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbmV3IFVuZGVybHlpbmdTdHJpbmcoKnN0cmluZyk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHVuaWNvZGUvdWNv
bC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KQEAgLTUwLDE3ICs1MSw3IEBAIHN0YXRpYyBVQ29sbGF0b3IqIGNhY2hlZENv
bGxhdG9yOwogc3RhdGljIGNoYXIqIGNhY2hlZENvbGxhdG9yTG9jYWxlOwogc3RhdGljIGJvb2wg
Y2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3Q7CiAKLXN0YXRpYyBzdGQ6Om11
dGV4JiBjYWNoZWRDb2xsYXRvck11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7Ci0KLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11
dGV4OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKLSAgICAgICAgbXV0ZXguY29u
c3RydWN0KCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGlj
TG9jayBjYWNoZWRDb2xsYXRvck11dGV4OwogCiAjaWYgIShPUyhEQVJXSU4pICYmIFVTRShDRikp
CiAKQEAgLTExNyw3ICsxMDgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0b3IoY29uc3QgY2hhciogbG9j
YWxlLCBiCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAKICAgICB7Ci0g
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0
ZXgoKSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGNhY2hlZENv
bGxhdG9yTXV0ZXgpOwogICAgICAgICBpZiAoY2FjaGVkQ29sbGF0b3IgJiYgbG9jYWxlc01hdGNo
KGNhY2hlZENvbGxhdG9yTG9jYWxlLCBsb2NhbGUpICYmIGNhY2hlZENvbGxhdG9yU2hvdWxkU29y
dExvd2VyY2FzZUZpcnN0ID09IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCkgewogICAgICAgICAg
ICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9yOwogICAgICAgICAgICAgbV9sb2NhbGUgPSBj
YWNoZWRDb2xsYXRvckxvY2FsZTsKQEAgLTE0Nyw3ICsxMzgsNyBAQCBDb2xsYXRvcjo6Q29sbGF0
b3IoY29uc3QgY2hhciogbG9jYWxlLCBiCiAKIENvbGxhdG9yOjp+Q29sbGF0b3IoKQogewotICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0ZXgoKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRl
eCk7CiAgICAgaWYgKGNhY2hlZENvbGxhdG9yKSB7CiAgICAgICAgIHVjb2xfY2xvc2UoY2FjaGVk
Q29sbGF0b3IpOwogICAgICAgICBmYXN0RnJlZShjYWNoZWRDb2xsYXRvckxvY2FsZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODg2MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDIgQEAKKzIwMTUtMDgtMTggIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHN0ZDo6
bXV0ZXgvc3RkOjpjb25kaXRpb25fdmFyaWFibGUgd2l0aCBXVEY6OkxvY2svV1RGOjpDb25kaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
QnVmZmVyU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnNldEJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxpbmU6Omlu
c2VydEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6Y2FuY2Vs
U2NoZWR1bGVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6
dmFsdWVGb3JDb250ZXh0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtVGltZWxp
bmU6OnZhbHVlc0ZvclRpbWVSYW5nZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdmVyTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpD
b252b2x2ZXJOb2RlOjpzZXRCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09z
Y2lsbGF0b3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpwcm9j
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpzZXRQZXJpb2RpY1dhdmUp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFu
bmVyTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpQYW5uZXJOb2RlOjpzZXRQYW5u
aW5nTW9kZWwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRDdXJ2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb1ZlcnNpb25NYXApOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Z2V0Q2FjaGVkVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpndWlkTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlTWFuYWdlcjo6ZXhpc3RpbmdEYXRhYmFzZUNvbnRleHRGb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3REYXRhYmFzZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpkaWREZXN0cnVjdERhdGFi
YXNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmFkZFByb3Bv
c2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpyZW1vdmVQ
cm9wb3NlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6ZnVs
bFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6OmRl
dGFpbHNGb3JOYW1lQW5kT3JpZ2luKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5oOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW06
CisgICAgICAgIChnZXRET01XcmFwcGVyKToKKyAgICAgICAgKGFkZERPTVdyYXBwZXIpOgorICAg
ICAgICAocmVtb3ZlRE9NV3JhcHBlcik6CisgICAgICAgICh3cmFwcGVyQ2FjaGVMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Q3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OmdldElk
ZW50aWZpZXJGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpuYW1lRm9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpyZWdpc3RlckFsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3RyeU11
dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvV29ya2VyRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJEZWJ1Z2dlckFnZW50OjpXb3JrZXJEZWJ1Z2dl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckRlYnVnZ2VyQWdlbnQ6Omlu
dGVycnVwdEFuZERpc3BhdGNoSW5zcGVjdG9yQ29tbWFuZHMpOgorICAgICAgICAqIHBhZ2UvV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6c2V0VGVzdENhbGxiYWNrQW5kU3RhcnROb3RpZmljYXRpb25UaW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNG
b3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1v
dmVUZXN0RGVmZXJyYWxGb3JSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjp0cmlnZ2VyVGVzdFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBhZ2UvV2hlZWxF
dmVudFRlc3RUcmlnZ2VyLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJv
bVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RocmVhZE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3Ap
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXZlcmJDb252b2x2ZXI6On5SZXZlcmJDb252b2x2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpiYWNrZ3JvdW5kVGhyZWFkRW50cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV2ZXJiQ29udm9sdmVyOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJldmVyYkNvbnZvbHZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1JldmVy
YkNvbnZvbHZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1
bi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6cHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKCtbV2ViTGFuZ3VhZ2VDaGFuZ2VP
YnNlcnZlciBsYW5ndWFnZVByZWZlcmVuY2VzRGlkQ2hhbmdlOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6cGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZWZlcnJlZExhbmd1YWdlc011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbXB0eVBlcmZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6cnVuTG9hZGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRlclJ1bkxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6bG9hZGVyUnVuTG9vcE11dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJp
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJl
YW1IYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsT25NYWluVGhyZWFkQW5k
V2FpdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVD
dXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1T
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjppbmNyZW1lbnRUcmFuc2FjdGlvbkluUHJv
Z3Jlc3NDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OmRl
Y3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcGFyZUFuZFN3YXBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlYyk6CisgICAgICAgIChXZWJDb3JlOjphdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmR1bXBUZXh0RW5j
b2RpbmdOYW1lTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kaW5nUmVnaXN0cnlNdXRleCk6
IERlbGV0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d29ya2VyVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29y
a2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6fldvcmtlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRTZXRNdXRleCk6
IERlbGV0ZWQuCisKIDIwMTUtMDgtMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSBpbnN0ZWFkIG9mIGNzc1Zh
bHVlUG9vbCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnByb2Nlc3Moc2l6ZQogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3Qg
YmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0ZWFkLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZhaWxlZC4gV2UgbXVzdCBiZSBp
biB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIGJ1ZmZlcnMgYW5kIHdlcmUgYWxyZWFkeSBvdXRwdXR0
aW5nIHNpbGVuY2UgYW55d2F5LgogICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKQEAgLTQxNiw3
ICs0MTYsNyBAQCBib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKEF1CiAgICAg
QXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoKmNvbnRleHQoKSk7CiAgICAg
CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICAKICAgICBpZiAoYnVmZmVyKSB7
CiAgICAgICAgIC8vIERvIGFueSBuZWNlc3NzYXJ5IHJlLWNvbmZpZ3VyYXRpb24gdG8gdGhlIGJ1
ZmZlcidzIG51bWJlciBvZiBjaGFubmVscy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTE1OSw3ICsxNTks
NyBAQCBwcml2YXRlOgogICAgIFBhbm5lck5vZGUqIG1fcGFubmVyTm9kZTsKIAogICAgIC8vIFRo
aXMgc3luY2hyb25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVz
ZSBkeW5hbWljIGNoYW5uZWwgY291bnQgY2hhbmdlcy4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXgg
bV9wcm9jZXNzTXV0ZXg7CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAkocmV2aXNpb24gMTg4NjEy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVs
aW5lOjppbnNlcnRFdmVudChjb24KICAgICBpZiAoIWlzVmFsaWQpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9ldmVudHNN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9ldmVudHNNdXRleCk7CiAg
ICAgCiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZmxvYXQgaW5zZXJ0VGltZSA9IGV2ZW50LnRp
bWUoKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0
RXZlbnQoY29uCiAKIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1
ZXMoZmxvYXQgc3RhcnRUaW1lKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKG1fZXZlbnRzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fZXZl
bnRzTXV0ZXgpOwogCiAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHMgc3RhcnRpbmcgYXQgc3RhcnRU
aW1lLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkg
ewpAQCAtMTE4LDcgKzExOCw3IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JD
b250ZXgKICAgICBBU1NFUlQoY29udGV4dCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6
dHJ5X3RvX2xvY2spOwogICAgICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkgfHwgIWNvbnRleHQg
fHwgIW1fZXZlbnRzLnNpemUoKSB8fCBjb250ZXh0LT5jdXJyZW50VGltZSgpIDwgbV9ldmVudHNb
MF0udGltZSgpKSB7CiAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBBdWRpb1BhcmFt
VGltZWxpbmU6OnZhbHVlRm9yQ29udGV4CiBmbG9hdCBBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVl
c0ZvclRpbWVSYW5nZShkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgZmxvYXQgZGVm
YXVsdFZhbHVlLCBmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcywgZG91Ymxl
IHNhbXBsZVJhdGUsIGRvdWJsZSBjb250cm9sUmF0ZSkKIHsKICAgICAvLyBXZSBjYW4ndCBjb250
ZW5kIHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2sp
OworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2V2ZW50c011dGV4LCBzdGQ6OnRy
eV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsKICAgICAgICAgaWYgKHZh
bHVlcykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFs
dWVzOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKICNkZWZpbmUgQXVkaW9QYXJhbVRpbWVsaW5lX2gKIAogI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8UGFyYW1F
dmVudD4gbV9ldmVudHM7CiAKLSAgICBzdGQ6Om11dGV4IG1fZXZlbnRzTXV0ZXg7CisgICAgTG9j
ayBtX2V2ZW50c011dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZv
bHZlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQ29udm9s
dmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKICAgICBBU1NFUlQob3V0cHV0QnVzKTsKIAog
ICAgIC8vIFN5bmNocm9uaXplIHdpdGggcG9zc2libGUgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBp
bXB1bHNlIHJlc3BvbnNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayht
X3Byb2Nlc3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxM
b2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxv
Y2sub3duc19sb2NrKCkpIHsKICAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlfbG9jaygpIGZh
aWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxzZSBy
ZXNwb25zZS4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWUKIAogdm9pZCBDb252b2x2ZXJO
b2RlOjpyZXNldCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9w
cm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011
dGV4KTsKICAgICBpZiAobV9yZXZlcmIpCiAgICAgICAgIG1fcmV2ZXJiLT5yZXNldCgpOwogfQpA
QCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgQ29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVm
ZmUKIAogICAgIHsKICAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOwogICAgICAg
ICBtX3JldmVyYiA9IFdURjo6bW92ZShyZXZlcmIpOwogICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZl
cjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CiAKICAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBk
eW5hbWljIGNoYW5nZXMgdG8gdGhlIGNvbnZvbHV0aW9uIGltcHVsc2UgcmVzcG9uc2Ugd2l0aCBw
cm9jZXNzKCkuCi0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fcHJvY2Vzc011dGV4OworICAgIG11
dGFibGUgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxz
ZSByZXNwb25zZSBvciBub3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgogICAgIGJvb2wgbV9ub3Jt
YWxpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzCiAgICAgLy8gVXNlIGEgc3RkOjp0cnlf
dG9fbG9jayB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFk
LgogICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1MTWVk
aWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgogICAgIC8vIHJlY29uZmlndXJpbmcg
aXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNlLgot
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3duc19sb2NrKCkpIHsK
ICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAgICAgICAgIG91dHB1
dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIk11bHRpQ2hhbm5lbFJlc2FtcGxlci5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1Np
bGVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgUmVmUHRyPEhU
TUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwotICAgIHN0ZDo6bXV0ZXggbV9wcm9jZXNz
TXV0ZXg7CisgICAgTG9jayBtX3Byb2Nlc3NNdXRleDsKIAogICAgIHVuc2lnbmVkIG1fc291cmNl
TnVtYmVyT2ZDaGFubmVsczsKICAgICBkb3VibGUgbV9zb3VyY2VTYW1wbGVSYXRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGU6OnNldEZvcm0KICAgICAgICAgfQogCiAgICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGgg
cHJvY2VzcygpLgotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3By
b2Nlc3NNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vz
c011dGV4KTsKIAogICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNo
YW5uZWxzOwogCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBNZWRpYVN0cmVhbUF1ZGlvU291cmNl
Tm9kZTo6cHJvY2VzcwogICAgIC8vIFVzZSBzdGQ6OnRyeV90b19sb2NrIHRvIGF2b2lkIGNvbnRl
bnRpb24gaW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCiAgICAgLy8gSWYgd2UgZmFpbCB0
byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gdGhlIE1lZGlhU3RyZWFtIG11c3QgYmUgaW4gdGhlIG1p
ZGRsZSBvZgogICAgIC8vIGEgZm9ybWF0IGNoYW5nZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4g
dGhpcyBjYXNlLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Byb2Nl
c3NNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKICAgICBpZiAoIWxvY2sub3du
c19sb2NrKCkpIHsKICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCiAg
ICAgICAgIG91dHB1dEJ1cy0+emVybygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaAko
cmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRp
YVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkF1ZGlvU291cmNl
UHJvdmlkZXJDbGllbnQuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgPG11
dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiBtX2F1ZGlvVHJhY2s7CiAgICAgQXVkaW9Tb3VyY2VQcm92
aWRlciogbV9hdWRpb1NvdXJjZVByb3ZpZGVyOwogCi0gICAgc3RkOjptdXRleCBtX3Byb2Nlc3NN
dXRleDsKKyAgICBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgdW5zaWduZWQgbV9zb3VyY2VO
dW1iZXJPZkNoYW5uZWxzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT3NjaWxsYXRvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT3NjaWxsYXRvck5vZGUuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnByb2Nlc3Moc2l6
ZV90IGZyYW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4n
dCBibG9jayBvbiB0aGlzIGxvY2ssIHNvIHdlIHVzZSBzdGQ6OnRyeV90b19sb2NrIGluc3RlYWQu
Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fcHJvY2Vzc011dGV4LCBz
dGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9wcm9j
ZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xvY2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkg
ewogICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeV9sb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJl
IGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgd2F2ZS10YWJsZXMuCiAgICAgICAgIG91dHB1dEJ1
cy0+emVybygpOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgT3NjaWxsYXRvck5vZGU6OnNldFBl
cmlvZGljV2F2ZShQZXIKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gVGhp
cyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fcHJvY2Vzc011dGV4KTsKICAgICBtX3BlcmlvZGljV2F2ZSA9IHBlcmlvZGljV2F2ZTsK
ICAgICBtX3R5cGUgPSBDVVNUT007CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1
ZGlvUGFyYW0uaCIKICNpbmNsdWRlICJBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCIKLSNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC05Niw3ICs5Niw3IEBAIHByaXZh
dGU6CiAgICAgZG91YmxlIG1fdmlydHVhbFJlYWRJbmRleDsKIAogICAgIC8vIFRoaXMgc3luY2hy
b25pemVzIHByb2Nlc3MoKS4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9wcm9jZXNzTXV0ZXg7
CisgICAgbXV0YWJsZSBMb2NrIG1fcHJvY2Vzc011dGV4OwogCiAgICAgLy8gU3RvcmVzIHNhbXBs
ZS1hY2N1cmF0ZSB2YWx1ZXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gZnJlcXVlbmN5IGFuZCBk
ZXR1bmUuCiAgICAgQXVkaW9GbG9hdEFycmF5IG1fcGhhc2VJbmNyZW1lbnRzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBQYW5uZXJOb2RlOjpw
cm9jZXNzKHNpemVfdCBmcmFtZXNUbwogICAgIH0KIAogICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQg
Y2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSB1c2Ugc3RkOjp0cnlfdG9fbG9jayBpbnN0
ZWFkLgotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3Bhbm5lck11dGV4
LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9w
YW5uZXJNdXRleCwgc3RkOjp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygp
KSB7CiAgICAgICAgIC8vIFRvbyBiYWQgLSBUaGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3Qg
YmUgaW4gdGhlIG1pZGRsZSBvZiBjaGFuZ2luZyB0aGUgcGFubmVyLgogICAgICAgICBkZXN0aW5h
dGlvbi0+emVybygpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgUGFubmVyTm9kZTo6c2V0UGFu
bmluZ01vZGVsKHVuc2lnbmUKICAgICBjYXNlIEhSVEY6CiAgICAgICAgIGlmICghbV9wYW5uZXIu
Z2V0KCkgfHwgbW9kZWwgIT0gbV9wYW5uaW5nTW9kZWwpIHsKICAgICAgICAgICAgIC8vIFRoaXMg
c3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2sobV9wYW5uZXJNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX3Bhbm5lck11dGV4KTsKIAogICAgICAgICAgICAgbV9wYW5uZXIg
PSBQYW5uZXI6OmNyZWF0ZShtb2RlbCwgc2FtcGxlUmF0ZSgpLCBtX2hydGZEYXRhYmFzZUxvYWRl
ci5nZXQoKSk7CiAgICAgICAgICAgICBtX3Bhbm5pbmdNb2RlbCA9IG1vZGVsOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmgJKHJldmlzaW9uIDE4
ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiUGFubmVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291
bnQ7CiAKICAgICAvLyBTeW5jaHJvbml6ZSBwcm9jZXNzKCkgYW5kIHNldFBhbm5pbmdNb2RlbCgp
IHdoaWNoIGNhbiBjaGFuZ2UgdGhlIHBhbm5lci4KLSAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbV9w
YW5uZXJNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wYW5uZXJNdXRleDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9E
U1BLZXJuZWw+IFdhdmVTaGFwCiB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZs
b2F0MzJBcnJheSogY3VydmUpCiB7CiAgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9j
ZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcHJvY2Vzc011dGV4KTsKIAog
ICAgIG1fY3VydmUgPSBjdXJ2ZTsKIH0KQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRDdXJ2ZShGbG9hdAogdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRP
dmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiB7CiAgICAgLy8gVGhpcyBzeW5j
aHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+
IGxvY2sobV9wcm9jZXNzTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1f
cHJvY2Vzc011dGV4KTsKIAogICAgIG1fb3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGU7CiAKQEAgLTg1
LDcgKzg1LDcgQEAgdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpwcm9jZXNzKGNvbnN0IAogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJsb2NrIG9uIHRo
aXMgbG9jaywgc28gd2UgdXNlIHN0ZDo6dHJ5X3RvX2xvY2sgaW5zdGVhZC4KLSAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9wcm9jZXNzTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3Byb2Nlc3NNdXRleCwgc3Rk
Ojp0cnlfdG9fbG9jayk7CiAgICAgaWYgKCFsb2NrLm93bnNfbG9jaygpKSB7CiAgICAgICAgIC8v
IFRvbyBiYWQgLSB0aGUgdHJ5X2xvY2soKSBmYWlsZWQuIFdlIG11c3QgYmUgaW4gdGhlIG1pZGRs
ZSBvZiBhIHNldEN1cnZlKCkgY2FsbC4KICAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBl
clByb2Nlc3Nvci5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCAr
MjksOCBAQAogI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgogI2luY2x1
ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY2LDcg
QEAgcHJpdmF0ZToKICAgICBPdmVyU2FtcGxlVHlwZSBtX292ZXJzYW1wbGU7CiAKICAgICAvLyBU
aGlzIHN5bmNocm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRDdXJ2ZSgpLgotICAgIG11dGFibGUg
c3RkOjptdXRleCBtX3Byb2Nlc3NNdXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV9wcm9jZXNzTXV0
ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NywxNyArMTU3LDcgQEAgc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYQogfQogCiAvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0
aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCi1zdGF0aWMgc3RkOjptdXRl
eCYgZ3VpZE11dGV4KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLQotICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgZ3VpZE11
dGV4OwogCiB0eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VHdWlkLCBTdHJpbmc+IEd1aWRWZXJzaW9u
TWFwOwogc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKQEAgLTIzMyw3
ICsyMjMsNyBAQCBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUNvCiAgICAg
ICAgIG1fbmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRleCk7CiAKICAgICAgICAgbV9ndWlkID0g
Z3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PERhdGFiYXNlKj4+JiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5hZGQobV9ndWlkLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CkBAIC0zNzAsNyArMzYwLDcgQEAgYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbAogCiAgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOwogICAgIHsKLSAgICAgICAgc3RkOjps
b2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgICAgICBhdXRv
IGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKICAgICAgICAgaWYgKGVu
dHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgewpAQCAtNDY1LDcgKzQ1NSw3IEBAIHZv
aWQgRGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQogICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSB0
b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIHJlbW92ZU9wZW5EYXRhYmFzZSgpLgogICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9ja2VyKGd1aWRNdXRl
eCk7CiAKICAgICAgICAgYXV0byBpdCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZmluZChtX2d1aWQp
OwogICAgICAgICBBU1NFUlQoaXQgIT0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5lbmQoKSk7CkBAIC01
MjQsNyArNTE0LDcgQEAgdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IAog
CiBTdHJpbmcgRGF0YWJhc2U6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAogewotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrZXIoZ3VpZE11dGV4KTsKIAogICAgIHJldHVybiBndWlk
VG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkuaXNvbGF0ZWRDb3B5KCk7CiB9CkBAIC01MzIsNyAr
NTIyLDcgQEAgU3RyaW5nIERhdGFiYXNlOjpnZXRDYWNoZWRWZXJzaW9uKCkgY29ucwogdm9pZCBE
YXRhYmFzZTo6c2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCiB7
CiAgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2tlcihndWlkTXV0ZXgpOwogCiAgICAgdXBkYXRl
R3VpZFZlcnNpb25NYXAobV9ndWlkLCBhY3R1YWxWZXJzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpzZXRJc0F2YWlsYWJsZShib28KIAogUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gRGF0YWJhc2VNYW5hZ2VyOjpleGlzdGluZ0RhdGFiYXNlQ29udGV4dEZvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbXV0ZXgpOwogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VDb250ZXh0UmVnaXN0ZXJlZENvdW50
ID49IDApOwogICAgIEFTU0VSVChtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQgPj0gMCk7
CkBAIC0xMzgsNyArMTM4LDcgQEAgUmVmUHRyPERhdGFiYXNlQ29udGV4dD4gRGF0YWJhc2VNYW5h
Z2VyOgogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0
YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJh
c2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgbV9jb250ZXh0TWFwLnNl
dChjb250ZXh0LCBkYXRhYmFzZUNvbnRleHQpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRGF0
YWJhc2VNYW5hZ2VyOjpyZWdpc3RlckRhdGFiYXNlQ28KIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6
OnVucmVnaXN0ZXJEYXRhYmFzZUNvbnRleHQoRGF0YWJhc2VDb250ZXh0KiBkYXRhYmFzZUNvbnRl
eHQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgQVNTRVJUKG1fY29udGV4dE1hcC5nZXQoY29udGV4dCkpOwpAQCAtMTYy
LDE0ICsxNjIsMTQgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnVucmVnaXN0ZXJEYXRhYmFzZQog
I2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpkaWRDb25zdHJ1Y3RE
YXRhYmFzZUNvbnRleHQoKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
KG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAg
ICAgbV9kYXRhYmFzZUNvbnRleHRJbnN0YW5jZUNvdW50Kys7CiB9CiAKIHZvaWQgRGF0YWJhc2VN
YW5hZ2VyOjpkaWREZXN0cnVjdERhdGFiYXNlQ29udGV4dCgpCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tdXRleCk7CiAKICAgICBtX2RhdGFiYXNlQ29udGV4dEluc3RhbmNlQ291bnQtLTsK
ICAgICBBU1NFUlQobV9kYXRhYmFzZUNvbnRleHRSZWdpc3RlcmVkQ291bnQgPD0gbV9kYXRhYmFz
ZUNvbnRleHRJbnN0YW5jZUNvdW50KTsKQEAgLTI1OCwxNCArMjU4LDE0IEBAIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3AKIAogdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmFk
ZFByb3Bvc2VkRGF0YWJhc2UoUHJvcG9zZWREYXRhYmFzZSogcHJvcG9zZWREYikKIHsKLSAgICBz
dGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgIG1fcHJvcG9zZWREYXRhYmFzZXMuYWRk
KHByb3Bvc2VkRGIpOwogfQogCiB2b2lkIERhdGFiYXNlTWFuYWdlcjo6cmVtb3ZlUHJvcG9zZWRE
YXRhYmFzZShQcm9wb3NlZERhdGFiYXNlKiBwcm9wb3NlZERiKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1fbXV0ZXgpOwogCiAgICAgbV9wcm9wb3NlZERhdGFiYXNlcy5yZW1vdmUocHJvcG9z
ZWREYik7CiB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnN0b3BE
YXRhYmFzZXMoU2NyaQogU3RyaW5nIERhdGFiYXNlTWFuYWdlcjo6ZnVsbFBhdGhGb3JEYXRhYmFz
ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRl
SWZEb2VzTm90RXhpc3QpCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9tdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRvKiBwcm9wb3NlZERhdGFiYXNlIDogbV9wcm9w
b3NlZERhdGFiYXNlcykgewogICAgICAgICAgICAgaWYgKHByb3Bvc2VkRGF0YWJhc2UtPmRldGFp
bHMoKS5uYW1lKCkgPT0gbmFtZSAmJiBwcm9wb3NlZERhdGFiYXNlLT5vcmlnaW4oKS0+ZXF1YWwo
b3JpZ2luKSkKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJh
c2VOYW1lc0Zvck9yCiBEYXRhYmFzZURldGFpbHMgRGF0YWJhc2VNYW5hZ2VyOjpkZXRhaWxzRm9y
TmFtZUFuZE9yaWdpbihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKGF1dG8qIHByb3Bvc2VkRGF0YWJhc2UgOiBtX3Byb3Bvc2VkRGF0
YWJhc2VzKSB7CiAgICAgICAgICAgICBpZiAocHJvcG9zZWREYXRhYmFzZS0+ZGV0YWlscygpLm5h
bWUoKSA9PSBuYW1lICYmIHByb3Bvc2VkRGF0YWJhc2UtPm9yaWdpbigpLT5lcXVhbChvcmlnaW4p
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQmFzaWNUeXBlcy5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlRGV0YWlscy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRl
IDxtdXRleD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFByb3Bvc2VkRGF0YWJh
c2UqPiBtX3Byb3Bvc2VkRGF0YWJhc2VzOwogCiAgICAgLy8gVGhpcyBtdXRleCBwcm90ZWN0cyBt
X2NvbnRleHRNYXAsIGFuZCBtX3Byb3Bvc2VkRGF0YWJhc2VzLgotICAgIHN0ZDo6bXV0ZXggbV9t
dXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHJldmlz
aW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIlNjcmlwdENvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKICNpbXBvcnQgInJ1
bnRpbWVfcm9vdC5oIgorI2ltcG9ydCA8d3RmL0xvY2suaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9OU01hcFRhYmxlU1BJLmg+CiAKQEAg
LTQ2LDE2ICs0Nyw3IEBACiBzdGF0aWMgTlNNYXBUYWJsZSogRE9NV3JhcHBlckNhY2hlOwogICAg
IAogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwotc3RhdGljIHN0ZDo6bXV0ZXgmIHdy
YXBwZXJDYWNoZUxvY2soKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsK
LSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgbXV0ZXguY29uc3RydWN0KCk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQorc3RhdGljIFN0YXRpY0xvY2sgd3JhcHBl
ckNhY2hlTG9jazsKICNlbmRpZgogCiAjaWYgQ09NUElMRVIoQ0xBTkcpCkBAIC03OCw3ICs3MCw3
IEBAIE5TTWFwVGFibGUqIGNyZWF0ZVdyYXBwZXJDYWNoZSgpCiBOU09iamVjdCogZ2V0RE9NV3Jh
cHBlcihET01PYmplY3RJbnRlcm5hbCogaW1wbCkKIHsKICNpZmRlZiBORUVEU19XUkFQUEVSX0NB
Q0hFX0xPQ0sKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh3cmFwcGVyQ2Fj
aGVMb2NrKCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHdyYXBwZXJD
YWNoZUxvY2spOwogI2VuZGlmCiAgICAgaWYgKCFET01XcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJl
dHVybiBuaWw7CkBAIC04OCw3ICs4MCw3IEBAIE5TT2JqZWN0KiBnZXRET01XcmFwcGVyKERPTU9i
amVjdEludGVybmEKIHZvaWQgYWRkRE9NV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgRE9NT2Jq
ZWN0SW50ZXJuYWwqIGltcGwpCiB7CiAjaWZkZWYgTkVFRFNfV1JBUFBFUl9DQUNIRV9MT0NLCi0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sod3JhcHBlckNhY2hlTG9jaygpKTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh3cmFwcGVyQ2FjaGVMb2NrKTsK
ICNlbmRpZgogICAgIGlmICghRE9NV3JhcHBlckNhY2hlKQogICAgICAgICBET01XcmFwcGVyQ2Fj
aGUgPSBjcmVhdGVXcmFwcGVyQ2FjaGUoKTsKQEAgLTk4LDcgKzkwLDcgQEAgdm9pZCBhZGRET01X
cmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBETwogdm9pZCByZW1vdmVET01XcmFwcGVyKERPTU9i
amVjdEludGVybmFsKiBpbXBsKQogewogI2lmZGVmIE5FRURTX1dSQVBQRVJfQ0FDSEVfTE9DSwot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdyYXBwZXJDYWNoZUxvY2soKSk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod3JhcHBlckNhY2hlTG9jayk7
CiAjZW5kaWYKICAgICBpZiAoIURPTVdyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
Y3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYg
RU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIKLSNp
bmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MSwxNyArNDEsNyBAQCBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtCiAgICAgcmV0dXJuIHJlZ2lz
dHJ5OwogfQogCi1zdGF0aWMgc3RkOjptdXRleCYgcmVnaXN0cnlNdXRleCgpCi17Ci0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8c3RkOjptdXRleD4gbXV0ZXg7Ci0KLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW117
Ci0gICAgICAgIG11dGV4LmNvbnN0cnVjdCgpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIG11dGV4
OwotfQorc3RhdGljIFN0YXRpY0xvY2sgcmVnaXN0cnlNdXRleDsKIAogQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5KCkKIHsKQEAgLTYzLDcgKzUzLDcgQEAg
Ym9vbCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Z2V0SWRlbnRpZgogICAgIGlmIChuYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGF1dG8gaXRlciA9IG1fbmFtZVRv
SWRlbnRpZmllck1hcC5maW5kKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogICAgIGlmIChpdGVyID09
IG1fbmFtZVRvSWRlbnRpZmllck1hcC5lbmQoKSkKQEAgLTc1LDE0ICs2NSwxNCBAQCBib29sIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpnZXRJZGVudGlmCiAKIFN0cmluZyBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6bmFtZUZvcklkZW50aWZpZXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHJlZ2lz
dHJ5TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socmVnaXN0
cnlNdXRleCk7CiAKICAgICByZXR1cm4gbV9pZGVudGlmaWVyVG9OYW1lTWFwLmdldChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaWRlbnRpZmllcikpLmlzb2xhdGVkQ29weSgpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6Y3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhyZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNMb2NrPiBsb2NrKHJlZ2lzdHJ5TXV0ZXgpOwogCiAgICAgYXV0byBpdGVyID0g
bV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1hcC5maW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
ZGVudGlmaWVyKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9pZGVudGlmaWVyVG9Db25zdHJ1Y3Rvck1h
cC5lbmQoKSkKQEAgLTkzLDcgKzgzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bT4gQ3J5cHRvQQogCiB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpyZWdpc3RlckFsZ29y
aXRobShjb25zdCBTdHJpbmcmIG5hbWUsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtQ29uc3RydWN0b3IgY29uc3RydWN0b3IpCiB7Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2socmVnaXN0cnlNdXRleCgpKTsKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhyZWdpc3RyeU11dGV4KTsKIAogICAgIGJvb2wg
YWRkZWQgPSBtX25hbWVUb0lkZW50aWZpZXJNYXAuYWRkKG5hbWUsIGlkZW50aWZpZXIpLmlzTmV3
RW50cnk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRlZCwgYWRkZWQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24g
MTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckRlYnVnZ2VyQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFu
YWdlci5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oPgotI2luY2x1
ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC00NiwxNyArNDYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKLXN0ZDo6bXV0ZXgmIHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4
OwotCi0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25z
dHJ1Y3QoKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBtdXRleDsKLX0KK1N0YXRpY0xvY2sgd29y
a2VyRGVidWdnZXJBZ2VudHNNdXRleDsKIAogdHlwZWRlZiBIYXNoTWFwPFdvcmtlclRocmVhZCos
IFdvcmtlckRlYnVnZ2VyQWdlbnQqPiBXb3JrZXJEZWJ1Z2dlckFnZW50czsKIApAQCAtOTUsMTMg
Kzg1LDEzIEBAIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVnZ2VyQWdlbnQKICAgICAs
IG1fc2NyaXB0RGVidWdTZXJ2ZXIoaW5zcGVjdGVkV29ya2VyR2xvYmFsU2NvcGUsIFdvcmtlckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpCiAgICAgLCBtX2luc3BlY3RlZFdvcmtlckds
b2JhbFNjb3BlKGluc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKQogewotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRl
eCk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5zZXQoJmluc3BlY3RlZFdvcmtlckdsb2Jh
bFNjb3BlLT50aHJlYWQoKSwgdGhpcyk7CiB9CiAKIFdvcmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3Jr
ZXJEZWJ1Z2dlckFnZW50KCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
ayh3b3JrZXJEZWJ1Z2dlckFnZW50c011dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNMb2NrPiBsb2NrKHdvcmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgpOwogCiAgICAgQVNTRVJUKHdv
cmtlckRlYnVnZ2VyQWdlbnRzKCkuY29udGFpbnMoJm1faW5zcGVjdGVkV29ya2VyR2xvYmFsU2Nv
cGUtPnRocmVhZCgpKSk7CiAgICAgd29ya2VyRGVidWdnZXJBZ2VudHMoKS5yZW1vdmUoJm1faW5z
cGVjdGVkV29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpKTsKQEAgLTEwOSw3ICs5OSw3IEBAIFdv
cmtlckRlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJEZWJ1Z2dlckFnZW4KIAogdm9pZCBXb3JrZXJEZWJ1
Z2dlckFnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaEluc3BlY3RvckNvbW1hbmRzKFdvcmtlclRo
cmVhZCogdGhyZWFkKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHdv
cmtlckRlYnVnZ2VyQWdlbnRzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2sod29ya2VyRGVidWdnZXJBZ2VudHNNdXRleCk7CiAKICAgICBpZiAoV29ya2VyRGVi
dWdnZXJBZ2VudCogYWdlbnQgPSB3b3JrZXJEZWJ1Z2dlckFnZW50cygpLmdldCh0aHJlYWQpKQog
ICAgICAgICBhZ2VudC0+bV9zY3JpcHREZWJ1Z1NlcnZlci5pbnRlcnJ1cHRBbmRSdW5UYXNrKHN0
ZDo6bWFrZV91bmlxdWU8UnVuSW5zcGVjdG9yQ29tbWFuZHNUYXNrPih0aHJlYWQsIGFnZW50LT5t
X2luc3BlY3RlZFdvcmtlckdsb2JhbFNjb3BlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1doZWVsRXZlbnRUZXN0VHJpZ2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpXaGVlbEV2ZW50VGVzdFRy
aQogCiB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6Y2xlYXJBbGxUZXN0RGVmZXJyYWxzKCkK
IHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0
ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fdGVzdFRyaWdnZXJNdXRleCk7
CiAgICAgbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5jbGVhcigpOwogICAgIG1fdGVzdE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gc3RkOjpmdW5jdGlvbjx2b2lkKCk+KCk7CiAgICAgbV90ZXN0VHJp
Z2dlclRpbWVyLnN0b3AoKTsKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OmNsZWFyQWxsVGVzdAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OnNldFRlc3RD
YWxsYmFja0FuZFN0YXJ0Tm90aWZpY2F0aW9uVGltZXIoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1
bmN0aW9uQ2FsbGJhY2spCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
TG9jaz4gbG9jayhtX3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBtX3Rlc3ROb3RpZmljYXRp
b25DYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbkNhbGxiYWNrKTsKICAgICB9CiAgICAgCkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpzZXRUZXN0Q2FsbGIK
IAogdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OmRlZmVyVGVzdHNGb3JSZWFzb24oU2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVh
c29uKQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdn
ZXJNdXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11
dGV4KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50
aWZpZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQog
ICAgICAgICBpdCA9IG1fZGVmZXJUZXN0VHJpZ2dlclJlYXNvbnMuYWRkKGlkZW50aWZpZXIsIHN0
ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJSZWFzb24+KCkpLml0ZXJhdG9yOwpAQCAtNzYsNyArNzYs
NyBAQCB2b2lkIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6ZGVmZXJUZXN0c0ZvCiAKIHZvaWQgV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oU2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIERlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVhc29u
KQogewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fdGVzdFRyaWdnZXJN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV90ZXN0VHJpZ2dlck11dGV4
KTsKICAgICBhdXRvIGl0ID0gbV9kZWZlclRlc3RUcmlnZ2VyUmVhc29ucy5maW5kKGlkZW50aWZp
ZXIpOwogICAgIGlmIChpdCA9PSBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zLmVuZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OnRyaWdnZXJUZXN0VAogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbkNhbGxi
YWNrOwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X3Rlc3RUcmlnZ2VyTXV0ZXgpOwogICAgICAgICBpZiAoIW1fZGVmZXJUZXN0VHJpZ2dlclJlYXNv
bnMuaXNFbXB0eSgpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICAgICAgaWYgKGlzTG9n
Q2hhbm5lbEVuYWJsZWQoIldoZWVsRXZlbnRUZXN0VHJpZ2dlcnMiKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOSArMjksOSBAQAogI2lmbmRlZiBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAog
I2RlZmluZSBXaGVlbEV2ZW50VGVzdFRyaWdnZXJfaAogCi0jaW5jbHVkZSA8bXV0ZXg+CiAjaW5j
bHVkZSA8c2V0PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTYwLDcgKzYwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV90ZXN0Tm90aWZpY2F0
aW9uQ2FsbGJhY2s7CiAgICAgUnVuTG9vcDo6VGltZXI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBt
X3Rlc3RUcmlnZ2VyVGltZXI7Ci0gICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1fdGVzdFRyaWdnZXJN
dXRleDsKKyAgICBtdXRhYmxlIExvY2sgbV90ZXN0VHJpZ2dlck11dGV4OwogICAgIFdURjo6SGFz
aE1hcDxTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIHN0ZDo6c2V0PERlZmVyVGVzdFRyaWdnZXJS
ZWFzb24+PiBtX2RlZmVyVGVzdFRyaWdnZXJSZWFzb25zOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCShyZXZpc2lv
biAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJl
YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQogCisjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNTAsNyArNTEsNyBAQCB2
b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jCiAgICAgc2Nyb2xsaW5nVGhy
ZWFkLmNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zTXV0ZXgpOworICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhzaW5nbGV0b24oKS5tX2Z1bmN0aW9uc011
dGV4KTsKICAgICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlv
bik7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVh
dGVUaHJlYWRJZk5lZWQKIAogICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6
ZSB0aGUgcnVuIGxvb3AuCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2sobV9pbml0aWFsaXplUnVuTG9vcE11dGV4KTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleCk7CiAKICAgICAgICAgbV90
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKHRocmVhZENhbGxiYWNrLCB0aGlzLCAiV2Vi
Q29yZTogU2Nyb2xsaW5nIik7CiAgICAgICAgIApAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0YKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlv
bjx2b2lkICgpPj4gZnVuY3Rpb25zOwogICAgIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwogICAgICAgICBmdW5jdGlvbnMg
PSBXVEY6Om1vdmUobV9mdW5jdGlvbnMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgJKHJldmlzaW9uIDE4ODYxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
IAotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTc0LDEwICs3
NSwxMCBAQCBwcml2YXRlOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZp
ZXI7CiAKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBtX2luaXRpYWxpemVSdW5Mb29wQ29u
ZGl0aW9uVmFyaWFibGU7Ci0gICAgc3RkOjptdXRleCBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7
CisgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKKyAg
ICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKIAotICAgIHN0ZDo6bXV0ZXggbV9mdW5j
dGlvbnNNdXRleDsKKyAgICBMb2NrIG1fZnVuY3Rpb25zTXV0ZXg7CiAgICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4+IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUaHJlYWRNYWMubW0JKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUaHJlYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEzICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIAorI2luY2x1
ZGUgPG11dGV4PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFk
Ojppbml0aWFsaXplUnVuTG9vcCgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3Au
CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luaXRp
YWxpemVSdW5Mb29wTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayht
X2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOwogCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9IENG
UnVuTG9vcEdldEN1cnJlbnQoKTsKIApAQCAtNDIsNyArNDQsNyBAQCB2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3AoCiAgICAgICAgIG1fdGhyZWFkUnVuTG9vcFNvdXJjZSA9
IGFkb3B0Q0YoQ0ZSdW5Mb29wU291cmNlQ3JlYXRlKDAsIDAsICZjb250ZXh0KSk7CiAgICAgICAg
IENGUnVuTG9vcEFkZFNvdXJjZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fdGhyZWFkUnVuTG9v
cFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKIAotICAgICAgICBtX2luaXRp
YWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5X2FsbCgpOworICAgICAgICBtX2lu
aXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1JldmVyYkNvbnZvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkocmV2aXNpb24gMTg4NjEyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgog
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSA8bXV0ZXg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTQwLDkgKzE0MSw5IEBAIFJldmVyYkNvbnZvbHZlcjo6flJldmVyYkNvbnZv
bHZlcigpCiAKICAgICAgICAgLy8gV2FrZSB1cCB0aHJlYWQgc28gaXQgY2FuIHJldHVybgogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2Jh
Y2tncm91bmRUaHJlYWRNdXRleCk7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCk7CiAgICAgICAgICAgICBtX21vcmVJbnB1dEJ1
ZmZlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAKICAgICAgICAgd2FpdEZvclRo
cmVhZENvbXBsZXRpb24obV9iYWNrZ3JvdW5kVGhyZWFkKTsKQEAgLTE1NSw3ICsxNTYsNyBAQCB2
b2lkIFJldmVyYkNvbnZvbHZlcjo6YmFja2dyb3VuZFRocmVhZEVuCiAgICAgICAgIC8vIFdhaXQg
Zm9yIHJlYWx0aW1lIHRocmVhZCB0byBnaXZlIHVzIG1vcmUgaW5wdXQKICAgICAgICAgbV9tb3Jl
SW5wdXRCdWZmZXJlZCA9IGZhbHNlOyAgICAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX2JhY2tncm91bmRUaHJlYWRNdXRleCk7
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5kVGhy
ZWFkTXV0ZXgpOwogCiAgICAgICAgICAgICBtX2JhY2tncm91bmRUaHJlYWRDb25kaXRpb25WYXJp
YWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX21vcmVJbnB1dEJ1ZmZlcmVkIHx8IG1f
d2FudHNUb0V4aXQ7IH0pOwogICAgICAgICB9CkBAIC0yMDksMTIgKzIxMCwxMiBAQCB2b2lkIFJl
dmVyYkNvbnZvbHZlcjo6cHJvY2Vzcyhjb25zdCBBdWRpCiAgICAgLy8gc2lnbmFsIGZyb20gdGlt
ZSB0byB0aW1lLCBzaW5jZSB3ZSdsbCBnZXQgdG8gaXQgdGhlIG5leHQgdGltZSB3ZSdyZSBjYWxs
ZWQuICBXZSdyZSBjYWxsZWQgcmVwZWF0ZWRseQogICAgIC8vIGFuZCBmcmVxdWVudGx5IChhcm91
bmQgZXZlcnkgM21zKS4gIFRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBwcm9jZXNzaW5nIHdlbGwg
aW50byB0aGUgZnV0dXJlIGFuZCBoYXMgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIAogICAgIC8v
IGxlZXdheSBoZXJlLi4uCi0gICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1f
YmFja2dyb3VuZFRocmVhZE11dGV4LCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBzdGQ6OnVuaXF1
ZV9sb2NrPExvY2s+IGxvY2sobV9iYWNrZ3JvdW5kVGhyZWFkTXV0ZXgsIHN0ZDo6dHJ5X3RvX2xv
Y2spOwogICAgIGlmICghbG9jay5vd25zX2xvY2soKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9tb3JlSW5wdXRCdWZmZXJlZCA9IHRydWU7Ci0gICAgbV9iYWNrZ3JvdW5kVGhyZWFkQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgIG1fYmFja2dyb3VuZFRocmVhZENvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeU9uZSgpOwogfQogCiB2b2lkIFJldmVyYkNvbnZvbHZlcjo6cmVzZXQo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9sdmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vUmV2ZXJiQ29udm9s
dmVyLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L1JldmVyYkNvbnZvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzYsOSBAQAogI2luY2x1ZGUgIlJl
dmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIgogI2luY2x1ZGUgIlJldmVyYkNvbnZvbHZlclN0YWdl
LmgiCiAjaW5jbHVkZSAiUmV2ZXJiSW5wdXRCdWZmZXIuaCIKLSNpbmNsdWRlIDxjb25kaXRpb25f
dmFyaWFibGU+CiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTg4LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICBUaHJlYWRJZGVudGlmaWVy
IG1fYmFja2dyb3VuZFRocmVhZDsKICAgICBib29sIG1fd2FudHNUb0V4aXQ7CiAgICAgYm9vbCBt
X21vcmVJbnB1dEJ1ZmZlcmVkOwotICAgIG11dGFibGUgc3RkOjptdXRleCBtX2JhY2tncm91bmRU
aHJlYWRNdXRleDsKLSAgICBtdXRhYmxlIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIG1fYmFja2dy
b3VuZFRocmVhZENvbmRpdGlvblZhcmlhYmxlOworICAgIG11dGFibGUgTG9jayBtX2JhY2tncm91
bmRUaHJlYWRNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2JhY2tncm91bmRUaHJlYWRD
b25kaXRpb25WYXJpYWJsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZFJ1bi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkUnVu
LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dh
ay9XZWJDb3JlVGhyZWFkUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsOSBAQAogCiAj
aW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgogI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRJbnRlcm5h
bC5oIgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNp
bmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSB7CkBAIC00NCwyMyArNDYsMjMgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobV9zdGF0ZU11dGV4KTsKKyAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgbV9jb21wbGV0
aW9uQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gbV9jb21wbGV0
ZWQ7IH0pOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29tcGxldGVkKCkKICAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fc3RhdGVNdXRleCk7CisgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fc3RhdGVNdXRleCk7CiAKICAgICAgICAgQVNT
RVJUKCFtX2NvbXBsZXRlZCk7CiAgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAg
bV9jb21wbGV0aW9uQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5X29uZSgpOworICAgICAgICBtX2Nv
bXBsZXRpb25Db25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUoKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgc3RkOjptdXRleCBtX3N0YXRlTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFi
bGUgbV9jb21wbGV0aW9uQ29uZGl0aW9uVmFyaWFibGU7CisgICAgTG9jayBtX3N0YXRlTXV0ZXg7
CisgICAgQ29uZGl0aW9uIG1fY29tcGxldGlvbkNvbmRpdGlvblZhcmlhYmxlOwogICAgIGJvb2wg
bV9jb21wbGV0ZWQ7CiB9OwogCkBAIC0xMTAsNyArMTEyLDcgQEAgZXh0ZXJuICJDIiB7CiAKIHR5
cGVkZWYgV1RGOjpWZWN0b3I8V2ViVGhyZWFkQmxvY2s+IFdlYlRocmVhZFJ1blF1ZXVlOwogCi1z
dGF0aWMgc3RkOjptdXRleCogcnVuUXVldWVNdXRleDsKK3N0YXRpYyBTdGF0aWNMb2NrIHJ1blF1
ZXVlTXV0ZXg7CiBzdGF0aWMgQ0ZSdW5Mb29wU291cmNlUmVmIHJ1blNvdXJjZTsKIHN0YXRpYyBX
ZWJUaHJlYWRSdW5RdWV1ZSogcnVuUXVldWU7CiAKQEAgLTExOCwxMyArMTIwLDEyIEBAIHN0YXRp
YyB2b2lkIEhhbmRsZVJ1blNvdXJjZSh2b2lkICppbmZvKQogewogICAgIFVOVVNFRF9QQVJBTShp
bmZvKTsKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwotICAgIEFTU0VSVChydW5R
dWV1ZU11dGV4KTsKICAgICBBU1NFUlQocnVuU291cmNlKTsKICAgICBBU1NFUlQocnVuUXVldWUp
OwogCiAgICAgV2ViVGhyZWFkUnVuUXVldWUgcXVldWVDb3B5OwogICAgIHsKLSAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soKnJ1blF1ZXVlTXV0ZXgpOworICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhydW5RdWV1ZU11dGV4KTsKICAgICAgICAg
cXVldWVDb3B5ID0gKnJ1blF1ZXVlOwogICAgICAgICBydW5RdWV1ZS0+Y2xlYXIoKTsKICAgICB9
CkBAIC0xNDAsNyArMTQxLDYgQEAgc3RhdGljIHZvaWQgX1dlYlRocmVhZFJ1bih2b2lkIChedGFz
aykoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHJ1blF1ZXVlTXV0ZXgp
OwogICAgIEFTU0VSVChydW5Tb3VyY2UpOwogICAgIEFTU0VSVChydW5RdWV1ZSk7CiAKQEAgLTE0
OSw3ICsxNDksNyBAQCBzdGF0aWMgdm9pZCBfV2ViVGhyZWFkUnVuKHZvaWQgKF50YXNrKSgpCiAg
ICAgICAgIHN0YXRlID0gbmV3IFdlYlRocmVhZEJsb2NrU3RhdGU7CiAKICAgICB7Ci0gICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKCpydW5RdWV1ZU11dGV4KTsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2socnVuUXVldWVNdXRleCk7CiAgICAg
ICAgIHJ1blF1ZXVlLT5hcHBlbmQoV2ViVGhyZWFkQmxvY2sodGFzaywgc3RhdGUpKTsKICAgICB9
CiAKQEAgLTE3NSw3ICsxNzUsNiBAQCB2b2lkIFdlYlRocmVhZFJ1blN5bmModm9pZCAoXnRhc2sp
KCkpCiB2b2lkIFdlYlRocmVhZEluaXRSdW5RdWV1ZSgpCiB7CiAgICAgQVNTRVJUKCFydW5RdWV1
ZSk7Ci0gICAgQVNTRVJUKCFydW5RdWV1ZU11dGV4KTsKICAgICBBU1NFUlQoIXJ1blNvdXJjZSk7
CiAKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IHByZWQ7CkBAIC0xODUsOCArMTg0LDYgQEAg
dm9pZCBXZWJUaHJlYWRJbml0UnVuUXVldWUoKQogICAgICAgICBDRlJ1bkxvb3BTb3VyY2VDb250
ZXh0IHJ1blNvdXJjZUNvbnRleHQgPSB7MCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg
TlVMTCwgTlVMTCwgTlVMTCwgSGFuZGxlUnVuU291cmNlfTsKICAgICAgICAgcnVuU291cmNlID0g
Q0ZSdW5Mb29wU291cmNlQ3JlYXRlKE5VTEwsIC0xLCAmcnVuU291cmNlQ29udGV4dCk7CiAgICAg
ICAgIENGUnVuTG9vcEFkZFNvdXJjZShXZWJUaHJlYWRSdW5Mb29wKCksIHJ1blNvdXJjZSwga0NG
UnVuTG9vcERlZmF1bHRNb2RlKTsKLQotICAgICAgICBydW5RdWV1ZU11dGV4ID0gc3RkOjptYWtl
X3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKICAgICB9KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9MYW5ndWFnZS5tbQkocmV2aXNpb24gMTg4NjEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xhbmd1YWdlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwyMyArMzEsMTQgQEAKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgogI2lt
cG9ydCA8bXV0ZXg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0xv
Y2suaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIHByZWZlcnJlZExhbmd1YWdlc011dGV4KCkKLXsK
LSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBzdGF0aWMgc3RkOjpt
dXRleCogbXV0ZXg7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAg
IG11dGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxzdGQ6Om11dGV4PigpLnJlbGVhc2UoKTsKLSAgICB9
KTsKLQotICAgIHJldHVybiAqbXV0ZXg7Ci19CitzdGF0aWMgU3RhdGljTG9jayBwcmVmZXJyZWRM
YW5ndWFnZXNNdXRleDsKIAogc3RhdGljIFZlY3RvcjxTdHJpbmc+JiBwcmVmZXJyZWRMYW5ndWFn
ZXMoKQogewpAQCAtNjcsNyArNTgsNyBAQCArICh2b2lkKWxhbmd1YWdlUHJlZmVyZW5jZXNEaWRD
aGFuZ2U6KE5TCiAgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7CiAKICAgICB7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKFdlYkNvcmU6OnByZWZlcnJlZExh
bmd1YWdlc011dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9j
ayhXZWJDb3JlOjpwcmVmZXJyZWRMYW5ndWFnZXNNdXRleCk7CiAgICAgICAgIFdlYkNvcmU6OnBy
ZWZlcnJlZExhbmd1YWdlcygpLmNsZWFyKCk7CiAgICAgfQogCkBAIC0xMTgsNyArMTA5LDcgQEAg
VmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZwogCiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxv
Y2socHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y0xvY2s+IGxvY2socHJlZmVycmVkTGFuZ3VhZ2VzTXV0ZXgpOwogICAgIFZlY3RvcjxTdHJpbmc+
JiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzID0gcHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiAKICAgICBp
ZiAodXNlclByZWZlcnJlZExhbmd1YWdlcy5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTG9hZGVyUnVuTG9vcENGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAJ
KHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
TG9hZGVyUnVuTG9vcENGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSArMjksMTEgQEAKICNpZiBV
U0UoQ0ZORVRXT1JLKQogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24u
aD4KLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CiAjaW5jbHVkZSA8bGltaXRzPgorI2lu
Y2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHd0Zi9BdXRvZHJhaW5lZFBvb2wuaD4KKyNpbmNsdWRl
IDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTQwLDE5ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIENGUnVuTG9vcFJlZiBsb2FkZXJSdW5Mb29wT2JqZWN0ID0gMDsKIAotc3RhdGlj
IHN0ZDo6bXV0ZXgmIGxvYWRlclJ1bkxvb3BNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0gICAgcmV0dXJuIG11dGV4OwotfQotCi1zdGF0
aWMgc3RkOjpjb25kaXRpb25fdmFyaWFibGUmIGxvYWRlclJ1bkxvb3BDb25kaXRpb25WYXJpYWJs
ZSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
PiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIHJldHVybiBjb25kaXRpb25WYXJpYWJsZTsKLX0K
K3N0YXRpYyBTdGF0aWNMb2NrIGxvYWRlclJ1bkxvb3BNdXRleDsKK3N0YXRpYyBTdGF0aWNDb25k
aXRpb24gbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogCiBzdGF0aWMgdm9pZCBlbXB0
eVBlcmZvcm0odm9pZCopIAogewpAQCAtNjEsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBlbXB0eVBl
cmZvcm0odm9pZCopIAogc3RhdGljIHZvaWQgcnVuTG9hZGVyVGhyZWFkKHZvaWQqKQogewogICAg
IHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobG9hZGVyUnVuTG9v
cE11dGV4KCkpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhsb2Fk
ZXJSdW5Mb29wTXV0ZXgpOwogCiAgICAgICAgIGxvYWRlclJ1bkxvb3BPYmplY3QgPSBDRlJ1bkxv
b3BHZXRDdXJyZW50KCk7CiAKQEAgLTcwLDcgKzYxLDcgQEAgc3RhdGljIHZvaWQgcnVuTG9hZGVy
VGhyZWFkKHZvaWQqKQogICAgICAgICBDRlJ1bkxvb3BTb3VyY2VSZWYgYm9ndXNTb3VyY2UgPSBD
RlJ1bkxvb3BTb3VyY2VDcmVhdGUoMCwgMCwgJmN0eHQpOwogICAgICAgICBDRlJ1bkxvb3BBZGRT
b3VyY2UobG9hZGVyUnVuTG9vcE9iamVjdCwgYm9ndXNTb3VyY2UsIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7CiAKLSAgICAgICAgbG9hZGVyUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlKCkubm90aWZ5
X29uZSgpOworICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25l
KCk7CiAgICAgfQogCiAgICAgU0ludDMyIHJlc3VsdDsKQEAgLTg0LDEyICs3NSwxMiBAQCBDRlJ1
bkxvb3BSZWYgbG9hZGVyUnVuTG9vcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhsb2FkZXJSdW5Mb29wTXV0
ZXgoKSk7CisgICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNMb2NrPiBsb2NrKGxvYWRlclJ1bkxv
b3BNdXRleCk7CiAKICAgICBpZiAoIWxvYWRlclJ1bkxvb3BPYmplY3QpIHsKICAgICAgICAgY3Jl
YXRlVGhyZWFkKHJ1bkxvYWRlclRocmVhZCwgMCwgIldlYkNvcmU6IENGTmV0d29yayBMb2FkZXIi
KTsKIAotICAgICAgICBsb2FkZXJSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGUoKS53YWl0KGxvY2ss
IFtdIHsgcmV0dXJuIGxvYWRlclJ1bkxvb3BPYmplY3Q7IH0pOworICAgICAgICBsb2FkZXJSdW5M
b29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbXSB7IHJldHVybiBsb2FkZXJSdW5Mb29w
T2JqZWN0OyB9KTsKICAgICB9CiAKICAgICByZXR1cm4gbG9hZGVyUnVuTG9vcE9iamVjdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQAogI2luY2x1ZGUgIlByb3RlY3Rpb25T
cGFjZS5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTEzNiwyMCArMTM2LDIwIEBAIHN0YXRpYyB2b2lkIGNhbGxPbk1h
aW5UaHJlYWRBbmRXYWl0KHN0ZDoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6
bXV0ZXggbXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uVmFyaWFi
bGU7CisgICAgTG9jayBtdXRleDsKKyAgICBDb25kaXRpb24gY29uZGl0aW9uVmFyaWFibGU7CiAK
ICAgICBib29sIGlzRmluaXNoZWQgPSBmYWxzZTsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoWyZd
IHsKICAgICAgICAgZnVuY3Rpb24oKTsKIAotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9jayhtdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11
dGV4KTsKICAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgY29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7
CiAgICAgfSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2sobXV0ZXgp
OworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtdXRleCk7CiAgICAgY29uZGl0aW9u
VmFyaWFibGUud2FpdChsb2NrLCBbJl0geyByZXR1cm4gaXNGaW5pc2hlZDsgfSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlLmgJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsOSArNDAsOCBAQAogCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKLSNpbmNsdWRl
IDxtdXRleD4KLQogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKQEAgLTEwNSw4ICsxMDQsOCBAQCBwcml2YXRlOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBt
X3dvcmtlclRocmVhZCB7IDAgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3N0b3BUaHJlYWQg
eyBmYWxzZSB9OwotICAgIHN0ZDo6bXV0ZXggbV9tdXRleFNlbmQ7Ci0gICAgc3RkOjptdXRleCBt
X211dGV4UmVjZWl2ZTsKKyAgICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJl
Y2VpdmU7CiAgICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKICAgICBEZXF1ZTxTb2Nr
ZXREYXRhPiBtX3JlY2VpdmVEYXRhOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3Vy
bC5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsNyBAQCBpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uCiAKICAg
ICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KGRhdGEsIGxlbmd0aCk7CiAKLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4U2VuZCk7CisgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwogICAgIG1fc2VuZERhdGEuYXBwZW5kKFNvY2tldERh
dGEgeyBXVEY6Om1vdmUoY29weSksIGxlbmd0aCB9KTsKIAogICAgIHJldHVybiBsZW5ndGg7CkBA
IC0xNDYsNyArMTQ2LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwq
IAogICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXplIC0gdG90
YWxCeXRlc1NlbnQ7CiAgICAgICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNlbmREYXRh
LmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CiAKLSAgICAgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKICAgICAgICAgICAg
IG1fc2VuZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGOjptb3ZlKGNvcHkpLCByZXN0TGVu
Z3RoIH0pOwogCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2
aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCIKIAogI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzYsMTEgKzM2LDcgQEAgbmFtZXNwYWNlIFNRTGl0ZURhdGFiYXNl
VHJhY2tlciB7CiBzdGF0aWMgU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KiBzX3N0YXRpY1NR
TGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCA9IG51bGxwdHI7CiBzdGF0aWMgdW5zaWduZWQgc190
cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyID0gMDsKIAotc3RhdGljIHN0ZDo6bXV0ZXgmIHRy
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
c3RkOjptdXRleD4gdGlwTXV0ZXg7Ci0gICAgcmV0dXJuIHRpcE11dGV4OwotfQorc3RhdGljIFN0
YXRpY0xvY2sgdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXg7CiAKIHZvaWQgc2V0Q2xpZW50KFNR
TGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCogY2xpZW50KQogewpAQCAtNTQsNyArNTAsNyBAQCB2
b2lkIGluY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50CiAgICAgaWYgKCFzX3N0YXRp
Y1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3Rk
Ojpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgo
KSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodHJhbnNhY3Rpb25JblBy
b2dyZXNzTXV0ZXgpOwogCiAgICAgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyKys7CiAg
ICAgaWYgKHNfdHJhbnNhY3Rpb25JblByb2dyZXNzQ291bnRlciA9PSAxKQpAQCAtNjYsNyArNjIs
NyBAQCB2b2lkIGRlY3JlbWVudFRyYW5zYWN0aW9uSW5Qcm9ncmVzc0NvdW50CiAgICAgaWYgKCFz
X3N0YXRpY1NRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodHJhbnNhY3Rpb25JblByb2dyZXNz
TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodHJhbnNhY3Rp
b25JblByb2dyZXNzTXV0ZXgpOwogCiAgICAgQVNTRVJUKHNfdHJhbnNhY3Rpb25JblByb2dyZXNz
Q291bnRlcik7CiAgICAgc190cmFuc2FjdGlvbkluUHJvZ3Jlc3NDb3VudGVyLS07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNw
cAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJVVGV4dFByb3ZpZGVyVVRGMTYuaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NjUsOCArNzY2LDggQEAg
c3RhdGljIGlubGluZSBib29sIGNvbXBhcmVBbmRTd2FwTm9uU2hhcgogI2lmIEVOQUJMRShDT01Q
QVJFX0FORF9TV0FQKQogICAgIHJldHVybiBXVEY6OndlYWtDb21wYXJlQW5kU3dhcChyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpLCBleHBl
Y3RlZCwgbmV3VmFsdWUpOwogI2Vsc2UKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoc3RkOjptdXRleCwgbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvck11dGV4LCAoKSk7
Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yTXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleDsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9j
az4gbG9ja2VyKG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3JNdXRleCk7CiAgICAgaWYg
KG5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgIT0gZXhwZWN0ZWQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gbmV3VmFs
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMTA2LDE0ICsxMDcs
NyBAQCBzdHJ1Y3QgVGV4dENvZGVjRmFjdG9yeSB7CiB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqLCBUZXh0RW5jb2RpbmdOYW1lSGFzaD4gVGV4dEVuY29kaW5nTmFtZU1h
cDsKIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgVGV4dENvZGVjRmFjdG9yeT4gVGV4dENv
ZGVjTWFwOwogCi1zdGF0aWMgc3RkOjptdXRleCYgZW5jb2RpbmdSZWdpc3RyeU11dGV4KCkKLXsK
LSAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGNvbnN0cnVjdCB0aGlzIG11dGV4IGluIGEgdGhyZWFk
IHNhZmUgd2F5IGJlY2F1c2UgdGhpcyBmdW5jdGlvbgotICAgIC8vIGlzIGNhbGxlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgZm9yIGFueSBwYWdlIGJlZm9yZSBpdCBpcyB1c2VkIGluIHdvcmtlciB0aHJl
YWRzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6Om11dGV4PiBtdXRleDsKLQotICAg
IHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIGVuY29kaW5nUmVnaXN0cnlNdXRl
eDsKIAogc3RhdGljIFRleHRFbmNvZGluZ05hbWVNYXAqIHRleHRFbmNvZGluZ05hbWVNYXA7CiBz
dGF0aWMgVGV4dENvZGVjTWFwKiB0ZXh0Q29kZWNNYXA7CkBAIC0yOTQsNyArMjg4LDcgQEAgc3Rh
dGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiAKIHN0ZDo6dW5pcXVlX3B0cjxUZXh0Q29k
ZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQogewotICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCgpKTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5TXV0
ZXgpOwogCiAgICAgQVNTRVJUKHRleHRDb2RlY01hcCk7CiAgICAgVGV4dENvZGVjRmFjdG9yeSBm
YWN0b3J5ID0gdGV4dENvZGVjTWFwLT5nZXQoZW5jb2RpbmcubmFtZSgpKTsKQEAgLTMxMCw3ICsz
MDQsNyBAQCBjb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOCiAgICAgaWYg
KCF0ZXh0RW5jb2RpbmdOYW1lTWFwKQogICAgICAgICBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCk7
CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhlbmNvZGluZ1JlZ2lzdHJ5
TXV0ZXgoKSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2soZW5jb2RpbmdS
ZWdpc3RyeU11dGV4KTsKIAogICAgIGlmIChjb25zdCBjaGFyKiBhdG9taWNOYW1lID0gdGV4dEVu
Y29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpKQogICAgICAgICByZXR1cm4gYXRvbWljTmFtZTsKQEAg
LTM3Nyw3ICszNzEsNyBAQCB2b2lkIGR1bXBUZXh0RW5jb2RpbmdOYW1lTWFwKCkKICAgICB1bnNp
Z25lZCBzaXplID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+c2l6ZSgpOwogICAgIGZwcmludGYoc3Rk
ZXJyLCAiRHVtcGluZyAldSBlbnRyaWVzIGluIFdlYkNvcmU6OnRleHRFbmNvZGluZ05hbWVNYXAu
Li5cbiIsIHNpemUpOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soZW5j
b2RpbmdSZWdpc3RyeU11dGV4KCkpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBs
b2NrKGVuY29kaW5nUmVnaXN0cnlNdXRleCk7CiAKICAgICBUZXh0RW5jb2RpbmdOYW1lTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmJlZ2luKCk7CiAgICAgVGV4
dEVuY29kaW5nTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGV4dEVuY29kaW5nTmFtZU1h
cC0+ZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCShy
ZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJUaHJlYWRHbG9i
YWxEYXRhLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAt
NDYsMTcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgc3RkOjptdXRl
eCYgdGhyZWFkU2V0TXV0ZXgoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxh
ZzsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0ZXg+IG11dGV4OwotCi0g
ICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewotICAgICAgICBtdXRleC5jb25zdHJ1Y3Qo
KTsKLSAgICB9KTsKLQotICAgIHJldHVybiBtdXRleDsKLX0KK3N0YXRpYyBTdGF0aWNMb2NrIHRo
cmVhZFNldE11dGV4OwogCiBzdGF0aWMgSGFzaFNldDxXb3JrZXJUaHJlYWQqPiYgd29ya2VyVGhy
ZWFkcygpCiB7CkBAIC02Nyw3ICs1OCw3IEBAIHN0YXRpYyBIYXNoU2V0PFdvcmtlclRocmVhZCo+
JiB3b3JrZXJUaHIKIAogdW5zaWduZWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgp
CiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodGhyZWFkU2V0TXV0ZXgo
KSk7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2sodGhyZWFkU2V0TXV0ZXgp
OwogCiAgICAgcmV0dXJuIHdvcmtlclRocmVhZHMoKS5zaXplKCk7CiB9CkBAIC0xMDYsMTQgKzk3
LDE0IEBAIFdvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IFVSTCYgc2MKICAgICAsIG1f
bm90aWZpY2F0aW9uQ2xpZW50KDApCiAjZW5kaWYKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayh0aHJlYWRTZXRNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTG9jaz4gbG9jayh0aHJlYWRTZXRNdXRleCk7CiAKICAgICB3b3JrZXJUaHJlYWRzKCkuYWRk
KHRoaXMpOwogfQogCiBXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQoKQogewotICAgIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHRocmVhZFNldE11dGV4KCkpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHRocmVhZFNldE11dGV4KTsKIAogICAgIEFTU0VS
VCh3b3JrZXJUaHJlYWRzKCkuY29udGFpbnModGhpcykpOwogICAgIHdvcmtlclRocmVhZHMoKS5y
ZW1vdmUodGhpcyk7CkBAIC0yMjEsNyArMjEyLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3Ao
KQogCiB2b2lkIFdvcmtlclRocmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxU
aHJlYWRzKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayh0aHJlYWRT
ZXRNdXRleCgpKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh0aHJlYWRT
ZXRNdXRleCk7CiAKICAgICBmb3IgKGF1dG8qIHdvcmtlclRocmVhZCA6IHdvcmtlclRocmVhZHMo
KSkgewogICAgICAgICB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhbXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODYyMSkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDE1LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBhbGwgdXNlcyBvZiBzdGQ6Om11dGV4L3N0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHdp
dGggV1RGOjpMb2NrL1dURjo6Q29uZGl0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OnRyYXZl
cnNlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJ
UEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Up
OgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjpkaXNwYXRjaE1l
c3NhZ2VzKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlz
cGF0Y2hNZXNzYWdlQW5kUmVzZXREaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNGb3JDb25uZWN0
aW9uKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAo
SVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rp
b246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpp
bnN0YWxsSW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6dW5pbnN0YWxsSW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6aGFzSW5jb21pbmdTeW5jTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNv
bm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OnNlbmRPdXRnb2luZ01lc3NhZ2VzKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6ZW5xdWV1
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmRpc3BhdGNoT25l
TWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAg
KiBTaGFyZWQvQmxvY2tpbmdSZXNwb25zZU1hcC5oOgorICAgICAgICAoQmxvY2tpbmdSZXNwb25z
ZU1hcDo6d2FpdEZvclJlc3BvbnNlKToKKyAgICAgICAgKEJsb2NraW5nUmVzcG9uc2VNYXA6OmRp
ZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChCbG9ja2luZ1Jlc3BvbnNlTWFwOjpjYW5jZWwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5JbmZvQ2FjaGU6OnNhdmVUb0ZpbGUpOgorICAgICAgICAo
V2ViS2l0OjpQbHVnaW5JbmZvQ2FjaGU6OnVwZGF0ZVBsdWdpbkluZm8pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL1dLUHJpbnRpbmdWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50
aW5nVmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX3ByZXBhcmVQREZEYXRhRm9y
UHJpbnRpbmdPblNlY29uZGFyeVRocmVhZF0pOgorICAgICAgICAocHJlcGFyZURhdGFGb3JQcmlu
dGluZ09uU2Vjb25kYXJ5VGhyZWFkKToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcga25vd3NQ
YWdlUmFuZ2U6XSk6CisKIDIwMTUtMDgtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggYnVpbGQsIGFuZCBmaXggdGhlIHZlcnNpb24gY2hlY2su
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rl
cnMuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlSU9DaGFubmVsLmgiCi0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTExOSw4ICsxMjEsOCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVHJhdmVyc2VGbGFncyBmbGFnczsKICAgICBjb25zdCBUcmF2
ZXJzZUhhbmRsZXIgaGFuZGxlcjsKIAotICAgIHN0ZDo6bXV0ZXggYWN0aXZlTXV0ZXg7Ci0gICAg
c3RkOjpjb25kaXRpb25fdmFyaWFibGUgYWN0aXZlQ29uZGl0aW9uOworICAgIExvY2sgYWN0aXZl
TXV0ZXg7CisgICAgQ29uZGl0aW9uIGFjdGl2ZUNvbmRpdGlvbjsKICAgICB1bnNpZ25lZCBhY3Rp
dmVDb3VudCB7IDAgfTsKIH07CiAKQEAgLTc3NCw3ICs3NzYsNyBAQCB2b2lkIFN0b3JhZ2U6OnRy
YXZlcnNlKFRyYXZlcnNlRmxhZ3MgZmxhCiAgICAgICAgICAgICBpZiAodHJhdmVyc2VPcGVyYXRp
b24uZmxhZ3MgJiBUcmF2ZXJzZUZsYWc6OlNoYXJlQ291bnQpCiAgICAgICAgICAgICAgICAgYm9k
eVNoYXJlQ291bnQgPSBtX2Jsb2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keVBhdGhGb3JSZWNvcmRQ
YXRoKHJlY29yZFBhdGgpKTsKIAotICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKKyAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7
CiAgICAgICAgICAgICArK3RyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwogCiAgICAgICAg
ICAgICBhdXRvIGNoYW5uZWwgPSBJT0NoYW5uZWw6Om9wZW4ocmVjb3JkUGF0aCwgSU9DaGFubmVs
OjpUeXBlOjpSZWFkKTsKQEAgLTc5Nyw5ICs3OTksOSBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNl
KFRyYXZlcnNlRmxhZ3MgZmxhCiAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlT3BlcmF0aW9u
LmhhbmRsZXIoJnJlY29yZCwgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24u
YWN0aXZlTXV0ZXgpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11dGV4KTsKICAgICAgICAgICAgICAgICAtLXRyYXZl
cnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwotICAgICAgICAgICAgICAgIHRyYXZlcnNlT3BlcmF0
aW9uLmFjdGl2ZUNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgICAgICAgICAgdHJhdmVy
c2VPcGVyYXRpb24uYWN0aXZlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heGltdW1QYXJhbGxlbFJlYWRDb3VudCA9
IDU7CkBAIC04MDgsNyArODEwLDcgQEAgdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZs
YWdzIGZsYQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgICAgICAvLyBXYWl0IGZv
ciBhbGwgcmVhZHMgdG8gZmluaXNoLgotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOworICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPExvY2s+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0ZXgpOwogICAg
ICAgICB0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb25kaXRpb24ud2FpdChsb2NrLCBbJnRyYXZl
cnNlT3BlcmF0aW9uXSB7CiAgICAgICAgICAgICByZXR1cm4gIXRyYXZlcnNlT3BlcmF0aW9uLmFj
dGl2ZUNvdW50OwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBA
QCBwcml2YXRlOgogICAgIEJpbmFyeVNlbWFwaG9yZSBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhv
cmU7CiAKICAgICAvLyBQcm90ZWN0cyBtX2RpZFNjaGVkdWxlRGlzcGF0Y2hNZXNzYWdlc1dvcmtT
ZXQgYW5kIG1fbWVzc2FnZXNUb0Rpc3BhdGNoV2hpbGVXYWl0aW5nRm9yU3luY1JlcGx5LgotICAg
IHN0ZDo6bXV0ZXggbV9tdXRleDsKKyAgICBMb2NrIG1fbXV0ZXg7CiAKICAgICAvLyBUaGUgc2V0
IG9mIGNvbm5lY3Rpb25zIGZvciB3aGljaCB3ZSd2ZSBzY2hlZHVsZWQgYSBjYWxsIHRvIGRpc3Bh
dGNoTWVzc2FnZUFuZFJlc2V0RGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzRm9yQ29ubmVjdGlv
bi4KICAgICBIYXNoU2V0PFJlZlB0cjxDb25uZWN0aW9uPj4gbV9kaWRTY2hlZHVsZURpc3BhdGNo
TWVzc2FnZXNXb3JrU2V0OwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6U3lu
Y01lc3NhZ2VTdGF0ZTo6cHJvY2UKICAgICBDb25uZWN0aW9uQW5kSW5jb21pbmdNZXNzYWdlIGNv
bm5lY3Rpb25BbmRJbmNvbWluZ01lc3NhZ2UgeyBjb25uZWN0aW9uLCBXVEY6Om1vdmUobWVzc2Fn
ZSkgfTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
bV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG1fZGlkU2NoZWR1bGVEaXNwYXRjaE1lc3NhZ2VzV29ya1Nl
dC5hZGQoJmNvbm5lY3Rpb24pLmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDb25u
ZWN0aW9uPiBwcm90ZWN0ZWRDb25uZWN0aW9uKCZjb25uZWN0aW9uKTsKQEAgLTE1NSw3ICsxNTUs
NyBAQCB2b2lkIENvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OmRpc3BhCiAgICAgVmVjdG9y
PENvbm5lY3Rpb25BbmRJbmNvbWluZ01lc3NhZ2U+IG1lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2Fp
dGluZ0ZvclN5bmNSZXBseTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbXV0ZXgpOwogICAgICAgICBtX21lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5
bmNSZXBseS5zd2FwKG1lc3NhZ2VzVG9EaXNwYXRjaFdoaWxlV2FpdGluZ0ZvclN5bmNSZXBseSk7
CiAgICAgfQogCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpTeW5jTWVzc2Fn
ZVN0YXRlOjpkaXNwYQogICAgIH0KIAogICAgIGlmICghbWVzc2FnZXNUb1B1dEJhY2suaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgp
OworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKIAogICAgICAg
ICBmb3IgKGF1dG8mIG1lc3NhZ2UgOiBtZXNzYWdlc1RvUHV0QmFjaykKICAgICAgICAgICAgIG1f
bWVzc2FnZXNUb0Rpc3BhdGNoV2hpbGVXYWl0aW5nRm9yU3luY1JlcGx5LmFwcGVuZChXVEY6Om1v
dmUobWVzc2FnZSkpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6U3luY01l
c3NhZ2VTdGF0ZTo6ZGlzcGEKIHZvaWQgQ29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6ZGlz
cGF0Y2hNZXNzYWdlQW5kUmVzZXREaWRTY2hlZHVsZURpc3BhdGNoTWVzc2FnZXNGb3JDb25uZWN0
aW9uKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCiB7CiAgICAgewotICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tdXRleCk7CiAgICAgICAgIEFTU0VSVChtX2RpZFNjaGVkdWxlRGlzcGF0
Y2hNZXNzYWdlc1dvcmtTZXQuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKICAgICAgICAgbV9kaWRT
Y2hlZHVsZURpc3BhdGNoTWVzc2FnZXNXb3JrU2V0LnJlbW92ZSgmY29ubmVjdGlvbik7CiAgICAg
fQpAQCAtMzYzLDcgKzM2Myw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2Uoc3RkOjp1
bmlxdWUKICNlbmRpZgogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jayhtX291dGdvaW5nTWVzc2FnZXNNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fb3V0Z29pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgbV9vdXRnb2lu
Z01lc3NhZ2VzLmFwcGVuZChXVEY6Om1vdmUoZW5jb2RlcikpOwogICAgIH0KICAgICAKQEAgLTM4
OCw3ICszODgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IENvbm5lY3RpCiAK
ICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBtZXNzYWdlIGlzIGFscmVhZHkgaW4gdGhlIGlu
Y29taW5nIG1lc3NhZ2VzIHF1ZXVlLgogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOworICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7CiAKICAgICAgICAg
Zm9yIChhdXRvIGl0ID0gbV9pbmNvbWluZ01lc3NhZ2VzLmJlZ2luKCksIGVuZCA9IG1faW5jb21p
bmdNZXNzYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+JiBtZXNzYWdlID0gKml0OwpAQCAtNDE0LDcgKzQxNCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gQ29ubmVjdGkKICAgICBXYWl0Rm9y
TWVzc2FnZVN0YXRlIHdhaXRpbmdGb3JNZXNzYWdlKG1lc3NhZ2VSZWNlaXZlck5hbWUsIG1lc3Nh
Z2VOYW1lLCBkZXN0aW5hdGlvbklELCB3YWl0Rm9yTWVzc2FnZUZsYWdzKTsKIAogICAgIHsKLSAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV93YWl0Rm9yTWVzc2FnZU11
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV93YWl0Rm9yTWVzc2Fn
ZU11dGV4KTsKIAogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGhhdmluZyBtdWx0aXBsZSBj
bGllbnRzIHdhaXRpbmcgZm9yIG1lc3NhZ2VzLgogICAgICAgICBBU1NFUlQoIW1fd2FpdGluZ0Zv
ck1lc3NhZ2UpOwpAQCAtNDIzLDggKzQyMyw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVj
b2Rlcj4gQ29ubmVjdGkKICAgICB9CiAKICAgICAvLyBOb3cgd2FpdCBmb3IgaXQgdG8gYmUgc2V0
LgorICAgIENvbmRpdGlvbjo6Q2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVUaW1lb3V0ID0gQ29u
ZGl0aW9uOjpDbG9jazo6bm93KCkgKyB0aW1lb3V0OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0
ZXgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV93YWl0Rm9yTWVzc2Fn
ZU11dGV4KTsKIAogICAgICAgICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZS0+ZGVjb2Rlcikgewog
ICAgICAgICAgICAgYXV0byBkZWNvZGVyID0gV1RGOjptb3ZlKG1fd2FpdGluZ0Zvck1lc3NhZ2Ut
PmRlY29kZXIpOwpAQCAtNDMzLDkgKzQzNCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVj
b2Rlcj4gQ29ubmVjdGkKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vdyB3ZSB3YWl0LgotICAg
ICAgICBzdGQ6OmN2X3N0YXR1cyBzdGF0dXMgPSBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLndh
aXRfZm9yKGxvY2ssIHRpbWVvdXQpOworICAgICAgICBib29sIGRpZFRpbWVvdXQgPSAhbV93YWl0
Rm9yTWVzc2FnZUNvbmRpdGlvbi53YWl0VW50aWwobG9jaywgYWJzb2x1dGVUaW1lb3V0KTsKICAg
ICAgICAgLy8gV2UgdGltZWQgb3V0LCBsb3N0IG91ciBjb25uZWN0aW9uLCBvciBhIHN5bmMgbWVz
c2FnZSBjYW1lIGluIHdpdGggSW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzLCBz
byBzdG9wIHdhaXRpbmcuCi0gICAgICAgIGlmIChzdGF0dXMgPT0gc3RkOjpjdl9zdGF0dXM6OnRp
bWVvdXQgfHwgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZVdhaXRpbmdJbnRlcnJ1cHRlZCkK
KyAgICAgICAgaWYgKGRpZFRpbWVvdXQgfHwgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZVdh
aXRpbmdJbnRlcnJ1cHRlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjcwLDcg
KzY3MSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgKICNlbmRp
ZgogCiAgICAgaWYgKG1lc3NhZ2UtPmlzU3luY01lc3NhZ2UoKSkgewotICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011
dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ1N5bmNN
ZXNzYWdlQ2FsbGJhY2tNdXRleCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1f
aW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrcy52YWx1ZXMoKSkKICAgICAgICAgICAgIG1faW5j
b21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrUXVldWUtPmRpc3BhdGNoKGNhbGxiYWNrKTsKQEAgLTY4
NiwxOCArNjg3LDE4IEBAIHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZSgK
IAogICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdhaXRpbmcgZm9yIHRoaXMgbWVzc2FnZS4KICAgICB7
Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fd2FpdEZvck1lc3Nh
Z2VNdXRleCk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fd2FpdEZvck1l
c3NhZ2VNdXRleCk7CiAKICAgICAgICAgaWYgKG1fd2FpdGluZ0Zvck1lc3NhZ2UgJiYgbV93YWl0
aW5nRm9yTWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSA9PSBtZXNzYWdlLT5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgJiYgbV93YWl0aW5nRm9yTWVzc2FnZS0+bWVzc2FnZU5hbWUgPT0gbWVzc2Fn
ZS0+bWVzc2FnZU5hbWUoKSAmJiBtX3dhaXRpbmdGb3JNZXNzYWdlLT5kZXN0aW5hdGlvbklEID09
IG1lc3NhZ2UtPmRlc3RpbmF0aW9uSUQoKSkgewogICAgICAgICAgICAgbV93YWl0aW5nRm9yTWVz
c2FnZS0+ZGVjb2RlciA9IFdURjo6bW92ZShtZXNzYWdlKTsKICAgICAgICAgICAgIEFTU0VSVCht
X3dhaXRpbmdGb3JNZXNzYWdlLT5kZWNvZGVyKTsKLSAgICAgICAgICAgIG1fd2FpdEZvck1lc3Nh
Z2VDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAgICAgbV93YWl0Rm9yTWVzc2FnZUNv
bmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX3dhaXRpbmdGb3JNZXNzYWdlICYmIChtX3dhaXRpbmdGb3JNZXNzYWdlLT53
YWl0Rm9yTWVzc2FnZUZsYWdzICYgSW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVz
KSAmJiBtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpIHsKICAgICAgICAgICAgIG1fd2FpdGluZ0Zv
ck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJydXB0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
bV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgICAgICBtX3dh
aXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC03MDYsNyArNzA3LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdl
KAogCiB1aW50NjRfdCBDb25uZWN0aW9uOjppbnN0YWxsSW5jb21pbmdTeW5jTWVzc2FnZUNhbGxi
YWNrKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2FsbGJhY2spCiB7Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7
CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2Fs
bGJhY2tNdXRleCk7CiAKICAgICBtX25leHRJbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tJRCsr
OwogCkBAIC03MjAsMTMgKzcyMSwxMyBAQCB1aW50NjRfdCBDb25uZWN0aW9uOjppbnN0YWxsSW5j
b21pbmdTeW5jCiAKIHZvaWQgQ29ubmVjdGlvbjo6dW5pbnN0YWxsSW5jb21pbmdTeW5jTWVzc2Fn
ZUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tNdXRleCk7CisgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tN
dXRleCk7CiAgICAgbV9pbmNvbWluZ1N5bmNNZXNzYWdlQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFj
a0lEKTsKIH0KIAogYm9vbCBDb25uZWN0aW9uOjpoYXNJbmNvbWluZ1N5bmNNZXNzYWdlKCkKIHsK
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNN
dXRleCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9pbmNvbWluZ01lc3NhZ2Vz
TXV0ZXgpOwogCiAgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogbV9pbmNvbWluZ01lc3NhZ2VzKSB7
CiAgICAgICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpCkBAIC03NjMsMTEgKzc2NCwx
MSBAQCB2b2lkIENvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSgpCiAgICAgfQogCiAgICAg
ewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX3dhaXRGb3JNZXNz
YWdlTXV0ZXgpOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3dhaXRGb3JN
ZXNzYWdlTXV0ZXgpOwogICAgICAgICBpZiAobV93YWl0aW5nRm9yTWVzc2FnZSkKICAgICAgICAg
ICAgIG1fd2FpdGluZ0Zvck1lc3NhZ2UtPm1lc3NhZ2VXYWl0aW5nSW50ZXJydXB0ZWQgPSB0cnVl
OwogICAgIH0KLSAgICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAg
ICBtX3dhaXRGb3JNZXNzYWdlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwogCiAgICAgaWYgKG1fZGlk
Q2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWVDYWxsYmFjaykKICAgICAgICAgbV9kaWRDbG9zZU9u
Q29ubmVjdGlvbldvcmtRdWV1ZUNhbGxiYWNrKHRoaXMpOwpAQCAtODAzLDcgKzgwNCw3IEBAIHZv
aWQgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZXMoKQogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWVzc2FnZUVuY29kZXI+IG1lc3NhZ2U7CiAKICAgICAgICAgewotICAgICAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXgp
OworICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9vdXRnb2luZ01lc3Nh
Z2VzTXV0ZXgpOwogICAgICAgICAgICAgaWYgKG1fb3V0Z29pbmdNZXNzYWdlcy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBtZXNzYWdlID0gbV9vdXRnb2lu
Z01lc3NhZ2VzLnRha2VGaXJzdCgpOwpAQCAtODYyLDcgKzg2Myw3IEBAIHZvaWQgQ29ubmVjdGlv
bjo6ZGlkRmFpbFRvU2VuZFN5bmNNZXNzYWcKIHZvaWQgQ29ubmVjdGlvbjo6ZW5xdWV1ZUluY29t
aW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IGluY29taW5nTWVzc2Fn
ZSkKIHsKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1f
aW5jb21pbmdNZXNzYWdlc011dGV4KTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxv
Y2sobV9pbmNvbWluZ01lc3NhZ2VzTXV0ZXgpOwogICAgICAgICBtX2luY29taW5nTWVzc2FnZXMu
YXBwZW5kKFdURjo6bW92ZShpbmNvbWluZ01lc3NhZ2UpKTsKICAgICB9CiAKQEAgLTkxOCw3ICs5
MTksNyBAQCB2b2lkIENvbm5lY3Rpb246OmRpc3BhdGNoT25lTWVzc2FnZSgpCiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBtZXNzYWdlOwogCiAgICAgewotICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtX2luY29taW5nTWVzc2FnZXNNdXRleCk7Cisg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4
KTsKICAgICAgICAgaWYgKG1faW5jb21pbmdNZXNzYWdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24u
aAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NUeXBlLmgiCiAjaW5jbHVkZSA8YXRvbWlj
PgotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMjU5LDE1ICsyNTksMTUgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlOwogCiAgICAgLy8gSW5jb21pbmcgbWVz
c2FnZXMuCi0gICAgc3RkOjptdXRleCBtX2luY29taW5nTWVzc2FnZXNNdXRleDsKKyAgICBMb2Nr
IG1faW5jb21pbmdNZXNzYWdlc011dGV4OwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxNZXNz
YWdlRGVjb2Rlcj4+IG1faW5jb21pbmdNZXNzYWdlczsKIAogICAgIC8vIE91dGdvaW5nIG1lc3Nh
Z2VzLgotICAgIHN0ZDo6bXV0ZXggbV9vdXRnb2luZ01lc3NhZ2VzTXV0ZXg7CisgICAgTG9jayBt
X291dGdvaW5nTWVzc2FnZXNNdXRleDsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8TWVzc2Fn
ZUVuY29kZXI+PiBtX291dGdvaW5nTWVzc2FnZXM7CiAgICAgCi0gICAgc3RkOjpjb25kaXRpb25f
dmFyaWFibGUgbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlvbjsKLSAgICBzdGQ6Om11dGV4IG1fd2Fp
dEZvck1lc3NhZ2VNdXRleDsKKyAgICBDb25kaXRpb24gbV93YWl0Rm9yTWVzc2FnZUNvbmRpdGlv
bjsKKyAgICBMb2NrIG1fd2FpdEZvck1lc3NhZ2VNdXRleDsKIAogICAgIFdhaXRGb3JNZXNzYWdl
U3RhdGUqIG1fd2FpdGluZ0Zvck1lc3NhZ2U7CiAKQEAgLTMwNyw3ICszMDcsNyBAQCBwcml2YXRl
OgogICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU2Vjb25kYXJ5VGhyZWFkUGVuZGluZ1N5
bmNSZXBseSo+IFNlY29uZGFyeVRocmVhZFBlbmRpbmdTeW5jUmVwbHlNYXA7CiAgICAgU2Vjb25k
YXJ5VGhyZWFkUGVuZGluZ1N5bmNSZXBseU1hcCBtX3NlY29uZGFyeVRocmVhZFBlbmRpbmdTeW5j
UmVwbHlNYXA7CiAKLSAgICBzdGQ6Om11dGV4IG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNr
TXV0ZXg7CisgICAgTG9jayBtX2luY29taW5nU3luY01lc3NhZ2VDYWxsYmFja011dGV4OwogICAg
IEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1faW5jb21pbmdTeW5j
TWVzc2FnZUNhbGxiYWNrczsKICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX2luY29taW5nU3luY01l
c3NhZ2VDYWxsYmFja1F1ZXVlOwogICAgIHVpbnQ2NF90IG1fbmV4dEluY29taW5nU3luY01lc3Nh
Z2VDYWxsYmFja0lEIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0Jsb2NraW5n
UmVzcG9uc2VNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQmxvY2tp
bmdSZXNwb25zZU1hcC5oCShyZXZpc2lvbiAxODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQmxvY2tpbmdSZXNwb25zZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBA
CiAjaWZuZGVmIEJsb2NraW5nUmVzcG9uc2VNYXBfaAogI2RlZmluZSBCbG9ja2luZ1Jlc3BvbnNl
TWFwX2gKIAotI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpA
QCAtNDAsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IHdhaXRGb3JS
ZXNwb25zZSh1aW50NjRfdCByZXF1ZXN0SUQpCiAgICAgewogICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgp
OworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fbXV0ZXgpOwogCiAg
ICAgICAgICAgICBpZiAobV9jYW5jZWxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTU2LDI2ICs1NywyNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZSh1aW50NjRfdCByZXF1ZXN0SUQsIHN0ZDo6dW5pcXVlX3B0cjxUPiByZXNwb25zZSkKICAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgQVNT
RVJUKCFtX3Jlc3BvbnNlcy5jb250YWlucyhyZXF1ZXN0SUQpKTsKIAogICAgICAgICBtX3Jlc3Bv
bnNlcy5zZXQocmVxdWVzdElELCBXVEY6Om1vdmUocmVzcG9uc2UpKTsKIAotICAgICAgICAvLyBG
SVhNRTogV2FraW5nIHVwIGFsbCB0aHJlYWRzIGlzIHF1aXRlIGluZWZmaWNpZW50LgotICAgICAg
ICBtX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBDb3VsZCBnZXQg
YSBzbGlnaHQgc3BlZWQtdXAgZnJvbSB1c2luZyBub3RpZnlPbmUoKS4KKyAgICAgICAgbV9jb25k
aXRpb24ubm90aWZ5QWxsKCk7CiAgICAgfQogCiAgICAgdm9pZCBjYW5jZWwoKQogICAgIHsKICAg
ICAgICAgbV9jYW5jZWxlZCA9IHRydWU7CiAKLSAgICAgICAgLy8gRklYTUU6IFdha2luZyB1cCBh
bGwgdGhyZWFkcyBpcyBxdWl0ZSBpbmVmZmljaWVudC4KLSAgICAgICAgbV9jb25kaXRpb24ubm90
aWZ5X2FsbCgpOworICAgICAgICAvLyBGSVhNRTogQ291bGQgZ2V0IGEgc2xpZ2h0IHNwZWVkLXVw
IGZyb20gdXNpbmcgbm90aWZ5T25lKCkuCisgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6Om11dGV4IG1fbXV0ZXg7Ci0gICAgc3RkOjpj
b25kaXRpb25fdmFyaWFibGUgbV9jb25kaXRpb247CisgICAgTG9jayBtX211dGV4OworICAgIENv
bmRpdGlvbiBtX2NvbmRpdGlvbjsKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVl
X3B0cjxUPj4gbV9yZXNwb25zZXM7CiAgICAgYm9vbCBtX2NhbmNlbGVkOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9D
YWNoZS5jcHAJKHJldmlzaW9uIDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3
OSw3IEBAIFBsdWdpbkluZm9DYWNoZTo6flBsdWdpbkluZm9DYWNoZSgpCiAKIHZvaWQgUGx1Z2lu
SW5mb0NhY2hlOjpzYXZlVG9GaWxlKCkKIHsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9jayhtX211dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4
KTsKIAogICAgIGdzaXplIGRhdGFMZW5ndGg7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBkYXRhKGdf
a2V5X2ZpbGVfdG9fZGF0YShtX2NhY2hlRmlsZS5nZXQoKSwgJmRhdGFMZW5ndGgsIG51bGxwdHIp
KTsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFBsdWdpbkluZm9DYWNoZTo6dXBkYXRlUGx1Z2lu
SW5mbyhjCiAgICAgaWYgKG1fY2FjaGVQYXRoICYmICFtX3JlYWRPbmx5TW9kZSkgewogICAgICAg
ICAvLyBTYXZlIHRoZSBjYWNoZSBmaWxlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIGl0IGhhcHBl
bnMgaW4gdGhlIG1haW4gdGhyZWFkIGFuZAogICAgICAgICAvLyBpdCdzIGRvbmUgb25seSBvbmNl
IHdoZW4gdGhpcyBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaW4gYSB2ZXJ5IHNob3J0IHRpbWUu
Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4KTsKICAgICAgICAgaWYgKG1f
c2F2ZVRvRmlsZUlkbGUuaXNTY2hlZHVsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVn
aW5JbmZvQ2FjaGUuaAkocmV2aXNpb24gMTg4NjEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW5jbHVkZSA8bXV0
ZXg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KICNpbmNsdWRlIDx3dGYv
Z2xpYi9HVW5pcXVlUHRyLmg+CkBAIC01NSw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBtX2NhY2hlUGF0aDsKICAgICBHTWFpbkxvb3BTb3VyY2UgbV9zYXZlVG9GaWxl
SWRsZTsKICAgICBib29sIG1fcmVhZE9ubHlNb2RlOwotICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsK
KyAgICBMb2NrIG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3LmgJKHJldmlzaW9u
IDE4ODYxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW1wb3J0IDxXZWJDb3JlL0lu
dFJlY3RIYXNoLmg+CiAjaW1wb3J0IDxjb25kaXRpb25fdmFyaWFibGU+CisjaW1wb3J0IDx3dGYv
Q29uZGl0aW9uLmg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCkBAIC01Nyw4ICs1OSw4IEBAIEBpbnRlcmZh
Y2UgV0tQcmludGluZ1ZpZXcgOiBOU1ZpZXcgewogICAgIHVpbnQ2NF90IF9leHBlY3RlZFByaW50
Q2FsbGJhY2s7CiAKICAgICBCT09MIF9pc1ByaW50aW5nRnJvbVNlY29uZGFyeVRocmVhZDsKLSAg
ICBzdGQ6Om11dGV4IF9wcmludGluZ0NhbGxiYWNrTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25f
dmFyaWFibGUgX3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb247CisgICAgTG9jayBfcHJpbnRpbmdD
YWxsYmFja011dGV4OworICAgIENvbmRpdGlvbiBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlvbjsK
IAogICAgIE5TVGltZXIgKl9hdXRvZGlzcGxheVJlc3VtZVRpbWVyOwogfQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiAx
ODg2MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsMTEgKzI0MiwxMSBAQCAtICh2b2lkKV9wcmVwYXJlUERG
RGF0YUZvclByaW50aW5nT25TZWNvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIGlmICghX3dlYkZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgX3ByaW50aW5nQ2FsbGJhY2tD
b25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICBfcHJpbnRpbmdDYWxsYmFja0NvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6bG9ja19n
dWFyZDxzdGQ6Om11dGV4PiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKF9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOwogCiAgICAgQVNT
RVJUKFtzZWxmIF9oYXNQYWdlUmVjdHNdKTsKICAgICBBU1NFUlQoX3ByaW50ZWRQYWdlc0RhdGEu
aXNFbXB0eSgpKTsKQEAgLTI3OCw3ICsyNzgsNyBAQCAtICh2b2lkKV9wcmVwYXJlUERGRGF0YUZv
clByaW50aW5nT25TZWNvCiAgICAgICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgICAgICB2
aWV3LT5fcHJpbnRlZFBhZ2VzRGF0YS5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgp
KTsKICAgICAgICAgICAgIHZpZXctPl9leHBlY3RlZFByaW50Q2FsbGJhY2sgPSAwOwotICAgICAg
ICAgICAgdmlldy0+X3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAg
ICAgICAgICAgdmlldy0+X3ByaW50aW5nQ2FsbGJhY2tDb25kaXRpb24ubm90aWZ5T25lKCk7CiAg
ICAgICAgIH0KICAgICB9KTsKICAgICBfZXhwZWN0ZWRQcmludENhbGxiYWNrID0gY2FsbGJhY2st
PmNhbGxiYWNrSUQoKTsKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRGF0
YUZvclByaW50aW5nT25TZWNvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IFdLUHJpbnRpbmdWaWV3ICp2aWV3ID0gc3RhdGljX2Nhc3Q8V0tQcmludGluZ1ZpZXcgKj4odW50
eXBlZENvbnRleHQpOwotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHZpZXct
Pl9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KHZpZXctPl9wcmludGluZ0NhbGxiYWNrTXV0ZXgpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUgcmVj
ZWl2ZWQgcGFnZSByZWN0cyB3aGlsZSBhIG1lc3NhZ2UgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRy
YXZlbGVkIGZyb20gc2Vjb25kYXJ5IHRocmVhZCB0byBtYWluIG9uZS4KICAgICBpZiAoW3ZpZXcg
X2hhc1BhZ2VSZWN0c10pIHsKQEAgLTM5NSw3ICszOTUsNyBAQCAtIChCT09MKWtub3dzUGFnZVJh
bmdlOihOU1JhbmdlUG9pbnRlcilyCiAgICAgICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9w
cmludGluZ1BhZ2VSZWN0cy5zaXplKCkpOwogICAgIGVsc2UgaWYgKCFSdW5Mb29wOjppc01haW4o
KSkgewogICAgICAgICBBU1NFUlQoIVtzZWxmIF9pc1ByaW50aW5nUHJldmlld10pOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2soX3ByaW50aW5nQ2FsbGJhY2tNdXRl
eCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhfcHJpbnRpbmdDYWxsYmFj
a011dGV4KTsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChwcmVwYXJlRGF0YUZvclByaW50aW5n
T25TZWNvbmRhcnlUaHJlYWQsIHNlbGYpOwogICAgICAgICBfcHJpbnRpbmdDYWxsYmFja0NvbmRp
dGlvbi53YWl0KGxvY2spOwogICAgICAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgxLCBfcHJpbnRp
bmdQYWdlUmVjdHMuc2l6ZSgpKTsK
</data>
<flag name="review"
          id="284524"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>