<?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>116060</bug_id>
          
          <creation_ts>2013-05-13 14:15:43 -0700</creation_ts>
          <short_desc>fourthTier: DFG should separate link phase into things that must be done concurrently and things that must be done synchronously, and have a way of passing data from one to the other</short_desc>
          <delta_ts>2013-05-15 12:38:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>888523</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-13 14:15:43 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888524</commentid>
    <comment_count>1</comment_count>
      <attachid>201633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-13 14:18:03 -0700</bug_when>
    <thetext>Created attachment 201633
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889047</commentid>
    <comment_count>2</comment_count>
      <attachid>201765</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-14 15:29:38 -0700</bug_when>
    <thetext>Created attachment 201765
work in progress

It seems like it&apos;s starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889065</commentid>
    <comment_count>3</comment_count>
      <attachid>201771</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-14 16:49:44 -0700</bug_when>
    <thetext>Created attachment 201771
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889385</commentid>
    <comment_count>4</comment_count>
      <attachid>201853</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 10:22:40 -0700</bug_when>
    <thetext>Created attachment 201853
the patch

Disassembly-related fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889405</commentid>
    <comment_count>5</comment_count>
      <attachid>201853</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-15 11:11:11 -0700</bug_when>
    <thetext>Comment on attachment 201853
the patch

I buy that Plan can be a struct for now.  I expect that over time we&apos;ll want this to be a class, but we&apos;ll see. :-)
Might be worth considering making some of the immutable data members const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889443</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 12:33:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 201853 [details])
&gt; I buy that Plan can be a struct for now.  I expect that over time we&apos;ll want this to be a class, but we&apos;ll see. :-)
&gt; Might be worth considering making some of the immutable data members const.

Yup, I&apos;ve made some of the things const!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889450</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-15 12:38:37 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/150139</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201633</attachid>
            <date>2013-05-13 14:18:03 -0700</date>
            <delta_ts>2013-05-14 15:29:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBA
CisyMDEzLTA1LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBzZXBhcmF0ZSBsaW5rIHBoYXNlIGludG8gdGhpbmdzIHRo
YXQgbXVzdCBiZSBkb25lIGNvbmN1cnJlbnRseSBhbmQgdGhpbmdzIHRoYXQgbXVzdCBiZSBkb25l
IHN5bmNocm9ub3VzbHksIGFuZCBoYXZlIGEgd2F5IG9mIHBhc3NpbmcgZGF0YSBmcm9tIG9uZSB0
byB0aGUgb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNjA2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5r
QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKExpbmtCdWZm
ZXIpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpT
Qzo6TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOgorICAgICAgICAqIGRmZy9ERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RmFp
bGVkRmluYWxpemVyOjpGYWlsZWRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxl
ZEZpbmFsaXplcjo6fkZhaWxlZEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkRGRzo6RmFpbGVk
RmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RmFpbGVkRmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZhaWxlZEZpbmFsaXplcik6CisgICAg
ICAgICogZGZnL0RGR0ZpbmFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpGaW5hbGl6ZXI6OkZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkRGRzo6
RmluYWxpemVyOjp+RmluYWxpemVyKToKKyAgICAgICAgKiBkZmcvREZHRmluYWxpemVyLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZpbmFsaXplcik6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6
CisgICAgICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSklUQ29t
cGlsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRMYXppbHkpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkRG
Rzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxp
emVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplQ29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpJVEZpbmFsaXplcik6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6flBsYW4pOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
cmVhbGx5QWRkKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjp2bSk6CisgICAg
ICAgICogZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGZ0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6
OkZUTDo6SklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxp
emVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6IEFkZGVkLgorICAg
ICAgICAoRlRMKToKKyAgICAgICAgKEpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6
SklURmluYWxpemVyOjppbml0aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIpOgorICAgICAgICAo
SlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVDb2RlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplQXJpdHlDaGVjayk6CisgICAgICAg
IChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaWV6SklUQ29kZSk6CisgICAgICAgICog
ZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0
bC9GVExMaW5rLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBmdGwvRlRMU3Rh
dGUuaDoKKyAgICAgICAgKEZUTCk6CisKIDIwMTMtMDUtMTEgIE1hcmsgSGFobmVuYmVyZyAgPG1o
YWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU3RydWN0dXJlQ2hlY2tIb2lz
dGluZ1BoYXNlIHRvIFR5cGVDaGVja0hvaXN0aW5nUGhhc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMTUwMDE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKICNpbmNs
dWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xNDYsNiArMTQ3LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5r
Q29kZSh2b2lkKiBvd25lclVJRAogdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9u
KCkKIHsKICNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwogICAgIEFTU0VSVCghbV9jb21wbGV0ZWQpOwogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAg
IG1fY29tcGxldGVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNTAwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkpJVENvbXBpbGF0aW9uRWZmb3J0LmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNTgsNyArNTksOCBAQCBjbGFzcyBWTTsKIC8vICAgKiBUaGUgdmFsdWUgcmVmZXJl
bmNlZCBieSBhIERhdGFMYWJlbCBtYXkgYmUgc2V0LgogLy8KIGNsYXNzIExpbmtCdWZmZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpbmtCdWZmZXIpOworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExpbmtCdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKICAgICB0
eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwogICAgIHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgTGFiZWw7CkBAIC04Niw3ICs4OCw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3ZtKCZ2bSkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCi0gICAgICAgICwg
bV9lZmZvcnQoZWZmb3J0KQogI2VuZGlmCiAgICAgewogICAgICAgICBsaW5rQ29kZShvd25lclVJ
RCwgZWZmb3J0KTsKQEAgLTk0LDcgKzk1LDYgQEAgcHVibGljOgogCiAgICAgfkxpbmtCdWZmZXIo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY29tcGxldGVkIHx8ICghbV9leGVjdXRhYmxlTWVt
b3J5ICYmIG1fZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkpOwogICAgIH0KICAgICAK
ICAgICBib29sIGRpZEZhaWxUb0FsbG9jYXRlKCkgY29uc3QKQEAgLTI2NCw3ICsyNjQsNiBAQCBw
cml2YXRlOgogICAgIFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxl
dGVkOwotICAgIEpJVENvbXBpbGF0aW9uRWZmb3J0IG1fZWZmb3J0OwogI2VuZGlmCiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRmFpbGVkRmluYWxpemVyOjpGYWls
ZWRGaW5hbGl6ZXIoUGxhbiYgcGxhbikKKyAgICA6IEZpbmFsaXplcihwbGFuKQoreworfQorCitG
YWlsZWRGaW5hbGl6ZXI6On5GYWlsZWRGaW5hbGl6ZXIoKQoreworfQorCitib29sIEZhaWxlZEZp
bmFsaXplcjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24o
UmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhB
cml0eUNoZWNrKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZhaWxlZEZpbmFsaXplcl9oCisjZGVmaW5lIERGR0Zh
aWxlZEZpbmFsaXplcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRmFpbGVkRmluYWxpemVyIDogcHVibGljIEZpbmFs
aXplciB7CitwdWJsaWM6CisgICAgRmFpbGVkRmluYWxpemVyKFBsYW4mKTsKKyAgICB2aXJ0dWFs
IH5GYWlsZWRGaW5hbGl6ZXIoKTsKKyAgICAKKyAgICBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6
OkpJVENvZGU+JiBlbnRyeSk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6
OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjayk7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0ZhaWxlZEZpbmFsaXplcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitGaW5hbGl6ZXI6OkZpbmFsaXplcihQbGFuJiBwbGFuKQor
ICAgIDogbV9wbGFuKHBsYW4pCit7Cit9CisKK0ZpbmFsaXplcjo6fkZpbmFsaXplcigpCit7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGaW5hbGl6ZXJfaAorI2RlZmluZSBERkdGaW5h
bGl6ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IFBs
YW47CisKK2NsYXNzIEZpbmFsaXplciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmluYWxp
emVyKTsgV1RGX01BS0VfRkFTVF9BTGxPQ0FURUQ7CitwdWJsaWM6CisgICAgRmluYWxpemVyKFBs
YW4mKTsKKyAgICB2aXJ0dWFsIH5GaW5hbGl6ZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBQ
bGFuJiBtX3BsYW47Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZpbmFsaXplcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAwMTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDEyICs0MzAsNiBAQCB2b2lkIEdyYXBoOjpyZXNldEV4aXRTdGF0ZXMoKQogICAgIH0KIH0K
IAotYm9vbCBHcmFwaDo6aXNTdGlsbFZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93YXRj
aHBvaW50cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9jaGFpbnMuYXJlU3RpbGxWYWxp
ZCgpOwotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUwMDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICsz
NCw2IEBACiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Fz
c2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJE
RkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zLmgiCi0jaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiCiAjaW5jbHVkZSAiREZH
RG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHTm9kZS5oIgpAQCAtNjk2LDExICs2OTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKLSAgICAKICAgICBWTSYgbV92
bTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIFJlZlB0cjxQcm9maWxlcjo6Q29t
cGlsYXRpb24+IG1fY29tcGlsYXRpb247CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7
CiAgICAgCiAgICAgTm9kZUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CkBAIC03MjUsOSArNzE5LDYg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiAgICAgdW5zaWduZWQg
bV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFu
ZGxlVmFsdWVzOwotICAgIERlc2lyZWRXYXRjaHBvaW50cyBtX3dhdGNocG9pbnRzOwotICAgIERl
c2lyZWRJZGVudGlmaWVycyBtX2lkZW50aWZpZXJzOwotICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFp
bnMgbV9jaGFpbnM7CiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBv
aW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTAwMTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksOSBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgorI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdS
ZWdpc3RlckJhbmsuaCIKQEAgLTI0NSwxMiArMjQ3LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1faml0Q29kZS0+c2hyaW5rVG9GaXQoKTsK
ICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKLSAg
ICAKLSAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKCk7Ci0gICAgbV9ncmFwaC5t
X2lkZW50aWZpZXJzLnJlYWxseUFkZCgqbV92bSk7CiB9CiAKLWJvb2wgSklUQ29tcGlsZXI6OmNv
bXBpbGUoKQordm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiB7CiAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CiAKQEAgLTI2OSwzNCArMjY4LDI1IEBA
IGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkgdHJh
bXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIG1fc3BlY3VsYXRpdmUtPmNyZWF0ZU9TUkVudHJp
ZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKLQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEpJVENvbXBpbGVyOjpsaW5rKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKK3ZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoKQogewotICAgIGlmICghbV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92
bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGxpbmsobGlua0J1ZmZlcik7Ci0gICAgbV9zcGVjdWxhdGl2ZS0+bGlua09TUkVudHJpZXMobGlu
a0J1ZmZlcik7Ci0KLSAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIpOwotICAgIGlmIChtX2dyYXBoLm1fY29tcGls
YXRpb24pIHsKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9ncmFw
aC5tX2NvbXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2dyYXBoLm1fY29tcGlsYXRpb24pOwor
ICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZm
ZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpKTsKKyAg
ICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBtX2dyYXBo
Lm1fcGxhbi5tX2ZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIobV9ncmFw
aC5tX3BsYW4pKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAKKyAgICBsaW5rKCpsaW5r
QnVmZmVyKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcygqbGlua0J1ZmZlcik7
CiAKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOwotICAgIHJl
dHVybiB0cnVlOworICAgIG1fZ3JhcGgubV9wbGFuLm1fZmluYWxpemVyID0gYWRvcHRQdHIobmV3
IEpJVEZpbmFsaXplcigKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1fZGlzYXNzZW1ibGVyLnJl
bGVhc2UoKSwgbV9qaXRDb2RlLnJlbGVhc2UoKSwKKyAgICAgICAgbGlua0J1ZmZlci5yZWxlYXNl
KCkpKTsKIH0KIAotYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKK3ZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CiAgICAgCkBAIC0zNjYsMzcgKzM1NiwyNiBAQCBib29s
IEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIC8vIENyZWF0ZSBPU1IgZW50cnkg
dHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIG1fc3BlY3VsYXRpdmUtPmNyZWF0ZU9TUkVu
dHJpZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBKSVRDb21waWxlcjo6bGlua0Z1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBl
bnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKQordm9pZCBK
SVRDb21waWxlcjo6bGlua0Z1bmN0aW9uKCkKIHsKLSAgICBpZiAoIW1fZ3JhcGguaXNTdGlsbFZh
bGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vID09PSBMaW5rID09PQotICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGxpbmsobGlua0J1ZmZlcik7Ci0gICAgbV9zcGVj
dWxhdGl2ZS0+bGlua09TUkVudHJpZXMobGlua0J1ZmZlcik7CisgICAgT3duUHRyPExpbmtCdWZm
ZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9j
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkpOworICAgIGlmIChsaW5rQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4ubV9maW5hbGl6ZXIg
PSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKG1fZ3JhcGgubV9wbGFuKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbGluaygqbGlua0J1ZmZlcik7CisgICAgbV9zcGVjdWxhdGl2
ZS0+bGlua09TUkVudHJpZXMoKmxpbmtCdWZmZXIpOwogICAgIAogICAgIC8vIEZJWE1FOiBzd2l0
Y2ggdGhlIHN0YWNrIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5
bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCi0gICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbFN0YWNr
Q2hlY2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbEFyaXR5
Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2Fy
aXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKKyAgICBsaW5rQnVmZmVyLT5saW5r
KG1fY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1ZmZlci0+bGlu
ayhtX2NhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29w
X2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CiAgICAgCi0g
ICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
ZHVtcChsaW5rQnVmZmVyKTsKLSAgICBpZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uKSB7Ci0gICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fZ3JhcGgubV9jb21waWxhdGlv
bi5nZXQoKSwgbGlua0J1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9ncmFwaC5tX2NvbXBpbGF0aW9uKTsKLSAgICB9Ci0KLSAgICBl
bnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7
Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihsaW5rQnVmZmVyLmZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBlbnRyeSA9IG1faml0Q29kZTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBtX2dyYXBoLm1fcGxhbi5tX2ZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBK
SVRGaW5hbGl6ZXIoCisgICAgICAgIG1fZ3JhcGgubV9wbGFuLCBtX2Rpc2Fzc2VtYmxlci5yZWxl
YXNlKCksIG1faml0Q29kZS5yZWxlYXNlKCksCisgICAgICAgIGxpbmtCdWZmZXIucmVsZWFzZSgp
LCBtX2FyaXR5Q2hlY2spKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUw
MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsMjIgKzI0NywyMiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXIo
R3JhcGgmIGRmZyk7CiAgICAgfkpJVENvbXBpbGVyKCk7CiAgICAgCi0gICAgYm9vbCBjb21waWxl
KCk7Ci0gICAgYm9vbCBjb21waWxlRnVuY3Rpb24oKTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKyAg
ICB2b2lkIGNvbXBpbGVGdW5jdGlvbigpOwogICAgIAotICAgIGJvb2wgbGluayhSZWZQdHI8SlND
OjpKSVRDb2RlPiYgZW50cnkpOwotICAgIGJvb2wgbGlua0Z1bmN0aW9uKFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNr
KTsKKyAgICB2b2lkIGxpbmsoKTsKKyAgICB2b2lkIGxpbmtGdW5jdGlvbigpOwogCiAgICAgLy8g
QWNjZXNzb3JzIGZvciBwcm9wZXJ0aWVzLgogICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1f
Z3JhcGg7IH0KICAgICAKICAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fd2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLm1f
d2F0Y2hwb2ludHMuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CiAgICAgfQogICAgIHZvaWQg
YWRkTGF6aWx5KFdhdGNocG9pbnQqIHdhdGNocG9pbnQsIElubGluZVdhdGNocG9pbnRTZXQmIHNl
dCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgubV93YXRjaHBvaW50cy5hZGRMYXppbHkod2F0Y2hw
b2ludCwgc2V0KTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4ubV93YXRjaHBvaW50cy5hZGRMYXpp
bHkod2F0Y2hwb2ludCwgc2V0KTsKICAgICB9CiAgICAgCiAgICAgLy8gTWV0aG9kcyB0byBzZXQg
bGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdKSVRGaW5hbGl6ZXIuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworSklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYg
cGxhbiwgUGFzc093blB0cjxEaXNhc3NlbWJsZXI+IGRpc2Fzc2VtYmxlciwgUGFzc1JlZlB0cjxK
SVRDb2RlPiBqaXRDb2RlLCBQYXNzT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrKQorICAgIDogbV9kaXNhc3NlbWJsZXIoZGlzYXNz
ZW1ibGVyKQorICAgICwgbV9qaXRDb2RlKGppdENvZGUpCisgICAgLCBtX2xpbmtCdWZmZXIobGlu
a0J1ZmZlcikKKyAgICAsIG1fYXJpdHlDaGVjayhhcml0eUNoZWNrKQoreworfQorCitKSVRGaW5h
bGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQoreworfQorCitib29sIEpJVEZpbmFsaXplcjo6ZmluYWxp
emUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQoreworICAgIGZpbmFsaXplQ29tbW9uKCk7
CisgICAgCisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZp
bmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKKyAgICBlbnRyeSA9IG1faml0Q29kZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIHdpdGhBcml0eUNoZWNrKQoreworICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCisgICAg
d2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsK
KyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOworICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24o
KQoreworICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPmR1bXAobGlua0J1ZmZlcik7CisgICAgCisgICAgaWYgKG1fcGxhbi5tX2NvbXBpbGF0
aW9uKSB7CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fcGxhbi5t
X2NvbXBpbGF0aW9uLmdldCgpLCAqbV9saW5rQnVmZmVyKTsKKyAgICAgICAgdm0oKS5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5tX2NvbXBpbGF0aW9uKTsKKyAg
ICB9CisgICAgCisgICAgbV9wbGFuLnJlYWxseUFkZCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHSklURmluYWxpemVyX2gKKyNkZWZpbmUgREZHSklURmluYWxpemVy
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIK
KyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBKSVRGaW5hbGl6ZXIgOiBw
dWJsaWMgRmluYWxpemVyIHsKK3B1YmxpYzoKKyAgICBKSVRGaW5hbGl6ZXIoUGxhbiYsIFBhc3NP
d25QdHI8RGlzYXNzZW1ibGVyPiwgUGFzc1JlZlB0cjxKSVRDb2RlPiwgUGFzc093blB0cjxMaW5r
QnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwoKSk7CisgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CisgICAgCisgICAgYm9v
bCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpOworICAgIGJvb2wgZmluYWxp
emVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworCitwcml2YXRlOgorICAgIHZvaWQgZmluYWxpemVDb21t
b24oKTsKKyAgICAKKyAgICBPd25QdHI8RGlzYXNzZW1ibGVyPiBtX2Rpc2Fzc2VtYmxlcjsKKyAg
ICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBtX2xp
bmtCdWZmZXI7CisgICAgTWFjcm9Bc3NlbWJsZXIgbV9hcml0eUNoZWNrOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdKSVRGaW5hbGl6ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1BsYW4uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK1BsYW46OlBsYW4oCisgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
CisgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgOiBjb21waWxlTW9kZShjb21w
aWxlTW9kZSkKKyAgICAsIGNvZGVCbG9jayhjb2RlQmxvY2spCisgICAgLCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMo
bnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgLCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcykKK3sKK30KKworUGxhbjo6flBsYW4oKQor
eworfQorCitib29sIFBsYW46OmlzU3RpbGxWYWxpZCgpCit7CisgICAgcmV0dXJuIG1fd2F0Y2hw
b2ludHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1fY2hhaW5zLmFyZVN0aWxsVmFsaWQo
KTsKK30KKwordm9pZCBQbGFuOjpyZWFsbHlBZGQoKQoreworICAgIG1fZ3JhcGgubV93YXRjaHBv
aW50cy5yZWFsbHlBZGQoKTsKKyAgICBtX2dyYXBoLm1faWRlbnRpZmllcnMucmVhbGx5QWRkKCpt
X3ZtKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR1BsYW5faAorI2RlZmluZSBERkdQbGFuX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRl
ICJERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgiCisjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJD
b21waWxhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gQ29tcGlsZU1vZGUgeyBDb21w
aWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OworCitzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CisgICAgUGxhbigKKyAgICAgICAgQ29tcGlsZU1vZGUg
Y29tcGlsZU1vZGUsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsCisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICB+UGxh
bigpOworICAgIAorICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7CisgICAgCisgICAgYm9vbCBp
c1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICB2b2lkIHJlYWxseUFkZCgpOworCisgICAgYm9vbCBm
aW5hbGl6ZSgpOworICAgIAorICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX2NvZGVCbG9jay0+dm0o
KTsgfQorCisgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2s7CisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OworICAgIHVuc2lnbmVk
IG51bVZhcnNXaXRoVmFsdWVzOworICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1
ZXM7CisKKyAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwor
CisgICAgT3duUHRyPEZpbmFsaXplcj4gbV9maW5hbGl6ZXI7CisgICAgCisgICAgRGVzaXJlZFdh
dGNocG9pbnRzIG1fd2F0Y2hwb2ludHM7CisgICAgRGVzaXJlZElkZW50aWZpZXJzIG1faWRlbnRp
ZmllcnM7CisgICAgRGVzaXJlZFN0cnVjdHVyZUNoYWlucyBtX2NoYWluczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHUGxhbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2Vu
ZXJhdGVkRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTEdlbmVyYXRlZEZ1bmN0aW9uX2gKKyNkZWZpbmUgRlRMR2VuZXJhdGVkRnVuY3Rp
b25faAorCit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNT
dGF0ZSopOworCisjZW5kaWYgLy8gRlRMR2VuZXJhdGVkRnVuY3Rpb25faApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKSVRGaW5h
bGl6ZXIuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVyKFBsYW4mIHBsYW4pCisgICAg
OiBGaW5hbGl6ZXIocGxhbikKK3sKK30KKworSklURmluYWxpemVyOjp+SklURmluYWxpemVyKCkK
K3sKKyAgICBpZiAobV9lbmdpbmUpCisgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5naW5l
KG1fZW5naW5lKTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0cjxKU0M6
OkpJVENvZGU+JikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVm
UHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0
eUNoZWNrKQoreworICAgIG1fcGxhbi5yZWFsbHlBZGQoKTsKKyAgICAKKyAgICBtX2ppdENvZGUt
PmluaXRpYWxpemVFeGl0VGh1bmtzKAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAg
ICAgICAgICptX2V4aXRUaHVua3NMaW5rQnVmZmVyLAorICAgICAgICAgICAgKCJGVEwgZXhpdCB0
aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5tX2Nv
ZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworICAgIAorICAgIHdpdGhBcml0
eUNoZWNrID0gbV9lbnRyeXBvaW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2sp
OworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGUoCisgICAgICAgIG1fZW5naW5lLAorICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVm
ZmVyLAorICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZN
IGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBtX2Z1bmN0aW9uKSkp
OworICAgIGVudHJ5ID0gbV9qaXRDb2RlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMSklURmluYWxpemVyX2gKKyNkZWZpbmUgRlRMSklURmluYWxpemVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpJVEZpbmFsaXplciA6IHB1YmxpYyBG
aW5hbGl6ZXIgeworcHVibGljOgorICAgIEpJVEZpbmFsaXplcihQbGFuJik7CisgICAgdmlydHVh
bCB+SklURmluYWxpemVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5rc0xp
bmtCdWZmZXIoUGFzc093blB0cjxMaW5rQnVmZmVyPiBidWZmZXIpCisgICAgeworICAgICAgICBt
X2V4aXRUaHVua3NMaW5rQnVmZmVyID0gYnVmZmVyOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxp
emVFbnRyeXBvaW50TGlua0J1ZmZlcihQYXNzT3duUHRyPExpbmtCdWZmZXI+IGJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIG1fZW50cnlwb2ludExpbmtCdWZmZXIgPSBidWZmZXI7CisgICAgfQorICAg
IHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmUpCisgICAg
eworICAgICAgICBtX2VuZ2luZSA9IGVuZ2luZTsKKyAgICB9CisgICAgdm9pZCBpbml0aWFsaXpl
RnVuY3Rpb24oR2VuZXJhdGVkRnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworICAgICAgICBtX2Z1
bmN0aW9uID0gZnVuY3Rpb247CisgICAgfQorICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2so
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKQorICAgIHsKKyAgICAgICAgbV9hcml0eUNoZWNr
ID0gbGFiZWw7CisgICAgfQorICAgIHZvaWQgaW5pdGlhbGllekpJVENvZGUoUGFzc1JlZlB0cjxK
SVRDb2RlPiBqaXRDb2RlKQorICAgIHsKKyAgICAgICAgbV9qaXRDb2RlID0gaml0Q29kZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkp
OworICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnks
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworCitwcml2YXRlOgorICAg
IE93blB0cjxMaW5rQnVmZmVyPiBtX2V4aXRUaHVua3NMaW5rQnVmZmVyOworICAgIE93blB0cjxM
aW5rQnVmZmVyPiBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyOworICAgIExMVk1FeGVjdXRpb25Fbmdp
bmVSZWYgbV9lbmdpbmU7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fYXJpdHlDaGVjazsK
KyAgICBHZW5lcmF0ZWRGdW5jdGlvbiBtX2Z1bmN0aW9uOworICAgIFJlZlB0cjxKSVRDb2RlPiBt
X2ppdENvZGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpJVEZpbmFsaXplcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTUwMDE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MTUgKzQ3LDggQEAgc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxsSGVscGVycyYgagogICAg
IGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoaml0LmNvZGVCbG9jaygpLCBK
U1N0YWNrOjpDb2RlQmxvY2spOwogfQogCi1ib29sIGxpbmsoU3RhdGUmIHN0YXRlLCBSZWZQdHI8
SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spCit2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogewotICAgIGlmICghc3RhdGUu
Z3JhcGguaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25Fbmdp
bmUoc3RhdGUuZW5naW5lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBzdGF0ZS5ncmFwaC5tX3dhdGNocG9pbnRzLnJlYWxseUFkZCgpOwotICAgIAogICAgIC8vIENy
ZWF0ZSB0aGUgZW50cnlwb2ludC4KICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRn
ZSAtIExMVk0gc2hvdWxkIGp1c3QgdXNlIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQpAQCAtMTI0LDE5
ICsxMTcsMTUgQEAgYm9vbCBsaW5rKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SklUQwogICAg
IGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOwogICAgICAgICAKLSAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5r
QnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmppdCwg
c3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CiAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+
bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2Nh
bGxfYXJpdHlDaGVjayk7Ci0gICAgICAgIAotICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLSAgICBzdGF0ZS5qaXRDb2RlLT5pbml0
aWFsaXplQ29kZSgKLSAgICAgICAgc3RhdGUuZW5naW5lLAotICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgKLSAgICAgICAgICAgIGxpbmtCdWZmZXIsCi0gICAgICAgICAgICAoIkZUTCBlbnRyeXBv
aW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSwgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7Ci0gICAgaml0Q29k
ZSA9IHN0YXRlLmppdENvZGU7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgc3RhdGUuZ3Jh
cGgubV9wbGFuLT5pbml0aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxl
YXNlKCkpOworICAgIHN0YXRlLmdyYXBoLm1fcGxhbi0+aW5pdGlhbGl6ZUNvZGUoc3RhdGUuZW5n
aW5lKTsKKyAgICBzdGF0ZS5ncmFwaC5tX3BsYW4tPmluaXRpYWxpemVGdW5jdGlvbihzdGF0ZS5n
ZW5lcmF0ZWRGdW5jdGlvbik7CisgICAgc3RhdGUuZ3JhcGgubV9wbGFuLT5pbml0aWFsaXplQXJp
dHlDaGVjayhhcml0eUNoZWNrKTsKKyAgICBzdGF0ZS5ncmFwaC5tX3BsYW4tPmluaXRpYWxpemVK
SVRDb2RlKHN0YXRlLmppdENvZGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuaAkocmV2aXNpb24gMTUwMDE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1ib29sIGxp
bmsoU3RhdGUmLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKK3ZvaWQgbGluayhTdGF0ZSYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
Y3BwCShyZXZpc2lvbiAxNTAwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExf
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJGVExK
SVRGaW5hbGl6ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00
Miw2ICs0Myw3IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBlbmdpbmUoMCkK
ICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CisgICAgZ3JhcGgubV9wbGFuID0gYWRvcHRQ
dHIobmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pKTsKIH0KIAogdm9pZCBTdGF0ZTo6ZHVt
cFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCShyZXZpc2lvbiAxNTAwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxMyBAQAogCiAjaW5jbHVkZSAi
REZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlvbikoRXhlY1N0YXRlKik7Ci0KIGNsYXNzIFN0YXRlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGF0ZSk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201765</attachid>
            <date>2013-05-14 15:29:38 -0700</date>
            <delta_ts>2013-05-14 16:49:44 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100684</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBA
