<?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>148131</bug_id>
          
          <creation_ts>2015-08-18 10:27:53 -0700</creation_ts>
          <short_desc>Split InlineCallFrame into its own file</short_desc>
          <delta_ts>2015-08-18 11:28:58 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118549</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-18 10:27:53 -0700</bug_when>
    <thetext>Split InlineCallFrame into its own file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118550</commentid>
    <comment_count>1</comment_count>
      <attachid>259277</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-18 10:28:46 -0700</bug_when>
    <thetext>Created attachment 259277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118558</commentid>
    <comment_count>2</comment_count>
      <attachid>259277</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-18 10:47:29 -0700</bug_when>
    <thetext>Comment on attachment 259277
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118565</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-18 11:28:58 -0700</bug_when>
    <thetext>Committed r188585: &lt;http://trac.webkit.org/changeset/188585&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259277</attachid>
            <date>2015-08-18 10:28:46 -0700</date>
            <delta_ts>2015-08-18 10:47:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148131-20150818102844.patch</filename>
            <type>text/plain</type>
            <size>62791</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDE1LTA4LTE4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3BsaXQgSW5saW5lQ2FsbEZyYW1lIGludG8gaXRzIG93biBmaWxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMzEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpyKToKKyAgICAgICAg
KEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2spOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojpjb2RlT3JpZ2luT3duZXIpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpzdGFja09mZnNl
dCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXApOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpj
YWxsZWVDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6
dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OmNhbGxlZUZvckNhbGxGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNhbGxG
cmFtZTo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6aGFz
aEFzU3RyaW5nSWZQb3NzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNhbGxG
cmFtZTo6aW5mZXJyZWROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZy
YW1lOjpiYXNlbGluZUNvZGVCbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNh
bGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OklubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OklubGluZUNhbGxGcmFtZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnBy
aW50SW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoK
KyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6ZGVsZXRlZE1hcmtlcik6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46Omhhc2gpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpD
b2RlT3JpZ2luSGFzaDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6Omtp
bmRGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NL
aW5kRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFs
aXphdGlvbktpbmRGb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6
OmlzVmFyYXJncyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6SW5s
aW5lQ2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnNldFN0YWNrT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OklubGluZUNh
bGxGcmFtZTo6cmV0dXJuUENPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpzdGFja09mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmNv
ZGVPcmlnaW5Pd25lcik6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVEZXB0aCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVxdWFsVG8pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmR1bXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpkdW1wSW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjppc1ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OklubGluZUNhbGxGcmFtZSk6CisgICAg
ICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kKToKKyAgICAgICAg
KEpTQzo6YmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUpOgorICAgICAgICAoSlND
OjpiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46OmlzU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpvcGVy
YXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6ZGVsZXRlZE1hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OnN0YWNrT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlT3JpZ2luOjpjb2RlT3JpZ2luT3duZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luSGFzaDo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVPcmlnaW5IYXNo
OjplcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVPcmlnaW5BcHByb3hpbWF0ZUhh
c2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luQXBwcm94aW1hdGVI
YXNoOjplcXVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1l
U2V0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRCYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHA6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogcHJvZmls
ZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA6CisgICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwOgorCiAyMDE1LTA4LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGNvbnN0IHRvIGNvbnRlbnQgZXh0ZW5zaW9uIHBh
cnNlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4
NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC05Miw2ICs5Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0
ZWNvZGUvRXhpdGluZ0pJVFR5cGUuY3BwCiAgICAgYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
ICAgICBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKKyAgICBieXRlY29kZS9JbmxpbmVDYWxs
RnJhbWUuY3BwCiAgICAgYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lU2V0LmNwcAogICAgIGJ5dGVj
b2RlL0p1bXBUYWJsZS5jcHAKICAgICBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24g
MTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYgKzMzMyw3IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0aW5nSklUVHlwZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlkU3RhdHVzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRWYXJpYW50
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxG
cmFtZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVD
YWxsRnJhbWVTZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
SnVtcFRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCIgLz4KQEAgLTEwMTQsNiArMTAxNSw3IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlkVmFyaWFudC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxGcmFtZVNldC5oIiAvPgor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZyYW1lLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbnN0cnVjdGlvbi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5o
IiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwkocmV2aXNpb24gMTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzk4LDYgKzEzOTgsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XFJlcGF0Y2guY3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJh
bWUuY3BwIj4KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGls
ZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxGcmFtZVNl
dC5jcHAiPgogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgpAQCAtMzg4OCw2ICszODkxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxS
ZWdpc3RlclNldC5oIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWUu
aCI+CisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCI+
CiAgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4NTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTg4MSw2ICs4ODEsOCBAQAogCQkxNDgyQjdFNDBBNDMwNzYwMDA1
MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ4MkI3RTIwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNw
cCAqLzsgfTsKIAkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NzRBRTExNUVCREU0
QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovOyB9OwogCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1
ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ4NzRBRTIxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDhBN0JFRjFCODI5NzVBMDAy
RDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0OEE3QkVEMUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxs
RnJhbWUuY3BwICovOyB9OworCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2Fs
bEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDhBN0JFRTFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2FsbEZyYW1lLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4Q0QxRDgxMDhDRjkwMjAw
ODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OENEMUQ3MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRl
eHRSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQ4RjIxQUExMDdFQzUzQTAwNDJFQzJDIC8qIEJ5dGVjb2RlR2VuZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2OUEwNzIw
MEVEMUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5jcHAgKi87IH07CiAJCTE0OEYy
MUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg2NTAyNTU1OTdEMDFGRjYwRjcgLyogTGV4ZXIu
Y3BwICovOyB9OwpAQCAtMTY5NCwxMyArMTY5NiwxMyBAQAogCQlFMzM2MzdBNjFCNjMyMjAyMDBF
RTA4NDAgLyogUmVmbGVjdE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTMzNjM3QTQxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzNC
M0UyNjFCN0FCRDc1MDA0OERCMkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzQjNF
MjUxQjdBQkQ3NTAwNDhEQjJFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5sdXQu
aCAqLzsgfTsKIAkJRTM1NDYyMkIxQjYwNjVEMTAwNTQ1Mzg2IC8qIENvbnN0cnVjdEFiaWxpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTQ2MjJB
MUI2MDY1RDEwMDU0NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM1RTAzNUYxQjdBQjQzRTAwNzNBRDJB
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RDFCN0FCNDNFMDA3M0FEMkEgLyog
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCAqLzsgfTsKKwkJRTM1RTAzNjAxQjdB
QjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTAzNUUxQjdBQjQzRTAw
NzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNzk0RTc1MUI3N0VCOTcwMDU1
NDNBRSAvKiBNb2R1bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6
ZXIuY3BwICovOyB9OwogCQlFMzc5NEU3NjFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzk0
RTc0MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzOTYzQ0VEMUI3M0Y3NTAwMEVCNENF
NSAvKiBNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzOTYzQ0VCMUI3M0Y3NTAwMEVCNENFNSAvKiBNb2R1bGVSZWNvcmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzk2M0NFRTFC
NzNGNzUwMDBFQjRDRTUgLyogTm9kZXNBbmFseXplTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOTYzQ0VDMUI3M0Y3NTAwMEVCNENFNSAv
KiBOb2Rlc0FuYWx5emVNb2R1bGUuY3BwICovOyB9OwogCQlFM0MwOUY1NTFCNzk2OTJBMDBFRTM2
QTIgLyogTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzQzA5RjU0MUI3OTY5MkEwMEVFMzZBMiAvKiBNb2R1bGVSZWNvcmQuY3Bw
ICovOyB9OwotCQlFMzVFMDM1RjFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25PYmplY3QuY3BwICovOyB9OwotCQlFMzVFMDM2MDFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzVFMDM1RTFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNFRjg4NzIxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
ICovOyB9OwogCQlFM0VGODg3NTFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNF
Rjg4NzMxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDlEQzE2QjEyRUYy
OTNFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDlEQzE1NTEyRUYyNzcyMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZS5jcHAgKi87IH07CkBAIC0yNjI3LDYgKzI2MjksOCBAQAogCQkx
NDgyQjdFMjBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPYmplY3RSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Njb3BlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4NzRBRTIxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY29wZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNDhBN0JFRDFCODI5NzVBMDAyRDkxNTcgLyogSW5saW5lQ2Fs
bEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUNh
bGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0OEE3QkVFMUI4Mjk3
NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0OENEMUQ3MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29udGV4dFJlZlByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5NTU5RUQwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVn
Z2VyQ2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERl
YnVnZ2VyQ2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5QjI0
RkYwRDhBRjZEMTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTI0
LDE2ICszNTI4LDE2IEBACiAJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gVk0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZp
ZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJRTMzNjM3QTMxQjYzMjIwMjAwRUUwODQwIC8qIFJl
ZmxlY3RPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVm
bGVjdE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzYzN0E0MUI2
MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZmxlY3RPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RTMzQjNFMjUxQjdBQkQ3NTAwNDhEQjJFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVj
dC5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0Lmx1dC5oOyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2Jq
ZWN0Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzNCM0UyNTFCN0FCRDc1
MDA0OERCMkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Qu
bHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNTQ2MjJBMUI2MDY1RDEwMDU0
NTM4NiAvKiBDb25zdHJ1Y3RBYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbnN0cnVjdEFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1
RTAzNUQxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMDM1
RTFCN0FCNDNFMDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMDM2MTFCN0FCNDg1MDA3
M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3MzFCNzdFQjk3MDA1NTQz
QUUgLyogTW9kdWxlQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTW9kdWxlQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
Mzc5NEU3NDFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM5NjNDRUIxQjczRjc1MDAwRUI0Q0U1IC8qIE1vZHVsZVJlY29yZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVSZWNvcmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5NjNDRUMxQjczRjc1MDAwRUI0Q0U1IC8qIE5vZGVzQW5h
bHl6ZU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2Rl
c0FuYWx5emVNb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0MwOUY1
NDFCNzk2OTJBMDBFRTM2QTIgLyogTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVsZVJlY29yZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTM1RTAz
NjExQjdBQjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbk9iamVjdC5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFRjg4NzIx
QjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRUY4ODczMUI2NkRGMjMwMDNGMjZDQiAvKiBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ5REMxNDkxMkVGMjYxQTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDcwLDYgKzU0NzQsOCBAQAogCQkJCTBG
MDMzMkMxMThCMDE3NjMwMDVGOTc5QSAvKiBHZXRCeUlkVmFyaWFudC5jcHAgKi8sCiAJCQkJMEYw
MzMyQzIxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmggKi8sCiAJCQkJMEYwQjgz
QTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmggKi8sCisJCQkJMTQ4QTdCRUQxQjgy
OTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgKi8sCisJCQkJMTQ4QTdCRUUxQjgy
OTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5oICovLAogCQkJCTBGMjRFNTUzMTdGMEI3
MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovLAogCQkJCTBGMjRFNTU0MTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLywKIAkJCQk5NjlBMDc5MzBF
RDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCAqLywKQEAgLTYwODIsNiArNjA4OCw3IEBA
CiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUVBNzBFRTE5RjVCNUM0MDA5OEY1RUMgLyogSlNDb250ZXh0UmVmSW5zcGVjdG9y
U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0IC8q
IERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTE0OEE3QkYwMUI4Mjk3NUEwMDJEOTE1NyAv
KiBJbmxpbmVDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc1MTZDMURCMEIw
MDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjAwLDYgKzc2MDcsNyBAQAogCQkJ
CTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4OThGMzExQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTQ4QTdCRUYxQjgyOTc1
QTAwMkQ5MTU3IC8qIElubGluZUNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQw
RjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpT
Q2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE4ODUz
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8u
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5j
bHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTM2LDIxICsxMTM2LDYgQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiB9OwogCi1pbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVChpbmxpbmVDYWxsRnJhbWUpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6
OmluZm8oKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPnNwZWNpYWxp
emF0aW9uS2luZCgpKTsKLX0KLQotaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKQotewotICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5l
Q2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2s7Ci19Ci0KIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGludCBpbmRl
eCkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2
aXNpb24gMTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FsbEZy
YW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgor
I2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC0xMTQsNiArMTE1LDIxIEBAIFZlY3RvcjxDb2RlT3JpZ2luPiBD
b2RlT3JpZ2luOjppbmxpbmVTdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTY3JpcHRFeGVj
dXRhYmxlKiBDb2RlT3JpZ2luOjpjb2RlT3JpZ2luT3duZXIoKSBjb25zdAoreworICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5saW5lQ2Fs
bEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOworfQorCitpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZz
ZXQoKSBjb25zdAoreworICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKK30KKwog
dm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYg
KCFpc1NldCgpKSB7CkBAIC0xNDEsMTA3ICsxNTcsNCBAQCB2b2lkIENvZGVPcmlnaW46OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlCiAgICAgZHVtcChvdXQpOwogfQogCi1KU0Z1bmN0aW9uKiBJbmxp
bmVDYWxsRnJhbWU6OmNhbGxlZUNvbnN0YW50KCkgY29uc3QKLXsKLSAgICBpZiAoY2FsbGVlUmVj
b3ZlcnkuaXNDb25zdGFudCgpKQotICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihj
YWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9p
ZCBJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGFudGlwYXR0ZXJuIGZvciB0d28gcmVhc29ucy4g
UmVmZXJlbmNlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBERkcKLSAgICAvLyB0aGF0IGFyZW4ndCBpbiB0
aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGJlaW5nIGNvbXBpbGVkIHNob3VsZCBiZSB3ZWFrbHkgcmVm
ZXJlbmNlZC4KLSAgICAvLyBJbmxpbmUgY2FsbCBmcmFtZXMgYXJlbid0IGluIHRoZSBvcmlnaW5h
bCBDb2RlQmxvY2ssIHNvIHRoZXkgcXVhbGlmeSBhcyB3ZWFrLiBBbHNvLAotICAgIC8vIHRob3Nl
IHdlYWsgcmVmZXJlbmNlcyBzaG91bGQgYWxyZWFkeSBiZSB0cmFja2VkIGluIHRoZSBERkcgYXMg
d2VhayBGcm96ZW5WYWx1ZXMuIFNvLAotICAgIC8vIHRoZXJlIGlzIHByb2JhYmx5IG5vIG5lZWQg
Zm9yIHRoaXMuIFdlIGFscmVhZHkgaGF2ZSBhc3NlcnRpb25zIHRoYXQgdGhpcyBzaG91bGQgYmUK
LSAgICAvLyB1bm5lY2Vzc2FyeS4gRmluYWxseSwganVzdCBtYXJraW5nIHRoZSBleGVjdXRhYmxl
IGFuZCBub3QgYW55dGhpbmcgZWxzZSBpbiB0aGUgaW5saW5lCi0gICAgLy8gY2FsbCBmcmFtZSBp
cyBhbG1vc3QgY2VydGFpbmx5IGluc3VmZmljaWVudCBmb3Igd2hhdCB0aGlzIG1ldGhvZCB0aG91
Z2h0IGl0IHdhcyBnb2luZwotICAgIC8vIHRvIGFjY29tcGxpc2guCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjYxMwotICAgIHZpc2l0b3IuYXBwZW5k
KCZleGVjdXRhYmxlKTsKLX0KLQotSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVG
b3JDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIHJldHVybiBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LnJlY292ZXIoZXhlYykpOwotfQotCi1Db2RlQmxv
Y2tIYXNoIElubGluZUNhbGxGcmFtZTo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlLmdldCgpKS0+Y29kZUJsb2NrRm9yKAot
ICAgICAgICBzcGVjaWFsaXphdGlvbktpbmQoKSktPmhhc2goKTsKLX0KLQotQ1N0cmluZyBJbmxp
bmVDYWxsRnJhbWU6Omhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdAotewotICAgIHJldHVy
biBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5nZXQoKSktPmNvZGVCbG9j
a0ZvcigKLSAgICAgICAgc3BlY2lhbGl6YXRpb25LaW5kKCkpLT5oYXNoQXNTdHJpbmdJZlBvc3Np
YmxlKCk7Ci19Ci0KLUNTdHJpbmcgSW5saW5lQ2FsbEZyYW1lOjppbmZlcnJlZE5hbWUoKSBjb25z
dAotewotICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5n
ZXQoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKLX0KLQotQ29kZUJsb2NrKiBJbmxpbmVDYWxs
RnJhbWU6OmJhc2VsaW5lQ29kZUJsb2NrKCkgY29uc3QKLXsKLSAgICByZXR1cm4ganNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUuZ2V0KCkpLT5iYXNlbGluZUNvZGVCbG9ja0Zv
cihzcGVjaWFsaXphdGlvbktpbmQoKSk7Ci19Ci0KLXZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1w
QnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KGluZmVycmVkTmFtZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7
Ci19Ci0KLXZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAotewotICAgIG91dC5wcmludChicmllZkZ1
bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlLmdldCgpKSk7
Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICBvdXQucHJpbnQo
IiAoU3RyaWN0TW9kZSkiKTsKLSAgICBvdXQucHJpbnQoIiwgYmMjIiwgY2FsbGVyLmJ5dGVjb2Rl
SW5kZXgsICIsICIsIGtpbmQpOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKQotICAgICAgICBvdXQu
cHJpbnQoIiwgY2xvc3VyZSBjYWxsIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJpbnQoIiwg
a25vd24gY2FsbGVlOiAiLCBpbkNvbnRleHQoY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSwgY29u
dGV4dCkpOwotICAgIG91dC5wcmludCgiLCBudW1BcmdzK3RoaXMgPSAiLCBhcmd1bWVudHMuc2l6
ZSgpKTsKLSAgICBvdXQucHJpbnQoIiwgc3RhY2tPZmZzZXQgPSAiLCBzdGFja09mZnNldCk7Ci0g
ICAgb3V0LnByaW50KCIgKCIsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApLCAiIG1hcHMgdG8g
IiwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCkgKyBzdGFja09mZnNldCwgIik+Iik7Ci19Ci0K
LXZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6
OklubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAg
IGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNhbGw6Ci0gICAgICAgIG91dC5wcmludCgiQ2Fs
bCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q29u
c3RydWN0OgotICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgIG91
dC5wcmludCgiQ2FsbFZhcmFyZ3MiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgIG91dC5wcmludCgiQ29u
c3RydWN0VmFyYXJncyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBKU0M6OklubGluZUNh
bGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgb3V0LnByaW50KCJHZXR0ZXJDYWxsIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxs
OgotICAgICAgICBvdXQucHJpbnQoIlNldHRlckNhbGwiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCShyZXZpc2lvbiAxODg1MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTMyICsxMTYsNiBAQCBwcml2YXRl
OgogICAgIH0KIH07CiAKLXN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewotICAgIGVudW0gS2luZCB7
Ci0gICAgICAgIENhbGwsCi0gICAgICAgIENvbnN0cnVjdCwKLSAgICAgICAgQ2FsbFZhcmFyZ3Ms
Ci0gICAgICAgIENvbnN0cnVjdFZhcmFyZ3MsCi0gICAgICAgIAotICAgICAgICAvLyBGb3IgdGhl
c2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMg
dGhlIHRydWUgcmV0dXJuIFBDCi0gICAgICAgIC8vIHNsb3QuCi0gICAgICAgIEdldHRlckNhbGws
Ci0gICAgICAgIFNldHRlckNhbGwKLSAgICB9OwotICAgIAotICAgIHN0YXRpYyBLaW5kIGtpbmRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChr
aW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAgICAgICByZXR1cm4gQ2Fs
bDsKLSAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIENv
bnN0cnVjdDsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gQ2FsbDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEtpbmQgdmFy
YXJnc0tpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ2FsbFZhcmFyZ3M7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAg
ICAgICAgIHJldHVybiBDb25zdHJ1Y3RWYXJhcmdzOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBDYWxsOwotICAgIH0KLSAg
ICAKLSAgICBzdGF0aWMgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmRG
b3IoS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNh
c2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBHZXR0ZXJD
YWxsOgotICAgICAgICBjYXNlIFNldHRlckNhbGw6Ci0gICAgICAgICAgICByZXR1cm4gQ29kZUZv
ckNhbGw7Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIENvbnN0cnVjdFZh
cmFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ29k
ZUZvckNhbGw7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtp
bmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgYm9vbCBpc1ZhcmFyZ3MoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7Ci0gICAgfQotICAgIAot
ICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4K
LSAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKLSAgICBWYWx1
ZVJlY292ZXJ5IGNhbGxlZVJlY292ZXJ5OwotICAgIENvZGVPcmlnaW4gY2FsbGVyOwotCi0gICAg
c2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7Ci0gICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwg
dHlwZSBpcyBLaW5kCi0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhl
biB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29u
J3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJl
ZCBtYW51YWxseS4KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAv
LyBPbmx5IHNldCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KLSAgICAKLSAgICAvLyBU
aGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVl
cyBmb3IKLSAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKLSAgICAvLyB3ZSBmb3Jnb3QgdG8g
aW5pdGlhbGl6ZSBleHBsaWNpdGx5LgotICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDog
c3RhY2tPZmZzZXQoMCkKLSAgICAgICAgLCBraW5kKENhbGwpCi0gICAgICAgICwgaXNDbG9zdXJl
Q2FsbChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRpb25LaW5k
Rm9yKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsgfQotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVl
Q29uc3RhbnQoKSBjb25zdDsKLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7
Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBjYWxsZWUgZ2l2ZW4gYSBtYWNoaW5lIGNhbGwgZnJhbWUg
dG8gd2hpY2ggdGhpcyBJbmxpbmVDYWxsRnJhbWUgYmVsb25ncy4KLSAgICBKU0Z1bmN0aW9uKiBj
YWxsZWVGb3JDYWxsRnJhbWUoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgCi0gICAgQ1N0cmluZyBp
bmZlcnJlZE5hbWUoKSBjb25zdDsKLSAgICBDb2RlQmxvY2tIYXNoIGhhc2goKSBjb25zdDsKLSAg
ICBDU3RyaW5nIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdDsKLSAgICAKLSAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBzZXRTdGFj
a09mZnNldChzaWduZWQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgc3RhY2tPZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhY2tPZmZz
ZXQpID09IG9mZnNldCk7Ci0gICAgfQotCi0gICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9Ci0gICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZy
YW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9Ci0KLSAgICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5m
b3JtYXRpb24oUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OwotCi0gICAgTUFLRV9QUklOVF9NRVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1w
QnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uLCBicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24pOwotfTsK
LQotaW5saW5lIGludCBDb2RlT3JpZ2luOjpzdGFja09mZnNldCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwotfQotCiBpbmxpbmUgdW5zaWduZWQgQ29kZU9y
aWdpbjo6aGFzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46
Omhhc2goYnl0ZWNvZGVJbmRleCkgKwpAQCAtMjU0LDEzICsxMjgsNiBAQCBpbmxpbmUgYm9vbCBD
b2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0CiAgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9
PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7CiB9CiAgICAgCi1pbmxpbmUgU2NyaXB0RXhlY3V0YWJs
ZSogQ29kZU9yaWdpbjo6Y29kZU9yaWdpbk93bmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFt
ZS0+ZXhlY3V0YWJsZS5nZXQoKTsKLX0KLQogc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKICAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJuIGtleS5o
YXNoKCk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBjb25z
dCBDb2RlT3JpZ2luJiBiKSB7IHJldHVybiBhID09IGI7IH0KQEAgLTI3Nyw4ICsxNDQsNiBAQCBz
dHJ1Y3QgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaCB7CiAKIG5hbWVzcGFjZSBXVEYgewogCi12
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OklubGluZUNhbGxGcmFtZTo6S2lu
ZCk7Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIHRlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6Q29kZU9yaWdpbj4gewogICAgIHR5cGVkZWYgSlND
OjpDb2RlT3JpZ2luSGFzaCBIYXNoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE4ODUzMikJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOjE4ODUzMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit1bnNpZ25lZCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNh
bGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sKKyAgICB1bnNpZ25l
ZCByZXN1bHQgPSAxOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5l
Q2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWdu
ZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGgoKSBjb25zdAoreworICAgIHJldHVybiBpbmxpbmVE
ZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworfQorCitib29sIENvZGVPcmlnaW46
OmlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7
CisgICAgQ29kZU9yaWdpbiBhID0gKnRoaXM7CisgICAgQ29kZU9yaWdpbiBiID0gb3RoZXI7CisK
KyAgICBpZiAoIWEuaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuICFiLmlzU2V0KCk7CisgICAgaWYg
KCFiLmlzU2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoYS5pc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQorICAgICAgICByZXR1cm4gYi5pc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpOworICAgIGlmIChiLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEFTU0VSVChhLmlz
U2V0KCkpOworICAgICAgICBBU1NFUlQoYi5pc1NldCgpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChhLmJ5dGVjb2RlSW5kZXggIT0gYi5ieXRlY29kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCghIWEuaW5saW5lQ2FsbEZyYW1lKSAhPSAo
ISFiLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBpZiAoIWEuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgICAgICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
Z2V0KCkgIT0gYi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUt
PmNhbGxlcjsKKyAgICAgICAgYiA9IGIuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQor
fQorCit1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2goKSBjb25zdAoreworICAg
IGlmICghaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDI7CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CisgICAgZm9yICg7Oykg
eworICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICAK
KyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpT
Q2VsbCo+OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgp
KTsKKyAgICAgICAgCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOworICAgIH0KK30KKworVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46
OmlubGluZVN0YWNrKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlu
bGluZURlcHRoKCkpOworICAgIHJlc3VsdC5sYXN0KCkgPSAqdGhpczsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHJlc3VsdC5zaXplKCkgLSAyOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJy
ZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVzdWx0W2luZGV4LS1dID0gY3VycmVudC0+Y2Fs
bGVyOworICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHRbMF0uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIENvZGVPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBpZiAoIWlzU2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8
bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8Q29kZU9y
aWdpbj4gc3RhY2sgPSBpbmxpbmVTdGFjaygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGFjay5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIG91dC5w
cmludCgiIC0tPiAiKTsKKyAgICAgICAgCisgICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGZy
YW1lID0gc3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBvdXQucHJpbnQo
ZnJhbWUtPmJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbigpLCAiOjwiLCBSYXdQb2ludGVyKGZyYW1l
LT5leGVjdXRhYmxlLmdldCgpKSwgIj4gIik7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmlzQ2xv
c3VyZUNhbGwpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIoY2xvc3VyZSkgIik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dC5wcmludCgiYmMjIiwgc3RhY2tbaV0uYnl0ZWNv
ZGVJbmRleCk7CisgICAgfQorfQorCit2b2lkIENvZGVPcmlnaW46OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqKSBjb25zdAoreworICAgIGR1bXAob3V0KTsKK30K
KworSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCgpIGNvbnN0Cit7
CisgICAgaWYgKGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgSW5saW5lQ2FsbEZyYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBhbnRpcGF0dGVy
biBmb3IgdHdvIHJlYXNvbnMuIFJlZmVyZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgREZHCisgICAg
Ly8gdGhhdCBhcmVuJ3QgaW4gdGhlIG9yaWdpbmFsIENvZGVCbG9jayBiZWluZyBjb21waWxlZCBz
aG91bGQgYmUgd2Vha2x5IHJlZmVyZW5jZWQuCisgICAgLy8gSW5saW5lIGNhbGwgZnJhbWVzIGFy
ZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrLCBzbyB0aGV5IHF1YWxpZnkgYXMgd2Vhay4g
QWxzbywKKyAgICAvLyB0aG9zZSB3ZWFrIHJlZmVyZW5jZXMgc2hvdWxkIGFscmVhZHkgYmUgdHJh
Y2tlZCBpbiB0aGUgREZHIGFzIHdlYWsgRnJvemVuVmFsdWVzLiBTbywKKyAgICAvLyB0aGVyZSBp
cyBwcm9iYWJseSBubyBuZWVkIGZvciB0aGlzLiBXZSBhbHJlYWR5IGhhdmUgYXNzZXJ0aW9ucyB0
aGF0IHRoaXMgc2hvdWxkIGJlCisgICAgLy8gdW5uZWNlc3NhcnkuIEZpbmFsbHksIGp1c3QgbWFy
a2luZyB0aGUgZXhlY3V0YWJsZSBhbmQgbm90IGFueXRoaW5nIGVsc2UgaW4gdGhlIGlubGluZQor
ICAgIC8vIGNhbGwgZnJhbWUgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnN1ZmZpY2llbnQgZm9yIHdo
YXQgdGhpcyBtZXRob2QgdGhvdWdodCBpdCB3YXMgZ29pbmcKKyAgICAvLyB0byBhY2NvbXBsaXNo
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MTMK
KyAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Cit9CisKK0pTRnVuY3Rpb24qIElubGlu
ZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sK
KyAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5yZWNvdmVyKGV4
ZWMpKTsKK30KKworQ29kZUJsb2NrSGFzaCBJbmxpbmVDYWxsRnJhbWU6Omhhc2goKSBjb25zdAor
eworICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZS5nZXQo
KSktPmNvZGVCbG9ja0ZvcigKKyAgICAgICAgc3BlY2lhbGl6YXRpb25LaW5kKCkpLT5oYXNoKCk7
Cit9CisKK0NTdHJpbmcgSW5saW5lQ2FsbEZyYW1lOjpoYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUuZ2V0KCkpLT5jb2RlQmxvY2tGb3IoCisgICAgICAgIHNwZWNpYWxpemF0aW9uS2luZCgpKS0+
aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpOworfQorCitDU3RyaW5nIElubGluZUNhbGxGcmFtZTo6
aW5mZXJyZWROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUuZ2V0KCkpLT5pbmZlcnJlZE5hbWUoKS51dGY4KCk7Cit9CisKK0Nv
ZGVCbG9jayogSW5saW5lQ2FsbEZyYW1lOjpiYXNlbGluZUNvZGVCbG9jaygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlLmdldCgpKS0+
YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworfQorCit2b2lkIElu
bGluZUNhbGxGcmFtZTo6ZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbihQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChpbmZlcnJlZE5hbWUoKSwgIiMiLCBoYXNoQXNT
dHJpbmdJZlBvc3NpYmxlKCkpOworfQorCit2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIsIFJhd1BvaW50ZXIo
ZXhlY3V0YWJsZS5nZXQoKSkpOworICAgIGlmIChleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSkK
KyAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7CisgICAgb3V0LnByaW50KCIsIGJj
IyIsIGNhbGxlci5ieXRlY29kZUluZGV4LCAiLCAiLCBraW5kKTsKKyAgICBpZiAoaXNDbG9zdXJl
Q2FsbCkKKyAgICAgICAgb3V0LnByaW50KCIsIGNsb3N1cmUgY2FsbCIpOworICAgIGVsc2UKKyAg
ICAgICAgb3V0LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgaW5Db250ZXh0KGNhbGxlZVJlY292
ZXJ5LmNvbnN0YW50KCksIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgbnVtQXJncyt0aGlz
ID0gIiwgYXJndW1lbnRzLnNpemUoKSk7CisgICAgb3V0LnByaW50KCIsIHN0YWNrT2Zmc2V0ID0g
Iiwgc3RhY2tPZmZzZXQpOworICAgIG91dC5wcmludCgiICgiLCB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbCgwKSwgIiBtYXBzIHRvICIsIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApICsgc3RhY2tP
ZmZzZXQsICIpPiIpOworfQorCit2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCkKK3sKKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDYWxsOgorICAg
ICAgICBvdXQucHJpbnQoIkNhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNhbGxW
YXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIkNhbGxWYXJhcmdzIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgorICAg
ICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3MiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmlu
dCgiR2V0dGVyQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNh
bGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKQEAgLTMzLDExNCAr
MzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5l
RGVwdGhGb3JDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCi17Ci0g
ICAgdW5zaWduZWQgcmVzdWx0ID0gMTsKLSAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVu
dCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNhbGxlci5p
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJlc3VsdCsrOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gaW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLX0KLQotYm9vbCBD
b2RlT3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVy
KSBjb25zdAotewotICAgIENvZGVPcmlnaW4gYSA9ICp0aGlzOwotICAgIENvZGVPcmlnaW4gYiA9
IG90aGVyOwotCi0gICAgaWYgKCFhLmlzU2V0KCkpCi0gICAgICAgIHJldHVybiAhYi5pc1NldCgp
OwotICAgIGlmICghYi5pc1NldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
aWYgKGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGIuaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICBpZiAoYi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICBB
U1NFUlQoYS5pc1NldCgpKTsKLSAgICAgICAgQVNTRVJUKGIuaXNTZXQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYS5ieXRlY29kZUluZGV4ICE9IGIuYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoISFhLmlubGluZUNhbGxG
cmFtZSkgIT0gKCEhYi5pbmxpbmVDYWxsRnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFhLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGEuaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpICE9IGIuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgYSA9IGEuaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAgICAgIGIgPSBiLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
OwotICAgIH0KLX0KLQotdW5zaWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKCkgY29u
c3QKLXsKLSAgICBpZiAoIWlzU2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gMTsKLSAgICAKLSAgICB1bnNp
Z25lZCByZXN1bHQgPSAyOwotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOwotICAg
IGZvciAoOzspIHsKLSAgICAgICAgcmVzdWx0ICs9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgCi0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ICs9IFdURjo6
UHRySGFzaDxKU0NlbGwqPjo6aGFzaChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZS5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICB9Ci19Ci0KLVZlY3RvcjxDb2RlT3JpZ2luPiBD
b2RlT3JpZ2luOjppbmxpbmVTdGFjaygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPENvZGVPcmlnaW4+
IHJlc3VsdChpbmxpbmVEZXB0aCgpKTsKLSAgICByZXN1bHQubGFzdCgpID0gKnRoaXM7Ci0gICAg
dW5zaWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKLSAgICBmb3IgKElubGluZUNhbGxG
cmFtZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJlc3VsdFtpbmRleC0tXSA9IGN1
cnJlbnQtPmNhbGxlcjsKLSAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0WzBdLmlubGluZUNhbGxG
cmFtZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1NldCgpKSB7Ci0gICAgICAgIG91
dC5wcmludCgiPG5vbmU+Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVj
dG9yPENvZGVPcmlnaW4+IHN0YWNrID0gaW5saW5lU3RhY2soKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkpCi0gICAgICAg
ICAgICBvdXQucHJpbnQoIiAtLT4gIik7Ci0gICAgICAgIAotICAgICAgICBpZiAoSW5saW5lQ2Fs
bEZyYW1lKiBmcmFtZSA9IHN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAg
b3V0LnByaW50KGZyYW1lLT5icmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9p
bnRlcihmcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSksICI+ICIpOwotICAgICAgICAgICAgaWYgKGZy
YW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiKGNsb3N1cmUp
ICIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnQoImJjIyIsIHN0YWNr
W2ldLmJ5dGVjb2RlSW5kZXgpOwotICAgIH0KLX0KLQotdm9pZCBDb2RlT3JpZ2luOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKLXsKLSAgICBkdW1w
KG91dCk7Ci19Ci0KIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQo
KSBjb25zdAogewogICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCShy
ZXZpc2lvbiAxODg1MzIpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmg6MTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlT3Jp
Z2luX2gKKyNkZWZpbmUgQ29kZU9yaWdpbl9oCisKKyNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgi
CisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIlZhbHVlUmVj
b3ZlcnkuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvQml0VmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IElubGluZUNhbGxGcmFtZTsKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CitjbGFzcyBKU0Z1bmN0aW9uOwor
CitzdHJ1Y3QgQ29kZU9yaWdpbiB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRC
eXRlY29kZUluZGV4ID0gVUlOVF9NQVg7CisgICAgCisgICAgLy8gQnl0ZWNvZGUgb2Zmc2V0IHRo
YXQgeW91J2QgdXNlIHRvIHJlLWV4ZWN1dGUgdGhpcyBpbnN0cnVjdGlvbiwgYW5kIHRoZQorICAg
IC8vIGJ5dGVjb2RlIGluZGV4IG9mIHRoZSBieXRlY29kZSBpbnN0cnVjdGlvbiB0aGF0IHByb2R1
Y2VzIHNvbWUgcmVzdWx0IHRoYXQKKyAgICAvLyB5b3UncmUgaW50ZXJlc3RlZCBpbiAodXNlZCBm
b3IgbWFwcGluZyBOb2RlcyB3aG9zZSB2YWx1ZXMgeW91J3JlIHVzaW5nCisgICAgLy8gdG8gYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgcHJvZmls
ZSkuCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKKyAgICAKKyAgICBDb2RlT3JpZ2luKCkKKyAgICAgICAgOiBi
eXRlY29kZUluZGV4KGludmFsaWRCeXRlY29kZUluZGV4KQorICAgICAgICAsIGlubGluZUNhbGxG
cmFtZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29kZU9yaWdpbihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChpbnZhbGlkQnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgLCBpbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQ29kZU9yaWdpbih1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDApCisgICAgICAgIDog
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGlubGluZUNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IGlu
dmFsaWRCeXRlY29kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gaW52YWxpZEJ5dGVjb2RlSW5kZXg7IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Ynl0ZWNvZGVJbmRleCA9PSBpbnZhbGlkQnl0ZWNvZGVJbmRleCAmJiAhIWlubGluZUNhbGxGcmFt
ZTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGlubGluZSBkZXB0aCBpcyB0aGUgZGVwdGggb2Yg
dGhlIGlubGluZSBzdGFjaywgc28gMSA9IG5vdCBpbmxpbmVkLAorICAgIC8vIDIgPSBpbmxpbmVk
IG9uZSBkZWVwLCBldGMuCisgICAgdW5zaWduZWQgaW5saW5lRGVwdGgoKSBjb25zdDsKKyAgICAK
KyAgICAvLyBJZiB0aGUgY29kZSBvcmlnaW4gY29ycmVzcG9uZHMgdG8gaW5saW5lZCBjb2RlLCBn
aXZlcyB5b3UgdGhlIGhlYXAgb2JqZWN0IHRoYXQKKyAgICAvLyB3b3VsZCBoYXZlIG93bmVkIHRo
ZSBjb2RlIGlmIGl0IGhhZCBub3QgYmVlbiBpbmxpbmVkLiBPdGhlcndpc2UgcmV0dXJucyAwLgor
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIGNvZGVPcmlnaW5Pd25lcigpIGNvbnN0OworICAgIAorICAg
IGludCBzdGFja09mZnNldCgpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBpbmxp
bmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90
aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgCisgICAgLy8gVGhpcyBj
aGVja3MgaWYgdGhlIHR3byBjb2RlIG9yaWdpbnMgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBzdGFj
ayB0cmFjZSBzbmlwcGV0cywKKyAgICAvLyBidXQgaWdub3JlIHdoZXRoZXIgdGhlIElubGluZUNh
bGxGcmFtZSdzIGFyZSBpZGVudGljYWwuCisgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRv
KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBhcHBy
b3hpbWF0ZUhhc2goKSBjb25zdDsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4g
VGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OworICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIElubGluZUNh
bGxGcmFtZSogZGVsZXRlZE1hcmtlcigpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PElubGluZUNhbGxGcmFtZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgIH0K
K307CisKK3N0cnVjdCBJbmxpbmVDYWxsRnJhbWUgeworICAgIGVudW0gS2luZCB7CisgICAgICAg
IENhbGwsCisgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgQ2FsbFZhcmFyZ3MsCisgICAgICAg
IENvbnN0cnVjdFZhcmFyZ3MsCisgICAgICAgIAorICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBz
dGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUg
cmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdldHRlckNhbGwsCisgICAgICAg
IFNldHRlckNhbGwKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBLaW5kIGtpbmRGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICByZXR1cm4gQ2FsbDsKKyAgICAg
ICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdDsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gQ2FsbDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEtpbmQgdmFyYXJnc0tpbmRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICByZXR1cm4gQ2Fs
bFZhcmFyZ3M7CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIHJl
dHVybiBDb25zdHJ1Y3RWYXJhcmdzOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDYWxsOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmRGb3IoS2luZCBr
aW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgQ2FsbDoK
KyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAg
ICAgICBjYXNlIFNldHRlckNhbGw6CisgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7Cisg
ICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgICAgICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKKyAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgYm9vbCBpc1ZhcmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
VmFyYXJncyhzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgfQorICAgIAorICAgIFZlY3Rv
cjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KKyAgICBXcml0
ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKKyAgICBWYWx1ZVJlY292ZXJ5
IGNhbGxlZVJlY292ZXJ5OworICAgIENvZGVPcmlnaW4gY2FsbGVyOworCisgICAgc2lnbmVkIHN0
YWNrT2Zmc2V0IDogMjg7CisgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBL
aW5kCisgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFsc2UgdGhlbiB3ZSBrbm93
IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBERkcgd29uJ3QgdHJlYXQg
dGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJlY292ZXJlZCBtYW51YWxs
eS4KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOyAvLyBPbmx5IHNl
dCB3aGVuIHdlIGlubGluZSBhIHZhcmFyZ3MgY2FsbC4KKyAgICAKKyAgICAvLyBUaGVyZSBpcyBy
ZWFsbHkgbm8gZ29vZCBub3Rpb24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVlcyBmb3IKKyAg
ICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBq
dXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKKyAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6
ZSBleHBsaWNpdGx5LgorICAgIElubGluZUNhbGxGcmFtZSgpCisgICAgICAgIDogc3RhY2tPZmZz
ZXQoMCkKKyAgICAgICAgLCBraW5kKENhbGwpCisgICAgICAgICwgaXNDbG9zdXJlQ2FsbChmYWxz
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lh
bGl6YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRp
Y19jYXN0PEtpbmQ+KGtpbmQpKTsgfQorCisgICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQo
KSBjb25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgCisg
ICAgLy8gR2V0IHRoZSBjYWxsZWUgZ2l2ZW4gYSBtYWNoaW5lIGNhbGwgZnJhbWUgdG8gd2hpY2gg
dGhpcyBJbmxpbmVDYWxsRnJhbWUgYmVsb25ncy4KKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWVGb3JD
YWxsRnJhbWUoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgCisgICAgQ1N0cmluZyBpbmZlcnJlZE5h
bWUoKSBjb25zdDsKKyAgICBDb2RlQmxvY2tIYXNoIGhhc2goKSBjb25zdDsKKyAgICBDU3RyaW5n
IGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSBjb25zdDsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRTdGFja09mZnNldChz
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgc3RhY2tPZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhY2tPZmZzZXQpID09IG9m
ZnNldCk7CisgICAgfQorCisgICAgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpOyB9CisgICAgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpOyB9CisKKyAgICB2b2lkIGR1bXBCcmllZkZ1bmN0aW9uSW5mb3JtYXRpb24o
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworCisgICAgTUFLRV9QUklOVF9NRVRIT0QoSW5saW5lQ2FsbEZyYW1lLCBkdW1wQnJpZWZGdW5j
dGlvbkluZm9ybWF0aW9uLCBicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24pOworfTsKKworaW5saW5l
IGludCBDb2RlT3JpZ2luOjpzdGFja09mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OworfQorCitpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aGFz
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYnl0
ZWNvZGVJbmRleCkgKworICAgICAgICBXVEY6OlB0ckhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Omhh
c2goaW5saW5lQ2FsbEZyYW1lKTsKK30KKworaW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0
b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gYnl0ZWNv
ZGVJbmRleCA9PSBvdGhlci5ieXRlY29kZUluZGV4CisgICAgICAgICYmIGlubGluZUNhbGxGcmFt
ZSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7Cit9CisgICAgCitpbmxpbmUgU2NyaXB0RXhlY3V0
YWJsZSogQ29kZU9yaWdpbjo6Y29kZU9yaWdpbk93bmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGlubGluZUNhbGxG
cmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKK30KKworc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJuIGtl
eS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBj
b25zdCBDb2RlT3JpZ2luJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitzdHJ1Y3Qg
Q29kZU9yaWdpbkFwcHJveGltYXRlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuYXBwcm94aW1hdGVIYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBjb25zdCBDb2RlT3JpZ2lu
JiBiKSB7IHJldHVybiBhLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oYik7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpLaW5kKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpDb2RlT3JpZ2luPiB7CisgICAgdHlwZWRlZiBKU0M6OkNvZGVPcmlnaW5IYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3Rl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpDb2RlT3JpZ2luPiA6IFNpbXBsZUNsYXNz
SGFzaFRyYWl0czxKU0M6OkNvZGVPcmlnaW4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0
eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIENvZGVPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDExICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDb2RlT3JpZ2lu
X2gKLSNkZWZpbmUgQ29kZU9yaWdpbl9oCisjaWZuZGVmIElubGluZUNhbGxGcmFtZV9oCisjZGVm
aW5lIElubGluZUNhbGxGcmFtZV9oCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2tIYXNoLmgiCi0jaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgor
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVk
ZSAiVmFsdWVSZWNvdmVyeS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUg
PHd0Zi9CaXRWZWN0b3IuaD4KQEAgLTQzLDc5ICs0NSw2IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIFNjcmlwdEV4ZWN1dGFibGU7CiBjbGFzcyBKU0Z1bmN0aW9uOwogCi1zdHJ1Y3QgQ29kZU9y
aWdpbiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludmFsaWRCeXRlY29kZUluZGV4ID0g
VUlOVF9NQVg7Ci0gICAgCi0gICAgLy8gQnl0ZWNvZGUgb2Zmc2V0IHRoYXQgeW91J2QgdXNlIHRv
IHJlLWV4ZWN1dGUgdGhpcyBpbnN0cnVjdGlvbiwgYW5kIHRoZQotICAgIC8vIGJ5dGVjb2RlIGlu
ZGV4IG9mIHRoZSBieXRlY29kZSBpbnN0cnVjdGlvbiB0aGF0IHByb2R1Y2VzIHNvbWUgcmVzdWx0
IHRoYXQKLSAgICAvLyB5b3UncmUgaW50ZXJlc3RlZCBpbiAodXNlZCBmb3IgbWFwcGluZyBOb2Rl
cyB3aG9zZSB2YWx1ZXMgeW91J3JlIHVzaW5nCi0gICAgLy8gdG8gYnl0ZWNvZGUgaW5zdHJ1Y3Rp
b25zIHRoYXQgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgcHJvZmlsZSkuCi0gICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleDsKLSAgICAKLSAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZTsKLSAgICAKLSAgICBDb2RlT3JpZ2luKCkKLSAgICAgICAgOiBieXRlY29kZUluZGV4KGlu
dmFsaWRCeXRlY29kZUluZGV4KQotICAgICAgICAsIGlubGluZUNhbGxGcmFtZSgwKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgQ29kZU9yaWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCi0gICAgICAgIDogYnl0ZWNvZGVJbmRleChpbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgLCBpbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgZXhwbGljaXQgQ29kZU9yaWdpbih1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IDApCi0gICAgICAgIDogYnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KQotICAgICAgICAsIGlubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA8IGludmFsaWRCeXRlY29kZUlu
ZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVj
b2RlSW5kZXggIT0gaW52YWxpZEJ5dGVjb2RlSW5kZXg7IH0KLSAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Ci0gICAgCi0gICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9
PSBpbnZhbGlkQnl0ZWNvZGVJbmRleCAmJiAhIWlubGluZUNhbGxGcmFtZTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gVGhlIGlubGluZSBkZXB0aCBpcyB0aGUgZGVwdGggb2YgdGhlIGlubGluZSBzdGFj
aywgc28gMSA9IG5vdCBpbmxpbmVkLAotICAgIC8vIDIgPSBpbmxpbmVkIG9uZSBkZWVwLCBldGMu
Ci0gICAgdW5zaWduZWQgaW5saW5lRGVwdGgoKSBjb25zdDsKLSAgICAKLSAgICAvLyBJZiB0aGUg
Y29kZSBvcmlnaW4gY29ycmVzcG9uZHMgdG8gaW5saW5lZCBjb2RlLCBnaXZlcyB5b3UgdGhlIGhl
YXAgb2JqZWN0IHRoYXQKLSAgICAvLyB3b3VsZCBoYXZlIG93bmVkIHRoZSBjb2RlIGlmIGl0IGhh
ZCBub3QgYmVlbiBpbmxpbmVkLiBPdGhlcndpc2UgcmV0dXJucyAwLgotICAgIFNjcmlwdEV4ZWN1
dGFibGUqIGNvZGVPcmlnaW5Pd25lcigpIGNvbnN0OwotICAgIAotICAgIGludCBzdGFja09mZnNl
dCgpIGNvbnN0OwotICAgIAotICAgIHN0YXRpYyB1bnNpZ25lZCBpbmxpbmVEZXB0aEZvckNhbGxG
cmFtZShJbmxpbmVDYWxsRnJhbWUqKTsKLSAgICAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0gICAgCi0gICAgLy8gVGhpcyBjaGVja3MgaWYgdGhlIHR3
byBjb2RlIG9yaWdpbnMgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBzdGFjayB0cmFjZSBzbmlwcGV0
cywKLSAgICAvLyBidXQgaWdub3JlIHdoZXRoZXIgdGhlIElubGluZUNhbGxGcmFtZSdzIGFyZSBp
ZGVudGljYWwuCi0gICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmln
aW4mIG90aGVyKSBjb25zdDsKLSAgICAKLSAgICB1bnNpZ25lZCBhcHByb3hpbWF0ZUhhc2goKSBj
b25zdDsKLSAgICAKLSAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBh
bmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgotICAgIFZlY3RvcjxDb2RlT3JpZ2lu
PiBpbmxpbmVTdGFjaygpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIElubGluZUNhbGxGcmFtZSogZGVsZXRl
ZE1hcmtlcigpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PElubGluZUNhbGxG
cmFtZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOwotICAgIH0KLX07Ci0KIHN0cnVjdCBJ
bmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCkBAIC0xNzks
MTAgKzEwOCw2IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIGJvb2wgaXNWYXJhcmdzKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBpc1ZhcmFyZ3Moc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOwot
ICAgIH0KICAgICAKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJndW1lbnRzOyAvLyBJbmNs
dWRlcyAndGhpcycuCiAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IGV4ZWN1dGFi
bGU7CkBAIC0yMDQsNiArMTI5LDExIEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBpc1ZhcmFyZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVmFyYXJncyhzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgfQorCiAgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQoKSBjb25zdCB7IHJldHVy
biBzcGVjaWFsaXphdGlvbktpbmRGb3Ioc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOyB9CiAKICAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNvbnN0OwpAQCAtMjMyLDY0ICsxNjIsMzAg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAogICAgIE1BS0VfUFJJTlRfTUVUSE9EKElu
bGluZUNhbGxGcmFtZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbiwgYnJpZWZGdW5jdGlv
bkluZm9ybWF0aW9uKTsKLX07CiAKLWlubGluZSBpbnQgQ29kZU9yaWdpbjo6c3RhY2tPZmZzZXQo
KSBjb25zdAotewotICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLX0KK307CiAK
LWlubGluZSB1bnNpZ25lZCBDb2RlT3JpZ2luOjpoYXNoKCkgY29uc3QKK2lubGluZSBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKQogewotICAgIHJldHVybiBXVEY6OkludEhhc2g8dW5zaWduZWQ+Ojpo
YXNoKGJ5dGVjb2RlSW5kZXgpICsKLSAgICAgICAgV1RGOjpQdHJIYXNoPElubGluZUNhbGxGcmFt
ZSo+OjpoYXNoKGlubGluZUNhbGxGcmFtZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gaW5saW5lQ2FsbEZy
YW1lLT5leGVjdXRhYmxlLmdldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWN1dGFibGUtPnN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5i
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPnNwZWNpYWxpemF0aW9uS2luZCgp
KTsKIH0KIAotaW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBDb2RlT3Jp
Z2luJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5i
eXRlY29kZUluZGV4Ci0gICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVD
YWxsRnJhbWU7Ci19Ci0gICAgCi1pbmxpbmUgU2NyaXB0RXhlY3V0YWJsZSogQ29kZU9yaWdpbjo6
Y29kZU9yaWdpbk93bmVyKCkgY29uc3QKK2lubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaykKIHsKLSAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+
ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrOwogfQog
Ci1zdHJ1Y3QgQ29kZU9yaWdpbkhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQotICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoIHsK
LSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsgcmV0dXJu
IGtleS5hcHByb3hpbWF0ZUhhc2goKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENv
ZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEuaXNBcHByb3hpbWF0
ZWx5RXF1YWxUbyhiKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OktpbmQpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkNvZGVPcmlnaW4+IHsKLSAg
ICB0eXBlZGVmIEpTQzo6Q29kZU9yaWdpbkhhc2ggSGFzaDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxK
U0M6OkNvZGVPcmlnaW4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6Q29kZU9yaWdpbj4g
ewotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLX07Ci0K
IH0gLy8gbmFtZXNwYWNlIFdURgogCi0jZW5kaWYgLy8gQ29kZU9yaWdpbl9oCi0KKyNlbmRpZiAv
LyBJbmxpbmVDYWxsRnJhbWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5jcHAJKHJldmlzaW9uIDE4ODUzMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKKworI2luY2x1ZGUgIklubGluZUNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4
ODUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgorI2luY2x1ZGUgIklubGlu
ZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJUcmFja2Vk
UmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIlZNLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMTg4NTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIklubGluZUNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxODg1MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiSW5saW5lQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg4NTMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShy
ZXZpc2lvbiAxODg1MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAko
cmV2aXNpb24gMTg4NTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJDYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDE4ODUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5jbHVkZSAiR1BSSW5m
by5oIgorI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW5TdGFjay5jcHAJKHJldmlzaW9uIDE4ODUzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIlByb2ZpbGVyT3JpZ2luU3RhY2suaCIKIAogI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9m
aWxlckRhdGFiYXNlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDE4ODUzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKIAogI2luY2x1ZGUg
IkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7Cg==
</data>
<flag name="review"
          id="284435"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>