<?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>196012</bug_id>
          
          <creation_ts>2019-03-20 10:15:40 -0700</creation_ts>
          <short_desc>Open source arm64e code.</short_desc>
          <delta_ts>2019-03-20 16:33:39 -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>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1518959</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-20 10:15:40 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518960</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-20 10:16:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/49066237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519022</commentid>
    <comment_count>2</comment_count>
      <attachid>365365</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-20 11:33:14 -0700</bug_when>
    <thetext>Created attachment 365365
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519026</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-20 11:37:33 -0700</bug_when>
    <thetext>Attachment 365365 did not pass style-queue:


ERROR: Source/WTF/wtf/PlatformRegisters.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WTF/wtf/PtrTag.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519060</commentid>
    <comment_count>4</comment_count>
      <attachid>365378</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-20 11:58:35 -0700</bug_when>
    <thetext>Created attachment 365378
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519066</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-20 12:03:25 -0700</bug_when>
    <thetext>Attachment 365378 did not pass style-queue:


ERROR: Source/WTF/wtf/PlatformRegisters.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WTF/wtf/PtrTag.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519067</commentid>
    <comment_count>6</comment_count>
      <attachid>365378</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-03-20 12:03:26 -0700</bug_when>
    <thetext>Comment on attachment 365378
proposed patch.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519296</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-20 16:33:39 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r243254: &lt;http://trac.webkit.org/r243254&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365365</attachid>
            <date>2019-03-20 11:33:14 -0700</date>
            <delta_ts>2019-03-20 11:58:35 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-196012.patch</filename>
            <type>text/plain</type>
            <size>88492</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzMjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxOS0wMy0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