QAorMjAxMy0wNS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc2VwYXJhdGUgbGluayBwaGFzZSBpbnRvIHRoaW5ncyB0
aGF0IG11c3QgYmUgZG9uZSBjb25jdXJyZW50bHkgYW5kIHRoaW5ncyB0aGF0IG11c3QgYmUgZG9u
ZSBzeW5jaHJvbm91c2x5LCBhbmQgaGF2ZSBhIHdheSBvZiBwYXNzaW5nIGRhdGEgZnJvbSBvbmUg
dG8gdGhlIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTYwNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKExpbmtCdWZmZXIp
OgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6fkxpbmtCdWZmZXIpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZv
bGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcv
REZHRHJpdmVyLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6OkZhaWxlZEZpbmFs
aXplcik6CisgICAgICAgIChKU0M6OkRGRzo6RmFpbGVkRmluYWxpemVyOjp+RmFpbGVkRmluYWxp
emVyKToKKyAgICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoRmFpbGVkRmluYWxpemVyKToKKyAgICAgICAgKiBkZmcvREZHRmluYWxpemVyLmNw
cDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkZpbmFsaXplcjo6
RmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6REZHOjpGaW5hbGl6ZXI6On5GaW5hbGl6ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdGaW5hbGl6ZXIuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoRmluYWxpemVyKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6Y29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjppZGVudGlmaWVycyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OndhdGNocG9pbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2hhaW5zKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NS
RXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmxpbmtGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAg
ICAgIChKSVRDb21waWxlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZExh
emlseSk6CisgICAgICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcik6
CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjp+SklURmluYWxpemVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRGaW5hbGl6
ZXIuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSklURmluYWxpemVyKToKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEpTQzo6REZHOjpkdW1wQW5kVmVyaWZ5R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46On5QbGFuKToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Omlz
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVhbGx5QWRkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoUGxhbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6dm0pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6aWRlbnRpZmllclVJRCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZSk6CisgICAgICAgICog
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5
cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICogZnRsL0ZUTEdlbmVyYXRlZEZ1
bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRMSklURmlu
YWxpemVyLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VEZpbmFsaXplcjo6SklURmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6
ZXI6On5KSVRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6Zmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlv
bik6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKEZU
TCk6CisgICAgICAgIChKSVRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFs
aXplcjo6aW5pdGlhbGl6ZUV4aXRUaHVua3NMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVFbnRyeXBvaW50TGlua0J1ZmZlcik6CisgICAgICAg
IChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplQ29kZSk6CisgICAgICAgIChKU0M6
OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpG
VEw6OkpJVEZpbmFsaXplcjo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2spOgorICAgICAgICAoSlNDOjpG
VEw6OkpJVEZpbmFsaXplcjo6aW5pdGlhbGl6ZUpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExM
aW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTGlu
ay5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsaW5rT1NSRXhpdHNBbmRDb21w
bGV0ZUluaXRpYWxpemF0aW9uQmxvY2tzKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRl
Lmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAoU3RhdGUpOgorCiAyMDEzLTA1LTE0ICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGll
cjogU2VnZmF1bHQgaW4ganNjIHdpdGggc2ltcGxlIHRlc3QgcHJvZ3JhbSB3aGVuIHJ1bm5pbmcg
d2l0aCBwcm9maWxlIGR1bXBpbmcgZW5hYmxlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgs
NiArMzE4LDE3IEBACiAJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovOyB9OwogCQkwRkRC
MkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzcxNzNEQTUxRTAwN0Iz
QzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGREIyQ0NFMTc0
MkQ3RDQwMDdCM0MxQiAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQ0IxNzQyRDdEMzAwN0IzQzFCIC8q
IEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDQ0YxNzQyRDdEODAwN0IzQzFCIC8qIEZUTEpJVEZpbmFs
aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRCMkNDQzE3NDJEN0QzMDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmNwcCAqLzsgfTsKKwkJ
MEZEQjJDRDAxNzQyRDdEQTAwN0IzQzFCIC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQ0QxNzQyRDdEMzAwN0Iz
QzFCIC8qIEZUTEpJVEZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGREIyQ0Q5MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRG
aW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEQjJDRDExNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi87
IH07CisJCTBGREIyQ0RBMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0QyMTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRCMkNEQjE3NDJEODA0MDA3QjNDMUIg
LyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGREIyQ0QzMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuY3BwICov
OyB9OworCQkwRkRCMkNEQzE3NDJEODA0MDA3QjNDMUIgLyogREZHRmluYWxpemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNENDE3NDJEODA0
MDA3QjNDMUIgLyogREZHRmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDREQxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZp
bmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRCMkNENTE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmNwcCAqLzsgfTsK
KwkJMEZEQjJDREUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDYxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGREIyQ0RGMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0Q3MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmNwcCAqLzsgfTsKKwkJMEZEQjJDRTAxNzQy
RDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q4MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEREJGQjUx
NjY2RUVEODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjIxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovOyB9OwogCQkwRkREQkZC
NjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDgg
LyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwNiw2ICsxMzE3LDE3IEBACiAJ
CTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjdWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJy
ZXZpYXRlZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGVkVHlwZXMuaDsgcGF0
aCA9IGZ0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExWYWx1ZUZyb21CbG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0NCMTc0MkQ3RDMwMDdC
M0MxQiAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExHZW5lcmF0
ZWRGdW5jdGlvbi5oOyBwYXRoID0gZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0NDMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExKSVRG
aW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSklURmluYWxpemVyLmNwcDsgcGF0
aCA9IGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkRCMkNDRDE3NDJEN0QzMDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEpJVEZpbmFsaXplci5oOyBwYXRoID0gZnRsL0ZUTEpJVEZpbmFsaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVkRmluYWxpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRDIxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRDMxNzQyRDgwNDAwN0IzQzFC
IC8qIERGR0ZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZpbmFsaXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5h
bGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmluYWxpemVyLmg7
IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGREIyQ0Q1MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklURmluYWxpemVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0pJ
VEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNENzE3NDJE
ODA0MDA3QjNDMUIgLyogREZHUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdQbGFuLmNwcDsgcGF0aCA9IGRmZy9ERkdQbGFuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRDgxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGxhbi5oOyBwYXRoID0gZGZnL0RG
R1BsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBP
cHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzMywxMCArMjE1NSwxMyBAQAog
CQkJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAogCQkJ
CTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQkwRkVB
MEEyQjE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCAqLywKKwkJCQkwRkRC
MkNDQjE3NDJEN0QzMDA3QjNDMUIgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkw
RkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8s
CiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnku
aCAqLywKIAkJCQkwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgKi8s
CiAJCQkJMEZFQTBBMDMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLywKKwkJCQkw
RkRCMkNDQzE3NDJEN0QzMDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmNwcCAqLywKKwkJCQkw
RkRCMkNDRDE3NDJEN0QzMDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmggKi8sCiAJCQkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovLAogCQkJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZFQTBBMTMxNzA2MzYzNjAwQkI3
MjJDIC8qIEZUTExMVk1IZWFkZXJzLmggKi8sCkBAIC0yODMzLDggKzI4NTgsNiBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKLQkJCQkwRjRFMUExMDE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJl
ZFN0cnVjdHVyZUNoYWlucy5jcHAgKi8sCi0JCQkJMEY0RTFBMTExNzNBRjA3ODAwN0VFMkQzIC8q
IERGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuaCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBD
RUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCkBAIC0yODc4LDYgKzI5MDEsOCBAQAog
CQkJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBG
OEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovLAog
CQkJCTBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCAq
LywKKwkJCQkwRjRFMUExMDE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNo
YWlucy5jcHAgKi8sCisJCQkJMEY0RTFBMTExNzNBRjA3ODAwN0VFMkQzIC8qIERGR0Rlc2lyZWRT
dHJ1Y3R1cmVDaGFpbnMuaCAqLywKIAkJCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLywKIAkJCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yODg5LDYgKzI5MTQsMTAgQEAKIAkJ
CQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCiAJCQkJMEZCNEI1
MUIxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRERjNG
MTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8sCisJCQkJMEZEQjJDRDExNzQyRDgwNDAwN0IzQzFC
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi8sCisJCQkJMEZEQjJDRDIxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovLAorCQkJCTBGREIyQ0QzMTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdGaW5hbGl6ZXIuY3BwICovLAorCQkJCTBGREIyQ0Q0MTc0MkQ4MDQwMDdCM0Mx
QiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERG
R0ZpeHVwUGhhc2UuaCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBS
SW5mby5oICovLApAQCAtMjkwMSw2ICsyOTMwLDggQEAKIAkJCQkwRkVBMEEzMDE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHSklUQ29kZS5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAv
KiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0pJVENvbXBpbGVyLmggKi8sCisJCQkJMEZEQjJDRDUxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0pJVEZpbmFsaXplci5jcHAgKi8sCisJCQkJMEZEQjJDRDYxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0pJVEZpbmFsaXplci5oICovLAogCQkJCTBGQjRCNTFDMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdM
b25nTGl2ZWRTdGF0ZS5jcHAgKi8sCiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmggKi8sCiAJCQkJMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkR3JhcGguaCAqLywKQEAgLTI5MzQsNiArMjk2NSw4IEBACiAJCQkJMEYyMzVCRUEx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovLAogCQkJCTBGRkZD
OTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJCQkJMEZEQjJDRDcxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR1BsYW4uY3BwICovLAorCQkJCTBGREIyQ0Q4MTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdQbGFuLmggKi8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8q
IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oICovLAogCQkJCTBGRkZDOTUxMTRFRjkwOTUw
MEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCkBAIC0yOTUx
LDEwICsyOTg0LDEwIEBACiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAotCQkJCTBGNjM5NDNDMTVDNzVGMTQw
MDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKLQkJCQkwRjYzOTQz
RDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAogCQkJ
CTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5
N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRjYzOTQzQzE1Qzc1
RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEY2
Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAg
Ki8sCiAJCQkJMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8s
CkBAIC0zNDAzLDYgKzM0MzYsNyBAQAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBK
U0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTgg
LyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0MTY3
QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQjJDREMx
NzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
NEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDk4LDYgKzM1MzIsNyBAQAogCQkJCUMyMTEyMkUzMTVERDlBQjMw
MDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRD
RDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkRCMkNFMDE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzU1OCwxMCArMzU5Mywx
MiBAQAogCQkJCTg2MTU4QUIzMTU1QzhCNDAwMEI0NUM5QyAvKiBQcm9wZXJ0eU5hbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDU0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9wZXJ0eU5hbWVB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzE2OEMxNUEzQjIzNTAwOEY1REFBIC8qIFBy
b3BlcnR5T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNDRTE3NDJEN0Q0MDA3QjND
MUIgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU1
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkRCMkNERTE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJ
ZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8q
IFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCREIxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE2LDYgKzM2
NTMsNyBAQAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVD
RDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNEQTE3
NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTcxRURFQTYxMTY5RTBEMzAwNUU0MjYyIC8qIFRlcm1pbmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNjM3LDYgKzM2NzUsNyBAQAogCQkJCTBGNDI2QTQ4MTQ2MENC
QjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0
OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTRBMzMyMDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGREIyQ0QwMTc0MkQ3REEwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBX
ZWFrLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMzgsNiArNDA3Nyw3IEBACiAJCQkJMTQyOUQ4REQw
RUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJG
Qzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkRCMkNEOTE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxs
TGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FC
NzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlB
MDc5NjBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDEwMSwxMyArNDE0MSwxNCBAQAogCQkJCTBGQzA5Nzc2MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdP
U1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc3MjE0Njkz
QUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEQjJDREIxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0Zp
bmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIg
LyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2QkIwOUMwMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
RjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjlFMTcz
MDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5
N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDEyNyw2ICs0MTY4LDcgQEAKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIgLyogRlRMSklURmluYWxpemVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdD
b21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0
OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlG
MTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDE3NSw2ICs0MjE3LDcgQEAKIAkJCQkxNDdGMzlEMDEwN0VDMzc2MDA0MjdBNDgg
LyogSlNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIxMzU5QjBBNjc3RjRGMDBBODE5
NUUgLyogSlNCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkU1MTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRCMkNERjE3
NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5
MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQxOTAsNiArNDIzMyw3IEBACiAJCQkJ
MTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEQjJDREQxNzQyRDgw
NDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg3NTEwN0VDMTNFMDAxM0U3QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8
d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDYsNiAr
MTQ3LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZSh2b2lkKiBvd25lclVJRAogdm9pZCBM
aW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCkKIHsKICNpZm5kZWYgTkRFQlVHCisgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9jb21wbGV0ZWQp
OwogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lv
biAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpJVENvbXBpbGF0
aW9uRWZmb3J0LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTgsNyArNTksOCBAQCBjbGFz
cyBWTTsKIC8vICAgKiBUaGUgdmFsdWUgcmVmZXJlbmNlZCBieSBhIERhdGFMYWJlbCBtYXkgYmUg
c2V0LgogLy8KIGNsYXNzIExpbmtCdWZmZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExp
bmtCdWZmZXIpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpbmtCdWZmZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBDb2RlUmVmOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CiAg
ICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgTGFiZWw7CkBAIC04Niw3ICs4OCw2IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwg
bV9jb21wbGV0ZWQoZmFsc2UpCi0gICAgICAgICwgbV9lZmZvcnQoZWZmb3J0KQogI2VuZGlmCiAg
ICAgewogICAgICAgICBsaW5rQ29kZShvd25lclVJRCwgZWZmb3J0KTsKQEAgLTk0LDcgKzk1LDYg
QEAgcHVibGljOgogCiAgICAgfkxpbmtCdWZmZXIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
Y29tcGxldGVkIHx8ICghbV9leGVjdXRhYmxlTWVtb3J5ICYmIG1fZWZmb3J0ID09IEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCkpOwogICAgIH0KICAgICAKICAgICBib29sIGRpZEZhaWxUb0FsbG9jYXRl
KCkgY29uc3QKQEAgLTI2NCw3ICsyNjQsNiBAQCBwcml2YXRlOgogICAgIFZNKiBtX3ZtOwogI2lm
bmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwotICAgIEpJVENvbXBpbGF0aW9uRWZm
b3J0IG1fZWZmb3J0OwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSwxMiArMTM1LDEyIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFw
aCYgZ3IKICAgICAgICAgfQogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gZ3Jh
cGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVC
ZWdpbiAhPSBncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGgubV9tdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Z3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMo
Z3JhcGgsIGdyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IGdyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAg
ICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMoZ3JhcGgsIGdyYXBoLm1fcGxhbi5tdXN0SGFu
ZGxlVmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gZ3JhcGgubV9wbGFuLm11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLm1lcmdlKHZhbHVlKTsKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIElu
aXRpYWxpemluZyBCbG9jayAjJXUsIG9wZXJhbmQgciVkLCB0byAiLCBibG9ja0luZGV4LCBvcGVy
YW5kKTsKQEAgLTEyNzIsNyArMTI3Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWcKICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
ICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKV0pOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRoYXQgd2UgY2FuJ3QgaGFuZGxl
IGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIC8v
IGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgpAQCAtMTMzOSw3ICsxMzM5LDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICAvLyBpbmZpbml0
eSBvZiBzdHJ1Y3R1cmVzLgogICAgICAgICBBU1NFUlQoCiAgICAgICAgICAgICB2YWx1ZS5tX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVj
dHVyZSgpKSkKLSAgICAgICAgICAgIHx8IG1fZ3JhcGgubV93YXRjaHBvaW50cy5zaG91bGRBc3N1
bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KSk7CisgICAgICAgICAgICB8fCBtX2dyYXBoLndhdGNocG9pbnRzKCkuc2hvdWxkQXNzdW1lTWl4
ZWRTdGF0ZShub2RlLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpOwog
ICAgICAgICAKICAgICAgICAgdmFsdWUuZmlsdGVyKG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgp
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CkBAIC0xNDczLDcgKzE0NzMsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1faWRlbnRpZmllcnNbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewogICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBBYnN0
cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLAogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNl
dEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiBncmFwaCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7Ci0gICAgaWYgKGdyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCisgICAgaWYgKGdyYXBoLndhdGNocG9pbnRz
KCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAg
ICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgZWxzZQog
ICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKQEAgLTEyMCw3ICsx
MjAsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RyCiAKIHZvaWQg
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyRnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBo
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoZ3JhcGgubV93YXRjaHBvaW50cy5p
c1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKKyAgICBp
ZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKSkKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0
ZXIoU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShzdHJ1Y3R1cmUpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTMsNyArNzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Tm9kZSogb2JqZWN0Tm9kZSA9IGNlbGxDb25zdGFudChvYmplY3QpOwogICAgICAgICAKICAgICAg
ICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlCi0gICAgICAgICAgICAmJiBt
X2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXQoKSkpIHsKKyAgICAgICAgICAgICYmIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5p
c1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewogICAg
ICAgICAgICAgYWRkVG9HcmFwaChTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgT3BJbmZv
KHN0cnVjdHVyZSksIG9iamVjdE5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7
CiAgICAgICAgIH0KQEAgLTE3MjYsNyArMTcyNiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5SWQoCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCkpKSwgYmFzZSk7
CiAgICAgCiAgICAgaWYgKGdldEJ5SWRTdGF0dXMuY2hhaW4oKSkgewotICAgICAgICBtX2dyYXBo
Lm1fY2hhaW5zLmFkZExhemlseShnZXRCeUlkU3RhdHVzLmNoYWluKCkpOworICAgICAgICBtX2dy
YXBoLmNoYWlucygpLmFkZExhemlseShnZXRCeUlkU3RhdHVzLmNoYWluKCkpOwogICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBnZXRCeUlkU3RhdHVzLnN0cnVjdHVyZVNldCgp
LnNpbmdsZXRvblN0cnVjdHVyZSgpOwogICAgICAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9
IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnZXRCeUlkU3RhdHVzLmNoYWlu
KCktPnNpemUoKTsgKytpKSB7CkBAIC0xODcxLDcgKzE4NzEsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpCiAgICAgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZVZh
bHVlT3BlcmF0aW9uID0gcGM7CiAgICAgc3dpdGNoIChyZXNvbHZlVmFsdWVPcGVyYXRpb24tPm1f
b3BlcmF0aW9uKSB7CiAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9i
YWxQcm9wZXJ0eTogewotICAgICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1cyA9IFJlc29s
dmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2N1cnJlbnRJbmRleCwgcmVzb2x2ZVZhbHVlT3BlcmF0aW9uLCBtX2dyYXBoLm1faWRl
bnRpZmllcnNbaWRlbnRpZmllcl0pOworICAgICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1
cyA9IFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRleCwgcmVzb2x2ZVZhbHVlT3BlcmF0aW9uLCBtX2dy
YXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0pOwogICAgICAgICBpZiAoc3RhdHVzLmlzU2lt
cGxlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlKCkpOwogCkBAIC0x
OTA3LDkgKzE5MDcsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRp
CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKIAotICAgICAgICBTdHJpbmdJbXBsKiB1
aWQgPSBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllcl07CisgICAgICAgIFN0cmluZ0lt
cGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXTsKICAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVp
ZCk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZChlbnRy
eS53YXRjaHBvaW50U2V0KCkpKSB7CisgICAgICAgIGlmICghbV9ncmFwaC53YXRjaHBvaW50cygp
LmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICAqdmFs
dWUgPSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0
UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yMDAx
LDggKzIwMDEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBTb21l
IG1ldGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQgaXQg
dGhyb3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uICYmIG9wY29kZUlEICE9IG9wX2NhbGxfcHV0
X3Jlc3VsdCkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChDb3VudEV4ZWN1dGlvbiwgT3BJbmZv
KG1fZ3JhcGgubV9jb21waWxhdGlvbi0+ZXhlY3V0aW9uQ291bnRlckZvcigKKyAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSAmJiBvcGNvZGVJRCAhPSBvcF9jYWxsX3B1dF9yZXN1bHQp
IHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQ291bnRFeGVjdXRpb24sIE9wSW5mbyhtX2dyYXBo
LmNvbXBpbGF0aW9uKCktPmV4ZWN1dGlvbkNvdW50ZXJGb3IoCiAgICAgICAgICAgICAgICAgUHJv
ZmlsZXI6Ok9yaWdpblN0YWNrKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJs
b2NrLCBjdXJyZW50Q29kZU9yaWdpbigpKSkpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI1
NjcsNyArMjU2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZF07CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
bV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwq
IHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAg
ICAgIEdldEJ5SWRTdGF0dXMgZ2V0QnlJZFN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBt
X2N1cnJlbnRJbmRleCwgdWlkKTsKICAgICAgICAgICAgIApAQCAtMjU5MCw3ICsyNTkwLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50SW5kZXgsCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50
aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogCiAgICAgICAgICAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTZXQoKSkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7
CkBAIC0yNjE2LDcgKzI2MTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgJiYgKCFwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWlu
KCkKICAgICAgICAgICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigp
LT5pc1N0aWxsVmFsaWQoKSkpIHsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fY2hhaW5zLmFkZExhemlseShwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCkp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHB1dEJ5SWRTdGF0
dXMuc3RydWN0dXJlQ2hhaW4oKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFkaXJlY3QpIHsKQEAgLTI3MDUsNyArMjcwNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZp
ZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXTsK
KyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9i
YWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAgaWYgKCFlbnRy
eS5jb3VsZEJlV2F0Y2hlZCgpKSB7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKQEAgLTMx
ODEsNyArMzE4MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1dENo
ZWNrZWQ6IHsKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrOwogICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdl
dChtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllcl0pOworICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCht
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0pOwogICAgICAgICAgICAgICAgIGlmIChl
bnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0R2xvYmFsVmFyQ2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3Qo
cHV0VG9CYXNlLT5tX3JlZ2lzdGVyQWRkcmVzcykpLApAQCAtMzU0NCw5ICszNTQ0LDkgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogCiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgewog
ICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmlt
cGwoKTsKLSAgICAgICAgICAgIEJvcnJvd2VkSWRlbnRpZmllck1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2lkZW50aWZpZXJNYXAuYWRkKHJlcCwgYnl0ZUNvZGVQYXJz
ZXItPm1fZ3JhcGgubV9pZGVudGlmaWVycy5udW1iZXJPZklkZW50aWZpZXJzKCkpOworICAgICAg
ICAgICAgQm9ycm93ZWRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQ
YXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5p
ZGVudGlmaWVycygpLm51bWJlck9mSWRlbnRpZmllcnMoKSk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgu
bV9pZGVudGlmaWVycy5hZGRMYXppbHkocmVwKTsKKyAgICAgICAgICAgICAgICBieXRlQ29kZVBh
cnNlci0+bV9ncmFwaC5pZGVudGlmaWVycygpLmFkZExhemlseShyZXApOwogICAgICAgICAgICAg
bV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCk7ICsraSkgewpAQCAtMzYxNCw4ICszNjE0LDggQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgCi0gICAgaWYgKG1fZ3JhcGgubV9j
b21waWxhdGlvbikgewotICAgICAgICBtX2dyYXBoLm1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVk
Qnl0ZWNvZGVzKAorICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKKyAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygKICAgICAgICAgICAgICpt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jayk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKLSAgICAgICAgICAgICAgICAgICAgdm0oKSwgc3RydWN0dXJlLCBtX2dyYXBoLm1faWRlbnRp
ZmllcnNbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAgICAgICB2bSgpLCBzdHJ1
Y3R1cmUsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNl
cy4KQEAgLTIyMSw3ICsyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB2bSgp
LAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllck51bWJlcl0sCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSwKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSAmJiAhc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKQpAQCAtMjU5LDcgKzI1OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCku
YXNDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fY2hhaW5zLmFkZExhemls
eShzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmNoYWlucygpLmFkZExhemlseShzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0YXR1cy5zdHJ1Y3R1
cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7CkBAIC0zOTcsNyArMzk3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUo
Y2VsbCksIFdlYWtKU0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoY2VsbC0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7CisgICAgICAgIGlmICht
X2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICBPcElu
Zm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTUwMDkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwzNCArMjksMTQgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIgotI2luY2x1ZGUgIkRGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuaCIKLSNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgotI2luY2x1ZGUg
IkRGR0NGQVBoYXNlLmgiCi0jaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgot
I2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIKLSNpbmNsdWRlICJERkdDU0VQaGFz
ZS5oIgotI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCi0jaW5jbHVkZSAiREZH
RENFUGhhc2UuaCIKLSNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCi0jaW5jbHVkZSAiREZHSklU
Q29tcGlsZXIuaCIKLSNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKLSNp
bmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgotI2luY2x1ZGUgIkRGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKLSNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgi
Ci0jaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKLSNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuaCIKLSNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJGVExDb21waWxlLmgiCi0jaW5jbHVkZSAiRlRMTGluay5oIgotI2luY2x1ZGUgIkZUTExvd2Vy
REZHVG9MTFZNLmgiCi0jaW5jbHVkZSAiRlRMU3RhdGUuaCIKLSNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR1BsYW4uaCIKKyNpbmNs
dWRlICJERkdUaHVua3MuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9Db21waWxhdGlvblRo
cmVhZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTY3LDIzICs0
Nyw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAgICAgcmV0dXJuIG51bUNvbXBp
bGF0aW9uczsKIH0KIAotc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncmFw
aCwgY29uc3QgY2hhciogdGV4dCkKLXsKLSAgICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZh
bGlkYXRlID0gRHVtcEdyYXBoOwotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgZGF0YUxvZyh0ZXh0LCAiXG4iKTsKLSAgICAgICAgZ3JhcGguZHVtcCgpOwot
ICAgICAgICBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IERvbnREdW1wR3JhcGg7Ci0gICAgfQotICAg
IGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQotICAgICAgICB2YWxpZGF0ZShncmFwaCwgbW9kZUZv
ckZpbmFsVmFsaWRhdGUpOwotfQotCi1lbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9u
LCBDb21waWxlT3RoZXIgfTsKIHN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGls
ZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6
OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJp
dHlDaGVjaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKLSAgICBD
b21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7CiAgICAgCiAgICAgbnVtQ29tcGlsYXRp
b25zKys7CiAgICAgCkBAIC05OSw2ICs2NSwxOSBAQCBzdGF0aWMgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAg
ICBkYXRhTG9nKCJERkcgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0
cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAg
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0
byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCisgICAgLy8gbWFrZSBzdXJlIHRoYXQg
YWwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKTsKKyAgICBleGVjLT52bSgpLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKTsKKyAgICBleGVjLT52bSgpLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxs
VGh1bmtHZW5lcmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRo
dW5rR2VuZXJhdG9yKTsKKyAgICBleGVjLT52bSgpLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKTsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBleGVjLT52bSgpLmdl
dENUSVN0dWIoRlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyNlbmRpZgor
ICAgIAogICAgIC8vIERlcml2ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNv
bXBpbGF0aW9uIG11c3QgYmUgYXQgbGVhc3QgY29uc2VydmF0aXZlCiAgICAgLy8gZW5vdWdoIHRv
IGFsbG93IGZvciBPU1IgZW50cnkgd2l0aCB0aGVzZSB2YWx1ZXMuCiAgICAgdW5zaWduZWQgbnVt
VmFyc1dpdGhWYWx1ZXM7CkBAIC0xMDYsOSArODUsOSBAQCBzdGF0aWMgYm9vbCBjb21waWxlKENv
bXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2Nr
LT5tX251bVZhcnM7CiAgICAgZWxzZQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Ci0g
ICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgIFBsYW4gcGxhbihjb21waWxl
TW9kZSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51bVZhcnNXaXRoVmFsdWVz
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4ubXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KQogICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCiAgICAgICAgICAg
ICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24KQEAgLTExNyw5MiArOTYsMTUgQEAg
c3RhdGljIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICAgICAgLy8g
YWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRo
ZSB2YWx1ZSBmb3IgdGhpcywKICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0
dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAog
ICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8g
VW5kZWZpbmVkLgotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICBwbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVmaW5lZCgp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVj
LT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIHBsYW4ubXVzdEhh
bmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAg
IH0KICAgICAKLSAgICBHcmFwaCBkZmcoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOwotICAgIGlmICghcGFyc2UoZGZnKSkKKyAg
ICBwbGFuLmNvbXBpbGVJblRocmVhZCgpOworICAgIGlmIChwbGFuLmZpbmFsaXplKGppdENvZGUs
IGppdENvZGVXaXRoQXJpdHlDaGVjaykgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQnkgdGhpcyBwb2ludCB0aGUgREZHIGJ5dGVj
b2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2YXJpb3VzIHRhYmxlcwot
ICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBh
biBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKLSAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0
ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFu
eSBjb2RlCi0gICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0aGUgdGFibGVzIGRpcmVjdGx5
LCB5ZXQuCi0gICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkVhcmx5U2hyaW5r
KTsKLQotICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQotICAgICAgICB2YWxpZGF0ZShkZmcp
OwotICAgIAotICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwotICAgIHBlcmZvcm1Vbmlm
aWNhdGlvbihkZmcpOwotICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKGRmZyk7Ci0gICAg
Ci0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHZhbGlkYXRlKGRmZyk7Ci0g
ICAgCi0gICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybVBy
ZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwotICAgIHBlcmZvcm1GaXh1cChkZmcpOwotICAgIHBl
cmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOwotICAgIAotICAgIGRmZy5tX2ZpeHBvaW50U3Rh
dGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKLQotICAgIHBlcmZvcm1DU0UoZGZnKTsKLSAgICBw
ZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oZGZnKTsKLSAgICBwZXJmb3JtQ1BTUmV0aHJl
YWRpbmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5vLW9wIHNpbmNlIENTRSBy
YXJlbHkgZGV0aHJlYWRzLCBhbmQgYXJndW1lbnRzIHNpbXBsaWZpY2F0aW9uIHJhcmVseSBkb2Vz
IGFueXRoaW5nLgotICAgIHBlcmZvcm1DRkEoZGZnKTsKLSAgICBwZXJmb3JtQ29uc3RhbnRGb2xk
aW5nKGRmZyk7Ci0gICAgcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7Ci0KLSAgICBkZmcu
bV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7Ci0KLSAgICBwZXJmb3JtU3RvcmVF
bGltaW5hdGlvbihkZmcpOwotICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwotICAgIHBl
cmZvcm1EQ0UoZGZnKTsKLQotI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChPcHRpb25zOjp1
c2VFeHBlcmltZW50YWxGVEwoKQotICAgICAgICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxlRnVu
Y3Rpb24KLSAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKLSAgICAgICAgCi0gICAg
ICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJp
bmc6Iik7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBPU1IgZW50cnkuCi0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjUK
LSAgICAgICAgCi0gICAgICAgIEZUTDo6U3RhdGUgc3RhdGUoZGZnKTsKLSAgICAgICAgRlRMOjps
b3dlckRGR1RvTExWTShzdGF0ZSk7Ci0gICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7Ci0gICAg
ICAgIGNvbXBpbGF0aW9uU2NvcGUubGVhdmVFYXJseSgpOwotICAgICAgICByZXR1cm4gRlRMOjps
aW5rKHN0YXRlLCBqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICB9Ci0jZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgCi0gICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb24oZGZnKTsKLSAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIg
b3B0aW1pemF0aW9uOiIpOwotCi0gICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKLSAg
ICBib29sIHJlc3VsdDsKLSAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7
Ci0gICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgY29tcGlsYXRpb25TY29wZS5sZWF2ZUVhcmx5KCk7Ci0gICAgICAg
IHJlc3VsdCA9IGRhdGFGbG93SklULmxpbmtGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUgPT0g
Q29tcGlsZU90aGVyKTsKLSAgICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFkYXRhRmxvd0pJVC5jb21waWxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbXBpbGF0aW9uU2NvcGUubGVhdmVFYXJseSgpOwot
ICAgICAgICByZXN1bHQgPSBkYXRhRmxvd0pJVC5saW5rKGppdENvZGUpOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIHRyeUNvbXBp
bGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6SklU
Q29kZT4mIGppdENvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zh
aWxlZEZpbmFsaXplci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworRmFpbGVkRmluYWxpemVyOjpGYWlsZWRGaW5hbGl6ZXIoUGxh
biYgcGxhbikKKyAgICA6IEZpbmFsaXplcihwbGFuKQoreworfQorCitGYWlsZWRGaW5hbGl6ZXI6
On5GYWlsZWRGaW5hbGl6ZXIoKQoreworfQorCitib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxp
emUoUmVmUHRyPEpTQzo6SklUQ29kZT4mKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4m
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxp
emVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZhaWxlZEZpbmFsaXplcl9o
CisjZGVmaW5lIERGR0ZhaWxlZEZpbmFsaXplcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRmFpbGVkRmluYWxpemVy
IDogcHVibGljIEZpbmFsaXplciB7CitwdWJsaWM6CisgICAgRmFpbGVkRmluYWxpemVyKFBsYW4m
KTsKKyAgICB2aXJ0dWFsIH5GYWlsZWRGaW5hbGl6ZXIoKTsKKyAgICAKKyAgICBib29sIGZpbmFs
aXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0
aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3
aXRoQXJpdHlDaGVjayk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZhaWxlZEZpbmFsaXplcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmlu
YWxpemVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR1BsYW4uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitGaW5hbGl6ZXI6OkZpbmFsaXpl
cihQbGFuJiBwbGFuKQorICAgIDogbV9wbGFuKHBsYW4pCit7Cit9CisKK0ZpbmFsaXplcjo6fkZp
bmFsaXplcigpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
bmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmlu
YWxpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
bmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGaW5hbGl6ZXJfaAor
I2RlZmluZSBERkdGaW5hbGl6ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgUGxhbjsKKworY2xhc3MgRmlu
YWxpemVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5hbGl6ZXIpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaW5hbGl6ZXIoUGxhbiYpOworICAgIHZpcnR1
YWwgfkZpbmFsaXplcigpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZShSZWZQdHI8
SlNDOjpKSVRDb2RlPiYgZW50cnkpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmluYWxpemVGdW5j
dGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
d2l0aEFyaXR5Q2hlY2spID0gMDsKKworcHJvdGVjdGVkOgorICAgIFBsYW4mIG1fcGxhbjsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHRmluYWxpemVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTksNyArNzE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElm
UHJvZml0YWJsZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBpZiAoIWlz
SW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9pZGVudGlmaWVyc1tub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCldICE9IHZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigp
XSAhPSB2bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSAKQEAgLTEwNTgsNyArMTA1OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBKU09iamVjdCogc3RyaW5nUHJvdG90eXBlT2JqZWN0ID0gYXNPYmpl
Y3Qoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSk7CiAgICAgICAgIFN0
cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nUHJvdG90eXBlT2JqZWN0
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGls
bFZhbGlkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSkpCisgICAgICAgIGlmICghbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJp
bmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgaWYgKHN0cmluZ1Byb3RvdHlw
ZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxMyBAQCBzdGF0
aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1tdID0gewogI3VuZGVmIFNUUklOR0laRV9ERkdfT1Bf
RU5VTQogfTsKIAotR3JhcGg6OkdyYXBoKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMpCitHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuKQogICAgIDog
bV92bSh2bSkKLSAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1fY29tcGlsYXRp
b24odm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21w
aWxhdGlvbih2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2Rl
QmxvY2spLCBQcm9maWxlcjo6REZHKSkgOiAwKQotICAgICwgbV9wcm9maWxlZEJsb2NrKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSkKKyAgICAsIG1fcGxhbihwbGFuKQorICAgICwgbV9jb2RlQmxv
Y2sobV9wbGFuLmNvZGVCbG9jaykKKyAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSkKICAgICAsIG1fYWxsb2NhdG9yKHZtLm1fZGZnU3RhdGUtPm1fYWxsb2Nh
dG9yKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCi0gICAgLCBtX29zckVudHJ5Qnl0ZWNv
ZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgLCBtX211c3RIYW5kbGVWYWx1ZXMo
bXVzdEhhbmRsZVZhbHVlcykKLSAgICAsIG1faWRlbnRpZmllcnMoY29kZUJsb2NrKQogICAgICwg
bV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQogICAgICwgbV9mb3JtKExvYWRTdG9yZSkK
ICAgICAsIG1fdW5pZmljYXRpb25TdGF0ZShMb2NhbGx5VW5pZmllZCkKQEAgLTE4OSw3ICsxODYs
NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5v
ZGUtPmhhc1JlZ2lzdGVyUG9pbnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJnbG9i
YWwiLCBnbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZpbmRSZWdpc3RlckluZGV4
KG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSwgIigiLCBSYXdQb2ludGVyKG5vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpKSwgIikiKTsKICAgICBpZiAobm9kZS0+aGFzSWRlbnRpZmllcigpKQotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJpZCIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgInsiLCBt
X2lkZW50aWZpZXJzW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sICJ9Iik7CisgICAgICAgIG91
dC5wcmludChjb21tYSwgImlkIiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCAieyIsIGlkZW50
aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwgIn0iKTsKICAgICBpZiAobm9kZS0+
aGFzU3RydWN0dXJlU2V0KCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkKICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgInN0cnVjdCgiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSwgIjogIiwg
SW5kZXhpbmdUeXBlRHVtcChub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXS0+aW5kZXhpbmdUeXBlKCkp
LCAiKSIpOwpAQCAtMjE4LDcgKzIxNSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkp
IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwotICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIs
ICJ7IiwgbV9pZGVudGlmaWVyc1tzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwg
In0iKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5p
ZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbc3RvcmFnZUFjY2Vzc0RhdGEuaWRl
bnRpZmllck51bWJlcl0sICJ9Iik7CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpOwogICAgIH0KICAgICBBU1NF
UlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7CkBA
IC00MzAsMTIgKzQyNyw2IEBAIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiAgICAgfQog
fQogCi1ib29sIEdyYXBoOjppc1N0aWxsVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3dh
dGNocG9pbnRzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2NoYWlucy5hcmVTdGlsbFZh
bGlkKCk7Ci19Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEz
ICszNCwxMSBAQAogI2luY2x1ZGUgIkRGR0FyZ3VtZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJE
RkdBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCi0jaW5jbHVk
ZSAiREZHRGVzaXJlZElkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiREZHRGVzaXJlZFN0cnVjdHVy
ZUNoYWlucy5oIgotI2luY2x1ZGUgIkRGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIgogI2luY2x1ZGUg
IkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U1N0YWNrLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAt
OTIsNyArOTAsNyBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAvLyBOb2RlcyB0aGF0IGFy
ZSAnZGVhZCcgcmVtYWluIGluIHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3MgR3Jh
cGggewogcHVibGljOgotICAgIEdyYXBoKFZNJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVl
cyk7CisgICAgR3JhcGgoVk0mLCBQbGFuJik7CiAgICAgfkdyYXBoKCk7CiAgICAgCiAgICAgdm9p
ZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQpAQCAtMzgxLDcgKzM3OSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewotICAg
ICAgICByZXR1cm4gbV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoCisgICAgICAgIHJldHVybiBt
X3BsYW4ud2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKAogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0
Rm9yKGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKICAg
ICB9CiAgICAgCkBAIC02OTYsMTEgKzY5NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdDsKKyAgICBQcm9maWxlcjo6Q29t
cGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgp
OyB9CisgICAgCisgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJu
IG1fcGxhbi5pZGVudGlmaWVyczsgfQorICAgIERlc2lyZWRXYXRjaHBvaW50cyYgd2F0Y2hwb2lu
dHMoKSB7IHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHM7IH0KKyAgICBEZXNpcmVkU3RydWN0dXJl
Q2hhaW5zJiBjaGFpbnMoKSB7IHJldHVybiBtX3BsYW4uY2hhaW5zOyB9CiAgICAgCiAgICAgVk0m
IG1fdm07CisgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0g
ICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21waWxhdGlvbjsKICAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAKICAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9j
YXRvcjsKQEAgLTcyMywxMSArNzI1LDYgQEAgcHVibGljOgogICAgIERvbWluYXRvcnMgbV9kb21p
bmF0b3JzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyU2xvdHM7Ci0gICAgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXg7Ci0gICAgT3Bl
cmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwotICAgIERlc2lyZWRXYXRjaHBvaW50
cyBtX3dhdGNocG9pbnRzOwotICAgIERlc2lyZWRJZGVudGlmaWVycyBtX2lkZW50aWZpZXJzOwot
ICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgbV9jaGFpbnM7CiAgICAgCiAgICAgT3B0aW1pemF0
aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxp
emVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXpl
ci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJhbmsuaCIKQEAgLTU5LDcgKzYxLDcgQEAg
SklUQ29tcGlsZXI6On5KSVRDb21waWxlcigpCiB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhp
dHMoKQogewogICAgIEFTU0VSVChtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZXhpdENv
bXBpbGF0aW9uSW5mby5zaXplKCkpOwotICAgIGlmIChtX2dyYXBoLm1fY29tcGlsYXRpb24pIHsK
KyAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IE9TUkV4aXQmIGV4aXQgPSBtX2ppdENvZGUtPm9zckV4aXRbaV07CiAgICAgICAgICAgICBWZWN0
b3I8TGFiZWw+IGxhYmVsczsKQEAgLTIyOSwyOCArMjMxLDI1IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIG1faml0Q29kZS0+d2F0Y2hwb2lu
dHNbZXhpdC5tX3dhdGNocG9pbnRJbmRleF0uY29ycmVjdExhYmVscyhsaW5rQnVmZmVyKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbikgeworICAgIGlmIChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZXhpdFNpdGVMYWJlbHMuc2l6
ZSgpID09IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9leGl0U2l0ZUxhYmVscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
VmVjdG9yPExhYmVsPiYgbGFiZWxzID0gbV9leGl0U2l0ZUxhYmVsc1tpXTsKICAgICAgICAgICAg
IFZlY3Rvcjxjb25zdCB2b2lkKj4gYWRkcmVzc2VzOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IGxhYmVscy5zaXplKCk7ICsraikKICAgICAgICAgICAgICAgICBhZGRyZXNz
ZXMuYXBwZW5kKGxpbmtCdWZmZXIubG9jYXRpb25PZihsYWJlbHNbal0pLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5tX2NvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0
ZShhZGRyZXNzZXMpOworICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5hZGRPU1JF
eGl0U2l0ZShhZGRyZXNzZXMpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIEFTU0VS
VCghbV9leGl0U2l0ZUxhYmVscy5zaXplKCkpOwogICAgIAotICAgIG1faml0Q29kZS0+Y29tbW9u
LmNvbXBpbGF0aW9uID0gbV9ncmFwaC5tX2NvbXBpbGF0aW9uOworICAgIG1faml0Q29kZS0+Y29t
bW9uLmNvbXBpbGF0aW9uID0gbV9ncmFwaC5jb21waWxhdGlvbigpOwogICAgIAogICAgIG1faml0
Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBjb2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJs
b2NrOjpMYXRlU2hyaW5rKTsKLSAgICAKLSAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMucmVhbGx5
QWRkKCk7Ci0gICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzLnJlYWxseUFkZCgqbV92bSk7CiB9CiAK
LWJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQordm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgp
CiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CiAK
QEAgLTI2OSwzNCArMjY4LDI1IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoKQogICAgIC8v
IENyZWF0ZSBPU1IgZW50cnkgdHJhbXBvbGluZXMgaWYgbmVjZXNzYXJ5LgogICAgIG1fc3BlY3Vs
YXRpdmUtPmNyZWF0ZU9TUkVudHJpZXMoKTsKICAgICBzZXRFbmRPZkNvZGUoKTsKLQotICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEpJVENvbXBpbGVyOjpsaW5rKFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBlbnRyeSkKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmsoKQogewotICAgIGlmICghbV9ncmFw
aC5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7Ci0gICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGxpbmsobGlua0J1ZmZlcik7Ci0gICAgbV9zcGVjdWxhdGl2
ZS0+bGlua09TUkVudHJpZXMobGlua0J1ZmZlcik7Ci0KLSAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fz
c2VtYmx5KCkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIpOwotICAg
IGlmIChtX2dyYXBoLm1fY29tcGlsYXRpb24pIHsKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJl
cG9ydFRvUHJvZmlsZXIobV9ncmFwaC5tX2NvbXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsK
LSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2dy
YXBoLm1fY29tcGlsYXRpb24pOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0g
YWRvcHRQdHIobmV3IExpbmtCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpKTsKKyAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUo
KSkgeworICAgICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFp
bGVkRmluYWxpemVyKG1fZ3JhcGgubV9wbGFuKSk7CisgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgCisgICAgbGluaygqbGlua0J1ZmZlcik7CisgICAgbV9zcGVjdWxhdGl2ZS0+bGlua09TUkVu
dHJpZXMoKmxpbmtCdWZmZXIpOwogCi0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBlbnRyeSA9
IG1faml0Q29kZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6
ZXIgPSBhZG9wdFB0cihuZXcgSklURmluYWxpemVyKAorICAgICAgICBtX2dyYXBoLm1fcGxhbiwg
bV9kaXNhc3NlbWJsZXIucmVsZWFzZSgpLCBtX2ppdENvZGUucmVsZWFzZSgpLAorICAgICAgICBs
aW5rQnVmZmVyLnJlbGVhc2UoKSkpOwogfQogCi1ib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24oKQordm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIHsKICAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tlbmQiKTsKICAgICAKQEAgLTM2Niwz
NyArMzU2LDI2IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgLy8g
Q3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9zcGVjdWxh
dGl2ZS0+Y3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotICAgIAotICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24oUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFy
aXR5Q2hlY2spCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24oKQogewotICAgIGlmICgh
bV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgLy8g
PT09IExpbmsgPT09Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGluayhsaW5rQnVm
ZmVyKTsKLSAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcyhsaW5rQnVmZmVyKTsKKyAg
ICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVy
KCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKSk7CisgICAg
aWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbV9ncmFwaC5t
X3BsYW4uZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcihtX2dyYXBoLm1f
cGxhbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxpbmsoKmxpbmtCdWZmZXIpOwor
ICAgIG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKCpsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSBzdGFjayBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8g
REZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgotICAgIGxpbmtCdWZmZXIu
bGluayhtX2NhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXIu
bGluayhtX2NhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3Rp
X29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CisgICAg
bGlua0J1ZmZlci0+bGluayhtX2NhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAg
IGxpbmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPm1faXNDb25z
dHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5
Q2hlY2spOwogICAgIAotICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKLSAgICAgICAg
bV9kaXNhc3NlbWJsZXItPmR1bXAobGlua0J1ZmZlcik7Ci0gICAgaWYgKG1fZ3JhcGgubV9jb21w
aWxhdGlvbikgewotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2dy
YXBoLm1fY29tcGlsYXRpb24uZ2V0KCksIGxpbmtCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fZ3JhcGgubV9jb21waWxhdGlvbik7
Ci0gICAgfQotCi0gICAgZW50cnlXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobGlua0J1
ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgZW50cnkgPSBtX2pp
dENvZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0g
YWRvcHRQdHIobmV3IEpJVEZpbmFsaXplcigKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1fZGlz
YXNzZW1ibGVyLnJlbGVhc2UoKSwgbV9qaXRDb2RlLnJlbGVhc2UoKSwKKyAgICAgICAgbGlua0J1
ZmZlci5yZWxlYXNlKCksIG1fYXJpdHlDaGVjaykpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NywyMiArMjQ3LDIyIEBAIHB1YmxpYzoKICAg
ICBKSVRDb21waWxlcihHcmFwaCYgZGZnKTsKICAgICB+SklUQ29tcGlsZXIoKTsKICAgICAKLSAg
ICBib29sIGNvbXBpbGUoKTsKLSAgICBib29sIGNvbXBpbGVGdW5jdGlvbigpOworICAgIHZvaWQg
Y29tcGlsZSgpOworICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9uKCk7CiAgICAgCi0gICAgYm9vbCBs
aW5rKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSk7Ci0gICAgYm9vbCBsaW5rRnVuY3Rpb24o
UmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5
V2l0aEFyaXR5Q2hlY2spOworICAgIHZvaWQgbGluaygpOworICAgIHZvaWQgbGlua0Z1bmN0aW9u
KCk7CiAKICAgICAvLyBBY2Nlc3NvcnMgZm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgmIGdyYXBo
KCkgeyByZXR1cm4gbV9ncmFwaDsgfQogICAgIAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9p
bnQqIHdhdGNocG9pbnQsIFdhdGNocG9pbnRTZXQqIHNldCkKICAgICB7Ci0gICAgICAgIG1fZ3Jh
cGgubV93YXRjaHBvaW50cy5hZGRMYXppbHkod2F0Y2hwb2ludCwgc2V0KTsKKyAgICAgICAgbV9n
cmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50LCBzZXQpOwogICAgIH0KICAg
ICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBJbmxpbmVXYXRjaHBvaW50
U2V0JiBzZXQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYWRkTGF6aWx5
KHdhdGNocG9pbnQsIHNldCk7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXpp
bHkod2F0Y2hwb2ludCwgc2V0KTsKICAgICB9CiAgICAgCiAgICAgLy8gTWV0aG9kcyB0byBzZXQg
bGFiZWxzIGZvciB0aGUgZGlzYXNzZW1ibGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdKSVRGaW5hbGl6ZXIuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZH
UGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0pJVEZpbmFsaXpl
cjo6SklURmluYWxpemVyKFBsYW4mIHBsYW4sIFBhc3NPd25QdHI8RGlzYXNzZW1ibGVyPiBkaXNh
c3NlbWJsZXIsIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSwgUGFzc093blB0cjxMaW5rQnVm
ZmVyPiBsaW5rQnVmZmVyLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYXJpdHlDaGVjaykKKyAgICA6
IEZpbmFsaXplcihwbGFuKQorICAgICwgbV9kaXNhc3NlbWJsZXIoZGlzYXNzZW1ibGVyKQorICAg
ICwgbV9qaXRDb2RlKGppdENvZGUpCisgICAgLCBtX2xpbmtCdWZmZXIobGlua0J1ZmZlcikKKyAg
ICAsIG1fYXJpdHlDaGVjayhhcml0eUNoZWNrKQoreworfQorCitKSVRGaW5hbGl6ZXI6On5KSVRG
aW5hbGl6ZXIoKQoreworfQorCitib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoUmVmUHRyPEpT
Qzo6SklUQ29kZT4mIGVudHJ5KQoreworICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCisgICAg
bV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdp
dGhvdXREaXNhc3NlbWJseSgpKTsKKyAgICBlbnRyeSA9IG1faml0Q29kZTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVm
UHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0
eUNoZWNrKQoreworICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCisgICAgd2l0aEFyaXR5Q2hl
Y2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAgICBtX2ppdENv
ZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5KCkpOworICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQoreworICAgIGlm
IChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgbV9kaXNhc3NlbWJsZXItPmR1bXAo
Km1fbGlua0J1ZmZlcik7CisgICAgCisgICAgaWYgKG1fcGxhbi5jb21waWxhdGlvbikgeworICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX3BsYW4uY29tcGlsYXRpb24u
Z2V0KCksICptX2xpbmtCdWZmZXIpOworICAgICAgICBtX3BsYW4udm0oKS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb21waWxhdGlvbik7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHSklURmluYWxpemVyX2gKKyNkZWZp
bmUgREZHSklURmluYWxpemVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJERkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBKSVRGaW5hbGl6ZXIgOiBwdWJsaWMgRmluYWxpemVyIHsKK3B1YmxpYzoKKyAgICBKSVRGaW5h
bGl6ZXIoUGxhbiYsIFBhc3NPd25QdHI8RGlzYXNzZW1ibGVyPiwgUGFzc1JlZlB0cjxKSVRDb2Rl
PiwgUGFzc093blB0cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwoKSk7CisgICAgdmlydHVhbCB+SklURmluYWxpemVy
KCk7CisgICAgCisgICAgYm9vbCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkp
OworICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnks
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworCitwcml2YXRlOgorICAg
IHZvaWQgZmluYWxpemVDb21tb24oKTsKKyAgICAKKyAgICBPd25QdHI8RGlzYXNzZW1ibGVyPiBt
X2Rpc2Fzc2VtYmxlcjsKKyAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOworICAgIE93blB0
cjxMaW5rQnVmZmVyPiBtX2xpbmtCdWZmZXI7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
YXJpdHlDaGVjazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSklURmluYWxpemVyX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGxhbi5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgiCisj
aW5jbHVkZSAiREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR0J5
dGVDb2RlUGFyc2VyLmgiCisjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKKyNpbmNsdWRlICJERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0ZhaWxl
ZEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKKyNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgor
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1
ZGUgIkZUTENvbXBpbGUuaCIKKyNpbmNsdWRlICJGVExMaW5rLmgiCisjaW5jbHVkZSAiRlRMTG93
ZXJERkdUb0xMVk0uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdGF0aWMgdm9pZCBk
dW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0KQoreworICAg
IEdyYXBoRHVtcE1vZGUgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7CisgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBkYXRhTG9nKHRleHQsICJc
biIpOworICAgICAgICBncmFwaC5kdW1wKCk7CisgICAgICAgIG1vZGVGb3JGaW5hbFZhbGlkYXRl
ID0gRG9udER1bXBHcmFwaDsKKyAgICB9CisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisg
ICAgICAgIHZhbGlkYXRlKGdyYXBoLCBtb2RlRm9yRmluYWxWYWxpZGF0ZSk7Cit9CisKK1BsYW46
OlBsYW4oCisgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgdW5zaWduZWQgbnVtVmFyc1dp
dGhWYWx1ZXMpCisgICAgOiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKKyAgICAsIGNvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29k
ZUluZGV4KQorICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCisgICAg
LCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0
aFZhbHVlcykKKyAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2st
PnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9j
ayksIFByb2ZpbGVyOjpERkcpKSA6IDApCisgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2spCit7
Cit9CisKK1BsYW46On5QbGFuKCkKK3sKK30KKwordm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24g
KFBsYW4pIik7CisgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3BlOworCisgICAg
R3JhcGggZGZnKHZtKCksICp0aGlzKTsKKyAgICAKKyAgICBpZiAoIXBhcnNlKGRmZykpIHsKKyAg
ICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIEJ5IHRoaXMgcG9pbnQgdGhlIERG
RyBieXRlY29kZSBwYXJzZXIgd2lsbCBoYXZlIHBvdGVudGlhbGx5IG11dGF0ZWQgdmFyaW91cyB0
YWJsZXMKKyAgICAvLyBpbiB0aGUgQ29kZUJsb2NrLiBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIHBl
cmZvcm0gYW4gZWFybHkgc2hyaW5rLCB3aGljaCBpcyBtb3JlCisgICAgLy8gcG93ZXJmdWwgdGhh
biBhIGxhdGUgb25lLiBJdCdzIHNhZmUgdG8gZG8gc28gYmVjYXVzZSB3ZSBoYXZlbid0IGdlbmVy
YXRlZCBhbnkgY29kZQorICAgIC8vIHRoYXQgcmVmZXJlbmNlcyBhbnkgb2YgdGhlIHRhYmxlcyBk
aXJlY3RseSwgeWV0LgorICAgIGNvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpFYXJs
eVNocmluayk7CisKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgdmFsaWRh
dGUoZGZnKTsKKyAgICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICBwZXJm
b3JtVW5pZmljYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtUHJlZGljdGlvbkluamVjdGlvbihkZmcp
OworICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICB2YWxpZGF0ZShk
ZmcpOworICAgIAorICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcpOworICAgIHBl
cmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtRml4dXAoZGZnKTsK
KyAgICBwZXJmb3JtVHlwZUNoZWNrSG9pc3RpbmcoZGZnKTsKKyAgICAKKyAgICBkZmcubV9maXhw
b2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CisKKyAgICBwZXJmb3JtQ1NFKGRmZyk7
CisgICAgcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKGRmZyk7CisgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5j
ZSBDU0UgcmFyZWx5IGRldGhyZWFkcywgYW5kIGFyZ3VtZW50cyBzaW1wbGlmaWNhdGlvbiByYXJl
bHkgZG9lcyBhbnl0aGluZy4KKyAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgcGVyZm9ybUNvbnN0
YW50Rm9sZGluZyhkZmcpOworICAgIHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOworCisg
ICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOworCisgICAgcGVyZm9y
bVN0b3JlRWxpbWluYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsK
KyAgICBwZXJmb3JtRENFKGRmZyk7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoT3B0
aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkKKyAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29t
cGlsZUZ1bmN0aW9uCisgICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CisgICAgICAg
IAorICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRM
IGxvd2VyaW5nOiIpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgT1NSIGVu
dHJ5LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjI1CisgICAgICAgIAorICAgICAgICBGVEw6OlN0YXRlIHN0YXRlKGRmZyk7CisgICAgICAg
IEZUTDo6bG93ZXJERkdUb0xMVk0oc3RhdGUpOworICAgICAgICBGVEw6OmNvbXBpbGUoc3RhdGUp
OworICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIAorICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uKGRmZyk7CisgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGFmdGVy
IG9wdGltaXphdGlvbjoiKTsKKworICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGRmZyk7Cisg
ICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikgeworICAgICAgICBkYXRhRmxv
d0pJVC5jb21waWxlRnVuY3Rpb24oKTsKKyAgICAgICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9u
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVP
dGhlcik7CisgICAgICAgIAorICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKCk7CisgICAgICAg
IGRhdGFGbG93SklULmxpbmsoKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGZpbmFsaXplcik7
Cit9CisKK2Jvb2wgUGxhbjo6aXNTdGlsbFZhbGlkKCkKK3sKKyAgICByZXR1cm4gd2F0Y2hwb2lu
dHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIGNoYWlucy5hcmVTdGlsbFZhbGlkKCk7Cit9
CisKK3ZvaWQgUGxhbjo6cmVhbGx5QWRkKCkKK3sKKyAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQo
KTsKKyAgICBpZGVudGlmaWVycy5yZWFsbHlBZGQodm0oKSk7Cit9CisKK0NvbXBpbGF0aW9uUmVz
dWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK3sKKyAgICBpZiAoIWlzU3Rp
bGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKKyAgICAK
KyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9u
KQorICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplRnVuY3Rpb24oaml0Q29kZSwg
KmppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBmaW5h
bGl6ZXItPmZpbmFsaXplKGppdENvZGUpOworICAgIAorICAgIGlmICghcmVzdWx0KQorICAgICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR1BsYW5faAorI2RlZmluZSBERkdQbGFuX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRl
ICJERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgiCisjaW5jbHVkZSAiREZHRmluYWxpemVyLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJD
b21waWxhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gQ29tcGlsZU1vZGUgeyBDb21w
aWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OworZW51bSBDb21waWxhdGlvblJlc3VsdCB7IENv
bXBpbGF0aW9uRmFpbGVkLCBDb21waWxhdGlvbkludmFsaWRhdGVkLCBDb21waWxhdGlvblN1Y2Nl
c3NmdWwgfTsKKworc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxh
bj4geworICAgIFBsYW4oCisgICAgICAgIENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgICAgICB1
bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyk7CisgICAgflBsYW4oKTsKKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVJblRocmVhZCgpOworICAgIAorICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXpl
KFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgCisgICAgVk0mIHZtKCkgeyByZXR1cm4gKmNvZGVC
bG9jay0+dm0oKTsgfQorCisgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2s7CisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OworICAg
IHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RI
YW5kbGVWYWx1ZXM7CisKKyAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxh
dGlvbjsKKworICAgIE93blB0cjxGaW5hbGl6ZXI+IGZpbmFsaXplcjsKKyAgICAKKyAgICBEZXNp
cmVkV2F0Y2hwb2ludHMgd2F0Y2hwb2ludHM7CisgICAgRGVzaXJlZElkZW50aWZpZXJzIGlkZW50
aWZpZXJzOworICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMgY2hhaW5zOworCitwcml2YXRlOgor
ICAgIGJvb2wgaXNTdGlsbFZhbGlkKCk7CisgICAgdm9pZCByZWFsbHlBZGQoKTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHUGxhbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1
MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTYgKzc0LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFy
Z2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGJsb2NrLT5i
eXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAg
ICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlC
eXRlY29kZUluZGV4KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fcGxhbi5t
dXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSkpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOwogICAg
ICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZh
bHVlc1tpXSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dy
YXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmdJbXBsKiBpZGVudGlmaWVyVUlEKHVuc2lnbmVkIGluZGV4
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9pZGVudGlmaWVyc1tpbmRl
eF07CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLmlkZW50aWZpZXJzKClbaW5kZXhdOwog
ICAgIH0KIAogICAgIC8vIFNwaWxsIGFsbCBWaXJ0dWFsUmVnaXN0ZXJzIGJhY2sgdG8gdGhlIEpT
U3RhY2suCkBAIC0zMDE1LDcgKzMwMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVTdHJpbmdPYmplCiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAg
ICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPnN0
cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgIFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3Ry
dWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwo
KS0+c3RydWN0dXJlKCk7Ci0gICAgQVNTRVJUKG1faml0LmdyYXBoKCkubV93YXRjaHBvaW50cy5p
c1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0KCkpKTsKKyAgICBBU1NFUlQobV9qaXQuZ3JhcGgoKS53YXRjaHBvaW50cygpLmlzVmFs
aWRPck1peGVkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoKSkpOwogICAgIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIE5vdFN0cmluZ09i
amVjdCwgSlNWYWx1ZVJlZ3MoKSwgMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUw
MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDEwICsxOTUsMTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrLT5pc09TUlRhcmdldCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4KQorICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9w
bGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgu
bV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX3BsYW4ubXVz
dEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjA4
LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgu
bV9tdXN0SGFuZGxlVmFsdWVzW2ldOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMR2VuZXJhdGVkRnVuY3Rpb25faAor
I2RlZmluZSBGVExHZW5lcmF0ZWRGdW5jdGlvbl9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNTdGF0ZSopOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBGVExHZW5lcmF0ZWRGdW5jdGlvbl9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEpJVEZp
bmFsaXplci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR1BsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitKSVRGaW5hbGl6ZXI6OkpJ
VEZpbmFsaXplcihQbGFuJiBwbGFuKQorICAgIDogRmluYWxpemVyKHBsYW4pCit7Cit9CisKK0pJ
VEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCit7CisgICAgaWYgKG1fZW5naW5lKQorICAgICAg
ICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7Cit9CisKK2Jvb2wgSklURmlu
YWxpemVyOjpmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYpCit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSklURmlu
YWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBtX2ppdENvZGUtPmlu
aXRpYWxpemVFeGl0VGh1bmtzKAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAg
ICAgICptX2V4aXRUaHVua3NMaW5rQnVmZmVyLAorICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVu
a3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxv
Y2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKKyAgICAKKyAgICB3aXRoQXJpdHlDaGVj
ayA9IG1fZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAg
ICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlKAorICAgICAgICBtX2VuZ2luZSwKKyAgICAgICAg
RklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlua0J1ZmZlciwK
KyAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5l
cmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4u
Y29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIG1fZnVuY3Rpb24pKSk7CisgICAg
ZW50cnkgPSBtX2ppdENvZGU7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKSVRGaW5hbGl6ZXJfaAorI2RlZmluZSBGVExKSVRG
aW5hbGl6ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkRGR0ZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEdlbmVyYXRl
ZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTExMVk1I
ZWFkZXJzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSklURmlu
YWxpemVyIDogcHVibGljIERGRzo6RmluYWxpemVyIHsKK3B1YmxpYzoKKyAgICBKSVRGaW5hbGl6
ZXIoREZHOjpQbGFuJik7CisgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CisgICAgCisgICAg
dm9pZCBpbml0aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIoUGFzc093blB0cjxMaW5rQnVmZmVy
PiBidWZmZXIpCisgICAgeworICAgICAgICBtX2V4aXRUaHVua3NMaW5rQnVmZmVyID0gYnVmZmVy
OworICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVFbnRyeXBvaW50TGlua0J1ZmZlcihQYXNzT3du
UHRyPExpbmtCdWZmZXI+IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1fZW50cnlwb2ludExpbmtC
dWZmZXIgPSBidWZmZXI7CisgICAgfQorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1
dGlvbkVuZ2luZVJlZiBlbmdpbmUpCisgICAgeworICAgICAgICBtX2VuZ2luZSA9IGVuZ2luZTsK
KyAgICB9CisgICAgdm9pZCBpbml0aWFsaXplRnVuY3Rpb24oR2VuZXJhdGVkRnVuY3Rpb24gZnVu
Y3Rpb24pCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uID0gZnVuY3Rpb247CisgICAgfQorICAg
IHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2soTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsKQor
ICAgIHsKKyAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWw7CisgICAgfQorICAgIHZvaWQgaW5p
dGlhbGl6ZUpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKQorICAgIHsKKyAgICAg
ICAgbV9qaXRDb2RlID0gaml0Q29kZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBmaW5hbGl6ZShS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpOworICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbihS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFy
aXR5Q2hlY2spOworCitwcml2YXRlOgorICAgIE93blB0cjxMaW5rQnVmZmVyPiBtX2V4aXRUaHVu
a3NMaW5rQnVmZmVyOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBtX2VudHJ5cG9pbnRMaW5rQnVm
ZmVyOworICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fYXJpdHlDaGVjazsKKyAgICBHZW5lcmF0ZWRGdW5jdGlvbiBtX2Z1bmN0
aW9uOworICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TEpJVEZpbmFsaXplcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNw
cAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTUgKzQ3LDggQEAgc3RhdGljIHZvaWQgY29tcGls
ZUVudHJ5KENDYWxsSGVscGVycyYgagogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJh
bWVIZWFkZXIoaml0LmNvZGVCbG9jaygpLCBKU1N0YWNrOjpDb2RlQmxvY2spOwogfQogCi1ib29s
IGxpbmsoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCit2b2lkIGxpbmsoU3RhdGUm
IHN0YXRlKQogewotICAgIGlmICghc3RhdGUuZ3JhcGguaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAg
ICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoc3RhdGUuZW5naW5lKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBzdGF0ZS5ncmFwaC5tX3dhdGNocG9pbnRzLnJl
YWxseUFkZCgpOwotICAgIAogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4KICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hvdWxkIGp1c3QgdXNlIG91ciBj
YWxsaW5nIGNvbnZlbnRpb24uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYyMQpAQCAtMTI0LDE5ICsxMTcsMTUgQEAgYm9vbCBsaW5rKFN0YXRlJiBz
dGF0ZSwgUmVmUHRyPEpTQzo6SklUQwogICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOwog
ICAgICAgICAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmpp
dCwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwot
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKLSAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2ssIHN0YXRlLmdyYXBoLm1fY29kZUJsb2Nr
LT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3Bf
Y2FsbF9hcml0eUNoZWNrKTsKLSAgICAgICAgCi0gICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIHN0YXRlLmppdENvZGUtPmlu
aXRpYWxpemVDb2RlKAotICAgICAgICBzdGF0ZS5lbmdpbmUsCi0gICAgICAgIEZJTkFMSVpFX0RG
R19DT0RFKAotICAgICAgICAgICAgbGlua0J1ZmZlciwKLSAgICAgICAgICAgICgiRlRMIGVudHJ5
cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29k
ZTo6RlRMSklUKSkuZGF0YSgpLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpKTsKLSAgICBqaXRD
b2RlID0gc3RhdGUuaml0Q29kZTsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9
IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgbGlua0J1
ZmZlci0+bGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKKyAgICBsaW5rQnVm
ZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0Nv
bnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJp
dHlDaGVjayk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgc3RhdGUuZmluYWxpemVyLT5p
bml0aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOworICAg
IHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUNvZGUoc3RhdGUuZW5naW5lKTsKKyAgICBzdGF0
ZS5maW5hbGl6ZXItPmluaXRpYWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7
CisgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplQXJpdHlDaGVjayhhcml0eUNoZWNrKTsK
KyAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVKSVRDb2RlKHN0YXRlLmppdENvZGUpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExpbmsuaAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1ib29sIGxpbmsoU3RhdGUmLCBSZWZQdHI8SlNDOjpK
SVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
K3ZvaWQgbGluayhTdGF0ZSYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1OCw5ICsxOTU4LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBpZiAobV9leGl0VGh1bmtHZW5lcmF0b3IuZGlkVGhpbmdzKCkpIHsKLSAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigKKyAgICAgICAgICAgIE93blB0cjxMaW5rQnVmZmVyPiBs
aW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCiAgICAgICAgICAgICAgICAgdm0o
KSwgJm1fZXhpdFRodW5rR2VuZXJhdG9yLCBtX2Z0bFN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLAot
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKICAgICAgICAgCiAgICAgICAgICAgICBB
U1NFUlQobV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQuc2l6ZSgpKTsKICAgICAgICAgCkBAIC0xOTY4LDIwICsxOTY4LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3Rh
dGUub3NyRXhpdFtpXTsKICAgICAgICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0W2ldOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGluZm8ubV90aHVua0p1bXAsIHRhcmdldCk7CisgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci0+bGluayhpbmZvLm1fdGh1bmtKdW1wLCB0YXJnZXQpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KAogICAgICAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVj
dXRhYmxlQWRkcmVzcygpKSwKICAgICAgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVz
cyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9m
ZnNldCA9IGxpbmtCdWZmZXIub2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7CisgICAgICAgICAg
ICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihp
bmZvLm1fdGh1bmtKdW1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgICAgICBt
X2Z0bFN0YXRlLmppdENvZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAotICAgICAgICAgICAgICAg
IEZJTkFMSVpFX0RGR19DT0RFKAotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLAotICAg
ICAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpG
VExKSVQpKS5kYXRhKCkpKSk7CisgICAgICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+aW5p
dGlhbGl6ZUV4aXRUaHVua3NMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIG1fb3V0Lmp1bXAobV9hcmd1bWVudENoZWNrcyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dp
dGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDIsNiArNDMsOCBAQCBTdGF0ZTo6U3RhdGUoR3Jh
cGgmIGdyYXBoKQogICAgICwgZW5naW5lKDApCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQog
eworICAgIGZpbmFsaXplciA9IG5ldyBKSVRGaW5hbGl6ZXIoZ3JhcGgubV9wbGFuKTsKKyAgICBn
cmFwaC5tX3BsYW4uZmluYWxpemVyID0gYWRvcHRQdHIoZmluYWxpemVyKTsKIH0KIAogdm9pZCBT
dGF0ZTo6ZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxNCBAQAogCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5j
bHVkZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisj
aW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRG
dW5jdGlvbikoRXhlY1N0YXRlKik7Ci0KIGNsYXNzIFN0YXRlIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdGF0ZSk7CiAgICAgCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKICAgICBWZWN0
b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsKICAgICBMTFZNRXhlY3V0aW9uRW5n
aW5lUmVmIGVuZ2luZTsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsK
KyAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKICAgICAKICAgICB2b2lkIGR1bXBTdGF0ZShj
b25zdCBjaGFyKiB3aGVuKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201771</attachid>
            <date>2013-05-14 16:49:44 -0700</date>
            <delta_ts>2013-05-15 10:22:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102485</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MiBA
QAorMjAxMy0wNS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc2VwYXJhdGUgbGluayBwaGFzZSBpbnRvIHRoaW5ncyB0
aGF0IG11c3QgYmUgZG9uZSBjb25jdXJyZW50bHkgYW5kIHRoaW5ncyB0aGF0IG11c3QgYmUgZG9u
ZSBzeW5jaHJvbm91c2x5LCBhbmQgaGF2ZSBhIHdheSBvZiBwYXNzaW5nIGRhdGEgZnJvbSBvbmUg
dG8gdGhlIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTYwNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBhIERGRzo6UGxhbiwg
d2hpY2ggY29ycmVzcG9uZHMgdG86CisgICAgICAgIAorICAgICAgICAtIFRoZSBkYXRhIHRoYXQg
dGhlIGNvbmN1cnJlbnQgREZHIG9yIEZUTCBuZWVkIHRvIHN0YXJ0IGNvbXBpbGluZyBhIENvZGVC
bG9jay4KKyAgICAgICAgICBUaGlzIG1vc3RseSBpbmNsdWRlcyBiYXNpYyB0aGluZ3MgbGlrZSBD
b2RlQmxvY2sqLCBidXQgYWxzbyBhIGxpc3Qgb2YKKyAgICAgICAgICBtdXN0LWhhbmRsZSB2YWx1
ZXMgZm9yIE9TUiBlbnRyeS4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGRhdGEgdGhhdCB0aGUg
c3luY2hyb25vdXMgbGlua2VyIG5lZWQgdG8gbGluayBpbiBjb2RlIGNvbXBpbGVkIGJ5IGEKKyAg
ICAgICAgICBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZC4gVGhpcyBpcyBmdXJ0aGVyIGVu
Y2Fwc3VsYXRlZCBieSBERkc6OkZpbmFsaXplciwKKyAgICAgICAgICBzaW5jZSB0aGUgZGF0YSwg
YW5kIHRoZSBhY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0YWtlbiwgYXJlIGRpZmZlcmVudCBpbiBE
RkcKKyAgICAgICAgICB2ZXJzdXMgRlRMLiBUaGlzIHBhdGNoIGFsc28gaW5zdGl0dXRlcyB0aGUg
cG9saWN5IHRoYXQgdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICBjb21waWxhdGlvbiB0aHJlYWQg
c2hhbGwgbm90IHVzZSBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCksIHNpbmNlIHRo
YXQKKyAgICAgICAgICBjb2RlIGFzc3VtZXMgdGhhdCBpdCdzIHJ1bm5pbmcgb24gdGhlIHNhbWUg
dGhyZWFkIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhlCisgICAgICAgICAgY29kZS4KKyAgICAg
ICAgCisgICAgICAgIC0gVGhlIGFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHRha2VuIHRvIGNvbXBp
bGUgY29kZS4gSW4gb3RoZXIgd29yZHMsIG1vc3Qgb2YgdGhlCisgICAgICAgICAgY29kZSB0aGF0
IHByZXZpb3VzbHkgbGl2ZWQgaW4gREZHRHJpdmVyLmNwcCBub3cgbGl2ZXMgaW4KKyAgICAgICAg
ICBERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCgpLgorICAgICAgICAKKyAgICAgICAgLSBUaGUg
YWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdGFrZW4gd2hlbiBzeW5jaHJvbm91c2x5IGxpbmtpbmcg
dGhlIGNvZGUuIFRoaXMKKyAgICAgICAgICBpbmNsdWRlcyAicmVhbGx5IiBhZGRpbmcgd2F0Y2hw
b2ludHMgYW5kIGlkZW50aWZpZXJzLCBjaGVja2luZyB3YXRjaHBvaW50IGFuZAorICAgICAgICAg
IGNoYWluIHZhbGlkaXR5LCBhbmQgcnVubmluZyB0aGUgREZHOjpGaW5hbGl6ZXIuCisgICAgICAg
IAorICAgICAgICBDdXJyZW50bHksIERGR0RyaXZlciBqdXN0IGNyZWF0ZXMgYSBQbGFuIGFuZCBy
dW5zIGl0IHN5bmNocm9ub3VzbHkuIEJ1dCBpbiB0aGUKKyAgICAgICAgZnV0dXJlLCB3ZSB3aWxs
IGJlIGFibGUgdG8gbWFsbG9jIHNvbWUgUGxhbnMgYW5kIGVucXVldWUgdGhlbSwgYW5kIGhhdmUg
dGhlCisgICAgICAgIGNvbmN1cnJlbnQgdGhyZWFkIGRlcXVldWUgdGhlbSBhbmQgY2FsbCBQbGFu
Ojpjb21waWxlSW5UaHJlYWQoKS4KKyAgICAgICAgCisgICAgICAgIEZvciBub3csIHRoaXMgaGFz
IG5vIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0
aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoTGlua0J1
ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjp+TGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlckZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6RmFpbGVk
RmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6On5GYWlsZWRG
aW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6
CisgICAgICAgICogZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChGYWlsZWRGaW5hbGl6ZXIpOgorICAgICAgICAqIGRmZy9ERkdGaW5hbGl6
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RmluYWxp
emVyOjpGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZpbmFsaXplcjo6fkZpbmFsaXpl
cik6CisgICAgICAgICogZGZnL0RGR0ZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChGaW5hbGl6ZXIpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb21waWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlkZW50aWZpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjaGFpbnMpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGlua0Z1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoK
KyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
YWRkTGF6aWx5KToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6SklURmluYWxp
emVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAgICAgICAoSlND
OjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICogZGZnL0RGR0pJVEZp
bmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKSVRGaW5hbGl6ZXIp
OgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6OmR1bXBBbmRWZXJpZnlHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6flBsYW4pOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZWFsbHlBZGQpOgor
ICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcvREZHUGxh
bi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChQbGFuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjp2bSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpy
dW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjppZGVudGlmaWVyVUlEKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAg
ICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExK
SVRGaW5hbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZU
TDo6SklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZp
bmFsaXplcjo6fkpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6IEFkZGVkLgorICAgICAg
ICAoRlRMKToKKyAgICAgICAgKEpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6SklU
RmluYWxpemVyOjppbml0aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIpOgorICAgICAgICAoSlND
OjpGVEw6OkpJVEZpbmFsaXplcjo6aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVDb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplQXJpdHlDaGVjayk6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplSklUQ29kZSk6CisgICAgICAgICogZnRs
L0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9G
VExMaW5rLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmxpbmtPU1JFeGl0c0Fu
ZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9ja3MpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBmdGwvRlRM
U3RhdGUuaDoKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChTdGF0ZSk6CisKIDIwMTMtMDUtMTQg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3Vy
dGhUaWVyOiBTZWdmYXVsdCBpbiBqc2Mgd2l0aCBzaW1wbGUgdGVzdCBwcm9ncmFtIHdoZW4gcnVu
bmluZyB3aXRoIHByb2ZpbGUgZHVtcGluZyBlbmFibGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMxOCw2ICszMTgsMTcgQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0
ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CiAJ
CTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFF
MDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBG
VExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJD
Q0UxNzQyRDdENDAwN0IzQzFCIC8qIEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDQjE3NDJEN0QzMDA3QjND
MUIgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIgLyogRlRMSklU
RmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGREIyQ0NDMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovOyB9
OworCQkwRkRCMkNEMDE3NDJEN0RBMDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDRDE3NDJEN0Qz
MDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDRDkxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0Zh
aWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmNw
cCAqLzsgfTsKKwkJMEZEQjJDREExNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZhaWxlZEZpbmFsaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJD
RDIxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGREIyQ0RCMTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQjJDRDMxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5j
cHAgKi87IH07CisJCTBGREIyQ0RDMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q0MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRCMkNERDE3NDJEODA0MDA3QjNDMUIgLyogREZH
SklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGREIyQ0Q1MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuY3BwICov
OyB9OworCQkwRkRCMkNERTE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNENjE3NDJE
ODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDREYxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R1BsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEQjJDRDcxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uY3BwICovOyB9OworCQkwRkRCMkNF
MDE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDgxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRE
QkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBG
RERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5
NkM0OCAvKiBPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzA2LDYgKzEzMTcsMTcg
QEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWN1bGF0ZWRUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZU
TEFiYnJldmlhdGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5o
OyBwYXRoID0gZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVG
cm9tQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDQ0IxNzQyRDdE
MzAwN0IzQzFCIC8qIEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEdl
bmVyYXRlZEZ1bmN0aW9uLmg7IHBhdGggPSBmdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDQ0MxNzQyRDdEMzAwN0IzQzFCIC8qIEZU
TEpJVEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKSVRGaW5hbGl6ZXIuY3Bw
OyBwYXRoID0gZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGREIyQ0NEMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMSklURmluYWxpemVyLmg7IHBhdGggPSBmdGwvRlRMSklURmluYWxpemVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0QxMTc0MkQ4MDQwMDdCM0Mx
QiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHRmFpbGVkRmluYWxpemVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNEMjE3NDJEODA0
MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFs
aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNEMzE3NDJEODA0MDA3
QjNDMUIgLyogREZHRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRDQxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0ZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaW5hbGl6
ZXIuaDsgcGF0aCA9IGRmZy9ERkdGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEQjJDRDUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRGaW5hbGl6ZXIuY3BwOyBw
YXRoID0gZGZnL0RGR0pJVEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGREIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklURmluYWxpemVyLmg7IHBhdGggPSBkZmcv
REZHSklURmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0Q3
MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1BsYW4uY3BwOyBwYXRoID0gZGZnL0RGR1BsYW4uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxh
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQbGFuLmg7IHBhdGggPSBk
ZmcvREZHUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4
IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTMzLDEwICsyMTU1LDEz
IEBACiAJCQkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi8s
CiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oICovLAogCQkJ
CTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oICovLAorCQkJ
CTBGREIyQ0NCMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAog
CQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNw
cCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oICovLAogCQkJCTBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCAqLywKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAor
CQkJCTBGREIyQ0NDMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAor
CQkJCTBGREIyQ0NEMTc0MkQ3RDMwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKIAkJ
CQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi8sCiAJCQkJMEY4RjJC
OTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLywKIAkJCQkwRkVBMEExMzE3MDYzNjM2
MDBCQjcyMkMgLyogRlRMTExWTUhlYWRlcnMuaCAqLywKQEAgLTI4MzMsOCArMjg1OCw2IEBACiAJ
CTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdE
ZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKLQkJCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUy
RDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJCTBGNjIwMTZEMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKIAkJCQkwRjYyMDE2RTE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZF
NDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTI4NzgsNiArMjkwMSw4
IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJ
CQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAg
Ki8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5oICovLAorCQkJCTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0
dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5oICovLAogCQkJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAv
KiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLAogCQkJCTBGRTg1MzRBMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLywKIAkJCQkwRkY0Mjc2MTE1OTFBMUM5
MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTI4ODksNiArMjkxNCwxMCBA
QAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKIAkJCQkw
RkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZHRWRnZS5jcHAgKi8sCiAJCQkJMEY2NkUxNjkx
NERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLywKKwkJCQkwRkRCMkNEMTE3NDJEODA0MDA3
QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLywKKwkJCQkwRkRCMkNEMjE3NDJEODA0
MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi8sCisJCQkJMEZEQjJDRDMxNzQyRDgw
NDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5jcHAgKi8sCisJCQkJMEZEQjJDRDQxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5oICovLAogCQkJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBE
RkdGUFJJbmZvLmggKi8sCkBAIC0yOTAxLDYgKzI5MzAsOCBAQAogCQkJCTBGRUEwQTMwMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKKwkJCQkwRkRCMkNENTE3NDJEODA0MDA3QjNDMUIg
LyogREZHSklURmluYWxpemVyLmNwcCAqLywKKwkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIg
LyogREZHSklURmluYWxpemVyLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIg
LyogREZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAg
LyogREZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMjkzNCw2ICsyOTY1LDggQEAKIAkJCQkwRjIz
NUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8sCiAJCQkJ
MEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1
MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRkRCMkNENzE3NDJEODA0
MDA3QjNDMUIgLyogREZHUGxhbi5jcHAgKi8sCisJCQkJMEZEQjJDRDgxNzQyRDgwNDAwN0IzQzFC
IC8qIERGR1BsYW4uaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1
RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKQEAg
LTI5NTEsMTAgKzI5ODQsMTAgQEAKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQy
IC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZB
NTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8sCi0JCQkJMEY2Mzk0M0MxNUM3
NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAotCQkJCTBG
NjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8s
CiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJ
MEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAorCQkJCTBGNjM5NDND
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKKwkJ
CQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5oICovLAogCQkJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNw
cCAqLywKQEAgLTM0MDMsNiArMzQzNiw3IEBACiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2
IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3
NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2
MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRC
MkNEQzE3NDJEODA0MDA3QjNDMUIgLyogREZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM0OTgsNiArMzUzMiw3IEBACiAJCQkJQzIxMTIyRTMxNURE
OUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGREIyQ0UwMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzUyQTBFMTZGQ0MyMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkwMjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0
aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU4LDEwICsz
NTkzLDEyIEBACiAJCQkJODYxNThBQjMxNTVDOEI0MDAwQjQ1QzlDIC8qIFByb3BlcnR5TmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTQwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5
TmFtZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEg
LyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIyQ0NFMTc0MkQ3RDQw
MDdCM0MxQiAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5h
bGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQ
dXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJEQjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTYs
NiArMzY1Myw3IEBACiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0
dWJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyog
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QjBF
MTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIy
Q0RBMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzFFREVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MzcsNiArMzY3NSw3IEBACiAJCQkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFNEEzMzIwMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEQjJDRDAxNzQyRDdEQTAwN0IzQzFCIC8qIEZUTEpJVEZpbmFsaXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyog
V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1
IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLApAQCAtNDAzOCw2ICs0MDc3LDcgQEAKIAkJCQkxNDI5
RDhERDBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGREIyQ0Q5MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8q
IENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQw
MEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00MTAxLDEzICs0MTQxLDE0IEBACiAJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5Nzcy
MTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRCMkNEQjE3NDJEODA0MDA3QjNDMUIgLyog
REZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3
MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIz
MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCQjA5QzAxMzhFMzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZl
SklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQz
NTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8q
IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJC
OUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0EyQjE1NDc1MDAwMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00MTI3LDYgKzQxNjgsNyBAQAogCQkJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDky
MSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGREIyQ0NGMTc0MkQ3RDgwMDdCM0MxQiAvKiBGVExKSVRGaW5h
bGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzExNzBENDBCRjAwQkI3MjJDIC8q
IERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAw
NDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
MEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MTc1LDYgKzQyMTcsNyBAQAogCQkJCTE0N0YzOUQwMTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjEzNTlCMEE2NzdGNEYw
MEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTUxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGREIy
Q0RGMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlND
YWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDE5MCw2ICs0MjMzLDcgQEAK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRCMkNERDE3
NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODc1MTA3RUMxM0UwMDEzRTdCMiAvKiBKU0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ4NzRBRTMxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvQ29tcGlsYXRpb25UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0
Niw2ICsxNDcsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiB2
b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogewogI2lmbmRlZiBOREVCVUcK
KyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2NvbXBs
ZXRlZCk7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJl
dmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSklUQ29t
cGlsYXRpb25FZmZvcnQuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01OCw3ICs1OSw4IEBA
IGNsYXNzIFZNOwogLy8gICAqIFRoZSB2YWx1ZSByZWZlcmVuY2VkIGJ5IGEgRGF0YUxhYmVsIG1h
eSBiZSBzZXQuCiAvLwogY2xhc3MgTGlua0J1ZmZlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTGlua0J1ZmZlcik7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIENvZGVSZWY7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0
cjsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBMYWJlbDsKQEAgLTg2LDcgKzg4
LDYgQEAgcHVibGljOgogICAgICAgICAsIG1fdm0oJnZtKQogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKLSAgICAgICAgLCBtX2VmZm9ydChlZmZvcnQpCiAjZW5k
aWYKICAgICB7CiAgICAgICAgIGxpbmtDb2RlKG93bmVyVUlELCBlZmZvcnQpOwpAQCAtOTQsNyAr
OTUsNiBAQCBwdWJsaWM6CiAKICAgICB+TGlua0J1ZmZlcigpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9jb21wbGV0ZWQgfHwgKCFtX2V4ZWN1dGFibGVNZW1vcnkgJiYgbV9lZmZvcnQgPT0gSklU
Q29tcGlsYXRpb25DYW5GYWlsKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZGlkRmFpbFRvQWxs
b2NhdGUoKSBjb25zdApAQCAtMjY0LDcgKzI2NCw2IEBAIHByaXZhdGU6CiAgICAgVk0qIG1fdm07
CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgbV9jb21wbGV0ZWQ7Ci0gICAgSklUQ29tcGlsYXRp
b25FZmZvcnQgbV9lZmZvcnQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM1LDEyICsxMzUsMTIgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KEdyYXBoJiBncgogICAgICAgICB9CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAh
PSBncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgaWYgKGJsb2NrLT5ieXRl
Y29kZUJlZ2luICE9IGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX211
c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVj
aWZpYyhncmFwaCwgZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAgICAgICAgICAgIGlu
dCBvcGVyYW5kID0gZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
KyAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhncmFwaCwgZ3JhcGgubV9wbGFuLm11
c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBncmFwaC5tX3Bs
YW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBibG9j
ay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCkubWVyZ2UodmFsdWUpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgSW5pdGlhbGl6aW5nIEJsb2NrICMldSwgb3BlcmFuZCByJWQsIHRvICIsIGJsb2NrSW5kZXgs
IG9wZXJhbmQpOwpAQCAtMTI3Miw3ICsxMjcyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlRWZmZWN0cyh1bnNpZwogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAg
ICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sIHN0cnVjdHVyZSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2lkZW50aWZpZXJzW25vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KV0pOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRl
bnRpZmllck51bWJlcigpXSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2VydCB0aGluZ3MgdGhhdCB3ZSBjYW4ndCBo
YW5kbGUgYW5kIHRoYXQgdGhlIGNvbXB1dGVGb3IoKSBtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgLy8gYWJvdmUgd29uJ3QgYmUgYWJsZSB0byByZXR1cm4uCkBAIC0xMzM5LDcgKzEzMzksNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIGlu
ZmluaXR5IG9mIHN0cnVjdHVyZXMuCiAgICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgIHZhbHVl
Lm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+
c3RydWN0dXJlKCkpKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5tX3dhdGNocG9pbnRzLnNob3Vs
ZEFzc3VtZU1peGVkU3RhdGUobm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0KCkpKTsKKyAgICAgICAgICAgIHx8IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5zaG91bGRBc3N1
bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZS5maWx0ZXIobV9ncmFwaCwgbm9kZS0+c3RydWN0
dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKQEAgLTE0NzMsNyArMTQ3
Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+Y29kZU9yaWdpbiksCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAotICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCldLAorICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCldLAogICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVj
dCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7CiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgsIHN0cnVjdHVy
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsCiAKIHZvaWQgQWJzdHJhY3RWYWx1
ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICBpZiAoZ3JhcGgubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKKyAgICBpZiAoZ3JhcGgud2F0Y2hw
b2ludHMoKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgp
KSkKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBl
bHNlCiAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwpAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHIKIAog
dm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYg
Z3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChncmFwaC5tX3dhdGNocG9p
bnRzLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQor
ICAgIGlmIChncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KCkpKQogICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKHN0cnVjdHVyZSkpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Myw3ICs3OTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICBOb2RlKiBvYmplY3ROb2RlID0gY2VsbENvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIAog
ICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUKLSAgICAgICAgICAg
ICYmIG1fZ3JhcGgubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKSkgeworICAgICAgICAgICAgJiYgbV9ncmFwaC53YXRjaHBvaW50
cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBP
cEluZm8oc3RydWN0dXJlKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
Tm9kZTsKICAgICAgICAgfQpAQCAtMTcyNiw3ICsxNzI2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCgKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoZ2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSkpLCBi
YXNlKTsKICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5jaGFpbigpKSB7Ci0gICAgICAgIG1f
Z3JhcGgubV9jaGFpbnMuYWRkTGF6aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CisgICAgICAg
IG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CiAgICAg
ICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5SWRTdGF0dXMuc3RydWN0dXJl
U2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCk7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2Jq
ZWN0ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdldEJ5SWRTdGF0dXMu
Y2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKICAgICBSZXNvbHZlT3BlcmF0aW9uKiByZXNv
bHZlVmFsdWVPcGVyYXRpb24gPSBwYzsKICAgICBzd2l0Y2ggKHJlc29sdmVWYWx1ZU9wZXJhdGlv
bi0+bV9vcGVyYXRpb24pIHsKICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVy
bkdsb2JhbFByb3BlcnR5OiB7Ci0gICAgICAgIFJlc29sdmVHbG9iYWxTdGF0dXMgc3RhdHVzID0g
UmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2ssIG1fY3VycmVudEluZGV4LCByZXNvbHZlVmFsdWVPcGVyYXRpb24sIG1fZ3JhcGgu
bV9pZGVudGlmaWVyc1tpZGVudGlmaWVyXSk7CisgICAgICAgIFJlc29sdmVHbG9iYWxTdGF0dXMg
c3RhdHVzID0gUmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3VycmVudEluZGV4LCByZXNvbHZlVmFsdWVPcGVyYXRpb24s
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSk7CiAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CiAK
QEAgLTE5MDcsOSArMTkwNyw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9w
ZXJhdGkKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCi0gICAgICAgIFN0cmluZ0lt
cGwqIHVpZCA9IG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyXTsKKyAgICAgICAgU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdOwogICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5n
ZXQodWlkKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlk
KGVudHJ5LndhdGNocG9pbnRTZXQoKSkpIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNocG9p
bnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAg
ICp2YWx1ZSA9IGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8oZ2xvYmFsT2JqZWN0LT5h
c3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLCBPcElu
Zm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTIwMDEsOCArMjAwMSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb247IC8v
IFNvbWUgbWV0aG9kcyB3YW50IHRvIHVzZSB0aGlzLCBhbmQgd2UnZCByYXRoZXIgbm90IHRocmVh
ZCBpdCB0aHJvdWdoIGNhbGxzLgogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICAgICAg
Ci0gICAgICAgIGlmIChtX2dyYXBoLm1fY29tcGlsYXRpb24gJiYgb3Bjb2RlSUQgIT0gb3BfY2Fs
bF9wdXRfcmVzdWx0KSB7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBP
cEluZm8obV9ncmFwaC5tX2NvbXBpbGF0aW9uLT5leGVjdXRpb25Db3VudGVyRm9yKAorICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG9wY29kZUlEICE9IG9wX2NhbGxfcHV0X3Jl
c3VsdCkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChDb3VudEV4ZWN1dGlvbiwgT3BJbmZvKG1f
Z3JhcGguY29tcGlsYXRpb24oKS0+ZXhlY3V0aW9uQ291bnRlckZvcigKICAgICAgICAgICAgICAg
ICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9j
b2RlQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjU2Nyw3ICsyNTY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kXTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdOworICAgICAgICAgICAgU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAg
ICAgICAgICAgR2V0QnlJZFN0YXR1cyBnZXRCeUlkU3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssIG1fY3VycmVudEluZGV4LCB1aWQpOwogICAgICAgICAgICAgCkBAIC0yNTkwLDcgKzI1OTAs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
aWRlbnRpZmllcnNbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAgIG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXSk7CiAKICAgICAgICAgICAgIGlmICghcHV0
QnlJZFN0YXR1cy5pc1NldCgpKQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JF
eGl0KTsKQEAgLTI2MTYsNyArMjYxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAmJiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJl
Q2hhaW4oKQogICAgICAgICAgICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNo
YWluKCktPmlzU3RpbGxWYWxpZCgpKSkgewogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRkTGF6aWx5KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hh
aW4oKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkocHV0QnlJ
ZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWRpcmVjdCkgewpAQCAtMjcwNSw3ICsyNzA1LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKICAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmRdOwotICAgICAgICAg
ICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1i
ZXJdOworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICBpZiAo
IWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKApA
QCAtMzE4MSw3ICszMTgxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxl
UHV0Q2hlY2tlZDogewogICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+Z2V0KG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyXSk7CisgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+
Z2V0KG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSk7CiAgICAgICAgICAgICAgICAg
aWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRHbG9iYWxWYXJDaGVjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8oY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09i
amVjdChwdXRUb0Jhc2UtPm1fcmVnaXN0ZXJBZGRyZXNzKSksCkBAIC0zNTQ0LDkgKzM1NDQsOSBA
QCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytp
KSB7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIo
aSkuaW1wbCgpOwotICAgICAgICAgICAgQm9ycm93ZWRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29k
ZVBhcnNlci0+bV9ncmFwaC5tX2lkZW50aWZpZXJzLm51bWJlck9mSWRlbnRpZmllcnMoKSk7Cisg
ICAgICAgICAgICBCb3Jyb3dlZElkZW50aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRl
Q29kZVBhcnNlci0+bV9pZGVudGlmaWVyTWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2dy
YXBoLmlkZW50aWZpZXJzKCkubnVtYmVyT2ZJZGVudGlmaWVycygpKTsKICAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9n
cmFwaC5tX2lkZW50aWZpZXJzLmFkZExhemlseShyZXApOworICAgICAgICAgICAgICAgIGJ5dGVD
b2RlUGFyc2VyLT5tX2dyYXBoLmlkZW50aWZpZXJzKCkuYWRkTGF6aWx5KHJlcCk7CiAgICAgICAg
ICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAg
ICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7CkBAIC0zNjE0LDggKzM2MTQsOCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKICAgICAKLSAgICBpZiAobV9ncmFw
aC5tX2NvbXBpbGF0aW9uKSB7Ci0gICAgICAgIG1fZ3JhcGgubV9jb21waWxhdGlvbi0+YWRkUHJv
ZmlsZWRCeXRlY29kZXMoCisgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkgeworICAgICAg
ICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKAogICAgICAgICAg
ICAgKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUwMDkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAotICAgICAgICAgICAgICAgICAgICB2bSgpLCBzdHJ1Y3R1cmUsIG1fZ3JhcGgubV9p
ZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXSk7CisgICAgICAgICAgICAgICAgICAgIHZtKCks
IHN0cnVjdHVyZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBl
IGNhc2VzLgpAQCAtMjIxLDcgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVtYmVyXSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdLAogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpICYmICFz
dGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCkBAIC0yNTksNyArMjU5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRk
TGF6aWx5KHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RhdHVzLnN0
cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKQEAgLTM5Nyw3ICszOTcs
NyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21W
YWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZChj
ZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoY2VsbC0+c3RydWN0dXJlKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAg
IE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAx
NTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDM0ICsyOSwxNSBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKIAotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgiCi0jaW5jbHVkZSAiREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5oIgotI2luY2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCi0jaW5j
bHVkZSAiREZHQ0ZBUGhhc2UuaCIKLSNpbmNsdWRlICJERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmgiCi0jaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIgotI2luY2x1ZGUgIkRGR0NT
RVBoYXNlLmgiCi0jaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKLSNpbmNsdWRl
ICJERkdEQ0VQaGFzZS5oIgotI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKLSNpbmNsdWRlICJE
RkdKSVRDb21waWxlci5oIgotI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
IgotI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCi0jaW5jbHVkZSAi
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgotI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhh
c2UuaCIKLSNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgotI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5oIgotI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkZUTENvbXBpbGUuaCIKLSNpbmNsdWRlICJGVExMaW5rLmgiCi0jaW5jbHVkZSAiRlRM
TG93ZXJERkdUb0xMVk0uaCIKLSNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKKyNpbmNsdWRlICJERkdQbGFuLmgiCisjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisj
aW5jbHVkZSAiRlRMVGh1bmtzLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBpbGF0
aW9uVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjcs
MjMgKzQ4LDkgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKICAgICByZXR1cm4gbnVt
Q29tcGlsYXRpb25zOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgm
IGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0KQotewotICAgIEdyYXBoRHVtcE1vZGUgbW9kZUZvckZp
bmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7Ci0gICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICBkYXRhTG9nKHRleHQsICJcbiIpOwotICAgICAgICBncmFwaC5kdW1w
KCk7Ci0gICAgICAgIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRG9udER1bXBHcmFwaDsKLSAgICB9
Ci0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHZhbGlkYXRlKGdyYXBoLCBt
b2RlRm9yRmluYWxWYWxpZGF0ZSk7Ci19Ci0KLWVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVu
Y3Rpb24sIENvbXBpbGVPdGhlciB9Owogc3RhdGljIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBj
b21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdp
dGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwot
ICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsKICAgICAKICAgICBudW1Db21w
aWxhdGlvbnMrKzsKICAgICAKQEAgLTk5LDYgKzY2LDE5IEBAIHN0YXRpYyBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAg
ICAgICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9m
IGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsK
ICAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdv
aW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8KKyAgICAvLyBtYWtlIHN1cmUg
dGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWlu
IHRocmVhZC4KKyAgICBleGVjLT52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik7CisgICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CisgICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvcik7CisgICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxD
YWxsVGh1bmtHZW5lcmF0b3IpOworICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IpOworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGV4ZWMtPnZt
KCkuZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworI2Vu
ZGlmCisgICAgCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBU
aGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91
Z2ggdG8gYWxsb3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25l
ZCBudW1WYXJzV2l0aFZhbHVlczsKQEAgLTEwNiw5ICs4Niw5IEBAIHN0YXRpYyBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsKICAgICBlbHNlCiAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0g
MDsKLSAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGludCBvcGVyYW5k
ID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgUGxhbiBwbGFuKGNv
bXBpbGVNb2RlLCBjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhW
YWx1ZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGxhbi5tdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGludCBvcGVyYW5kID0gcGxhbi5tdXN0SGFuZGxlVmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9w
ZXJhbmQpCiAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKICAgICAg
ICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgpAQCAtMTE3LDkyICs5Nywx
NSBAQCBzdGF0aWMgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgICAg
ICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGlu
dG8gdGhlIHZhbHVlIGZvciB0aGlzLAogICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBh
biBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNz
ZXMsCiAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQg
aW50byBVbmRlZmluZWQuCi0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9
IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgcGxhbi5t
dXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7
CiAgICAgfQogICAgIAotICAgIEdyYXBoIGRmZyhleGVjLT52bSgpLCBjb2RlQmxvY2ssIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7Ci0gICAgaWYgKCFwYXJzZShkZmcp
KQorICAgIHBsYW4uY29tcGlsZUluVGhyZWFkKCk7CisgICAgaWYgKHBsYW4uZmluYWxpemUoaml0
Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKSAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCeSB0aGlzIHBvaW50IHRoZSBERkcg
Ynl0ZWNvZGUgcGFyc2VyIHdpbGwgaGF2ZSBwb3RlbnRpYWxseSBtdXRhdGVkIHZhcmlvdXMgdGFi
bGVzCi0gICAgLy8gaW4gdGhlIENvZGVCbG9jay4gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBwZXJm
b3JtIGFuIGVhcmx5IHNocmluaywgd2hpY2ggaXMgbW9yZQotICAgIC8vIHBvd2VyZnVsIHRoYW4g
YSBsYXRlIG9uZS4gSXQncyBzYWZlIHRvIGRvIHNvIGJlY2F1c2Ugd2UgaGF2ZW4ndCBnZW5lcmF0
ZWQgYW55IGNvZGUKLSAgICAvLyB0aGF0IHJlZmVyZW5jZXMgYW55IG9mIHRoZSB0YWJsZXMgZGly
ZWN0bHksIHlldC4KLSAgICBjb2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6RWFybHlT
aHJpbmspOwotCi0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHZhbGlkYXRl
KGRmZyk7Ci0gICAgCi0gICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgcGVyZm9y
bVVuaWZpY2F0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24oZGZnKTsK
LSAgICAKLSAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgdmFsaWRhdGUoZGZn
KTsKLSAgICAKLSAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKLSAgICBwZXJm
b3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybUZpeHVwKGRmZyk7Ci0g
ICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0aW5nKGRmZyk7Ci0gICAgCi0gICAgZGZnLm1fZml4cG9p
bnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwotCi0gICAgcGVyZm9ybUNTRShkZmcpOwot
ICAgIHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcpOwotICAgIHBlcmZvcm1DUFNS
ZXRocmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2Ug
Q1NFIHJhcmVseSBkZXRocmVhZHMsIGFuZCBhcmd1bWVudHMgc2ltcGxpZmljYXRpb24gcmFyZWx5
IGRvZXMgYW55dGhpbmcuCi0gICAgcGVyZm9ybUNGQShkZmcpOwotICAgIHBlcmZvcm1Db25zdGFu
dEZvbGRpbmcoZGZnKTsKLSAgICBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZnKTsKLQotICAg
IGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKLQotICAgIHBlcmZvcm1T
dG9yZUVsaW1pbmF0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0g
ICAgcGVyZm9ybURDRShkZmcpOwotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCi0gICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBp
bGVGdW5jdGlvbgotICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgewotICAgICAgICAK
LSAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBs
b3dlcmluZzoiKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IE9TUiBlbnRy
eS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzYyNQotICAgICAgICAKLSAgICAgICAgRlRMOjpTdGF0ZSBzdGF0ZShkZmcpOwotICAgICAgICBG
VEw6Omxvd2VyREZHVG9MTFZNKHN0YXRlKTsKLSAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlKTsK
LSAgICAgICAgY29tcGlsYXRpb25TY29wZS5sZWF2ZUVhcmx5KCk7Ci0gICAgICAgIHJldHVybiBG
VEw6Omxpbmsoc3RhdGUsIGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICAKLSAgICBwZXJmb3JtVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvbihkZmcpOwotICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBh
ZnRlciBvcHRpbWl6YXRpb246Iik7Ci0KLSAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcp
OwotICAgIGJvb2wgcmVzdWx0OwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rp
b24pIHsKLSAgICAgICAgQVNTRVJUKGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIWRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbigpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBjb21waWxhdGlvblNjb3BlLmxlYXZlRWFybHkoKTsKLSAg
ICAgICAgcmVzdWx0ID0gZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9uKGppdENvZGUsICpqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjb21waWxlTW9k
ZSA9PSBDb21waWxlT3RoZXIpOwotICAgICAgICBBU1NFUlQoIWppdENvZGVXaXRoQXJpdHlDaGVj
ayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWRhdGFGbG93SklULmNvbXBpbGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29tcGlsYXRpb25TY29wZS5sZWF2ZUVhcmx5
KCk7Ci0gICAgICAgIHJlc3VsdCA9IGRhdGFGbG93SklULmxpbmsoaml0Q29kZSk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgdHJ5
Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHRmFpbGVkRmluYWxpemVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitGYWlsZWRGaW5hbGl6ZXI6OkZhaWxlZEZpbmFsaXpl
cihQbGFuJiBwbGFuKQorICAgIDogRmluYWxpemVyKHBsYW4pCit7Cit9CisKK0ZhaWxlZEZpbmFs
aXplcjo6fkZhaWxlZEZpbmFsaXplcigpCit7Cit9CisKK2Jvb2wgRmFpbGVkRmluYWxpemVyOjpm
aW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRD
b2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXpl
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRmFpbGVkRmluYWxp
emVyX2gKKyNkZWZpbmUgREZHRmFpbGVkRmluYWxpemVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdGaW5hbGl6ZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBGYWlsZWRGaW5h
bGl6ZXIgOiBwdWJsaWMgRmluYWxpemVyIHsKK3B1YmxpYzoKKyAgICBGYWlsZWRGaW5hbGl6ZXIo
UGxhbiYpOworICAgIHZpcnR1YWwgfkZhaWxlZEZpbmFsaXplcigpOworICAgIAorICAgIGJvb2wg
ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KTsKKyAgICBib29sIGZpbmFsaXpl
RnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIHdpdGhBcml0eUNoZWNrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmFpbGVkRmluYWxpemVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdGaW5hbGl6ZXIuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGxh
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0ZpbmFsaXplcjo6Rmlu
YWxpemVyKFBsYW4mIHBsYW4pCisgICAgOiBtX3BsYW4ocGxhbikKK3sKK30KKworRmluYWxpemVy
Ojp+RmluYWxpemVyKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaW5hbGl6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZpbmFsaXpl
cl9oCisjZGVmaW5lIERGR0ZpbmFsaXplcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBQbGFuOworCitjbGFz
cyBGaW5hbGl6ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbmFsaXplcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZpbmFsaXplcihQbGFuJik7CisgICAg
dmlydHVhbCB+RmluYWxpemVyKCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGZpbmFsaXplKFJl
ZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6
ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiB3aXRoQXJpdHlDaGVjaykgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgUGxhbiYgbV9wbGFu
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdGaW5hbGl6ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxOSw3ICs3MTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVu
Ym94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlm
ICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2lkZW50aWZpZXJzW25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV0gIT0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldICE9IHZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IApAQCAtMTA1OCw3ICsxMDU4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmplY3QgPSBh
c09iamVjdChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGVP
YmplY3QtPnN0cnVjdHVyZSgpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV93YXRjaHBvaW50cy5p
c1N0aWxsVmFsaWQoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldCgpKSkKKyAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlk
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAoc3RyaW5nUHJv
dG90eXBlU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDEzIEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5HSVpFX0RG
R19PUF9FTlVNCiB9OwogCi1HcmFwaDo6R3JhcGgoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVl
PiYgbXVzdEhhbmRsZVZhbHVlcykKK0dyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4pCiAg
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9jb21w
aWxhdGlvbih2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6
OkNvbXBpbGF0aW9uKHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9y
KGNvZGVCbG9jayksIFByb2ZpbGVyOjpERkcpKSA6IDApCi0gICAgLCBtX3Byb2ZpbGVkQmxvY2so
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQorICAgICwgbV9wbGFuKHBsYW4pCisgICAgLCBtX2Nv
ZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrKQorICAgICwgbV9wcm9maWxlZEJsb2NrKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9hbGxvY2F0b3Iodm0ubV9kZmdTdGF0ZS0+bV9h
bGxvY2F0b3IpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKLSAgICAsIG1fb3NyRW50cnlC
eXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAsIG1fbXVzdEhhbmRsZVZh
bHVlcyhtdXN0SGFuZGxlVmFsdWVzKQotICAgICwgbV9pZGVudGlmaWVycyhjb2RlQmxvY2spCiAg
ICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX2Zvcm0oTG9hZFN0
b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQpAQCAtMTg5LDcg
KzE4Niw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBp
ZiAobm9kZS0+aGFzUmVnaXN0ZXJQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
Imdsb2JhbCIsIGdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVy
SW5kZXgobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpLCAiKCIsIFJhd1BvaW50ZXIobm9kZS0+cmVn
aXN0ZXJQb2ludGVyKCkpLCAiKSIpOwogICAgIGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkpCi0g
ICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCAi
eyIsIG1faWRlbnRpZmllcnNbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwgIn0iKTsKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7Iiwg
aWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLCAifSIpOwogICAgIGlmIChu
b2RlLT5oYXNTdHJ1Y3R1cmVTZXQoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0pLCAi
OiAiLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldLT5pbmRleGluZ1R5
cGUoKSksICIpIik7CkBAIC0yMTgsNyArMjE1LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0Rh
dGEoKSkgewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBt
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAg
ICAgIG91dC5wcmludChjb21tYSwgImlkIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciwgInsiLCBtX2lkZW50aWZpZXJzW3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1i
ZXJdLCAifSIpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CiAgICAgfQogICAg
IEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT5oYXNMb2NhbCgp
KTsKQEAgLTQzMCwxMiArNDI3LDYgQEAgdm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKICAg
ICB9CiB9CiAKLWJvb2wgR3JhcGg6OmlzU3RpbGxWYWxpZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fY2hhaW5zLmFyZVN0
aWxsVmFsaWQoKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTMgKzM0LDExIEBACiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1
ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNp
bmNsdWRlICJERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJERkdEZXNpcmVkU3Ry
dWN0dXJlQ2hhaW5zLmgiCi0jaW5jbHVkZSAiREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiCiAjaW5j
bHVkZSAiREZHRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgi
CkBAIC05Miw3ICs5MCw3IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vIE5vZGVzIHRo
YXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFz
cyBHcmFwaCB7CiBwdWJsaWM6Ci0gICAgR3JhcGgoVk0mLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxl
VmFsdWVzKTsKKyAgICBHcmFwaChWTSYsIFBsYW4mKTsKICAgICB+R3JhcGgoKTsKICAgICAKICAg
ICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUpCkBAIC0zODEsNyAr
Mzc5LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZCgKKyAgICAgICAgcmV0
dXJuIG1fcGxhbi53YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoCiAgICAgICAgICAgICBnbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkp
OwogICAgIH0KICAgICAKQEAgLTY5NiwxMSArNjk0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0OworICAgIFByb2ZpbGVy
OjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24u
Z2V0KCk7IH0KKyAgICAKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyBy
ZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CisgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRj
aHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQorICAgIERlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMmIGNoYWlucygpIHsgcmV0dXJuIG1fcGxhbi5jaGFpbnM7IH0KICAgICAKICAg
ICBWTSYgbV92bTsKKyAgICBQbGFuJiBtX3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKLSAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwogICAg
IENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwogICAgIAogICAgIE5vZGVBbGxvY2F0b3ImIG1f
YWxsb2NhdG9yOwpAQCAtNzIzLDExICs3MjUsNiBAQCBwdWJsaWM6CiAgICAgRG9taW5hdG9ycyBt
X2RvbWluYXRvcnM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9w
YXJhbWV0ZXJTbG90czsKLSAgICB1bnNpZ25lZCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAg
ICBPcGVyYW5kczxKU1ZhbHVlPiBtX211c3RIYW5kbGVWYWx1ZXM7Ci0gICAgRGVzaXJlZFdhdGNo
cG9pbnRzIG1fd2F0Y2hwb2ludHM7Ci0gICAgRGVzaXJlZElkZW50aWZpZXJzIG1faWRlbnRpZmll
cnM7Ci0gICAgRGVzaXJlZFN0cnVjdHVyZUNoYWlucyBtX2NoYWluczsKICAgICAKICAgICBPcHRp
bWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKICAgICBHcmFwaEZvcm0gbV9m
b3JtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdGYWlsZWRG
aW5hbGl6ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHSklURmlu
YWxpemVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgpAQCAtNTksNyArNjEs
NyBAQCBKSVRDb21waWxlcjo6fkpJVENvbXBpbGVyKCkKIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cygpCiB7CiAgICAgQVNTRVJUKG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9l
eGl0Q29tcGlsYXRpb25JbmZvLnNpemUoKSk7Ci0gICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlv
bikgeworICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKICAgICAgICAgICAg
IFZlY3RvcjxMYWJlbD4gbGFiZWxzOwpAQCAtMjI5LDI4ICsyMzEsMjUgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgbV9qaXRDb2RlLT53YXRj
aHBvaW50c1tleGl0Lm1fd2F0Y2hwb2ludEluZGV4XS5jb3JyZWN0TGFiZWxzKGxpbmtCdWZmZXIp
OwogICAgIH0KICAgICAKLSAgICBpZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uKSB7CisgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkgewogICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVs
cy5zaXplKCkgPT0gbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2V4aXRTaXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICBWZWN0b3I8TGFiZWw+JiBsYWJlbHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwogICAgICAg
ICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBhZGRyZXNzZXM7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGFiZWxzLnNpemUoKTsgKytqKQogICAgICAgICAgICAgICAgIGFk
ZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZlci5sb2NhdGlvbk9mKGxhYmVsc1tqXSkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fY29tcGlsYXRpb24tPmFkZE9TUkV4
aXRTaXRlKGFkZHJlc3Nlcyk7CisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFk
ZE9TUkV4aXRTaXRlKGFkZHJlc3Nlcyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
QVNTRVJUKCFtX2V4aXRTaXRlTGFiZWxzLnNpemUoKSk7CiAgICAgCi0gICAgbV9qaXRDb2RlLT5j
b21tb24uY29tcGlsYXRpb24gPSBtX2dyYXBoLm1fY29tcGlsYXRpb247CisgICAgbV9qaXRDb2Rl
LT5jb21tb24uY29tcGlsYXRpb24gPSBtX2dyYXBoLmNvbXBpbGF0aW9uKCk7CiAgICAgCiAgICAg
bV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChD
b2RlQmxvY2s6OkxhdGVTaHJpbmspOwotICAgIAotICAgIG1fZ3JhcGgubV93YXRjaHBvaW50cy5y
ZWFsbHlBZGQoKTsKLSAgICBtX2dyYXBoLm1faWRlbnRpZmllcnMucmVhbGx5QWRkKCptX3ZtKTsK
IH0KIAotYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCit2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tlbmQi
KTsKIApAQCAtMjY5LDM0ICsyNjgsMjUgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAg
ICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9z
cGVjdWxhdGl2ZS0+Y3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotCi0g
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSklUQ29tcGlsZXI6OmxpbmsoUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGVudHJ5KQordm9pZCBKSVRDb21waWxlcjo6bGluaygpCiB7Ci0gICAgaWYgKCFt
X2dyYXBoLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKLSAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGluayhsaW5rQnVmZmVyKTsKLSAgICBtX3NwZWN1
bGF0aXZlLT5saW5rT1NSRW50cmllcyhsaW5rQnVmZmVyKTsKLQotICAgIGlmIChzaG91bGRTaG93
RGlzYXNzZW1ibHkoKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXItPmR1bXAobGlua0J1ZmZlcik7
Ci0gICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbikgewotICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+cmVwb3J0VG9Qcm9maWxlcihtX2dyYXBoLm1fY29tcGlsYXRpb24uZ2V0KCksIGxpbmtCdWZm
ZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fZ3JhcGgubV9jb21waWxhdGlvbik7CisgICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZm
ZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCkpOworICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKSB7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IGFkb3B0UHRyKG5l
dyBGYWlsZWRGaW5hbGl6ZXIobV9ncmFwaC5tX3BsYW4pKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICAKKyAgICBsaW5rKCpsaW5rQnVmZmVyKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5saW5r
T1NSRW50cmllcygqbGlua0J1ZmZlcik7CiAKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2Rl
UmVmKGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVu
dHJ5ID0gbV9qaXRDb2RlOwotICAgIHJldHVybiB0cnVlOworICAgIG1fZ3JhcGgubV9wbGFuLmZp
bmFsaXplciA9IGFkb3B0UHRyKG5ldyBKSVRGaW5hbGl6ZXIoCisgICAgICAgIG1fZ3JhcGgubV9w
bGFuLCBtX2Rpc2Fzc2VtYmxlci5yZWxlYXNlKCksIG1faml0Q29kZS5yZWxlYXNlKCksCisgICAg
ICAgIGxpbmtCdWZmZXIucmVsZWFzZSgpKSk7CiB9CiAKLWJvb2wgSklUQ29tcGlsZXI6OmNvbXBp
bGVGdW5jdGlvbigpCit2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogewogICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQmFja2VuZCIpOwogICAgIApAQCAt
MzY2LDM3ICszNTYsMjYgQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAg
ICAvLyBDcmVhdGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAgICBtX3Nw
ZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbihS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgZW50cnlX
aXRoQXJpdHlDaGVjaykKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbigpCiB7Ci0gICAg
aWYgKCFtX2dyYXBoLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAg
ICAvLyA9PT0gTGluayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fdm0sIHRoaXMs
IG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBsaW5rKGxp
bmtCdWZmZXIpOwotICAgIG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKGxpbmtCdWZmZXIp
OworICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtC
dWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpKTsK
KyAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBtX2dy
YXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKG1fZ3Jh
cGgubV9wbGFuKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGluaygqbGlua0J1ZmZl
cik7CisgICAgbV9zcGVjdWxhdGl2ZS0+bGlua09TUkVudHJpZXMoKmxpbmtCdWZmZXIpOwogICAg
IAogICAgIC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHN0YWNrIGNoZWNrICYgYXJpdHkgY2hlY2sgb3Zl
ciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCi0gICAgbGlua0J1
ZmZlci5saW5rKG1fY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAgbGlua0J1
ZmZlci5saW5rKG1fY2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3Ig
PyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsK
KyAgICBsaW5rQnVmZmVyLT5saW5rKG1fY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7
CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9p
c0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxf
YXJpdHlDaGVjayk7CiAgICAgCi0gICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKQotICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKLSAgICBpZiAobV9ncmFwaC5t
X2NvbXBpbGF0aW9uKSB7Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVy
KG1fZ3JhcGgubV9jb21waWxhdGlvbi5nZXQoKSwgbGlua0J1ZmZlcik7Ci0gICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9ncmFwaC5tX2NvbXBpbGF0
aW9uKTsKLSAgICB9Ci0KLSAgICBlbnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBlbnRyeSA9
IG1faml0Q29kZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6
ZXIgPSBhZG9wdFB0cihuZXcgSklURmluYWxpemVyKAorICAgICAgICBtX2dyYXBoLm1fcGxhbiwg
bV9kaXNhc3NlbWJsZXIucmVsZWFzZSgpLCBtX2ppdENvZGUucmVsZWFzZSgpLAorICAgICAgICBs
aW5rQnVmZmVyLnJlbGVhc2UoKSwgbV9hcml0eUNoZWNrKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDIyICsyNDcsMjIgQEAgcHVibGlj
OgogICAgIEpJVENvbXBpbGVyKEdyYXBoJiBkZmcpOwogICAgIH5KSVRDb21waWxlcigpOwogICAg
IAotICAgIGJvb2wgY29tcGlsZSgpOwotICAgIGJvb2wgY29tcGlsZUZ1bmN0aW9uKCk7CisgICAg
dm9pZCBjb21waWxlKCk7CisgICAgdm9pZCBjb21waWxlRnVuY3Rpb24oKTsKICAgICAKLSAgICBi
b29sIGxpbmsoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KTsKLSAgICBib29sIGxpbmtGdW5j
dGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
ZW50cnlXaXRoQXJpdHlDaGVjayk7CisgICAgdm9pZCBsaW5rKCk7CisgICAgdm9pZCBsaW5rRnVu
Y3Rpb24oKTsKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJvcGVydGllcy4KICAgICBHcmFwaCYg
Z3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCiAgICAgdm9pZCBhZGRMYXppbHkoV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCwgV2F0Y2hwb2ludFNldCogc2V0KQogICAgIHsKLSAgICAgICAg
bV9ncmFwaC5tX3dhdGNocG9pbnRzLmFkZExhemlseSh3YXRjaHBvaW50LCBzZXQpOworICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CiAgICAg
fQogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnQqIHdhdGNocG9pbnQsIElubGluZVdhdGNo
cG9pbnRTZXQmIHNldCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgubV93YXRjaHBvaW50cy5hZGRM
YXppbHkod2F0Y2hwb2ludCwgc2V0KTsKKyAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFk
ZExhemlseSh3YXRjaHBvaW50LCBzZXQpOwogICAgIH0KICAgICAKICAgICAvLyBNZXRob2RzIHRv
IHNldCBsYWJlbHMgZm9yIHRoZSBkaXNhc3NlbWJsZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0pJVEZpbmFsaXplci5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRl
ICJERkdQbGFuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworSklURmlu
YWxpemVyOjpKSVRGaW5hbGl6ZXIoUGxhbiYgcGxhbiwgUGFzc093blB0cjxEaXNhc3NlbWJsZXI+
IGRpc2Fzc2VtYmxlciwgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlLCBQYXNzT3duUHRyPExp
bmtCdWZmZXI+IGxpbmtCdWZmZXIsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBhcml0eUNoZWNrKQor
ICAgIDogRmluYWxpemVyKHBsYW4pCisgICAgLCBtX2Rpc2Fzc2VtYmxlcihkaXNhc3NlbWJsZXIp
CisgICAgLCBtX2ppdENvZGUoaml0Q29kZSkKKyAgICAsIG1fbGlua0J1ZmZlcihsaW5rQnVmZmVy
KQorICAgICwgbV9hcml0eUNoZWNrKGFyaXR5Q2hlY2spCit7Cit9CisKK0pJVEZpbmFsaXplcjo6
fkpJVEZpbmFsaXplcigpCit7Cit9CisKK2Jvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZShSZWZQ
dHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpCit7CisgICAgZmluYWxpemVDb21tb24oKTsKKyAgICAK
KyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOworICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlv
bihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0
aEFyaXR5Q2hlY2spCit7CisgICAgZmluYWxpemVDb21tb24oKTsKKyAgICAKKyAgICB3aXRoQXJp
dHlDaGVjayA9IG1fbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOworICAgIG1f
aml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHkoKSk7CisgICAgZW50cnkgPSBtX2ppdENvZGU7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCit7Cisg
ICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
ZHVtcCgqbV9saW5rQnVmZmVyKTsKKyAgICAKKyAgICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKSB7
CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fcGxhbi5jb21waWxh
dGlvbi5nZXQoKSwgKm1fbGlua0J1ZmZlcik7CisgICAgICAgIG1fcGxhbi52bSgpLm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wbGFuLmNvbXBpbGF0aW9uKTsKKyAgICB9
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFs
aXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdKSVRGaW5hbGl6ZXJfaAor
I2RlZmluZSBERkdKSVRGaW5hbGl6ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Rpc2Fzc2VtYmxlci5oIgorI2lu
Y2x1ZGUgIkRGR0ZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEpJVEZpbmFsaXplciA6IHB1YmxpYyBGaW5hbGl6ZXIgeworcHVibGljOgorICAgIEpJ
VEZpbmFsaXplcihQbGFuJiwgUGFzc093blB0cjxEaXNhc3NlbWJsZXI+LCBQYXNzUmVmUHRyPEpJ
VENvZGU+LCBQYXNzT3duUHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYXJp
dHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCgpKTsKKyAgICB2aXJ0dWFsIH5KSVRGaW5h
bGl6ZXIoKTsKKyAgICAKKyAgICBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBl
bnRyeSk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBl
bnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjayk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBmaW5hbGl6ZUNvbW1vbigpOworICAgIAorICAgIE93blB0cjxEaXNhc3NlbWJs
ZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CisgICAg
T3duUHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9hcml0eUNoZWNrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdKSVRGaW5hbGl6ZXJfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQbGFuLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAi
REZHQnl0ZUNvZGVQYXJzZXIuaCIKKyNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCisjaW5jbHVkZSAiREZH
RmFpbGVkRmluYWxpemVyLmgiCisjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRl
ICJERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVW5pZmljYXRpb25Q
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCisj
aW5jbHVkZSAiRlRMQ29tcGlsZS5oIgorI2luY2x1ZGUgIkZUTExpbmsuaCIKKyNpbmNsdWRlICJG
VExMb3dlckRGR1RvTExWTS5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyB2
b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQpCit7
CisgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsKKyAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGRhdGFMb2codGV4
dCwgIlxuIik7CisgICAgICAgIGdyYXBoLmR1bXAoKTsKKyAgICAgICAgbW9kZUZvckZpbmFsVmFs
aWRhdGUgPSBEb250RHVtcEdyYXBoOworICAgIH0KKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQo
KSkKKyAgICAgICAgdmFsaWRhdGUoZ3JhcGgsIG1vZGVGb3JGaW5hbFZhbGlkYXRlKTsKK30KKwor
UGxhbjo6UGxhbigKKyAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlcykKKyAgICA6IGNvbXBpbGVNb2RlKGNvbXBpbGVNb2RlKQorICAgICwgY29k
ZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgLCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykK
KyAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZh
cnNXaXRoVmFsdWVzKQorICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKGNvZGVC
bG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29k
ZUJsb2NrKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKKyAgICAsIGlkZW50aWZpZXJzKGNvZGVCbG9j
aykKK3sKK30KKworUGxhbjo6flBsYW4oKQoreworfQorCit2b2lkIFBsYW46OmNvbXBpbGVJblRo
cmVhZCgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxh
dGlvbiAoUGxhbikiKTsKKyAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2NvcGU7CisK
KyAgICBHcmFwaCBkZmcodm0oKSwgKnRoaXMpOworICAgIAorICAgIGlmICghcGFyc2UoZGZnKSkg
eworICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0aGlz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQnkgdGhpcyBwb2ludCB0
aGUgREZHIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2YXJp
b3VzIHRhYmxlcworICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUg
dG8gcGVyZm9ybSBhbiBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKKyAgICAvLyBwb3dlcmZ1
bCB0aGFuIGEgbGF0ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3Qg
Z2VuZXJhdGVkIGFueSBjb2RlCisgICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0aGUgdGFi
bGVzIGRpcmVjdGx5LCB5ZXQuCisgICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6
OkVhcmx5U2hyaW5rKTsKKworICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICB2
YWxpZGF0ZShkZmcpOworICAgIAorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOworICAg
IHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOworICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9u
KGRmZyk7CisgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAgIHZhbGlk
YXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7Cisg
ICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOworICAgIHBlcmZvcm1GaXh1cChk
ZmcpOworICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOworICAgIAorICAgIGRmZy5t
X2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKKworICAgIHBlcmZvcm1DU0Uo
ZGZnKTsKKyAgICBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oZGZnKTsKKyAgICBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5vLW9w
IHNpbmNlIENTRSByYXJlbHkgZGV0aHJlYWRzLCBhbmQgYXJndW1lbnRzIHNpbXBsaWZpY2F0aW9u
IHJhcmVseSBkb2VzIGFueXRoaW5nLgorICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICBwZXJmb3Jt
Q29uc3RhbnRGb2xkaW5nKGRmZyk7CisgICAgcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7
CisKKyAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CisKKyAgICBw
ZXJmb3JtU3RvcmVFbGltaW5hdGlvbihkZmcpOworICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhk
ZmcpOworICAgIHBlcmZvcm1EQ0UoZGZnKTsKKworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlm
IChPcHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKQorICAgICAgICAmJiBjb21waWxlTW9kZSA9
PSBDb21waWxlRnVuY3Rpb24KKyAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAg
ICAgICAgCisgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9y
ZSBGVEwgbG93ZXJpbmc6Iik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBP
U1IgZW50cnkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjUKKyAgICAgICAgCisgICAgICAgIEZUTDo6U3RhdGUgc3RhdGUoZGZnKTsKKyAg
ICAgICAgRlRMOjpsb3dlckRGR1RvTExWTShzdGF0ZSk7CisgICAgICAgIEZUTDo6Y29tcGlsZShz
dGF0ZSk7CisgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgCisgICAgcGVyZm9ybVZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb24oZGZnKTsKKyAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgg
YWZ0ZXIgb3B0aW1pemF0aW9uOiIpOworCisgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZn
KTsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAgICAgIGRh
dGFGbG93SklULmNvbXBpbGVGdW5jdGlvbigpOworICAgICAgICBkYXRhRmxvd0pJVC5saW5rRnVu
Y3Rpb24oKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUgPT0gQ29t
cGlsZU90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGUoKTsKKyAg
ICAgICAgZGF0YUZsb3dKSVQubGluaygpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoZmluYWxp
emVyKTsKK30KKworYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQoreworICAgIHJldHVybiB3YXRj
aHBvaW50cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgY2hhaW5zLmFyZVN0aWxsVmFsaWQo
KTsKK30KKwordm9pZCBQbGFuOjpyZWFsbHlBZGQoKQoreworICAgIHdhdGNocG9pbnRzLnJlYWxs
eUFkZCgpOworICAgIGlkZW50aWZpZXJzLnJlYWxseUFkZCh2bSgpKTsKK30KKworQ29tcGlsYXRp
b25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIGlmICgh
aXNTdGlsbFZhbGlkKCkpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwor
ICAgIAorICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVu
Y3Rpb24pCisgICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemVGdW5jdGlvbihqaXRD
b2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9
IGZpbmFsaXplci0+ZmluYWxpemUoaml0Q29kZSk7CisgICAgCisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICAKKyAgICByZWFsbHlBZGQoKTsK
KyAgICAKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
UGxhbl9oCisjZGVmaW5lIERGR1BsYW5faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRTdHJ1Y3R1cmVD
aGFpbnMuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIKKyNpbmNsdWRlICJE
RkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90
aGVyIH07CitlbnVtIENvbXBpbGF0aW9uUmVzdWx0IHsgQ29tcGlsYXRpb25GYWlsZWQsIENvbXBp
bGF0aW9uSW52YWxpZGF0ZWQsIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCB9OworCitzdHJ1Y3QgUGxh
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CisgICAgUGxhbigKKyAgICAg
ICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFs
dWVzKTsKKyAgICB+UGxhbigpOworICAgIAorICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKCk7Cisg
ICAgCisgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4m
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
KyAgICAKKyAgICBWTSYgdm0oKSB7IHJldHVybiAqY29kZUJsb2NrLT52bSgpOyB9CisKKyAgICBD
b21waWxlTW9kZSBjb21waWxlTW9kZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhW
YWx1ZXM7CisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKworICAgIFJl
ZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOworCisgICAgT3duUHRyPEZp
bmFsaXplcj4gZmluYWxpemVyOworICAgIAorICAgIERlc2lyZWRXYXRjaHBvaW50cyB3YXRjaHBv
aW50czsKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CisgICAgRGVzaXJlZFN0
cnVjdHVyZUNoYWlucyBjaGFpbnM7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1N0aWxsVmFsaWQo
KTsKKyAgICB2b2lkIHJlYWxseUFkZCgpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQbGFuX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCwxNiArNzQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFw
aC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNv
ZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Z3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVW
YWx1ZXNbaV0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
Z0ltcGwqIGlkZW50aWZpZXJVSUQodW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5tX2lkZW50aWZpZXJzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtpbmRleF07CiAgICAgfQogCiAgICAgLy8gU3BpbGwg
YWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgSlNTdGFjay4KQEAgLTMwMTUsNyArMzAx
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKICAgICBTdHJ1
Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9CiAgICAgICAgIG1faml0Lmdsb2JhbE9iamVj
dEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7
CiAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdPYmplY3RT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICBB
U1NFUlQobV9qaXQuZ3JhcGgoKS5tX3dhdGNocG9pbnRzLmlzVmFsaWRPck1peGVkKHN0cmluZ1By
b3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpOworICAgIEFTU0VS
VChtX2ppdC5ncmFwaCgpLndhdGNocG9pbnRzKCkuaXNWYWxpZE9yTWl4ZWQoc3RyaW5nUHJvdG90
eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSk7CiAgICAgCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVncygpLCAw
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUsMTAgKzE5NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
PmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJl
Z2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICBpZiAo
YmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUlu
ZGV4KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dy
YXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAoIWl0ZXIt
PnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNbaV07
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5k
bGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxs
KCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEdlbmVyYXRlZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExHZW5lcmF0ZWRGdW5jdGlvbl9oCisjZGVmaW5lIEZUTEdlbmVyYXRlZEZ1
bmN0aW9uX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlv
bikoRXhlY1N0YXRlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEZUTEdlbmVyYXRlZEZ1bmN0aW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVk
ZSAiREZHUGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBERkc7CisKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVyKFBsYW4mIHBsYW4p
CisgICAgOiBGaW5hbGl6ZXIocGxhbikKK3sKK30KKworSklURmluYWxpemVyOjp+SklURmluYWxp
emVyKCkKK3sKKyAgICBpZiAobV9lbmdpbmUpCisgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9u
RW5naW5lKG1fZW5naW5lKTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0
cjxKU0M6OkpJVENvZGU+JikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rp
b24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdp
dGhBcml0eUNoZWNrKQoreworICAgIGlmIChtX2V4aXRUaHVua3NMaW5rQnVmZmVyKSB7CisgICAg
ICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCisgICAgICAgICAgICBGSU5BTEla
RV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICAqbV9leGl0VGh1bmtzTGlua0J1ZmZlciwKKyAg
ICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJs
b2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
KSkpOworICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMsIHNvIG5v
IGV4aXQgdGh1bmtzLgorICAgIAorICAgIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBvaW50TGlu
a0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOworICAgIG1faml0Q29kZS0+aW5pdGlh
bGl6ZUNvZGUoCisgICAgICAgIG1fZW5naW5lLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgK
KyAgICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVmZmVyLAorICAgICAgICAgICAgKCJGVEwg
ZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSwgbV9mdW5jdGlvbikpKTsKKyAgICBlbnRyeSA9IG1faml0Q29kZTsK
KyAgICAKKyAgICBtX2VuZ2luZSA9IDA7IC8vIFdlIGRvbid0IG93biBpdCBhbnltb3JlLgorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMSklURmluYWxpemVyX2gKKyNkZWZpbmUgRlRMSklURmluYWxpemVyX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdG
aW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpJVEZpbmFsaXplciA6IHB1YmxpYyBERkc6OkZp
bmFsaXplciB7CitwdWJsaWM6CisgICAgSklURmluYWxpemVyKERGRzo6UGxhbiYpOworICAgIHZp
cnR1YWwgfkpJVEZpbmFsaXplcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVu
a3NMaW5rQnVmZmVyKFBhc3NPd25QdHI8TGlua0J1ZmZlcj4gYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgbV9leGl0VGh1bmtzTGlua0J1ZmZlciA9IGJ1ZmZlcjsKKyAgICB9CisgICAgdm9pZCBpbml0
aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIoUGFzc093blB0cjxMaW5rQnVmZmVyPiBidWZmZXIp
CisgICAgeworICAgICAgICBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyID0gYnVmZmVyOworICAgIH0K
KyAgICB2b2lkIGluaXRpYWxpemVDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lKQor
ICAgIHsKKyAgICAgICAgbV9lbmdpbmUgPSBlbmdpbmU7CisgICAgfQorICAgIHZvaWQgaW5pdGlh
bGl6ZUZ1bmN0aW9uKEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
bV9mdW5jdGlvbiA9IGZ1bmN0aW9uOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVBcml0eUNo
ZWNrKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIG1fYXJpdHlD
aGVjayA9IGxhYmVsOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gaml0Q29kZSkKKyAgICB7CisgICAgICAgIG1faml0Q29kZSA9IGppdENvZGU7
CisgICAgfQorICAgIAorICAgIGJvb2wgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVu
dHJ5KTsKKyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVu
dHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKTsKKworcHJpdmF0ZToK
KyAgICBPd25QdHI8TGlua0J1ZmZlcj4gbV9leGl0VGh1bmtzTGlua0J1ZmZlcjsKKyAgICBPd25Q
dHI8TGlua0J1ZmZlcj4gbV9lbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBMTFZNRXhlY3V0aW9u
RW5naW5lUmVmIG1fZW5naW5lOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2FyaXR5Q2hl
Y2s7CisgICAgR2VuZXJhdGVkRnVuY3Rpb24gbV9mdW5jdGlvbjsKKyAgICBSZWZQdHI8SklUQ29k
ZT4gbV9qaXRDb2RlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKSVRGaW5hbGl6ZXJfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDE1ICs0Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVFbnRyeShDQ2FsbEhlbHBlcnMmIGoK
ICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKGppdC5jb2RlQmxvY2so
KSwgSlNTdGFjazo6Q29kZUJsb2NrKTsKIH0KIAotYm9vbCBsaW5rKFN0YXRlJiBzdGF0ZSwgUmVm
UHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKQordm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoIXN0
YXRlLmdyYXBoLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9u
RW5naW5lKHN0YXRlLmVuZ2luZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGUuZ3JhcGgubV93YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKLSAgICAKICAgICAv
LyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBr
bHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9uLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKQEAgLTEy
NCwxOSArMTE3LDE1IEBAIGJvb2wgbGluayhTdGF0ZSYgc3RhdGUsIFJlZlB0cjxKU0M6OkpJVEMK
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAgICAgCi0gICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKLSAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAgbGlua0J1ZmZlci5saW5rKGNhbGxB
cml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3Rp
X29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAg
ICAgIAotICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihh
cml0eUNoZWNrKTsKLSAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKLSAgICAgICAg
c3RhdGUuZW5naW5lLAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAgICAgICAgICAgIGxp
bmtCdWZmZXIsCi0gICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRo
IExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7Ci0gICAgaml0Q29kZSA9IHN0YXRlLmppdENvZGU7Cisg
ICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZl
cihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbFN0YWNrQ2hl
Y2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVj
aywgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25z
dHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOwogICAgIAotICAgIHJl
dHVybiB0cnVlOworICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5r
QnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKKyAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRp
YWxpemVDb2RlKHN0YXRlLmVuZ2luZSk7CisgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXpl
RnVuY3Rpb24oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOworICAgIHN0YXRlLmZpbmFsaXplci0+
aW5pdGlhbGl6ZUFyaXR5Q2hlY2soYXJpdHlDaGVjayk7CisgICAgc3RhdGUuZmluYWxpemVyLT5p
bml0aWFsaXplSklUQ29kZShzdGF0ZS5qaXRDb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmgJKHJldmlzaW9uIDE1
MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
IAotYm9vbCBsaW5rKFN0YXRlJiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Cit2b2lkIGxpbmsoU3RhdGUmKTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NTgsOSArMTk1OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG1faW5pdGlhbGl6YXRpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZXhpdFRodW5rR2Vu
ZXJhdG9yLmRpZFRoaW5ncygpKSB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
CisgICAgICAgICAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5l
dyBMaW5rQnVmZmVyKAogICAgICAgICAgICAgICAgIHZtKCksICZtX2V4aXRUaHVua0dlbmVyYXRv
ciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywKLSAgICAgICAgICAgICAgICBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkKSk7CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUub3NyRXhp
dC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAg
IApAQCAtMTk2OCwyMCArMTk2OCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXRbaV07CiAgICAgICAg
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdFtpXTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fdGh1
bmtKdW1wLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoaW5mby5t
X3RodW5rSnVtcCwgdGFyZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0
LnNldCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci0+
bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCiAgICAg
ICAgICAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNl
dE9mKGluZm8ubV90aHVua0p1bXApOworICAgICAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVD
b2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+b2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5pbml0
aWFsaXplRXhpdFRodW5rcygKLSAgICAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgKCJGVEwg
ZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fZnRs
U3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworICAg
ICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFeGl0VGh1bmtzTGlua0J1
ZmZlcihsaW5rQnVmZmVyLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX291dC5q
dW1wKG1fYXJndW1lbnRDaGVja3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUg
IkZUTEpJVEZpbmFsaXplci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
QEAgLTQyLDYgKzQzLDggQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIGVuZ2lu
ZSgwKQogICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKIHsKKyAgICBmaW5hbGl6ZXIgPSBuZXcg
SklURmluYWxpemVyKGdyYXBoLm1fcGxhbik7CisgICAgZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9
IGFkb3B0UHRyKGZpbmFsaXplcik7CiB9CiAKIHZvaWQgU3RhdGU6OmR1bXBTdGF0ZShjb25zdCBj
aGFyKiB3aGVuKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNp
b24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTEdlbmVyYXRlZEZ1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXpl
ci5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi10
eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNTdGF0ZSopOwot
CiBjbGFzcyBTdGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOwogICAgIApA
QCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbklu
Zm8+IG9zckV4aXQ7CiAgICAgTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmU7CiAgICAgR2Vu
ZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CisgICAgSklURmluYWxpemVyKiBmaW5h
bGl6ZXI7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201853</attachid>
            <date>2013-05-15 10:22:40 -0700</date>
            <delta_ts>2013-05-15 11:11:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102890</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwMTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NCBA