T3BlbiBzb3VyY2UgYXJtNjRlIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTYwMTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ5MDY2MjM3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmVuY29kZUdyb3VwMSk6CisgICAgICAgIChKU0M6
OkFSTTY0RUFzc2VtYmxlcjo6ZW5jb2RlR3JvdXAyKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNz
ZW1ibGVyOjplbmNvZGVHcm91cDQpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnBh
Y2lhMTcxNik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6cGFjaWIxNzE2KToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRpYTE3MTYpOgorICAgICAgICAoSlNDOjpB
Uk02NEVBc3NlbWJsZXI6OmF1dGliMTcxNik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxl
cjo6cGFjaWF6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYXNwKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYnopOgorICAgICAgICAoSlNDOjpBUk02
NEVBc3NlbWJsZXI6OnBhY2lic3ApOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmF1
dGlheik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWFzcCk6CisgICAgICAg
IChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWJ6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNz
ZW1ibGVyOjphdXRpYnNwKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjp4cGFjbHJp
KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYSk6CisgICAgICAgIChKU0M6
OkFSTTY0RUFzc2VtYmxlcjo6cGFjaWIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6
OnBhY2RhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNkYik6CisgICAgICAg
IChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWEpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3Nl
bWJsZXI6OmF1dGliKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRkYSk6Cisg
ICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0ZGIpOgorICAgICAgICAoSlNDOjpBUk02
NEVBc3NlbWJsZXI6OnBhY2l6YSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6cGFj
aXpiKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNkemEpOgorICAgICAgICAo
SlNDOjpBUk02NEVBc3NlbWJsZXI6OnBhY2R6Yik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2Vt
Ymxlcjo6YXV0aXphKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRpemIpOgor
ICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmF1dGR6YSk6CisgICAgICAgIChKU0M6OkFS
TTY0RUFzc2VtYmxlcjo6YXV0ZHpiKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjp4
cGFjaSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6eHBhY2QpOgorICAgICAgICAo
SlNDOjpBUk02NEVBc3NlbWJsZXI6OnBhY2dhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1i
bGVyOjpicmFhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpicmFiKToKKyAgICAg
ICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpibHJhYSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFz
c2VtYmxlcjo6YmxyYWIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmJyYWF6KToK
KyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpicmFieik6CisgICAgICAgIChKU0M6OkFS
TTY0RUFzc2VtYmxlcjo6YmxyYWF6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpi
bHJhYnopOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnJldGFhKToKKyAgICAgICAg
KEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpyZXRhYik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2Vt
Ymxlcjo6ZXJldGFhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjplcmV0YWIpOgor
ICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QVJNNjRFQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAgICAgIChKU0M6OkFSTTY0
RUFzc2VtYmxlcjo6c2V0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpyZXQpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3BwOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnRhZ1JldHVybkFkZHJlc3MpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnRhZ1B0cik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ1B0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjRFOjpyZW1vdmVQdHJUYWcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTY0RTo6Y2FsbFRydXN0ZWRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjpjYWxsUmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6anVtcCk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENh
bGxGcmFtZXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAqIGZ0
bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpT
Qzo6Q0NhbGxIZWxwZXJzOjpwcmVwYXJlRm9yVGFpbENhbGxTbG93KToKKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
cHJlcGFyZUZvclRhaWxDYWxsKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdl
bmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmg6CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDUHRyVGFnLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OnRhZ0ZvclB0cik6CisgICAgICAgIChKU0M6OnB0clRhZ05h
bWUpOgorICAgICAgICAoSlNDOjppbml0aWFsaXplUHRyVGFnTG9va3VwKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQ1B0clRhZy5oOgorICAgICAgICAoSlNDOjppbml0aWFsaXplUHRyVGFnTG9va3Vw
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKToKKwogMjAxOS0wMy0yMCAgRGV2aW4gUm91c3NvICA8ZHJvdXNz
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU2VhcmNoOiBhbGxvdyBET00g
c2VhcmNoZXMgdG8gYmUgY2FzZSBzZW5zaXRpdmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODAyLDYgKzgwMiw3IEBAIHJ1bnRpbWUvSlNBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLmNwcAogcnVudGltZS9KU0JpZ0ludC5jcHAKIHJ1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcAogcnVudGltZS9KU0NKU1ZhbHVlLmNwcAorcnVudGltZS9KU0NQdHJUYWcu
Y3BwCiBydW50aW1lL0pTQ2FsbGVlLmNwcAogcnVudGltZS9KU0NlbGwuY3BwCiBydW50aW1lL0pT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4
MDgsNiArMTgwOCw4IEBACiAJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQkQw
MjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi87IH07CiAJCUZFMUJEMDI1MUU3
MjA1MzgwMDEzNEJDOSAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUJEMDIzMUU3MjA1MkYwMDEzNEJDOSAvKiBIZWFwVmVy
aWZpZXIuaCAqLzsgfTsKIAkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkMx
QjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNy
b0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRF
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUx
RTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5
IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5p
bXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpv
bmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFz
aEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODE2LDYgKzQ4
MTgsOSBAQAogCQlGRTFCRDAyMzFFNzIwNTJGMDAxMzRCQzkgLyogSGVhcFZlcmlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMUUyQzNDMjI0MEMxRUYwMEY2Qjcy
OSAvKiBKU0NQdHJUYWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDUHRyVGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxRTJDM0QyMjQw
RDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBUk02NEVBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBM
TEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50
Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50
L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02ODY3LDYgKzY4NzIsNyBAQAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NK
U1ZhbHVlLmNwcCAqLywKIAkJCQkxNEFCQjM2RTA5OUMwNzY0MDBFMkEyNEYgLyogSlNDSlNWYWx1
ZS5oICovLAogCQkJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5l
cy5oICovLAorCQkJCUZFMUUyQzNDMjI0MEMxRUYwMEY2QjcyOSAvKiBKU0NQdHJUYWcuY3BwICov
LAogCQkJCUZFNzQ5N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCAqLywKIAkJCQk3
MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaCAqLywKQEAgLTc3MDMsNiArNzcwOSw3IEBACiAJCQkJMEYzNzMwOTAxQzBD
RDcwQzAwMDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oICovLAogCQkJ
CUFENDEyQjM1MUU3QjU3QzAwMDhBRjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2VJZi5oICovLAogCQkJCTg2NDA5MjNCMTU2RUVEM0IwMDU2NkNCMiAvKiBBUk02NEFzc2VtYmxl
ci5oICovLAorCQkJCUZFMUUyQzNEMjI0MEQyRjYwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIu
aCAqLywKIAkJCQk4NkFERDE0MzBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCAq
LywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8s
CiAJCQkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25z
dGFudFBvb2wuaCAqLywKQEAgLTc3MTYsNiArNzcyMyw3IEBACiAJCQkJODZDMzZFRTkwRUUxMjg5
RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi8sCiAJCQkJRkVCMTM3NTYxQkIxMUVFRTAw
Q0Q1MTAwIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuY3BwICovLAogCQkJCTg2NDA5MjNDMTU2RUVE
M0IwMDU2NkNCMiAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggKi8sCisJCQkJRkUxRTJDM0UyMjQw
RDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8sCiAJCQkJQTcyOTAwOUIx
Nzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuY3BwICovLAogCQkJCTg2QURE
MTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggKi8sCiAJCQkJMEY2
REI3RUIxRDYxN0QwRjAwQ0RCRjhFIC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAgKi8sCkBA
IC04NTE0LDYgKzg1MjIsNyBAQAogCQkJCTBGMkM2M0IwMUU2MEFFNDMwMEMxMzgzOSAvKiBCM0Jh
bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTFFMkMzRjIyNDBE
RDU4MDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtODU5Myw2ICs4NjAyLDcgQEAKIAkJCQkw
RkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NTcwNDExQkU1ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5nU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDRkRGQkRBMUQxRjVEOUUwMEZFM0Q3MiAvKiBCM1R5cGVN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0RUFzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpICYmIENQVShBUk02NEUpCisKKyNpbmNsdWRlICJBUk02NEFzc2VtYmxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQVJNNjRFQXNzZW1ibGVyIDogcHVibGljIEFSTTY0QXNzZW1i
bGVyIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW51c2Vk
SUQgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigwYjExMTExKTsKKworICAgIC8vIEdyb3VwIDEg
aW5zdHJ1Y3Rpb25zIGZyb20gc2VjdGlvbiAzLjIuMy4xLjEuCisgICAgZW51bSBjbGFzcyBHcm91
cDFPcCB7CisgICAgICAgIFBBQ0lBMTcxNiA9IDBiMDAwMSA8PCA4IHwgMGIwMDAgPDwgNSwKKyAg
ICAgICAgUEFDSUIxNzE2ID0gMGIwMDAxIDw8IDggfCAwYjAxMCA8PCA1LAorICAgICAgICBBVVRJ
QTE3MTYgPSAwYjAwMDEgPDwgOCB8IDBiMTAwIDw8IDUsCisgICAgICAgIEFVVElCMTcxNiA9IDBi
MDAwMSA8PCA4IHwgMGIxMTAgPDwgNSwKKyAgICAgICAgUEFDSUFaICAgID0gMGIwMDExIDw8IDgg
fCAwYjAwMCA8PCA1LAorICAgICAgICBQQUNJQVNQICAgPSAwYjAwMTEgPDwgOCB8IDBiMDAxIDw8
IDUsCisgICAgICAgIFBBQ0lCWiAgICA9IDBiMDAxMSA8PCA4IHwgMGIwMTAgPDwgNSwKKyAgICAg
ICAgUEFDSUJTUCAgID0gMGIwMDExIDw8IDggfCAwYjAxMSA8PCA1LAorICAgICAgICBBVVRJQVog
ICAgPSAwYjAwMTEgPDwgOCB8IDBiMTAwIDw8IDUsCisgICAgICAgIEFVVElBU1AgICA9IDBiMDAx
MSA8PCA4IHwgMGIxMDEgPDwgNSwKKyAgICAgICAgQVVUSUJaICAgID0gMGIwMDExIDw8IDggfCAw
YjExMCA8PCA1LAorICAgICAgICBBVVRJQlNQICAgPSAwYjAwMTEgPDwgOCB8IDBiMTExIDw8IDUs
CisgICAgICAgIFhQQUNMUkkgICA9IDBiMDAwMCA8PCA4IHwgMGIxMTEgPDwgNSwKKyAgICB9Owor
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgaW50IGVuY29kZUdyb3VwMShHcm91cDFPcCBvcCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9wKSB8IDBiMTEwMSA8PCAy
OCB8IDBiMDEwMSA8PCAyNCB8IDBiMDExIDw8IDE2IHwgMGIwMDEwIDw8IDEyIHwgMGIxMTExMTsK
KyAgICB9CisKKyAgICAvLyBHcm91cCAyIGluc3RydWN0aW9ucyBmcm9tIHNlY3Rpb24gMy4yLjMu
MS4xLgorICAgIGVudW0gY2xhc3MgR3JvdXAyT3AgeworICAgICAgICBQQUNJQSAgPSAxIDw8IDMw
IHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAwMDAgPDwgMTAsCisgICAgICAgIFBBQ0lCICA9IDEgPDwg
MzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDAwMSA8PCAxMCwKKyAgICAgICAgUEFDREEgID0gMSA8
PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAwMDEwIDw8IDEwLAorICAgICAgICBQQUNEQiAgPSAx
IDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAwMTEgPDwgMTAsCisgICAgICAgIEFVVElBICA9
IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDEwMCA8PCAxMCwKKyAgICAgICAgQVVUSUIg
ID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAwMTAxIDw8IDEwLAorICAgICAgICBBVVRE
QSAgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAxMTAgPDwgMTAsCisgICAgICAgIEFV
VERCICA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDExMSA8PCAxMCwKKyAgICAgICAg
UEFDSVpBID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMDAwIDw8IDEwLAorICAgICAg
ICBQQUNJWkIgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDEwMDEgPDwgMTAsCisgICAg
ICAgIFBBQ0RaQSA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMTAxMCA8PCAxMCwKKyAg
ICAgICAgUEFDRFpCID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMDExIDw8IDEwLAor
ICAgICAgICBBVVRJWkEgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDExMDAgPDwgMTAs
CisgICAgICAgIEFVVElaQiA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMTEwMSA8PCAx
MCwKKyAgICAgICAgQVVURFpBID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMTEwIDw8
IDEwLAorICAgICAgICBBVVREWkIgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDExMTEg
PDwgMTAsCisgICAgICAgIFhQQUNJICA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIxMDAw
MCA8PCAxMCwKKyAgICAgICAgWFBBQ0QgID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjEw
MDAxIDw8IDEwLAorCisgICAgICAgIFBBQ0dBICA9IDAgPDwgMzAgfCAwYjAxMTAwLAorICAgIH07
CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBpbnQgZW5jb2RlR3JvdXAyKEdyb3VwMk9wIG9w
LCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJtKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChybiAmIDBiMTExMTEpID09IHJuKTsKKyAgICAgICAgQVNTRVJUKChyZCAm
IDBiMTExMTEpID09IHJkKTsKKyAgICAgICAgQVNTRVJUKChybSAmIDBiMTExMTEpID09IHJtKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ob3ApIHwgMSA8PCAzMSB8IDBiMTEwMTAx
MTAgPDwgMjEgfCBybSA8PCAxNiB8IHJuIDw8IDUgfCByZDsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBpbnQgZW5jb2RlR3JvdXAyKEdyb3VwMk9wIG9wLCBSZWdpc3RlcklEIHJu
LCBSZWdpc3RlcklEIHJkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdyb3VwMihvcCwg
cm4sIHJkLCBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigwKSk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgaW50IGVuY29kZUdyb3VwMihHcm91cDJPcCBvcCwgUmVnaXN0ZXJJRCBy
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHcm91cDIob3AsIHVudXNlZElELCByZCk7
CisgICAgfQorCisgICAgLy8gR3JvdXAgNCBpbnN0cnVjdGlvbnMgZnJvbSBzZWN0aW9uIDMuMi4z
LjIuMS4KKyAgICBlbnVtIGNsYXNzIEdyb3VwNE9wIHsKKyAgICAgICAgQlJBQSAgID0gMGIxMDAw
IDw8IDIxIHwgMCA8PCAxMCwKKyAgICAgICAgQlJBQiAgID0gMGIxMDAwIDw8IDIxIHwgMSA8PCAx
MCwKKyAgICAgICAgQkxSQUEgID0gMGIxMDAxIDw8IDIxIHwgMCA8PCAxMCwKKyAgICAgICAgQkxS
QUIgID0gMGIxMDAxIDw8IDIxIHwgMSA8PCAxMCwKKworICAgICAgICBCUkFBWiAgPSAwYjAwMDAg
PDwgMjEgfCAwIDw8IDEwLAorICAgICAgICBCUkFCWiAgPSAwYjAwMDAgPDwgMjEgfCAxIDw8IDEw
LAorICAgICAgICBCTFJBQVogPSAwYjAwMDEgPDwgMjEgfCAwIDw8IDEwLAorICAgICAgICBCTFJB
QlogPSAwYjAwMDEgPDwgMjEgfCAxIDw8IDEwLAorICAgICAgICBSRVRBQSAgPSAwYjAwMTAgPDwg
MjEgfCAwIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBSRVRBQiAgPSAwYjAwMTAgPDwg
MjEgfCAxIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBFUkVUQUEgPSAwYjAxMDAgPDwg
MjEgfCAwIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBFUkVUQUIgPSAwYjAxMDAgPDwg
MjEgfCAxIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgIH07CisKKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBpbnQgZW5jb2RlR3JvdXA0KEdyb3VwNE9wIG9wLCBSZWdpc3RlcklEIHJuID0gdW51
c2VkSUQsIFJlZ2lzdGVySUQgcm0gPSB1bnVzZWRJRCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
cm4gJiAwYjExMTExKSA9PSBybik7CisgICAgICAgIEFTU0VSVCgocm0gJiAwYjExMTExKSA9PSBy
bSk7CisgICAgICAgIHJldHVybiAoMGIxMTAxMDExIDw8IDI1IHwgc3RhdGljX2Nhc3Q8aW50Pihv
cCkgfCAwYjExMTExIDw8IDE2IHwgMGIwMDAwMSA8PCAxMSB8IHJuIDw8IDUgfCBybSk7CisgICAg
fQorCitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhMTcxNigpIHsgaW5zbihl
bmNvZGVHcm91cDEoR3JvdXAxT3A6OlBBQ0lBMTcxNikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHBhY2liMTcxNigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OlBBQ0lCMTcxNikp
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGlhMTcxNigpIHsgaW5zbihlbmNvZGVHcm91
cDEoR3JvdXAxT3A6OkFVVElBMTcxNikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGli
MTcxNigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OkFVVElCMTcxNikpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHBhY2lheigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OlBBQ0lBWikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhc3AoKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpQQUNJQVNQKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjaWJ6KCkgeyBpbnNuKGVuY29kZUdyb3VwMShHcm91cDFPcDo6UEFDSUJaKSk7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjaWJzcCgpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OlBBQ0lCU1ApKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpYXooKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpBVVRJQVopKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
dXRpYXNwKCkgeyBpbnNuKGVuY29kZUdyb3VwMShHcm91cDFPcDo6QVVUSUFTUCkpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIGF1dGlieigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OkFVVElCWikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGlic3AoKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpBVVRJQlNQKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
eHBhY2xyaSgpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OlhQQUNMUkkpKTsgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4p
CisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDSUEsIHJuLCBy
ZCkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYWNpYihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJuKQorICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAy
T3A6OlBBQ0lCLCBybiwgcmQpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
ZGEoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIGluc24oZW5j
b2RlR3JvdXAyKEdyb3VwMk9wOjpQQUNEQSwgcm4sIHJkKSk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHBhY2RiKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4pCisgICAgewor
ICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDREIsIHJuLCByZCkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpYShSZWdpc3RlcklEIHJkLCBSZWdpc3Rl
cklEIHJuKQorICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVElB
LCBybiwgcmQpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXV0aWIoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAy
KEdyb3VwMk9wOjpBVVRJQiwgcm4sIHJkKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGF1dGRhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4pCisgICAgeworICAgICAgICBp
bnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6QVVUREEsIHJuLCByZCkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhdXRkYihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuKQor
ICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVERCLCBybiwgcmQp
KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjaXphKFJlZ2lzdGVySUQgcmQp
CisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDSVpBLCByZCkp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYWNpemIoUmVnaXN0ZXJJRCByZCkK
KyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpQQUNJWkIsIHJkKSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2R6YShSZWdpc3RlcklEIHJkKQor
ICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OlBBQ0RaQSwgcmQpKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjZHpiKFJlZ2lzdGVySUQgcmQpCisg
ICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDRFpCLCByZCkpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpemEoUmVnaXN0ZXJJRCByZCkKKyAg
ICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpBVVRJWkEsIHJkKSk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGl6YihSZWdpc3RlcklEIHJkKQorICAg
IHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVElaQiwgcmQpKTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXV0ZHphKFJlZ2lzdGVySUQgcmQpCisgICAg
eworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6QVVURFpBLCByZCkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRkemIoUmVnaXN0ZXJJRCByZCkKKyAgICB7
CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpBVVREWkIsIHJkKSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHhwYWNpKFJlZ2lzdGVySUQgcmQpCisgICAgewor
ICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6WFBBQ0ksIHJkKSk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHhwYWNkKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAg
ICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6WFBBQ0QsIHJkKSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2dhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4s
IFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJP
cDo6UEFDR0EsIHJuLCByZCwgcm0pKTsKKyAgICB9CisKKyAgICAvLyBHcm91cCA0IGluc3RydWN0
aW9ucyBmcm9tIHNlY3Rpb24gMy4yLjMuMi4xLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBicmFh
KFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBkaXZlcnNpdHkpCisgICAgeworICAgICAgICBp
bnNuKGVuY29kZUdyb3VwNChHcm91cDRPcDo6QlJBQSwgZGVzdCwgZGl2ZXJzaXR5KSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGJyYWIoUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3Rl
cklEIGRpdmVyc2l0eSkKKyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9w
OjpCUkFCLCBkZXN0LCBkaXZlcnNpdHkpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYmxyYWEoUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIGRpdmVyc2l0eSkKKyAgICB7Cisg
ICAgICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQSwgZGVzdCwgZGl2ZXJzaXR5
KSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscmFiKFJlZ2lzdGVySUQgZGVz
dCwgUmVnaXN0ZXJJRCBkaXZlcnNpdHkpCisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3Vw
NChHcm91cDRPcDo6QkxSQUIsIGRlc3QsIGRpdmVyc2l0eSkpOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBicmFheihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpbnNu
KGVuY29kZUdyb3VwNChHcm91cDRPcDo6QkxSQUFaLCBkZXN0KSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGJyYWJ6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlu
c24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQlosIGRlc3QpKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYmxyYWF6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQVosIGRlc3QpKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyYWJ6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQlosIGRlc3QpKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV0YWEoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3Vw
NE9wOjpSRVRBQSkpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJldGFiKCkgeyBpbnNuKGVu
Y29kZUdyb3VwNChHcm91cDRPcDo6UkVUQUIpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBl
cmV0YWEoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpFUkVUQUEpKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBlcmV0YWIoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpF
UkVUQUIpKTsgfQorCisgICAgLy8gT3ZlcmxvYWQgb2YgdGhlIEFSTTY0IGVxdWl2YWxlbnRzLgor
CisgICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBjYWxsIG91ciBvdmVybG9hZGVkIGxp
bmtQb2ludGVyIGJlbG93LgorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUs
IEFzc2VtYmxlckxhYmVsIHdoZXJlLCB2b2lkKiB2YWx1ZVB0cikKKyAgICB7CisgICAgICAgIGxp
bmtQb2ludGVyKGFkZHJlc3NPZihjb2RlLCB3aGVyZSksIHZhbHVlUHRyKTsKKyAgICB9CisKKyAg
ICAvLyBOZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFkZCB0aGUgYXNzZXJ0IGZvciBhZGRyZXNz
WzNdLCBhbmQgYmVjYXVzZSB3ZSBuZWVkIHRvCisgICAgLy8gY2FsbCBvdXIgb3duIHZlcnNpb24g
b2Ygc2V0UG9pbnRlcigpIGJlbG93LgorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKGludCog
YWRkcmVzcywgdm9pZCogdmFsdWVQdHIsIGJvb2wgZmx1c2ggPSBmYWxzZSkKKyAgICB7CisgICAg
ICAgIERhdGFzaXplIHNmOworICAgICAgICBNb3ZlV2lkZU9wIG9wYzsKKyAgICAgICAgaW50IGh3
OworICAgICAgICB1aW50MTZfdCBpbW0xNjsKKyAgICAgICAgUmVnaXN0ZXJJRCByZDsKKyAgICAg
ICAgYm9vbCBleHBlY3RlZCA9IGRpc2Fzc2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShhZGRyZXNzLCBz
Ziwgb3BjLCBodywgaW1tMTYsIHJkKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChleHBlY3RlZCwg
ZXhwZWN0ZWQgJiYgc2YgJiYgb3BjID09IE1vdmVXaWRlT3BfWiAmJiAhaHcpOworICAgICAgICBB
U1NFUlQoY2hlY2tNb3ZrPERhdGFzaXplXzY0PihhZGRyZXNzWzFdLCAxLCByZCkpOworICAgICAg
ICBBU1NFUlQoY2hlY2tNb3ZrPERhdGFzaXplXzY0PihhZGRyZXNzWzJdLCAyLCByZCkpOworICAg
ICAgICBpZiAoTlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5TVFJVQ1RJT05TID4gMykKKyAg
ICAgICAgICAgIEFTU0VSVChjaGVja01vdms8RGF0YXNpemVfNjQ+KGFkZHJlc3NbM10sIDMsIHJk
KSk7CisKKyAgICAgICAgc2V0UG9pbnRlcihhZGRyZXNzLCB2YWx1ZVB0ciwgcmQsIGZsdXNoKTsK
KyAgICB9CisKKyAgICAvLyBOZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGNhbGwgb3VyIG92ZXJs
b2FkZWQgbGlua1BvaW50ZXIgYWJvdmUuCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIo
dm9pZCogd2hlcmUsIHZvaWQqIHZhbHVlUHRyKQorICAgIHsKKyAgICAgICAgbGlua1BvaW50ZXIo
c3RhdGljX2Nhc3Q8aW50Kj4od2hlcmUpLCB2YWx1ZVB0ciwgdHJ1ZSk7CisgICAgfQorCisgICAg
Ly8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXQgYnVmZmVyWzNdOiBzaWduZWQgcG9pbnRl
cnMgdGFrZSB1cCBtb3JlIHRoYW4gNDggYml0cy4KKyAgICBzdGF0aWMgdm9pZCBzZXRQb2ludGVy
KGludCogYWRkcmVzcywgdm9pZCogdmFsdWVQdHIsIFJlZ2lzdGVySUQgcmQsIGJvb2wgZmx1c2gp
CisgICAgeworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odmFsdWVQdHIpOworICAgICAgICBpbnQgYnVmZmVyWzRdOworICAgICAgICBidWZmZXJb
MF0gPSBtb3ZlV2lkZUltZWRpYXRlKERhdGFzaXplXzY0LCBNb3ZlV2lkZU9wX1osIDAsIGdldEhh
bGZ3b3JkKHZhbHVlLCAwKSwgcmQpOworICAgICAgICBidWZmZXJbMV0gPSBtb3ZlV2lkZUltZWRp
YXRlKERhdGFzaXplXzY0LCBNb3ZlV2lkZU9wX0ssIDEsIGdldEhhbGZ3b3JkKHZhbHVlLCAxKSwg
cmQpOworICAgICAgICBidWZmZXJbMl0gPSBtb3ZlV2lkZUltZWRpYXRlKERhdGFzaXplXzY0LCBN
b3ZlV2lkZU9wX0ssIDIsIGdldEhhbGZ3b3JkKHZhbHVlLCAyKSwgcmQpOworICAgICAgICBpZiAo
TlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5TVFJVQ1RJT05TID4gMykKKyAgICAgICAgICAg
IGJ1ZmZlclszXSA9IG1vdmVXaWRlSW1lZGlhdGUoRGF0YXNpemVfNjQsIE1vdmVXaWRlT3BfSywg
MywgZ2V0SGFsZndvcmQodmFsdWUsIDMpLCByZCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJv
dW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNzKSA9PSBhZGRyZXNzKTsK
KyAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIsIHNpemVvZihpbnQpICog
NCk7CisKKyAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICAgICAgY2FjaGVGbHVzaChhZGRyZXNz
LCBzaXplb2YoaW50KSAqIDQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiByZWFkUG9pbnRl
cih2b2lkKiB3aGVyZSkKKyAgICB7CisgICAgICAgIGludCogYWRkcmVzcyA9IHN0YXRpY19jYXN0
PGludCo+KHdoZXJlKTsKKworICAgICAgICBEYXRhc2l6ZSBzZjsKKyAgICAgICAgTW92ZVdpZGVP
cCBvcGM7CisgICAgICAgIGludCBodzsKKyAgICAgICAgdWludDE2X3QgaW1tMTY7CisgICAgICAg
IFJlZ2lzdGVySUQgcmRGaXJzdCwgcmQ7CisKKyAgICAgICAgYm9vbCBleHBlY3RlZCA9IGRpc2Fz
c2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShhZGRyZXNzLCBzZiwgb3BjLCBodywgaW1tMTYsIHJkRmly
c3QpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cGVjdGVkLCBleHBlY3RlZCAmJiBzZiAmJiBv
cGMgPT0gTW92ZVdpZGVPcF9aICYmICFodyk7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBp
bW0xNjsKKworICAgICAgICBleHBlY3RlZCA9IGRpc2Fzc2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShh
ZGRyZXNzICsgMSwgc2YsIG9wYywgaHcsIGltbTE2LCByZCk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoZXhwZWN0ZWQsIGV4cGVjdGVkICYmIHNmICYmIG9wYyA9PSBNb3ZlV2lkZU9wX0sgJiYgaHcg
PT0gMSAmJiByZCA9PSByZEZpcnN0KTsKKyAgICAgICAgcmVzdWx0IHw9IHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oaW1tMTYpIDw8IDE2OworCisgICAgICAgIGV4cGVjdGVkID0gZGlzYXNzZW1ibGVN
b3ZlV2lkZUltZWRpYXRlKGFkZHJlc3MgKyAyLCBzZiwgb3BjLCBodywgaW1tMTYsIHJkKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChleHBlY3RlZCwgZXhwZWN0ZWQgJiYgc2YgJiYgb3BjID09IE1v
dmVXaWRlT3BfSyAmJiBodyA9PSAyICYmIHJkID09IHJkRmlyc3QpOworICAgICAgICByZXN1bHQg
fD0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbW0xNikgPDwgMzI7CisKKyAgICAgICAgaWYgKE5V
TUJFUl9PRl9BRERSRVNTX0VOQ09ESU5HX0lOU1RSVUNUSU9OUyA+IDMpIHsKKyAgICAgICAgICAg
IGV4cGVjdGVkID0gZGlzYXNzZW1ibGVNb3ZlV2lkZUltZWRpYXRlKGFkZHJlc3MgKyAzLCBzZiwg
b3BjLCBodywgaW1tMTYsIHJkKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwZWN0ZWQs
IGV4cGVjdGVkICYmIHNmICYmIG9wYyA9PSBNb3ZlV2lkZU9wX0sgJiYgaHcgPT0gMyAmJiByZCA9
PSByZEZpcnN0KTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGltbTE2KSA8PCA0ODsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZXN1bHQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiByZWFkQ2FsbFRh
cmdldCh2b2lkKiBmcm9tKQorICAgIHsKKyAgICAgICAgY29uc3RleHByIHB0cmRpZmZfdCBjYWxs
SW5zdHJ1Y3Rpb24gPSAxOworICAgICAgICByZXR1cm4gcmVhZFBvaW50ZXIocmVpbnRlcnByZXRf
Y2FzdDxpbnQqPihmcm9tKSAtIGNhbGxJbnN0cnVjdGlvbiAtIE5VTUJFUl9PRl9BRERSRVNTX0VO
Q09ESU5HX0lOU1RSVUNUSU9OUyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJl
dCgpIHsgcmV0YWIoKTsgfQorCisgICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBjYWxs
IG91ciBvdmVybG9hZGVkIHJldCgpIGFib3ZlLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXQo
UmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJuID09IEFSTTY0
UmVnaXN0ZXJzOjpscik7CisgICAgICAgIHJldCgpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgcHRyZGlmZl90IE1BWF9QT0lOVEVSX0JJVFMgPSA2NDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHB0cmRpZmZfdCBCSVRTX0VOQ09ERUFCTEVfUEVSX0lOU1RSVUNUSU9OID0gMTY7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgTlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5T
VFJVQ1RJT05TID0gTUFYX1BPSU5URVJfQklUUyAvIEJJVFNfRU5DT0RFQUJMRV9QRVJfSU5TVFJV
Q1RJT047Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpICYmIENQVShBUk02NEUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMCArMzMsNiBAQAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspICYmIF9faGFzX2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlclN1cHBv
cnQuaD4pCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL01hY3JvQXNzZW1ibGVyU3VwcG9ydC5o
PgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJBUk12Ny5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJB
Uk12NyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKLSNlbGlmIENQVShBUk02NEUpICYmIF9faGFz
X2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oPikKKyNlbGlm
IENQVShBUk02NEUpCiAjZGVmaW5lIFRBUkdFVF9BU1NFTUJMRVIgQVJNNjRFQXNzZW1ibGVyCiAj
ZGVmaW5lIFRBUkdFVF9NQUNST0FTU0VNQkxFUiBNYWNyb0Fzc2VtYmxlckFSTTY0RQotI2luY2x1
ZGUgPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oPgorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQVJNNjRFLmgiCiAKICNlbGlmIENQVShBUk02NCkKICNkZWZpbmUgVEFSR0VU
X0FTU0VNQkxFUiBBUk02NEFzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3BwCShyZXZpc2lvbiAy
NDMyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgxLDcgKzM4MSwxMSBAQCBhc20gKAogICAg
IC8vIE5vdGU6IHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgdmFsdWUgb2YgZnAuIEhlbmNlLCBpdCBp
cyBzdGlsbCBwb2ludGluZyB0byB0aGUgZnJhbWUgb2YKICAgICAvLyB0aGUgY2FsbGVyIG9mIHRo
ZSBwcm9iZSAod2hpY2ggaXMgd2hhdCB3ZSB3YW50IGluIG9yZGVyIHRvIHBsYXkgbmljZSB3aXRo
IGRlYnVnZ2VycyBlLmcuIGxsZGIpLgogICAgICJtb3YgICAgICAgeDAsIHNwIiAiXG4iIC8vIFNl
dCB0aGUgUHJvYmU6OlN0YXRlKiBhcmcuCi0gICAgQ0FMTF9XSVRIX1BUUlRBRygiYmxyIiwgIngy
OCIsIENGdW5jdGlvblB0clRhZykgLy8gQ2FsbCB0aGUgcHJvYmUgaGFuZGxlci4KKyNpZiBDUFUo
QVJNNjRFKQorICAgICJibHJhYXogICAgeDI4IiAiXG4iIC8vIENhbGwgdGhlIHByb2JlIGhhbmRs
ZXIuCisjZWxzZQorICAgICJibHIgICAgICAgeDI4IiAiXG4iIC8vIENhbGwgdGhlIHByb2JlIGhh
bmRsZXIuCisjZW5kaWYKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgUHJvYmU6OlN0YXRlIGlzIGVu
dGlyZWx5IGJlbG93IHRoZSByZXN1bHQgc3RhY2sgcG9pbnRlciBzbwogICAgIC8vIHRoYXQgcmVn
aXN0ZXIgdmFsdWVzIGFyZSBzdGlsbCBwcmVzZXJ2ZWQgd2hlbiB3ZSBjYWxsIHRoZSBpbml0aWFs
aXplU3RhY2sKQEAgLTQxNyw3ICs0MjEsMTEgQEAgYXNtICgKICAgICAiY2J6ICAgICAgIHgyLCAi
IExPQ0FMX0xBQkVMX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lUmVzdG9yZVJlZ2lzdGVy
cykgIlxuIgogCiAgICAgIm1vdiAgICAgICB4MCwgeDI3IiAiXG4iIC8vIFNldCB0aGUgUHJvYmU6
OlN0YXRlKiBhcmcuCi0gICAgQ0FMTF9XSVRIX1BUUlRBRygiYmxyIiwgIngyIiwgQ0Z1bmN0aW9u
UHRyVGFnKSAvLyBDYWxsIHRoZSBpbml0aWFsaXplU3RhY2tGdW5jdGlvbiAobG9hZGVkIGludG8g
eDIgYWJvdmUpLgorI2lmIENQVShBUk02NEUpCisgICAgImJscmFheiAgICB4MiIgIlxuIiAvLyBD
YWxsIHRoZSBpbml0aWFsaXplU3RhY2tGdW5jdGlvbiAobG9hZGVkIGludG8geDIgYWJvdmUpLgor
I2Vsc2UKKyAgICAiYmxyICAgICAgIHgyIiAiXG4iIC8vIENhbGwgdGhlIGluaXRpYWxpemVTdGFj
a0Z1bmN0aW9uIChsb2FkZWQgaW50byB4MiBhYm92ZSkuCisjZW5kaWYKIAogICAgIExPQ0FMX0xB
QkVMX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lUmVzdG9yZVJlZ2lzdGVycykgIjoiICJc
biIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKEFS
TTY0RSkKKworLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgYmVmb3JlIE1hY3JvQXNzZW1ibGVy
QVJNNjQuaCBiZWNhdXNlIE1hY3JvQXNzZW1ibGVyQVJNNjQKKy8vIHdpbGwgYmUgZGVmaW5lZCBp
biB0ZXJtcyBvZiBBUk02NEVBc3NlbWJsZXIgZm9yIEFSTTY0RS4KKyNpbmNsdWRlICJBUk02NEVB
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJKU0NQdHJUYWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckFSTTY0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBBc3NlbWJsZXIgPSBUQVJH
RVRfQVNTRU1CTEVSOworCitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0RSA6IHB1YmxpYyBNYWNy
b0Fzc2VtYmxlckFSTTY0IHsKK3B1YmxpYzoKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0
dXJuQWRkcmVzcygpCisgICAgeworICAgICAgICB0YWdQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBB
Uk02NFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRh
Z1JldHVybkFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6
OmxyLCBBUk02NFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB0YWdQdHIoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBh
dXRvIHRhZ0dQUiA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgdGFnR1BSKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIucGFjaWIodGFyZ2V0LCB0YWdHUFIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB0YWdQdHIoUmVnaXN0ZXJJRCB0YXJnZXQsIFJlZ2lzdGVySUQgdGFnKQorICAgIHsKKyAg
ICAgICAgaWYgKHRhcmdldCA9PSBBUk02NFJlZ2lzdGVyczo6bHIgJiYgdGFnID09IEFSTTY0UmVn
aXN0ZXJzOjpzcCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIucGFjaWJzcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnBhY2liKHRhcmdl
dCwgdGFnKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdQdHIoUmVnaXN0
ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBhdXRvIHRhZ0dQUiA9IGdl
dENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQodGFnKSwgdGFnR1BSKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXV0aWIodGFy
Z2V0LCB0YWdHUFIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1B0cihS
ZWdpc3RlcklEIHRhcmdldCwgUmVnaXN0ZXJJRCB0YWcpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5hdXRpYih0YXJnZXQsIHRhZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHJlbW92ZVB0clRhZyhSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhwYWNpKHRhcmdldCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
SW52YWxpZEdQUiAgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigtMSk7CisKKyAgICBlbnVtIGNs
YXNzIENhbGxTaWduYXR1cmVUeXBlIHsKKyAgICAgICAgQ0Z1bmN0aW9uQ2FsbCwKKyAgICAgICAg
T3RoZXJDYWxsCisgICAgfTsKKworICAgIHRlbXBsYXRlPENhbGxTaWduYXR1cmVUeXBlIHR5cGU+
CisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGxUcnVzdGVkUHRyKFJlZ2lzdGVySUQgdGFnR1BS
ID0gSW52YWxpZEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YWdHUFIgIT0gZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIEFzc2VtYmxlckxhYmVsIHBvaW50ZXJMYWJlbCA9IG1fYXNzZW1i
bGVyLmxhYmVsKCk7CisgICAgICAgIG1vdmVXaXRoRml4ZWRXaWR0aChUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAg
ICAgICBpbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOworICAgICAgICBpZiAodHlwZSA9PSBD
YWxsU2lnbmF0dXJlVHlwZTo6Q0Z1bmN0aW9uQ2FsbCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJscmFheihkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYmxyYWIoZGF0YVRlbXBSZWdpc3RlciwgdGFnR1BSKTsKKyAgICAgICAgQXNzZW1i
bGVyTGFiZWwgY2FsbExhYmVsID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChwb2ludGVyTGFiZWwsIEFSTTY0QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhjYWxsTGFiZWwsIHBvaW50ZXJMYWJlbCkgPT0gUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIENhbGwoY2FsbExhYmVsLCBDYWxsOjpMaW5rYWJs
ZSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoUHRyVGFnIHRhZykKKyAg
ICB7CisgICAgICAgIGlmICh0YWcgPT0gTm9QdHJUYWcpCisgICAgICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJBUk02NDo6Y2FsbCh0YWcpOworICAgICAgICBpZiAodGFnID09IENGdW5jdGlv
blB0clRhZykKKyAgICAgICAgICAgIHJldHVybiBjYWxsVHJ1c3RlZFB0cjxDYWxsU2lnbmF0dXJl
VHlwZTo6Q0Z1bmN0aW9uQ2FsbD4oKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwg
QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgcmV0dXJuIGNhbGxUcnVzdGVkUHRyPENhbGxT
aWduYXR1cmVUeXBlOjpPdGhlckNhbGw+KEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YWdHUFIpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FsbFRydXN0ZWRQdHI8Q2FsbFNpZ25hdHVyZVR5cGU6Ok90aGVyQ2FsbD4o
dGFnR1BSKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxDYWxsU2lnbmF0dXJlVHlwZSB0eXBlPgor
ICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxsUmVnaXN0ZXIoUmVnaXN0ZXJJRCB0YXJnZXRHUFIs
IFJlZ2lzdGVySUQgdGFnR1BSID0gSW52YWxpZEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YWdHUFIgIT0gdGFyZ2V0R1BSKTsKKyAgICAgICAgaW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMo
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ2FsbFNpZ25hdHVyZVR5cGU6OkNGdW5jdGlvbkNhbGwp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHJhYXoodGFyZ2V0R1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmxyYWIodGFyZ2V0R1BSLCB0YWdHUFIpOworICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5sYWJlbCgpLCBDYWxsOjpOb25lKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldEdQUiwgUHRy
VGFnIHRhZykKKyAgICB7CisgICAgICAgIGlmICh0YWcgPT0gTm9QdHJUYWcpCisgICAgICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJBUk02NDo6Y2FsbCh0YXJnZXRHUFIsIHRhZyk7CisgICAg
ICAgIGlmICh0YWcgPT0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxS
ZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6Q0Z1bmN0aW9uQ2FsbD4odGFyZ2V0R1BSKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAg
ICAgcmV0dXJuIGNhbGxSZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6T3RoZXJDYWxsPih0YXJn
ZXRHUFIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBD
YWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXRHUFIsIFJlZ2lzdGVySUQgdGFnR1BSKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNhbGxSZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6T3RoZXJDYWxs
Pih0YXJnZXRHUFIsIHRhZ0dQUik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNh
bGwoQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYgKHRhZyA9
PSBOb1B0clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0OjpjYWxs
KGFkZHJlc3MsIHRhZyk7CisKKyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGdldENhY2hlZERhdGFU
ZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBjYWxsKGRhdGFU
ZW1wUmVnaXN0ZXIsIHRhZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwo
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHRhZykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YWcgIT0gZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzLCBnZXRDYWNo
ZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICByZXR1cm4gY2Fs
bChkYXRhVGVtcFJlZ2lzdGVyLCB0YWcpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSnVt
cCBqdW1wKCkgeyByZXR1cm4gTWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcCgpOyB9CisKKyAgICB2
b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBp
ZiAodGFnID09IE5vUHRyVGFnKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQVJN
NjQ6Omp1bXAodGFyZ2V0LCB0YWcpOworCisgICAgICAgIEFTU0VSVCh0YWcgIT0gQ0Z1bmN0aW9u
UHRyVGFnKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBkaXZlcnNpdHlHUFIgPSBnZXRDYWNoZWREYXRh
VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KHRhZyksIGRpdmVyc2l0eUdQUik7CisgICAgICAgIGp1bXAodGFyZ2V0LCBkaXZlcnNpdHlHUFIp
OworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCwgUmVnaXN0ZXJJRCB0
YWcpCisgICAgeworICAgICAgICBBU1NFUlQodGFnICE9IHRhcmdldCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmJyYWIodGFyZ2V0LCB0YWcpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNz
IGFkZHJlc3MsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBpZiAodGFnID09IE5vUHRyVGFn
KQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQVJNNjQ6Omp1bXAoYWRkcmVzcywg
dGFnKTsKKworICAgICAgICBBU1NFUlQodGFnICE9IENGdW5jdGlvblB0clRhZyk7CisgICAgICAg
IFJlZ2lzdGVySUQgdGFyZ2V0R1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52
YWxpZGF0ZSgpOworICAgICAgICBSZWdpc3RlcklEIGRpdmVyc2l0eUdQUiA9IGdldENhY2hlZE1l
bW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBsb2FkNjQoYWRkcmVz
cywgdGFyZ2V0R1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgZGl2ZXJzaXR5
R1BSKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIGRpdmVyc2l0eUdQUik7
CisgICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCB0YWcp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERhdGFUZW1w
UmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgQVNTRVJUKHRhZyAhPSB0YXJnZXRH
UFIpOworICAgICAgICBsb2FkNjQoYWRkcmVzcywgdGFyZ2V0R1BSKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKEJhc2VJ
bmRleCBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYgKHRhZyA9PSBOb1B0
clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0OjpqdW1wKGFkZHJl
c3MsIHRhZyk7CisKKyAgICAgICAgQVNTRVJUKHRhZyAhPSBDRnVuY3Rpb25QdHJUYWcpOworICAg
ICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBkaXZlcnNpdHlHUFIgPSBnZXRDYWNo
ZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbG9hZDY0KGFk
ZHJlc3MsIHRhcmdldEdQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KHRhZyksIGRpdmVy
c2l0eUdQUik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYWIodGFyZ2V0R1BSLCBkaXZlcnNpdHlH
UFIpOworICAgIH0KKworICAgIHZvaWQganVtcChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCB0YWcpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERh
dGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgQVNTRVJUKHRhZyAhPSB0
YXJnZXRHUFIpOworICAgICAgICBsb2FkNjQoYWRkcmVzcywgdGFyZ2V0R1BSKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorCisgICAgdm9pZCBqdW1w
KEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYg
KHRhZyA9PSBOb1B0clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0
OjpqdW1wKGFkZHJlc3MsIHRhZyk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCB0YXJnZXRHUFIgPSBn
ZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgIFJlZ2lz
dGVySUQgZGl2ZXJzaXR5R1BSID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGFy
Z2V0R1BSKTsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3ModGFyZ2V0R1BSKSwgdGFyZ2V0R1BSKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgZGl2ZXJzaXR5R1BSKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIGRpdmVyc2l0eUdQUik7CisgICAgfQorCisgICAg
dm9pZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHRhZykKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgdGFyZ2V0R1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3Rl
cklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBBU1NFUlQodGFnICE9IHRhcmdldEdQUik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGFyZ2V0R1BSKTsKKyAg
ICAgICAgbG9hZDY0KEFkZHJlc3ModGFyZ2V0R1BSKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyNDMy
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTgsNyArNzU4LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDb250ZQogICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIHZvaWQqIHJldHVyblBD
ID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKKyNpZiBDUFUoQVJNNjRFKQogICAgICAgICAgICAgdm9pZCog
b2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKICAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwogICAgICAg
ICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CkBAIC04
MDMsNyArODAzLDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZQog
ICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CiAKICAgICAgICAgICAgIHZvaWQqIHRhcmdldEFkZHJlc3MgPSBqdW1wVGFyZ2V0LmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShBUk02
NEUpCiAgICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKICAgICAg
ICAgICAgIHRhcmdldEFkZHJlc3MgPSByZXRhZ0NvZGVQdHIodGFyZ2V0QWRkcmVzcywgSlNJbnRl
cm5hbFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwog
ICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5Q
Q09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykK
KyNpZiBDUFUoQVJNNjRFKQogICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0LnVudGFnUHRyKEdQ
UkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZz
ZXQoKSArIHNpemVvZih2b2lkKikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDIpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86
OnJlZ1QzOwogICAgICAgICAgICAgfQogCi0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lm
IENQVShBUk02NEUpCiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lk
KikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAg
ICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGppdC50YWdQdHIoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgR1BSSW5mbzo6cmVnVDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKIAogICAgIHJlc3RvcmVB
bGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwogCi0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRF
Ul9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBqaXQudW50YWdQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpsaW5rUmVnaXN0ZXIsIHJlc3VsdFRhZyk7CiAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MDUsNyArODA1LDcgQEAgcHVibGljOgogI2lm
IENQVShBUk1fVEhVTUIyKSB8fCBDUFUoQVJNNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1Jl
Z2lzdGVyKTsKICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSks
IG5ld0ZyYW1lU2l6ZUdQUik7Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShB
Uk02NEUpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCB0ZW1wR1BSKTsKICAg
ICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCB0ZW1wR1BSKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlz
aW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICNpZiBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKEFS
TTY0KQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
LAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKLSNpZiBVU0UoUE9JTlRF
Ul9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2Vt
Ymxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIG1faml0LnVudGFnUHRyKE1hY3JvQXNz
ZW1ibGVyOjpsaW5rUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CiAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwMSw3ICs1MDEs
NyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyNpZiBD
UFUoQVJNNjRFKQogICAgIHZvaWQqIHN0YXJ0ID0gYWxsb2NhdG9yLT5tZW1vcnlTdGFydCgpOwog
ICAgIHZvaWQqIGVuZCA9IGFsbG9jYXRvci0+bWVtb3J5RW5kKCk7CiAgICAgdm9pZCogcmVzdWx0
U3RhcnQgPSByZXN1bHQtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDcgKzQ1Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gYXIKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRp
ZgogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9J
TlRFUl9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBqaXQubG9hZFB0cihKU0ludGVy
ZmFjZUpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpy
ZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5hZGRQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZXh0cmFUZW1wKTsKICAgICBqaXQudW50YWdQdHIoR1BSSW5m
bzo6cmVnVDMsIGV4dHJhVGVtcCk7CkBAIC01MTIsNyArNTEyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcgogICAgIAogICAgIGRvbmUubGluaygmaml0KTsKIAot
I2lmIENQVShBUk02NCkgJiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShBUk02NEUp
CiAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1Qz
KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0ZW1wUmV0dXJu
UENUYWcpLCBleHRyYVRlbXApOwogICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0
cmFUZW1wKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVB
c21Db25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRPZmZsaW5lQXNtQ29uZmlnLmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDEwICsxNDcsNCBAQAogI2RlZmluZSBPRkZMSU5FX0FTTV9UUkFDSU5HIDAKICNlbmRpZgog
Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQotI2RlZmluZSBPRkZMSU5FX0FTTV9QT0lOVEVS
X1BST0ZJTElORyAxCi0jZWxzZQotI2RlZmluZSBPRkZMSU5FX0FTTV9QT0lOVEVSX1BST0ZJTElO
RyAwCi0jZW5kaWYKLQogI2RlZmluZSBPRkZMSU5FX0FTTV9HSUdBQ0FHRV9FTkFCTEVEIEdJR0FD
QUdFX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtNTg1LDExICs1ODUsOCBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hlY2soZG9uZUxh
YmVsLCBzbG93CiAgICAgYnRpeiB0MSwgLmNvbnRpbnVlCiAKIC5ub0V4dHJhU2xvdDoKLSAgICBp
ZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICBpZiBBUk02NCBvciBBUk02NEUKLSAgICAgICAg
ICAgIGxvYWRwIDhbY2ZyXSwgbHIKLSAgICAgICAgZW5kCi0KKyAgICBpZiBBUk02NEUKKyAgICAg
ICAgbG9hZHAgOFtjZnJdLCBscgogICAgICAgICBhZGRwIDE2LCBjZnIsIHQzCiAgICAgICAgIHVu
dGFnUmV0dXJuQWRkcmVzcyB0MwogICAgIGVuZApAQCAtNjE4LDEzICs2MTUsMTAgQEAgbWFjcm8g
ZnVuY3Rpb25Bcml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogICAgIGFkZHAgOCwgdDMKICAgICBi
YWRkaW56IDEsIHQyLCAuZmlsbExvb3AKIAotICAgIGlmIFBPSU5URVJfUFJPRklMSU5HCisgICAg
aWYgQVJNNjRFCiAgICAgICAgIGFkZHAgMTYsIGNmciwgdDEKICAgICAgICAgdGFnUmV0dXJuQWRk
cmVzcyB0MQotCi0gICAgICAgIGlmIEFSTTY0IG9yIEFSTTY0RQotICAgICAgICAgICAgc3RvcmVw
IGxyLCA4W2Nmcl0KLSAgICAgICAgZW5kCisgICAgICAgIHN0b3JlcCBsciwgOFtjZnJdCiAgICAg
ZW5kCiAKIC5jb250aW51ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtOTQ4LDcgKzk0OCw3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUs
IHRlbXAxLCAKICAgICAgICAgc3RvcmVwIHRlbXAzLCBbc3BdCiAgICAgZW5kCiAKLSAgICBpZiBQ
T0lOVEVSX1BST0ZJTElORworICAgIGlmIEFSTTY0RQogICAgICAgICBhZGRwIDE2LCBjZnIsIHRl
bXAzCiAgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wMwogICAgIGVuZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
NiArMjYsMTAgQEAKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCiAKKyNpZiBfX2hhc19mZWF0dXJlKHB0cmF1dGhfY2FsbHMpCisjaW5jbHVkZSA8cHRyYXV0
aC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgUHJpbnRTdHJlYW07CiB9OwpA
QCAtMzcsNiArNDEsMTMgQEAgY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBTbmlwcGV0
Owogc3RydWN0IEhhc2hUYWJsZTsKIAorI2lmIF9faGFzX2ZlYXR1cmUocHRyYXV0aF9jYWxscykK
KyNkZWZpbmUgV1RGX01FVEhPRF9UQUJMRV9FTlRSWShtZXRob2QpIFwKKyAgICBfX3B0cmF1dGgo
cHRyYXV0aF9rZXlfcHJvY2Vzc19pbmRlcGVuZGVudF9jb2RlLCB0cnVlLCBwdHJhdXRoX3N0cmlu
Z19kaXNjcmltaW5hdG9yKCJNZXRob2RUYWJsZS4iICNtZXRob2QpKSBtZXRob2QKKyNlbHNlCisj
ZGVmaW5lIFdURl9NRVRIT0RfVEFCTEVfRU5UUlkobWV0aG9kKSBtZXRob2QKKyNlbmRpZgorCiBz
dHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERlc3Ryb3lGdW5jdGlvblB0ciA9IHZvaWQg
KCopKEpTQ2VsbCopOwogICAgIERlc3Ryb3lGdW5jdGlvblB0ciBXVEZfTUVUSE9EX1RBQkxFX0VO
VFJZKGRlc3Ryb3kpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
SlNDUHRyVGFnLmgiCiAjaW5jbHVkZSAiSlNEYXRlTWF0aC5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02MSw2ICs2Miw4IEBAIHZvaWQgaW5p
dGlhbGl6ZVRocmVhZGluZygpCiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwog
ICAgICAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CiAKKyAgICAgICAgaW5pdGlhbGl6ZVB0clRh
Z0xvb2t1cCgpOworCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAg
ICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDUHRyVGFn
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgQ1BVKEFSTTY0RSkKKworc3RhdGljIGNvbnN0
IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKiBwdHIpCit7CisjZGVmaW5lIFJFVFVSTl9OQU1F
X0lGX1RBR19NQVRDSEVTKHRhZykgXAorICAgIGlmIChXVEY6OnVudGFnQ29kZVB0ckltcGw8V1RG
OjpQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0PihwdHIsIEpTQzo6dGFnKSA9PSByZW1vdmVDb2RlUHRy
VGFnKHB0cikpIFwKKyAgICAgICAgcmV0dXJuICN0YWc7CisgICAgRk9SX0VBQ0hfSlNDX1BUUlRB
RyhSRVRVUk5fTkFNRV9JRl9UQUdfTUFUQ0hFUykKKyN1bmRlZiBSRVRVUk5fTkFNRV9JRl9UQUdf
TUFUQ0hFUworICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgor
fQorCitzdGF0aWMgY29uc3QgY2hhciogcHRyVGFnTmFtZShQdHJUYWcgdGFnKQoreworI2RlZmlu
ZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05hbWUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3Rh
Z05hbWU7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgeworICAgICAg
ICBGT1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKKyAgICB9CisjdW5kZWYg
UkVUVVJOX1BUUlRBR19OQU1FCisgICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBu
b3QgZm91bmQuCit9CisKK3ZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpCit7CisgICAgc3Rh
dGljIFdURjo6UHRyVGFnTG9va3VwIGxvb2t1cCA9IHsgdGFnRm9yUHRyLCBwdHJUYWdOYW1lIH07
CisgICAgV1RGOjpyZWdpc3RlclB0clRhZ0xvb2t1cCgmbG9va3VwKTsKK30KKworI2VuZGlmIC8v
IENQVShBUk02NEUpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDggKzQ3
LDYgQEAgdXNpbmcgUHRyVGFnID0gV1RGOjpQdHJUYWc7CiAgICAgdihPcGVyYXRpb25QdHJUYWcp
IFwKICAgICB2KE9TUkVudHJ5UHRyVGFnKSBcCiAgICAgdihPU1JFeGl0UHRyVGFnKSBcCi0gICAg
dihQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnKSBcCi0gICAgdihQbGF0Zm9ybVJlZ2lzdGVyc1BD
UHRyVGFnKSBcCiAgICAgdihTbG93UGF0aFB0clRhZykgXAogICAgIHYoV2FzbUVudHJ5UHRyVGFn
KSBcCiAgICAgdihZYXJyOEJpdFB0clRhZykgXApAQCAtNjgsNSArNjYsMTEgQEAgRk9SX0VBQ0hf
SlNDX1BUUlRBRyhXVEZfREVDTEFSRV9QVFJUQUcpCiAjcHJhZ21hIHdhcm5pbmcocG9wKQogI2Vu
ZGlmCiAKK3ZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpOworCisjaWYgIUNQVShBUk02NEUp
CitpbmxpbmUgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkgeyB9CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMCw4ICs0MjAsNiBAQCBzdGF0
aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAgICAgT3B0aW9uczo6dXNl
SklUKCkgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgV1RGX1NFVF9QT0lOVEVSX1BSRVBBUkFUSU9O
X09QVElPTlMoKTsKLQogICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIE9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5KCkgPSBmYWxzZTsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTktMDMtMjAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIE9w
ZW4gc291cmNlIGFybTY0ZSBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk2MDEyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTA2NjIzNz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9CbG9ja1B0ci5oOgorICAg
ICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5j
cHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTdGF0ZUxSSW50ZXJuYWwpOgorICAgICAg
ICAoV1RGOjp0aHJlYWRTdGF0ZVBDSW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJl
Z2lzdGVycy5oOgorICAgICAgICAqIHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg6CisgICAgICAg
ICogd3RmL1B0clRhZy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjp0YWdGb3JQdHIpOgorICAg
ICAgICAoV1RGOjpwdHJUYWdOYW1lKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJQdHJUYWdMb29r
dXApOgorICAgICAgICAoV1RGOjpyZXBvcnRCYWRUYWcpOgorICAgICAgICAqIHd0Zi9QdHJUYWcu
aDoKKyAgICAgICAgKFdURjo6cmVtb3ZlQ29kZVB0clRhZyk6CisgICAgICAgIChXVEY6OnRhZ0Nv
ZGVQdHJJbXBsKToKKyAgICAgICAgKFdURjo6dGFnQ29kZVB0cik6CisgICAgICAgIChXVEY6OnVu
dGFnQ29kZVB0ckltcGxIZWxwZXIpOgorICAgICAgICAoV1RGOjp1bnRhZ0NvZGVQdHJJbXBsKToK
KyAgICAgICAgKFdURjo6dW50YWdDb2RlUHRyKToKKyAgICAgICAgKFdURjo6cmV0YWdDb2RlUHRy
SW1wbEhlbHBlcik6CisgICAgICAgIChXVEY6OnJldGFnQ29kZVB0ckltcGwpOgorICAgICAgICAo
V1RGOjpyZXRhZ0NvZGVQdHIpOgorICAgICAgICAoV1RGOjp0YWdDRnVuY3Rpb25QdHJJbXBsKToK
KyAgICAgICAgKFdURjo6dGFnQ0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKFdURjo6dW50YWdDRnVu
Y3Rpb25QdHJJbXBsKToKKyAgICAgICAgKFdURjo6dW50YWdDRnVuY3Rpb25QdHIpOgorICAgICAg
ICAoV1RGOjp0YWdJbnQpOgorICAgICAgICAoV1RGOjphc3NlcnRJc0NGdW5jdGlvblB0cik6Cisg
ICAgICAgIChXVEY6OmFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKFdURjo6
YXNzZXJ0SXNOb3RUYWdnZWQpOgorICAgICAgICAoV1RGOjphc3NlcnRJc1RhZ2dlZCk6CisgICAg
ICAgIChXVEY6OmFzc2VydElzTnVsbE9yVGFnZ2VkKToKKyAgICAgICAgKFdURjo6aXNUYWdnZWRX
aXRoKToKKyAgICAgICAgKFdURjo6YXNzZXJ0SXNUYWdnZWRXaXRoKToKKyAgICAgICAgKFdURjo6
YXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKToKKyAgICAgICAgKFdURjo6dXNlc1BvaW50ZXJUYWdn
aW5nKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJQdHJUYWdMb29rdXApOgorICAgICAgICAoV1RG
OjpyZXBvcnRCYWRUYWcpOgorICAgICAgICAoV1RGOjp0YWdGb3JQdHIpOiBEZWxldGVkLgorCiAy
MDE5LTAzLTIwICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCBmdXJ0aGVyIGF0dGVtcHQgdG8gZml4IGNsYW5nIDMuOCBidWls
ZApJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNDMyMTYpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDggQEAKIAkJRTRBMEFEMzkxQTk2MjQ1NTAwNTM2
REY2IC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCAqLzsg
fTsKIAkJRTRBMEFEM0QxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNvY29hLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDNDMUE5NjI1
M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgKi87IH07CiAJCUZFMDVGQUZGMUZFNTAw
NzUwMDA5MzIzMCAvKiBXVEZBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMDVGQUZFMUZFNTAwNzUwMDA5MzIzMCAvKiBXVEZBc3Nl
cnRpb25zLmNwcCAqLzsgfTsKKwkJRkUxRTJDM0IyMjQwQzA2NjAwRjZCNzI5IC8qIFB0clRhZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFFMkMz
OTIyNDBDMDU0MDBGNkI3MjkgLyogUHRyVGFnLmNwcCAqLzsgfTsKKwkJRkUxRTJDNDIyMjQxODdD
NjAwRjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUUyQzQxMjI0MTg3QzYwMEY2QjcyOSAvKiBQbGF0
Zm9ybVJlZ2lzdGVycy5jcHAgKi87IH07CiAJCUZFREFDRDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBT
dGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLzsgfTsKIAkJ
RkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUVBNERGODIxNkQ3QkU0MDBBQzA2
MDIgLyogU3RhY2tQb2ludGVyLmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwpAQCAtNjc2LDYgKzY3OCw4IEBACiAJCUY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBT
eW1ib2xJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJv
bEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTA1RkFFNjFGREIyMTQz
MDAwOTMyMzAgLyogRHVtYlB0clRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEdW1iUHRyVHJhaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMDVG
QUZFMUZFNTAwNzUwMDA5MzIzMCAvKiBXVEZBc3NlcnRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdURkFzc2VydGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRTFFMkMzOTIyNDBDMDU0MDBGNkI3MjkgLyogUHRyVGFnLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB0clRhZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMUUyQzQxMjI0MTg3QzYwMEY2QjcyOSAvKiBQbGF0Zm9ybVJl
Z2lzdGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9y
bVJlZ2lzdGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNzQ5N0U0MjA4
RkZDQUEwMDAzNTY1QiAvKiBQdHJUYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHRyVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNzQ5N0VEMjA5MTYz
MDYwMDAzNTY1QiAvKiBNZXRhQWxsb2NhdG9yUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDYzLDYgKzEwNjcsNyBAQAogCQkJCTBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmNwcCAqLywKIAkJCQkwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2lu
Z0xvdC5oICovLAogCQkJCUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICov
LAorCQkJCUZFMUUyQzQxMjI0MTg3QzYwMEY2QjcyOSAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5jcHAg
Ki8sCiAJCQkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmgg
Ki8sCiAJCQkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8sCiAJCQkJRkVCNkIwMzUyMDFCRTBCNjAwQjk1OEMxIC8qIFBvaW50ZXJQcmVwYXJhdGlvbnMu
aCAqLywKQEAgLTEwNzIsNiArMTA3Nyw3IEBACiAJCQkJMEZDNDQ4ODIxNkZFOUZFMTAwODQ0QkU5
IC8qIFByb2Nlc3NJRC5oICovLAogCQkJCTdBRjAyM0I0MjA2MUUxNkYwMEE4RUZENiAvKiBQcm9j
ZXNzUHJpdmlsZWdlLmNwcCAqLywKIAkJCQk3QUYwMjNCMzIwNjFFMTZDMDBBOEVGRDYgLyogUHJv
Y2Vzc1ByaXZpbGVnZS5oICovLAorCQkJCUZFMUUyQzM5MjI0MEMwNTQwMEY2QjcyOSAvKiBQdHJU
YWcuY3BwICovLAogCQkJCUZFNzQ5N0U0MjA4RkZDQUEwMDAzNTY1QiAvKiBQdHJUYWcuaCAqLywK
IAkJCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8sCiAJCQkJMTQz
RjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLywKQEAgLTE1MjcsNiArMTUzMyw3
IEBACiAJCQkJQThBNDczQzMxNTFBODI1QjAwNDEyM0ZGIC8qIEZhc3RNYWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDMzNjAxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVh
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzMxRDk1QjIxRjI0OTkyMDA5RjAyQUEgLyogRmls
ZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTFFMkM0MjIyNDE4N0M2MDBGNkI3Mjkg
LyogUGxhdGZvcm1SZWdpc3RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMzMUQ5NUQyMUYy
NDlFNDAwOUYwMkFBIC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzMx
RDk1RjIxRjI0OUY2MDA5RjAyQUEgLyogRmlsZVN5c3RlbUNvY29hLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTMzMUQ5NjEyMUYyNEEwQTAwOUYwMkFBIC8qIEZpbGVTeXN0ZW1NYWMubW0gaW4gU291
cmNlcyAqLywKQEAgLTE2MjAsNiArMTYyNyw3IEBACiAJCQkJMUMxODFDOEYxRDMwN0FCODAwRjVG
QTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTExRDMw
N0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRTFFMkMzQjIyNDBDMDY2MDBGNkI3MjkgLyogUHRyVGFnLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDY5MTUxQTgyNUIwMDQxMjNGRiAvKiBVVEY4Q29udmVy
c2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUZFQzZCMTFFQjIyQjU5MDBEQURFMzYgLyog
VVVJRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI5MjFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CbG9ja1B0
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jsb2NrUHRyLmgJKHJldmlzaW9uIDI0
MzIxNikKKysrIFNvdXJjZS9XVEYvd3RmL0Jsb2NrUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw4ICszMCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgQ1BVKEFSTTY0RSkKLSNpbmNsdWRlIDxXZWJLaXRBZGRp
dGlvbnMvQmxvY2tRdWFsaWZpZXJzLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8cHRyYXV0aC5oPikK
KyNpbmNsdWRlIDxwdHJhdXRoLmg+CisjZGVmaW5lIFdURl9DT1BZX0ZVTkNUSU9OX1BPSU5URVJf
UVVBTElGSUVSIF9fcHRyYXV0aF9ibG9ja19jb3B5X2hlbHBlcgorI2RlZmluZSBXVEZfRElTUE9T
RV9GVU5DVElPTl9QT0lOVEVSX1FVQUxJRklFUiBfX3B0cmF1dGhfYmxvY2tfZGVzdHJveV9oZWxw
ZXIKKyNkZWZpbmUgV1RGX0lOVk9LRV9GVU5DVElPTl9QT0lOVEVSX1FVQUxJRklFUiBfX3B0cmF1
dGhfYmxvY2tfaW52b2NhdGlvbl9wb2ludGVyCiAjZWxzZQogI2RlZmluZSBXVEZfQ09QWV9GVU5D
VElPTl9QT0lOVEVSX1FVQUxJRklFUgogI2RlZmluZSBXVEZfRElTUE9TRV9GVU5DVElPTl9QT0lO
VEVSX1FVQUxJRklFUgpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ2LDExICsxMDQ2LDYg
QEAKICNkZWZpbmUgRU5BQkxFX1NJR05BTF9CQVNFRF9WTV9UUkFQUyAxCiAjZW5kaWYKIAotI2lm
ICFkZWZpbmVkKFVTRV9QT0lOVEVSX1BST0ZJTElORykgfHwgVVNFKEpTVkFMVUUzMl82NCkgfHwg
IUVOQUJMRShKSVQpCi0jdW5kZWYgVVNFX1BPSU5URVJfUFJPRklMSU5HCi0jZGVmaW5lIFVTRV9Q
T0lOVEVSX1BST0ZJTElORyAwCi0jZW5kaWYKLQogLyogQ1NTIFNlbGVjdG9yIEpJVCBDb21waWxl
ciAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9DU1NfU0VMRUNUT1JfSklUKQogI2lmIChDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNNjQpIHx8IChDUFUoQVJNX1RIVU1CMikgJiYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkpKSAmJiBFTkFCTEUoSklUKSAmJiAoT1MoREFSV0lOKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdQRSkpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtUmVnaXN0ZXJzLmg+CisKKyNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCisjaWYgVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpICYm
IENQVShBUk02NEUpCisKKyNkZWZpbmUgVVNFX1VOVEFHR0VEX1RIUkVBRF9TVEFURV9QVFIgMQor
Cit2b2lkKiB0aHJlYWRTdGF0ZUxSSW50ZXJuYWwoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3MpCit7
CisgICAgdm9pZCogY2FuZGlkYXRlTFIgPSBhcm1fdGhyZWFkX3N0YXRlNjRfZ2V0X2xyX2ZwdHIo
cmVncyk7CisKKyNpZiBVU0UoVU5UQUdHRURfVEhSRUFEX1NUQVRFX1BUUikKKyAgICBpZiAoY2Fu
ZGlkYXRlTFIgJiYgaXNUYWdnZWRXaXRoKGNhbmRpZGF0ZUxSLCBDRnVuY3Rpb25QdHJUYWcpKQor
ICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPENGdW5jdGlvblB0clRhZywgUGxhdGZvcm1SZWdp
c3RlcnNMUlB0clRhZz4oY2FuZGlkYXRlTFIpOworICAgIGNhbmRpZGF0ZUxSID0gYml0d2lzZV9j
YXN0PHZvaWQqPihhcm1fdGhyZWFkX3N0YXRlNjRfZ2V0X2xyKHJlZ3MpKTsKKyAgICBpZiAoIWNh
bmRpZGF0ZUxSKQorICAgICAgICByZXR1cm4gY2FuZGlkYXRlTFI7CisgICAgcmV0dXJuIHRhZ0Nv
ZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRhZz4oY2FuZGlkYXRlTFIpOworCisjZWxzZQor
ICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnLCBQbGF0Zm9ybVJlZ2lzdGVy
c0xSUHRyVGFnPihjYW5kaWRhdGVMUik7CisjZW5kaWYKK30KKwordm9pZCogdGhyZWFkU3RhdGVQ
Q0ludGVybmFsKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdzKQoreworICAgIHZvaWQqIGNhbmRpZGF0
ZVBDID0gYXJtX3RocmVhZF9zdGF0ZTY0X2dldF9wY19mcHRyKHJlZ3MpOworCisjaWYgVVNFKFVO
VEFHR0VEX1RIUkVBRF9TVEFURV9QVFIpCisgICAgaWYgKGNhbmRpZGF0ZVBDICYmIGlzVGFnZ2Vk
V2l0aChjYW5kaWRhdGVQQywgQ0Z1bmN0aW9uUHRyVGFnKSkKKyAgICAgICAgcmV0dXJuIHJldGFn
Q29kZVB0cjxDRnVuY3Rpb25QdHJUYWcsIFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc+KGNhbmRp
ZGF0ZVBDKTsKKyAgICBjYW5kaWRhdGVQQyA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oYXJtX3RocmVh
ZF9zdGF0ZTY0X2dldF9wYyhyZWdzKSk7CisgICAgaWYgKCFjYW5kaWRhdGVQQykKKyAgICAgICAg
cmV0dXJuIGNhbmRpZGF0ZVBDOworICAgIHJldHVybiB0YWdDb2RlUHRyPFBsYXRmb3JtUmVnaXN0
ZXJzUENQdHJUYWc+KGNhbmRpZGF0ZVBDKTsKKworI2Vsc2UKKyAgICByZXR1cm4gcmV0YWdDb2Rl
UHRyPENGdW5jdGlvblB0clRhZywgUGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4oY2FuZGlkYXRl
UEMpOworI2VuZGlmCit9CisKKyNlbmRpZiAvLyBVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhf
UFJPRklMRSkgJiYgQ1BVKEFSTTY0RSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkxLDQgKzkyLDcxIEBAIHN0
cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCisjaWYgVVNF
KFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUpCisjaWYgQ1BVKEFSTTY0RSkKKworbmFt
ZXNwYWNlIFdURiB7CisKK2V4dGVybiB2b2lkKiB0aHJlYWRTdGF0ZUxSSW50ZXJuYWwoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKK2V4dGVybiB2b2lkKiB0aHJlYWRTdGF0ZVBDSW50ZXJuYWwoUGxhdGZv
cm1SZWdpc3RlcnMmKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6dGhyZWFk
U3RhdGVMUkludGVybmFsOwordXNpbmcgV1RGOjp0aHJlYWRTdGF0ZVBDSW50ZXJuYWw7CisKKyNl
bHNlIC8vIG5vdCBDUFUoQVJNNjRFKQorCisjZGVmaW5lIHRocmVhZFN0YXRlTFJJbnRlcm5hbChy
ZWdzKSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGFybV90aHJlYWRfc3RhdGU2NF9nZXRfbHIocmVncykp
CisjZGVmaW5lIHRocmVhZFN0YXRlUENJbnRlcm5hbChyZWdzKSBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGFybV90aHJlYWRfc3RhdGU2NF9nZXRfcGMocmVncykpCisKKyNlbmRpZiAvLyBDUFUoQVJNNjRF
KQorCisjZGVmaW5lIFdURl9SRUFEX1BMQVRGT1JNX1JFR0lTVEVSU19TUF9XSVRIX1BST0ZJTEUo
cmVncykgXAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFybV90aHJlYWRfc3RhdGU2NF9n
ZXRfc3AoY29uc3RfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+KHJlZ3MpKSkKKworI2RlZmluZSBX
VEZfV1JJVEVfUExBVEZPUk1fUkVHSVNURVJTX1NQX1dJVEhfUFJPRklMRShyZWdzLCBuZXdQb2lu
dGVyKSBcCisgICAgYXJtX3RocmVhZF9zdGF0ZTY0X3NldF9zcChyZWdzLCByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obmV3UG9pbnRlcikpCisKKyNkZWZpbmUgV1RGX1JFQURfUExBVEZPUk1f
UkVHSVNURVJTX0ZQX1dJVEhfUFJPRklMRShyZWdzKSBcCisgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYXJtX3RocmVhZF9zdGF0ZTY0X2dldF9mcChjb25zdF9jYXN0PFBsYXRmb3JtUmVnaXN0
ZXJzJj4ocmVncykpKQorCisjZGVmaW5lIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfRlBf
V0lUSF9QUk9GSUxFKHJlZ3MsIG5ld1BvaW50ZXIpIFwKKyAgICBhcm1fdGhyZWFkX3N0YXRlNjRf
c2V0X2ZwKHJlZ3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdQb2ludGVyKSkKKwor
I2RlZmluZSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKHJlZ3Mp
IFwKKyAgICB0aHJlYWRTdGF0ZUxSSW50ZXJuYWwoY29uc3RfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVy
cyY+KHJlZ3MpKQorCisjZGVmaW5lIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfTFJfV0lU
SF9QUk9GSUxFKHJlZ3MsIG5ld1BvaW50ZXIpIFwKKyAgICBhcm1fdGhyZWFkX3N0YXRlNjRfc2V0
X2xyX2ZwdHIocmVncywgbmV3UG9pbnRlcikKKworI2RlZmluZSBXVEZfUkVBRF9QTEFURk9STV9S
RUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MpIFwKKyAgICB0aHJlYWRTdGF0ZVBDSW50ZXJu
YWwoY29uc3RfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+KHJlZ3MpKQorCisjZGVmaW5lIFdURl9X
UklURV9QTEFURk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKHJlZ3MsIG5ld1BvaW50ZXIp
IFwKKyAgICBhcm1fdGhyZWFkX3N0YXRlNjRfc2V0X3BjX2ZwdHIocmVncywgbmV3UG9pbnRlcikK
KworI2RlZmluZSBXVEZfUkVBRF9NQUNISU5FX0NPTlRFWFRfU1BfV0lUSF9QUk9GSUxFKG1hY2hp
bmVDb250ZXh0KSBcCisgICAgV1RGX1JFQURfUExBVEZPUk1fUkVHSVNURVJTX1NQX1dJVEhfUFJP
RklMRShtYWNoaW5lQ29udGV4dC0+X19zcykKKworI2RlZmluZSBXVEZfV1JJVEVfTUFDSElORV9D
T05URVhUX1NQX1dJVEhfUFJPRklMRShtYWNoaW5lQ29udGV4dCwgbmV3UG9pbnRlcikgXAorICAg
IFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfU1BfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250
ZXh0LT5fX3NzLCBuZXdQb2ludGVyKQorCisjZGVmaW5lIFdURl9SRUFEX01BQ0hJTkVfQ09OVEVY
VF9GUF9XSVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQpIFwKKyAgICBXVEZfUkVBRF9QTEFURk9S
TV9SRUdJU1RFUlNfRlBfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LT5fX3NzKQorCisjZGVm
aW5lIFdURl9XUklURV9NQUNISU5FX0NPTlRFWFRfRlBfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250
ZXh0LCBuZXdQb2ludGVyKSBcCisgICAgV1RGX1dSSVRFX1BMQVRGT1JNX1JFR0lTVEVSU19GUF9X
SVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQtPl9fc3MsIG5ld1BvaW50ZXIpCisKKyNkZWZpbmUg
V1RGX1dSSVRFX01BQ0hJTkVfQ09OVEVYVF9MUl9XSVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQs
IG5ld1BvaW50ZXIpIFwKKyAgICBXVEZfV1JJVEVfUExBVEZPUk1fUkVHSVNURVJTX0xSX1dJVEhf
UFJPRklMRShtYWNoaW5lQ29udGV4dC0+X19zcywgbmV3UG9pbnRlcikKKworI2RlZmluZSBXVEZf
UkVBRF9NQUNISU5FX0NPTlRFWFRfUENfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0KSBcCisg
ICAgV1RGX1JFQURfUExBVEZPUk1fUkVHSVNURVJTX1BDX1dJVEhfUFJPRklMRShtYWNoaW5lQ29u
dGV4dC0+X19zcykKKworI2RlZmluZSBXVEZfV1JJVEVfTUFDSElORV9DT05URVhUX1BDX1dJVEhf
UFJPRklMRShtYWNoaW5lQ29udGV4dCwgbmV3UG9pbnRlcikgXAorICAgIFdURl9XUklURV9QTEFU
Rk9STV9SRUdJU1RFUlNfUENfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LT5fX3NzLCBuZXdQ
b2ludGVyKQorCisjZW5kaWYgLy8gVVNFKFBMQVRGT1JNX1JFR0lTVEVSU19XSVRIX1BST0ZJTEUp
CisKIHVzaW5nIFdURjo6UGxhdGZvcm1SZWdpc3RlcnM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUG9pbnRl
clByZXBhcmF0aW9ucy5oCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9Qb2lu
dGVyUHJlcGFyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTggKzI1LDE4IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVkZSg8
V2ViS2l0QWRkaXRpb25zL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4pCi0jaW5jbHVkZSA8V2ViS2l0
QWRkaXRpb25zL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KLSNlbmRpZgorbmFtZXNwYWNlIFdURiB7
CisKKyNpZiBfX2hhc19mZWF0dXJlKHB0cmF1dGhfY2FsbHMpCisjaW5jbHVkZSA8cHRyYXV0aC5o
PgorCisjZGVmaW5lIFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTih2dGJs
UHRyKSBcCisgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cmF1dGhfc2lnbl91bmF1dGhl
bnRpY2F0ZWQodnRibFB0ciwgcHRyYXV0aF9rZXlfY3h4X3Z0YWJsZV9wb2ludGVyLCAwKSkpCisK
KyNlbHNlIC8vIG5vdCBfX2hhc19mZWF0dXJlKHB0cmF1dGhfY2FsbHMpCiAKLSNpZm5kZWYgV1RG
X1BSRVBBUkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OCiAjZGVmaW5lIFdURl9QUkVQQVJF
X1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTih2dGJsUHRyKSAocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odnRibFB0cikpCi0jZW5kaWYKIAotI2lmbmRlZiBXVEZfU0VUX1BPSU5URVJfUFJFUEFS
QVRJT05fT1BUSU9OUwotI2RlZmluZSBXVEZfU0VUX1BPSU5URVJfUFJFUEFSQVRJT05fT1BUSU9O
UygpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCi0jZW5kaWYKLQotI2lmbmRlZiBXVEZfTUVUSE9EX1RB
QkxFX0VOVFJZCi0jZGVmaW5lIFdURl9NRVRIT0RfVEFCTEVfRU5UUlkobWV0aG9kKSBtZXRob2QK
LSNlbmRpZgorI2VuZGlmIC8vIG5vdCBfX2hhc19mZWF0dXJlKHB0cmF1dGhfY2FsbHMpCisKK30g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvUHRyVGFnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XVEYvd3RmL1B0clRhZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
KyNpZiBDUFUoQVJNNjRFKQorCitzdGF0aWMgUHRyVGFnTG9va3VwKiBzX3B0clRhZ0xvb2t1cCA9
IG51bGxwdHI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCogcHRy
KQoreworICAgIFB0clRhZ0xvb2t1cCogbG9va3VwID0gc19wdHJUYWdMb29rdXA7CisgICAgd2hp
bGUgKGxvb2t1cCkgeworICAgICAgICBjb25zdCBjaGFyKiB0YWdOYW1lID0gbG9va3VwLT50YWdG
b3JQdHIocHRyKTsKKyAgICAgICAgaWYgKHRhZ05hbWUpCisgICAgICAgICAgICByZXR1cm4gdGFn
TmFtZTsKKyAgICAgICAgbG9va3VwID0gbG9va3VwLT5uZXh0OworICAgIH0KKworICAgIGlmIChw
dHIgPT0gcmVtb3ZlQ29kZVB0clRhZyhwdHIpKQorICAgICAgICByZXR1cm4gIk5vUHRyVGFnIjsK
KworI2RlZmluZSBSRVRVUk5fTkFNRV9JRl9UQUdfTUFUQ0hFUyh0YWcpIFwKKyAgICBpZiAodW50
YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0PihwdHIsIHRhZykgPT0gcmVtb3Zl
Q29kZVB0clRhZyhwdHIpKSBcCisgICAgICAgIHJldHVybiAjdGFnOworICAgIEZPUl9FQUNIX1dU
Rl9QVFJUQUcoUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVMpCisjdW5kZWYgUkVUVVJOX05BTUVf
SUZfVEFHX01BVENIRVMKKworICAgIHJldHVybiAiPHVua25vd24gUHRyVGFnPiI7Cit9CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCit7CisgICAgUHRyVGFnTG9v
a3VwKiBsb29rdXAgPSBzX3B0clRhZ0xvb2t1cDsKKyAgICB3aGlsZSAobG9va3VwKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIHRhZ05hbWUgPSBsb29rdXAtPnB0clRhZ05hbWUodGFnKTsKKyAgICAg
ICAgaWYgKHRhZ05hbWUpCisgICAgICAgICAgICByZXR1cm4gdGFnTmFtZTsKKyAgICAgICAgbG9v
a3VwID0gbG9va3VwLT5uZXh0OworICAgIH0KKworI2RlZmluZSBSRVRVUk5fV1RGX1BUUlRBR19O
QU1FKF90YWdOYW1lKSBjYXNlIF90YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOworICAgIHN3aXRj
aCAodGFnKSB7CisgICAgICAgIEZPUl9FQUNIX1dURl9QVFJUQUcoUkVUVVJOX1dURl9QVFJUQUdf
TkFNRSkKKyAgICBkZWZhdWx0OiByZXR1cm4gIjx1bmtub3duPiI7CisgICAgfQorI3VuZGVmIFJF
VFVSTl9XVEZfUFRSVEFHX05BTUUKK30KKwordm9pZCByZWdpc3RlclB0clRhZ0xvb2t1cChQdHJU
YWdMb29rdXAqIGxvb2t1cCkKK3sKKyAgICBsb29rdXAtPm5leHQgPSBzX3B0clRhZ0xvb2t1cDsK
KyAgICBzX3B0clRhZ0xvb2t1cCA9IGxvb2t1cDsKK30KKwordm9pZCByZXBvcnRCYWRUYWcoY29u
c3Qgdm9pZCogcHRyLCBQdHJUYWcgZXhwZWN0ZWRUYWcpCit7CisgICAgZGF0YUxvZygiUHRyVGFn
IEFTU0VSVElPTiBGQUlMRUQgb24gcG9pbnRlciAiLCBSYXdQb2ludGVyKHB0ciksICIsIGFjdHVh
bCB0YWcgPSAiLCB0YWdGb3JQdHIocHRyKSk7CisgICAgaWYgKGV4cGVjdGVkVGFnID09IEFueVB0
clRhZykKKyAgICAgICAgZGF0YUxvZ0xuKCIsIGV4cGVjdGVkIGFueSB0YWcgYnV0IE5vUHRyVGFn
Iik7CisgICAgZWxzZQorICAgICAgICBkYXRhTG9nTG4oIiwgZXhwZWN0ZWQgdGFnID0gIiwgcHRy
VGFnTmFtZShleHBlY3RlZFRhZykpOworfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKKworfSAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNl
L1dURi93dGYvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsOCBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtMzYsNiArMzcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICNkZWZpbmUgRk9SX0VB
Q0hfQURESVRJT05BTF9XVEZfUFRSVEFHKHYpIFwKICAgICB2KEZyZWVTcGFjZVB0clRhZykgXAog
ICAgIHYoSGFuZGxlTWVtb3J5UHRyVGFnKSBcCisgICAgdihQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRy
VGFnKSBcCisgICAgdihQbGF0Zm9ybVJlZ2lzdGVyc1BDUHRyVGFnKSBcCiAKICNkZWZpbmUgRk9S
X0VBQ0hfV1RGX1BUUlRBRyh2KSBcCiAgICAgRk9SX0VBQ0hfQkFTRV9XVEZfUFRSVEFHKHYpIFwK
QEAgLTQ2LDcgKzQ5LDExIEBAIGVudW0gUHRyVGFnIDogdWludHB0cl90IHsKICAgICBDRnVuY3Rp
b25QdHJUYWcsCiB9OwogCi0jaWZuZGVmIFdURl9QVFJUQUdfSEFTSAorI2lmIF9faGFzX2ZlYXR1
cmUocHRyYXV0aF9jYWxscykKKyNkZWZpbmUgV1RGX1BUUlRBR19IQVNIKHRhZykgcHRyYXV0aF9z
dHJpbmdfZGlzY3JpbWluYXRvcigjdGFnKQorCisjZWxzZSAvLyBub3QgX19oYXNfZmVhdHVyZShw
dHJhdXRoX2NhbGxzKQorCiB0ZW1wbGF0ZTxzaXplX3QgTj4KIGNvbnN0ZXhwciB1aW50cHRyX3Qg
bWFrZVB0clRhZ0hhc2goY29uc3QgY2hhciAoJnN0cilbTl0pCiB7CkBAIC01Nyw3ICs2NCw3IEBA
IGNvbnN0ZXhwciB1aW50cHRyX3QgbWFrZVB0clRhZ0hhc2goY29uc3QKIH0KIAogI2RlZmluZSBX
VEZfUFRSVEFHX0hBU0godGFnKSBXVEY6Om1ha2VQdHJUYWdIYXNoKCN0YWcpCi0jZW5kaWYKKyNl
bmRpZiAvLyBub3QgX19oYXNfZmVhdHVyZShwdHJhdXRoX2NhbGxzKQogCiAjZGVmaW5lIFdURl9E
RUNMQVJFX1BUUlRBRyh0YWcpIFwKICAgICBjb25zdGV4cHIgUHRyVGFnIHRhZyA9IHN0YXRpY19j
YXN0PFB0clRhZz4oV1RGX1BUUlRBR19IQVNIKCN0YWcpKTsgXApAQCAtNzcsOSArODQsMzE1IEBA
IEZPUl9FQUNIX0FERElUSU9OQUxfV1RGX1BUUlRBRyhXVEZfREVDTEEKICNwcmFnbWEgd2Fybmlu
Zyhwb3ApCiAjZW5kaWYKIAotI2lmICFVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCitzdHJ1Y3QgUHRy
VGFnTG9va3VwIHsKKyAgICBjb25zdCBjaGFyKiAoKnRhZ0ZvclB0cikoY29uc3Qgdm9pZCopOwor
ICAgIGNvbnN0IGNoYXIqICgqcHRyVGFnTmFtZSkoUHRyVGFnKTsKKyAgICBQdHJUYWdMb29rdXAq
IG5leHQgeyBudWxscHRyIH07Cit9OworCisjaWYgQ1BVKEFSTTY0RSkKKworZW51bSBjbGFzcyBQ
dHJUYWdBY3Rpb24geworICAgIFJlbGVhc2VBc3NlcnQsCisgICAgRGVidWdBc3NlcnQsCisgICAg
Tm9Bc3NlcnQsCit9OworCitjb25zdGV4cHIgUHRyVGFnIEFueVB0clRhZyA9IHN0YXRpY19jYXN0
PFB0clRhZz4oLTEpOyAvLyBPbmx5IHVzZWQgZm9yIGFzc2VydGlvbiBtZXNzYWdlcy4KKworV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgcmVnaXN0ZXJQdHJUYWdMb29rdXAoUHRyVGFnTG9va3VwKik7
CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRCYWRUYWcoY29uc3Qgdm9pZCosIFB0clRh
ZyBleHBlY3RlZFRhZyk7CisKKyNpZiBBU1NFUlRfRElTQUJMRUQKK2NvbnN0ZXhwciBib29sIGVu
YWJsZVB0clRhZ0RlYnVnQXNzZXJ0ID0gZmFsc2U7CisjZWxzZQorY29uc3RleHByIGJvb2wgZW5h
YmxlUHRyVGFnRGVidWdBc3NlcnQgPSB0cnVlOworI2VuZGlmCisKKyNkZWZpbmUgV1RGX1BUUlRB
R19BU1NFUlQoYWN0aW9uLCBwdHIsIGV4cGVjdGVkVGFnLCBhc3NlcnRpb24pIFwKKyAgICBkbyB7
IFwKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBQdHJUYWdBY3Rpb246OlJlbGVhc2VBc3NlcnQgXAor
ICAgICAgICAgICAgfHwgKFdURjo6ZW5hYmxlUHRyVGFnRGVidWdBc3NlcnQgJiYgYWN0aW9uID09
IFB0clRhZ0FjdGlvbjo6RGVidWdBc3NlcnQpKSB7IFwKKyAgICAgICAgICAgIGJvb2wgcGFzc2Vk
ID0gKGFzc2VydGlvbik7IFwKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcGFzc2VkKSkgeyBc
CisgICAgICAgICAgICAgICAgcmVwb3J0QmFkVGFnKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p
ZCo+KHB0ciksIGV4cGVjdGVkVGFnKTsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChwYXNzZWQgJiYgI2Fzc2VydGlvbik7IFwKKyAgICAgICAgfSBcCisgICAg
fSB3aGlsZSAoZmFsc2UpCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZh
bHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBjb25zdGV4
cHIgVCByZW1vdmVDb2RlUHRyVGFnKFB0clR5cGUgcHRyKQoreworICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8VD4ocHRyYXV0aF9zdHJpcChwdHIsIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50
X2NvZGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIGNv
bnN0ZXhwciBQdHJUeXBlIHJlbW92ZUNvZGVQdHJUYWcoUHRyVHlwZSBwdHIpCit7CisgICAgcmV0
dXJuIHB0cmF1dGhfc3RyaXAocHRyLCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9jb2Rl
KTsKK30KKwordGVtcGxhdGU8UHRyVGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5hbWUgUHRyVHlw
ZT4KK2lubGluZSBQdHJUeXBlIHRhZ0NvZGVQdHJJbXBsKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFn
KQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBXVEZfUFRS
VEFHX0FTU0VSVCh0YWdBY3Rpb24sIHB0ciwgTm9QdHJUYWcsIHJlbW92ZUNvZGVQdHJUYWcocHRy
KSA9PSBwdHIpOworICAgIGlmICh0YWcgPT0gTm9QdHJUYWcpCisgICAgICAgIHJldHVybiBwdHI7
CisgICAgaWYgKHRhZyA9PSBDRnVuY3Rpb25QdHJUYWcpCisgICAgICAgIHJldHVybiBwdHJhdXRo
X3NpZ25fdW5hdXRoZW50aWNhdGVkKHB0ciwgcHRyYXV0aF9rZXlfZnVuY3Rpb25fcG9pbnRlciwg
MCk7CisgICAgcmV0dXJuIHB0cmF1dGhfc2lnbl91bmF1dGhlbnRpY2F0ZWQocHRyLCBwdHJhdXRo
X2tleV9wcm9jZXNzX2RlcGVuZGVudF9jb2RlLCB0YWcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2
YWx1ZT4+CitpbmxpbmUgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQorewor
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpE
ZWJ1Z0Fzc2VydD4ocHRyLCB0YWcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgUHRyVGFn
IHRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFQgdGFnQ29kZVB0cihQdHJUeXBl
IHB0cikKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRhZ0NvZGVQdHJJbXBsPFB0clRh
Z0FjdGlvbjo6RGVidWdBc3NlcnQ+KHB0ciwgdGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRy
VHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0
clRhZyB0YWcpCit7CisgICAgcmV0dXJuIHRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6RGVi
dWdBc3NlcnQ+KHB0ciwgdGFnKTsKK30KKwordGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUg
UHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJU
eXBlPjo6dmFsdWU+PgoraW5saW5lIFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBlIHB0cikgeyBy
ZXR1cm4gdGFnQ29kZVB0cihwdHIsIHRhZyk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlw
ZT4KK2lubGluZSBQdHJUeXBlIHVudGFnQ29kZVB0ckltcGxIZWxwZXIoUHRyVHlwZSBwdHIsIFB0
clRhZyB0YWcpCit7CisgICAgaWYgKHRhZyA9PSBOb1B0clRhZykKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICBpZiAodGFnID09IENGdW5jdGlvblB0clRhZykKKyAgICAgICAgcmV0dXJuIF9fYnVp
bHRpbl9wdHJhdXRoX2F1dGgocHRyLCBwdHJhdXRoX2tleV9mdW5jdGlvbl9wb2ludGVyLCAwKTsK
KyAgICByZXR1cm4gX19idWlsdGluX3B0cmF1dGhfYXV0aChwdHIsIHB0cmF1dGhfa2V5X3Byb2Nl
c3NfZGVwZW5kZW50X2NvZGUsIHRhZyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZ0FjdGlvbiB0YWdB
Y3Rpb24sIHR5cGVuYW1lIFB0clR5cGU+CitpbmxpbmUgUHRyVHlwZSB1bnRhZ0NvZGVQdHJJbXBs
KFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBQdHJUeXBlIHJlc3VsdCA9IHVudGFnQ29kZVB0ckltcGxIZWxwZXIo
cHRyLCB0YWcpOworICAgIFdURl9QVFJUQUdfQVNTRVJUKHRhZ0FjdGlvbiwgcHRyLCB0YWcsIHJl
bW92ZUNvZGVQdHJUYWcocHRyKSA9PSByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3Nh
bWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ29kZVB0cihQdHJUeXBlIHB0
ciwgUHRyVGFnIHRhZykKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHVudGFnQ29kZVB0
ckltcGw8UHRyVGFnQWN0aW9uOjpSZWxlYXNlQXNzZXJ0PihwdHIsIHRhZykpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+Citpbmxp
bmUgVCB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpCit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUPih1bnRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydD4ocHRyLCB0
YWcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFB0clR5
cGUgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQoreworICAgIHJldHVybiB1
bnRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydD4ocHRyLCB0YWcpOwor
fQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUg
UHRyVHlwZSB1bnRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHVudGFnQ29kZVB0cihw
dHIsIHRhZyk7IH0KKwordGVtcGxhdGU8UHRyVGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5hbWUg
UHRyVHlwZT4KK2lubGluZSBQdHJUeXBlIHJldGFnQ29kZVB0ckltcGxIZWxwZXIoUHRyVHlwZSBw
dHIsIFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpCit7CisgICAgaWYgKG9sZFRhZyA9PSBu
ZXdUYWcgfHwgKG9sZFRhZyA9PSBOb1B0clRhZyAmJiBuZXdUYWcgPT0gTm9QdHJUYWcpKQorICAg
ICAgICByZXR1cm4gcHRyOworICAgIGlmIChuZXdUYWcgPT0gTm9QdHJUYWcpCisgICAgICAgIHJl
dHVybiB1bnRhZ0NvZGVQdHJJbXBsPHRhZ0FjdGlvbj4ocHRyLCBvbGRUYWcpOworICAgIGlmIChv
bGRUYWcgPT0gTm9QdHJUYWcpCisgICAgICAgIHJldHVybiB0YWdDb2RlUHRySW1wbDx0YWdBY3Rp
b24+KHB0ciwgbmV3VGFnKTsKKyAgICBpZiAob2xkVGFnID09IENGdW5jdGlvblB0clRhZykKKyAg
ICAgICAgcmV0dXJuIHB0cmF1dGhfYXV0aF9hbmRfcmVzaWduKHB0ciwgcHRyYXV0aF9rZXlfZnVu
Y3Rpb25fcG9pbnRlciwgMCwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfY29kZSwgbmV3
VGFnKTsKKyAgICBpZiAobmV3VGFnID09IENGdW5jdGlvblB0clRhZykKKyAgICAgICAgcmV0dXJu
IHB0cmF1dGhfYXV0aF9hbmRfcmVzaWduKHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRl
bnRfY29kZSwgb2xkVGFnLCBwdHJhdXRoX2tleV9mdW5jdGlvbl9wb2ludGVyLCAwKTsKKyAgICBy
ZXR1cm4gcHRyYXV0aF9hdXRoX2FuZF9yZXNpZ24ocHRyLCBwdHJhdXRoX2tleV9wcm9jZXNzX2Rl
cGVuZGVudF9jb2RlLCBvbGRUYWcsIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2NvZGUs
IG5ld1RhZyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZ0FjdGlvbiB0YWdBY3Rpb24sIHR5cGVuYW1l
IFB0clR5cGU+CitpbmxpbmUgUHRyVHlwZSByZXRhZ0NvZGVQdHJJbXBsKFB0clR5cGUgcHRyLCBQ
dHJUYWcgb2xkVGFnLCBQdHJUYWcgbmV3VGFnKQoreworICAgIGlmICghcHRyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBQdHJUYWdBY3Rpb24gdW50YWdBY3Rpb24gPSAodGFnQWN0aW9u
ID09IFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQpID8gUHRyVGFnQWN0aW9uOjpOb0Fzc2VydCA6IFB0
clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydDsKKyAgICBXVEZfUFRSVEFHX0FTU0VSVCh1bnRhZ0Fj
dGlvbiwgcHRyLCBvbGRUYWcsIHJlbW92ZUNvZGVQdHJUYWcocHRyKSA9PSB1bnRhZ0NvZGVQdHJJ
bXBsPFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHB0ciwgb2xkVGFnKSk7CisgICAgUHRyVHlwZSBy
ZXN1bHQgPSByZXRhZ0NvZGVQdHJJbXBsSGVscGVyPHRhZ0FjdGlvbj4ocHRyLCBvbGRUYWcsIG5l
d1RhZyk7CisgICAgV1RGX1BUUlRBR19BU1NFUlQodGFnQWN0aW9uLCBwdHIsIG5ld1RhZywgcmVz
dWx0ID09IHRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHJlbW92ZUNvZGVQ
dHJUYWcocHRyKSwgbmV3VGFnKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJU
eXBlPjo6dmFsdWU+PgoraW5saW5lIFQgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcg
b2xkVGFnLCBQdHJUYWcgbmV3VGFnKQoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocmV0
YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIG9sZFRhZywgbmV3
VGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZyBvbGRUYWcsIFB0clRhZyBu
ZXdUYWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBUIHJldGFnQ29kZVB0cihQdHJU
eXBlIHB0cikKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHJldGFnQ29kZVB0ckltcGw8
UHRyVGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4ocHRyLCBvbGRUYWcsIG5ld1RhZykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSByZXRhZ0NvZGVQ
dHIoUHRyVHlwZSBwdHIsIFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcpCit7CisgICAgcmV0
dXJuIHJldGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4ocHRyLCBvbGRU
YWcsIG5ld1RhZyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcs
IHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHJldGFnQ29kZVB0cihQdHJU
eXBlIHB0cikgeyByZXR1cm4gcmV0YWdDb2RlUHRyKHB0ciwgb2xkVGFnLCBuZXdUYWcpOyB9CiAK
LWlubGluZSBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCopIHsgcmV0dXJuICI8bm8g
dGFnPiI7IH0KK3RlbXBsYXRlPFB0clRhZ0FjdGlvbiB0YWdBY3Rpb24sIHR5cGVuYW1lIFB0clR5
cGU+CitpbmxpbmUgUHRyVHlwZSB0YWdDRnVuY3Rpb25QdHJJbXBsKFB0clR5cGUgcHRyLCBQdHJU
YWcgdGFnKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBX
VEZfUFRSVEFHX0FTU0VSVCh0YWdBY3Rpb24sIHB0ciwgQ0Z1bmN0aW9uUHRyVGFnLCByZW1vdmVD
b2RlUHRyVGFnKHB0cikgPT0gdW50YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0
PihwdHIsIENGdW5jdGlvblB0clRhZykpOworICAgIHJldHVybiByZXRhZ0NvZGVQdHJJbXBsPHRh
Z0FjdGlvbj4ocHRyLCBDRnVuY3Rpb25QdHJUYWcsIHRhZyk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46
OnZhbHVlPj4KK2lubGluZSBUIHRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRyVGFnIHRh
ZykKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHRhZ0NGdW5jdGlvblB0ckltcGw8UHRy
VGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4ocHRyLCB0YWcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgUHRyVGFnIHRhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFQgdGFnQ0Z1
bmN0aW9uUHRyKFB0clR5cGUgcHRyKQoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odGFn
Q0Z1bmN0aW9uUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIHRhZykpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB0YWdD
RnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgcmV0dXJuIHRhZ0NG
dW5jdGlvblB0ckltcGw8UHRyVGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4ocHRyLCB0YWcpOworfQor
Cit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRy
VHlwZSB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIpIHsgcmV0dXJuIHRhZ0NGdW5jdGlvblB0
cihwdHIsIHRhZyk7IH0KKwordGVtcGxhdGU8UHRyVGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5h
bWUgUHRyVHlwZT4KK2lubGluZSBQdHJUeXBlIHVudGFnQ0Z1bmN0aW9uUHRySW1wbChQdHJUeXBl
IHB0ciwgUHRyVGFnIHRhZykKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgV1RGX1BUUlRBR19BU1NFUlQodGFnQWN0aW9uLCBwdHIsIHRhZywgcmVtb3ZlQ29k
ZVB0clRhZyhwdHIpID09IHVudGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpOb0Fzc2VydD4o
cHRyLCB0YWcpKTsKKyAgICByZXR1cm4gcmV0YWdDb2RlUHRySW1wbDx0YWdBY3Rpb24+KHB0ciwg
dGFnLCBDRnVuY3Rpb25QdHJUYWcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0
clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+Citpbmxp
bmUgVCB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0ciwgUHRyVGFnIHRhZykKK3sKKyAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHVudGFnQ0Z1bmN0aW9uUHRySW1wbDxQdHJUYWdBY3Rpb246
OkRlYnVnQXNzZXJ0PihwdHIsIHRhZykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJU
YWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1bnRhZ0NGdW5jdGlvblB0
cihQdHJUeXBlIHB0cikKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHVudGFnQ0Z1bmN0
aW9uUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIHRhZykpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcgdGFnLCBQdHJUYWdBY3Rpb24gdGFnQWN0aW9uLCB0
eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2lu
dGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB1bnRhZ0NGdW5jdGlvblB0cihQdHJUeXBl
IHB0cikKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHVudGFnQ0Z1bmN0aW9uUHRySW1w
bDx0YWdBY3Rpb24+KHB0ciwgdGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZh
bHVlPj4KK2lubGluZSBQdHJUeXBlIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJU
YWcgdGFnKQoreworICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0ckltcGw8UHRyVGFnQWN0aW9u
OjpEZWJ1Z0Fzc2VydD4ocHRyLCB0YWcpOworfQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBl
bmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVy
PFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB1bnRhZ0NGdW5jdGlvblB0cihQdHJU
eXBlIHB0cikgeyByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHIocHRyLCB0YWcpOyB9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBJbnRUeXBlPgoraW5saW5lIEludFR5cGUgdGFnSW50KEludFR5cGUgcHRy
SW50LCBQdHJUYWcgdGFnKQoreworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEludFR5cGUpID09
IHNpemVvZih1aW50cHRyX3QpLCAiIik7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxJbnRUeXBl
PihwdHJhdXRoX3NpZ25fdW5hdXRoZW50aWNhdGVkKGJpdHdpc2VfY2FzdDx2b2lkKj4ocHRySW50
KSwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfZGF0YSwgdGFnKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFB0clR5cGU+Cit2b2lkIGFzc2VydElzQ0Z1bmN0aW9uUHRyKFB0clR5cGUg
dmFsdWUpCit7CisgICAgdm9pZCogcHRyID0gYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSk7Cisg
ICAgV1RGX1BUUlRBR19BU1NFUlQoUHRyVGFnQWN0aW9uOjpSZWxlYXNlQXNzZXJ0LCBwdHIsIENG
dW5jdGlvblB0clRhZywgdW50YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0Pihw
dHIsIENGdW5jdGlvblB0clRhZykgPT0gcmVtb3ZlQ29kZVB0clRhZyhwdHIpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4KK3ZvaWQgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIo
UHRyVHlwZSBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25Q
dHIocHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4KK3ZvaWQgYXNzZXJ0SXNO
b3RUYWdnZWQoUHRyVHlwZSB2YWx1ZSkKK3sKKyAgICB2b2lkKiBwdHIgPSBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHZhbHVlKTsKKyAgICBXVEZfUFRSVEFHX0FTU0VSVChQdHJUYWdBY3Rpb246OlJlbGVh
c2VBc3NlcnQsIHB0ciwgTm9QdHJUYWcsIHB0ciA9PSByZW1vdmVDb2RlUHRyVGFnKHB0cikpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPgordm9pZCBhc3NlcnRJc1RhZ2dlZChQdHJU
eXBlIHZhbHVlKQoreworICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUp
OworICAgIFdURl9QVFJUQUdfQVNTRVJUKFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydCwgcHRy
LCBBbnlQdHJUYWcsIHB0ciAhPSByZW1vdmVDb2RlUHRyVGFnKHB0cikpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlPgordm9pZCBhc3NlcnRJc051bGxPclRhZ2dlZChQdHJUeXBlIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBhc3NlcnRJc1RhZ2dlZChwdHIpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPgorYm9vbCBpc1RhZ2dlZFdpdGgoUHRyVHlwZSB2YWx1
ZSwgUHRyVGFnIHRhZykKK3sKKyAgICB2b2lkKiBwdHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZh
bHVlKTsKKyAgICBpZiAodGFnID09IE5vUHRyVGFnKQorICAgICAgICByZXR1cm4gcHRyID09IHJl
bW92ZUNvZGVQdHJUYWcocHRyKTsKKyAgICByZXR1cm4gdW50YWdDb2RlUHRySW1wbDxQdHJUYWdB
Y3Rpb246Ok5vQXNzZXJ0PihwdHIsIHRhZykgPT0gcmVtb3ZlQ29kZVB0clRhZyhwdHIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPgordm9pZCBhc3NlcnRJc1RhZ2dlZFdpdGgoUHRy
VHlwZSB2YWx1ZSwgUHRyVGFnIHRhZykKK3sKKyAgICBXVEZfUFRSVEFHX0FTU0VSVChQdHJUYWdB
Y3Rpb246OlJlbGVhc2VBc3NlcnQsIHZhbHVlLCB0YWcsIGlzVGFnZ2VkV2l0aCh2YWx1ZSwgdGFn
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+Cit2b2lkIGFzc2VydElzTnVsbE9y
VGFnZ2VkV2l0aChQdHJUeXBlIHB0ciwgUHRyVGFnIHRhZykKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocHRyLCB0YWcpOworfQorCitpbmxpbmUgYm9vbCB1c2Vz
UG9pbnRlclRhZ2dpbmcoKSB7IHJldHVybiB0cnVlOyB9CisKKyNlbHNlIC8vIG5vdCBDUFUoQVJN
NjRFKQorCitpbmxpbmUgdm9pZCByZWdpc3RlclB0clRhZ0xvb2t1cChQdHJUYWdMb29rdXAqKSB7
IH0KK2lubGluZSB2b2lkIHJlcG9ydEJhZFRhZyhjb25zdCB2b2lkKiwgUHRyVGFnKSB7IH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxULCBQdHJUeXBlPjo6dmFsdWU+PgogY29uc3RleHByIFQgdGFnQ29kZVB0cihQdHJUeXBlIHB0
ciwgUHRyVGFnKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4ocHRyKTsgfQpAQCAtMTY4LDIyICs0
ODEsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4gdm9pZCBhc3NlcnRJcwogCiBpbmxp
bmUgYm9vbCB1c2VzUG9pbnRlclRhZ2dpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogCi0jZGVmaW5l
IENBTExfV0lUSF9QVFJUQUcoY2FsbEluc3RydWN0aW9uU3RyaW5nLCB0YXJnZXRSZWdpc3RlclN0
cmluZywgdGFnKSBcCi0gICAgY2FsbEluc3RydWN0aW9uU3RyaW5nICIgIiB0YXJnZXRSZWdpc3Rl
clN0cmluZyAiXG4iCi0KLSNlbmRpZiAvLyAhVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2VuZGlm
IC8vIENQVShBUk02NEUpCiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OkNGdW5j
dGlvblB0clRhZzsKIHVzaW5nIFdURjo6Tm9QdHJUYWc7Cit1c2luZyBXVEY6OlBsYXRmb3JtUmVn
aXN0ZXJzTFJQdHJUYWc7Cit1c2luZyBXVEY6OlBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWc7CiB1
c2luZyBXVEY6OlB0clRhZzsKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIF9faGFz
X2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9QdHJUYWdTdXBwb3J0Lmg+KQotI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9QdHJUYWdTdXBwb3J0Lmg+Ci0jZW5kaWYKLQotdXNpbmcgV1RGOjp0YWdG
b3JQdHI7Cit1c2luZyBXVEY6OnJlcG9ydEJhZFRhZzsKIAogdXNpbmcgV1RGOjp0YWdDb2RlUHRy
OwogdXNpbmcgV1RGOjp1bnRhZ0NvZGVQdHI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365378</attachid>
            <date>2019-03-20 11:58:35 -0700</date>
            <delta_ts>2019-03-20 12:03:26 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-196012.patch</filename>
            <type>text/plain</type>
            <size>88356</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzMjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxOS0wMy0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
T3BlbiBzb3VyY2UgYXJtNjRlIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTYwMTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ5MDY2MjM3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmVuY29kZUdyb3VwMSk6CisgICAgICAgIChKU0M6
OkFSTTY0RUFzc2VtYmxlcjo6ZW5jb2RlR3JvdXAyKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNz
ZW1ibGVyOjplbmNvZGVHcm91cDQpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnBh
Y2lhMTcxNik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6cGFjaWIxNzE2KToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRpYTE3MTYpOgorICAgICAgICAoSlNDOjpB
Uk02NEVBc3NlbWJsZXI6OmF1dGliMTcxNik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxl
cjo6cGFjaWF6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYXNwKToKKyAg
ICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYnopOgorICAgICAgICAoSlNDOjpBUk02
NEVBc3NlbWJsZXI6OnBhY2lic3ApOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmF1
dGlheik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWFzcCk6CisgICAgICAg
IChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWJ6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNz
ZW1ibGVyOjphdXRpYnNwKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjp4cGFjbHJp
KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNpYSk6CisgICAgICAgIChKU0M6
OkFSTTY0RUFzc2VtYmxlcjo6cGFjaWIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6
OnBhY2RhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNkYik6CisgICAgICAg
IChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0aWEpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3Nl
bWJsZXI6OmF1dGliKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRkYSk6Cisg
ICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6YXV0ZGIpOgorICAgICAgICAoSlNDOjpBUk02
NEVBc3NlbWJsZXI6OnBhY2l6YSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6cGFj
aXpiKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpwYWNkemEpOgorICAgICAgICAo
SlNDOjpBUk02NEVBc3NlbWJsZXI6OnBhY2R6Yik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2Vt
Ymxlcjo6YXV0aXphKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjphdXRpemIpOgor
ICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmF1dGR6YSk6CisgICAgICAgIChKU0M6OkFS
TTY0RUFzc2VtYmxlcjo6YXV0ZHpiKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjp4
cGFjaSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6eHBhY2QpOgorICAgICAgICAo
SlNDOjpBUk02NEVBc3NlbWJsZXI6OnBhY2dhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1i
bGVyOjpicmFhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpicmFiKToKKyAgICAg
ICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpibHJhYSk6CisgICAgICAgIChKU0M6OkFSTTY0RUFz
c2VtYmxlcjo6YmxyYWIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmJyYWF6KToK
KyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpicmFieik6CisgICAgICAgIChKU0M6OkFS
TTY0RUFzc2VtYmxlcjo6YmxyYWF6KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpi
bHJhYnopOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnJldGFhKToKKyAgICAgICAg
KEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpyZXRhYik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2Vt
Ymxlcjo6ZXJldGFhKToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjplcmV0YWIpOgor
ICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QVJNNjRFQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAgICAgIChKU0M6OkFSTTY0
RUFzc2VtYmxlcjo6c2V0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkFSTTY0RUFzc2VtYmxlcjo6
cmVhZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk02NEVBc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KToKKyAgICAgICAgKEpTQzo6QVJNNjRFQXNzZW1ibGVyOjpyZXQpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3BwOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnRhZ1JldHVybkFkZHJlc3MpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnRhZ1B0cik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ1B0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjRFOjpyZW1vdmVQdHJUYWcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTY0RTo6Y2FsbFRydXN0ZWRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjpjYWxsUmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6anVtcCk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENh
bGxGcmFtZXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAqIGZ0
bC9GVExUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyaWNHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAgICAgICAgKEpT
Qzo6Q0NhbGxIZWxwZXJzOjpwcmVwYXJlRm9yVGFpbENhbGxTbG93KToKKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
cHJlcGFyZUZvclRhaWxDYWxsKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdl
bmVyYXRvcik6CisgICAgICAgICogbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmg6CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDUHRyVGFnLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OnRhZ0ZvclB0cik6CisgICAgICAgIChKU0M6OnB0clRhZ05h
bWUpOgorICAgICAgICAoSlNDOjppbml0aWFsaXplUHRyVGFnTG9va3VwKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQ1B0clRhZy5oOgorICAgICAgICAoSlNDOjppbml0aWFsaXplUHRyVGFnTG9va3Vw
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKToKKwogMjAxOS0wMy0yMCAgRGV2aW4gUm91c3NvICA8ZHJvdXNz
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU2VhcmNoOiBhbGxvdyBET00g
c2VhcmNoZXMgdG8gYmUgY2FzZSBzZW5zaXRpdmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODAyLDYgKzgwMiw3IEBAIHJ1bnRpbWUvSlNBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLmNwcAogcnVudGltZS9KU0JpZ0ludC5jcHAKIHJ1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcAogcnVudGltZS9KU0NKU1ZhbHVlLmNwcAorcnVudGltZS9KU0NQdHJUYWcu
Y3BwCiBydW50aW1lL0pTQ2FsbGVlLmNwcAogcnVudGltZS9KU0NlbGwuY3BwCiBydW50aW1lL0pT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4
MDgsNiArMTgwOCw4IEBACiAJCUZFMUJEMDIxMUU3MjAyNzkwMDEzNEJDOSAvKiBDZWxsUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQkQw
MjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi87IH07CiAJCUZFMUJEMDI1MUU3
MjA1MzgwMDEzNEJDOSAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUJEMDIzMUU3MjA1MkYwMDEzNEJDOSAvKiBIZWFwVmVy
aWZpZXIuaCAqLzsgfTsKIAkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkMx
QjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFMUUyQzNGMjI0MERENTgwMEY2QjcyOSAvKiBNYWNy
b0Fzc2VtYmxlckFSTTY0RS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRF
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkUx
RTJDNDAyMjQwREQ2MjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDM0QyMjQwRDJGNjAwRjZCNzI5
IC8qIEFSTTY0RUFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMkE4NzYwMUYwMjM4MTYwMEVCMzFCMiAvKiBNaW5p
bXVtUmVzZXJ2ZWRab25lU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyQTg3NUYxRjAyMzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpv
bmVTaXplLmggKi87IH07CiAJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFz
aEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODE2LDYgKzQ4
MTgsOSBAQAogCQlGRTFCRDAyMzFFNzIwNTJGMDAxMzRCQzkgLyogSGVhcFZlcmlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMUUyQzNDMjI0MEMxRUYwMEY2Qjcy
OSAvKiBKU0NQdHJUYWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDUHRyVGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxRTJDM0QyMjQw
RDJGNjAwRjZCNzI5IC8qIEFSTTY0RUFzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBUk02NEVBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkUxRTJDM0UyMjQwRDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjRFLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBM
TEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50
Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50
L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyQTg3NUYxRjAy
MzgxNjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02ODY3LDYgKzY4NzIsNyBAQAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NK
U1ZhbHVlLmNwcCAqLywKIAkJCQkxNEFCQjM2RTA5OUMwNzY0MDBFMkEyNEYgLyogSlNDSlNWYWx1
ZS5oICovLAogCQkJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5l
cy5oICovLAorCQkJCUZFMUUyQzNDMjI0MEMxRUYwMEY2QjcyOSAvKiBKU0NQdHJUYWcuY3BwICov
LAogCQkJCUZFNzQ5N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCAqLywKIAkJCQk3
MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uaCAqLywKQEAgLTc3MDMsNiArNzcwOSw3IEBACiAJCQkJMEYzNzMwOTAxQzBD
RDcwQzAwMDUyQkZBIC8qIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oICovLAogCQkJ
CUFENDEyQjM1MUU3QjU3QzAwMDhBRjE1NyAvKiBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2VJZi5oICovLAogCQkJCTg2NDA5MjNCMTU2RUVEM0IwMDU2NkNCMiAvKiBBUk02NEFzc2VtYmxl
ci5oICovLAorCQkJCUZFMUUyQzNEMjI0MEQyRjYwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIu
aCAqLywKIAkJCQk4NkFERDE0MzBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCAq
LywKIAkJCQk5Njg4Q0IxMzBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi8s
CiAJCQkJODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25z
dGFudFBvb2wuaCAqLywKQEAgLTc3MTYsNiArNzcyMyw3IEBACiAJCQkJODZDMzZFRTkwRUUxMjg5
RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi8sCiAJCQkJRkVCMTM3NTYxQkIxMUVFRTAw
Q0Q1MTAwIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuY3BwICovLAogCQkJCTg2NDA5MjNDMTU2RUVE
M0IwMDU2NkNCMiAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggKi8sCisJCQkJRkUxRTJDM0UyMjQw
RDMwQjAwRjZCNzI5IC8qIE1hY3JvQXNzZW1ibGVyQVJNNjRFLmggKi8sCiAJCQkJQTcyOTAwOUIx
Nzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuY3BwICovLAogCQkJCTg2QURE
MTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggKi8sCiAJCQkJMEY2
REI3RUIxRDYxN0QwRjAwQ0RCRjhFIC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAgKi8sCkBA
IC04NTE0LDYgKzg1MjIsNyBAQAogCQkJCTBGMkM2M0IwMUU2MEFFNDMwMEMxMzgzOSAvKiBCM0Jh
bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTFFMkMzRjIyNDBE
RDU4MDBGNkI3MjkgLyogTWFjcm9Bc3NlbWJsZXJBUk02NEUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtODU5Myw2ICs4NjAyLDcgQEAKIAkJCQkw
RkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NTcwNDExQkU1ODRDQTAwNjJBNjI5IC8qIEIzVGltaW5nU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMUUyQzQwMjI0MERENjIwMEY2QjcyOSAvKiBBUk02NEVBc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDRkRGQkRBMUQxRjVEOUUwMEZFM0Q3MiAvKiBCM1R5cGVN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRFQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEVBc3NlbWJsZXIuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0RUFzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpICYmIENQVShBUk02NEUpCisKKyNpbmNsdWRlICJBUk02NEFzc2VtYmxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQVJNNjRFQXNzZW1ibGVyIDogcHVibGljIEFSTTY0QXNzZW1i
bGVyIHsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgdW51c2Vk
SUQgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigwYjExMTExKTsKKworICAgIC8vIEdyb3VwIDEg
aW5zdHJ1Y3Rpb25zIGZyb20gc2VjdGlvbiAzLjIuMy4xLjEuCisgICAgZW51bSBjbGFzcyBHcm91
cDFPcCB7CisgICAgICAgIFBBQ0lBMTcxNiA9IDBiMDAwMSA8PCA4IHwgMGIwMDAgPDwgNSwKKyAg
ICAgICAgUEFDSUIxNzE2ID0gMGIwMDAxIDw8IDggfCAwYjAxMCA8PCA1LAorICAgICAgICBBVVRJ
QTE3MTYgPSAwYjAwMDEgPDwgOCB8IDBiMTAwIDw8IDUsCisgICAgICAgIEFVVElCMTcxNiA9IDBi
MDAwMSA8PCA4IHwgMGIxMTAgPDwgNSwKKyAgICAgICAgUEFDSUFaICAgID0gMGIwMDExIDw8IDgg
fCAwYjAwMCA8PCA1LAorICAgICAgICBQQUNJQVNQICAgPSAwYjAwMTEgPDwgOCB8IDBiMDAxIDw8
IDUsCisgICAgICAgIFBBQ0lCWiAgICA9IDBiMDAxMSA8PCA4IHwgMGIwMTAgPDwgNSwKKyAgICAg
ICAgUEFDSUJTUCAgID0gMGIwMDExIDw8IDggfCAwYjAxMSA8PCA1LAorICAgICAgICBBVVRJQVog
ICAgPSAwYjAwMTEgPDwgOCB8IDBiMTAwIDw8IDUsCisgICAgICAgIEFVVElBU1AgICA9IDBiMDAx
MSA8PCA4IHwgMGIxMDEgPDwgNSwKKyAgICAgICAgQVVUSUJaICAgID0gMGIwMDExIDw8IDggfCAw
YjExMCA8PCA1LAorICAgICAgICBBVVRJQlNQICAgPSAwYjAwMTEgPDwgOCB8IDBiMTExIDw8IDUs
CisgICAgICAgIFhQQUNMUkkgICA9IDBiMDAwMCA8PCA4IHwgMGIxMTEgPDwgNSwKKyAgICB9Owor
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgaW50IGVuY29kZUdyb3VwMShHcm91cDFPcCBvcCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9wKSB8IDBiMTEwMSA8PCAy
OCB8IDBiMDEwMSA8PCAyNCB8IDBiMDExIDw8IDE2IHwgMGIwMDEwIDw8IDEyIHwgMGIxMTExMTsK
KyAgICB9CisKKyAgICAvLyBHcm91cCAyIGluc3RydWN0aW9ucyBmcm9tIHNlY3Rpb24gMy4yLjMu
MS4xLgorICAgIGVudW0gY2xhc3MgR3JvdXAyT3AgeworICAgICAgICBQQUNJQSAgPSAxIDw8IDMw
IHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAwMDAgPDwgMTAsCisgICAgICAgIFBBQ0lCICA9IDEgPDwg
MzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDAwMSA8PCAxMCwKKyAgICAgICAgUEFDREEgID0gMSA8
PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAwMDEwIDw8IDEwLAorICAgICAgICBQQUNEQiAgPSAx
IDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAwMTEgPDwgMTAsCisgICAgICAgIEFVVElBICA9
IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDEwMCA8PCAxMCwKKyAgICAgICAgQVVUSUIg
ID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAwMTAxIDw8IDEwLAorICAgICAgICBBVVRE
QSAgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDAxMTAgPDwgMTAsCisgICAgICAgIEFV
VERCICA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMDExMSA8PCAxMCwKKyAgICAgICAg
UEFDSVpBID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMDAwIDw8IDEwLAorICAgICAg
ICBQQUNJWkIgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDEwMDEgPDwgMTAsCisgICAg
ICAgIFBBQ0RaQSA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMTAxMCA8PCAxMCwKKyAg
ICAgICAgUEFDRFpCID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMDExIDw8IDEwLAor
ICAgICAgICBBVVRJWkEgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDExMDAgPDwgMTAs
CisgICAgICAgIEFVVElaQiA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIwMTEwMSA8PCAx
MCwKKyAgICAgICAgQVVURFpBID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjAxMTEwIDw8
IDEwLAorICAgICAgICBBVVREWkIgPSAxIDw8IDMwIHwgMGIwMDAwMSA8PCAxNiB8IDBiMDExMTEg
PDwgMTAsCisgICAgICAgIFhQQUNJICA9IDEgPDwgMzAgfCAwYjAwMDAxIDw8IDE2IHwgMGIxMDAw
MCA8PCAxMCwKKyAgICAgICAgWFBBQ0QgID0gMSA8PCAzMCB8IDBiMDAwMDEgPDwgMTYgfCAwYjEw
MDAxIDw8IDEwLAorCisgICAgICAgIFBBQ0dBICA9IDAgPDwgMzAgfCAwYjAxMTAwLAorICAgIH07
CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBpbnQgZW5jb2RlR3JvdXAyKEdyb3VwMk9wIG9w
LCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJtKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChybiAmIDBiMTExMTEpID09IHJuKTsKKyAgICAgICAgQVNTRVJUKChyZCAm
IDBiMTExMTEpID09IHJkKTsKKyAgICAgICAgQVNTRVJUKChybSAmIDBiMTExMTEpID09IHJtKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ob3ApIHwgMSA8PCAzMSB8IDBiMTEwMTAx
MTAgPDwgMjEgfCBybSA8PCAxNiB8IHJuIDw8IDUgfCByZDsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBpbnQgZW5jb2RlR3JvdXAyKEdyb3VwMk9wIG9wLCBSZWdpc3RlcklEIHJu
LCBSZWdpc3RlcklEIHJkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdyb3VwMihvcCwg
cm4sIHJkLCBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigwKSk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgaW50IGVuY29kZUdyb3VwMihHcm91cDJPcCBvcCwgUmVnaXN0ZXJJRCBy
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHcm91cDIob3AsIHVudXNlZElELCByZCk7
CisgICAgfQorCisgICAgLy8gR3JvdXAgNCBpbnN0cnVjdGlvbnMgZnJvbSBzZWN0aW9uIDMuMi4z
LjIuMS4KKyAgICBlbnVtIGNsYXNzIEdyb3VwNE9wIHsKKyAgICAgICAgQlJBQSAgID0gMGIxMDAw
IDw8IDIxIHwgMCA8PCAxMCwKKyAgICAgICAgQlJBQiAgID0gMGIxMDAwIDw8IDIxIHwgMSA8PCAx
MCwKKyAgICAgICAgQkxSQUEgID0gMGIxMDAxIDw8IDIxIHwgMCA8PCAxMCwKKyAgICAgICAgQkxS
QUIgID0gMGIxMDAxIDw8IDIxIHwgMSA8PCAxMCwKKworICAgICAgICBCUkFBWiAgPSAwYjAwMDAg
PDwgMjEgfCAwIDw8IDEwLAorICAgICAgICBCUkFCWiAgPSAwYjAwMDAgPDwgMjEgfCAxIDw8IDEw
LAorICAgICAgICBCTFJBQVogPSAwYjAwMDEgPDwgMjEgfCAwIDw8IDEwLAorICAgICAgICBCTFJB
QlogPSAwYjAwMDEgPDwgMjEgfCAxIDw8IDEwLAorICAgICAgICBSRVRBQSAgPSAwYjAwMTAgPDwg
MjEgfCAwIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBSRVRBQiAgPSAwYjAwMTAgPDwg
MjEgfCAxIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBFUkVUQUEgPSAwYjAxMDAgPDwg
MjEgfCAwIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgICAgICBFUkVUQUIgPSAwYjAxMDAgPDwg
MjEgfCAxIDw8IDEwIHwgMGIxMTExMSA8PCA1LAorICAgIH07CisKKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBpbnQgZW5jb2RlR3JvdXA0KEdyb3VwNE9wIG9wLCBSZWdpc3RlcklEIHJuID0gdW51
c2VkSUQsIFJlZ2lzdGVySUQgcm0gPSB1bnVzZWRJRCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
cm4gJiAwYjExMTExKSA9PSBybik7CisgICAgICAgIEFTU0VSVCgocm0gJiAwYjExMTExKSA9PSBy
bSk7CisgICAgICAgIHJldHVybiAoMGIxMTAxMDExIDw8IDI1IHwgc3RhdGljX2Nhc3Q8aW50Pihv
cCkgfCAwYjExMTExIDw8IDE2IHwgMGIwMDAwMSA8PCAxMSB8IHJuIDw8IDUgfCBybSk7CisgICAg
fQorCitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhMTcxNigpIHsgaW5zbihl
bmNvZGVHcm91cDEoR3JvdXAxT3A6OlBBQ0lBMTcxNikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHBhY2liMTcxNigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OlBBQ0lCMTcxNikp
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGlhMTcxNigpIHsgaW5zbihlbmNvZGVHcm91
cDEoR3JvdXAxT3A6OkFVVElBMTcxNikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGli
MTcxNigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OkFVVElCMTcxNikpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHBhY2lheigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OlBBQ0lBWikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhc3AoKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpQQUNJQVNQKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjaWJ6KCkgeyBpbnNuKGVuY29kZUdyb3VwMShHcm91cDFPcDo6UEFDSUJaKSk7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjaWJzcCgpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OlBBQ0lCU1ApKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpYXooKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpBVVRJQVopKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
dXRpYXNwKCkgeyBpbnNuKGVuY29kZUdyb3VwMShHcm91cDFPcDo6QVVUSUFTUCkpOyB9CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIGF1dGlieigpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6
OkFVVElCWikpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGlic3AoKSB7IGluc24oZW5j
b2RlR3JvdXAxKEdyb3VwMU9wOjpBVVRJQlNQKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
eHBhY2xyaSgpIHsgaW5zbihlbmNvZGVHcm91cDEoR3JvdXAxT3A6OlhQQUNMUkkpKTsgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2lhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4p
CisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDSUEsIHJuLCBy
ZCkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYWNpYihSZWdpc3RlcklEIHJk
LCBSZWdpc3RlcklEIHJuKQorICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAy
T3A6OlBBQ0lCLCBybiwgcmQpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
ZGEoUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIGluc24oZW5j
b2RlR3JvdXAyKEdyb3VwMk9wOjpQQUNEQSwgcm4sIHJkKSk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIHBhY2RiKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4pCisgICAgewor
ICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDREIsIHJuLCByZCkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpYShSZWdpc3RlcklEIHJkLCBSZWdpc3Rl
cklEIHJuKQorICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVElB
LCBybiwgcmQpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXV0aWIoUmVnaXN0
ZXJJRCByZCwgUmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAy
KEdyb3VwMk9wOjpBVVRJQiwgcm4sIHJkKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGF1dGRhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4pCisgICAgeworICAgICAgICBp
bnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6QVVUREEsIHJuLCByZCkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhdXRkYihSZWdpc3RlcklEIHJkLCBSZWdpc3RlcklEIHJuKQor
ICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVERCLCBybiwgcmQp
KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjaXphKFJlZ2lzdGVySUQgcmQp
CisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDSVpBLCByZCkp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYWNpemIoUmVnaXN0ZXJJRCByZCkK
KyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpQQUNJWkIsIHJkKSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2R6YShSZWdpc3RlcklEIHJkKQor
ICAgIHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OlBBQ0RaQSwgcmQpKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjZHpiKFJlZ2lzdGVySUQgcmQpCisg
ICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6UEFDRFpCLCByZCkpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRpemEoUmVnaXN0ZXJJRCByZCkKKyAg
ICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpBVVRJWkEsIHJkKSk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGF1dGl6YihSZWdpc3RlcklEIHJkKQorICAg
IHsKKyAgICAgICAgaW5zbihlbmNvZGVHcm91cDIoR3JvdXAyT3A6OkFVVElaQiwgcmQpKTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXV0ZHphKFJlZ2lzdGVySUQgcmQpCisgICAg
eworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6QVVURFpBLCByZCkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhdXRkemIoUmVnaXN0ZXJJRCByZCkKKyAgICB7
CisgICAgICAgIGluc24oZW5jb2RlR3JvdXAyKEdyb3VwMk9wOjpBVVREWkIsIHJkKSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHhwYWNpKFJlZ2lzdGVySUQgcmQpCisgICAgewor
ICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6WFBBQ0ksIHJkKSk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHhwYWNkKFJlZ2lzdGVySUQgcmQpCisgICAgeworICAg
ICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJPcDo6WFBBQ0QsIHJkKSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHBhY2dhKFJlZ2lzdGVySUQgcmQsIFJlZ2lzdGVySUQgcm4s
IFJlZ2lzdGVySUQgcm0pCisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3VwMihHcm91cDJP
cDo6UEFDR0EsIHJuLCByZCwgcm0pKTsKKyAgICB9CisKKyAgICAvLyBHcm91cCA0IGluc3RydWN0
aW9ucyBmcm9tIHNlY3Rpb24gMy4yLjMuMi4xLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBicmFh
KFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBkaXZlcnNpdHkpCisgICAgeworICAgICAgICBp
bnNuKGVuY29kZUdyb3VwNChHcm91cDRPcDo6QlJBQSwgZGVzdCwgZGl2ZXJzaXR5KSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGJyYWIoUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3Rl
cklEIGRpdmVyc2l0eSkKKyAgICB7CisgICAgICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9w
OjpCUkFCLCBkZXN0LCBkaXZlcnNpdHkpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYmxyYWEoUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIGRpdmVyc2l0eSkKKyAgICB7Cisg
ICAgICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQSwgZGVzdCwgZGl2ZXJzaXR5
KSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscmFiKFJlZ2lzdGVySUQgZGVz
dCwgUmVnaXN0ZXJJRCBkaXZlcnNpdHkpCisgICAgeworICAgICAgICBpbnNuKGVuY29kZUdyb3Vw
NChHcm91cDRPcDo6QkxSQUIsIGRlc3QsIGRpdmVyc2l0eSkpOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBicmFheihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpbnNu
KGVuY29kZUdyb3VwNChHcm91cDRPcDo6QkxSQUFaLCBkZXN0KSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGJyYWJ6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlu
c24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQlosIGRlc3QpKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYmxyYWF6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQVosIGRlc3QpKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyYWJ6KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpCTFJBQlosIGRlc3QpKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV0YWEoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3Vw
NE9wOjpSRVRBQSkpOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJldGFiKCkgeyBpbnNuKGVu
Y29kZUdyb3VwNChHcm91cDRPcDo6UkVUQUIpKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBl
cmV0YWEoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpFUkVUQUEpKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBlcmV0YWIoKSB7IGluc24oZW5jb2RlR3JvdXA0KEdyb3VwNE9wOjpF
UkVUQUIpKTsgfQorCisgICAgLy8gT3ZlcmxvYWQgb2YgdGhlIEFSTTY0IGVxdWl2YWxlbnRzLgor
CisgICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBjYWxsIG91ciBvdmVybG9hZGVkIGxp
bmtQb2ludGVyIGJlbG93LgorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUs
IEFzc2VtYmxlckxhYmVsIHdoZXJlLCB2b2lkKiB2YWx1ZVB0cikKKyAgICB7CisgICAgICAgIGxp
bmtQb2ludGVyKGFkZHJlc3NPZihjb2RlLCB3aGVyZSksIHZhbHVlUHRyKTsKKyAgICB9CisKKyAg
ICAvLyBOZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFkZCB0aGUgYXNzZXJ0IGZvciBhZGRyZXNz
WzNdLCBhbmQgYmVjYXVzZSB3ZSBuZWVkIHRvCisgICAgLy8gY2FsbCBvdXIgb3duIHZlcnNpb24g
b2Ygc2V0UG9pbnRlcigpIGJlbG93LgorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKGludCog
YWRkcmVzcywgdm9pZCogdmFsdWVQdHIsIGJvb2wgZmx1c2ggPSBmYWxzZSkKKyAgICB7CisgICAg
ICAgIERhdGFzaXplIHNmOworICAgICAgICBNb3ZlV2lkZU9wIG9wYzsKKyAgICAgICAgaW50IGh3
OworICAgICAgICB1aW50MTZfdCBpbW0xNjsKKyAgICAgICAgUmVnaXN0ZXJJRCByZDsKKyAgICAg
ICAgYm9vbCBleHBlY3RlZCA9IGRpc2Fzc2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShhZGRyZXNzLCBz
Ziwgb3BjLCBodywgaW1tMTYsIHJkKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChleHBlY3RlZCwg
ZXhwZWN0ZWQgJiYgc2YgJiYgb3BjID09IE1vdmVXaWRlT3BfWiAmJiAhaHcpOworICAgICAgICBB
U1NFUlQoY2hlY2tNb3ZrPERhdGFzaXplXzY0PihhZGRyZXNzWzFdLCAxLCByZCkpOworICAgICAg
ICBBU1NFUlQoY2hlY2tNb3ZrPERhdGFzaXplXzY0PihhZGRyZXNzWzJdLCAyLCByZCkpOworICAg
ICAgICBpZiAoTlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5TVFJVQ1RJT05TID4gMykKKyAg
ICAgICAgICAgIEFTU0VSVChjaGVja01vdms8RGF0YXNpemVfNjQ+KGFkZHJlc3NbM10sIDMsIHJk
KSk7CisKKyAgICAgICAgc2V0UG9pbnRlcihhZGRyZXNzLCB2YWx1ZVB0ciwgcmQsIGZsdXNoKTsK
KyAgICB9CisKKyAgICAvLyBOZWVkZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGNhbGwgb3VyIG92ZXJs
b2FkZWQgbGlua1BvaW50ZXIgYWJvdmUuCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIo
dm9pZCogd2hlcmUsIHZvaWQqIHZhbHVlUHRyKQorICAgIHsKKyAgICAgICAgbGlua1BvaW50ZXIo
c3RhdGljX2Nhc3Q8aW50Kj4od2hlcmUpLCB2YWx1ZVB0ciwgdHJ1ZSk7CisgICAgfQorCisgICAg
Ly8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXQgYnVmZmVyWzNdOiBzaWduZWQgcG9pbnRl
cnMgdGFrZSB1cCBtb3JlIHRoYW4gNDggYml0cy4KKyAgICBzdGF0aWMgdm9pZCBzZXRQb2ludGVy
KGludCogYWRkcmVzcywgdm9pZCogdmFsdWVQdHIsIFJlZ2lzdGVySUQgcmQsIGJvb2wgZmx1c2gp
CisgICAgeworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odmFsdWVQdHIpOworICAgICAgICBpbnQgYnVmZmVyWzRdOworICAgICAgICBidWZmZXJb
MF0gPSBtb3ZlV2lkZUltZWRpYXRlKERhdGFzaXplXzY0LCBNb3ZlV2lkZU9wX1osIDAsIGdldEhh
bGZ3b3JkKHZhbHVlLCAwKSwgcmQpOworICAgICAgICBidWZmZXJbMV0gPSBtb3ZlV2lkZUltZWRp
YXRlKERhdGFzaXplXzY0LCBNb3ZlV2lkZU9wX0ssIDEsIGdldEhhbGZ3b3JkKHZhbHVlLCAxKSwg
cmQpOworICAgICAgICBidWZmZXJbMl0gPSBtb3ZlV2lkZUltZWRpYXRlKERhdGFzaXplXzY0LCBN
b3ZlV2lkZU9wX0ssIDIsIGdldEhhbGZ3b3JkKHZhbHVlLCAyKSwgcmQpOworICAgICAgICBpZiAo
TlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5TVFJVQ1RJT05TID4gMykKKyAgICAgICAgICAg
IGJ1ZmZlclszXSA9IG1vdmVXaWRlSW1lZGlhdGUoRGF0YXNpemVfNjQsIE1vdmVXaWRlT3BfSywg
MywgZ2V0SGFsZndvcmQodmFsdWUsIDMpLCByZCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJv
dW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihhZGRyZXNzKSA9PSBhZGRyZXNzKTsK
KyAgICAgICAgcGVyZm9ybUpJVE1lbWNweShhZGRyZXNzLCBidWZmZXIsIHNpemVvZihpbnQpICog
NCk7CisKKyAgICAgICAgaWYgKGZsdXNoKQorICAgICAgICAgICAgY2FjaGVGbHVzaChhZGRyZXNz
LCBzaXplb2YoaW50KSAqIDQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiByZWFkUG9pbnRl
cih2b2lkKiB3aGVyZSkKKyAgICB7CisgICAgICAgIGludCogYWRkcmVzcyA9IHN0YXRpY19jYXN0
PGludCo+KHdoZXJlKTsKKworICAgICAgICBEYXRhc2l6ZSBzZjsKKyAgICAgICAgTW92ZVdpZGVP
cCBvcGM7CisgICAgICAgIGludCBodzsKKyAgICAgICAgdWludDE2X3QgaW1tMTY7CisgICAgICAg
IFJlZ2lzdGVySUQgcmRGaXJzdCwgcmQ7CisKKyAgICAgICAgYm9vbCBleHBlY3RlZCA9IGRpc2Fz
c2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShhZGRyZXNzLCBzZiwgb3BjLCBodywgaW1tMTYsIHJkRmly
c3QpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cGVjdGVkLCBleHBlY3RlZCAmJiBzZiAmJiBv
cGMgPT0gTW92ZVdpZGVPcF9aICYmICFodyk7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBp
bW0xNjsKKworICAgICAgICBleHBlY3RlZCA9IGRpc2Fzc2VtYmxlTW92ZVdpZGVJbWVkaWF0ZShh
ZGRyZXNzICsgMSwgc2YsIG9wYywgaHcsIGltbTE2LCByZCk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoZXhwZWN0ZWQsIGV4cGVjdGVkICYmIHNmICYmIG9wYyA9PSBNb3ZlV2lkZU9wX0sgJiYgaHcg
PT0gMSAmJiByZCA9PSByZEZpcnN0KTsKKyAgICAgICAgcmVzdWx0IHw9IHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oaW1tMTYpIDw8IDE2OworCisgICAgICAgIGV4cGVjdGVkID0gZGlzYXNzZW1ibGVN
b3ZlV2lkZUltZWRpYXRlKGFkZHJlc3MgKyAyLCBzZiwgb3BjLCBodywgaW1tMTYsIHJkKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChleHBlY3RlZCwgZXhwZWN0ZWQgJiYgc2YgJiYgb3BjID09IE1v
dmVXaWRlT3BfSyAmJiBodyA9PSAyICYmIHJkID09IHJkRmlyc3QpOworICAgICAgICByZXN1bHQg
fD0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbW0xNikgPDwgMzI7CisKKyAgICAgICAgaWYgKE5V
TUJFUl9PRl9BRERSRVNTX0VOQ09ESU5HX0lOU1RSVUNUSU9OUyA+IDMpIHsKKyAgICAgICAgICAg
IGV4cGVjdGVkID0gZGlzYXNzZW1ibGVNb3ZlV2lkZUltZWRpYXRlKGFkZHJlc3MgKyAzLCBzZiwg
b3BjLCBodywgaW1tMTYsIHJkKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwZWN0ZWQs
IGV4cGVjdGVkICYmIHNmICYmIG9wYyA9PSBNb3ZlV2lkZU9wX0sgJiYgaHcgPT0gMyAmJiByZCA9
PSByZEZpcnN0KTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGltbTE2KSA8PCA0ODsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZXN1bHQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiByZWFkQ2FsbFRh
cmdldCh2b2lkKiBmcm9tKQorICAgIHsKKyAgICAgICAgY29uc3RleHByIHB0cmRpZmZfdCBjYWxs
SW5zdHJ1Y3Rpb24gPSAxOworICAgICAgICByZXR1cm4gcmVhZFBvaW50ZXIocmVpbnRlcnByZXRf
Y2FzdDxpbnQqPihmcm9tKSAtIGNhbGxJbnN0cnVjdGlvbiAtIE5VTUJFUl9PRl9BRERSRVNTX0VO
Q09ESU5HX0lOU1RSVUNUSU9OUyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJl
dCgpIHsgcmV0YWIoKTsgfQorCisgICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBjYWxs
IG91ciBvdmVybG9hZGVkIHJldCgpIGFib3ZlLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXQo
UmVnaXN0ZXJJRCBybikKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJuID09IEFSTTY0
UmVnaXN0ZXJzOjpscik7CisgICAgICAgIHJldCgpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgcHRyZGlmZl90IE1BWF9QT0lOVEVSX0JJVFMgPSA2NDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHB0cmRpZmZfdCBCSVRTX0VOQ09ERUFCTEVfUEVSX0lOU1RSVUNUSU9OID0gMTY7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgTlVNQkVSX09GX0FERFJFU1NfRU5DT0RJTkdfSU5T
VFJVQ1RJT05TID0gTUFYX1BPSU5URVJfQklUUyAvIEJJVFNfRU5DT0RFQUJMRV9QRVJfSU5TVFJV
Q1RJT047Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpICYmIENQVShBUk02NEUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMywxMCArMzMsNiBAQAogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspICYmIF9faGFzX2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlclN1cHBv
cnQuaD4pCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL01hY3JvQXNzZW1ibGVyU3VwcG9ydC5o
PgotI2VuZGlmCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTAgKzM1LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJBUk12Ny5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJB
Uk12NyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKLSNlbGlmIENQVShBUk02NEUpICYmIF9faGFz
X2luY2x1ZGUoPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oPikKKyNlbGlm
IENQVShBUk02NEUpCiAjZGVmaW5lIFRBUkdFVF9BU1NFTUJMRVIgQVJNNjRFQXNzZW1ibGVyCiAj
ZGVmaW5lIFRBUkdFVF9NQUNST0FTU0VNQkxFUiBNYWNyb0Fzc2VtYmxlckFSTTY0RQotI2luY2x1
ZGUgPFdlYktpdEFkZGl0aW9ucy9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oPgorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQVJNNjRFLmgiCiAKICNlbGlmIENQVShBUk02NCkKICNkZWZpbmUgVEFSR0VU
X0FTU0VNQkxFUiBBUk02NEFzc2VtYmxlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuY3BwCShyZXZpc2lvbiAy
NDMyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgxLDcgKzM4MSwxMSBAQCBhc20gKAogICAg
IC8vIE5vdGU6IHdlIGhhdmVuJ3QgY2hhbmdlZCB0aGUgdmFsdWUgb2YgZnAuIEhlbmNlLCBpdCBp
cyBzdGlsbCBwb2ludGluZyB0byB0aGUgZnJhbWUgb2YKICAgICAvLyB0aGUgY2FsbGVyIG9mIHRo
ZSBwcm9iZSAod2hpY2ggaXMgd2hhdCB3ZSB3YW50IGluIG9yZGVyIHRvIHBsYXkgbmljZSB3aXRo
IGRlYnVnZ2VycyBlLmcuIGxsZGIpLgogICAgICJtb3YgICAgICAgeDAsIHNwIiAiXG4iIC8vIFNl
dCB0aGUgUHJvYmU6OlN0YXRlKiBhcmcuCi0gICAgQ0FMTF9XSVRIX1BUUlRBRygiYmxyIiwgIngy
OCIsIENGdW5jdGlvblB0clRhZykgLy8gQ2FsbCB0aGUgcHJvYmUgaGFuZGxlci4KKyNpZiBDUFUo
QVJNNjRFKQorICAgICJibHJhYXogICAgeDI4IiAiXG4iIC8vIENhbGwgdGhlIHByb2JlIGhhbmRs
ZXIuCisjZWxzZQorICAgICJibHIgICAgICAgeDI4IiAiXG4iIC8vIENhbGwgdGhlIHByb2JlIGhh
bmRsZXIuCisjZW5kaWYKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgUHJvYmU6OlN0YXRlIGlzIGVu
dGlyZWx5IGJlbG93IHRoZSByZXN1bHQgc3RhY2sgcG9pbnRlciBzbwogICAgIC8vIHRoYXQgcmVn
aXN0ZXIgdmFsdWVzIGFyZSBzdGlsbCBwcmVzZXJ2ZWQgd2hlbiB3ZSBjYWxsIHRoZSBpbml0aWFs
aXplU3RhY2sKQEAgLTQxNyw3ICs0MjEsMTEgQEAgYXNtICgKICAgICAiY2J6ICAgICAgIHgyLCAi
IExPQ0FMX0xBQkVMX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lUmVzdG9yZVJlZ2lzdGVy
cykgIlxuIgogCiAgICAgIm1vdiAgICAgICB4MCwgeDI3IiAiXG4iIC8vIFNldCB0aGUgUHJvYmU6
OlN0YXRlKiBhcmcuCi0gICAgQ0FMTF9XSVRIX1BUUlRBRygiYmxyIiwgIngyIiwgQ0Z1bmN0aW9u
UHRyVGFnKSAvLyBDYWxsIHRoZSBpbml0aWFsaXplU3RhY2tGdW5jdGlvbiAobG9hZGVkIGludG8g
eDIgYWJvdmUpLgorI2lmIENQVShBUk02NEUpCisgICAgImJscmFheiAgICB4MiIgIlxuIiAvLyBD
YWxsIHRoZSBpbml0aWFsaXplU3RhY2tGdW5jdGlvbiAobG9hZGVkIGludG8geDIgYWJvdmUpLgor
I2Vsc2UKKyAgICAiYmxyICAgICAgIHgyIiAiXG4iIC8vIENhbGwgdGhlIGluaXRpYWxpemVTdGFj
a0Z1bmN0aW9uIChsb2FkZWQgaW50byB4MiBhYm92ZSkuCisjZW5kaWYKIAogICAgIExPQ0FMX0xB
QkVMX1NUUklORyhjdGlNYXNtUHJvYmVUcmFtcG9saW5lUmVzdG9yZVJlZ2lzdGVycykgIjoiICJc
biIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKEFS
TTY0RSkKKworLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgYmVmb3JlIE1hY3JvQXNzZW1ibGVy
QVJNNjQuaCBiZWNhdXNlIE1hY3JvQXNzZW1ibGVyQVJNNjQKKy8vIHdpbGwgYmUgZGVmaW5lZCBp
biB0ZXJtcyBvZiBBUk02NEVBc3NlbWJsZXIgZm9yIEFSTTY0RS4KKyNpbmNsdWRlICJBUk02NEVB
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJKU0NQdHJUYWcuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckFSTTY0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1c2luZyBBc3NlbWJsZXIgPSBUQVJH
RVRfQVNTRU1CTEVSOworCitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0RSA6IHB1YmxpYyBNYWNy
b0Fzc2VtYmxlckFSTTY0IHsKK3B1YmxpYzoKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0
dXJuQWRkcmVzcygpCisgICAgeworICAgICAgICB0YWdQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBB
Uk02NFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRh
Z1JldHVybkFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6
OmxyLCBBUk02NFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB0YWdQdHIoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBh
dXRvIHRhZ0dQUiA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgdGFnR1BSKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIucGFjaWIodGFyZ2V0LCB0YWdHUFIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB0YWdQdHIoUmVnaXN0ZXJJRCB0YXJnZXQsIFJlZ2lzdGVySUQgdGFnKQorICAgIHsKKyAg
ICAgICAgaWYgKHRhcmdldCA9PSBBUk02NFJlZ2lzdGVyczo6bHIgJiYgdGFnID09IEFSTTY0UmVn
aXN0ZXJzOjpzcCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIucGFjaWJzcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLnBhY2liKHRhcmdl
dCwgdGFnKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdQdHIoUmVnaXN0
ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBhdXRvIHRhZ0dQUiA9IGdl
dENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQodGFnKSwgdGFnR1BSKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXV0aWIodGFy
Z2V0LCB0YWdHUFIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1B0cihS
ZWdpc3RlcklEIHRhcmdldCwgUmVnaXN0ZXJJRCB0YWcpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5hdXRpYih0YXJnZXQsIHRhZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHJlbW92ZVB0clRhZyhSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhwYWNpKHRhcmdldCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
SW52YWxpZEdQUiAgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigtMSk7CisKKyAgICBlbnVtIGNs
YXNzIENhbGxTaWduYXR1cmVUeXBlIHsKKyAgICAgICAgQ0Z1bmN0aW9uQ2FsbCwKKyAgICAgICAg
T3RoZXJDYWxsCisgICAgfTsKKworICAgIHRlbXBsYXRlPENhbGxTaWduYXR1cmVUeXBlIHR5cGU+
CisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGxUcnVzdGVkUHRyKFJlZ2lzdGVySUQgdGFnR1BS
ID0gSW52YWxpZEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YWdHUFIgIT0gZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgIEFzc2VtYmxlckxhYmVsIHBvaW50ZXJMYWJlbCA9IG1fYXNzZW1i
bGVyLmxhYmVsKCk7CisgICAgICAgIG1vdmVXaXRoRml4ZWRXaWR0aChUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAg
ICAgICBpbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOworICAgICAgICBpZiAodHlwZSA9PSBD
YWxsU2lnbmF0dXJlVHlwZTo6Q0Z1bmN0aW9uQ2FsbCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJscmFheihkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYmxyYWIoZGF0YVRlbXBSZWdpc3RlciwgdGFnR1BSKTsKKyAgICAgICAgQXNzZW1i
bGVyTGFiZWwgY2FsbExhYmVsID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChwb2ludGVyTGFiZWwsIEFSTTY0QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhjYWxsTGFiZWwsIHBvaW50ZXJMYWJlbCkgPT0gUkVQQVRDSF9PRkZTRVRfQ0FMTF9U
T19QT0lOVEVSKTsKKyAgICAgICAgcmV0dXJuIENhbGwoY2FsbExhYmVsLCBDYWxsOjpMaW5rYWJs
ZSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoUHRyVGFnIHRhZykKKyAg
ICB7CisgICAgICAgIGlmICh0YWcgPT0gTm9QdHJUYWcpCisgICAgICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJBUk02NDo6Y2FsbCh0YWcpOworICAgICAgICBpZiAodGFnID09IENGdW5jdGlv
blB0clRhZykKKyAgICAgICAgICAgIHJldHVybiBjYWxsVHJ1c3RlZFB0cjxDYWxsU2lnbmF0dXJl
VHlwZTo6Q0Z1bmN0aW9uQ2FsbD4oKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwg
QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgcmV0dXJuIGNhbGxUcnVzdGVkUHRyPENhbGxT
aWduYXR1cmVUeXBlOjpPdGhlckNhbGw+KEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YWdHUFIpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FsbFRydXN0ZWRQdHI8Q2FsbFNpZ25hdHVyZVR5cGU6Ok90aGVyQ2FsbD4o
dGFnR1BSKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxDYWxsU2lnbmF0dXJlVHlwZSB0eXBlPgor
ICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBjYWxsUmVnaXN0ZXIoUmVnaXN0ZXJJRCB0YXJnZXRHUFIs
IFJlZ2lzdGVySUQgdGFnR1BSID0gSW52YWxpZEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YWdHUFIgIT0gdGFyZ2V0R1BSKTsKKyAgICAgICAgaW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMo
KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ2FsbFNpZ25hdHVyZVR5cGU6OkNGdW5jdGlvbkNhbGwp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHJhYXoodGFyZ2V0R1BSKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmxyYWIodGFyZ2V0R1BSLCB0YWdHUFIpOworICAg
ICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5sYWJlbCgpLCBDYWxsOjpOb25lKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldEdQUiwgUHRy
VGFnIHRhZykKKyAgICB7CisgICAgICAgIGlmICh0YWcgPT0gTm9QdHJUYWcpCisgICAgICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJBUk02NDo6Y2FsbCh0YXJnZXRHUFIsIHRhZyk7CisgICAg
ICAgIGlmICh0YWcgPT0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxS
ZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6Q0Z1bmN0aW9uQ2FsbD4odGFyZ2V0R1BSKTsKKyAg
ICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAg
ICAgcmV0dXJuIGNhbGxSZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6T3RoZXJDYWxsPih0YXJn
ZXRHUFIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBD
YWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXRHUFIsIFJlZ2lzdGVySUQgdGFnR1BSKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNhbGxSZWdpc3RlcjxDYWxsU2lnbmF0dXJlVHlwZTo6T3RoZXJDYWxs
Pih0YXJnZXRHUFIsIHRhZ0dQUik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNh
bGwoQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYgKHRhZyA9
PSBOb1B0clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0OjpjYWxs
KGFkZHJlc3MsIHRhZyk7CisKKyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGdldENhY2hlZERhdGFU
ZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBjYWxsKGRhdGFU
ZW1wUmVnaXN0ZXIsIHRhZyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBDYWxsIGNhbGwo
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHRhZykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0
YWcgIT0gZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzLCBnZXRDYWNo
ZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICByZXR1cm4gY2Fs
bChkYXRhVGVtcFJlZ2lzdGVyLCB0YWcpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSnVt
cCBqdW1wKCkgeyByZXR1cm4gTWFjcm9Bc3NlbWJsZXJBUk02NDo6anVtcCgpOyB9CisKKyAgICB2
b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBp
ZiAodGFnID09IE5vUHRyVGFnKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQVJN
NjQ6Omp1bXAodGFyZ2V0LCB0YWcpOworCisgICAgICAgIEFTU0VSVCh0YWcgIT0gQ0Z1bmN0aW9u
UHRyVGFnKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBkaXZlcnNpdHlHUFIgPSBnZXRDYWNoZWREYXRh
VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KHRhZyksIGRpdmVyc2l0eUdQUik7CisgICAgICAgIGp1bXAodGFyZ2V0LCBkaXZlcnNpdHlHUFIp
OworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCwgUmVnaXN0ZXJJRCB0
YWcpCisgICAgeworICAgICAgICBBU1NFUlQodGFnICE9IHRhcmdldCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmJyYWIodGFyZ2V0LCB0YWcpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNz
IGFkZHJlc3MsIFB0clRhZyB0YWcpCisgICAgeworICAgICAgICBpZiAodGFnID09IE5vUHRyVGFn
KQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQVJNNjQ6Omp1bXAoYWRkcmVzcywg
dGFnKTsKKworICAgICAgICBBU1NFUlQodGFnICE9IENGdW5jdGlvblB0clRhZyk7CisgICAgICAg
IFJlZ2lzdGVySUQgdGFyZ2V0R1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52
YWxpZGF0ZSgpOworICAgICAgICBSZWdpc3RlcklEIGRpdmVyc2l0eUdQUiA9IGdldENhY2hlZE1l
bW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBsb2FkNjQoYWRkcmVz
cywgdGFyZ2V0R1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgZGl2ZXJzaXR5
R1BSKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIGRpdmVyc2l0eUdQUik7
CisgICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCB0YWcp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERhdGFUZW1w
UmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgQVNTRVJUKHRhZyAhPSB0YXJnZXRH
UFIpOworICAgICAgICBsb2FkNjQoYWRkcmVzcywgdGFyZ2V0R1BSKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKEJhc2VJ
bmRleCBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYgKHRhZyA9PSBOb1B0
clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0OjpqdW1wKGFkZHJl
c3MsIHRhZyk7CisKKyAgICAgICAgQVNTRVJUKHRhZyAhPSBDRnVuY3Rpb25QdHJUYWcpOworICAg
ICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBkaXZlcnNpdHlHUFIgPSBnZXRDYWNo
ZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbG9hZDY0KGFk
ZHJlc3MsIHRhcmdldEdQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KHRhZyksIGRpdmVy
c2l0eUdQUik7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYWIodGFyZ2V0R1BSLCBkaXZlcnNpdHlH
UFIpOworICAgIH0KKworICAgIHZvaWQganVtcChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCB0YWcpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHRhcmdldEdQUiA9IGdldENhY2hlZERh
dGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgQVNTRVJUKHRhZyAhPSB0
YXJnZXRHUFIpOworICAgICAgICBsb2FkNjQoYWRkcmVzcywgdGFyZ2V0R1BSKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorCisgICAgdm9pZCBqdW1w
KEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBQdHJUYWcgdGFnKQorICAgIHsKKyAgICAgICAgaWYg
KHRhZyA9PSBOb1B0clRhZykKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckFSTTY0
OjpqdW1wKGFkZHJlc3MsIHRhZyk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCB0YXJnZXRHUFIgPSBn
ZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgIFJlZ2lz
dGVySUQgZGl2ZXJzaXR5R1BSID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGFy
Z2V0R1BSKTsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3ModGFyZ2V0R1BSKSwgdGFyZ2V0R1BSKTsK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQodGFnKSwgZGl2ZXJzaXR5R1BSKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIGRpdmVyc2l0eUdQUik7CisgICAgfQorCisgICAg
dm9pZCBqdW1wKEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHRhZykKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgdGFyZ2V0R1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3Rl
cklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBBU1NFUlQodGFnICE9IHRhcmdldEdQUik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgdGFyZ2V0R1BSKTsKKyAg
ICAgICAgbG9hZDY0KEFkZHJlc3ModGFyZ2V0R1BSKSwgdGFyZ2V0R1BSKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYnJhYih0YXJnZXRHUFIsIHRhZyk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyNDMy
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTgsNyArNzU4LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDb250ZQogICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIHZvaWQqIHJldHVyblBD
ID0gZnJhbWUuZ2V0PHZvaWQqPihDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpOwotI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKKyNpZiBDUFUoQVJNNjRFKQogICAgICAgICAgICAgdm9pZCog
b2xkRW50cnlTUCA9IGNwdS5mcDx1aW50OF90Kj4oKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KTsKICAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBp
bmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9pZCopOwogICAgICAg
ICAgICAgcmV0dXJuUEMgPSByZXRhZ0NvZGVQdHIocmV0dXJuUEMsIGJpdHdpc2VfY2FzdDxQdHJU
YWc+KG9sZEVudHJ5U1ApLCBiaXR3aXNlX2Nhc3Q8UHRyVGFnPihuZXdFbnRyeVNQKSk7CkBAIC04
MDMsNyArODAzLDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZQog
ICAgICAgICAgICAgICAgIGNhbGxlckZyYW1lID0gY3B1LmZwPHVpbnQ4X3QqPigpICsgdHJ1ZUNh
bGxlci0+aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CiAKICAgICAgICAgICAgIHZvaWQqIHRhcmdldEFkZHJlc3MgPSBqdW1wVGFyZ2V0LmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShBUk02
NEUpCiAgICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZwPHVpbnQ4X3QqPigpICsg
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9mKHZvaWQqKTsKICAgICAg
ICAgICAgIHRhcmdldEFkZHJlc3MgPSByZXRhZ0NvZGVQdHIodGFyZ2V0QWRkcmVzcywgSlNJbnRl
cm5hbFB0clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NTUsNyArMTU1LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwog
ICAgICAgICBpZiAoIXRydWVDYWxsZXIpIHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxs
RnJhbWUtPmlzVGFpbCgpKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5Q
Q09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykK
KyNpZiBDUFUoQVJNNjRFKQogICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAgICAgaml0LnVudGFnUHRyKEdQ
UkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZz
ZXQoKSArIHNpemVvZih2b2lkKikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDIpOwpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86
OnJlZ1QzOwogICAgICAgICAgICAgfQogCi0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lm
IENQVShBUk02NEUpCiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSArIHNpemVvZih2b2lk
KikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwogICAgICAg
ICAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgICAgIGppdC50YWdQdHIoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgR1BSSW5mbzo6cmVnVDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE1LDcgKzExNSw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKIAogICAgIHJlc3RvcmVB
bGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwogCi0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9JTlRF
Ul9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBqaXQudW50YWdQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpsaW5rUmVnaXN0ZXIsIHJlc3VsdFRhZyk7CiAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MDUsNyArODA1LDcgQEAgcHVibGljOgogI2lm
IENQVShBUk1fVEhVTUIyKSB8fCBDUFUoQVJNNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhm
cmFtZVBvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1Jl
Z2lzdGVyKTsKICAgICAgICAgc3ViUHRyKFRydXN0ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSks
IG5ld0ZyYW1lU2l6ZUdQUik7Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShB
Uk02NEUpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCB0ZW1wR1BSKTsKICAg
ICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCB0ZW1wR1BSKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlz
aW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICNpZiBDUFUoQVJNX1RIVU1CMikgfHwgQ1BVKEFS
TTY0KQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3Nl
bWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkp
LAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVyKTsKLSNpZiBVU0UoUE9JTlRF
Ul9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2Vt
Ymxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIG1faml0LnVudGFnUHRyKE1hY3JvQXNz
ZW1ibGVyOjpsaW5rUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CiAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwMSw3ICs1MDEs
NyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyNpZiBD
UFUoQVJNNjRFKQogICAgIHZvaWQqIHN0YXJ0ID0gYWxsb2NhdG9yLT5tZW1vcnlTdGFydCgpOwog
ICAgIHZvaWQqIGVuZCA9IGFsbG9jYXRvci0+bWVtb3J5RW5kKCk7CiAgICAgdm9pZCogcmVzdWx0
U3RhcnQgPSByZXN1bHQtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU2LDcgKzQ1Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gYXIKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRp
ZgogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoUE9J
TlRFUl9QUk9GSUxJTkcpCisjaWYgQ1BVKEFSTTY0RSkKICAgICBqaXQubG9hZFB0cihKU0ludGVy
ZmFjZUpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpy
ZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIGppdC5hZGRQdHIoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZXh0cmFUZW1wKTsKICAgICBqaXQudW50YWdQdHIoR1BSSW5m
bzo6cmVnVDMsIGV4dHJhVGVtcCk7CkBAIC01MTIsNyArNTEyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcgogICAgIAogICAgIGRvbmUubGluaygmaml0KTsKIAot
I2lmIENQVShBUk02NCkgJiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorI2lmIENQVShBUk02NEUp
CiAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1Qz
KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cih0ZW1wUmV0dXJu
UENUYWcpLCBleHRyYVRlbXApOwogICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjpyZWdUMywgZXh0
cmFUZW1wKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVB
c21Db25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRPZmZsaW5lQXNtQ29uZmlnLmgJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDEwICsxNDcsNCBAQAogI2RlZmluZSBPRkZMSU5FX0FTTV9UUkFDSU5HIDAKICNlbmRpZgog
Ci0jaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQotI2RlZmluZSBPRkZMSU5FX0FTTV9QT0lOVEVS
X1BST0ZJTElORyAxCi0jZWxzZQotI2RlZmluZSBPRkZMSU5FX0FTTV9QT0lOVEVSX1BST0ZJTElO
RyAwCi0jZW5kaWYKLQogI2RlZmluZSBPRkZMSU5FX0FTTV9HSUdBQ0FHRV9FTkFCTEVEIEdJR0FD
QUdFX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtNTg1LDExICs1ODUsOCBAQCBtYWNybyBmdW5jdGlvbkFyaXR5Q2hlY2soZG9uZUxh
YmVsLCBzbG93CiAgICAgYnRpeiB0MSwgLmNvbnRpbnVlCiAKIC5ub0V4dHJhU2xvdDoKLSAgICBp
ZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICBpZiBBUk02NCBvciBBUk02NEUKLSAgICAgICAg
ICAgIGxvYWRwIDhbY2ZyXSwgbHIKLSAgICAgICAgZW5kCi0KKyAgICBpZiBBUk02NEUKKyAgICAg
ICAgbG9hZHAgOFtjZnJdLCBscgogICAgICAgICBhZGRwIDE2LCBjZnIsIHQzCiAgICAgICAgIHVu
dGFnUmV0dXJuQWRkcmVzcyB0MwogICAgIGVuZApAQCAtNjE4LDEzICs2MTUsMTAgQEAgbWFjcm8g
ZnVuY3Rpb25Bcml0eUNoZWNrKGRvbmVMYWJlbCwgc2xvdwogICAgIGFkZHAgOCwgdDMKICAgICBi
YWRkaW56IDEsIHQyLCAuZmlsbExvb3AKIAotICAgIGlmIFBPSU5URVJfUFJPRklMSU5HCisgICAg
aWYgQVJNNjRFCiAgICAgICAgIGFkZHAgMTYsIGNmciwgdDEKICAgICAgICAgdGFnUmV0dXJuQWRk
cmVzcyB0MQotCi0gICAgICAgIGlmIEFSTTY0IG9yIEFSTTY0RQotICAgICAgICAgICAgc3RvcmVw
IGxyLCA4W2Nmcl0KLSAgICAgICAgZW5kCisgICAgICAgIHN0b3JlcCBsciwgOFtjZnJdCiAgICAg
ZW5kCiAKIC5jb250aW51ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtOTQ4LDcgKzk0OCw3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUs
IHRlbXAxLCAKICAgICAgICAgc3RvcmVwIHRlbXAzLCBbc3BdCiAgICAgZW5kCiAKLSAgICBpZiBQ
T0lOVEVSX1BST0ZJTElORworICAgIGlmIEFSTTY0RQogICAgICAgICBhZGRwIDE2LCBjZnIsIHRl
bXAzCiAgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wMwogICAgIGVuZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
NiArMjYsMTAgQEAKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCiAKKyNpZiBDUFUoQVJNNjRFKQorI2luY2x1ZGUgPHB0cmF1dGguaD4KKyNlbmRpZgorCiBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwogfTsKQEAgLTM3LDYgKzQxLDEzIEBA
IGNsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgU25pcHBldDsKIHN0cnVjdCBIYXNoVGFi
bGU7CiAKKyNpZiBDUFUoQVJNNjRFKQorI2RlZmluZSBXVEZfTUVUSE9EX1RBQkxFX0VOVFJZKG1l
dGhvZCkgXAorICAgIF9fcHRyYXV0aChwdHJhdXRoX2tleV9wcm9jZXNzX2luZGVwZW5kZW50X2Nv
ZGUsIHRydWUsIHB0cmF1dGhfc3RyaW5nX2Rpc2NyaW1pbmF0b3IoIk1ldGhvZFRhYmxlLiIgI21l
dGhvZCkpIG1ldGhvZAorI2Vsc2UKKyNkZWZpbmUgV1RGX01FVEhPRF9UQUJMRV9FTlRSWShtZXRo
b2QpIG1ldGhvZAorI2VuZGlmCisKIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVz
dHJveUZ1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNDZWxsKik7CiAgICAgRGVzdHJveUZ1bmN0aW9u
UHRyIFdURl9NRVRIT0RfVEFCTEVfRU5UUlkoZGVzdHJveSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2
aXNpb24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKU0NQdHJUYWcuaCIKICNpbmNsdWRlICJKU0RhdGVNYXRo
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKQEAg
LTYxLDYgKzYyLDggQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICAgICAgV1RGOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgICAgIE9wdGlvbnM6OmluaXRpYWxpemUoKTsKIAor
ICAgICAgICBpbml0aWFsaXplUHRyVGFnTG9va3VwKCk7CisKICNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXpl
KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRh
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRy
VGFnLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NQdHJUYWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU0NQdHJUYWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBDUFUo
QVJNNjRFKQorCitzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQqIHB0cikK
K3sKKyNkZWZpbmUgUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVModGFnKSBcCisgICAgaWYgKFdU
Rjo6dW50YWdDb2RlUHRySW1wbDxXVEY6OlB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHB0ciwgSlND
Ojp0YWcpID09IHJlbW92ZUNvZGVQdHJUYWcocHRyKSkgXAorICAgICAgICByZXR1cm4gI3RhZzsK
KyAgICBGT1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9OQU1FX0lGX1RBR19NQVRDSEVTKQorI3Vu
ZGVmIFJFVFVSTl9OQU1FX0lGX1RBR19NQVRDSEVTCisgICAgcmV0dXJuIG51bGxwdHI7IC8vIE1h
dGNoaW5nIHRhZyBub3QgZm91bmQuCit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwdHJUYWdOYW1l
KFB0clRhZyB0YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFtZSkgY2Fz
ZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFtZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0YWcpKSB7CisgICAgICAgIEZPUl9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRB
R19OQU1FKQorICAgIH0KKyN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUKKyAgICByZXR1cm4gbnVs
bHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KK30KKwordm9pZCBpbml0aWFsaXplUHRy
VGFnTG9va3VwKCkKK3sKKyAgICBzdGF0aWMgV1RGOjpQdHJUYWdMb29rdXAgbG9va3VwID0geyB0
YWdGb3JQdHIsIHB0clRhZ05hbWUgfTsKKyAgICBXVEY6OnJlZ2lzdGVyUHRyVGFnTG9va3VwKCZs
b29rdXApOworfQorCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAkocmV2aXNp
b24gMjQzMjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDcsOCArNDcsNiBAQCB1c2luZyBQdHJUYWcgPSBXVEY6OlB0clRhZzsK
ICAgICB2KE9wZXJhdGlvblB0clRhZykgXAogICAgIHYoT1NSRW50cnlQdHJUYWcpIFwKICAgICB2
KE9TUkV4aXRQdHJUYWcpIFwKLSAgICB2KFBsYXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWcpIFwKLSAg
ICB2KFBsYXRmb3JtUmVnaXN0ZXJzUENQdHJUYWcpIFwKICAgICB2KFNsb3dQYXRoUHRyVGFnKSBc
CiAgICAgdihXYXNtRW50cnlQdHJUYWcpIFwKICAgICB2KFlhcnI4Qml0UHRyVGFnKSBcCkBAIC02
OCw1ICs2NiwxMSBAQCBGT1JfRUFDSF9KU0NfUFRSVEFHKFdURl9ERUNMQVJFX1BUUlRBRykKICNw
cmFnbWEgd2FybmluZyhwb3ApCiAjZW5kaWYKIAordm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3Vw
KCk7CisKKyNpZiAhQ1BVKEFSTTY0RSkKK2lubGluZSB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29r
dXAoKSB7IH0KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI0MzIxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDIwLDggKzQyMCw2IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMo
KQogICAgICAgICBPcHRpb25zOjp1c2VKSVQoKSA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBXVEZf
U0VUX1BPSU5URVJfUFJFUEFSQVRJT05fT1BUSU9OUygpOwotCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSkKICAgICAgICAgT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSA9IGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxOS0wMy0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgT3BlbiBzb3VyY2UgYXJtNjRlIGNvZGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYwMTIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ5MDY2MjM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd3RmL0Jsb2NrUHRyLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICog
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnRocmVhZFN0
YXRlTFJJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OnRocmVhZFN0YXRlUENJbnRlcm5hbCk6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgICogd3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaDoKKyAgICAgICAgKiB3dGYvUHRyVGFnLmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6OnRhZ0ZvclB0cik6CisgICAgICAgIChXVEY6OnB0clRhZ05hbWUpOgorICAgICAgICAo
V1RGOjpyZWdpc3RlclB0clRhZ0xvb2t1cCk6CisgICAgICAgIChXVEY6OnJlcG9ydEJhZFRhZyk6
CisgICAgICAgICogd3RmL1B0clRhZy5oOgorICAgICAgICAoV1RGOjpyZW1vdmVDb2RlUHRyVGFn
KToKKyAgICAgICAgKFdURjo6dGFnQ29kZVB0ckltcGwpOgorICAgICAgICAoV1RGOjp0YWdDb2Rl
UHRyKToKKyAgICAgICAgKFdURjo6dW50YWdDb2RlUHRySW1wbEhlbHBlcik6CisgICAgICAgIChX
VEY6OnVudGFnQ29kZVB0ckltcGwpOgorICAgICAgICAoV1RGOjp1bnRhZ0NvZGVQdHIpOgorICAg
ICAgICAoV1RGOjpyZXRhZ0NvZGVQdHJJbXBsSGVscGVyKToKKyAgICAgICAgKFdURjo6cmV0YWdD
b2RlUHRySW1wbCk6CisgICAgICAgIChXVEY6OnJldGFnQ29kZVB0cik6CisgICAgICAgIChXVEY6
OnRhZ0NGdW5jdGlvblB0ckltcGwpOgorICAgICAgICAoV1RGOjp0YWdDRnVuY3Rpb25QdHIpOgor
ICAgICAgICAoV1RGOjp1bnRhZ0NGdW5jdGlvblB0ckltcGwpOgorICAgICAgICAoV1RGOjp1bnRh
Z0NGdW5jdGlvblB0cik6CisgICAgICAgIChXVEY6OnRhZ0ludCk6CisgICAgICAgIChXVEY6OmFz
c2VydElzQ0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKFdURjo6YXNzZXJ0SXNOdWxsT3JDRnVuY3Rp
b25QdHIpOgorICAgICAgICAoV1RGOjphc3NlcnRJc05vdFRhZ2dlZCk6CisgICAgICAgIChXVEY6
OmFzc2VydElzVGFnZ2VkKToKKyAgICAgICAgKFdURjo6YXNzZXJ0SXNOdWxsT3JUYWdnZWQpOgor
ICAgICAgICAoV1RGOjppc1RhZ2dlZFdpdGgpOgorICAgICAgICAoV1RGOjphc3NlcnRJc1RhZ2dl
ZFdpdGgpOgorICAgICAgICAoV1RGOjphc3NlcnRJc051bGxPclRhZ2dlZFdpdGgpOgorICAgICAg
ICAoV1RGOjp1c2VzUG9pbnRlclRhZ2dpbmcpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclB0clRh
Z0xvb2t1cCk6CisgICAgICAgIChXVEY6OnJlcG9ydEJhZFRhZyk6CisgICAgICAgIChXVEY6OnRh
Z0ZvclB0cik6IERlbGV0ZWQuCisKIDIwMTktMDMtMjAgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNh
dGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZ1cnRoZXIgYXR0ZW1w
dCB0byBmaXggY2xhbmcgMy44IGJ1aWxkCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsOCBAQAog
CQlFNEEwQUQzOTFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDM3MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuY3BwICovOyB9OwogCQlFNEEwQUQzRDFBOTYyNTNDMDA1MzZERjYgLyog
V29ya1F1ZXVlQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBMEFEM0MxQTk2MjUzQzAwNTM2REY2IC8qIFdvcmtRdWV1ZUNvY29hLmNwcCAq
LzsgfTsKIAkJRkUwNUZBRkYxRkU1MDA3NTAwMDkzMjMwIC8qIFdURkFzc2VydGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwNUZBRkUxRkU1
MDA3NTAwMDkzMjMwIC8qIFdURkFzc2VydGlvbnMuY3BwICovOyB9OworCQlGRTFFMkMzQjIyNDBD
MDY2MDBGNkI3MjkgLyogUHRyVGFnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMUUyQzM5MjI0MEMwNTQwMEY2QjcyOSAvKiBQdHJUYWcuY3BwICov
OyB9OworCQlGRTFFMkM0MjIyNDE4N0M2MDBGNkI3MjkgLyogUGxhdGZvcm1SZWdpc3RlcnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxRTJDNDEy
MjQxODdDNjAwRjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCAqLzsgfTsKIAkJRkVEQUNE
M0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0
YWNrU3RhdHMuY3BwICovOyB9OwogCQlGRUVBNERGOTIxNkQ3QkU0MDBBQzA2MDIgLyogU3RhY2tQ
b2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFRUE0REY4MjE2RDdCRTQwMEFDMDYwMiAvKiBTdGFja1BvaW50ZXIuY3BwICovOyB9OwogLyog
RW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCkBAIC02NzYsNiArNjc4LDggQEAKIAkJRjcyQkJE
QjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMDVGQUU2MUZEQjIxNDMwMDA5MzIzMCAvKiBEdW1iUHRyVHJhaXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bWJQdHJUcmFpdHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUwNUZBRkUxRkU1MDA3NTAwMDkzMjMwIC8qIFdURkFzc2VydGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGQXNzZXJ0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMUUyQzM5MjI0MEMwNTQwMEY2
QjcyOSAvKiBQdHJUYWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHRyVGFnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUxRTJDNDEyMjQxODdD
NjAwRjZCNzI5IC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU3NDk3RTQyMDhGRkNBQTAwMDM1NjVCIC8qIFB0clRhZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdHJUYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkU3NDk3RUQyMDkxNjMwNjAwMDM1NjVCIC8qIE1ldGFBbGxvY2F0b3JQdHIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvclB0ci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFr
ZWRQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRQdHIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjMsNiArMTA2Nyw3IEBACiAJCQkJMEY4MjRB
NjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovLAogCQkJCTBGODI0QTY1MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAw
REFEQjk1IC8qIFBsYXRmb3JtLmggKi8sCisJCQkJRkUxRTJDNDEyMjQxODdDNjAwRjZCNzI5IC8q
IFBsYXRmb3JtUmVnaXN0ZXJzLmNwcCAqLywKIAkJCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIg
LyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLywKIAkJCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0Yg
LyogUG9pbnRlckNvbXBhcmlzb24uaCAqLywKIAkJCQlGRUI2QjAzNTIwMUJFMEI2MDBCOTU4QzEg
LyogUG9pbnRlclByZXBhcmF0aW9ucy5oICovLApAQCAtMTA3Miw2ICsxMDc3LDcgQEAKIAkJCQkw
RkM0NDg4MjE2RkU5RkUxMDA4NDRCRTkgLyogUHJvY2Vzc0lELmggKi8sCiAJCQkJN0FGMDIzQjQy
MDYxRTE2RjAwQThFRkQ2IC8qIFByb2Nlc3NQcml2aWxlZ2UuY3BwICovLAogCQkJCTdBRjAyM0Iz
MjA2MUUxNkMwMEE4RUZENiAvKiBQcm9jZXNzUHJpdmlsZWdlLmggKi8sCisJCQkJRkUxRTJDMzky
MjQwQzA1NDAwRjZCNzI5IC8qIFB0clRhZy5jcHAgKi8sCiAJCQkJRkU3NDk3RTQyMDhGRkNBQTAw
MDM1NjVCIC8qIFB0clRhZy5oICovLAogCQkJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBS
QU1TaXplLmNwcCAqLywKIAkJCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5o
ICovLApAQCAtMTUyNyw2ICsxNTMzLDcgQEAKIAkJCQlBOEE0NzNDMzE1MUE4MjVCMDA0MTIzRkYg
LyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MDE2NURCQTczMDA1
QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMzFEOTVC
MjFGMjQ5OTIwMDlGMDJBQSAvKiBGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZF
MUUyQzQyMjI0MTg3QzYwMEY2QjcyOSAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMzMxRDk1RDIxRjI0OUU0MDA5RjAyQUEgLyogRmlsZVN5c3RlbUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEzMzFEOTVGMjFGMjQ5RjYwMDlGMDJBQSAvKiBGaWxlU3lzdGVt
Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMzMxRDk2MTIxRjI0QTBBMDA5RjAyQUEgLyog
RmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTYyMCw2ICsxNjI3LDcgQEAKIAkJ
CQkxQzE4MUM4RjFEMzA3QUI4MDBGNUZBMTYgLyogVVRleHRQcm92aWRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQzE4MUM5MTFEMzA3QUI4MDBGNUZBMTYgLyogVVRleHRQcm92aWRlckxhdGlu
MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM5MzFEMzA3QUI4MDBGNUZBMTYgLyogVVRl
eHRQcm92aWRlclVURjE2LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFMUUyQzNCMjI0MEMwNjYw
MEY2QjcyOSAvKiBQdHJUYWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NjkxNTFBODI1
QjAwNDEyM0ZGIC8qIFVURjhDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBRkVD
NkIxMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjZC
MjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0Jsb2NrUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QmxvY2tQdHIuaAkocmV2aXNpb24gMjQzMjE2KQorKysgU291cmNlL1dURi93dGYvQmxvY2tQdHIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDggKzMwLDExIEBACiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpZiBDUFUoQVJNNjRF
KQotI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9CbG9ja1F1YWxpZmllcnMuaD4KKyNpZiBfX2hh
c19pbmNsdWRlKDxwdHJhdXRoLmg+KQorI2luY2x1ZGUgPHB0cmF1dGguaD4KKyNkZWZpbmUgV1RG
X0NPUFlfRlVOQ1RJT05fUE9JTlRFUl9RVUFMSUZJRVIgX19wdHJhdXRoX2Jsb2NrX2NvcHlfaGVs
cGVyCisjZGVmaW5lIFdURl9ESVNQT1NFX0ZVTkNUSU9OX1BPSU5URVJfUVVBTElGSUVSIF9fcHRy
YXV0aF9ibG9ja19kZXN0cm95X2hlbHBlcgorI2RlZmluZSBXVEZfSU5WT0tFX0ZVTkNUSU9OX1BP
SU5URVJfUVVBTElGSUVSIF9fcHRyYXV0aF9ibG9ja19pbnZvY2F0aW9uX3BvaW50ZXIKICNlbHNl
CiAjZGVmaW5lIFdURl9DT1BZX0ZVTkNUSU9OX1BPSU5URVJfUVVBTElGSUVSCiAjZGVmaW5lIFdU
Rl9ESVNQT1NFX0ZVTkNUSU9OX1BPSU5URVJfUVVBTElGSUVSCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDI0MzIxNikKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNDYsMTEgKzEwNDYsNiBAQAogI2RlZmluZSBFTkFCTEVfU0lHTkFMX0JBU0VEX1ZN
X1RSQVBTIDEKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoVVNFX1BPSU5URVJfUFJPRklMSU5HKSB8
fCBVU0UoSlNWQUxVRTMyXzY0KSB8fCAhRU5BQkxFKEpJVCkKLSN1bmRlZiBVU0VfUE9JTlRFUl9Q
Uk9GSUxJTkcKLSNkZWZpbmUgVVNFX1BPSU5URVJfUFJPRklMSU5HIDAKLSNlbmRpZgotCiAvKiBD
U1MgU2VsZWN0b3IgSklUIENvbXBpbGVyICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0NTU19TRUxF
Q1RPUl9KSVQpCiAjaWYgKENQVShYODZfNjQpIHx8IENQVShBUk02NCkgfHwgKENQVShBUk1fVEhV
TUIyKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKSkpICYmIEVOQUJMRShKSVQpICYmIChPUyhEQVJX
SU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVJlZ2lzdGVycy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm1SZWdpc3RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKworI2luY2x1ZGUg
PHd0Zi9QdHJUYWcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBVU0UoUExBVEZPUk1fUkVH
SVNURVJTX1dJVEhfUFJPRklMRSkgJiYgQ1BVKEFSTTY0RSkKKworI2RlZmluZSBVU0VfVU5UQUdH
RURfVEhSRUFEX1NUQVRFX1BUUiAxCisKK3ZvaWQqIHRocmVhZFN0YXRlTFJJbnRlcm5hbChQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVncykKK3sKKyAgICB2b2lkKiBjYW5kaWRhdGVMUiA9IGFybV90aHJl
YWRfc3RhdGU2NF9nZXRfbHJfZnB0cihyZWdzKTsKKworI2lmIFVTRShVTlRBR0dFRF9USFJFQURf
U1RBVEVfUFRSKQorICAgIGlmIChjYW5kaWRhdGVMUiAmJiBpc1RhZ2dlZFdpdGgoY2FuZGlkYXRl
TFIsIENGdW5jdGlvblB0clRhZykpCisgICAgICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Q0Z1bmN0
aW9uUHRyVGFnLCBQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPihjYW5kaWRhdGVMUik7CisgICAg
Y2FuZGlkYXRlTFIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGFybV90aHJlYWRfc3RhdGU2NF9nZXRf
bHIocmVncykpOworICAgIGlmICghY2FuZGlkYXRlTFIpCisgICAgICAgIHJldHVybiBjYW5kaWRh
dGVMUjsKKyAgICByZXR1cm4gdGFnQ29kZVB0cjxQbGF0Zm9ybVJlZ2lzdGVyc0xSUHRyVGFnPihj
YW5kaWRhdGVMUik7CisKKyNlbHNlCisgICAgcmV0dXJuIHJldGFnQ29kZVB0cjxDRnVuY3Rpb25Q
dHJUYWcsIFBsYXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWc+KGNhbmRpZGF0ZUxSKTsKKyNlbmRpZgor
fQorCit2b2lkKiB0aHJlYWRTdGF0ZVBDSW50ZXJuYWwoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ3Mp
Cit7CisgICAgdm9pZCogY2FuZGlkYXRlUEMgPSBhcm1fdGhyZWFkX3N0YXRlNjRfZ2V0X3BjX2Zw
dHIocmVncyk7CisKKyNpZiBVU0UoVU5UQUdHRURfVEhSRUFEX1NUQVRFX1BUUikKKyAgICBpZiAo
Y2FuZGlkYXRlUEMgJiYgaXNUYWdnZWRXaXRoKGNhbmRpZGF0ZVBDLCBDRnVuY3Rpb25QdHJUYWcp
KQorICAgICAgICByZXR1cm4gcmV0YWdDb2RlUHRyPENGdW5jdGlvblB0clRhZywgUGxhdGZvcm1S
ZWdpc3RlcnNQQ1B0clRhZz4oY2FuZGlkYXRlUEMpOworICAgIGNhbmRpZGF0ZVBDID0gYml0d2lz
ZV9jYXN0PHZvaWQqPihhcm1fdGhyZWFkX3N0YXRlNjRfZ2V0X3BjKHJlZ3MpKTsKKyAgICBpZiAo
IWNhbmRpZGF0ZVBDKQorICAgICAgICByZXR1cm4gY2FuZGlkYXRlUEM7CisgICAgcmV0dXJuIHRh
Z0NvZGVQdHI8UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZz4oY2FuZGlkYXRlUEMpOworCisjZWxz
ZQorICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Q0Z1bmN0aW9uUHRyVGFnLCBQbGF0Zm9ybVJlZ2lz
dGVyc1BDUHRyVGFnPihjYW5kaWRhdGVQQyk7CisjZW5kaWYKK30KKworI2VuZGlmIC8vIFVTRShQ
TEFURk9STV9SRUdJU1RFUlNfV0lUSF9QUk9GSUxFKSAmJiBDUFUoQVJNNjRFKQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAkocmV2aXNpb24g
MjQzMjE2KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTEsNCArOTIsNzEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKIAogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKKyNpZiBVU0UoUExBVEZPUk1fUkVHSVNURVJTX1dJVEhfUFJPRklMRSkK
KyNpZiBDUFUoQVJNNjRFKQorCituYW1lc3BhY2UgV1RGIHsKKworZXh0ZXJuIHZvaWQqIHRocmVh
ZFN0YXRlTFJJbnRlcm5hbChQbGF0Zm9ybVJlZ2lzdGVycyYpOworZXh0ZXJuIHZvaWQqIHRocmVh
ZFN0YXRlUENJbnRlcm5hbChQbGF0Zm9ybVJlZ2lzdGVycyYpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjp0aHJlYWRTdGF0ZUxSSW50ZXJuYWw7Cit1c2luZyBXVEY6OnRocmVh
ZFN0YXRlUENJbnRlcm5hbDsKKworI2Vsc2UgLy8gbm90IENQVShBUk02NEUpCisKKyNkZWZpbmUg
dGhyZWFkU3RhdGVMUkludGVybmFsKHJlZ3MpIGJpdHdpc2VfY2FzdDx2b2lkKj4oYXJtX3RocmVh
ZF9zdGF0ZTY0X2dldF9scihyZWdzKSkKKyNkZWZpbmUgdGhyZWFkU3RhdGVQQ0ludGVybmFsKHJl
Z3MpIGJpdHdpc2VfY2FzdDx2b2lkKj4oYXJtX3RocmVhZF9zdGF0ZTY0X2dldF9wYyhyZWdzKSkK
KworI2VuZGlmIC8vIENQVShBUk02NEUpCisKKyNkZWZpbmUgV1RGX1JFQURfUExBVEZPUk1fUkVH
SVNURVJTX1NQX1dJVEhfUFJPRklMRShyZWdzKSBcCisgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYXJtX3RocmVhZF9zdGF0ZTY0X2dldF9zcChjb25zdF9jYXN0PFBsYXRmb3JtUmVnaXN0ZXJz
Jj4ocmVncykpKQorCisjZGVmaW5lIFdURl9XUklURV9QTEFURk9STV9SRUdJU1RFUlNfU1BfV0lU
SF9QUk9GSUxFKHJlZ3MsIG5ld1BvaW50ZXIpIFwKKyAgICBhcm1fdGhyZWFkX3N0YXRlNjRfc2V0
X3NwKHJlZ3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdQb2ludGVyKSkKKworI2Rl
ZmluZSBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfRlBfV0lUSF9QUk9GSUxFKHJlZ3MpIFwK
KyAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihhcm1fdGhyZWFkX3N0YXRlNjRfZ2V0X2ZwKGNv
bnN0X2Nhc3Q8UGxhdGZvcm1SZWdpc3RlcnMmPihyZWdzKSkpCisKKyNkZWZpbmUgV1RGX1dSSVRF
X1BMQVRGT1JNX1JFR0lTVEVSU19GUF9XSVRIX1BST0ZJTEUocmVncywgbmV3UG9pbnRlcikgXAor
ICAgIGFybV90aHJlYWRfc3RhdGU2NF9zZXRfZnAocmVncywgcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG5ld1BvaW50ZXIpKQorCisjZGVmaW5lIFdURl9SRUFEX1BMQVRGT1JNX1JFR0lTVEVS
U19MUl9XSVRIX1BST0ZJTEUocmVncykgXAorICAgIHRocmVhZFN0YXRlTFJJbnRlcm5hbChjb25z
dF9jYXN0PFBsYXRmb3JtUmVnaXN0ZXJzJj4ocmVncykpCisKKyNkZWZpbmUgV1RGX1dSSVRFX1BM
QVRGT1JNX1JFR0lTVEVSU19MUl9XSVRIX1BST0ZJTEUocmVncywgbmV3UG9pbnRlcikgXAorICAg
IGFybV90aHJlYWRfc3RhdGU2NF9zZXRfbHJfZnB0cihyZWdzLCBuZXdQb2ludGVyKQorCisjZGVm
aW5lIFdURl9SRUFEX1BMQVRGT1JNX1JFR0lTVEVSU19QQ19XSVRIX1BST0ZJTEUocmVncykgXAor
ICAgIHRocmVhZFN0YXRlUENJbnRlcm5hbChjb25zdF9jYXN0PFBsYXRmb3JtUmVnaXN0ZXJzJj4o
cmVncykpCisKKyNkZWZpbmUgV1RGX1dSSVRFX1BMQVRGT1JNX1JFR0lTVEVSU19QQ19XSVRIX1BS
T0ZJTEUocmVncywgbmV3UG9pbnRlcikgXAorICAgIGFybV90aHJlYWRfc3RhdGU2NF9zZXRfcGNf
ZnB0cihyZWdzLCBuZXdQb2ludGVyKQorCisjZGVmaW5lIFdURl9SRUFEX01BQ0hJTkVfQ09OVEVY
VF9TUF9XSVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQpIFwKKyAgICBXVEZfUkVBRF9QTEFURk9S
TV9SRUdJU1RFUlNfU1BfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LT5fX3NzKQorCisjZGVm
aW5lIFdURl9XUklURV9NQUNISU5FX0NPTlRFWFRfU1BfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250
ZXh0LCBuZXdQb2ludGVyKSBcCisgICAgV1RGX1dSSVRFX1BMQVRGT1JNX1JFR0lTVEVSU19TUF9X
SVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQtPl9fc3MsIG5ld1BvaW50ZXIpCisKKyNkZWZpbmUg
V1RGX1JFQURfTUFDSElORV9DT05URVhUX0ZQX1dJVEhfUFJPRklMRShtYWNoaW5lQ29udGV4dCkg
XAorICAgIFdURl9SRUFEX1BMQVRGT1JNX1JFR0lTVEVSU19GUF9XSVRIX1BST0ZJTEUobWFjaGlu
ZUNvbnRleHQtPl9fc3MpCisKKyNkZWZpbmUgV1RGX1dSSVRFX01BQ0hJTkVfQ09OVEVYVF9GUF9X
SVRIX1BST0ZJTEUobWFjaGluZUNvbnRleHQsIG5ld1BvaW50ZXIpIFwKKyAgICBXVEZfV1JJVEVf
UExBVEZPUk1fUkVHSVNURVJTX0ZQX1dJVEhfUFJPRklMRShtYWNoaW5lQ29udGV4dC0+X19zcywg
bmV3UG9pbnRlcikKKworI2RlZmluZSBXVEZfV1JJVEVfTUFDSElORV9DT05URVhUX0xSX1dJVEhf
UFJPRklMRShtYWNoaW5lQ29udGV4dCwgbmV3UG9pbnRlcikgXAorICAgIFdURl9XUklURV9QTEFU
Rk9STV9SRUdJU1RFUlNfTFJfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LT5fX3NzLCBuZXdQ
b2ludGVyKQorCisjZGVmaW5lIFdURl9SRUFEX01BQ0hJTkVfQ09OVEVYVF9QQ19XSVRIX1BST0ZJ
TEUobWFjaGluZUNvbnRleHQpIFwKKyAgICBXVEZfUkVBRF9QTEFURk9STV9SRUdJU1RFUlNfUENf
V0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LT5fX3NzKQorCisjZGVmaW5lIFdURl9XUklURV9N
QUNISU5FX0NPTlRFWFRfUENfV0lUSF9QUk9GSUxFKG1hY2hpbmVDb250ZXh0LCBuZXdQb2ludGVy
KSBcCisgICAgV1RGX1dSSVRFX1BMQVRGT1JNX1JFR0lTVEVSU19QQ19XSVRIX1BST0ZJTEUobWFj
aGluZUNvbnRleHQtPl9fc3MsIG5ld1BvaW50ZXIpCisKKyNlbmRpZiAvLyBVU0UoUExBVEZPUk1f
UkVHSVNURVJTX1dJVEhfUFJPRklMRSkKKwogdXNpbmcgV1RGOjpQbGF0Zm9ybVJlZ2lzdGVyczsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmgJKHJldmlzaW9uIDI0MzIxNikK
KysrIFNvdXJjZS9XVEYvd3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NSwxOCArMjUsMTggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKSAmJiBfX2hhc19pbmNsdWRlKDxXZWJLaXRBZGRpdGlvbnMvUG9pbnRlclByZXBhcmF0aW9u
cy5oPikKLSNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvUG9pbnRlclByZXBhcmF0aW9ucy5oPgot
I2VuZGlmCituYW1lc3BhY2UgV1RGIHsKKworI2lmIENQVShBUk02NEUpCisjaW5jbHVkZSA8cHRy
YXV0aC5oPgorCisjZGVmaW5lIFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElP
Tih2dGJsUHRyKSBcCisgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cmF1dGhfc2lnbl91
bmF1dGhlbnRpY2F0ZWQodnRibFB0ciwgcHRyYXV0aF9rZXlfY3h4X3Z0YWJsZV9wb2ludGVyLCAw
KSkpCisKKyNlbHNlIC8vIG5vdCBDUFUoQVJNNjRFKQogCi0jaWZuZGVmIFdURl9QUkVQQVJFX1ZU
QkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTgogI2RlZmluZSBXVEZfUFJFUEFSRV9WVEJMX1BPSU5U
RVJfRk9SX0lOU1BFQ1RJT04odnRibFB0cikgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZ0YmxQ
dHIpKQotI2VuZGlmCiAKLSNpZm5kZWYgV1RGX1NFVF9QT0lOVEVSX1BSRVBBUkFUSU9OX09QVElP
TlMKLSNkZWZpbmUgV1RGX1NFVF9QT0lOVEVSX1BSRVBBUkFUSU9OX09QVElPTlMoKSBkbyB7IH0g
d2hpbGUgKGZhbHNlKQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX01FVEhPRF9UQUJMRV9FTlRSWQot
I2RlZmluZSBXVEZfTUVUSE9EX1RBQkxFX0VOVFJZKG1ldGhvZCkgbWV0aG9kCi0jZW5kaWYKKyNl
bmRpZiAvLyBub3QgQ1BVKEFSTTY0RSkKKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QdHJUYWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1B0clRh
Zy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUHRyVGFnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL1B0
clRhZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworI2lmIENQVShBUk02NEUpCisKK3N0YXRpYyBQ
dHJUYWdMb29rdXAqIHNfcHRyVGFnTG9va3VwID0gbnVsbHB0cjsKKworc3RhdGljIGNvbnN0IGNo
YXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKiBwdHIpCit7CisgICAgUHRyVGFnTG9va3VwKiBsb29r
dXAgPSBzX3B0clRhZ0xvb2t1cDsKKyAgICB3aGlsZSAobG9va3VwKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIHRhZ05hbWUgPSBsb29rdXAtPnRhZ0ZvclB0cihwdHIpOworICAgICAgICBpZiAodGFn
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0YWdOYW1lOworICAgICAgICBsb29rdXAgPSBsb29r
dXAtPm5leHQ7CisgICAgfQorCisgICAgaWYgKHB0ciA9PSByZW1vdmVDb2RlUHRyVGFnKHB0cikp
CisgICAgICAgIHJldHVybiAiTm9QdHJUYWciOworCisjZGVmaW5lIFJFVFVSTl9OQU1FX0lGX1RB
R19NQVRDSEVTKHRhZykgXAorICAgIGlmICh1bnRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6
Tm9Bc3NlcnQ+KHB0ciwgdGFnKSA9PSByZW1vdmVDb2RlUHRyVGFnKHB0cikpIFwKKyAgICAgICAg
cmV0dXJuICN0YWc7CisgICAgRk9SX0VBQ0hfV1RGX1BUUlRBRyhSRVRVUk5fTkFNRV9JRl9UQUdf
TUFUQ0hFUykKKyN1bmRlZiBSRVRVUk5fTkFNRV9JRl9UQUdfTUFUQ0hFUworCisgICAgcmV0dXJu
ICI8dW5rbm93biBQdHJUYWc+IjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHB0clRhZ05hbWUo
UHRyVGFnIHRhZykKK3sKKyAgICBQdHJUYWdMb29rdXAqIGxvb2t1cCA9IHNfcHRyVGFnTG9va3Vw
OworICAgIHdoaWxlIChsb29rdXApIHsKKyAgICAgICAgY29uc3QgY2hhciogdGFnTmFtZSA9IGxv
b2t1cC0+cHRyVGFnTmFtZSh0YWcpOworICAgICAgICBpZiAodGFnTmFtZSkKKyAgICAgICAgICAg
IHJldHVybiB0YWdOYW1lOworICAgICAgICBsb29rdXAgPSBsb29rdXAtPm5leHQ7CisgICAgfQor
CisjZGVmaW5lIFJFVFVSTl9XVEZfUFRSVEFHX05BTUUoX3RhZ05hbWUpIGNhc2UgX3RhZ05hbWU6
IHJldHVybiAjX3RhZ05hbWU7CisgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgRk9SX0VBQ0hf
V1RGX1BUUlRBRyhSRVRVUk5fV1RGX1BUUlRBR19OQU1FKQorICAgIGRlZmF1bHQ6IHJldHVybiAi
PHVua25vd24+IjsKKyAgICB9CisjdW5kZWYgUkVUVVJOX1dURl9QVFJUQUdfTkFNRQorfQorCit2
b2lkIHJlZ2lzdGVyUHRyVGFnTG9va3VwKFB0clRhZ0xvb2t1cCogbG9va3VwKQoreworICAgIGxv
b2t1cC0+bmV4dCA9IHNfcHRyVGFnTG9va3VwOworICAgIHNfcHRyVGFnTG9va3VwID0gbG9va3Vw
OworfQorCit2b2lkIHJlcG9ydEJhZFRhZyhjb25zdCB2b2lkKiBwdHIsIFB0clRhZyBleHBlY3Rl
ZFRhZykKK3sKKyAgICBkYXRhTG9nKCJQdHJUYWcgQVNTRVJUSU9OIEZBSUxFRCBvbiBwb2ludGVy
ICIsIFJhd1BvaW50ZXIocHRyKSwgIiwgYWN0dWFsIHRhZyA9ICIsIHRhZ0ZvclB0cihwdHIpKTsK
KyAgICBpZiAoZXhwZWN0ZWRUYWcgPT0gQW55UHRyVGFnKQorICAgICAgICBkYXRhTG9nTG4oIiwg
ZXhwZWN0ZWQgYW55IHRhZyBidXQgTm9QdHJUYWciKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGFM
b2dMbigiLCBleHBlY3RlZCB0YWcgPSAiLCBwdHJUYWdOYW1lKGV4cGVjdGVkVGFnKSk7Cit9CisK
KyNlbmRpZiAvLyBDUFUoQVJNNjRFKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1B0clRhZy5o
CShyZXZpc2lvbiAyNDMyMTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9QdHJUYWcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNSw3ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1BvaW50
ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zNiw2ICszNyw4IEBAIG5h
bWVzcGFjZSBXVEYgewogI2RlZmluZSBGT1JfRUFDSF9BRERJVElPTkFMX1dURl9QVFJUQUcodikg
XAogICAgIHYoRnJlZVNwYWNlUHRyVGFnKSBcCiAgICAgdihIYW5kbGVNZW1vcnlQdHJUYWcpIFwK
KyAgICB2KFBsYXRmb3JtUmVnaXN0ZXJzTFJQdHJUYWcpIFwKKyAgICB2KFBsYXRmb3JtUmVnaXN0
ZXJzUENQdHJUYWcpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9XVEZfUFRSVEFHKHYpIFwKICAgICBG
T1JfRUFDSF9CQVNFX1dURl9QVFJUQUcodikgXApAQCAtNDYsNyArNDksMTEgQEAgZW51bSBQdHJU
YWcgOiB1aW50cHRyX3QgewogICAgIENGdW5jdGlvblB0clRhZywKIH07CiAKLSNpZm5kZWYgV1RG
X1BUUlRBR19IQVNICisjaWYgQ1BVKEFSTTY0RSkKKyNkZWZpbmUgV1RGX1BUUlRBR19IQVNIKHRh
ZykgcHRyYXV0aF9zdHJpbmdfZGlzY3JpbWluYXRvcigjdGFnKQorCisjZWxzZSAvLyBub3QgQ1BV
KEFSTTY0RSkKKwogdGVtcGxhdGU8c2l6ZV90IE4+CiBjb25zdGV4cHIgdWludHB0cl90IG1ha2VQ
dHJUYWdIYXNoKGNvbnN0IGNoYXIgKCZzdHIpW05dKQogewpAQCAtNTcsNyArNjQsNyBAQCBjb25z
dGV4cHIgdWludHB0cl90IG1ha2VQdHJUYWdIYXNoKGNvbnN0CiB9CiAKICNkZWZpbmUgV1RGX1BU
UlRBR19IQVNIKHRhZykgV1RGOjptYWtlUHRyVGFnSGFzaCgjdGFnKQotI2VuZGlmCisjZW5kaWYg
Ly8gbm90IENQVShBUk02NEUpCiAKICNkZWZpbmUgV1RGX0RFQ0xBUkVfUFRSVEFHKHRhZykgXAog
ICAgIGNvbnN0ZXhwciBQdHJUYWcgdGFnID0gc3RhdGljX2Nhc3Q8UHRyVGFnPihXVEZfUFRSVEFH
X0hBU0goI3RhZykpOyBcCkBAIC03Nyw5ICs4NCwzMTUgQEAgRk9SX0VBQ0hfQURESVRJT05BTF9X
VEZfUFRSVEFHKFdURl9ERUNMQQogI3ByYWdtYSB3YXJuaW5nKHBvcCkKICNlbmRpZgogCi0jaWYg
IVVTRShQT0lOVEVSX1BST0ZJTElORykKK3N0cnVjdCBQdHJUYWdMb29rdXAgeworICAgIGNvbnN0
IGNoYXIqICgqdGFnRm9yUHRyKShjb25zdCB2b2lkKik7CisgICAgY29uc3QgY2hhciogKCpwdHJU
YWdOYW1lKShQdHJUYWcpOworICAgIFB0clRhZ0xvb2t1cCogbmV4dCB7IG51bGxwdHIgfTsKK307
CisKKyNpZiBDUFUoQVJNNjRFKQorCitlbnVtIGNsYXNzIFB0clRhZ0FjdGlvbiB7CisgICAgUmVs
ZWFzZUFzc2VydCwKKyAgICBEZWJ1Z0Fzc2VydCwKKyAgICBOb0Fzc2VydCwKK307CisKK2NvbnN0
ZXhwciBQdHJUYWcgQW55UHRyVGFnID0gc3RhdGljX2Nhc3Q8UHRyVGFnPigtMSk7IC8vIE9ubHkg
dXNlZCBmb3IgYXNzZXJ0aW9uIG1lc3NhZ2VzLgorCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZWdpc3RlclB0clRhZ0xvb2t1cChQdHJUYWdMb29rdXAqKTsKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHJlcG9ydEJhZFRhZyhjb25zdCB2b2lkKiwgUHRyVGFnIGV4cGVjdGVkVGFnKTsKKworI2lm
IEFTU0VSVF9ESVNBQkxFRAorY29uc3RleHByIGJvb2wgZW5hYmxlUHRyVGFnRGVidWdBc3NlcnQg
PSBmYWxzZTsKKyNlbHNlCitjb25zdGV4cHIgYm9vbCBlbmFibGVQdHJUYWdEZWJ1Z0Fzc2VydCA9
IHRydWU7CisjZW5kaWYKKworI2RlZmluZSBXVEZfUFRSVEFHX0FTU0VSVChhY3Rpb24sIHB0ciwg
ZXhwZWN0ZWRUYWcsIGFzc2VydGlvbikgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoYWN0aW9u
ID09IFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydCBcCisgICAgICAgICAgICB8fCAoV1RGOjpl
bmFibGVQdHJUYWdEZWJ1Z0Fzc2VydCAmJiBhY3Rpb24gPT0gUHRyVGFnQWN0aW9uOjpEZWJ1Z0Fz
c2VydCkpIHsgXAorICAgICAgICAgICAgYm9vbCBwYXNzZWQgPSAoYXNzZXJ0aW9uKTsgXAorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXNzZWQpKSB7IFwKKyAgICAgICAgICAgICAgICByZXBv
cnRCYWRUYWcocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4ocHRyKSwgZXhwZWN0ZWRUYWcp
OyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBhc3NlZCAm
JiAjYXNzZXJ0aW9uKTsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxU
LCBQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIGNvbnN0ZXhwciBUIHJlbW92ZUNvZGVQdHJUYWco
UHRyVHlwZSBwdHIpCit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihwdHJhdXRoX3N0cmlw
KHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfY29kZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19w
b2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgY29uc3RleHByIFB0clR5cGUgcmVtb3Zl
Q29kZVB0clRhZyhQdHJUeXBlIHB0cikKK3sKKyAgICByZXR1cm4gcHRyYXV0aF9zdHJpcChwdHIs
IHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2NvZGUpOworfQorCit0ZW1wbGF0ZTxQdHJU
YWdBY3Rpb24gdGFnQWN0aW9uLCB0eXBlbmFtZSBQdHJUeXBlPgoraW5saW5lIFB0clR5cGUgdGFn
Q29kZVB0ckltcGwoUHRyVHlwZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgaWYgKCFwdHIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFdURl9QVFJUQUdfQVNTRVJUKHRhZ0FjdGlvbiwg
cHRyLCBOb1B0clRhZywgcmVtb3ZlQ29kZVB0clRhZyhwdHIpID09IHB0cik7CisgICAgaWYgKHRh
ZyA9PSBOb1B0clRhZykKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICBpZiAodGFnID09IENGdW5j
dGlvblB0clRhZykKKyAgICAgICAgcmV0dXJuIHB0cmF1dGhfc2lnbl91bmF1dGhlbnRpY2F0ZWQo
cHRyLCBwdHJhdXRoX2tleV9mdW5jdGlvbl9wb2ludGVyLCAwKTsKKyAgICByZXR1cm4gcHRyYXV0
aF9zaWduX3VuYXV0aGVudGljYXRlZChwdHIsIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50
X2NvZGUsIHRhZyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZh
bHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBUIHRhZ0Nv
ZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUPih0YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIHRhZykp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBl
LCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2
YWx1ZT4+CitpbmxpbmUgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRyKQoreworICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4odGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4o
cHRyLCB0YWcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5l
IFB0clR5cGUgdGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFnIHRhZykKK3sKKyAgICByZXR1
cm4gdGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpEZWJ1Z0Fzc2VydD4ocHRyLCB0YWcpOwor
fQorCit0ZW1wbGF0ZTxQdHJUYWcgdGFnLCB0eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUg
UHRyVHlwZSB0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiB0YWdDb2RlUHRyKHB0ciwg
dGFnKTsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlPgoraW5saW5lIFB0clR5cGUgdW50
YWdDb2RlUHRySW1wbEhlbHBlcihQdHJUeXBlIHB0ciwgUHRyVGFnIHRhZykKK3sKKyAgICBpZiAo
dGFnID09IE5vUHRyVGFnKQorICAgICAgICByZXR1cm4gcHRyOworICAgIGlmICh0YWcgPT0gQ0Z1
bmN0aW9uUHRyVGFnKQorICAgICAgICByZXR1cm4gX19idWlsdGluX3B0cmF1dGhfYXV0aChwdHIs
IHB0cmF1dGhfa2V5X2Z1bmN0aW9uX3BvaW50ZXIsIDApOworICAgIHJldHVybiBfX2J1aWx0aW5f
cHRyYXV0aF9hdXRoKHB0ciwgcHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfY29kZSwgdGFn
KTsKK30KKwordGVtcGxhdGU8UHRyVGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5hbWUgUHRyVHlw
ZT4KK2lubGluZSBQdHJUeXBlIHVudGFnQ29kZVB0ckltcGwoUHRyVHlwZSBwdHIsIFB0clRhZyB0
YWcpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFB0clR5
cGUgcmVzdWx0ID0gdW50YWdDb2RlUHRySW1wbEhlbHBlcihwdHIsIHRhZyk7CisgICAgV1RGX1BU
UlRBR19BU1NFUlQodGFnQWN0aW9uLCBwdHIsIHRhZywgcmVtb3ZlQ29kZVB0clRhZyhwdHIpID09
IHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9p
bnRlcjxQdHJUeXBlPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFQgdW50YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQoreworICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odW50YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246OlJl
bGVhc2VBc3NlcnQ+KHB0ciwgdGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRh
ZyB0YWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ29kZVB0cihQdHJU
eXBlIHB0cikKK3sKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KHVudGFnQ29kZVB0ckltcGw8
UHRyVGFnQWN0aW9uOjpSZWxlYXNlQXNzZXJ0PihwdHIsIHRhZykpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2lu
dGVyPFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgUHRyVHlwZSB1bnRhZ0NvZGVQdHIoUHRyVHlw
ZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgcmV0dXJuIHVudGFnQ29kZVB0ckltcGw8UHRyVGFn
QWN0aW9uOjpSZWxlYXNlQXNzZXJ0PihwdHIsIHRhZyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0
YWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHVudGFnQ29kZVB0cihQ
dHJUeXBlIHB0cikgeyByZXR1cm4gdW50YWdDb2RlUHRyKHB0ciwgdGFnKTsgfQorCit0ZW1wbGF0
ZTxQdHJUYWdBY3Rpb24gdGFnQWN0aW9uLCB0eXBlbmFtZSBQdHJUeXBlPgoraW5saW5lIFB0clR5
cGUgcmV0YWdDb2RlUHRySW1wbEhlbHBlcihQdHJUeXBlIHB0ciwgUHRyVGFnIG9sZFRhZywgUHRy
VGFnIG5ld1RhZykKK3sKKyAgICBpZiAob2xkVGFnID09IG5ld1RhZyB8fCAob2xkVGFnID09IE5v
UHRyVGFnICYmIG5ld1RhZyA9PSBOb1B0clRhZykpCisgICAgICAgIHJldHVybiBwdHI7CisgICAg
aWYgKG5ld1RhZyA9PSBOb1B0clRhZykKKyAgICAgICAgcmV0dXJuIHVudGFnQ29kZVB0ckltcGw8
dGFnQWN0aW9uPihwdHIsIG9sZFRhZyk7CisgICAgaWYgKG9sZFRhZyA9PSBOb1B0clRhZykKKyAg
ICAgICAgcmV0dXJuIHRhZ0NvZGVQdHJJbXBsPHRhZ0FjdGlvbj4ocHRyLCBuZXdUYWcpOworICAg
IGlmIChvbGRUYWcgPT0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgICAgICByZXR1cm4gcHRyYXV0aF9h
dXRoX2FuZF9yZXNpZ24ocHRyLCBwdHJhdXRoX2tleV9mdW5jdGlvbl9wb2ludGVyLCAwLCBwdHJh
dXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9jb2RlLCBuZXdUYWcpOworICAgIGlmIChuZXdUYWcg
PT0gQ0Z1bmN0aW9uUHRyVGFnKQorICAgICAgICByZXR1cm4gcHRyYXV0aF9hdXRoX2FuZF9yZXNp
Z24ocHRyLCBwdHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9jb2RlLCBvbGRUYWcsIHB0cmF1
dGhfa2V5X2Z1bmN0aW9uX3BvaW50ZXIsIDApOworICAgIHJldHVybiBwdHJhdXRoX2F1dGhfYW5k
X3Jlc2lnbihwdHIsIHB0cmF1dGhfa2V5X3Byb2Nlc3NfZGVwZW5kZW50X2NvZGUsIG9sZFRhZywg
cHRyYXV0aF9rZXlfcHJvY2Vzc19kZXBlbmRlbnRfY29kZSwgbmV3VGFnKTsKK30KKwordGVtcGxh
dGU8UHRyVGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5hbWUgUHRyVHlwZT4KK2lubGluZSBQdHJU
eXBlIHJldGFnQ29kZVB0ckltcGwoUHRyVHlwZSBwdHIsIFB0clRhZyBvbGRUYWcsIFB0clRhZyBu
ZXdUYWcpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFB0
clRhZ0FjdGlvbiB1bnRhZ0FjdGlvbiA9ICh0YWdBY3Rpb24gPT0gUHRyVGFnQWN0aW9uOjpOb0Fz
c2VydCkgPyBQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0IDogUHRyVGFnQWN0aW9uOjpSZWxlYXNlQXNz
ZXJ0OworICAgIFdURl9QVFJUQUdfQVNTRVJUKHVudGFnQWN0aW9uLCBwdHIsIG9sZFRhZywgcmVt
b3ZlQ29kZVB0clRhZyhwdHIpID09IHVudGFnQ29kZVB0ckltcGw8UHRyVGFnQWN0aW9uOjpOb0Fz
c2VydD4ocHRyLCBvbGRUYWcpKTsKKyAgICBQdHJUeXBlIHJlc3VsdCA9IHJldGFnQ29kZVB0cklt
cGxIZWxwZXI8dGFnQWN0aW9uPihwdHIsIG9sZFRhZywgbmV3VGFnKTsKKyAgICBXVEZfUFRSVEFH
X0FTU0VSVCh0YWdBY3Rpb24sIHB0ciwgbmV3VGFnLCByZXN1bHQgPT0gdGFnQ29kZVB0ckltcGw8
UHRyVGFnQWN0aW9uOjpOb0Fzc2VydD4ocmVtb3ZlQ29kZVB0clRhZyhwdHIpLCBuZXdUYWcpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
dHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVyPFB0clR5
cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUg
VCByZXRhZ0NvZGVQdHIoUHRyVHlwZSBwdHIsIFB0clRhZyBvbGRUYWcsIFB0clRhZyBuZXdUYWcp
Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihyZXRhZ0NvZGVQdHJJbXBsPFB0clRhZ0Fj
dGlvbjo6RGVidWdBc3NlcnQ+KHB0ciwgb2xkVGFnLCBuZXdUYWcpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgUHRyVGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgUHRyVHlw
ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6
dmFsdWU+PgoraW5saW5lIFQgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyKQoreworICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VD4ocmV0YWdDb2RlUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNz
ZXJ0PihwdHIsIG9sZFRhZywgbmV3VGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5
cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46
OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHJldGFnQ29kZVB0cihQdHJUeXBlIHB0ciwgUHRyVGFn
IG9sZFRhZywgUHRyVGFnIG5ld1RhZykKK3sKKyAgICByZXR1cm4gcmV0YWdDb2RlUHRySW1wbDxQ
dHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIG9sZFRhZywgbmV3VGFnKTsKK30KKwordGVt
cGxhdGU8UHRyVGFnIG9sZFRhZywgUHRyVGFnIG5ld1RhZywgdHlwZW5hbWUgUHRyVHlwZSwgdHlw
ZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+
PgoraW5saW5lIFB0clR5cGUgcmV0YWdDb2RlUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiByZXRh
Z0NvZGVQdHIocHRyLCBvbGRUYWcsIG5ld1RhZyk7IH0KIAotaW5saW5lIGNvbnN0IGNoYXIqIHRh
Z0ZvclB0cihjb25zdCB2b2lkKikgeyByZXR1cm4gIjxubyB0YWc+IjsgfQordGVtcGxhdGU8UHRy
VGFnQWN0aW9uIHRhZ0FjdGlvbiwgdHlwZW5hbWUgUHRyVHlwZT4KK2lubGluZSBQdHJUeXBlIHRh
Z0NGdW5jdGlvblB0ckltcGwoUHRyVHlwZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgaWYgKCFw
dHIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFdURl9QVFJUQUdfQVNTRVJUKHRhZ0Fj
dGlvbiwgcHRyLCBDRnVuY3Rpb25QdHJUYWcsIHJlbW92ZUNvZGVQdHJUYWcocHRyKSA9PSB1bnRh
Z0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHB0ciwgQ0Z1bmN0aW9uUHRyVGFn
KSk7CisgICAgcmV0dXJuIHJldGFnQ29kZVB0ckltcGw8dGFnQWN0aW9uPihwdHIsIENGdW5jdGlv
blB0clRhZywgdGFnKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHlw
ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6
dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFQgdGFn
Q0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQoreworICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8VD4odGFnQ0Z1bmN0aW9uUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0
PihwdHIsIHRhZykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBQdHJUYWcgdGFnLCB0eXBl
bmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2ludGVy
PFB0clR5cGU+Ojp2YWx1ZT4+CitpbmxpbmUgVCB0YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIp
Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPih0YWdDRnVuY3Rpb25QdHJJbXBsPFB0clRh
Z0FjdGlvbjo6RGVidWdBc3NlcnQ+KHB0ciwgdGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRy
VHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHRhZ0NGdW5jdGlvblB0cihQdHJUeXBlIHB0
ciwgUHRyVGFnIHRhZykKK3sKKyAgICByZXR1cm4gdGFnQ0Z1bmN0aW9uUHRySW1wbDxQdHJUYWdB
Y3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIHRhZyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0YWcs
IHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Bv
aW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBQdHJUeXBlIHRhZ0NGdW5jdGlvblB0cihQ
dHJUeXBlIHB0cikgeyByZXR1cm4gdGFnQ0Z1bmN0aW9uUHRyKHB0ciwgdGFnKTsgfQorCit0ZW1w
bGF0ZTxQdHJUYWdBY3Rpb24gdGFnQWN0aW9uLCB0eXBlbmFtZSBQdHJUeXBlPgoraW5saW5lIFB0
clR5cGUgdW50YWdDRnVuY3Rpb25QdHJJbXBsKFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQorewor
ICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBXVEZfUFRSVEFHX0FT
U0VSVCh0YWdBY3Rpb24sIHB0ciwgdGFnLCByZW1vdmVDb2RlUHRyVGFnKHB0cikgPT0gdW50YWdD
b2RlUHRySW1wbDxQdHJUYWdBY3Rpb246Ok5vQXNzZXJ0PihwdHIsIHRhZykpOworICAgIHJldHVy
biByZXRhZ0NvZGVQdHJJbXBsPHRhZ0FjdGlvbj4ocHRyLCB0YWcsIENGdW5jdGlvblB0clRhZyk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlICYmICFzdGQ6
OmlzX3NhbWU8VCwgUHRyVHlwZT46OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRy
KFB0clR5cGUgcHRyLCBQdHJUYWcgdGFnKQoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4o
dW50YWdDRnVuY3Rpb25QdHJJbXBsPFB0clRhZ0FjdGlvbjo6RGVidWdBc3NlcnQ+KHB0ciwgdGFn
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0clRhZyB0YWcsIHR5cGVuYW1lIFB0clR5
cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46
OnZhbHVlPj4KK2lubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKQoreworICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4odW50YWdDRnVuY3Rpb25QdHJJbXBsPFB0clRhZ0FjdGlv
bjo6RGVidWdBc3NlcnQ+KHB0ciwgdGFnKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFB0
clRhZyB0YWcsIFB0clRhZ0FjdGlvbiB0YWdBY3Rpb24sIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4K
K2lubGluZSBUIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKQoreworICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4odW50YWdDRnVuY3Rpb25QdHJJbXBsPHRhZ0FjdGlvbj4ocHRyLCB0YWcp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfcG9pbnRlcjxQdHJUeXBlPjo6dmFsdWU+PgoraW5saW5lIFB0clR5cGUg
dW50YWdDRnVuY3Rpb25QdHIoUHRyVHlwZSBwdHIsIFB0clRhZyB0YWcpCit7CisgICAgcmV0dXJu
IHVudGFnQ0Z1bmN0aW9uUHRySW1wbDxQdHJUYWdBY3Rpb246OkRlYnVnQXNzZXJ0PihwdHIsIHRh
Zyk7Cit9CisKK3RlbXBsYXRlPFB0clRhZyB0YWcsIHR5cGVuYW1lIFB0clR5cGUsIHR5cGVuYW1l
ID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3BvaW50ZXI8UHRyVHlwZT46OnZhbHVlPj4KK2lu
bGluZSBQdHJUeXBlIHVudGFnQ0Z1bmN0aW9uUHRyKFB0clR5cGUgcHRyKSB7IHJldHVybiB1bnRh
Z0NGdW5jdGlvblB0cihwdHIsIHRhZyk7IH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+
CitpbmxpbmUgSW50VHlwZSB0YWdJbnQoSW50VHlwZSBwdHJJbnQsIFB0clRhZyB0YWcpCit7Cisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW50VHlwZSkgPT0gc2l6ZW9mKHVpbnRwdHJfdCksICIi
KTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PEludFR5cGU+KHB0cmF1dGhfc2lnbl91bmF1dGhl
bnRpY2F0ZWQoYml0d2lzZV9jYXN0PHZvaWQqPihwdHJJbnQpLCBwdHJhdXRoX2tleV9wcm9jZXNz
X2RlcGVuZGVudF9kYXRhLCB0YWcpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZT4K
K3ZvaWQgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoUHRyVHlwZSB2YWx1ZSkKK3sKKyAgICB2b2lkKiBw
dHIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICBXVEZfUFRSVEFHX0FTU0VSVChQ
dHJUYWdBY3Rpb246OlJlbGVhc2VBc3NlcnQsIHB0ciwgQ0Z1bmN0aW9uUHRyVGFnLCB1bnRhZ0Nv
ZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHB0ciwgQ0Z1bmN0aW9uUHRyVGFnKSA9
PSByZW1vdmVDb2RlUHRyVGFnKHB0cikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBl
Pgordm9pZCBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihQdHJUeXBlIHB0cikKK3sKKyAgICBp
ZiAocHRyKQorICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihwdHIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQdHJUeXBlPgordm9pZCBhc3NlcnRJc05vdFRhZ2dlZChQdHJUeXBlIHZhbHVl
KQoreworICAgIHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpOworICAgIFdU
Rl9QVFJUQUdfQVNTRVJUKFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydCwgcHRyLCBOb1B0clRh
ZywgcHRyID09IHJlbW92ZUNvZGVQdHJUYWcocHRyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFB0clR5cGU+Cit2b2lkIGFzc2VydElzVGFnZ2VkKFB0clR5cGUgdmFsdWUpCit7CisgICAgdm9p
ZCogcHRyID0gYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1ZSk7CisgICAgV1RGX1BUUlRBR19BU1NF
UlQoUHRyVGFnQWN0aW9uOjpSZWxlYXNlQXNzZXJ0LCBwdHIsIEFueVB0clRhZywgcHRyICE9IHJl
bW92ZUNvZGVQdHJUYWcocHRyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+Cit2
b2lkIGFzc2VydElzTnVsbE9yVGFnZ2VkKFB0clR5cGUgcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGFzc2VydElzVGFnZ2VkKHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0clR5
cGU+Citib29sIGlzVGFnZ2VkV2l0aChQdHJUeXBlIHZhbHVlLCBQdHJUYWcgdGFnKQoreworICAg
IHZvaWQqIHB0ciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpOworICAgIGlmICh0YWcgPT0g
Tm9QdHJUYWcpCisgICAgICAgIHJldHVybiBwdHIgPT0gcmVtb3ZlQ29kZVB0clRhZyhwdHIpOwor
ICAgIHJldHVybiB1bnRhZ0NvZGVQdHJJbXBsPFB0clRhZ0FjdGlvbjo6Tm9Bc3NlcnQ+KHB0ciwg
dGFnKSA9PSByZW1vdmVDb2RlUHRyVGFnKHB0cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFB0
clR5cGU+Cit2b2lkIGFzc2VydElzVGFnZ2VkV2l0aChQdHJUeXBlIHZhbHVlLCBQdHJUYWcgdGFn
KQoreworICAgIFdURl9QVFJUQUdfQVNTRVJUKFB0clRhZ0FjdGlvbjo6UmVsZWFzZUFzc2VydCwg
dmFsdWUsIHRhZywgaXNUYWdnZWRXaXRoKHZhbHVlLCB0YWcpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgUHRyVHlwZT4KK3ZvaWQgYXNzZXJ0SXNOdWxsT3JUYWdnZWRXaXRoKFB0clR5cGUgcHRy
LCBQdHJUYWcgdGFnKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0
aChwdHIsIHRhZyk7Cit9CisKK2lubGluZSBib29sIHVzZXNQb2ludGVyVGFnZ2luZygpIHsgcmV0
dXJuIHRydWU7IH0KKworI2Vsc2UgLy8gbm90IENQVShBUk02NEUpCisKK2lubGluZSB2b2lkIHJl
Z2lzdGVyUHRyVGFnTG9va3VwKFB0clRhZ0xvb2t1cCopIHsgfQoraW5saW5lIHZvaWQgcmVwb3J0
QmFkVGFnKGNvbnN0IHZvaWQqLCBQdHJUYWcpIHsgfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBQdHJUeXBlLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19wb2lu
dGVyPFB0clR5cGU+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsIFB0clR5cGU+Ojp2YWx1ZT4+
CiBjb25zdGV4cHIgVCB0YWdDb2RlUHRyKFB0clR5cGUgcHRyLCBQdHJUYWcpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxUPihwdHIpOyB9CkBAIC0xNjgsMjIgKzQ4MSwxNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBQdHJUeXBlPiB2b2lkIGFzc2VydElzCiAKIGlubGluZSBib29sIHVzZXNQb2ludGVyVGFn
Z2luZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNkZWZpbmUgQ0FMTF9XSVRIX1BUUlRBRyhjYWxs
SW5zdHJ1Y3Rpb25TdHJpbmcsIHRhcmdldFJlZ2lzdGVyU3RyaW5nLCB0YWcpIFwKLSAgICBjYWxs
SW5zdHJ1Y3Rpb25TdHJpbmcgIiAiIHRhcmdldFJlZ2lzdGVyU3RyaW5nICJcbiIKLQotI2VuZGlm
IC8vICFVU0UoUE9JTlRFUl9QUk9GSUxJTkcpCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKIAogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6Q0Z1bmN0aW9uUHRyVGFnOwogdXNpbmcgV1RG
OjpOb1B0clRhZzsKK3VzaW5nIFdURjo6UGxhdGZvcm1SZWdpc3RlcnNMUlB0clRhZzsKK3VzaW5n
IFdURjo6UGxhdGZvcm1SZWdpc3RlcnNQQ1B0clRhZzsKIHVzaW5nIFdURjo6UHRyVGFnOwogCi0j
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgX19oYXNfaW5jbHVkZSg8V2ViS2l0QWRkaXRp
b25zL1B0clRhZ1N1cHBvcnQuaD4pCi0jaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1B0clRhZ1N1
cHBvcnQuaD4KLSNlbmRpZgotCi11c2luZyBXVEY6OnRhZ0ZvclB0cjsKK3VzaW5nIFdURjo6cmVw
b3J0QmFkVGFnOwogCiB1c2luZyBXVEY6OnRhZ0NvZGVQdHI7CiB1c2luZyBXVEY6OnVudGFnQ29k
ZVB0cjsK
</data>
<flag name="review"
          id="381827"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>