QAorMjAxMy0wNS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc2VwYXJhdGUgbGluayBwaGFzZSBpbnRvIHRoaW5ncyB0
aGF0IG11c3QgYmUgZG9uZSBjb25jdXJyZW50bHkgYW5kIHRoaW5ncyB0aGF0IG11c3QgYmUgZG9u
ZSBzeW5jaHJvbm91c2x5LCBhbmQgaGF2ZSBhIHdheSBvZiBwYXNzaW5nIGRhdGEgZnJvbSBvbmUg
dG8gdGhlIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTYwNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBhIERGRzo6UGxhbiwg
d2hpY2ggY29ycmVzcG9uZHMgdG86CisgICAgICAgIAorICAgICAgICAtIFRoZSBkYXRhIHRoYXQg
dGhlIGNvbmN1cnJlbnQgREZHIG9yIEZUTCBuZWVkIHRvIHN0YXJ0IGNvbXBpbGluZyBhIENvZGVC
bG9jay4KKyAgICAgICAgICBUaGlzIG1vc3RseSBpbmNsdWRlcyBiYXNpYyB0aGluZ3MgbGlrZSBD
b2RlQmxvY2sqLCBidXQgYWxzbyBhIGxpc3Qgb2YKKyAgICAgICAgICBtdXN0LWhhbmRsZSB2YWx1
ZXMgZm9yIE9TUiBlbnRyeS4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGRhdGEgdGhhdCB0aGUg
c3luY2hyb25vdXMgbGlua2VyIG5lZWQgdG8gbGluayBpbiBjb2RlIGNvbXBpbGVkIGJ5IGEKKyAg
ICAgICAgICBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZC4gVGhpcyBpcyBmdXJ0aGVyIGVu
Y2Fwc3VsYXRlZCBieSBERkc6OkZpbmFsaXplciwKKyAgICAgICAgICBzaW5jZSB0aGUgZGF0YSwg
YW5kIHRoZSBhY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0YWtlbiwgYXJlIGRpZmZlcmVudCBpbiBE
RkcKKyAgICAgICAgICB2ZXJzdXMgRlRMLiBUaGlzIHBhdGNoIGFsc28gaW5zdGl0dXRlcyB0aGUg
cG9saWN5IHRoYXQgdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICBjb21waWxhdGlvbiB0aHJlYWQg
c2hhbGwgbm90IHVzZSBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKCksIHNpbmNlIHRo
YXQKKyAgICAgICAgICBjb2RlIGFzc3VtZXMgdGhhdCBpdCdzIHJ1bm5pbmcgb24gdGhlIHNhbWUg
dGhyZWFkIHRoYXQgd2lsbCBhY3R1YWxseSBydW4gdGhlCisgICAgICAgICAgY29kZS4KKyAgICAg
ICAgCisgICAgICAgIC0gVGhlIGFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHRha2VuIHRvIGNvbXBp
bGUgY29kZS4gSW4gb3RoZXIgd29yZHMsIG1vc3Qgb2YgdGhlCisgICAgICAgICAgY29kZSB0aGF0
IHByZXZpb3VzbHkgbGl2ZWQgaW4gREZHRHJpdmVyLmNwcCBub3cgbGl2ZXMgaW4KKyAgICAgICAg
ICBERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCgpLgorICAgICAgICAKKyAgICAgICAgLSBUaGUg
YWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdGFrZW4gd2hlbiBzeW5jaHJvbm91c2x5IGxpbmtpbmcg
dGhlIGNvZGUuIFRoaXMKKyAgICAgICAgICBpbmNsdWRlcyAicmVhbGx5IiBhZGRpbmcgd2F0Y2hw
b2ludHMgYW5kIGlkZW50aWZpZXJzLCBjaGVja2luZyB3YXRjaHBvaW50IGFuZAorICAgICAgICAg
IGNoYWluIHZhbGlkaXR5LCBhbmQgcnVubmluZyB0aGUgREZHOjpGaW5hbGl6ZXIuCisgICAgICAg
IAorICAgICAgICBDdXJyZW50bHksIERGR0RyaXZlciBqdXN0IGNyZWF0ZXMgYSBQbGFuIGFuZCBy
dW5zIGl0IHN5bmNocm9ub3VzbHkuIEJ1dCBpbiB0aGUKKyAgICAgICAgZnV0dXJlLCB3ZSB3aWxs
IGJlIGFibGUgdG8gbWFsbG9jIHNvbWUgUGxhbnMgYW5kIGVucXVldWUgdGhlbSwgYW5kIGhhdmUg
dGhlCisgICAgICAgIGNvbmN1cnJlbnQgdGhyZWFkIGRlcXVldWUgdGhlbSBhbmQgY2FsbCBQbGFu
Ojpjb21waWxlSW5UaHJlYWQoKS4KKyAgICAgICAgCisgICAgICAgIEZvciBub3csIHRoaXMgaGFz
IG5vIGJlaGF2aW9yIG9yIHBlcmZvcm1hbmNlIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0
aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoTGlua0J1
ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjp+TGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlckZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6RmFpbGVk
RmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6On5GYWlsZWRG
aW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6
CisgICAgICAgICogZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChGYWlsZWRGaW5hbGl6ZXIpOgorICAgICAgICAqIGRmZy9ERkdGaW5hbGl6
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6RmluYWxp
emVyOjpGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkZpbmFsaXplcjo6fkZpbmFsaXpl
cik6CisgICAgICAgICogZGZnL0RGR0ZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChGaW5hbGl6ZXIpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb21waWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmlkZW50aWZpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjaGFpbnMpOgorICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGlua0Z1bmN0aW9uKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6YWRkTGF6aWx5KToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6SklU
RmluYWxpemVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICogZGZnL0RG
R0pJVEZpbmFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKSVRGaW5h
bGl6ZXIpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmR1bXBBbmRWZXJpZnlHcmFwaCk6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6flBsYW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZWFsbHlB
ZGQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplKToKKyAgICAgICAgKiBkZmcv
REZHUGxhbi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChQbGFuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjp2bSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBo
YXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppZGVudGlmaWVyVUlEKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToK
KyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjpKSVRGaW5hbGl6ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZUTDo6SklURmlu
YWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmg6IEFkZGVkLgor
ICAgICAgICAoRlRMKToKKyAgICAgICAgKEpJVEZpbmFsaXplcik6CisgICAgICAgIChKU0M6OkZU
TDo6SklURmluYWxpemVyOjppbml0aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVDb2RlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmluaXRpYWxpemVGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplQXJpdHlDaGVjayk6CisgICAg
ICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjppbml0aWFsaXplSklUQ29kZSk6CisgICAgICAg
ICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAq
IGZ0bC9GVExMaW5rLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmxpbmtPU1JF
eGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9ja3MpOgorICAgICAgICAqIGZ0bC9GVExT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBm
dGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChTdGF0ZSk6CisKIDIwMTMt
MDUtMTQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9y
IEpJVFN0dWJzLmNwcCB0byBtb3ZlIENQVSBzcGVjaWZpYyBwYXJ0cyBvdXQgaW50byB0aGVpciBv
d24gZmlsZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUw
MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw2ICszMTgsMTcgQEAKIAkJMEZE
ODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0MTQxRjNGREEwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0Mx
QiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0
ZWRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUx
RTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQjJDQ0UxNzQyRDdENDAwN0IzQzFCIC8qIEZU
TEdlbmVyYXRlZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRCMkNDQjE3NDJEN0QzMDA3QjNDMUIgLyogRlRMR2VuZXJhdGVkRnVuY3Rp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkRCMkNDRjE3NDJEN0Q4MDA3QjNDMUIgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0NDMTc0MkQ3RDMwMDdC
M0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovOyB9OworCQkwRkRCMkNEMDE3NDJEN0RBMDA3
QjNDMUIgLyogRlRMSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDRDE3NDJEN0QzMDA3QjNDMUIgLyogRlRMSklURmluYWxp
emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEQjJDRDkxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNEMTE3NDJEODA0
MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLzsgfTsKKwkJMEZEQjJDREExNzQy
RDgwNDAwN0IzQzFCIC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDIxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0ZhaWxlZEZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGREIyQ0RCMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDMx
NzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5jcHAgKi87IH07CisJCTBGREIyQ0RDMTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5h
bGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkRCMkNERDE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0Q1MTc0MkQ4MDQw
MDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuY3BwICovOyB9OworCQkwRkRCMkNERTE3NDJEODA0
MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmlu
YWxpemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZEQjJDREYxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRDcxNzQyRDgwNDAwN0IzQzFC
IC8qIERGR1BsYW4uY3BwICovOyB9OworCQkwRkRCMkNFMDE3NDJEODA0MDA3QjNDMUIgLyogREZH
UGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QjJDRDgxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi87IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0MzZBQjIz
MDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMzA2LDYgKzEzMTcsMTcgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNwZWN1bGF0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzgxNzNEQTUx
RTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVl
RnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDQ0IxNzQyRDdEMzAwN0IzQzFCIC8qIEZUTEdlbmVyYXRl
ZEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmg7IHBhdGgg
PSBmdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEQjJDQ0MxNzQyRDdEMzAwN0IzQzFCIC8qIEZUTEpJVEZpbmFsaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGVExKSVRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZnRsL0ZUTEpJVEZpbmFs
aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0NEMTc0MkQ3RDMw
MDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSklURmluYWxp
emVyLmg7IHBhdGggPSBmdGwvRlRMSklURmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGREIyQ0QxMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmFpbGVkRmluYWxp
emVyLmNwcDsgcGF0aCA9IGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkRCMkNEMjE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmlu
YWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFs
aXplci5oOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkRCMkNEMzE3NDJEODA0MDA3QjNDMUIgLyogREZHRmluYWxpemVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpbmFsaXplci5jcHA7
IHBhdGggPSBkZmcvREZHRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEQjJDRDQxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaW5hbGl6ZXIuaDsgcGF0aCA9IGRmZy9ERkdGaW5h
bGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQjJDRDUxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0pJVEZpbmFsaXpl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0Q2MTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHSklURmluYWxpemVyLmg7IHBhdGggPSBkZmcvREZHSklURmluYWxpemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGREIyQ0Q3MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdQ
bGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BsYW4uY3Bw
OyBwYXRoID0gZGZnL0RGR1BsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkRCMkNEODE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdQbGFuLmg7IHBhdGggPSBkZmcvREZHUGxhbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMx
NjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRo
ID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMTMzLDEwICsyMTU1LDEzIEBACiAJCQkJMEYyMzVCQzQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi8sCiAJCQkJMEYyMzVCQzUxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIy
QyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oICovLAorCQkJCTBGREIyQ0NCMTc0MkQ3RDMwMDdCM0Mx
QiAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJC
NzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2
MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLAogCQkJCTBGRUEwQTAy
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAorCQkJCTBGREIyQ0NDMTc0MkQ3RDMwMDdC
M0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAorCQkJCTBGREIyQ0NEMTc0MkQ3RDMwMDdC
M0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJE
QTUgLyogRlRMTGluay5jcHAgKi8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZU
TExpbmsuaCAqLywKIAkJCQkwRkVBMEExMzE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRl
cnMuaCAqLywKQEAgLTI4MzMsOCArMjg1OCw2IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFE
NyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CTBGNEUxQTEwMTczQUYwNzgwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNw
cCAqLywKLQkJCQkwRjRFMUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVy
ZUNoYWlucy5oICovLAogCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFj
dFN0YXRlLmNwcCAqLywKIAkJCQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJh
Y3RTdGF0ZS5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFj
dFZhbHVlLmNwcCAqLywKQEAgLTI4NzgsNiArMjkwMSw4IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2
RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRG
RDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGNEUxQTEwMTcz
QUYwNzgwMDdFRTJEMyAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCAqLywKKwkJCQkw
RjRFMUExMTE3M0FGMDc4MDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oICov
LAogCQkJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwICovLAogCQkJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaCAqLywKIAkJCQkwRkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1i
bGVyLmNwcCAqLywKQEAgLTI4ODksNiArMjkxNCwxMCBAQAogCQkJCTBGRDNDODIyMTQxMTVEMEUw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKIAkJCQkwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIg
LyogREZHRWRnZS5jcHAgKi8sCiAJCQkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0Vk
Z2UuaCAqLywKKwkJCQkwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxp
emVyLmNwcCAqLywKKwkJCQkwRkRCMkNEMjE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVkRmlu
YWxpemVyLmggKi8sCisJCQkJMEZEQjJDRDMxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXpl
ci5jcHAgKi8sCisJCQkJMEZEQjJDRDQxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5o
ICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAq
LywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAog
CQkJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggKi8sCkBAIC0yOTAx
LDYgKzI5MzAsOCBAQAogCQkJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNw
cCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAq
LywKKwkJCQkwRkRCMkNENTE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmNwcCAq
LywKKwkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggKi8s
CiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCAq
LywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCAq
LywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICov
LApAQCAtMjkzNCw2ICsyOTY1LDggQEAKIAkJCQkwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMy
IC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZH
UGhhc2UuaCAqLywKKwkJCQkwRkRCMkNENzE3NDJEODA0MDA3QjNDMUIgLyogREZHUGxhbi5jcHAg
Ki8sCisJCQkJMEZEQjJDRDgxNzQyRDgwNDAwN0IzQzFCIC8qIERGR1BsYW4uaCAqLywKIAkJCQkw
RkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAqLywKQEAgLTI5NTEsMTAgKzI5ODQsMTAgQEAKIAkJ
CQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAg
Ki8sCiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmggKi8sCi0JCQkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAotCQkJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAv
KiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAw
Q0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQy
IC8qIERGR1RodW5rcy5oICovLAorCQkJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5
N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAogCQkJCTBGQkUwRjZGMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY3MDE2
QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oICovLAogCQkJCTBGMzRCMTQ3
MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLywKQEAgLTM0MDMsNiArMzQzNiw3
IEBACiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpT
RXhwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRCMkNEQzE3NDJEODA0MDA3QjNDMUIgLyog
REZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhB
MzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFGMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM0
OTgsNiArMzUzMiw3IEBACiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFj
a0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAv
KiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0
NDYwIC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIyQ0UwMTc0MkQ4MDQw
MDdCM0MxQiAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyQTBFMTZGQ0My
MDBCMzQ0NjAgLyogTWF0aE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwMjEzRTNF
MTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU4LDEwICszNTkzLDEyIEBACiAJCQkJODYxNThBQjMx
NTVDOEI0MDAwQjQ1QzlDIC8qIFByb3BlcnR5TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NTQwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGREIyQ0NFMTc0MkQ3RDQwMDdCM0MxQiAvKiBGVExHZW5lcmF0ZWRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8q
IFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2
N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzRDMzNCMTZB
QTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIy
Q0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJEQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTYsNiArMzY1Myw3IEBACiAJCQkJQkNDRjBE
MDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9s
VGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGREIyQ0RBMTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdGYWlsZWRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjY0MTFEMTY2MjIw
MDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFFREVBNjEx
NjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJE
NEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAg
LTM2MzcsNiArMzY3NSw3IEBACiAJCQkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAv
KiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEEzMzIwMTVCRDJFMDcw
MDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQjJDRDAxNzQy
RDdEQTAwN0IzQzFCIC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
ODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICov
LApAQCAtNDAzOCw2ICs0MDc3LDcgQEAKIAkJCQkxNDI5RDhERDBFRDIyMDVCMDBCODk2MTkgLyog
Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3
NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2
MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGREIyQ0Q5
MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTAxLDEzICs0MTQxLDE0IEBA
CiAJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0Iz
MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkRCMkNEQjE3NDJEODA0MDA3QjNDMUIgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCQjA5QzAxMzhFMzgx
QjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZB
NTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNv
dXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQy
IC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyQjE1NDc1MDAwMDAz
RUQwRkYgLyogREZHVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTI3LDYgKzQxNjgs
NyBAQAogCQkJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9y
Rml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5
MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUx
Njc1NDgwRjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGREIy
Q0NGMTc0MkQ3RDgwMDdCM0MxQiAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZFQTBBMzExNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8q
IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTc1LDYgKzQy
MTcsNyBAQAogCQkJCTE0N0YzOUQwMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0FycmF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291
cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGREIyQ0RGMTc0MkQ4MDQwMDdCM0MxQiAvKiBE
RkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQy
MDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDE5MCw2ICs0MjMzLDcgQEAKIAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0
MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFOUQxN0Ix
MDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkRCMkNERDE3NDJEODA0MDA3QjNDMUIgLyogREZHSklU
RmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODc1MTA3RUMxM0UwMDEzRTdC
MiAvKiBKU0xvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTMxNUVCREU0QTAwMkUz
NTg3IC8qIEpTTmFtZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZC
QkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lv
biAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEFTU0VNQkxF
UikKIAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsYXRpb25UaHJl
YWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0Niw2ICsxNDcsNyBAQCB2b2lkIExpbmtC
dWZmZXI6OmxpbmtDb2RlKHZvaWQqIG93bmVyVUlECiB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1G
aW5hbGl6YXRpb24oKQogewogI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRp
b25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7CiAgICAgQVNTRVJUKGlzVmFs
aWQoKSk7CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb25FZmZvcnQuaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC01OCw3ICs1OSw4IEBAIGNsYXNzIFZNOwogLy8gICAqIFRoZSB2
YWx1ZSByZWZlcmVuY2VkIGJ5IGEgRGF0YUxhYmVsIG1heSBiZSBzZXQuCiAvLwogY2xhc3MgTGlu
a0J1ZmZlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTGlua0J1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIAogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKICAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBMYWJlbDsKQEAgLTg2LDcgKzg4LDYgQEAgcHVibGljOgogICAgICAgICAs
IG1fdm0oJnZtKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkK
LSAgICAgICAgLCBtX2VmZm9ydChlZmZvcnQpCiAjZW5kaWYKICAgICB7CiAgICAgICAgIGxpbmtD
b2RlKG93bmVyVUlELCBlZmZvcnQpOwpAQCAtOTQsNyArOTUsNiBAQCBwdWJsaWM6CiAKICAgICB+
TGlua0J1ZmZlcigpCiAgICAgewotICAgICAgICBBU1NFUlQobV9jb21wbGV0ZWQgfHwgKCFtX2V4
ZWN1dGFibGVNZW1vcnkgJiYgbV9lZmZvcnQgPT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgZGlkRmFpbFRvQWxsb2NhdGUoKSBjb25zdApAQCAtMjY0LDcg
KzI2NCw2IEBAIHByaXZhdGU6CiAgICAgVk0qIG1fdm07CiAjaWZuZGVmIE5ERUJVRwogICAgIGJv
b2wgbV9jb21wbGV0ZWQ7Ci0gICAgSklUQ29tcGlsYXRpb25FZmZvcnQgbV9lZmZvcnQ7CiAjZW5k
aWYKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEyICsxMzUsMTIg
QEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICB9CiAg
ICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBncmFwaC5tX29zckVudHJ5Qnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IGdyYXBoLm1fcGxh
bi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX3BsYW4ubXVzdEhh
bmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1
ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhncmFwaCwgZ3JhcGgubV9tdXN0
SGFuZGxlVmFsdWVzW2ldKTsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZ3JhcGgubV9tdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIHZhbHVlLnNldE1v
c3RTcGVjaWZpYyhncmFwaCwgZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAg
ICAgICAgICAgaW50IG9wZXJhbmQgPSBncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQo
b3BlcmFuZCkubWVyZ2UodmFsdWUpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSW5pdGlhbGl6aW5nIEJsb2NrICMl
dSwgb3BlcmFuZCByJWQsIHRvICIsIGJsb2NrSW5kZXgsIG9wZXJhbmQpOwpAQCAtMTI3Miw3ICsx
MjcyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
YmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBz
dGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdm0sIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2lk
ZW50aWZpZXJzW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEFzc2VydCB0aGluZ3MgdGhhdCB3ZSBjYW4ndCBoYW5kbGUgYW5kIHRoYXQgdGhlIGNvbXB1
dGVGb3IoKSBtZXRob2QKICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdmUgd29uJ3QgYmUgYWJs
ZSB0byByZXR1cm4uCkBAIC0xMzM5LDcgKzEzMzksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIC8vIGluZmluaXR5IG9mIHN0cnVjdHVyZXMuCiAg
ICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKQotICAgICAgICAg
ICAgfHwgbV9ncmFwaC5tX3dhdGNocG9pbnRzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUobm9kZS0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAgICAgIHx8
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKG5vZGUtPnN0cnVj
dHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSk7CiAgICAgICAgIAogICAgICAgICB2
YWx1ZS5maWx0ZXIobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKQEAgLTE0NzMsNyArMTQ3Myw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiks
CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9p
ZGVudGlmaWVyc1tub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAorICAgICAgICAgICAgICAgIG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAgICAg
ICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgICAgICBpZiAoc3Rh
dHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgsIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlcihH
cmFwaCYgZ3JhcGgsCiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoZ3Jh
cGgubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKSkKKyAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKICAgICAgICAgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBlbHNlCiAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHIKIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewotICAgIGlmIChncmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQorICAgIGlmIChncmFwaC53YXRjaHBvaW50
cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQog
ICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlKHN0cnVjdHVyZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5Myw3ICs3OTMsNyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0g
Y2VsbENvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIAogICAgICAgICBpZiAob2JqZWN0LT5zdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICYmIG1fZ3JhcGgubV93YXRjaHBvaW50
cy5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewor
ICAgICAgICAgICAgJiYgbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBPcEluZm8oc3RydWN0dXJlKSwgb2JqZWN0
Tm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICAgICAgfQpAQCAtMTcy
Niw3ICsxNzI2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
Z2V0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKICAgICBpZiAoZ2V0
QnlJZFN0YXR1cy5jaGFpbigpKSB7Ci0gICAgICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRkTGF6aWx5
KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CisgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6
aWx5KGdldEJ5SWRTdGF0dXMuY2hhaW4oKSk7CiAgICAgICAgIFN0cnVjdHVyZSogY3VycmVudFN0
cnVjdHVyZSA9IGdldEJ5SWRTdGF0dXMuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJl
KCk7CiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGdldEJ5SWRTdGF0dXMuY2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsK
QEAgLTE4NzEsNyArMTg3MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9w
ZXJhdGkKICAgICBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlVmFsdWVPcGVyYXRpb24gPSBwYzsK
ICAgICBzd2l0Y2ggKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vcGVyYXRpb24pIHsKICAgICBj
YXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5OiB7Ci0gICAg
ICAgIFJlc29sdmVHbG9iYWxTdGF0dXMgc3RhdHVzID0gUmVzb2x2ZUdsb2JhbFN0YXR1czo6Y29t
cHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3VycmVudEluZGV4
LCByZXNvbHZlVmFsdWVPcGVyYXRpb24sIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVy
XSk7CisgICAgICAgIFJlc29sdmVHbG9iYWxTdGF0dXMgc3RhdHVzID0gUmVzb2x2ZUdsb2JhbFN0
YXR1czo6Y29tcHV0ZUZvcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3Vy
cmVudEluZGV4LCByZXNvbHZlVmFsdWVPcGVyYXRpb24sIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtp
ZGVudGlmaWVyXSk7CiAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmUoKSk7CiAKQEAgLTE5MDcsOSArMTkwNyw5IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGkKIAogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwogCi0gICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgubV9pZGVu
dGlmaWVyc1tpZGVudGlmaWVyXTsKKyAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW2lkZW50aWZpZXJdOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKLSAgICAgICAgaWYgKCFt
X2dyYXBoLm1fd2F0Y2hwb2ludHMuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkp
IHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVudHJ5
LndhdGNocG9pbnRTZXQoKSkpIHsKICAgICAgICAgICAgICp2YWx1ZSA9IGFkZFRvR3JhcGgoR2V0
R2xvYmFsVmFyLCBPcEluZm8oZ2xvYmFsT2JqZWN0LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2Jq
ZWN0KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTIwMDEsOCArMjAwMSw4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgbV9jdXJyZW50SW5z
dHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb247IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRvIHVz
ZSB0aGlzLCBhbmQgd2UnZCByYXRoZXIgbm90IHRocmVhZCBpdCB0aHJvdWdoIGNhbGxzLgogICAg
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLm1f
Y29tcGlsYXRpb24gJiYgb3Bjb2RlSUQgIT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBPcEluZm8obV9ncmFwaC5tX2NvbXBpbGF0
aW9uLT5leGVjdXRpb25Db3VudGVyRm9yKAorICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlv
bigpICYmIG9wY29kZUlEICE9IG9wX2NhbGxfcHV0X3Jlc3VsdCkgeworICAgICAgICAgICAgYWRk
VG9HcmFwaChDb3VudEV4ZWN1dGlvbiwgT3BJbmZvKG1fZ3JhcGguY29tcGlsYXRpb24oKS0+ZXhl
Y3V0aW9uQ291bnRlckZvcigKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2so
Km1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2ssIGN1cnJlbnRDb2RlT3Jp
Z2luKCkpKSkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjU2Nyw3ICsyNTY3LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZp
ZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5tX2lkZW50aWZpZXJzW2lkZW50
aWZpZXJOdW1iZXJdOworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBn
ZXRCeUlkU3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fY3VycmVudEluZGV4LCB1aWQp
OwogICAgICAgICAgICAgCkBAIC0yNTkwLDcgKzI1OTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRT
dGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJ
bmRleCwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1faWRlbnRpZmllcnNbaWRlbnRpZmllck51
bWJlcl0pOworICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXSk7CiAKICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQogICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKQEAgLTI2MTYsNyArMjYxNiw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICAmJiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKQogICAgICAgICAgICAgICAg
ICAgICB8fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmlzU3RpbGxWYWxpZCgpKSkg
ewogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRk
TGF6aWx5KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAg
bV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkocHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigp
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3Ry
dWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRT
dHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICBpZiAoIWRpcmVjdCkgewpAQCAt
MjcwNSw3ICsyNzA1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jazsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5tX2lkZW50aWZpZXJzW2lkZW50aWZpZXJOdW1iZXJdOworICAgICAgICAgICAgU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAg
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICBpZiAoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkp
IHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKApAQCAtMzE4MSw3ICszMTgxLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBQ
dXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxlUHV0Q2hlY2tlZDogewogICAgICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KG1fZ3JhcGgubV9pZGVudGlm
aWVyc1tpZGVudGlmaWVyXSk7CisgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRy
eSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyXSk7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNvdWxkQmVXYXRjaGVk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXJDaGVjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwdXRUb0Jhc2UtPm1fcmVnaXN0
ZXJBZGRyZXNzKSksCkBAIC0zNTQ0LDkgKzM1NDQsOSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lCiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmdJ
bXBsKiByZXAgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgpOwotICAgICAgICAgICAg
Qm9ycm93ZWRJZGVudGlmaWVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXIt
Pm1faWRlbnRpZmllck1hcC5hZGQocmVwLCBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX2lkZW50
aWZpZXJzLm51bWJlck9mSWRlbnRpZmllcnMoKSk7CisgICAgICAgICAgICBCb3Jyb3dlZElkZW50
aWZpZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9pZGVudGlmaWVy
TWFwLmFkZChyZXAsIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmlkZW50aWZpZXJzKCkubnVtYmVy
T2ZJZGVudGlmaWVycygpKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX2lkZW50aWZpZXJzLmFkZExh
emlseShyZXApOworICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmlkZW50
aWZpZXJzKCkuYWRkTGF6aWx5KHJlcCk7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtp
XSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytp
KSB7CkBAIC0zNjE0LDggKzM2MTQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVC
bG9jaygpCiB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jazsKICAgICAKLSAgICBpZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uKSB7Ci0gICAg
ICAgIG1fZ3JhcGgubV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoCisgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkgeworICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
PmFkZFByb2ZpbGVkQnl0ZWNvZGVzKAogICAgICAgICAgICAgKm1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NCw3ICsxNTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNXYXRjaHBv
aW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0
YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAg
ICAgICB2bSgpLCBzdHJ1Y3R1cmUsIG1fZ3JhcGgubV9pZGVudGlmaWVyc1tpZGVudGlmaWVyTnVt
YmVyXSk7CisgICAgICAgICAgICAgICAgICAgIHZtKCksIHN0cnVjdHVyZSwgbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBlIGNhc2VzLgpAQCAtMjIxLDcgKzIyMSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHZtKCksCiAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLAogICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9pZGVudGlmaWVy
c1tpZGVudGlmaWVyTnVtYmVyXSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgp
ID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlm
ICghc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9u
KCkpCkBAIC0yNTksNyArMjU5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9jaGFpbnMuYWRkTGF6aWx5KHN0YXR1cy5zdHJ1Y3R1cmVD
aGFpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6
aWx5KHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXR1cy5z
dHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5z
dG9yZWRQcm90b3R5cGUoKTsKQEAgLTM5Nyw3ICszOTcsNyBAQCBwcml2YXRlOgogICAgICAgICBO
b2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29uc3Rh
bnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9n
cmFwaC5tX3dhdGNocG9pbnRzLmlzU3RpbGxWYWxpZChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSkpIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5pc1N0aWxsVmFsaWQoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
KCkpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUo
KSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM0ICsyOSwx
NSBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKIAotCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmgiCi0jaW5jbHVkZSAiREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIgotI2lu
Y2x1ZGUgIkRGR0J5dGVDb2RlUGFyc2VyLmgiCi0jaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKLSNp
bmNsdWRlICJERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiCi0jaW5jbHVkZSAiREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oIgotI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCi0jaW5jbHVkZSAiREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKLSNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgotI2luY2x1
ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKLSNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgotI2luY2x1
ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgotI2luY2x1ZGUgIkRGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmgiCi0jaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oIgotI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKLSNpbmNsdWRlICJERkdWYWxp
ZGF0ZS5oIgotI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgot
I2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgotI2luY2x1ZGUgIkZUTENvbXBpbGUuaCIKLSNp
bmNsdWRlICJGVExMaW5rLmgiCi0jaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xMVk0uaCIKLSNpbmNs
dWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdQ
bGFuLmgiCisjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCisj
aW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjcsMjMgKzQ4LDkgQEAgdW5zaWduZWQgZ2V0
TnVtQ29tcGlsYXRpb25zKCkKICAgICByZXR1cm4gbnVtQ29tcGlsYXRpb25zOwogfQogCi1zdGF0
aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyYXBoLCBjb25zdCBjaGFyKiB0ZXh0
KQotewotICAgIEdyYXBoRHVtcE1vZGUgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7
Ci0gICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBkYXRhTG9n
KHRleHQsICJcbiIpOwotICAgICAgICBncmFwaC5kdW1wKCk7Ci0gICAgICAgIG1vZGVGb3JGaW5h
bFZhbGlkYXRlID0gRG9udER1bXBHcmFwaDsKLSAgICB9Ci0gICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCi0gICAgICAgIHZhbGlkYXRlKGdyYXBoLCBtb2RlRm9yRmluYWxWYWxpZGF0ZSk7Ci19
Ci0KLWVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9Owog
c3RhdGljIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwotICAgIENvbXBpbGF0aW9uU2NvcGUgY29t
cGlsYXRpb25TY29wZTsKICAgICAKICAgICBudW1Db21waWxhdGlvbnMrKzsKICAgICAKQEAgLTk5
LDYgKzY2LDE5IEBAIHN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAg
ICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2coIkRGRyBjb21w
aWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKICAgICAKKyAgICAvLyBNYWtlIHN1cmUg
dGhhdCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6
ZWQuIFdlIHdhbnQgdG8KKyAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0
aW9uIGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBleGVjLT52bSgp
LmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgZXhlYy0+
dm0oKS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7
CisgICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOworICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7Cisg
ICAgZXhlYy0+dm0oKS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOworICAg
IGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwor
I2lmIEVOQUJMRShGVExfSklUKQorICAgIGV4ZWMtPnZtKCkuZ2V0Q1RJU3R1YihGVEw6Om9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworI2VuZGlmCisgICAgCiAgICAgLy8gRGVyaXZl
IG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBh
dCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8gYWxsb3cgZm9yIE9TUiBlbnRy
eSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKQEAg
LTEwNiw5ICs4Niw5IEBAIHN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0K
ICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBl
bHNlCiAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKLSAgICBPcGVyYW5kczxKU1ZhbHVl
PiBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0
aFZhbHVlcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgUGxhbiBwbGFuKGNvbXBpbGVNb2RlLCBjb2RlQmxvY2ssIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGludCBvcGVyYW5kID0gcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
ICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCiAgICAgICAgICAgICAmJiAh
b3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKICAgICAgICAgICAgICYmIGNvbXBpbGVNb2RlID09
IENvbXBpbGVGdW5jdGlvbgpAQCAtMTE3LDkyICs5NywxNSBAQCBzdGF0aWMgYm9vbCBjb21waWxl
KENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQu
IEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAog
ICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4g
YmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCiAgICAgICAgICAgICAvLyBzbyB3
ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCi0gICAgICAg
ICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHBs
YW4ubXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICAgICAgcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhl
Yy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIEdyYXBo
IGRmZyhleGVjLT52bSgpLCBjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhh
bmRsZVZhbHVlcyk7Ci0gICAgaWYgKCFwYXJzZShkZmcpKQorICAgIHBsYW4uY29tcGlsZUluVGhy
ZWFkKCk7CisgICAgaWYgKHBsYW4uZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKSAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICAvLyBCeSB0aGlzIHBvaW50IHRoZSBERkcgYnl0ZWNvZGUgcGFyc2VyIHdpbGwgaGF2
ZSBwb3RlbnRpYWxseSBtdXRhdGVkIHZhcmlvdXMgdGFibGVzCi0gICAgLy8gaW4gdGhlIENvZGVC
bG9jay4gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBwZXJmb3JtIGFuIGVhcmx5IHNocmluaywgd2hp
Y2ggaXMgbW9yZQotICAgIC8vIHBvd2VyZnVsIHRoYW4gYSBsYXRlIG9uZS4gSXQncyBzYWZlIHRv
IGRvIHNvIGJlY2F1c2Ugd2UgaGF2ZW4ndCBnZW5lcmF0ZWQgYW55IGNvZGUKLSAgICAvLyB0aGF0
IHJlZmVyZW5jZXMgYW55IG9mIHRoZSB0YWJsZXMgZGlyZWN0bHksIHlldC4KLSAgICBjb2RlQmxv
Y2stPnNocmlua1RvRml0KENvZGVCbG9jazo6RWFybHlTaHJpbmspOwotCi0gICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHZhbGlkYXRlKGRmZyk7Ci0gICAgCi0gICAgcGVyZm9y
bUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgcGVyZm9ybVVuaWZpY2F0aW9uKGRmZyk7Ci0gICAg
cGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24oZGZnKTsKLSAgICAKLSAgICBpZiAodmFsaWRhdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgdmFsaWRhdGUoZGZnKTsKLSAgICAKLSAgICBwZXJmb3JtQmFj
a3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKLSAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9u
KGRmZyk7Ci0gICAgcGVyZm9ybUZpeHVwKGRmZyk7Ci0gICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0
aW5nKGRmZyk7Ci0gICAgCi0gICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29u
dmVyZ2VkOwotCi0gICAgcGVyZm9ybUNTRShkZmcpOwotICAgIHBlcmZvcm1Bcmd1bWVudHNTaW1w
bGlmaWNhdGlvbihkZmcpOwotICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBUaGlz
IHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMsIGFu
ZCBhcmd1bWVudHMgc2ltcGxpZmljYXRpb24gcmFyZWx5IGRvZXMgYW55dGhpbmcuCi0gICAgcGVy
Zm9ybUNGQShkZmcpOwotICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZnKTsKLSAgICBwZXJm
b3JtQ0ZHU2ltcGxpZmljYXRpb24oZGZnKTsKLQotICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBG
aXhwb2ludENvbnZlcmdlZDsKLQotICAgIHBlcmZvcm1TdG9yZUVsaW1pbmF0aW9uKGRmZyk7Ci0g
ICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgcGVyZm9ybURDRShkZmcpOwotCi0j
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgp
Ci0gICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgotICAgICAgICAmJiBG
VEw6OmNhbkNvbXBpbGUoZGZnKSkgewotICAgICAgICAKLSAgICAgICAgZHVtcEFuZFZlcmlmeUdy
YXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IE9TUiBlbnRyeS4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAg
RlRMOjpTdGF0ZSBzdGF0ZShkZmcpOwotICAgICAgICBGVEw6Omxvd2VyREZHVG9MTFZNKHN0YXRl
KTsKLSAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlKTsKLSAgICAgICAgY29tcGlsYXRpb25TY29w
ZS5sZWF2ZUVhcmx5KCk7Ci0gICAgICAgIHJldHVybiBGVEw6Omxpbmsoc3RhdGUsIGppdENvZGUs
ICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKLSAgICAKLSAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwotICAg
IGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7Ci0K
LSAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwotICAgIGJvb2wgcmVzdWx0OwotICAg
IGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKLSAgICAgICAgQVNTRVJUKGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWRhdGFGbG93SklU
LmNvbXBpbGVGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBj
b21waWxhdGlvblNjb3BlLmxlYXZlRWFybHkoKTsKLSAgICAgICAgcmVzdWx0ID0gZGF0YUZsb3dK
SVQubGlua0Z1bmN0aW9uKGppdENvZGUsICpqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChjb21waWxlTW9kZSA9PSBDb21waWxlT3RoZXIpOwotICAg
ICAgICBBU1NFUlQoIWppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIWRhdGFGbG93SklULmNvbXBpbGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgY29tcGlsYXRpb25TY29wZS5sZWF2ZUVhcmx5KCk7Ci0gICAgICAgIHJlc3VsdCA9IGRh
dGFGbG93SklULmxpbmsoaml0Q29kZSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RmFpbGVkRmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitGYWlsZWRGaW5hbGl6ZXI6OkZhaWxlZEZpbmFsaXplcihQbGFuJiBwbGFuKQorICAgIDogRmlu
YWxpemVyKHBsYW4pCit7Cit9CisKK0ZhaWxlZEZpbmFsaXplcjo6fkZhaWxlZEZpbmFsaXplcigp
Cit7Cit9CisKK2Jvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRD
b2RlPiYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZhaWxlZEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHRmFpbGVkRmluYWxpemVyX2gKKyNkZWZpbmUgREZHRmFpbGVk
RmluYWxpemVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBGYWlsZWRGaW5hbGl6ZXIgOiBwdWJsaWMgRmluYWxpemVy
IHsKK3B1YmxpYzoKKyAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYpOworICAgIHZpcnR1YWwgfkZh
aWxlZEZpbmFsaXplcigpOworICAgIAorICAgIGJvb2wgZmluYWxpemUoUmVmUHRyPEpTQzo6SklU
Q29kZT4mIGVudHJ5KTsKKyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklU
Q29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHRmFpbGVkRmluYWxpemVyX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHUGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK0ZpbmFsaXplcjo6RmluYWxpemVyKFBsYW4mIHBsYW4pCisgICAg
OiBtX3BsYW4ocGxhbikKK3sKK30KKworRmluYWxpemVyOjp+RmluYWxpemVyKCkKK3sKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZpbmFsaXplcl9oCisjZGVmaW5lIERGR0ZpbmFsaXpl
cl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3N0cnVjdCBQbGFuOworCitjbGFzcyBGaW5hbGl6ZXIgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEZpbmFsaXplcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEZpbmFsaXplcihQbGFuJik7CisgICAgdmlydHVhbCB+RmluYWxpemVyKCk7Cisg
ICAgCisgICAgdmlydHVhbCBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRy
eSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykgPSAw
OworCitwcm90ZWN0ZWQ6CisgICAgUGxhbiYgbV9wbGFuOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdG
aW5hbGl6ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOSw3ICs3MTksNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5v
ZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2lkZW50aWZpZXJzW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0gIT0gdm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldICE9IHZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLmltcGwoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IApAQCAtMTA1OCw3ICsxMDU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEpT
T2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmplY3QgPSBhc09iamVjdChzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90
b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGVPYmplY3QtPnN0cnVjdHVyZSgpOwotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV93YXRjaHBvaW50cy5pc1N0aWxsVmFsaWQoc3RyaW5nUHJvdG90
eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKKyAgICAgICAgaWYgKCFt
X2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBpZiAoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxNTAwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDEzIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdP
cE5hbWVzW10gPSB7CiAjdW5kZWYgU1RSSU5HSVpFX0RGR19PUF9FTlVNCiB9OwogCi1HcmFwaDo6
R3JhcGgoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKK0dy
YXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4pCiAgICAgOiBtX3ZtKHZtKQotICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9jb21waWxhdGlvbih2bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKHZtLm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jayksIFByb2ZpbGVyOjpE
RkcpKSA6IDApCi0gICAgLCBtX3Byb2ZpbGVkQmxvY2soY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KQorICAgICwgbV9wbGFuKHBsYW4pCisgICAgLCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2Nr
KQorICAgICwgbV9wcm9maWxlZEJsb2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAg
ICwgbV9hbGxvY2F0b3Iodm0ubV9kZmdTdGF0ZS0+bV9hbGxvY2F0b3IpCiAgICAgLCBtX2hhc0Fy
Z3VtZW50cyhmYWxzZSkKLSAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCkKLSAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQot
ICAgICwgbV9pZGVudGlmaWVycyhjb2RlQmxvY2spCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVm
b3JlRml4cG9pbnQpCiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlv
blN0YXRlKExvY2FsbHlVbmlmaWVkKQpAQCAtMTg5LDcgKzE4Niw3IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9kZS0+aGFzUmVnaXN0ZXJQb2lu
dGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgImdsb2JhbCIsIGdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpLCAiKCIsIFJhd1BvaW50ZXIobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpLCAiKSIpOwog
ICAgIGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
ImlkIiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCAieyIsIG1faWRlbnRpZmllcnNbbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXSwgIn0iKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQi
LCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksICJ7IiwgaWRlbnRpZmllcnMoKVtub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldLCAifSIpOwogICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmVTZXQoKSkg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1Bv
aW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0pLCAiOiAiLCBJbmRleGluZ1R5cGVEdW1wKG5v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldLT5pbmRleGluZ1R5cGUoKSksICIpIik7CkBAIC0yMTgsNyAr
MjE1LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0K
ICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgewogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImlk
Iiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBtX2lkZW50aWZpZXJz
W3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7
IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0i
KTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CiAgICAgfQogICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT5oYXNMb2NhbCgpKTsKQEAgLTQzMCwxMiArNDI3LDYgQEAg
dm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKICAgICB9CiB9CiAKLWJvb2wgR3JhcGg6Omlz
U3RpbGxWYWxpZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2F0Y2hwb2ludHMuYXJlU3RpbGxW
YWxpZCgpCi0gICAgICAgICYmIG1fY2hhaW5zLmFyZVN0aWxsVmFsaWQoKTsKLX0KLQogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDExIEBACiAjaW5jbHVk
ZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5o
IgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJERkdEZXNpcmVkSWRlbnRp
ZmllcnMuaCIKLSNpbmNsdWRlICJERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmgiCi0jaW5jbHVk
ZSAiREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgog
I2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVk
ZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRl
ICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC05Miw3ICs5MCw3IEBAIGVudW0g
QWRkU3BlY3VsYXRpb25Nb2RlIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4g
dGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCB7CiBwdWJsaWM6Ci0gICAg
R3JhcGgoVk0mLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKKyAgICBHcmFwaChWTSYs
IFBsYW4mKTsKICAgICB+R3JhcGgoKTsKICAgICAKICAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2Um
IGVkZ2UsIE5vZGUqIG5ld05vZGUpCkBAIC0zODEsNyArMzc5LDcgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3dhdGNo
cG9pbnRzLmlzU3RpbGxWYWxpZCgKKyAgICAgICAgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cy5p
c1N0aWxsVmFsaWQoCiAgICAgICAgICAgICBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOwogICAgIH0KICAgICAKQEAgLTY5Niwx
MSArNjk0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGlz
U3RpbGxWYWxpZCgpIGNvbnN0OworICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRp
b24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KKyAgICAKKyAgICBEZXNp
cmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJz
OyB9CisgICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxh
bi53YXRjaHBvaW50czsgfQorICAgIERlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMmIGNoYWlucygpIHsg
cmV0dXJuIG1fcGxhbi5jaGFpbnM7IH0KICAgICAKICAgICBWTSYgbV92bTsKKyAgICBQbGFuJiBt
X3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLSAgICBSZWZQdHI8UHJvZmlsZXI6
OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9uOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJs
b2NrOwogICAgIAogICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwpAQCAtNzIzLDExICs3
MjUsNiBAQCBwdWJsaWM6CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7CiAgICAgdW5zaWdu
ZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKLSAgICB1bnNp
Z25lZCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAgICBPcGVyYW5kczxKU1ZhbHVlPiBtX211
c3RIYW5kbGVWYWx1ZXM7Ci0gICAgRGVzaXJlZFdhdGNocG9pbnRzIG1fd2F0Y2hwb2ludHM7Ci0g
ICAgRGVzaXJlZElkZW50aWZpZXJzIG1faWRlbnRpZmllcnM7Ci0gICAgRGVzaXJlZFN0cnVjdHVy
ZUNoYWlucyBtX2NoYWluczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1f
Zml4cG9pbnRTdGF0ZTsKICAgICBHcmFwaEZvcm0gbV9mb3JtOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiREZH
T1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkRGR1JlZ2lzdGVyQmFuay5oIgpAQCAtNTksNyArNjEsNyBAQCBKSVRDb21waWxlcjo6fkpJVENv
bXBpbGVyKCkKIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cygpCiB7CiAgICAgQVNTRVJU
KG1faml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9leGl0Q29tcGlsYXRpb25JbmZvLnNpemUo
KSk7Ci0gICAgaWYgKG1fZ3JhcGgubV9jb21waWxhdGlvbikgeworICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29k
ZS0+b3NyRXhpdC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1f
aml0Q29kZS0+b3NyRXhpdFtpXTsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOwpA
QCAtMjI5LDI4ICsyMzEsMjUgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBs
aW5rQgogICAgICAgICAgICAgbV9qaXRDb2RlLT53YXRjaHBvaW50c1tleGl0Lm1fd2F0Y2hwb2lu
dEluZGV4XS5jb3JyZWN0TGFiZWxzKGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKLSAgICBpZiAo
bV9ncmFwaC5tX2NvbXBpbGF0aW9uKSB7CisgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkg
ewogICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVscy5zaXplKCkgPT0gbV9qaXRDb2RlLT5v
c3JFeGl0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4aXRT
aXRlTGFiZWxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWZWN0b3I8TGFiZWw+JiBsYWJl
bHMgPSBtX2V4aXRTaXRlTGFiZWxzW2ldOwogICAgICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQq
PiBhZGRyZXNzZXM7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGFiZWxz
LnNpemUoKTsgKytqKQogICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQobGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGxhYmVsc1tqXSkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fY29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRlKGFkZHJlc3Nlcyk7CisgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmFkZE9TUkV4aXRTaXRlKGFkZHJlc3Nlcyk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKCFtX2V4aXRTaXRlTGFiZWxz
LnNpemUoKSk7CiAgICAgCi0gICAgbV9qaXRDb2RlLT5jb21tb24uY29tcGlsYXRpb24gPSBtX2dy
YXBoLm1fY29tcGlsYXRpb247CisgICAgbV9qaXRDb2RlLT5jb21tb24uY29tcGlsYXRpb24gPSBt
X2dyYXBoLmNvbXBpbGF0aW9uKCk7CiAgICAgCiAgICAgbV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgp
OwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwot
ICAgIAotICAgIG1fZ3JhcGgubV93YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKLSAgICBtX2dyYXBo
Lm1faWRlbnRpZmllcnMucmVhbGx5QWRkKCptX3ZtKTsKIH0KIAotYm9vbCBKSVRDb21waWxlcjo6
Y29tcGlsZSgpCit2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKIHsKICAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tlbmQiKTsKIApAQCAtMjY5LDM0ICsyNjgsMjcg
QEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0
cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3JlYXRlT1NSRW50
cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgSklUQ29tcGlsZXI6OmxpbmsoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQordm9pZCBK
SVRDb21waWxlcjo6bGluaygpCiB7Ci0gICAgaWYgKCFtX2dyYXBoLmlzU3RpbGxWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpt
X3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAo
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbGluayhsaW5rQnVmZmVyKTsKLSAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcyhs
aW5rQnVmZmVyKTsKLQotICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKLSAgICAgICAg
bV9kaXNhc3NlbWJsZXItPmR1bXAobGlua0J1ZmZlcik7Ci0gICAgaWYgKG1fZ3JhcGgubV9jb21w
aWxhdGlvbikgewotICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2dy
YXBoLm1fY29tcGlsYXRpb24uZ2V0KCksIGxpbmtCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fZ3JhcGgubV9jb21waWxhdGlvbik7
CisgICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1
ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkpOwor
ICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CisgICAgICAgIG1fZ3Jh
cGgubV9wbGFuLmZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIobV9ncmFw
aC5tX3BsYW4pKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAKKyAgICBsaW5rKCpsaW5r
QnVmZmVyKTsKKyAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcygqbGlua0J1ZmZlcik7
CiAKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOwotICAgIHJl
dHVybiB0cnVlOworICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVmZmVyKTsKKyAgICAKKyAgICBtX2dy
YXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgSklURmluYWxpemVyKAorICAgICAg
ICBtX2dyYXBoLm1fcGxhbiwgbV9kaXNhc3NlbWJsZXIucmVsZWFzZSgpLCBtX2ppdENvZGUucmVs
ZWFzZSgpLAorICAgICAgICBsaW5rQnVmZmVyLnJlbGVhc2UoKSkpOwogfQogCi1ib29sIEpJVENv
bXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQordm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tlbmQi
KTsKICAgICAKQEAgLTM2NiwzNyArMzU4LDM3IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVG
dW5jdGlvbigpCiAgICAgLy8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3Nh
cnkuCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9m
Q29kZSgpOwotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpJVENvbXBpbGVyOjps
aW5rRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rp
b24oKQogewotICAgIGlmICghbV9ncmFwaC5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBp
ZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbGluayhsaW5rQnVmZmVyKTsKLSAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmll
cyhsaW5rQnVmZmVyKTsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0
UHRyKG5ldyBMaW5rQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKSk7CisgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsK
KyAgICAgICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZp
bmFsaXplcihtX2dyYXBoLm1fcGxhbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxp
bmsoKmxpbmtCdWZmZXIpOworICAgIG1fc3BlY3VsYXRpdmUtPmxpbmtPU1JFbnRyaWVzKCpsaW5r
QnVmZmVyKTsKICAgICAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSBzdGFjayBjaGVjayAmIGFy
aXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJz
LgotICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2sp
OwotICAgIGxpbmtCdWZmZXIubGluayhtX2NhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9p
c0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxf
YXJpdHlDaGVjayk7CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxTdGFja0NoZWNrLCBjdGlf
c3RhY2tfY2hlY2spOworICAgIGxpbmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlDaGVjaywgbV9j
b2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6
IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOworICAgIAorICAgIGRpc2Fzc2VtYmxlKCpsaW5rQnVm
ZmVyKTsKICAgICAKKyAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcg
SklURmluYWxpemVyKAorICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9kaXNhc3NlbWJsZXIucmVs
ZWFzZSgpLCBtX2ppdENvZGUucmVsZWFzZSgpLAorICAgICAgICBsaW5rQnVmZmVyLnJlbGVhc2Uo
KSwgbV9hcml0eUNoZWNrKSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmRpc2Fzc2VtYmxlKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgp
KQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChsaW5rQnVmZmVyKTsKLSAgICBpZiAobV9n
cmFwaC5tX2NvbXBpbGF0aW9uKSB7Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1By
b2ZpbGVyKG1fZ3JhcGgubV9jb21waWxhdGlvbi5nZXQoKSwgbGlua0J1ZmZlcik7Ci0gICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9ncmFwaC5tX2Nv
bXBpbGF0aW9uKTsKLSAgICB9Ci0KLSAgICBlbnRyeVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29k
ZVJlZihsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBl
bnRyeSA9IG1faml0Q29kZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobV9ncmFw
aC5tX3BsYW4uY29tcGlsYXRpb24pCisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1By
b2ZpbGVyKG1fZ3JhcGgubV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpLCBsaW5rQnVmZmVyKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMjIg
KzI0NywyMiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXIoR3JhcGgmIGRmZyk7CiAgICAgfkpJ
VENvbXBpbGVyKCk7CiAgICAgCi0gICAgYm9vbCBjb21waWxlKCk7Ci0gICAgYm9vbCBjb21waWxl
RnVuY3Rpb24oKTsKKyAgICB2b2lkIGNvbXBpbGUoKTsKKyAgICB2b2lkIGNvbXBpbGVGdW5jdGlv
bigpOwogICAgIAotICAgIGJvb2wgbGluayhSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpOwot
ICAgIGJvb2wgbGlua0Z1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNoZWNrKTsKKyAgICB2b2lkIGxpbmsoKTsK
KyAgICB2b2lkIGxpbmtGdW5jdGlvbigpOwogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBwcm9wZXJ0
aWVzLgogICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KICAgICAKICAgICB2
b2lkIGFkZExhemlseShXYXRjaHBvaW50KiB3YXRjaHBvaW50LCBXYXRjaHBvaW50U2V0KiBzZXQp
CiAgICAgewotICAgICAgICBtX2dyYXBoLm1fd2F0Y2hwb2ludHMuYWRkTGF6aWx5KHdhdGNocG9p
bnQsIHNldCk7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hw
b2ludCwgc2V0KTsKICAgICB9CiAgICAgdm9pZCBhZGRMYXppbHkoV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCwgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5t
X3dhdGNocG9pbnRzLmFkZExhemlseSh3YXRjaHBvaW50LCBzZXQpOworICAgICAgICBtX2dyYXBo
LndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnQsIHNldCk7CiAgICAgfQogICAgIAog
ICAgIC8vIE1ldGhvZHMgdG8gc2V0IGxhYmVscyBmb3IgdGhlIGRpc2Fzc2VtYmxlci4KQEAgLTQ0
NSw2ICs0NDUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihj
b25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgY29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKCk7CiAgICAgdm9pZCBsaW5rT1NSRXhpdHMoKTsKKyAgICB2b2lkIGRp
c2Fzc2VtYmxlKExpbmtCdWZmZXImKTsKICAgICAKICAgICAvLyBUaGUgZGF0YWZsb3cgZ3JhcGgg
Y3VycmVudGx5IGJlaW5nIGdlbmVyYXRlZC4KICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSklU
RmluYWxpemVyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgIkRGR1BsYW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitKSVRGaW5hbGl6ZXI6OkpJVEZpbmFsaXplcihQbGFuJiBwbGFuLCBQYXNzT3duUHRy
PERpc2Fzc2VtYmxlcj4gZGlzYXNzZW1ibGVyLCBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUs
IFBhc3NPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGFyaXR5Q2hlY2spCisgICAgOiBGaW5hbGl6ZXIocGxhbikKKyAgICAsIG1fZGlzYXNzZW1ibGVy
KGRpc2Fzc2VtYmxlcikKKyAgICAsIG1faml0Q29kZShqaXRDb2RlKQorICAgICwgbV9saW5rQnVm
ZmVyKGxpbmtCdWZmZXIpCisgICAgLCBtX2FyaXR5Q2hlY2soYXJpdHlDaGVjaykKK3sKK30KKwor
SklURmluYWxpemVyOjp+SklURmluYWxpemVyKCkKK3sKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKK3sKKyAgICBmaW5hbGl6ZUNv
bW1vbigpOworICAgIAorICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVm
ZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7CisgICAgZW50cnkgPSBtX2pp
dENvZGU7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBmaW5hbGl6ZUNvbW1vbigpOworICAg
IAorICAgIHdpdGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlD
aGVjayk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZp
bmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKKyAgICBlbnRyeSA9IG1faml0Q29kZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
Q29tbW9uKCkKK3sKKyAgICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKQorICAgICAgICBtX3BsYW4u
dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb21waWxh
dGlvbik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFs
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmlu
YWxpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdKSVRGaW5hbGl6
ZXJfaAorI2RlZmluZSBERkdKSVRGaW5hbGl6ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Rpc2Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIkRGR0ZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEpJVEZpbmFsaXplciA6IHB1YmxpYyBGaW5hbGl6ZXIgeworcHVibGljOgor
ICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc093blB0cjxEaXNhc3NlbWJsZXI+LCBQYXNzUmVm
UHRyPEpJVENvZGU+LCBQYXNzT3duUHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCgpKTsKKyAgICB2aXJ0dWFsIH5K
SVRGaW5hbGl6ZXIoKTsKKyAgICAKKyAgICBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBlbnRyeSk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjayk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBmaW5hbGl6ZUNvbW1vbigpOworICAgIAorICAgIE93blB0cjxEaXNh
c3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CisgICAgT3duUHRyPExpbmtCdWZmZXI+IG1fbGlua0J1ZmZlcjsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9hcml0eUNoZWNrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdKSVRGaW5hbGl6ZXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQbGFuLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgiCisjaW5j
bHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKKyNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgorI2lu
Y2x1ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKKyNpbmNsdWRlICJERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCisjaW5jbHVk
ZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCisjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgorI2lu
Y2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNp
bmNsdWRlICJERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVW5pZmlj
YXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVz
LmgiCisjaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgorI2luY2x1ZGUgIkZUTExpbmsuaCIKKyNpbmNs
dWRlICJGVExMb3dlckRGR1RvTExWTS5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0
YXRpYyB2b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRl
eHQpCit7CisgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFw
aDsKKyAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGRhdGFM
b2codGV4dCwgIlxuIik7CisgICAgICAgIGdyYXBoLmR1bXAoKTsKKyAgICAgICAgbW9kZUZvckZp
bmFsVmFsaWRhdGUgPSBEb250RHVtcEdyYXBoOworICAgIH0KKyAgICBpZiAodmFsaWRhdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgdmFsaWRhdGUoZ3JhcGgsIG1vZGVGb3JGaW5hbFZhbGlkYXRlKTsK
K30KKworUGxhbjo6UGxhbigKKyAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICB1bnNpZ25l
ZCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICA6IGNvbXBpbGVNb2RlKGNvbXBpbGVNb2RlKQorICAg
ICwgY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0aFZh
bHVlcykKKyAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcnNXaXRoVmFsdWVzKQorICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNG
b3IoY29kZUJsb2NrKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKKyAgICAsIGlkZW50aWZpZXJzKGNv
ZGVCbG9jaykKK3sKK30KKworUGxhbjo6flBsYW4oKQoreworfQorCit2b2lkIFBsYW46OmNvbXBp
bGVJblRocmVhZCgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
b21waWxhdGlvbiAoUGxhbikiKTsKKyAgICBDb21waWxhdGlvblNjb3BlIGNvbXBpbGF0aW9uU2Nv
cGU7CisKKyAgICBHcmFwaCBkZmcodm0oKSwgKnRoaXMpOworICAgIAorICAgIGlmICghcGFyc2Uo
ZGZnKSkgeworICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVy
KCp0aGlzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQnkgdGhpcyBw
b2ludCB0aGUgREZHIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRl
ZCB2YXJpb3VzIHRhYmxlcworICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29k
IHRpbWUgdG8gcGVyZm9ybSBhbiBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKKyAgICAvLyBw
b3dlcmZ1bCB0aGFuIGEgbGF0ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhh
dmVuJ3QgZ2VuZXJhdGVkIGFueSBjb2RlCisgICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0
aGUgdGFibGVzIGRpcmVjdGx5LCB5ZXQuCisgICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2Rl
QmxvY2s6OkVhcmx5U2hyaW5rKTsKKworICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAg
ICAgICB2YWxpZGF0ZShkZmcpOworICAgIAorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcp
OworICAgIHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOworICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5q
ZWN0aW9uKGRmZyk7CisgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAg
IHZhbGlkYXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRm
Zyk7CisgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOworICAgIHBlcmZvcm1G
aXh1cChkZmcpOworICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOworICAgIAorICAg
IGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKKworICAgIHBlcmZv
cm1DU0UoZGZnKTsKKyAgICBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oZGZnKTsKKyAg
ICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBh
IG5vLW9wIHNpbmNlIENTRSByYXJlbHkgZGV0aHJlYWRzLCBhbmQgYXJndW1lbnRzIHNpbXBsaWZp
Y2F0aW9uIHJhcmVseSBkb2VzIGFueXRoaW5nLgorICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICBw
ZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CisgICAgcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9u
KGRmZyk7CisKKyAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CisK
KyAgICBwZXJmb3JtU3RvcmVFbGltaW5hdGlvbihkZmcpOworICAgIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhkZmcpOworICAgIHBlcmZvcm1EQ0UoZGZnKTsKKworI2lmIEVOQUJMRShGVExfSklUKQor
ICAgIGlmIChPcHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKQorICAgICAgICAmJiBjb21waWxl
TW9kZSA9PSBDb21waWxlRnVuY3Rpb24KKyAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykp
IHsKKyAgICAgICAgCisgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0
IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBPU1IgZW50cnkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTM2MjUKKyAgICAgICAgCisgICAgICAgIEZUTDo6U3RhdGUgc3RhdGUoZGZn
KTsKKyAgICAgICAgRlRMOjpsb3dlckRGR1RvTExWTShzdGF0ZSk7CisgICAgICAgIEZUTDo6Y29t
cGlsZShzdGF0ZSk7CisgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgCisgICAgcGVyZm9ybVZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKKyAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAi
R3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOworCisgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dK
SVQoZGZnKTsKKyAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAg
ICAgIGRhdGFGbG93SklULmNvbXBpbGVGdW5jdGlvbigpOworICAgICAgICBkYXRhRmxvd0pJVC5s
aW5rRnVuY3Rpb24oKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY29tcGlsZU1vZGUg
PT0gQ29tcGlsZU90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGRhdGFGbG93SklULmNvbXBpbGUo
KTsKKyAgICAgICAgZGF0YUZsb3dKSVQubGluaygpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQo
ZmluYWxpemVyKTsKK30KKworYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQoreworICAgIHJldHVy
biB3YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgY2hhaW5zLmFyZVN0aWxs
VmFsaWQoKTsKK30KKwordm9pZCBQbGFuOjpyZWFsbHlBZGQoKQoreworICAgIHdhdGNocG9pbnRz
LnJlYWxseUFkZCgpOworICAgIGlkZW50aWZpZXJzLnJlYWxseUFkZCh2bSgpKTsKK30KKworQ29t
cGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAg
IGlmICghaXNTdGlsbFZhbGlkKCkpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRh
dGVkOworICAgIAorICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21w
aWxlRnVuY3Rpb24pCisgICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemVGdW5jdGlv
bihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemUoaml0Q29kZSk7CisgICAgCisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICAKKyAgICByZWFsbHlB
ZGQoKTsKKyAgICAKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHUGxhbl9oCisjZGVmaW5lIERGR1BsYW5faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkRGR0Rlc2lyZWRJZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRTdHJ1
Y3R1cmVDaGFpbnMuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIKKyNpbmNs
dWRlICJERkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29t
cGlsZU90aGVyIH07CitlbnVtIENvbXBpbGF0aW9uUmVzdWx0IHsgQ29tcGlsYXRpb25GYWlsZWQs
IENvbXBpbGF0aW9uSW52YWxpZGF0ZWQsIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCB9OworCitzdHJ1
Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CisgICAgUGxhbigK
KyAgICAgICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIENvZGVCbG9jayogY29kZUJsb2NrLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIHVuc2lnbmVkIG51bVZhcnNX
aXRoVmFsdWVzKTsKKyAgICB+UGxhbigpOworICAgIAorICAgIHZvaWQgY29tcGlsZUluVGhyZWFk
KCk7CisgICAgCisgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoUmVmUHRyPEpTQzo6SklU
Q29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKKyAgICAKKyAgICBWTSYgdm0oKSB7IHJldHVybiAqY29kZUJsb2NrLT52bSgpOyB9CisK
KyAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsK
KyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbnVtVmFy
c1dpdGhWYWx1ZXM7CisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKwor
ICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOworCisgICAgT3du
UHRyPEZpbmFsaXplcj4gZmluYWxpemVyOworICAgIAorICAgIERlc2lyZWRXYXRjaHBvaW50cyB3
YXRjaHBvaW50czsKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7CisgICAgRGVz
aXJlZFN0cnVjdHVyZUNoYWlucyBjaGFpbnM7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1N0aWxs
VmFsaWQoKTsKKyAgICB2b2lkIHJlYWxseUFkZCgpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQbGFu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUwMDkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCwxNiArNzQsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0g
bV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIGlmIChibG9jay0+
Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9wbGFuLm11c3RI
YW5kbGVWYWx1ZXNbaV0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZ0ltcGwqIGlkZW50aWZpZXJVSUQodW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tX2lkZW50aWZpZXJzW2luZGV4XTsKKyAgICAgICAgcmV0
dXJuIG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtpbmRleF07CiAgICAgfQogCiAgICAgLy8g
U3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgSlNTdGFjay4KQEAgLTMwMTUs
NyArMzAxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKICAg
ICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9CiAgICAgICAgIG1faml0Lmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+c3RyaW5nT2JqZWN0U3RydWN0
dXJlKCk7CiAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsK
LSAgICBBU1NFUlQobV9qaXQuZ3JhcGgoKS5tX3dhdGNocG9pbnRzLmlzVmFsaWRPck1peGVkKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpOworICAg
IEFTU0VSVChtX2ppdC5ncmFwaCgpLndhdGNocG9pbnRzKCkuaXNWYWxpZE9yTWl4ZWQoc3RyaW5n
UHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSk7CiAgICAgCiAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVn
cygpLCAwLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTAwOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUsMTAgKzE5NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQo
YmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRl
Y29kZUJlZ2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAg
ICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRl
Y29kZUluZGV4KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMDgsNyArMjA4LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAo
IWl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9wbGFuLm11
c3RIYW5kbGVWYWx1ZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUu
aXNDZWxsKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGVExHZW5lcmF0ZWRGdW5jdGlvbl9oCisjZGVmaW5lIEZUTEdlbmVy
YXRlZEZ1bmN0aW9uX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRG
dW5jdGlvbikoRXhlY1N0YXRlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEZUTEdlbmVyYXRlZEZ1bmN0aW9uX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisj
aW5jbHVkZSAiREZHUGxhbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK0pJVEZpbmFsaXplcjo6SklURmluYWxpemVyKFBsYW4m
IHBsYW4pCisgICAgOiBGaW5hbGl6ZXIocGxhbikKK3sKK30KKworSklURmluYWxpemVyOjp+SklU
RmluYWxpemVyKCkKK3sKKyAgICBpZiAobV9lbmdpbmUpCisgICAgICAgIExMVk1EaXNwb3NlRXhl
Y3V0aW9uRW5naW5lKG1fZW5naW5lKTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
KFJlZlB0cjxKU0M6OkpJVENvZGU+JikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIHdpdGhBcml0eUNoZWNrKQoreworICAgIGlmIChtX2V4aXRUaHVua3NMaW5rQnVmZmVyKSB7
CisgICAgICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCisgICAgICAgICAgICBG
SU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICAqbV9leGl0VGh1bmtzTGlua0J1ZmZl
ciwKKyAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSku
ZGF0YSgpKSkpOworICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMs
IHNvIG5vIGV4aXQgdGh1bmtzLgorICAgIAorICAgIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBv
aW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOworICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGUoCisgICAgICAgIG1fZW5naW5lLAorICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgKKyAgICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVmZmVyLAorICAgICAgICAgICAg
KCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0
ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgbV9mdW5jdGlvbikpKTsKKyAgICBlbnRyeSA9IG1faml0
Q29kZTsKKyAgICAKKyAgICBtX2VuZ2luZSA9IDA7IC8vIFdlIGRvbid0IG93biBpdCBhbnltb3Jl
LgorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMSklURmluYWxpemVyX2gKKyNkZWZpbmUgRlRMSklURmluYWxpemVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpJVEZpbmFsaXplciA6IHB1YmxpYyBE
Rkc6OkZpbmFsaXplciB7CitwdWJsaWM6CisgICAgSklURmluYWxpemVyKERGRzo6UGxhbiYpOwor
ICAgIHZpcnR1YWwgfkpJVEZpbmFsaXplcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUV4
aXRUaHVua3NMaW5rQnVmZmVyKFBhc3NPd25QdHI8TGlua0J1ZmZlcj4gYnVmZmVyKQorICAgIHsK
KyAgICAgICAgbV9leGl0VGh1bmtzTGlua0J1ZmZlciA9IGJ1ZmZlcjsKKyAgICB9CisgICAgdm9p
ZCBpbml0aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIoUGFzc093blB0cjxMaW5rQnVmZmVyPiBi
dWZmZXIpCisgICAgeworICAgICAgICBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyID0gYnVmZmVyOwor
ICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5n
aW5lKQorICAgIHsKKyAgICAgICAgbV9lbmdpbmUgPSBlbmdpbmU7CisgICAgfQorICAgIHZvaWQg
aW5pdGlhbGl6ZUZ1bmN0aW9uKEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyAg
ICAgICAgbV9mdW5jdGlvbiA9IGZ1bmN0aW9uOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVB
cml0eUNoZWNrKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB7CisgICAgICAgIG1f
YXJpdHlDaGVjayA9IGxhYmVsOworICAgIH0KKyAgICB2b2lkIGluaXRpYWxpemVKSVRDb2RlKFBh
c3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSkKKyAgICB7CisgICAgICAgIG1faml0Q29kZSA9IGpp
dENvZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29k
ZT4mIGVudHJ5KTsKKyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29k
ZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKTsKKworcHJp
dmF0ZToKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gbV9leGl0VGh1bmtzTGlua0J1ZmZlcjsKKyAg
ICBPd25QdHI8TGlua0J1ZmZlcj4gbV9lbnRyeXBvaW50TGlua0J1ZmZlcjsKKyAgICBMTFZNRXhl
Y3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2Fy
aXR5Q2hlY2s7CisgICAgR2VuZXJhdGVkRnVuY3Rpb24gbV9mdW5jdGlvbjsKKyAgICBSZWZQdHI8
SklUQ29kZT4gbV9qaXRDb2RlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKSVRGaW5hbGl6ZXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE1MDA5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDE1ICs0Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVFbnRyeShDQ2FsbEhlbHBl
cnMmIGoKICAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKGppdC5jb2Rl
QmxvY2soKSwgSlNTdGFjazo6Q29kZUJsb2NrKTsKIH0KIAotYm9vbCBsaW5rKFN0YXRlJiBzdGF0
ZSwgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYg
aml0Q29kZVdpdGhBcml0eUNoZWNrKQordm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBp
ZiAoIXN0YXRlLmdyYXBoLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIExMVk1EaXNwb3NlRXhl
Y3V0aW9uRW5naW5lKHN0YXRlLmVuZ2luZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGUuZ3JhcGgubV93YXRjaHBvaW50cy5yZWFsbHlBZGQoKTsKLSAgICAK
ICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
b3RhbCBrbHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9u
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEK
QEAgLTEyNCwxOSArMTE3LDE1IEBAIGJvb2wgbGluayhTdGF0ZSYgc3RhdGUsIFJlZlB0cjxKU0M6
OkpJVEMKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAgICAgCi0gICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIHN0YXRlLmdyYXBoLm1f
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKLSAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAgbGlua0J1ZmZlci5saW5r
KGNhbGxBcml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9y
ID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7
Ci0gICAgICAgIAotICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihhcml0eUNoZWNrKTsKLSAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKLSAg
ICAgICAgc3RhdGUuZW5naW5lLAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKLSAgICAgICAg
ICAgIGxpbmtCdWZmZXIsCi0gICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAl
cyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSwgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7Ci0gICAgaml0Q29kZSA9IHN0YXRlLmppdENv
ZGU7CisgICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlu
a0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbFN0
YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJp
dHlDaGVjaywgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9v
cF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOwogICAgIAot
ICAgIHJldHVybiB0cnVlOworICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9p
bnRMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKKyAgICBzdGF0ZS5maW5hbGl6ZXIt
PmluaXRpYWxpemVDb2RlKHN0YXRlLmVuZ2luZSk7CisgICAgc3RhdGUuZmluYWxpemVyLT5pbml0
aWFsaXplRnVuY3Rpb24oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOworICAgIHN0YXRlLmZpbmFs
aXplci0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2soYXJpdHlDaGVjayk7CisgICAgc3RhdGUuZmluYWxp
emVyLT5pbml0aWFsaXplSklUQ29kZShzdGF0ZS5qaXRDb2RlKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmgJKHJldmlz
aW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAotYm9vbCBsaW5rKFN0YXRlJiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Cit2b2lkIGxpbmsoU3RhdGUm
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUwMDkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NTgsOSArMTk1OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG1faW5pdGlhbGl6YXRpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZXhpdFRo
dW5rR2VuZXJhdG9yLmRpZFRoaW5ncygpKSB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoCisgICAgICAgICAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0
UHRyKG5ldyBMaW5rQnVmZmVyKAogICAgICAgICAgICAgICAgIHZtKCksICZtX2V4aXRUaHVua0dl
bmVyYXRvciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywKLSAgICAgICAgICAgICAgICBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKSk7CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUu
b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CiAg
ICAgICAgIApAQCAtMTk2OCwyMCArMTk2OCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXRbaV07CiAg
ICAgICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhp
dFtpXTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZv
Lm1fdGh1bmtKdW1wLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmso
aW5mby5tX3RodW5rSnVtcCwgdGFyZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1fb3V0LnNldCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFi
ZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci0+bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSks
CiAgICAgICAgICAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVy
Lm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOworICAgICAgICAgICAgICAgIGV4aXQubV9wYXRj
aGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+b2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5pbml0aWFsaXplRXhpdFRodW5rcygKLSAgICAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09E
RSgKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAg
KCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fZnRsU3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkp
OworICAgICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFeGl0VGh1bmtz
TGlua0J1ZmZlcihsaW5rQnVmZmVyLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBt
X291dC5qdW1wKG1fYXJndW1lbnRDaGVja3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2lu
Y2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKQEAgLTQyLDYgKzQzLDggQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAs
IGVuZ2luZSgwKQogICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKIHsKKyAgICBmaW5hbGl6ZXIg
PSBuZXcgSklURmluYWxpemVyKGdyYXBoLm1fcGxhbik7CisgICAgZ3JhcGgubV9wbGFuLmZpbmFs
aXplciA9IGFkb3B0UHRyKGZpbmFsaXplcik7CiB9CiAKIHZvaWQgU3RhdGU6OmR1bXBTdGF0ZShj
b25zdCBjaGFyKiB3aGVuKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAko
cmV2aXNpb24gMTUwMDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTEdlbmVyYXRl
ZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTEpJVEZp
bmFsaXplci5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCi10eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2VuZXJhdGVkRnVuY3Rpb24pKEV4ZWNTdGF0
ZSopOwotCiBjbGFzcyBTdGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOwog
ICAgIApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxh
dGlvbkluZm8+IG9zckV4aXQ7CiAgICAgTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmU7CiAg
ICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CisgICAgSklURmluYWxpemVy
KiBmaW5hbGl6ZXI7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7
CiB9Owo=
</data>
<flag name="review"
          id="223228"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>