<?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>49012</bug_id>
          
          <creation_ts>2010-11-04 11:37:25 -0700</creation_ts>
          <short_desc>[Qt] Use custom memory allocator in QtTestBrowser on Symbian</short_desc>
          <delta_ts>2010-11-09 06:49:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>S60 Hardware</rep_platform>
          <op_sys>S60 3rd edition</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44691</blocked>
    
    <blocked>47918</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dinu Jacob">dinu.jacob</reporter>
          <assigned_to name="Dinu Jacob">dinu.jacob</assigned_to>
          <cc>ademar</cc>
    
    <cc>kbalazs</cc>
    
    <cc>s.mathur</cc>
    
    <cc>suresh.voruganti</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>304775</commentid>
    <comment_count>0</comment_count>
    <who name="Dinu Jacob">dinu.jacob</who>
    <bug_when>2010-11-04 11:37:25 -0700</bug_when>
    <thetext>Use custom allocator to improve memory usage by QtTestBrowser in Symbian</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305460</commentid>
    <comment_count>1</comment_count>
    <who name="Dinu Jacob">dinu.jacob</who>
    <bug_when>2010-11-05 12:43:10 -0700</bug_when>
    <thetext>This is needed to run JS benchmarks (for example, Dromaeo) on Symbian</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305461</commentid>
    <comment_count>2</comment_count>
      <attachid>73101</attachid>
    <who name="Dinu Jacob">dinu.jacob</who>
    <bug_when>2010-11-05 12:43:35 -0700</bug_when>
    <thetext>Created attachment 73101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305784</commentid>
    <comment_count>3</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-11-06 06:13:31 -0700</bug_when>
    <thetext>Do we really need to push the allocator into the codebase?
Wouldn&apos;t it be better to just having the lib in the trunk?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306104</commentid>
    <comment_count>4</comment_count>
    <who name="Suresh Voruganti">suresh.voruganti</who>
    <bug_when>2010-11-08 06:32:43 -0800</bug_when>
    <thetext>Fix required for Qtwebkit 2.1 branch for increasing the stability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306154</commentid>
    <comment_count>5</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2010-11-08 09:16:36 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=73101) [details]
&gt; Patch

Please don&apos;t put the allocator source into Webkit.org trunk! 

Alternatives: 
- For public buildbots, use Qt 4.7 tip of branch (from Gitorious.org/qt) which already has fast allocator in official Qt-Symbian port (see QT-3967 or http://qt.gitorious.org/qt/qt/trees/4.7/src/corelib/arch/symbian) 
- For internal buildbots, use 4.7 from QtProd which also has allocator built in (QT-3967, wk44 onwards) 

I checked with the author of the above Qt integration, and he says that no qmake args are needed to turn on linking with the fast allocator. All you have to do it make sure Qt 4.7.2 or higher is in use and compile your application. So, it seems no Webkit.pro pro/.pri need new flags either. 

If you have privately verified that QTestBrowser is passing all endurance tests with the fast allocator, then that should be enough to &quot;unblock&quot; 2.1 release readiness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306160</commentid>
    <comment_count>6</comment_count>
    <who name="Dinu Jacob">dinu.jacob</who>
    <bug_when>2010-11-08 09:21:57 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; &gt; Created an attachment (id=73101) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Please don&apos;t put the allocator source into Webkit.org trunk! 
&gt; 
&gt; Alternatives: 
&gt; - For public buildbots, use Qt 4.7 tip of branch (from Gitorious.org/qt) which already has fast allocator in official Qt-Symbian port (see QT-3967 or http://qt.gitorious.org/qt/qt/trees/4.7/src/corelib/arch/symbian) 
&gt; - For internal buildbots, use 4.7 from QtProd which also has allocator built in (QT-3967, wk44 onwards) 
&gt; 
&gt; I checked with the author of the above Qt integration, and he says that no qmake args are needed to turn on linking with the fast allocator. All you have to do it make sure Qt 4.7.2 or higher is in use and compile your application. So, it seems no Webkit.pro pro/.pri need new flags either. 
&gt; 
&gt; If you have privately verified that QTestBrowser is passing all endurance tests with the fast allocator, then that should be enough to &quot;unblock&quot; 2.1 release readiness.

Thanks Siddarth.  We didn&apos;t get this information when we asked around here and the suggestion was to add the code. I will remove the source code and do a build with the Qt that has the lib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306176</commentid>
    <comment_count>7</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2010-11-08 09:58:24 -0800</bug_when>
    <thetext>Out of scope for Webkit.org or QtWebkit. See Comment #5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306759</commentid>
    <comment_count>8</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-09 06:49:37 -0800</bug_when>
    <thetext>Since it&apos;s closed as INVALID, I&apos;m removing the release block for qtwebkit-2.1 (bug 39121)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73101</attachid>
            <date>2010-11-05 12:43:35 -0700</date>
            <delta_ts>2010-11-08 09:22:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49012.patch</filename>
            <type>text/plain</type>
            <size>179963</size>
            <attacher name="Dinu Jacob">dinu.jacob</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDcxNDQy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MDUgIEphY29iIERpbnUgIDxkaW51LmphY29iQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFVzZSBjdXN0b20gbWVtb3J5IGFs
bG9jYXRvciBpbiBRdFRlc3RCcm93c2VyIG9uIFN5bWJpYW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MDEyCisgICAgICAKKyAgICAgICAgQWRkZWQg
U3ltYmlhbiBjdXN0b20gbWVtb3J5IGFsbG9jYXRvci4KKworICAgICAgICAqIFdlYktpdC5wcm86
CisKIDIwMTAtMTEtMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0LnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQucHJvCShyZXZpc2lvbiA3MTQyMCkKKysrIFdlYktpdC5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDkgQEAgd2Via2l0MiB7CiBTVUJESVJTICs9IFdlYkNv
cmUKIAogIyBJZiB0aGUgc291cmNlIGV4aXN0cywgYnVpbHQgaXQKK3N5bWJpYW4geworZXhpc3Rz
KCQkUFdEL1dlYktpdFRvb2xzL1N5bWJpYW5NZW1vcnlBbGxvY2F0b3IpOiBTVUJESVJTICs9IFdl
YktpdFRvb2xzL1N5bWJpYW5NZW1vcnlBbGxvY2F0b3IKK30KIGV4aXN0cygkJFBXRC9XZWJLaXRU
b29scy9RdFRlc3RCcm93c2VyKTogU1VCRElSUyArPSBXZWJLaXRUb29scy9RdFRlc3RCcm93c2Vy
CiBjb250YWlucyhRVF9DT05GSUcsIGRlY2xhcmF0aXZlKSB7CiAgICAgZXhpc3RzKCQkUFdEL1dl
YktpdC9xdC9kZWNsYXJhdGl2ZSk6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L2RlY2xhcmF0aXZlCklu
ZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MTQ0MikKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMC0xMS0wNSAgSmFjb2IgRGludSAgPGRpbnUu
amFjb2JAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtRdF0gVXNlIGN1c3RvbSBtZW1vcnkgYWxsb2NhdG9yIGluIFF0VGVzdEJyb3dz
ZXIgb24gU3ltYmlhbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDkwMTIKKworICAgICAgICAqIFF0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm86
CisgICAgICAgICogU3ltYmlhbk1lbW9yeUFsbG9jYXRvcjogQWRkZWQuCisgICAgICAgICogU3lt
Ymlhbk1lbW9yeUFsbG9jYXRvci9DSEFOR0VMT0cudHh0OiBBZGRlZC4KKyAgICAgICAgKiBTeW1i
aWFuTWVtb3J5QWxsb2NhdG9yL1JFQURNRS50eHQ6IEFkZGVkLgorICAgICAgICAqIFN5bWJpYW5N
ZW1vcnlBbGxvY2F0b3IvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci5wcm86IEFkZGVkLgorICAgICAg
ICAqIFN5bWJpYW5NZW1vcnlBbGxvY2F0b3IvZGxhX3AuaDogQWRkZWQuCisgICAgICAgIChoZWFk
ZXJfZmxvYXRpbmcpOgorICAgICAgICAoZmxvb3IpOgorICAgICAgICAoY2VpbGluZyk6CisgICAg
ICAgIChsb3diaXRzKToKKyAgICAgICAgKHB0cmRpZmYpOgorICAgICAgICAob2Zmc2V0KToKKyAg
ICAgICAgKHBhZ2U6OnBhZ2Vmb3IpOgorICAgICAgICAqIFN5bWJpYW5NZW1vcnlBbGxvY2F0b3Iv
bmV3YWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChQYW5pYyk6CisgICAgICAgIChSTmV3
QWxsb2NhdG9yOjptYXBfY2h1bmtfcGFnZXMpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6bWFw
X2NodW5rX3BhZ2VzX3BhcnRpYWwpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6dW5tYXBfY2h1
bmtfcGFnZXMpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6c3lzX3RyaW1fcGFydGlhbCk6Cisg
ICAgICAgIChSTmV3QWxsb2NhdG9yOjpUcmFjZUNhbGxTdGFjayk6CisgICAgICAgIChnZXRwYWdl
c2l6ZSk6CisgICAgICAgIChpQ2h1bmtTaXplKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OlJO
ZXdBbGxvY2F0b3IpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6SW5pdCk6CisgICAgICAgIChS
TmV3QWxsb2NhdG9yOjpHZXRBZGRyZXNzKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OkFsbG9j
TGVuKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OkFsbG9jKToKKyAgICAgICAgKFJOZXdBbGxv
Y2F0b3I6OkNvbXByZXNzKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OkZyZWUpOgorICAgICAg
ICAoUk5ld0FsbG9jYXRvcjo6UmVzZXQpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6VHJhY2VS
ZUFsbG9jKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OlJlQWxsb2MpOgorICAgICAgICAoUk5l
d0FsbG9jYXRvcjo6QXZhaWxhYmxlKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OkFsbG9jU2l6
ZSk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpEZWJ1Z0Z1bmN0aW9uKToKKyAgICAgICAgKFJO
ZXdBbGxvY2F0b3I6OkV4dGVuc2lvbl8pOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6aW5pdF9t
cGFyYW1zKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmluaXRfYmlucyk6CisgICAgICAgIChS
TmV3QWxsb2NhdG9yOjp0bWFsbG9jX2xhcmdlKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnRt
YWxsb2Nfc21hbGwpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6aW5pdF90b3ApOgorICAgICAg
ICAoUk5ld0FsbG9jYXRvcjo6aW50ZXJuYWxfcmVhbGxvYyk6CisgICAgICAgIChSTmV3QWxsb2Nh
dG9yOjppbnRlcm5hbF9tYWxsaW5mbyk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjppbnRlcm5h
bF9tYWxsb2Nfc3RhdHMpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6Y2hhbmdlX21wYXJhbSk6
CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpzeXNfYWxsb2MpOgorICAgICAgICAoUk5ld0FsbG9j
YXRvcjo6c2VnbWVudF9ob2xkaW5nKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnVubGlua19m
aXJzdF9zbWFsbF9jaHVuayk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjppbnNlcnRfc21hbGxf
Y2h1bmspOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6aW5zZXJ0X2NodW5rKToKKyAgICAgICAg
KFJOZXdBbGxvY2F0b3I6OnVubGlua19sYXJnZV9jaHVuayk6CisgICAgICAgIChSTmV3QWxsb2Nh
dG9yOjp1bmxpbmtfc21hbGxfY2h1bmspOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6dW5saW5r
X2NodW5rKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmNvbXB1dGVfdHJlZV9pbmRleCk6Cisg
ICAgICAgIChSTmV3QWxsb2NhdG9yOjppbnNlcnRfbGFyZ2VfY2h1bmspOgorICAgICAgICAoUk5l
d0FsbG9jYXRvcjo6cmVwbGFjZV9kdik6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpjb21wdXRl
X2JpdDJpZHgpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6YWRkX3NlZ21lbnQpOgorICAgICAg
ICAoUk5ld0FsbG9jYXRvcjo6cHJlcGVuZF9hbGxvYyk6CisgICAgICAgIChSTmV3QWxsb2NhdG9y
OjptbWFwX2FsbG9jKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnN5c190cmltKToKKyAgICAg
ICAgKFJOZXdBbGxvY2F0b3I6Omhhc19zZWdtZW50X2xpbmspOgorICAgICAgICAoUk5ld0FsbG9j
YXRvcjo6cmVsZWFzZV91bnVzZWRfc2VnbWVudHMpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6
bW1hcF9yZXNpemUpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6SW5pdF9EbG1hbGxvYyk6Cisg
ICAgICAgIChSTmV3QWxsb2NhdG9yOjpkbG1hbGxvYyk6CisgICAgICAgIChSTmV3QWxsb2NhdG9y
OjpkbGZyZWUpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6ZGxyZWFsbG9jKToKKyAgICAgICAg
KFJOZXdBbGxvY2F0b3I6OmRsbWFsbG9jX3RyaW0pOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6
ZGxtYWxsb2NfZm9vdHByaW50KToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmRsbWFsbG9jX21h
eF9mb290cHJpbnQpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6ZGxtYWxsaW5mbyk6CisgICAg
ICAgIChSTmV3QWxsb2NhdG9yOjpkbG1hbGxvY19zdGF0cyk6CisgICAgICAgIChSTmV3QWxsb2Nh
dG9yOjpkbG1hbGxvcHQpOgorICAgICAgICAoc2xhYjo6c2xhYmZvcik6CisgICAgICAgIChSTmV3
QWxsb2NhdG9yOjp0cmVlX3JlbW92ZSk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjp0cmVlX2lu
c2VydCk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjphbGxvY25ld3NsYWIpOgorICAgICAgICAo
Uk5ld0FsbG9jYXRvcjo6cGFydGlhbF9pbnNlcnQpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6
YWxsb2NuZXdwYWdlKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmZyZWVwYWdlKToKKyAgICAg
ICAgKFJOZXdBbGxvY2F0b3I6OmZyZWVzbGFiKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnNs
YWJfaW5pdCk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpzbGFiX2FsbG9jYXRlKToKKyAgICAg
ICAgKFJOZXdBbGxvY2F0b3I6OnNsYWJfZnJlZSk6CisgICAgICAgIChzbGFic2V0Ojppbml0c2xh
Yik6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpTZXRCcmspOgorICAgICAgICAoUk5ld0FsbG9j
YXRvcjo6bWFwKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnJlbWFwKToKKyAgICAgICAgKFJO
ZXdBbGxvY2F0b3I6OnVubWFwKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnBhZ2VkX2luaXQp
OgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6cGFnZWRfYWxsb2NhdGUpOgorICAgICAgICAoUk5l
d0FsbG9jYXRvcjo6cGFnZWRfcmVhbGxvY2F0ZSk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpw
YWdlZF9mcmVlKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OnBhZ2VkX2Rlc2NyaXB0b3IpOgor
ICAgICAgICAoUk5ld0FsbG9jYXRvcjo6Rml4ZWRIZWFwKToKKyAgICAgICAgKFJOZXdBbGxvY2F0
b3I6OkNodW5rSGVhcCk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpPZmZzZXRDaHVua0hlYXAp
OgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6ZGVidWdfY2hlY2tfc21hbGxfY2h1bmtfYWNjZXNz
KToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmRlYnVnX2NoZWNrX2FueV9jaHVua19hY2Nlc3Mp
OgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6ZGVidWdfY2hlY2tfbGFyZ2VfY2h1bmtfYWNjZXNz
KToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmRlYnVnX2NodW5rX3BhZ2VfcmVsZWFzZV9jaGVj
ayk6CisgICAgICAgIChSTmV3QWxsb2NhdG9yOjpkdW1wX2xhcmdlX2NodW5rKToKKyAgICAgICAg
KFJOZXdBbGxvY2F0b3I6OmR1bXBfZGxfZnJlZV9jaHVua3MpOgorICAgICAgICAoUk5ld0FsbG9j
YXRvcjo6ZHVtcF9oZWFwX2xvZ3MpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6Q3JlYXRlVGhy
ZWFkSGVhcCk6CisgICAgICAgIChfc3ltYmlhbl9TZXR1cFRocmVhZEhlYXApOgorICAgICAgICAq
IFN5bWJpYW5NZW1vcnlBbGxvY2F0b3IvbmV3YWxsb2NhdG9yX2hvb2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFVzZXJIZWFwOjpTZXR1cFRocmVhZEhlYXApOgorICAgICAgICAqIFN5bWJpYW5NZW1v
cnlBbGxvY2F0b3IvbmV3YWxsb2NhdG9yX3AuaDogQWRkZWQuCisgICAgICAgIChSTmV3QWxsb2Nh
dG9yOjpTaXplKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmhlYWRlcl9mcmVlKToKKyAgICAg
ICAgKFJOZXdBbGxvY2F0b3I6OmhlYWRlcl9wYWdlbWFwKToKKyAgICAgICAgKFJOZXdBbGxvY2F0
b3I6OmhlYWRlcl9zaXplKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OmhlYWRlcl91c2VkbTQp
OgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6Uk5ld0FsbG9jYXRvcik6CisgICAgICAgIChSTmV3
QWxsb2NhdG9yOjpNYXhMZW5ndGgpOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6b3BlcmF0b3Ig
ZGVsZXRlKToKKyAgICAgICAgKFJOZXdBbGxvY2F0b3I6OkJhc2UpOgorICAgICAgICAoUk5ld0Fs
bG9jYXRvcjo6QWxpZ24pOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6TG9jayk6CisgICAgICAg
IChSTmV3QWxsb2NhdG9yOjpVbmxvY2spOgorICAgICAgICAoUk5ld0FsbG9jYXRvcjo6Q2h1bmtI
YW5kbGUpOgorCiAyMDEwLTExLTA1ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdFRvb2xzL1F0VGVz
dEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvUXRU
ZXN0QnJvd3Nlci9RdFRlc3RCcm93c2VyLnBybwkocmV2aXNpb24gNzE0MjApCisrKyBXZWJLaXRU
b29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCw4IEBAIHN5bWJpYW4gewogICAgIFRBUkdFVC5VSUQzID0gMHhBMDAwRTU0MwogICAg
IFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJEYXRhIFdyaXRlVXNlckRhdGEgTmV0d29ya1Nl
cnZpY2VzIExvY2F0aW9uCiAgICAgTU1QX1JVTEVTICo9IHBhZ2VkZGF0YQorICAgIExJQlMgKz0g
LWxTeW1iaWFuTWVtb3J5QWxsb2NhdG9yLmxpYiAtbGhhbAorCiB9CiAKIGNvbnRhaW5zKFFUX0NP
TkZJRywgb3BlbmdsKSB7CkluZGV4OiBXZWJLaXRUb29scy9TeW1iaWFuTWVtb3J5QWxsb2NhdG9y
L0NIQU5HRUxPRy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFs
bG9jYXRvci9DSEFOR0VMT0cudHh0CShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU3ltYmlh
bk1lbW9yeUFsbG9jYXRvci9DSEFOR0VMT0cudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0
IEBACisKKzxhZGQgbmV3IGVudHJpZXMgb24gdG9wPgorCitNYXJjaCAyMywgMjAxMDoKKy0gUGF0
Y2ggdG8gcmVtb3ZlIGJ1aWxkIHdhcm5pbmdzLiBDb2RlIGRyb3AgZnJvbSBSb2JlcnQgS2F0dGEu
CisKK0ZlYnVyYXJ5IDI1LCAyMDEwOgorLSBVcGRhdGVkIGNvZGUtZHJvcCBmcm9tIFJvYmVydCBL
YXR0YQorLSBUaGUgZmFzdCBhbGxvY2F0b3IgdmVyc2lvbiBjdXJyZW50bHkgaW4gY3dydCB0cnVu
ayBpcyB0aGUgbGF0ZXN0ICdnb29kJyBvbmUgZm9yIHRoZSBwdXJwb3NlCitvZiBpbnRlZ3JhdGlv
biB3aXRoIGNXUlQgZm9yIG5pbmV0d28uCitIb3dldmVyLCB0aGVyZSB3YXMgYSBtZW1vcnkgb3B0
aW1pc2F0aW9uIGFwcGxpZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIEZIQSBpbiBTNjAgd2Vi
a2l0OgorZGVjb21taXR0aW5nIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBtaWRkbGUgb2YgbGFyZ2Vy
IGZyZWUgY2VsbHMgaW4gdGhlIERvdWcgTGVhIGFyZW5hLAorYW5kIHJlY29tbWl0dGluZyB0aGVt
IGlmIHJlcXVpcmVkIGZvciBhbGxvY2F0aW9uLiBUaGlzIHdhcyBzaG93biB0byBmcmVlIHNpZ25p
ZmljYW50IGFtb3VudHMgb2YKK3VudXNlZCBSQU0gaW4gdGhlIFM2MCBXUlQgd2hlbiB3aWRnZXRz
IGFyZSBzdGFydGVkIGFuZCBzdG9wcGVkIChhcyBpbiBzZXZlcmFsIE1CKSB0aGF0IHdvdWxkCitv
dGhlcndpc2UgYmUgdGllZCBpbnRvIHRoZSBoZWFwLiBTbywgdGhpcyB1cGRhdGVkIGNvZGUgYmFz
ZSBpcyBhIG1lcmdlIG9mIHRoZSAnUzYwIHdlYmtpdCcgdmVyc2lvbgorKGV4dHJhIG1lbW9yeSBv
cHRpbWlzYXRpb25zKSB3aXRoIHRoZSAnUXQnIHZlcnNpb24gKGluc3RhbnRpYXRpb24gJiB0cmFj
aW5nKS4KKworSmFudWFyeSAyMCwgMjAxMDoKKy0gSW5pdGlhbCBpbXBvcnQgZnJvbSBTaGFuZSBL
ZWFybidzIGNvZGUtZHJvcAorLSBSb3VnaGx5IHVwZGF0ZWQgdG8gU0hBMSA4YzBmOWU4Y2Y3ZTg4
YzY5ZTcxNmU4ZTEyNzAwOTJmNjM0OTI4ZTdhCisoaHR0cDovL3NjbS5kZXYubm9raWEudHJvbGwu
bm8vcHJvamVjdHMvcXQvcmVwb3MvcXQtczYwLXB1YmxpYy9jb21taXRzLzhjMGY5ZThjZjdlODhj
NjllNzE2ZThlMTI3MDA5MmY2MzQ5MjhlN2EpCitXb3JraW5nIGJyYW5jaDogaHR0cDovL3NjbS5k
ZXYubm9raWEudHJvbGwubm8vcHJvamVjdHMvcXQvcmVwb3MvcXQtczYwLXB1YmxpYy9sb2dzL25l
dy1zeW1iaWFuLWFsbG9jYXRvcgorCisKSW5kZXg6IFdlYktpdFRvb2xzL1N5bWJpYW5NZW1vcnlB
bGxvY2F0b3IvUkVBRE1FLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TeW1iaWFuTWVt
b3J5QWxsb2NhdG9yL1JFQURNRS50eHQJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TeW1i
aWFuTWVtb3J5QWxsb2NhdG9yL1JFQURNRS50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIg
QEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBpcyB0aGUgY3VzdG9tIG1l
bW9yeSBhbGxvY2F0b3IgZm9yIHVzZSB3aXRoIFF0V2Via2l0IGJhc2VkIGtpbGxlciBhcHBzIGZv
ciBTeW1iaWFuL1M2MC4gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFqb3Ig
ZmVhdHVyZXM6IAorLSBmYXN0ZXIgdGhhbiBTeW1iaWFuIFJIZWFwLiBPKDEpIG9wZXJhdGlvbnMg
dnMuIE8obikgCistIG1vcmUgc3BhY2UgZWZmaWNpZW50IGZvciBzbWFsbGVyIGFsbG9jYXRpb25z
IChpLmUgbG93ZXIgc3lzdGVtIFJBTSB1c2FnZSkKKy0gc3dpdGNoZXMgYXQgcnVuLXRpbWUgYmV0
d2VlbiAxIG9mIDMgYWxsb2NhdGlvbiBhbGdvcml0aG1zIGJhc2VkIG9uIHJlcXVlc3RlZCBhbGxv
YyBzaXplCisKKyogSG93IFN5bWJpYW4gT1MgcHJvY2VzcyBzdGFydHVwIHdvcmtzOiAKKyhmcm9t
IGh0dHA6Ly9kZXZlbG9wZXIuc3ltYmlhbi5vcmcvd2lraS9pbmRleC5waHAvU3ltYmlhbl9PU19J
bnRlcm5hbHMvMy5fVGhyZWFkcyxfUHJvY2Vzc2VzX2FuZF9MaWJyYXJpZXMgKSAKKyAqIFByb2Nl
c3MgZW50cnkgcG9pbnQgKF9fRTMyU3RhcnR1cCkgLT4gUnVuVGhyZWFkKCkgLT4gVXNlckhlYXA6
OlNldHVwVGhyZWFkSGVhcCgpLiAKKyAqIFNldHVwVGhyZWFkSGVhcCgpIGlzIHdoZXJlIHdlIGlu
aXRpYWxpemUgb3VyIGN1c3RvbSAoaGVhcCkgYWxsb2NhdG9yLgorICogSWYgdGhpcyBpcyBmaXJz
dCB0aHJlYWQgaW4gdGhlIHByb2Nlc3MsIGNvbnN0cnVjdG9ycyBmb3Igc3RhdGljIGRhdGEgYXJl
IGNhbGxlZCwgZm9sbG93ZWQgYnkgRTMyTWFpbigpLiAKKyAqIElmIE5PVCBmaXJzdCB0aHJlYWQg
aW4gcHJvY2VzcywgdGhlIHRocmVhZCdzIGVudHJ5IHBvaW50IGlzIGNhbGxlZCBzdHJhaWdodCBh
d2F5LiAKKyAqIE5PVEU6IFVzZXJIZWFwOjpTZXR1cFRocmVhZEhlYXAoKSBpcyBjYWxsZWQgQkVG
T1JFIHN0YXRpYyBkYXRhIGlzIGluaXRpYWxpemVkCisgCisgCitEZWJ1Z2dpbmcgc3VwcG9ydDoK
KworKiBUbyB1c2Ugc3RhbmRhcmQgU3ltYmlhbi9TNjAgbWVtb3J5IGFuYWx5c2lzIHRvb2xzLCBj
b21tZW50IG91dCB0aGUgY2FsbCB0byBVc2VySGVhcDo6U2V0dXBUaHJlYWRIZWFwKCkgYW5kIHJl
Y29tcGlsZSB0aGUgbGlicmFyeS4gCisgIFRoZW4gcmVsaW5rIHlvdXIgYXBwbGljYXRpb24gKC5l
eGUpIHdpdGggdGhlIHVwZGF0ZWQgbGlicmFyeS4gVGhpcyB3aWxsIG1ha2UgUkhlYXAgeW91ciBk
ZWZhdWx0IGFsbG9jYXRvciBvbmNlIGFnYWluLiAKKworKGZyb20gU2hhbmUgS2Vhcm5zKSAKKyog
V2l0aCBhIDkuNCAoNS4wKSBvciBsYXRlciBSTkQgZW52aXJvbm1lbnQsIHlvdSBjYW4gdXNlIEJU
UkFDRSBieSBkZWZpbmluZyB0aGUgcmVxdWlyZWQgQlRSQUNFIG1hY3JvcyAoaW4gdGhlIHNvdXJj
ZSwgY29tbWVudGVkIG91dCkuCisgIFRoaXMgZW1pdHMgdGhlIHNhbWUgQlRSQUNFIGVudHJpZXMg
YXMgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLCBzbyB5b3UgY2FuIGRvIG1lbW9yeSBsZWFrIGFuYWx5
c2lzIHVzaW5nIGV4aXN0aW5nIHRvb2xzIGJhc2VkIG9uIEJUUkFDRS4KKyAgRm9yIGV4YW1wbGUs
IHRoZSBwcm9taXNpbmcgYnV0IGNhbmNlbGxlZCBTQVcuICh3aGljaCBpcyBzdGlsbCBhdmFpbGFi
bGUgaW5zaWRlIG5va2lhKS4gCisqIE1lbW9yeSBhbmFseXNpcyB0b29scyBiYXNlZCBvbiBkdW1w
aW5nIHRoZSBoZWFwIHRvIGEgZmlsZSBhbmQgZG9pbmcgcG9zdC1tb3J0ZW0gYW5hbHlzaXMgd29u
J3Qgd29yayB1bmxlc3Mgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGlzIGFsbG9jYXRvci4K
KworCisKKwpJbmRleDogV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9TeW1iaWFu
TWVtb3J5QWxsb2NhdG9yLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TeW1iaWFuTWVt
b3J5QWxsb2NhdG9yL1N5bWJpYW5NZW1vcnlBbGxvY2F0b3IucHJvCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9TeW1iaWFuTWVtb3J5QWxsb2NhdG9y
LnBybwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorIworIyBUaGlz
IGZpbGUgaXMgcGFydCBvZiBRdCBXZWIgUnVudGltZS4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyMgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjCisKKyMgQ3VzdG9tIG1lbW9yeSBhbGxvY2F0b3Ig
bGliIGZvciBTeW1iaWFuIG9ubHkKK1RFTVBMQVRFID0gbGliCitUQVJHRVQgICA9IFN5bWJpYW5N
ZW1vcnlBbGxvY2F0b3IKKyMgV2UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhpcyBsYXRlciB0byBw
cm9qZWN0LXNwZWNpZmljIG91dHB1dCBhcmVhCitERVNURElSICA9ICQkUU1BS0VfTElCRElSX1FU
CisjIE5vIG5lZWQgZm9yIGFueSBRdCBsaWJzIGhlcmUsIHB1cmUgU3ltYmlhbiBDKysKK1FUICAg
ICAgID0KKworQ09ORklHICArPSBzdGF0aWNsaWIgd2Fybl9vbgorQ09ORklHICAtPSBxdCBzaGFy
ZWQKKworc3ltYmlhbiB7CisgICAgIyBOb3RlOiBVSUQgb25seSBuZWVkZWQgZm9yIGVuc3VyaW5n
IHRoYXQgbm8gZmlsZW5hbWUgZ2VuZXJhdGlvbiBjb25mbGljdHMgb2NjdXIKKyAgICBUQVJHRVQu
VUlEMyA9IDB4MjAwMjY3QjgKKyAgICBJTkNMVURFUEFUSCArPSAuICQke0VQT0NST09UfWVwb2Mz
Mi9pbmNsdWRlCisgICAgSU5DTFVERVBBVEggKz0gLiAkJHtFUE9DUk9PVH1lcG9jMzIvaW5jbHVk
ZS9wbGF0Zm9ybQorICAgIFNPVVJDRVBBVEggPSAuCisgICAgU09VUkNFUyAgPSAgbmV3YWxsb2Nh
dG9yX2hvb2suY3BwIG5ld2FsbG9jYXRvci5jcHAKKyAgICBNTVBfUlVMRVMgKz0gRVhQT1JUVU5G
Uk9aRU4KKyAgICAKKyAgICAjIFRoaXMgc2VlbXMgbm90IHRvIHdvcmssIHNvbWUgaGFyZCBjb2Rl
ZCBsaWJzIGFyZSBzdGlsbCBhZGRlZCBhcyBkZXBlbmRlbmN5CisgICAgTElCUyA9Cit9IGVsc2Ug
eworICAgIGVycm9yKCIkJF9GSUxFXyBpcyBpbnRlbmRlZCBvbmx5IGZvciBTeW1iaWFuISIpCit9
CkluZGV4OiBXZWJLaXRUb29scy9TeW1iaWFuTWVtb3J5QWxsb2NhdG9yL2RsYV9wLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9kbGFfcC5oCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9kbGFfcC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKgor
ICogQ29weXJpZ2h0IChjKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBRdCBXZWIgUnVudGltZS4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB
LgorICoKKyAqLworI2lmbmRlZiBfX0RMQV9fCisjZGVmaW5lIF9fRExBX18KKworI2RlZmluZSBE
RUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KTRVICogKHNpemVfdCkxMDI0VSkKKworI2Rl
ZmluZSBfX1NZTUJJQU5fXworI2RlZmluZSBNU1BBQ0VTIDAKKyNkZWZpbmUgSEFWRV9NT1JFQ09S
RSAxCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2RlZmluZSBIQVZFX01NQVAgMAor
I2RlZmluZSBIQVZFX01SRU1BUCAwCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDQwOTZV
KQorI2RlZmluZSBGT09URVJTIDAKKyNkZWZpbmUgVVNFX0xPQ0tTIDAKKyNkZWZpbmUgSU5TRUNV
UkUgMQorI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUKKwor
I2RlZmluZSBMQUNLU19TWVNfVFlQRVNfSAorI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSAorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLworI2Vsc2UKKyNpZm5kZWYgX1NJ
WkVfVF9ERUNMQVJFRAordHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OworI2RlZmluZSBfU0la
RV9UX0RFQ0xBUkVECisjZW5kaWYKKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKwor
LyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8K
KyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05M
WV9NU1BBQ0VTCisgICAgI2RlZmluZSBPTkxZX01TUEFDRVMgMAorI2VuZGlmICAvKiBPTkxZX01T
UEFDRVMgKi8KKworI2lmbmRlZiBNU1BBQ0VTCisgICAgI2lmIE9OTFlfTVNQQUNFUworICAgICAg
ICAjZGVmaW5lIE1TUEFDRVMgMQorICAgICNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisgICAg
ICAgICNkZWZpbmUgTVNQQUNFUyAwCisgICAgI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNl
bmRpZiAgLyogTVNQQUNFUyAqLworCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyAgICAjZGVm
aW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpOFUpCisjZW5kaWYgIC8qIE1BTExPQ19BTElH
Tk1FTlQgKi8KKworI2lmbmRlZiBGT09URVJTCisgICAgI2RlZmluZSBGT09URVJTIDAKKyNlbmRp
ZiAgLyogRk9PVEVSUyAqLworCisjaWZuZGVmIEFCT1JUCisvLyAgI2RlZmluZSBBQk9SVCAgYWJv
cnQoKQorICAgICNkZWZpbmUgQUJPUlQgIFVzZXI6OkludmFyaWFudCgpLy8gcmVkZWZpbmVkIHNv
IGV1c2VyIGlzbid0IGRlcGVuZGFudCBvbiBvZQorI2VuZGlmICAvKiBBQk9SVCAqLworCisjaWZu
ZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisgICAgI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRf
RkFJTFVSRSAxCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisKKyNpZm5k
ZWYgUFJPQ0VFRF9PTl9FUlJPUgorICAgICNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwCisjZW5k
aWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworI2lmbmRlZiBVU0VfTE9DS1MKKyAgICAjZGVm
aW5lIFVTRV9MT0NLUyAwCisjZW5kaWYgIC8qIFVTRV9MT0NLUyAqLworCisjaWZuZGVmIElOU0VD
VVJFCisgICAgI2RlZmluZSBJTlNFQ1VSRSAwCisjZW5kaWYgIC8qIElOU0VDVVJFICovCisKKyNp
Zm5kZWYgSEFWRV9NTUFQCisgICAgI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZF
X01NQVAgKi8KKworI2lmbmRlZiBNTUFQX0NMRUFSUworICAgICNkZWZpbmUgTU1BUF9DTEVBUlMg
MQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLworCisjaWZuZGVmIEhBVkVfTVJFTUFQCisgICAg
I2lmZGVmIGxpbnV4CisgICAgICAgICNkZWZpbmUgSEFWRV9NUkVNQVAgMQorICAgICNlbHNlICAg
LyogbGludXggKi8KKyAgICAgICAgI2RlZmluZSBIQVZFX01SRU1BUCAwCisgICAgI2VuZGlmICAv
KiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworCisjaWZuZGVmIE1BTExPQ19G
QUlMVVJFX0FDVElPTgorICAgIC8vI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gIGVycm5v
ID0gRU5PTUVNOworICAgICNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OIDsKKyNlbmRpZiAg
LyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisKKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorICAg
ICNpZiBPTkxZX01TUEFDRVMKKyAgICAgICAgI2RlZmluZSBIQVZFX01PUkVDT1JFIDEgLypBTU9E
OiBoYXMgY2hhbmdlZCAqLworICAgICNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisgICAgICAg
ICNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisgICAgI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8K
KyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworCisjaWYgIUhBVkVfTU9SRUNPUkUKKyAgICAj
ZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAorI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAq
LworICAgICNpZm5kZWYgTU9SRUNPUkUKKyAgICAgICAgI2RlZmluZSBNT1JFQ09SRSBETEFkanVz
dAorICAgICNlbmRpZiAgLyogTU9SRUNPUkUgKi8KKyAgICAjaWZuZGVmIE1PUkVDT1JFX0NPTlRJ
R1VPVVMKKyAgICAgICAgI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyAgICAjZW5kaWYg
IC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogIUhBVkVfTU9SRUNPUkUgKi8K
KworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisgICAgI2lmIE1PUkVDT1JFX0NPTlRJR1VP
VVMKKyAgICAgICAgI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZIDQwOTYgIC8qIDAgbWVhbnMg
dG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyAgICAjZWxzZSAgIC8qIE1PUkVDT1JFX0NP
TlRJR1VPVVMgKi8KKyAgICAgICAgI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90
KTY0VSAqIChzaXplX3QpMTAyNFUpCisgICAgI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VT
ICovCisjZW5kaWYgIC8qIERFRkFVTFRfR1JBTlVMQVJJVFkgKi8KKworI2lmbmRlZiBERUZBVUxU
X1RSSU1fVEhSRVNIT0xECisgICAgI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorICAgICAg
ICAjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEw
MjRVICogKHNpemVfdCkxMDI0VSkKKyAgICAjZWxzZSAgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklN
ICovCisgICAgICAgICNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisg
ICAgI2VuZGlmICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2VuZGlmICAvKiBERUZBVUxU
X1RSSU1fVEhSRVNIT0xEICovCisKKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorICAg
ICNpZiBIQVZFX01NQVAKKyAgICAgICAgI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgo
c2l6ZV90KTI1NlUgKiAoc2l6ZV90KTEwMjRVKQorICAgICNlbHNlICAgLyogSEFWRV9NTUFQICov
CisgICAgICAgICNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBNQVhfU0laRV9UCisgICAg
I2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9M
RCAqLworCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUworICAgICNkZWZpbmUgVVNFX0JVSUxUSU5f
RkZTIDAKKyNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovCisKKyNpZm5kZWYgVVNFX0RFVl9S
QU5ET00KKyAgICAjZGVmaW5lIFVTRV9ERVZfUkFORE9NIDAKKyNlbmRpZiAgLyogVVNFX0RFVl9S
QU5ET00gKi8KKworI2lmbmRlZiBOT19NQUxMSU5GTworICAgICNkZWZpbmUgTk9fTUFMTElORk8g
MAorI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLworI2lmbmRlZiBNQUxMSU5GT19GSUVMRF9UWVBF
CisgICAgI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxM
SU5GT19GSUVMRF9UWVBFICovCisKKy8qCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklE
L1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCisgIG51bWJlcnMgZm9yIG1hbGxv
cHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCisgIGFyZSB1
c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRo
aXMKKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisqLworCisj
ZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkKKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAg
ICAgICAgKC0yKQorI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAoLTMpCisKKyNpZiAhTk9f
TUFMTElORk8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5k
YXJkIFNWSUQvWFBHIG1hbGxpbmZvCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNv
bnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdv
cmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZp
bmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMg
dGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQorICBieSBtYWxs
aW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMg
dGhhdAorICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9j
LiAgVGhlc2UgZmllbGRzIGFyZQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3
aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgorICBpbnRlcmVzdC4KKworICBIQVZF
X1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQorICAvdXNy
L2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3Ry
dWN0CisgIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50
IHZlcnNpb24gaXMKKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0
aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bworICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVy
c2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0CisgIHN5c3RlbXMgd2l0aCBtYWxs
aW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKKyAgZGVm
aW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1
c2luZyBhCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBN
VVNUICNpbmNsdWRlIHlvdXIKKyAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1Jf
SU5DTFVERV9NQUxMT0NfSC4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxM
T0NfSCAqLworCisjaWZkZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSAorI2luY2x1ZGUgIi91
c3IvaW5jbHVkZS9tYWxsb2MuaCIKKyNlbHNlIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gg
Ki8KKworc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAg
Lyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZP
X0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxM
SU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVM
RF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhi
bGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERf
VFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFM
TElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklF
TERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZP
X0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9f
RklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFj
ZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGNlbGxDb3VudDsvKiBOdW1iZXIgb2YgY2h1bmtz
IGFsbG9jYXRlZCovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgbGFyZ2VzdEJsb2NrOworfTsKKwor
I2VuZGlmIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKyNlbmRpZiAvKiBOT19NQUxM
SU5GTyAqLworCisjaWYgTVNQQUNFUworICAgIHR5cGVkZWYgdm9pZCogbXNwYWNlOworI2VuZGlm
IC8qIE1TUEFDRVMgKi8KKworI2lmbmRlZiBfX1NZTUJJQU5fXworCisjaW5jbHVkZSA8c3RkaW8u
aD4vKiBmb3IgcHJpbnRpbmcgaW4gbWFsbG9jX3N0YXRzICovCisKKyNpZm5kZWYgTEFDS1NfRVJS
Tk9fSAorICAgICNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVf
QUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworCisjaWYgRk9PVEVSUworICAg
ICNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8K
KyNlbmRpZiAvKiBGT09URVJTICovCisKKyNpZm5kZWYgTEFDS1NfU1RETElCX0gKKyAgICAjaW5j
bHVkZSA8c3RkbGliLmg+ICAgICAgLyogZm9yIGFib3J0KCkgKi8KKyNlbmRpZiAvKiBMQUNLU19T
VERMSUJfSCAqLworCisjaWZkZWYgREVCVUcKKyAgICAjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxV
UkUKKyAgICAgICAgI2RlZmluZSBhc3NlcnQoeCkgaWYgKCEoeCkpIEFCT1JUCisgICAgI2Vsc2Ug
LyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyAgICAgICAgI2luY2x1ZGUgPGFzc2VydC5o
PgorICAgICNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERF
QlVHICovCisgICAgICAgICNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYgLyogREVCVUcgKi8KKwor
I2lmbmRlZiBMQUNLU19TVFJJTkdfSAorICAgICNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBm
b3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworCisjaWYgVVNF
X0JVSUxUSU5fRkZTCisgICAgI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyAgICAgICAgI2luY2x1
ZGUgPHN0cmluZ3MuaD4gICAgIC8qIGZvciBmZnMgKi8KKyAgICAjZW5kaWYgLyogTEFDS1NfU1RS
SU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisKKyNpZiBIQVZFX01NQVAK
KyAgICAjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyAgICAgICAgI2luY2x1ZGUgPHN5cy9tbWFu
Lmg+ICAgIC8qIGZvciBtbWFwICovCisgICAgI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8K
KyAgICAjaWZuZGVmIExBQ0tTX0ZDTlRMX0gKKyAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+Cisg
ICAgI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKwor
I2lmIEhBVkVfTU9SRUNPUkUKKyAgICAjaWZuZGVmIExBQ0tTX1VOSVNURF9ICisgICAgICAgICNp
bmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrICovCisgICAgZXh0ZXJuIHZvaWQqICAg
ICBzYnJrKHNpemVfdCk7CisgICAgI2Vsc2UgLyogTEFDS1NfVU5JU1REX0ggKi8KKyAgICAgICAg
I2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRl
ZmluZWQoX19OZXRCU0RfXykKKyAgICAgICAgICAgIGV4dGVybiB2b2lkKiAgICAgc2JyayhwdHJk
aWZmX3QpOworICAgICAgICAgICAgLypBbW9kIHNicmsgaXMgbm90IGRlZmluZWQgaW4gV0lOMzIg
bmVlZCB0byBjaGVjayBpbiBzeW1iaWFuKi8KKyAgICAgICAgI2VuZGlmIC8qIEZyZWVCU0QgZXRj
ICovCisgICAgI2VuZGlmIC8qIExBQ0tTX1VOSVNURF9IICovCisjZW5kaWYgLyogSEFWRV9NT1JF
Q09SRSAqLworCisjZW5kaWYKKworI2RlZmluZSBhc3NlcnQoeCkgICBBU1NFUlQoeCkKKworI2lm
bmRlZiBXSU4zMgorICAgICNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisgICAgICAgICNpZmRl
ZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVy
c2NvcmUgKi8KKyAgICAgICAgICAgICNpZm5kZWYgX1NDX1BBR0VfU0laRQorICAgICAgICAgICAg
ICAgICNkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyAgICAgICAgICAgICNlbmRp
ZgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmZGVmIF9TQ19QQUdFX1NJWkUKKyAgICAgICAg
ICAgICNkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKKyAg
ICAgICAgI2Vsc2UKKyAgICAgICAgICAgICNpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VY
KSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgICAgICAgICAgZXh0ZXJuIHNp
emVfdCBnZXRwYWdlc2l6ZSgpOworICAgICAgICAgICAgICAgICNkZWZpbmUgbWFsbG9jX2dldHBh
Z2VzaXplIGdldHBhZ2VzaXplKCkKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAg
I2lmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8K
KyAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNp
emUoKQorICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICNpZm5kZWYg
TEFDS1NfU1lTX1BBUkFNX0gKKyAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMv
cGFyYW0uaD4KKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
ICNpZmRlZiBFWEVDX1BBR0VTSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIG1h
bGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisgICAgICAgICAgICAgICAgICAgICNlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAjaWZkZWYgTkJQRworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICNpZm5kZWYgQ0xTSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICNkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIG1hbGxv
Y19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgI2lmZGVmIE5CUEMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
I2RlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQQworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpZmRlZiBQQUdFU0la
RQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBtYWxsb2NfZ2V0
cGFnZXNpemUgUEFHRVNJWkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2Ug
LyoganVzdCBndWVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Rl
ZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKChzaXplX3QpNDA5NlUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICNl
bmRpZgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2VuZGlmCisgICAgICAg
ICNlbmRpZgorICAgICNlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6
ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisv
KiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJ
WkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAg
KHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6
ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21l
IHBsYWZ0b3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisj
ZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RX
TyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBUV09fU0laRV9UX1NJWkVTICAgIChTSVpF
X1RfU0laRTw8MSkKKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIp
CisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpF
X1RfU0laRVMpCisjZGVmaW5lIEhBTEZfTUFYX1NJWkVfVCAgICAgKE1BWF9TSVpFX1QgLyAyVSkK
KworLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVO
VCAqLworI2RlZmluZSBDSFVOS19BTElHTl9NQVNLICAgIChNQUxMT0NfQUxJR05NRU5UIC0gU0la
RV9UX09ORSkKKworLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50
ICovCisvLyNkZWZpbmUgaXNfYWxpZ25lZChBKSAgICAgICAoKChzaXplX3QpKChBKSkgJiAoQ0hV
TktfQUxJR05fTUFTSykpID09IDApCisjZGVmaW5lIGlzX2FsaWduZWQoQSkgICAgICAgKCgodW5z
aWduZWQgaW50KSgoQSkpICYgKENIVU5LX0FMSUdOX01BU0spKSA9PSAwKQorCisvKiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovCisjZGVmaW5l
IGFsaWduX29mZnNldChBKVwKKyAgICAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0sp
ID09IDApPyAwIDpcCisgICAgKChNQUxMT0NfQUxJR05NRU5UIC0gKChzaXplX3QpKEEpICYgQ0hV
TktfQUxJR05fTUFTSykpICYgQ0hVTktfQUxJR05fTUFTSykpCisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIE1NQVAgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCisKKy8qCisgICBJZiBIQVZFX01PUkVDT1JFIG9yIEhBVkVfTU1BUCBhcmUgZmFsc2UsIHdl
IGp1c3QgZGVmaW5lIGNhbGxzIGFuZAorICAgY2hlY2tzIHRvIGZhaWwgc28gY29tcGlsZXIgb3B0
aW1pemVyIGNhbiBkZWxldGUgY29kZSByYXRoZXIgdGhhbgorICAgdXNpbmcgc28gbWFueSAiI2lm
InMuCisqLworCisKKy8qIE1PUkVDT1JFIGFuZCBNTUFQIG11c3QgcmV0dXJuIE1GQUlMIG9uIGZh
aWx1cmUgKi8KKyNkZWZpbmUgTUZBSUwgICAgICAgICAgICAgICAgKCh2b2lkKikoTUFYX1NJWkVf
VCkpCisjZGVmaW5lIENNRkFJTCAgICAgICAgICAgICAgICgoVFVpbnQ4KikoTUZBSUwpKSAvKiBk
ZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgIUhBVkVfTU1BUAorICAgICNkZWZpbmUg
SVNfTU1BUFBFRF9CSVQgICAgICAgKFNJWkVfVF9aRVJPKQorICAgICNkZWZpbmUgVVNFX01NQVBf
QklUICAgICAgICAgKFNJWkVfVF9aRVJPKQorICAgICNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAg
ICAgTUZBSUwKKyAgICAjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgICgtMSkKKyAgICAjZGVm
aW5lIERJUkVDVF9NTUFQKHMpICAgICAgIE1GQUlMCisjZWxzZSAvKiAhSEFWRV9NTUFQICovCisg
ICAgI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX09ORSkKKyAgICAjZGVmaW5l
IFVTRV9NTUFQX0JJVCAgICAgICAgIChTSVpFX1RfT05FKQorICAgICAgICAjaWZuZGVmIFdJTjMy
CisgICAgICAgICAgICAjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgIERMVU1NQVAoKGEpLChz
KSkgLyptdW5tYXAoKGEpLCAocykpKi8KKyAgICAgICAgICAgICNkZWZpbmUgTU1BUF9QUk9UICAg
ICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorICAgICAgICAgICAgI2lmICFkZWZpbmVk
KE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisgICAgICAgICAgICAgICAgI2Rl
ZmluZSBNQVBfQU5PTllNT1VTICAgICAgICBNQVBfQU5PTgorICAgICAgICAgICAgI2VuZGlmIC8q
IE1BUF9BTk9OICovCisgICAgICAgICAgICAjaWZkZWYgTUFQX0FOT05ZTU9VUworICAgICAgICAg
ICAgICAgICNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9O
WU1PVVMpCisgICAgICAgICAgICAgICAgI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBtbWFw
KDAsIChzKSwgTU1BUF9QUk9ULCAoaW50KU1NQVBfRkxBR1MsIC0xLCAwKQorICAgICAgICAgICAg
I2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgICAgICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9V
Uywgc28gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgIGlzIHVubGlrZWx5IHRvIGJl
IG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyAgICAgICAgICAgICAgICAq
LworICAgICAgICAgICAgICAgICNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklW
QVRFKQorICAgICAgICAgICAgICAgIC8vc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBD
YWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisgICAgICAgICAgICAgICAg
I2RlZmluZSBDQUxMX01NQVAocykgRExNTUFQKHMpCisgICAgICAgICAgICAgICAgLyojZGVmaW5l
IENBTExfTU1BUChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisgICAgICAgICAgICAgICAgICAg
ICAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96
ZXJvX2ZkLCAwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1B
UF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgICAgICNkZWZpbmUgQ0FMTF9SRU1BUChhLCBzLCBkKSAgICBE
TFJFTUFQKChhKSwocyksKGQpKQorICAgICAgICAgICAgI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMg
Ki8KKyAgICAgICAgICAgICNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgQ0FMTF9NTUFQKHMp
CisgICAgICAgICNlbHNlIC8qIFdJTjMyICovCisgICAgICAgICAgICAjZGVmaW5lIENBTExfTU1B
UChzKSAgICAgICAgIHdpbjMybW1hcChzKQorICAgICAgICAgICAgI2RlZmluZSBDQUxMX01VTk1B
UChhLCBzKSAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyAgICAgICAgICAgICNkZWZpbmUgRElS
RUNUX01NQVAocykgICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorICAgICAgICAjZW5kaWYgLyog
V0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmIEhBVkVfTU1BUCAmJiBIQVZF
X01SRU1BUAorICAgICNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBtcmVt
YXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhB
VkVfTVJFTUFQICovCisgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYp
IE1GQUlMCisjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisKKyNpZiBIQVZF
X01PUkVDT1JFCisgICAgI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICBTZXRCcmsoUykKKyNl
bHNlICAvKiBIQVZFX01PUkVDT1JFICovCisgICAgI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAg
ICBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworLyogbXN0YXRlIGJpdCBzZXQg
aWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVT
RV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVf
bXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQor
CisKKyNpZiBVU0VfTE9DS1MKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGFy
ZSB1cCB0byB0d28gZ2xvYmFsIGxvY2tzOgorICAqIElmIEhBVkVfTU9SRUNPUkUsIG1vcmVjb3Jl
X211dGV4IHByb3RlY3RzIHNlcXVlbmNlcyBvZiBjYWxscyB0bworICAgIE1PUkVDT1JFLiAgSW4g
bWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMgdHdvIGNhbGxzLCB0aGF0IHNob3VsZAorICAg
IG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyIHRocmVhZHMuICBUaGlzIGRv
ZXMgbm90CisgICAgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBieSBv
dGhlciB0aHJlYWRzIG5vdAorICAgIHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwg
Y29kZSB0byBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbgorICAgIGludGVyZmVyZW5jZS4KKyAgKiBt
YWdpY19pbml0X211dGV4IGVuc3VyZXMgdGhhdCBtcGFyYW1zLm1hZ2ljIGFuZCBvdGhlcgorICAg
IHVuaXF1ZSBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLgorKi8KKyAg
ICAjaWZuZGVmIFdJTjMyCisgICAgICAgIC8qIEJ5IGRlZmF1bHQgdXNlIHBvc2l4IGxvY2tzICov
CisgICAgICAgICNpbmNsdWRlIDxwdGhyZWFkLmg+CisgICAgICAgICNkZWZpbmUgTUxPQ0tfVCBw
dGhyZWFkX211dGV4X3QKKyAgICAgICAgI2RlZmluZSBJTklUSUFMX0xPQ0sobCkgICAgICBwdGhy
ZWFkX211dGV4X2luaXQobCwgTlVMTCkKKyAgICAgICAgI2RlZmluZSBBQ1FVSVJFX0xPQ0sobCkg
ICAgICBwdGhyZWFkX211dGV4X2xvY2sobCkKKyAgICAgICAgI2RlZmluZSBSRUxFQVNFX0xPQ0so
bCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsKQorCisgICAgICAgICNpZiBIQVZFX01PUkVD
T1JFCisgICAgICAgICAgICAvL3N0YXRpYyBNTE9DS19UIG1vcmVjb3JlX211dGV4ID0gUFRIUkVB
RF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgICAgICAgI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8K
KyAgICAgICAgICAgIC8vc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleCA9IFBUSFJFQURf
TVVURVhfSU5JVElBTElaRVI7CisgICAgI2Vsc2UgLyogV0lOMzIgKi8KKyAgICAgICAgI2RlZmlu
ZSBNTE9DS19UIGxvbmcKKyAgICAgICAgI2RlZmluZSBJTklUSUFMX0xPQ0sobCkgICAgICAqKGwp
PTAKKyAgICAgICAgI2RlZmluZSBBQ1FVSVJFX0xPQ0sobCkgICAgICB3aW4zMl9hY3F1aXJlX2xv
Y2sobCkKKyAgICAgICAgI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICB3aW4zMl9yZWxlYXNl
X2xvY2sobCkKKyAgICAgICAgI2lmIEhBVkVfTU9SRUNPUkUKKyAgICAgICAgICAgIHN0YXRpYyBN
TE9DS19UIG1vcmVjb3JlX211dGV4OworICAgICAgICAjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAq
LworICAgICAgICBzdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4OworICAgICNlbmRpZiAv
KiBXSU4zMiAqLworICAgICNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQor
I2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworICAgICNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAg
ICAgICAgKDBVKQorICAgICNkZWZpbmUgSU5JVElBTF9MT0NLKGwpCisjZW5kaWYgLyogVVNFX0xP
Q0tTICovCisKKyNpZiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRQorICAgICNkZWZpbmUgQUNR
VUlSRV9NT1JFQ09SRV9MT0NLKE0pICAgIEFDUVVJUkVfTE9DSygoTS0+bW9yZWNvcmVfbXV0ZXgp
LyombW9yZWNvcmVfbXV0ZXgqLyk7CisgICAgI2RlZmluZSBSRUxFQVNFX01PUkVDT1JFX0xPQ0so
TSkgICAgUkVMRUFTRV9MT0NLKChNLT5tb3JlY29yZV9tdXRleCkvKiZtb3JlY29yZV9tdXRleCov
KTsKKyNlbHNlIC8qIFVTRV9MT0NLUyAmJiBIQVZFX01PUkVDT1JFICovCisgICAgI2RlZmluZSBB
Q1FVSVJFX01PUkVDT1JFX0xPQ0soTSkKKyAgICAjZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9D
SyhNKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAmJiBIQVZFX01PUkVDT1JFICovCisKKyNpZiBVU0Vf
TE9DS1MKKyAgICAgICAgLypDdXJyZW50bHkgbm90IHN1cG9ydGluZyB0aGlzKi8KKyAgICAjZGVm
aW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKE0pICBBQ1FVSVJFX0xPQ0soKChNKS0+bWFnaWNf
aW5pdF9tdXRleCkpOworICAgIC8vQU1PRDogY2hhbmdlZCAjZGVmaW5lIEFDUVVJUkVfTUFHSUNf
SU5JVF9MT0NLKCkKKyAgICAvLyNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKQorICAg
ICNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soTSkgIFJFTEVBU0VfTE9DSygoKE0pLT5t
YWdpY19pbml0X211dGV4KSk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisgICAgI2RlZmluZSBB
Q1FVSVJFX01BR0lDX0lOSVRfTE9DSyhNKQorICAgICNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklU
X0xPQ0soTSkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLypDSFVOSyByZXByZXNlbnRhdGlv
biovCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9m
b290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3Qg
ICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBz
dHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBv
bmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRl
ZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1
bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8q
IFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5k
ZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50
IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25l
ZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBz
ZXRzICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBDaHVua3Mgc2l6ZXMgYW5kIGFsaWdu
bWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAg
ICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisgICAgI2RlZmluZSBDSFVOS19P
VkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworICAg
ICNkZWZpbmUgQ0hVTktfT1ZFUkhFQUQgICAgICAoU0laRV9UX1NJWkUpCisjZW5kaWYgLyogRk9P
VEVSUyAqLworCisvKiBNTWFwcGVkIGNodW5rcyBuZWVkIGEgc2Vjb25kIHdvcmQgb2Ygb3Zlcmhl
YWQgLi4uICovCisjZGVmaW5lIE1NQVBfQ0hVTktfT1ZFUkhFQUQgKFRXT19TSVpFX1RfU0laRVMp
CisvKiAuLi4gYW5kIGFkZGl0aW9uYWwgcGFkZGluZyBmb3IgZmFrZSBuZXh0LWNodW5rIGF0IGZv
b3QgKi8KKyNkZWZpbmUgTU1BUF9GT09UX1BBRCAgICAgICAoRk9VUl9TSVpFX1RfU0laRVMpCisK
Ky8qIFRoZSBzbWFsbGVzdCBzaXplIHdlIGNhbiBtYWxsb2MgaXMgYW4gYWxpZ25lZCBtaW5pbWFs
IGNodW5rICovCisjZGVmaW5lIE1JTl9DSFVOS19TSVpFICgoTUNIVU5LX1NJWkUgKyBDSFVOS19B
TElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFs
bG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsy
bWVtKHApICAgICAgICAoKHZvaWQqKSgoVFVpbnQ4KikocCkgICAgICAgKyBUV09fU0laRV9UX1NJ
WkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKFRVaW50OCop
KG1lbSkgLSBUV09fU0laRV9UX1NJWkVTKSkKKy8qIGNodW5rIGFzc29jaWF0ZWQgd2l0aCBhbGln
bmVkIGFkZHJlc3MgQSAqLworI2RlZmluZSBhbGlnbl9hc19jaHVuayhBKSAgIChtY2h1bmtwdHIp
KChBKSArIGFsaWduX29mZnNldChjaHVuazJtZW0oQSkpKQorCisvKiBCb3VuZHMgb24gcmVxdWVz
dCAobm90IGNodW5rKSBzaXplcy4gKi8KKyNkZWZpbmUgTUFYX1JFUVVFU1QgICAgICAgICAoKC1N
SU5fQ0hVTktfU0laRSkgPDwgMikKKyNkZWZpbmUgTUlOX1JFUVVFU1QgICAgICAgICAoTUlOX0NI
VU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRCAtIFNJWkVfVF9PTkUpCisKKy8qIHBhZCByZXF1ZXN0
IGJ5dGVzIGludG8gYSB1c2FibGUgc2l6ZSAqLworI2RlZmluZSBwYWRfcmVxdWVzdChyZXEpICgo
KHJlcSkgKyBDSFVOS19PVkVSSEVBRCArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdO
X01BU0spCisKKy8qIHBhZCByZXF1ZXN0LCBjaGVja2luZyBmb3IgbWluaW11bSAoYnV0IG5vdCBt
YXhpbXVtKSAqLworI2RlZmluZSByZXF1ZXN0MnNpemUocmVxKSAoKChyZXEpIDwgTUlOX1JFUVVF
U1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKy8qIC0tLS0tLS0tLS0t
LS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0t
LS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQ
SU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3In
ZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1
bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNf
TU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNl
IG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisqLwor
I2RlZmluZSBQSU5VU0VfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorI2RlZmluZSBDSU5VU0Vf
QklUICAgICAgICAgIChTSVpFX1RfVFdPKQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQ
SU5VU0VfQklUfENJTlVTRV9CSVQpCisKKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8K
KyNkZWZpbmUgRkVOQ0VQT1NUX0hFQUQgICAgICAoSU5VU0VfQklUU3xTSVpFX1RfU0laRSkKKwor
LyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovCisjZGVmaW5lIGNpbnVz
ZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIENJTlVTRV9CSVQpCisjZGVmaW5lIHBpbnVzZShw
KSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpCisjZGVmaW5lIGNodW5rc2l6ZShw
KSAgICAgICAgKChwKS0+aGVhZCAmIH4oSU5VU0VfQklUUykpCisKKyNkZWZpbmUgY2xlYXJfcGlu
dXNlKHApICAgICAoKHApLT5oZWFkICY9IH5QSU5VU0VfQklUKQorI2RlZmluZSBjbGVhcl9jaW51
c2UocCkgICAgICgocCktPmhlYWQgJj0gfkNJTlVTRV9CSVQpCisKKy8qIFRyZWF0IHNwYWNlIGF0
IHB0ciArLy0gb2Zmc2V0IGFzIGEgY2h1bmsgKi8KKyNkZWZpbmUgY2h1bmtfcGx1c19vZmZzZXQo
cCwgcykgICgobWNodW5rcHRyKSgoKFRVaW50OCopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5r
X21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChUVWludDgqKShwKSkgLSAocykpKQor
CisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovCisj
ZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKFRVaW50OCopKHApKSArICgocCkt
PmhlYWQgJiB+SU5VU0VfQklUUykpKQorI2RlZmluZSBwcmV2X2NodW5rKHApICgobWNodW5rcHRy
KSggKChUVWludDgqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4
dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9j
aHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVy
ICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChUVWludDgqKShwKSAr
IChzKSkpLT5wcmV2X2Zvb3QpCisjZGVmaW5lIHNldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIp
KChUVWludDgqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAocykpCisKKy8qIFNldCBzaXplLCBw
aW51c2UgYml0LCBhbmQgZm9vdCAqLworI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2Zy
ZWVfY2h1bmsocCwgcykgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBz
KSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVz
ZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKSAoY2xlYXJfcGludXNl
KG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpCisKKyNkZWZpbmUg
aXNfbW1hcHBlZChwKSAoISgocCktPmhlYWQgJiBQSU5VU0VfQklUKSAmJiAoKHApLT5wcmV2X2Zv
b3QgJiBJU19NTUFQUEVEX0JJVCkpCisKKy8qIEdldCB0aGUgaW50ZXJuYWwgb3ZlcmhlYWQgYXNz
b2NpYXRlZCB3aXRoIGNodW5rIHAgKi8KKyNkZWZpbmUgb3ZlcmhlYWRfZm9yKHApIChpc19tbWFw
cGVkKHApPyBNTUFQX0NIVU5LX09WRVJIRUFEIDogQ0hVTktfT1ZFUkhFQUQpCisKKy8qIFJldHVy
biB0cnVlIGlmIG1hbGxvY2VkIHNwYWNlIGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhcmVkICovCisj
aWYgTU1BUF9DTEVBUlMKKyAgICAjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1h
cHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisgICAgI2RlZmluZSBjYWxsb2NfbXVz
dF9jbGVhcihwKSAoMSkKKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLworCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKKyAgLyogVGhlIGZpcnN0IGZvdXIg
ZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLworICBzaXplX3Qg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2Zvb3Q7CisgIHNpemVfdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2Nf
dHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3Ry
dWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2No
dW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7CisgIHNpemVf
dCAgICAgICAgICAgIHBhZ2VvdXQ7ICAvKiBjaHVuayBwYWdlb3V0IGZsYWcgICovCisgIHNpemVf
dCAgICAgICAgICAgIG5wYWdlczsgICAvKiBjaHVuayBwYWdlb3V0IHNpemUgKi8KK307CisKK3R5
cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rICB0Y2h1bms7Cit0eXBlZGVmIHN0cnVjdCBt
YWxsb2NfdHJlZV9jaHVuayogdGNodW5rcHRyOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVf
Y2h1bmsqIHRiaW5wdHI7IC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgdHJlZXMgKi8KKworLyogQSBs
aXR0bGUgaGVscGVyIG1hY3JvIGZvciB0cmVlcyAqLworI2RlZmluZSBsZWZ0bW9zdF9jaGlsZCh0
KSAoKHQpLT5jaGlsZFswXSAhPSAwPyAodCktPmNoaWxkWzBdIDogKHQpLT5jaGlsZFsxXSkKKy8q
U2VnbWVudCBzdHJ1Y3R1ciovCitzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgeworICBUVWludDgqICAg
ICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAg
IHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nf
c2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisgIGZsYWdfdCAgICAg
ICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworfTsKKworI2Rl
ZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIElTX01NQVBQRURfQklU
KQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9C
SVQpCisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKK3R5cGVkZWYg
c3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKKworLypNYWxsb2MgU3RhdGUgZGF0
YSBzdHJ1Y3R1ciovCisKKyNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgKDMyVSkKKyNkZWZpbmUg
TlRSRUVCSU5TICAgICAgICAgKDMyVSkKKyNkZWZpbmUgU01BTExCSU5fU0hJRlQgICAgKDNVKQor
I2RlZmluZSBTTUFMTEJJTl9XSURUSCAgICAoU0laRV9UX09ORSA8PCBTTUFMTEJJTl9TSElGVCkK
KyNkZWZpbmUgVFJFRUJJTl9TSElGVCAgICAgKDhVKQorI2RlZmluZSBNSU5fTEFSR0VfU0laRSAg
ICAoU0laRV9UX09ORSA8PCBUUkVFQklOX1NISUZUKQorI2RlZmluZSBNQVhfU01BTExfU0laRSAg
ICAoTUlOX0xBUkdFX1NJWkUgLSBTSVpFX1RfT05FKQorI2RlZmluZSBNQVhfU01BTExfUkVRVUVT
VCAoTUFYX1NNQUxMX1NJWkUgLSBDSFVOS19BTElHTl9NQVNLIC0gQ0hVTktfT1ZFUkhFQUQpCisK
K3N0cnVjdCBtYWxsb2Nfc3RhdGUgeworICBiaW5tYXBfdCAgIHNtYWxsbWFwOworICBiaW5tYXBf
dCAgIHRyZWVtYXA7CisgIHNpemVfdCAgICAgZHZzaXplOyAvLyB1bnVzZWQKKyAgc2l6ZV90ICAg
ICB0b3BzaXplOworICBUVWludDgqICAgICAgbGVhc3RfYWRkcjsKKyAgbWNodW5rcHRyICBkdjsg
Ly8gdW51c2VkCisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7Cisg
IHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEp
KjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9v
dHByaW50OworICBzaXplX3QgICAgIG1heF9mb290cHJpbnQ7CisgIGZsYWdfdCAgICAgbWZsYWdz
OworI2lmIFVTRV9MT0NLUworICBNTE9DS19UICAgIG11dGV4OyAgICAgLyogbG9jYXRlIGxvY2sg
YW1vbmcgZmllbGRzIHRoYXQgcmFyZWx5IGNoYW5nZSAqLworICBNTE9DS19UICAgbWFnaWNfaW5p
dF9tdXRleDsKKyAgTUxPQ0tfVCAgIG1vcmVjb3JlX211dGV4OworI2VuZGlmIC8qIFVTRV9MT0NL
UyAqLworICBtc2VnbWVudCAgIHNlZzsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0
ZSogICAgbXN0YXRlOworCisvKiAtLS0tLS0tLS0tLS0tIEdsb2JhbCBtYWxsb2Nfc3RhdGUgYW5k
IG1hbGxvY19wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBtYWxsb2NfcGFy
YW1zIGhvbGRzIGdsb2JhbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUK
KyAgZHluYW1pY2FsbHkgc2V0IHVzaW5nIG1hbGxvcHQuIFRoZXJlIGlzIGEgc2luZ2xlIGluc3Rh
bmNlLCBtcGFyYW1zLAorICBpbml0aWFsaXplZCBpbiBpbml0X21wYXJhbXMuCisqLworCitzdHJ1
Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsK
KyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVf
dCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworI2lmIFVTRV9MT0NL
UworICBNTE9DS19UICAgbWFnaWNfaW5pdF9tdXRleDsKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8K
K307CisKKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFj
ZSIgY2FsbHMgKi8KKy8qQU1PRDogTmVlZCB0byBjaGVjayB0aGlzIGFzIHRoaXMgd2lsbCBiZSB0
aGUgbWVtYmVyIG9mIHRoZSBjbGFzcyovCisKKy8vc3RhdGljIHN0cnVjdCBtYWxsb2Nfc3RhdGUg
X2dtXzsKKy8vI2RlZmluZSBnbSAgICAgICAgICAgICAgICAgKCZfZ21fKQorCisvLyNkZWZpbmUg
aXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gJl9nbV8pCisvKkFNT0Q6IGhhcyBjaGFuZ2VkKi8K
KyNkZWZpbmUgaXNfZ2xvYmFsKE0pICAgICAgICgoTSkgPT0gZ20pCisjZGVmaW5lIGlzX2luaXRp
YWxpemVkKE0pICAoKE0pLT50b3AgIT0gMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyog
T3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8KKworI2RlZmluZSB1c2VfbG9jayhNKSAgICAgICAgICAg
KChNKS0+bWZsYWdzICYgICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAg
ICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9sb2Nr
KE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX0xPQ0tfQklUKQorCisjZGVmaW5lIHVzZV9t
bWFwKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUg
ZW5hYmxlX21tYXAoTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX01NQVBfQklUKQorI2Rl
ZmluZSBkaXNhYmxlX21tYXAoTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTU1BUF9CSVQp
CisKKyNkZWZpbmUgdXNlX25vbmNvbnRpZ3VvdXMoTSkgICgoTSktPm1mbGFncyAmICAgVVNFX05P
TkNPTlRJR1VPVVNfQklUKQorI2RlZmluZSBkaXNhYmxlX2NvbnRpZ3VvdXMoTSkgKChNKS0+bWZs
YWdzIHw9ICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisKKyNkZWZpbmUgc2V0X2xvY2soTSxMKSAo
KE0pLT5tZmxhZ3MgPSAoTCk/ICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOiAgKChNKS0+
bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVm
aW5lIHBhZ2VfYWxpZ24oUykgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUpKSAmIH4obXBhcmFt
cy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkKKworLyogZ3JhbnVsYXJpdHktYWxpZ24gYSBzaXpl
ICovCisjZGVmaW5lIGdyYW51bGFyaXR5X2FsaWduKFMpICAoKChTKSArIChtcGFyYW1zLmdyYW51
bGFyaXR5KSkgJiB+KG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkKKworI2RlZmlu
ZSBpc19wYWdlX2FsaWduZWQoUykgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXpl
IC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUykg
ICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0g
MCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBz
ZWdtZW50X2hvbGRzKFMsIEEpICAoKFRVaW50OCopKEEpID49IFMtPmJhc2UgJiYgKFRVaW50OCop
KEEpIDwgUy0+YmFzZSArIFMtPnNpemUpCisKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0K
KyAgICAjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisj
ZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyAgICAjZGVmaW5lIHNob3VsZF90cmlt
KE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRP
UF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5n
IHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5k
IGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQu
CisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkr
cGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpF
KQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBIb29rcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBQUkVBQ1RJT04gc2hvdWxkIGJlIGRl
ZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24KKyAgZmFpbHVyZS4g
SWYgeW91IGFyZSBub3QgdXNpbmcgbG9ja2luZywgeW91IGNhbiByZWRlZmluZSB0aGVzZSB0byBk
bworICBhbnl0aGluZyB5b3UgbGlrZS4KKyovCisKKyNpZiBVU0VfTE9DS1MKKyAgICAvKiBFbnN1
cmUgbG9ja3MgYXJlIGluaXRpYWxpemVkICovCisgICAgI2RlZmluZSBHTE9CQUxMWV9JTklUSUFM
SVpFKCkgKG1wYXJhbXMucGFnZV9zaXplID09IDAgJiYgaW5pdF9tcGFyYW1zKCkpCisgICAgI2Rl
ZmluZSBQUkVBQ1RJT04oTSkgKHVzZV9sb2NrKChNKSk/KEFDUVVJUkVfTE9DSygoTSktPm11dGV4
KSwwKTowKSAvKkFjdGlvbiB0byB0YWtlIGxpa2UgbG9jayBiZWZvcmUgYWxsb2MqLworICAgICNk
ZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKChNKS0+
bXV0ZXgpOyB9CisKKyNlbHNlIC8qIFVTRV9MT0NLUyAqLworICAgICNpZm5kZWYgUFJFQUNUSU9O
CisgICAgICAgICNkZWZpbmUgUFJFQUNUSU9OKE0pICgwKQorICAgICNlbmRpZiAgLyogUFJFQUNU
SU9OICovCisgICAgI2lmbmRlZiBQT1NUQUNUSU9OCisgICAgICAgICNkZWZpbmUgUE9TVEFDVElP
TihNKQorICAgICNlbmRpZiAgLyogUE9TVEFDVElPTiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAq
LworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRl
Y3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9u
IGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFu
IGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGln
bm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2Vm
dWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisq
LworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorICAgIC8qIEEgY291bnQgb2YgdGhlIG51bWJlciBv
ZiBjb3JydXB0aW9uIGVycm9ycyBjYXVzaW5nIHJlc2V0cyAqLworICAgIGludCBtYWxsb2NfY29y
cnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgICAvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICov
CisgICAgc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworICAgICNkZWZpbmUg
Q09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgIHJlc2V0X29uX2Vycm9yKG0pCisgICAgI2RlZmlu
ZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKyNlbHNlIC8qIFBST0NFRURfT05fRVJST1IgKi8K
KyAgICAjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisgICAgICAgICNkZWZpbmUgQ09S
UlVQVElPTl9FUlJPUl9BQ1RJT04obSkgQUJPUlQKKyAgICAjZW5kaWYgLyogQ09SUlVQVElPTl9F
UlJPUl9BQ1RJT04gKi8KKyAgICAjaWZuZGVmIFVTQUdFX0VSUk9SX0FDVElPTgorICAgICAgICAj
ZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLHApIEFCT1JUCisgICAgI2VuZGlmIC8qIFVTQUdF
X0VSUk9SX0FDVElPTiAqLworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworICAgIC8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBzZXR1cCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhIERFQlVHCisgICAgI2RlZmluZSBjaGVja19mcmVl
X2NodW5rKE0sUCkKKyAgICAjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkKKyAgICAjZGVm
aW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorICAgICNkZWZpbmUgY2hlY2tfbW1hcHBl
ZF9jaHVuayhNLFApCisgICAgI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkKKyAgICAjZGVm
aW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisjZWxzZSAvKiBERUJVRyAqLworICAgICNkZWZpbmUg
Y2hlY2tfZnJlZV9jaHVuayhNLFApICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsoTSxQKQorICAg
ICNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5r
KE0sUCkKKyAgICAjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190
b3BfY2h1bmsoTSxQKQorICAgICNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pIGRv
X2NoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorICAgICNkZWZpbmUgY2hlY2tfbW1hcHBlZF9j
aHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorICAgICNkZWZpbmUgY2hl
Y2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorICAgIHN0
YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7Cisg
ICAgc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBw
KTsKKyAgICBzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1j
aHVua3B0ciBwKTsKKyAgICBzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0
ZSBtLCBtY2h1bmtwdHIgcCk7CisgICAgc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5r
KG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CisgICAgc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxs
b2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3Qgcyk7CisgICAgc3RhdGljIHZv
aWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CisgICAgc3RhdGljIHZv
aWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKKyAgICBzdGF0aWMg
dm9pZCAgIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKKyAgICBzdGF0
aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CisgICAgc3RhdGljIGlu
dCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworICAgIHN0YXRpYyBzaXplX3Qg
dHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluZGV4aW5nIEJpbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGlzX3NtYWxsKHMpICAgICAgICAgKCgocykgPj4g
U01BTExCSU5fU0hJRlQpIDwgTlNNQUxMQklOUykKKyNkZWZpbmUgc21hbGxfaW5kZXgocykgICAg
ICAoKHMpICA+PiBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgc21hbGxfaW5kZXgyc2l6ZShpKSAo
KGkpICA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgTUlOX1NNQUxMX0lOREVYICAgICAoc21h
bGxfaW5kZXgoTUlOX0NIVU5LX1NJWkUpKQorCisvKiBhZGRyZXNzaW5nIGJ5IGluZGV4LiBTZWUg
YWJvdmUgYWJvdXQgc21hbGxiaW4gcmVwb3NpdGlvbmluZyAqLworI2RlZmluZSBzbWFsbGJpbl9h
dChNLCBpKSAgICgoc2JpbnB0cikoKFRVaW50OCopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkp
CisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKwor
LyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0
IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIChpID09IE5UUkVFQklOUy0xKT8g
KFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKwor
LyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBh
cyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgKChpID09
IE5UUkVFQklOUy0xKT8gMCA6ICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+
PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVz
dCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3Jf
dHJlZV9pbmRleChpKSAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZU
KSkgfCAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVF
QklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRp
b25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBiaXQgY29ycmVz
cG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAg
ICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisvKiBNYXJrL0NsZWFyIGJpdHMgd2l0aCBnaXZlbiBp
bmRleCAqLworI2RlZmluZSBtYXJrX3NtYWxsbWFwKE0saSkgICAgICAoKE0pLT5zbWFsbG1hcCB8
PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfc21hbGxtYXAoTSxpKSAgICAgKChNKS0+c21h
bGxtYXAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHNtYWxsbWFwX2lzX21hcmtlZChNLGkpICgo
TSktPnNtYWxsbWFwICYgICBpZHgyYml0KGkpKQorI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAg
ICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1h
cChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVt
YXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBp
c29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2Jp
dCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVm
dCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAo
KHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3Ig
ZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMo
eCkgKCh4KSB8IC0oeCkpCisKKyAgICAvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEg
Yml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisv
KiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2Rl
ZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3
aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8K
KyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKyNpZiAhSU5TRUNV
UkUKKyAgICAvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkg
ZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisgICAgI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgo
VFVpbnQ4KikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorICAgIC8qIENoZWNrIGlmIGFkZHJlc3Mg
b2YgbmV4dCBjaHVuayBuIGlzIGhpZ2hlciB0aGFuIGJhc2UgY2h1bmsgcCAqLworICAgICNkZWZp
bmUgb2tfbmV4dChwLCBuKSAgICAoKFRVaW50OCopKHApIDwgKFRVaW50OCopKG4pKQorICAgIC8q
IENoZWNrIGlmIHAgaGFzIGl0cyBjaW51c2UgYml0IG9uICovCisgICAgI2RlZmluZSBva19jaW51
c2UocCkgICAgIGNpbnVzZShwKQorICAgIC8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0
IG9uICovCisgICAgI2RlZmluZSBva19waW51c2UocCkgICAgIHBpbnVzZShwKQorI2Vsc2UgLyog
IUlOU0VDVVJFICovCisgICAgI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorICAgICNkZWZp
bmUgb2tfbmV4dChiLCBuKSAgICAoMSkKKyAgICAjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgKDEp
CisgICAgI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAq
LworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorICAgIC8qIENoZWNrIGlmIChhbGxlZ2Vk
KSBtc3RhdGUgbSBoYXMgZXhwZWN0ZWQgbWFnaWMgZmllbGQgKi8KKyAgICAjZGVmaW5lIG9rX21h
Z2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKKyNlbHNlICAvKiAoRk9P
VEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQor
I2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworLyogSW4gZ2NjLCB1c2UgX19i
dWlsdGluX2V4cGVjdCB0byBtaW5pbWl6ZSBpbXBhY3Qgb2YgY2hlY2tzICovCisjaWYgIUlOU0VD
VVJFCisgICAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKKyAgICAgICAg
I2RlZmluZSBSVENIRUNLKGUpICBfX2J1aWx0aW5fZXhwZWN0KGUsIDEpCisgICAgI2Vsc2UgLyog
R05VQyAqLworICAgICAgICAjZGVmaW5lIFJUQ0hFQ0soZSkgIChlKQorICAgICNlbmRpZiAvKiBH
TlVDICovCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworICAgICNkZWZpbmUgUlRDSEVDSyhlKSAg
KDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNo
dW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworI2lmICFGT09URVJTCisgICAgI2RlZmlu
ZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisgICAgLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVz
ZSBiaXQgb2YgbmV4dCBjaHVuayAqLworICAgICNkZWZpbmUgc2V0X2ludXNlKE0scCxzKSAgKChw
KS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSwoKG1jaHVu
a3B0cikoKChUVWludDgqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorICAgIC8q
IFNldCBjaW51c2UgYW5kIHBpbnVzZSBvZiB0aGlzIGNodW5rIGFuZCBwaW51c2Ugb2YgbmV4dCBj
aHVuayAqLworICAgICNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpICgocCktPmhl
YWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLCgobWNodW5rcHRyKSgoKFRVaW50OCopKHAp
KSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCisgICAgLyogU2V0IHNpemUsIGNpbnVzZSBh
bmQgcGludXNlIGJpdCBvZiB0aGlzIGNodW5rICovCisgICAgI2RlZmluZSBzZXRfc2l6ZV9hbmRf
cGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklU
fENJTlVTRV9CSVQpKQorI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIC8qIFNldCBmb290IG9mIGlu
dXNlIGNodW5rIHRvIGJlIHhvciBvZiBtc3RhdGUgYW5kIHNlZWQgKi8KKyAgICAjZGVmaW5lIG1h
cmtfaW51c2VfZm9vdChNLHAscykgKCgobWNodW5rcHRyKSgoVFVpbnQ4KikocCkgKyAocykpKS0+
cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisgICAgI2RlZmluZSBn
ZXRfbXN0YXRlX2ZvcihwKSAoKG1zdGF0ZSkoKChtY2h1bmtwdHIpKChUVWludDgqKShwKSsoY2h1
bmtzaXplKHApKSkpLT5wcmV2X2Zvb3QgXiBtcGFyYW1zLm1hZ2ljKSkKKyAgICAjZGVmaW5lIHNl
dF9pbnVzZShNLHAscylcCisgICAgICAgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVT
RV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAgICAgICAoKChtY2h1bmtwdHIpKCgoVFVpbnQ4Kiko
cCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksIFwKKyAgICAgICAgbWFya19pbnVzZV9m
b290KE0scCxzKSkKKyAgICAjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAg
ICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICAgKCgobWNodW5r
cHRyKSgoKFRVaW50OCopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLFwKKyAgICBt
YXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorICAgICNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9v
Zl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxD
SU5VU0VfQklUKSxcCisgICAgbWFya19pbnVzZV9mb290KE0sIHAsIHMpKQorI2VuZGlmIC8qICFG
T09URVJTICovCisKKworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2Mo
bSwgYikgbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkg
bXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovCisgICAgI2lmIE1T
UEFDRVMKKyAgICAgICAgI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgKG0gPT0gZ20pPyBk
bG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikKKyAgICAgICAgI2RlZmluZSBpbnRlcm5h
bF9mcmVlKG0sIG1lbSkgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVl
KG0sbWVtKTsKKyAgICAjZWxzZSAvKiBNU1BBQ0VTICovCisgICAgICAgICNkZWZpbmUgaW50ZXJu
YWxfbWFsbG9jKG0sIGIpIGRsbWFsbG9jKGIpCisgICAgICAgICNkZWZpbmUgaW50ZXJuYWxfZnJl
ZShtLCBtZW0pIGRsZnJlZShtZW0pCisgICAgI2VuZGlmIC8qIE1TUEFDRVMgKi8KKyNlbmRpZiAv
KiBPTkxZX01TUEFDRVMgKi8KKy8qKioqKipDT0RFIFRPIFNVUE9SVCBTTEFCIEFMTE9DQVRPUioq
KioqKi8KKworICAgICNpZm5kZWYgTkRFQlVHCisgICAgI2RlZmluZSBDSEVDS0lORyAxCisgICAg
I2VuZGlmCisKKyAgICAjaWYgQ0hFQ0tJTkcKKyAgICAjaWZuZGVmIEFTU0VSVAorICAgICNkZWZp
bmUgQVNTRVJUKHgpIHtpZiAoISh4KSkgYWJvcnQoKTt9CisgICAgI2VuZGlmCisgICAgI2RlZmlu
ZSBDSEVDSyh4KSB4CisgICAgI2Vsc2UKKyAgICAjaWZuZGVmIEFTU0VSVAorICAgICNkZWZpbmUg
QVNTRVJUKHgpICh2b2lkKTAKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIENIRUNLKHgpICh2b2lk
KTAKKyAgICAjZW5kaWYKKworICAgIGNsYXNzIHNsYWI7CisgICAgY2xhc3Mgc2xhYmhkcjsKKyAg
ICAjZGVmaW5lIG1heHNsYWJzaXplICAgICA2MAorICAgICNkZWZpbmUgcGFnZXNoaWZ0ICAgICAg
IDEyCisgICAgI2RlZmluZSBwYWdlc2l6ZSAgICAgICAgKDE8PHBhZ2VzaGlmdCkKKyAgICAjZGVm
aW5lIHNsYWJzaGlmdCAgICAgICAxMAorICAgICNkZWZpbmUgc2xhYnNpemUgICAgICAgICgxIDw8
IHNsYWJzaGlmdCkKKyAgICAjZGVmaW5lIGNlbGxhbGlnbiAgICAgICA4CisgICAgY29uc3QgdW5z
aWduZWQgc2xhYmZ1bGwgPSAwOworICAgIGNvbnN0IFRJbnQgIHNsYWJzcGVycGFnZSAgICA9ICAg
KGludCkocGFnZXNpemUvc2xhYnNpemUpOworICAgICNkZWZpbmUgaGliaXQoYml0cykgKCgodW5z
aWduZWQpYml0cyAmIDB4YykgPyAyICsgKCh1bnNpZ25lZCliaXRzPj4zKSA6ICgodW5zaWduZWQp
IGJpdHM+PjEpKQorCisgICAgI2RlZmluZSBsb3diaXQoYml0cykgICAgKCgodW5zaWduZWQpIGJp
dHMmMykgPyAxIC0gKCh1bnNpZ25lZCliaXRzJjEpIDogMyAtICgoKHVuc2lnbmVkKWJpdHM+PjIp
JjEpKQorICAgICNkZWZpbmUgbWF4c2xhYnNpemUgNjAKKyAgICAjZGVmaW5lIG1pbnBhZ2Vwb3dl
ciAgICBwYWdlc2hpZnQrMgorICAgICNkZWZpbmUgY2VsbGFsaWduICAgOAorICAgIGNsYXNzIHNs
YWJoZHIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBoZWFkZXI7CisgICAg
ICAgIC8vIG1hZGUgdXAgb2YKKyAgICAgICAgLy8gYml0cyAgIHwgICAgMzEgICAgfCAzMC4uMjgg
fCAyNy4uMTggfCAxNy4uMTIgfCAgMTEuLjggIHwgICA3Li4wICAgfAorICAgICAgICAvLyAgICAg
ICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t
LS0tLS0rCisgICAgICAgIC8vIGZpZWxkICB8IGZsb2F0aW5nIHwgIHplcm8gIHwgdXNlZC00IHwg
IHNpemUgIHwgcGFnZW1hcCB8IGZyZWUgcG9zIHwKKyAgICAgICAgLy8KKyAgICAgICAgc2xhYioq
IHBhcmVudDsgICAgICAvLyByZWZlcmVuY2UgdG8gcGFyZW50J3MgcG9pbnRlciB0byB0aGlzIHNs
YWIgaW4gdHJlZQorICAgICAgICBzbGFiKiBjaGlsZDE7ICAgICAgIC8vIDFzdCBjaGlsZCBpbiB0
cmVlCisgICAgICAgIHNsYWIqIGNoaWxkMjsgICAgICAgLy8gMm5kIGNoaWxkIGluIHRyZWUKKyAg
ICB9OworCisgICAgaW5saW5lIHVuc2lnbmVkIGhlYWRlcl9mbG9hdGluZyh1bnNpZ25lZCBoKQor
ICAgIHtyZXR1cm4gKGgmMHg4MDAwMDAwMCk7fQorICAgIGNvbnN0IHVuc2lnbmVkIG1heHVzZSA9
IChzbGFic2l6ZSAtIHNpemVvZihzbGFiaGRyKSk+PjI7CisgICAgY29uc3QgdW5zaWduZWQgZmly
c3Rwb3MgPSBzaXplb2Yoc2xhYmhkcik+PjI7CisgICAgI2RlZmluZSBjaGVja3RyZWUoeCkgKHZv
aWQpMAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgVCBmbG9vcihjb25zdCBUIGFkZHIs
IHVuc2lnbmVkIGFsbikKKyAgICAgICAge3JldHVybiBUKCh1bnNpZ25lZChhZGRyKSkmfihhbG4t
MSkpO30KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgY2VpbGluZyhUIGFkZHIsIHVu
c2lnbmVkIGFsbikKKyAgICAgICAge3JldHVybiBUKCh1bnNpZ25lZChhZGRyKSsoYWxuLTEpKSZ+
KGFsbi0xKSk7fQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdW5zaWduZWQgbG93Yml0
cyhUIGFkZHIsIHVuc2lnbmVkIGFsbikKKyAgICAgICAge3JldHVybiB1bnNpZ25lZChhZGRyKSYo
YWxuLTEpO30KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPiBpbmxpbmUgaW50IHB0
cmRpZmYoY29uc3QgVDEqIGExLCBjb25zdCBUMiogYTIpCisgICAgICAgIHtyZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYTEpIC0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oYTIpO30KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5l
IFQgb2Zmc2V0KFQgYWRkciwgc2lnbmVkIG9mcykKKyAgICAgICAge3JldHVybiBUKHVuc2lnbmVk
KGFkZHIpK29mcyk7fQorICAgIGNsYXNzIHNsYWJzZXQKKyAgICB7CisgICAgcHVibGljOgorICAg
ICAgICB2b2lkKiBpbml0c2xhYihzbGFiKiBzKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsKKyAg
ICAgICAgc2xhYiogcGFydGlhbDsKKyAgICB9OworCisgICAgY2xhc3Mgc2xhYiA6IHB1YmxpYyBz
bGFiaGRyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBpbml0KHVuc2lnbmVkIGNs
eik7CisgICAgICAgIC8vc3RhdGljIHNsYWIqIHNsYWJmb3IoIHZvaWQqIHApOworICAgICAgICBz
dGF0aWMgc2xhYiogc2xhYmZvcihjb25zdCB2b2lkKiBwKSA7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdW5zaWduZWQgY2hhciBwYXlsb2FkW3NsYWJzaXplLXNpemVvZihzbGFiaGRyKV07CisgICAg
fTsKKyAgICBjbGFzcyBwYWdlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgaW5saW5lIHN0
YXRpYyBwYWdlKiBwYWdlZm9yKHNsYWIqIHMpOworICAgICAgICAvL3NsYWIgc2xhYnM7CisgICAg
ICAgIHNsYWIgc2xhYnNbc2xhYnNwZXJwYWdlXTsKKyAgICB9OworCisKKyAgICBpbmxpbmUgcGFn
ZSogcGFnZTo6cGFnZWZvcihzbGFiKiBzKQorICAgICAgICB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8cGFnZSo+KGZsb29yKHMsIHBhZ2VzaXplKSk7fQorICAgIHN0cnVjdCBwYWdlY2VsbAorICAg
IHsKKyAgICAgICAgdm9pZCogcGFnZTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsKKyAgICB9Owor
ICAgIC8qKioqKipDT0RFIFRPIFNVUE9SVCBTTEFCIEFMTE9DQVRPUioqKioqKi8KKworICAgIC8q
KioqKiogQ09NTU9OIERFRlMgQ0hVTksgUEFHRSBNQVAvVU5NQVAgKioqKiovCisjZGVmaW5lIENI
VU5LX1BBR0VPVVRfVEhFU0hPTEQgKDEyKjEwMjRVKQorI2RlZmluZSBDSFVOS19QQUdFX09VVF9G
TEFHICg5ODk4OVUpCisjZGVmaW5lIHRjaHVua19wYWdlX2FsaWduKHApICAgIChjaGFyKilwYWdl
X2FsaWduKChzaXplX3QpKHApICsgc2l6ZW9mKHRjaHVuaykgKyBUT1BfRk9PVF9TSVpFKQorI2Rl
ZmluZSBhZGRyZXNzX29mZnNldChISUdILCBMT1cpICAgIChzaXplX3QpKChjaGFyKikoSElHSCkg
LSAoY2hhciopKExPVykpCisKKy8qIHRyZWVfbWFsbG9jX2NodW5rIHBhZ2VvdXQgaGVhZGVyIG9w
ZXJhdGlvbnMgKi8KKyNkZWZpbmUgc2V0X3RjaHVua19tZW1fcGFnZW91dChUUCwgTlBBR0VTKSBc
CisgICAgeyAoVFApLT5wYWdlb3V0ID0gQ0hVTktfUEFHRV9PVVRfRkxBRzsgKFRQKS0+bnBhZ2Vz
ID0gKE5QQUdFUyk7IH0KKyNkZWZpbmUgcmVzZXRfdGNodW5rX21lbV9wYWdlb3V0KFRQKSBcCisg
ICAgeyAoVFApLT5wYWdlb3V0ID0gMDsgIChUUCktPm5wYWdlcyA9IDA7IH0KKyNkZWZpbmUgcGFn
ZV9ub3RfaW5fbWVtb3J5KFAsIFMpIFwKKyAgICAoICAhaXNfc21hbGwoUykgJiYgICggKCgodGNo
dW5rcHRyKShQKSktPnBhZ2VvdXQ9PUNIVU5LX1BBR0VfT1VUX0ZMQUcpPzE6MCApICApCisKKwor
I2lmZGVmIERMX0NIVU5LX01FTV9ERUJVRworI2RlZmluZSBBU1NFUlRfUkNIVU5LX1NJWkUoKSBc
CisgICAge1JDaHVuayByY2h1bms7IHJjaHVuay5TZXRIYW5kbGUoaUNodW5rSGFuZGxlKTsgYXNz
ZXJ0KGlDaHVua1NpemUgPT0gcmNodW5rLlNpemUoKSk7fQorI2RlZmluZSBUUkFDRV9ETF9DSFVO
S19NQVAoY19hZGRyLCBjc2l6ZSwgcGFnZV9hZGRyLCBwYWdlX3NpemUpIFwKKyAgICBNRU1fTE9H
RihfTDgoIkRMX0NIVU5LX01BUCQkOjogY2h1bmtfYWRkcj0leCwgY2h1bmtfc2l6ZT0lZCwgcGFn
ZV9hZGRyPSV4LCBwYWdlX3NpemU9JWQiKSwgY19hZGRyLCBjc2l6ZSwgcGFnZV9hZGRyLCAocGFn
ZV9zaXplKSk7CisjZGVmaW5lIFRSQUNFX0RMX0NIVU5LX1VOTUFQKGNfYWRkciwgY3NpemUsIHBh
Z2VfYWRkciwgcGFnZV9zaXplKSBcCisgICAgTUVNX0xPR0YoX0w4KCJETF9DSFVOS19VTk1BUDo6
IGNodW5rX2FkZHI9JXgsIGNodW5rX3NpemU9JWQsIHBhZ2VfYWRkcj0leCwgcGFnZV9zaXplPSVk
IiksIGNfYWRkciwgY3NpemUsIHBhZ2VfYWRkciwgKHBhZ2Vfc2l6ZSkpOworI2Vsc2UKKyNkZWZp
bmUgQVNTRVJUX1JDSFVOS19TSVpFKCkKKyNkZWZpbmUgVFJBQ0VfRExfQ0hVTktfTUFQKGNfYWRk
ciwgY3NpemUsIHBfYWRkciwgcHNpemUpCisjZGVmaW5lIFRSQUNFX0RMX0NIVU5LX1VOTUFQKGNf
YWRkciwgY3NpemUsIHBfYWRkciwgcHNpemUpCisjZW5kaWYKKworI2lmZGVmIE9PTV9MT0dHSU5H
CisjZGVmaW5lIFRSQUNFX1VOTUFQUEVEX0NIVU5LKFNaKSBcCisgICAgaVVubWFwcGVkQ2h1bmtT
aXplICs9IChTWik7CisjZGVmaW5lIE1FTV9EVU1QX09PTV9MT0dTKE5CLCBNU0cpIFwKKyAgICBN
RU1fTE9HKE1TRyk7IFwKKyAgICBDX0xPRyhNU0cpOyBcCisgICAgZHVtcF9oZWFwX2xvZ3MoTkIp
CisjZWxzZQorI2RlZmluZSBNRU1fRFVNUF9PT01fTE9HUyhOQiwgTVNHKQorI2RlZmluZSBUUkFD
RV9VTk1BUFBFRF9DSFVOSyhTWikKKyNlbmRpZgorCisgICAgLyoqKioqKiBDT01NT04gREVGUyBQ
QUdFIE1BUC9VTk1BUCAqKioqKi8KKyNlbmRpZi8qX19ETEFfXyovCkluZGV4OiBXZWJLaXRUb29s
cy9TeW1iaWFuTWVtb3J5QWxsb2NhdG9yL25ld2FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9uZXdhbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9uZXdhbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFF0IFdlYiBSdW50aW1lLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisK
KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
U3ltYmlhbiBhcHBsaWNhdGlvbiB3cmFwcGVyIG9mIHRoZSBRdCBUb29sa2l0LgorICoKKyAqIFRo
ZSBtZW1vcnkgYWxsb2NhdG9yIGlzIGJhY2twb3J0ZWQgZnJvbSBTeW1iaWFuIE9TLCBhbmQgY2Fu
IGV2ZW50dWFsbHkKKyAqIGJlIHJlbW92ZWQgZnJvbSBRdCBvbmNlIGl0IGlzIGJ1aWx0IGluIHRv
IGFsbCBzdXBwb3J0ZWQgT1MgdmVyc2lvbnMuCisgKiBUaGUgYWxsb2NhdG9yIGlzIGEgY29tcG9z
aXRlIG9mIHRocmVlIGFsbG9jYXRvcnM6CisgKiAgLSBBIHBhZ2UgYWxsb2NhdG9yLCBmb3IgbGFy
Z2UgYWxsb2NhdGlvbnMKKyAqICAtIEEgc2xhYiBhbGxvY2F0b3IsIGZvciBzbWFsbCBhbGxvY2F0
aW9ucworICogIC0gRG91ZyBMZWEncyBhbGxvY2F0b3IsIGZvciBtZWRpdW0gc2l6ZSBhbGxvY2F0
aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGUgPGUzMnN0ZC5oPgor
I2luY2x1ZGUgPGUzMmNtbi5oPgorI2luY2x1ZGUgPGhhbC5oPgorI2luY2x1ZGUgPGUzMnBhbmlj
Lmg+CisKKyNpZm5kZWYgUVRfU1lNQklBTl9IQVZFX1UzMlNURF9ICitzdHJ1Y3QgU1RocmVhZENy
ZWF0ZUluZm8KKyAgICB7CisgICAgVEFueSogaUhhbmRsZTsKKyAgICBUSW50IGlUeXBlOworICAg
IFRUaHJlYWRGdW5jdGlvbiBpRnVuY3Rpb247CisgICAgVEFueSogaVB0cjsKKyAgICBUQW55KiBp
U3VwZXJ2aXNvclN0YWNrOworICAgIFRJbnQgaVN1cGVydmlzb3JTdGFja1NpemU7CisgICAgVEFu
eSogaVVzZXJTdGFjazsKKyAgICBUSW50IGlVc2VyU3RhY2tTaXplOworICAgIFRJbnQgaUluaXRp
YWxUaHJlYWRQcmlvcml0eTsKKyAgICBUUHRyQyBpTmFtZTsKKyAgICBUSW50IGlUb3RhbFNpemU7
ICAgIC8vIFNpemUgaW5jbHVkaW5nIGFueSBleHRyYXMgKG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4
IGJ5dGVzKQorICAgIH07CisKK3N0cnVjdCBTU3RkRXBvY1RocmVhZENyZWF0ZUluZm8gOiBwdWJs
aWMgU1RocmVhZENyZWF0ZUluZm8KKyAgICB7CisgICAgUkFsbG9jYXRvciogaUFsbG9jYXRvcjsK
KyAgICBUSW50IGlIZWFwSW5pdGlhbFNpemU7CisgICAgVEludCBpSGVhcE1heFNpemU7CisgICAg
VEludCBpUGFkZGluZzsgICAgICAvLyBNYWtlIHN0cnVjdHVyZSBzaXplIGEgbXVsdGlwbGUgb2Yg
OCBieXRlcworICAgIH07CisjZWxzZQorI2luY2x1ZGUgPHUzMnN0ZC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8ZTMyc3ZyLmg+CisKKy8vTmFtZWQgbG9jYWwgY2h1bmtzIHJlcXVpcmUgc3VwcG9ydCBm
cm9tIHRoZSBrZXJuZWwsIHdoaWNoIGRlcGVuZHMgb24gU3ltYmlhbl4zCisjZGVmaW5lIE5PX05B
TUVEX0xPQ0FMX0NIVU5LUworLy9SZXNlcnZpbmcgYSBtaW5pbXVtIGhlYXAgc2l6ZSBpcyBub3Qg
c3VwcG9ydGVkLCBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBrbm93IHdoYXQg
dHlwZSBvZgorLy9tZW1vcnkgdG8gdXNlLiBETEEgbWVtb3J5IGdyb3dzIHVwd2FyZHMsIHNsYWIg
YW5kIHBhZ2UgYWxsb2NhdG9ycyBncm93IGRvd253YXJkcy4KKy8vVGhpcyB3b3VsZCBuZWVkIGtl
cm5lbCBzdXBwb3J0IHRvIGRvIHByb3Blcmx5LgorI2RlZmluZSBOT19SRVNFUlZFX01FTU9SWQor
CisvL1RoZSBCVFJBQ0UgZGVidWcgZnJhbWV3b3JrIHJlcXVpcmVzIFN5bWJpYW4gT1MgOS40IG9y
IGhpZ2hlci4KKy8vUmVxdWlyZWQgaGVhZGVyIGZpbGVzIGFyZSBub3QgaW5jbHVkZWQgaW4gUzYw
IDUuMCBTREtzLCBidXQKKy8vdGhleSBhcmUgYXZhaWxhYmxlIGZvciBvcGVuIHNvdXJjZSB2ZXJz
aW9ucyBvZiBTeW1iaWFuIE9TLgorLy9Ob3RlIHRoYXQgYWx0aG91Z2ggU3ltYmlhbiBPUyA5LjMg
c3VwcG9ydHMgQlRSQUNFLCB0aGUgdXNhZ2UgaW4gdGhpcyBmaWxlCisvL2RlcGVuZHMgb24gOS40
IGhlYWRlciBmaWxlcy4KKworLy9UaGlzIGRlYnVnIGZsYWcgdXNlcyBCVFJBQ0UgdG8gZW1pdCBk
ZWJ1ZyB0cmFjZXMgdG8gaWRlbnRpZnkgdGhlIGhlYXBzLgorLy9Ob3RlIHRoYXQgaXQgdXNlcyB0
aGUgRVRlc3QxIHRyYWNlIGNhdGVnb3J5IHdoaWNoIGlzIG5vdCByZXNlcnZlZAorLy8jZGVmaW5l
IFRSQUNJTkdfSEVBUFMKKy8vVGhpcyBkZWJ1ZyBmbGFnIHVzZXMgQlRSQUNFIHRvIGVtaXQgZGVi
dWcgdHJhY2VzIHRvIGFpZCB3aXRoIGRlYnVnZ2luZworLy9hbGxvY3MsIGZyZWVzICYgcmVhbGxv
Y3MuIEl0IHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIEtVU0VSSEVBUFRSQUNFCisv
L2tlcm5lbCB0cmFjZSBmbGFnIHRvIGVuYWJsZSBoZWFwIHRyYWNpbmcuCisvLyNkZWZpbmUgVFJB
Q0lOR19BTExPQ1MKKy8vVGhpcyBkZWJ1ZyBmbGFnIHR1cm5zIG9uIHRyYWNpbmcgb2YgdGhlIGNh
bGwgc3RhY2sgZm9yIGVhY2ggYWxsb2MgdHJhY2UuCisvL0l0IGlzIGRlcGVuZGVudCBvbiBUUkFD
SU5HX0FMTE9DUy4KKy8vI2RlZmluZSBUUkFDSU5HX0NBTExTVEFDS1MKKworI2lmIGRlZmluZWQo
VFJBQ0lOR19BTExPQ1MpIHx8IGRlZmluZWQoVFJBQ0lOR19IRUFQUykKKyNpbmNsdWRlIDxlMzJi
dHJhY2UuaD4KKyNlbmRpZgorCisvLyBNZW1vcnkgbG9nZ2luZyByb3V0aW5lcyBpbmhlcml0ZWQg
ZnJvbSB3ZWJraXQgYWxsb2NhdG9yIDkuMlRCLgorLy8gI2RlZmluZSBPT01fTE9HR0lORworLy8g
VGhpcyBkZWJ1ZyBmbGFnIGxvZ3MgZXJyb3IgY29uZGl0aW9ucyB3aGVuIG1lbW9yeSBpcyB1bm1h
cHBlZC9tYXBwZWQgZnJvbSB0aGUgc3lzdGVtLgorLy8gQWxzbywgZXhwb3J0cyByb3V0aW5lcyB0
byBkdW1wIHRoZSBpbnRlcm5hbCBzdGF0ZSBhbmQgbWVtb3J5IHVzYWdlIG9mIHRoZSBETCBhbGxv
Y2F0b3IuCisvLyAjZGVmaW5lIERMX0NIVU5LX01FTV9ERUJVRworLy8gRXhwb3J0cyBkZWJ1ZyBy
b3VpbnRlcyB0byBhc3NlcnQvdHJhY2UgY2h1bmtlZCBtZW1vcnkgYWNjZXNzLgorI2lmIGRlZmlu
ZWQoT09NX0xPR0dJTkcpIHx8IGRlZmluZWQoRExfQ0hVTktfTUVNX0RFQlVHKQorI2luY2x1ZGUg
Ik1lbW9yeUxvZ2dlci5oIgorI2VuZGlmCisKKworI2lmbmRlZiBfX1dJTlNfXworI3ByYWdtYSBw
dXNoCisjcHJhZ21hIGFybQorI2VuZGlmCisKKyNpbmNsdWRlICJkbGFfcC5oIgorI2luY2x1ZGUg
Im5ld2FsbG9jYXRvcl9wLmgiCisKKy8vIGlmIG5vbiB6ZXJvIHRoaXMgY2F1c2VzIHRoZSBzbGFi
cyB0byBiZSBjb25maWd1cmVkIG9ubHkgd2hlbiB0aGUgY2h1bmsgc2l6ZSBleGNlZWRzIHRoaXMg
bGV2ZWwKKyNkZWZpbmUgREVMQVlFRF9TTEFCX1RIUkVTSE9MRCAoNjQqMTAyNCkgICAgICAgIC8v
IDY0S0Igc2VlbXMgYWJvdXQgcmlnaHQgYmFzZWQgb24gdHJhY2UgZGF0YQorI2RlZmluZSBTTEFC
X0NPTkZJRyAoMHhhYmUpCisKK19MSVQoS0RMSGVhcFBhbmljQ2F0ZWdvcnksICJETCBIZWFwIik7
CisjZGVmaW5lIEdFVF9QQUdFX1NJWkUoeCkgICAgICAgICAgICBIQUw6OkdldChIQUxEYXRhOjpF
TWVtb3J5UGFnZVNpemUsIHgpCisjZGVmaW5lIF9fQ0hFQ0tfQ0VMTChwKQorI2RlZmluZSBfX1BP
V0VSX09GXzIoeCkgICAgICAgICAgICAgKChUVWludDMyKSgoeCleKCh4KS0xKSk+PShUVWludDMy
KSh4KSkKKyNkZWZpbmUgSEVBUF9QQU5JQyhyKSAgICAgICAgICAgICAgIFBhbmljKHIpCisKK0xP
Q0FMX0Mgdm9pZCBQYW5pYyhUQ2R0UGFuaWMgYVBhbmljKQorLy8gUGFuaWMgdGhlIHByb2Nlc3Mg
d2l0aCBVU0VSIGFzIHRoZSBjYXRlZ29yeS4KKyAgICB7CisgICAgVXNlcjo6UGFuaWMoX0woIlVT
RVIiKSxhUGFuaWMpOworICAgIH0KKworICAgIC8qIFB1cnBvc2U6ICAgICBNYXAgY2h1bmsgbWVt
b3J5IHBhZ2VzIGZyb20gc3lzdGVtIFJBTQorICogQXJndW1lbnRzOiAgIHRwIC0gdGNodW5rcHRy
IGluIHdoaWNoIG1lbW1vcnkgc2hvdWxkIGJlIG1hcHBlZAorICogICAgICAgICAgICAgIHBzaXpl
IC0gaW5jb21pbmcgdGNodW5rIHNpemUKKyAqIFJldHVybjogICAgICBLRXJyTm9uZSBpZiBzdWNj
ZXNzZnVsLCBlbHNlIEtFcnJOb01lbW9yeQorICogTm90ZToKKyAqLworVEludCBSTmV3QWxsb2Nh
dG9yOjptYXBfY2h1bmtfcGFnZXModGNodW5rcHRyIHRwLCBzaXplX3QgcHNpemUpCit7CisgICAg
aWYgKHBhZ2Vfbm90X2luX21lbW9yeSh0cCwgcHNpemUpKSB7CisgICAgICAgIGNoYXIgKmFfYWRk
ciA9IHRjaHVua19wYWdlX2FsaWduKHRwKTsKKyAgICAgICAgc2l6ZV90IG5wYWdlcyA9IHRwLT5u
cGFnZXM7CisKKyNpZmRlZiBPT01fTE9HR0lORworICAgICAgICAvLyBjaGVjayB0aGF0IG5wYWdl
cyBtYXRjaGVzIHRoZSBwc2l6ZQorICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWRkcmVzc19vZmZz
ZXQoYV9hZGRyLHRwKTsKKyAgICAgICAgaWYgKG9mZnNldCA8IHBzaXplICYmIChwc2l6ZSAtIG9m
ZnNldCkgPj0gbXBhcmFtcy5wYWdlX3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgICBzaXpl
X3QgdHBhZ2VzID0gKCBwc2l6ZSAtIG9mZnNldCkgPj4gcGFnZXNoaWZ0OworICAgICAgICAgICAg
aWYgKHRwYWdlcyAhPSB0cC0+bnBhZ2VzKSAvL2Fzc2VydCBjb25kaXRpb24KKyAgICAgICAgICAg
ICAgICBNRU1fTE9HKCJDSFVOS19QQUdFX0VSUk9SOm1hcF9jaHVua19wYWdlcywgZXJyb3IgaW4g
bnBhZ2VzIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTUVNX0xPRygi
Q0hVTktfUEFHRV9FUlJPUjo6bWFwX2NodW5rX3BhZ2VzOiAtIEluY29ycmVjdCBwYWdlLWluLW1l
bW1vcnkgZmxhZyIpOworI2VuZGlmCisKKyAgICAgICAgaWYgKG1hcChhX2FkZHIsIG5wYWdlcypt
cGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICAgICAgICAgIFRSQUNFX0RMX0NIVU5LX01BUCh0cCwg
cHNpemUsIGFfYWRkciwgbnBhZ2VzKm1wYXJhbXMucGFnZV9zaXplKTsKKyAgICAgICAgICAgIEFT
U0VSVF9SQ0hVTktfU0laRSgpOworICAgICAgICAgICAgVFJBQ0VfVU5NQVBQRURfQ0hVTksoLTEq
bnBhZ2VzKm1wYXJhbXMucGFnZV9zaXplKTsKKyAgICAgICAgICAgIHJldHVybiBLRXJyTm9uZTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyNpZmRlZiBPT01fTE9HR0lORworCisgICAgICAg
ICAgICBNRU1fTE9HRihfTDgoIkNIVU5LX1BBR0VfRVJST1I6OiBtYXBfY2h1bmtfcGFnZXMgLSBG
YWlsZWQgdG8gQ29tbWl0IFJBTSwgcGFnZV9hZGRyPSV4LCBucGFnZXM9JWQsIGNodW5rX3NpemU9
JWQiKSwgYV9hZGRyLCBucGFnZXMsIHBzaXplKTsKKyAgICAgICAgICAgIE1FTV9EVU1QX09PTV9M
T0dTKHBzaXplLCAiUlN5bWJpYW5ETEhlYXA6Om1hcF9jaHVua19wYWdlcyAtIEZhaWxlZCB0byBD
b21taXQgUkFNIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBLRXJyTm9NZW1vcnk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEtFcnJOb25lOworfQorCisvKiBQdXJwb3NlOiAg
ICAgTWFwIHBhcnRpYWwgY2h1bmsgbWVtb3J5IHBhZ2VzIGZyb20gc3lzdGVtIFJBTQorICogQXJn
dW1lbnRzOiAgIHRwIC0gdGNodW5rcHRyIGluIHdoaWNoIG1lbW1vcnkgc2hvdWxkIGJlIG1hcHBl
ZAorICogICAgICAgICAgICAgIHBzaXplIC0gaW5jb21pbmcgdGNodW5rIHNpemUKKyAqICAgICAg
ICAgICAgICByIC0gcmVtYWluZGVyIGNodW5rIHBvaW50ZXIKKyAqICAgICAgICAgICAgICByc2l6
ZSAtIHJlbWFpbmRlciBjaHVuayBzaXplCisgKiBSZXR1cm46ICAgICAgTnVtYmVyIG9mIHVubWFw
cGVkIHBhZ2VzIGZyb20gcmVtYWluZGVyIGNodW5rIGlmIHN1Y2Nlc3NmdWwgKDAgb3IgbW9yZSks
IGVsc2UgS0Vyck5vTWVtb3J5CisgKiBOb3RlOiAgICAgICAgUmVtYWluZGVyIGNodW5rIHNob3Vs
ZCBiZSBsYXJnZSBlbm91Z2ggdG8gYmUgbWFwcGVkIG91dCAoY2hlY2tlZCBiZWZvcmUgaW52b2tp
bmcgdGhpcyBmdW5jdGlvbikKKyAqICAgICAgICAgICAgICBwYWdlb3V0IGhlYWRlcnMgd2lsbCBi
ZSBzZXQgZnJvbSBpbnNlcnRfbGFyZ2VfY2h1bmsoKSwgbm90IGhlcmUuCisgKi8KK1RJbnQgUk5l
d0FsbG9jYXRvcjo6bWFwX2NodW5rX3BhZ2VzX3BhcnRpYWwodGNodW5rcHRyIHRwLCBzaXplX3Qg
cHNpemUsIHRjaHVua3B0ciByLCBzaXplX3QgcnNpemUpCit7CisgICAgaWYgKHBhZ2Vfbm90X2lu
X21lbW9yeSh0cCwgcHNpemUpKSB7CisgICAgICAgIHNpemVfdCBucGFnZXMgPSB0cC0+bnBhZ2Vz
OyAvLyB0b3RhbCBubyBvZiBwYWdlcyB1bm1hcHBlZCBpbiB0aGlzIGNodW5rCisgICAgICAgIGNo
YXIgKnBhZ2VfYWRkcl9tYXAgPSB0Y2h1bmtfcGFnZV9hbGlnbih0cCk7IC8vIGFkZHJlc3MgdG8g
YmVnaW4gcGFnZSBtYXAKKyAgICAgICAgY2hhciAqcGFnZV9hZGRyX3JlbSA9IHRjaHVua19wYWdl
X2FsaWduKHIpOyAgLy8gYWRkcmVzcyBpbiByZW1haW5kZXIgY2h1bmsgdG8gcmVtYWluIHVubWFw
cGVkCisgICAgICAgIGFzc2VydChhZGRyZXNzX29mZnNldChwYWdlX2FkZHJfcmVtLCByKSA8IHJz
aXplKTsKKyAgICAgICAgc2l6ZV90IG5wYWdlc19tYXAgPSBhZGRyZXNzX29mZnNldChwYWdlX2Fk
ZHJfcmVtLCBwYWdlX2FkZHJfbWFwKSA+PiBwYWdlc2hpZnQ7IC8vIG5vIG9mIHBhZ2VzIHRvIGJl
IG1hcHBlZAorICAgICAgICBpZiAobnBhZ2VzX21hcCA+IDApIHsKKyAgICAgICAgICAgIGlmICht
YXAocGFnZV9hZGRyX21hcCwgbnBhZ2VzX21hcCptcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyNpZmRl
ZiBETF9DSFVOS19NRU1fREVCVUcKKyAgICAgICAgICAgICAgICBUUkFDRV9ETF9DSFVOS19NQVAo
dHAsIHBzaXplLCBwYWdlX2FkZHJfbWFwLCBucGFnZXNfbWFwKm1wYXJhbXMucGFnZV9zaXplKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfUkNIVU5LX1NJWkUoKTsKKyAgICAgICAgICAgICAgICBU
UkFDRV9VTk1BUFBFRF9DSFVOSygtMSpucGFnZXNfbWFwKm1wYXJhbXMucGFnZV9zaXplKTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIHJldHVybiAobnBhZ2VzIC0gbnBhZ2VzX21hcCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyNpZmRlZiBPT01fTE9HR0lORworICAgICAg
ICAgICAgICAgIE1FTV9MT0dGKF9MOCgiQ0hVTktfUEFHRV9FUlJPUjo6IG1hcF9jaHVua19wYWdl
c19wYXJ0aWFsIC0gRmFpbGVkIHRvIENvbW1pdCBSQU0sIHBhZ2VfYWRkcj0leCwgbnBhZ2VzPSVk
LCBjaHVua19zaXplPSVkIiksIHBhZ2VfYWRkcl9tYXAsIG5wYWdlc19tYXAsIHBzaXplKTsKKyAg
ICAgICAgICAgICAgICBNRU1fRFVNUF9PT01fTE9HUyhwc2l6ZSwgIlJTeW1iaWFuRExIZWFwOjpt
YXBfY2h1bmtfcGFnZXNfcGFydGlhbCAtIEZhaWxlZCB0byBDb21taXQgUkFNIik7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICByZXR1cm4gS0Vyck5vTWVtb3J5OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIC8vIG1hcCBub3QgbmVlZGVkLCBm
aXJzdCBwYWdlIGlzIGFscmVhZHkgbWFwcGVkCisgICAgICAgICAgICAgcmV0dXJuIG5wYWdlczsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKKy8qIFB1cnBvc2U6ICAg
ICBSZWxlYXNlICh1bm1hcCkgY2h1bmsgbWVtb3J5IHBhZ2VzIHRvIHN5c3RlbSBSQU0KKyAqIEFy
Z3VtZW50czogICB0cCAtIHRjaHVua3B0ciBmcm9tIHdoaWNoIG1lbW1vcnkgbWF5IGJlIHJlbGVh
c2VkCisgKiAgICAgICAgICAgICAgcHNpemUgLSBpbmNvbWluZyB0Y2h1bmsgc2l6ZQorICogICAg
ICAgICAgICAgIHByZXZfbnBhZ2VzIC0gbnVtYmVyIG9mIHBhZ2VzIHRoYXQgaGFzIGJlZW4gYWxy
ZWFkeSB1bm1hcHBlZCBmcm9tIHRoaXMgY2h1bmsKKyAqIFJldHVybjogICAgICB0b3RhbCBudW1i
ZXIgb2YgcGFnZXMgdGhhdCBoYXMgYmVlbiB1bm1hcHBlZCBmcm9tIHRoaXMgY2h1bmsgKG5ldyB1
bm1hcHBlZCBwYWdlcyArIHByZXZfbnBhZ2VzKQorICogTm90ZTogICAgICAgIHBhZ2VvdXQgaGVh
ZGVycyB3aWxsIGJlIHNldCBmcm9tIGluc2VydF9sYXJnZV9jaHVuaygpLCBub3QgaGVyZS4KKyAq
LworVEludCBSTmV3QWxsb2NhdG9yOjp1bm1hcF9jaHVua19wYWdlcyh0Y2h1bmtwdHIgdHAsIHNp
emVfdCBwc2l6ZSwgc2l6ZV90IHByZXZfbnBhZ2VzKQoreworICAgIHNpemVfdCBucGFnZXMgPSAw
OworICAgIGNoYXIgKmFfYWRkciA9IHRjaHVua19wYWdlX2FsaWduKHRwKTsKKyAgICBzaXplX3Qg
b2Zmc2V0ID0gYWRkcmVzc19vZmZzZXQoYV9hZGRyLHRwKTsKKyAgICBpZiAob2Zmc2V0IDwgcHNp
emUgJiYgKHBzaXplIC0gb2Zmc2V0KSA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSkKKyAgICB7IC8qIGNo
ZWNrIGZvciBuZXcgcGFnZXMgdG8gZGVjb21taXQgKi8KKyAgICAgICAgbnBhZ2VzID0gKCBwc2l6
ZSAtIG9mZnNldCkgPj4gcGFnZXNoaWZ0OworICAgICAgICBpZiAobnBhZ2VzID4gcHJldl9ucGFn
ZXMpIHsKKyAgICAgICAgICAgIHVubWFwKGFfYWRkciwgbnBhZ2VzKm1wYXJhbXMucGFnZV9zaXpl
KTsgICAgLy8gYXNzdW1pbmcga2VybmVsIHRha2VzIGNhcmUgb2YgYWxyZWFkeSB1bm1hcHBlZCBw
YWdlcworICAgICAgICAgICAgVFJBQ0VfRExfQ0hVTktfVU5NQVAodHAsIHBzaXplLCBhX2FkZHIs
IG5wYWdlcyptcGFyYW1zLnBhZ2Vfc2l6ZSk7CisgICAgICAgICAgICBpQ2h1bmtTaXplICs9IHBy
ZXZfbnBhZ2VzKm1wYXJhbXMucGFnZV9zaXplOyAvL2FkanVzdCBhY3R1YWwgY2h1bmsgc2l6ZQor
ICAgICAgICAgICAgQVNTRVJUX1JDSFVOS19TSVpFKCk7CisgICAgICAgICAgICBUUkFDRV9VTk1B
UFBFRF9DSFVOSygobnBhZ2VzLXByZXZfbnBhZ2VzKSptcGFyYW1zLnBhZ2Vfc2l6ZSk7CisgICAg
ICAgICAgICBhc3NlcnQoKGFfYWRkciArIG5wYWdlcyptcGFyYW1zLnBhZ2Vfc2l6ZSAtIDEpIDwg
KGNoYXIqKW5leHRfY2h1bmsodHApKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIE9PTV9M
T0dHSU5HCisgICAgaWYgKG5wYWdlcyAmJiAobnBhZ2VzIDwgcHJldl9ucGFnZXMpKQorICAgICAg
ICBNRU1fTE9HKCJDSFVOS19QQUdFX0VSUk9SOnVubWFwX2NodW5rX3BhZ2VzLCBlcnJvciBpbiBu
cGFnZXMiKTsKKyAgICBpZiAobnBhZ2VzID4gcHJldl9ucGFnZXMpIHsKKyAgICAgICAgLyogY2hl
Y2sgdGhhdCBlbmQgb2YgZGVjb21taXRlZCBhZGRyZXNzIGxpZSB3aXRoaW4gdGhpcyBjaHVuayAq
LworICAgICAgICBpZiAoKGFfYWRkciArIG5wYWdlcyptcGFyYW1zLnBhZ2Vfc2l6ZSAtIDEpID49
IChjaGFyKiluZXh0X2NodW5rKHRwKSkKKyAgICAgICAgICAgIE1FTV9MT0coIkNIVU5LX1BBR0Vf
RVJST1I6dW5tYXBfY2h1bmtfcGFnZXMsIGVycm9yIGNodW5rIGJvdW5kYXJ5Iik7CisgICAgfQor
I2VuZGlmCisjaWZkZWYgRExfQ0hVTktfTUVNX0RFQlVHCisgICAgbWNodW5rcHRyIG5leHQgPSBu
ZXh0X2NodW5rKHRwKTsKKyAgICBkb19jaGVja19hbnlfY2h1bmtfYWNjZXNzKG5leHQsIGNodW5r
c2l6ZShuZXh0KSk7CisgICAgaWYgKCFucGFnZXMpICBkb19jaGVja19hbnlfY2h1bmtfYWNjZXNz
KChtY2h1bmtwdHIpdHAsIHBzaXplKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIChucGFnZXMpOwor
fQorCisvKiBQdXJwb3NlOiAgICAgVW5tYXAgYWxsIHBhZ2VzIGJldHdlZW4gcHJldmlvdXNseSB1
bm1hcHBlZCBhbmQgZW5kIG9mIHRvcCBjaHVuaworICAgICAgICAgICAgICAgIGFuZCByZXNldCB0
b3AgdG8gYmVnaW5uaW5nIG9mIHByZXYgY2h1bmsKKyAqIEFyZ3VtZW50czogICBmbSAtIGdsb2Jh
bCBtYWxsb2Mgc3RhdGUKKyAqICAgICAgICAgICAgICBwcmV2IC0gcHJldmlvdXMgY2h1bmsgd2hp
Y2ggaGFzIHVubWFwcGVkIHBhZ2VzCisgKiAgICAgICAgICAgICAgcHNpemUgLSBzaXplIG9mIHBy
ZXZpb3VzIGNodW5rCisgKiAgICAgICAgICAgICAgcHJldl9ucGFnZXMgLSBudW1iZXIgb2YgdW5t
YXBwZWQgcGFnZXMgZnJvbSBwcmV2aW91cyBjaHVuaworICogUmV0dXJuOiAgICAgIG5vbnplcm8g
aWYgc3VjZXNzZnVsLCBlbHNlIDAKKyAqIE5vdGU6CisgKi8KK1RJbnQgUk5ld0FsbG9jYXRvcjo6
c3lzX3RyaW1fcGFydGlhbChtc3RhdGUgbSwgbWNodW5rcHRyIHByZXYsIHNpemVfdCBwc2l6ZSwg
c2l6ZV90IHByZXZfbnBhZ2VzKQoreworICAgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgICAgc2l6
ZV90IGV4dHJhID0gMDsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIHBzaXpl
ICs9IG0tPnRvcHNpemU7CisgICAgICBjaGFyICphX2FkZHIgPSB0Y2h1bmtfcGFnZV9hbGlnbihw
cmV2KTsgLy8gaW5jbHVkZXMgc3BhY2UgZm9yIFRPUCBmb290ZXIKKyAgICAgIHNpemVfdCBhZGRy
X29mZnNldCA9IGFkZHJlc3Nfb2Zmc2V0KGFfYWRkciwgcHJldik7CisgICAgICBhc3NlcnQoYWRk
cl9vZmZzZXQgPiBUT1BfRk9PVF9TSVpFKTsgLy9hbHdheXMgYXNzZXJ0PworICAgICAgYXNzZXJ0
KChjaGFyKilpVG9wID49IGFfYWRkcik7IC8vYWx3YXlzIGFzc2VydD8KKyAgICAgIGlmICgoY2hh
ciopaVRvcCA+IGFfYWRkcikKKyAgICAgICAgICBleHRyYSA9IGFkZHJlc3Nfb2Zmc2V0KGlUb3As
IGFfYWRkcik7CisKKyNpZmRlZiBPT01fTE9HR0lORworICAgICAgaWYgKChjaGFyKilpVG9wIDwg
YV9hZGRyKQorICAgICAgICAgIE1FTV9MT0dGKF9MOCgiUlN5bWJpYW5ETEhlYXA6OnN5c190cmlt
X3BhcnRpYWwgLSBpbmNvcnJlY3QgaVRvcCB2YWx1ZSwgdG9wPSV4LCBpVG9wPSV4IiksIG0tPnRv
cCwgaVRvcCk7CisjZW5kaWYKKyAgICAgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRp
bmcobSwgKFRVaW50OCopcHJldik7CisgICAgICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3Ap
KSB7CisgICAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKyAgICAgICAgICAg
IGlmIChIQVZFX01NQVAgJiYgIHNwLT5zaXplID49IGV4dHJhICYmICFoYXNfc2VnbWVudF9saW5r
KG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisgICAgICAgICAgICAgLy8g
c2l6ZV90IG5ld3NpemUgPSBzcC0+c2l6ZSAtIGV4dHJhOworICAgICAgICAgICAgICAvKiBQcmVm
ZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisgICAgICAgICAgICAgIGlmICgoQ0FM
TF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBzcC0+c2l6ZSAtIGV4dHJhLCAwKSAhPSBNRkFJ
TCkgfHwKKyAgICAgICAgICAgICAgICAgIChDQUxMX01VTk1BUChzcC0+YmFzZSArIHNwLT5zaXpl
IC0gZXh0cmEsIGV4dHJhKSA9PSAwKSkgeworICAgICAgICAgICAgICAgIHJlbGVhc2VkID0gZXh0
cmE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg
ICAgZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkgeworICAgICAgICAgICAgaWYgKGV4dHJhID49IEhB
TEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8KKyAgICAgICAgICAg
ICAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIG1wYXJhbXMuZ3Jh
bnVsYXJpdHk7CisgICAgICAgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0sobSk7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJl
IHdlIGxhc3Qgc2V0IGl0LiAqLworICAgICAgICAgICAgICBUVWludDgqIG9sZF9iciA9IChUVWlu
dDgqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgICAgaWYgKG9sZF9iciA9PSBzcC0+
YmFzZSArIHNwLT5zaXplKSB7CisgICAgICAgICAgICAgICAgVFVpbnQ4KiByZWxfYnIgPSAoVFVp
bnQ4KikoQ0FMTF9NT1JFQ09SRSgtZXh0cmEpKTsKKyAgICAgICAgICAgICAgICBUVWludDgqIG5l
d19iciA9IChUVWludDgqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisgICAgICAgICAgICAgICAgICBy
ZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKG0pOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChyZWxlYXNlZCAhPSAwKSB7CisgICAgICAgICAgVFJBQ0Vf
RExfQ0hVTktfVU5NQVAocHJldiwgcHNpemUsIGFfYWRkciwgcmVsZWFzZWQpOworICAgICAgICAg
IGlDaHVua1NpemUgKz0gcHJldl9ucGFnZXMqbXBhcmFtcy5wYWdlX3NpemU7IC8vIHByZXZfdW5t
YXBwZWQgd2FzIGFscmVhZHkgdW5tYXBwZWQKKyAgICAgICAgICBUUkFDRV9VTk1BUFBFRF9DSFVO
SygtMSpwcmV2X25wYWdlcyptcGFyYW1zLnBhZ2Vfc2l6ZSk7CisgICAgICAgICAgQVNTRVJUX1JD
SFVOS19TSVpFKCk7CisgICAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisgICAgICAgICAg
bS0+Zm9vdHByaW50IC09IHJlbGVhc2VkOworICAgICAgICB9CisKKyAgICAgICAgLyogcmVzZXQg
dG9wIHRvIHByZXYgY2h1bmsgKi8KKyAgICAgICAgaW5pdF90b3AobSwgcHJldiwgYWRkcl9vZmZz
ZXQgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7
CisgICAgfQorCisgICAgLy8gREwgcmVnaW9uIG5vdCBpbml0YWxpemVkLCBkbyBub3QgcmVzZXQg
dG9wIGhlcmUKKyAgICByZXR1cm4gKHJlbGVhc2VkICE9IDApPyAxIDogMDsKK30KKworCisjZGVm
aW5lIFNUQUNLU0laRSAzMgoraW5saW5lIHZvaWQgUk5ld0FsbG9jYXRvcjo6VHJhY2VDYWxsU3Rh
Y2soKQoreworI2lmZGVmIFRSQUNJTkdfQ0FMTFNUQUNLUworICAgIFRVaW50MzIgZmlsdGVyZWRT
dGFja1tTVEFDS1NJWkVdOworICAgIFRUaHJlYWRTdGFja0luZm8gaW5mbzsKKyAgICBUVWludDMy
ICpzcCA9IChUVWludDMyKikmc3A7CisgICAgUlRocmVhZCgpLlN0YWNrSW5mbyhpbmZvKTsKKyAg
ICBMb2NrKCk7CisgICAgVEludCBpOworICAgIGZvciAoaT0wO2k8U1RBQ0tTSVpFO2krKykgewor
ICAgICAgICBpZiAoKFRMaW5BZGRyKXNwPj1pbmZvLmlCYXNlKSBicmVhazsKKyAgICAgICAgd2hp
bGUgKChUTGluQWRkcilzcCA8IGluZm8uaUJhc2UpIHsKKyAgICAgICAgICAgIFRVaW50MzIgY3Vy
ID0gKnNwKys7CisgICAgICAgICAgICBUVWludDMyIHJhbmdlID0gY3VyICYgMHhGMDAwMDAwMDsK
KyAgICAgICAgICAgIGlmIChyYW5nZSA9PSAweDgwMDAwMDAwIHx8IHJhbmdlID09IDB4NzAwMDAw
MDApIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZFN0YWNrW2ldID0gY3VyOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIFVubG9j
aygpOworICAgIEJUcmFjZUNvbnRleHRCaWcoQlRyYWNlOjpFSGVhcCwgQlRyYWNlOjpFSGVhcENh
bGxTdGFjaywgKFRVaW50MzIpdGhpcywgZmlsdGVyZWRTdGFjaywgaSAqIDQpOworI2VuZGlmCit9
CisKK3NpemVfdCBnZXRwYWdlc2l6ZSgpCit7CisgICAgVEludCBzaXplOworICAgIFRJbnQgZXJy
ID0gR0VUX1BBR0VfU0laRShzaXplKTsKKyAgICBpZiAoZXJyICE9IEtFcnJOb25lKQorICAgICAg
ICByZXR1cm4gKHNpemVfdCkweDEwMDA7CisgICAgcmV0dXJuIChzaXplX3Qpc2l6ZTsKK30KKwor
I2RlZmluZSBnbSAgKCZpR2xvYmFsTWFsbG9jU3RhdGUpCisKK1JOZXdBbGxvY2F0b3I6OlJOZXdB
bGxvY2F0b3IoVEludCBhTWF4TGVuZ3RoLCBUSW50IGFBbGlnbiwgVEJvb2wgYVNpbmdsZVRocmVh
ZCkKKy8vIGNvbnN0cnVjdG9yIGZvciBhIGZpeGVkIGhlYXAuIEp1c3QgdXNlIERMIGFsbG9jYXRv
cgorICAgIDppTWluTGVuZ3RoKGFNYXhMZW5ndGgpLCBpTWF4TGVuZ3RoKGFNYXhMZW5ndGgpLCBp
T2Zmc2V0KDApLCBpR3Jvd0J5KDApLCBpQ2h1bmtIYW5kbGUoMCksCisgICAgaU5lc3RpbmdMZXZl
bCgwKSwgaUFsbG9jQ291bnQoMCksIGlGYWlsVHlwZShFTm9uZSksIGlUZXN0RGF0YShOVUxMKSwg
aUNodW5rU2l6ZShhTWF4TGVuZ3RoKQorICAgIHsKKworICAgIGlmICgoVFVpbnQzMilhQWxpZ24+
PXNpemVvZihUQW55KikgJiYgX19QT1dFUl9PRl8yKGlBbGlnbikpCisgICAgICAgIHsKKyAgICAg
ICAgaUFsaWduID0gYUFsaWduOworICAgICAgICB9CisgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgIGlBbGlnbiA9IDQ7CisgICAgICAgIH0KKyAgICBpUGFnZVNpemUgPSAwOworICAgIGlGbGFn
cyA9IGFTaW5nbGVUaHJlYWQgPyAoRVNpbmdsZVRocmVhZGVkfEVGaXhlZFNpemUpIDogRUZpeGVk
U2l6ZTsKKworICAgIEluaXQoMCwgMCwgMCk7CisgICAgfQorCitSTmV3QWxsb2NhdG9yOjpSTmV3
QWxsb2NhdG9yKFRJbnQgYUNodW5rSGFuZGxlLCBUSW50IGFPZmZzZXQsIFRJbnQgYU1pbkxlbmd0
aCwgVEludCBhTWF4TGVuZ3RoLCBUSW50IGFHcm93QnksCisgICAgICAgICAgICBUSW50IGFBbGln
biwgVEJvb2wgYVNpbmdsZVRocmVhZCkKKyAgICAgICAgOiBpTWluTGVuZ3RoKGFNaW5MZW5ndGgp
LCBpTWF4TGVuZ3RoKGFNYXhMZW5ndGgpLCBpT2Zmc2V0KGFPZmZzZXQpLCBpQ2h1bmtIYW5kbGUo
YUNodW5rSGFuZGxlKSwgaUFsaWduKGFBbGlnbiksIGlOZXN0aW5nTGV2ZWwoMCksIGlBbGxvY0Nv
dW50KDApLAorICAgICAgICAgICAgaUZhaWxUeXBlKEVOb25lKSwgaVRlc3REYXRhKE5VTEwpLCBp
Q2h1bmtTaXplKGFNaW5MZW5ndGgpLGlIaWdoV2F0ZXJNYXJrKGFNaW5MZW5ndGgpCisgICAgewor
ICAgIGlQYWdlU2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBfX0FTU0VSVF9BTFdBWVMo
YU9mZnNldCA+PTAsIFVzZXI6OlBhbmljKEtETEhlYXBQYW5pY0NhdGVnb3J5LCBFVEhlYXBOZXdC
YWRPZmZzZXQpKTsKKyAgICBpR3Jvd0J5ID0gX0FMSUdOX1VQKGFHcm93QnksIGlQYWdlU2l6ZSk7
CisgICAgaUZsYWdzID0gYVNpbmdsZVRocmVhZCA/IEVTaW5nbGVUaHJlYWRlZCA6IDA7CisKKyAg
ICAvLyBJbml0aWFsaXNlCisgICAgLy8gaWYgdGhlIGhlYXAgaXMgY3JlYXRlZCB3aXRoIGFNaW5M
ZW5ndGg9PWFNYXhMZW5ndGggdGhlbiBpdCBjYW5ub3QgYWxsb2NhdGUgc2xhYiBvciBwYWdlIG1l
bW9yeQorICAgIC8vIHNvIHRoZXNlIHN1Yi1hbGxvY2F0b3JzIHNob3VsZCBiZSBkaXNhYmxlZC4g
T3RoZXJ3aXNlIGluaXRpYWxpc2Ugd2l0aCBkZWZhdWx0IHZhbHVlcworICAgIGlmIChhTWluTGVu
Z3RoID09IGFNYXhMZW5ndGgpCisgICAgICAgIEluaXQoMCwgMCwgMCk7CisgICAgZWxzZQorICAg
ICAgICBJbml0KDB4M2ZmZiwgMTUsIDB4MTAwMDApOyAgLy8gYWxsIHNsYWJzLCBwYWdlIHszMktC
fSwgdHJpbSB7NjRLQn0gLy8gQW5kcmV3OiBBZG9wdGluZyBXZWJraXQgY29uZmlnPworICAgICAg
ICAvL0luaXQoMHhhYmUsIDE2LCBpUGFnZVNpemUqNCk7IC8vIHNsYWJzIHs0OCwgNDAsIDMyLCAy
NCwgMjAsIDE2LCAxMiwgOH0sIHBhZ2UgezY0S0J9LCB0cmltIHsxNktCfQorI2lmZGVmIFRSQUNJ
TkdfSEVBUFMKKyAgICBSQ2h1bmsgY2h1bms7CisgICAgY2h1bmsuU2V0SGFuZGxlKGlDaHVua0hh
bmRsZSk7CisgICAgVEtOYW1lIGNodW5rX25hbWU7CisgICAgY2h1bmsuRnVsbE5hbWUoY2h1bmtf
bmFtZSk7CisgICAgQlRyYWNlQ29udGV4dEJpZyhCVHJhY2U6OkVUZXN0MSwgMiwgMjIsIGNodW5r
X25hbWUuUHRyKCksIGNodW5rX25hbWUuU2l6ZSgpKTsKKworICAgIFRVaW50MzIgdHJhY2VEYXRh
WzRdOworICAgIHRyYWNlRGF0YVswXSA9IGlDaHVua0hhbmRsZTsKKyAgICB0cmFjZURhdGFbMV0g
PSBpTWluTGVuZ3RoOworICAgIHRyYWNlRGF0YVsyXSA9IGlNYXhMZW5ndGg7CisgICAgdHJhY2VE
YXRhWzNdID0gaUFsaWduOworICAgIEJUcmFjZUNvbnRleHROKEJUcmFjZTo6RVRlc3QxLCAxLCAo
VFVpbnQzMil0aGlzLCAxMSwgdHJhY2VEYXRhLCBzaXplb2YodHJhY2VEYXRhKSk7CisjZW5kaWYK
KworICAgIH0KKworVEFueSogUk5ld0FsbG9jYXRvcjo6b3BlcmF0b3IgbmV3KFRVaW50IGFTaXpl
LCBUQW55KiBhQmFzZSkgX19OT19USFJPVworICAgIHsKKyAgICBfX0FTU0VSVF9BTFdBWVMoYVNp
emU+PXNpemVvZihSTmV3QWxsb2NhdG9yKSwgSEVBUF9QQU5JQyhFVEhlYXBOZXdCYWRTaXplKSk7
CisgICAgUk5ld0FsbG9jYXRvciogaCA9IChSTmV3QWxsb2NhdG9yKilhQmFzZTsKKyAgICBoLT5p
QWxpZ24gPSAweDgwMDAwMDAwOyAvLyBnYXJiYWdlIHZhbHVlCisgICAgaC0+aUJhc2UgPSAoKFRV
aW50OCopYUJhc2UpICsgYVNpemU7CisgICAgcmV0dXJuIGFCYXNlOworICAgIH0KKwordm9pZCBS
TmV3QWxsb2NhdG9yOjpJbml0KFRJbnQgYUJpdG1hcFNsYWIsIFRJbnQgYVBhZ2VQb3dlciwgc2l6
ZV90IGFUcmltVGhyZXNob2xkKQorICAgIHsKKyAgICBfX0FTU0VSVF9BTFdBWVMoKFRVaW50MzIp
aUFsaWduPj1zaXplb2YoVEFueSopICYmIF9fUE9XRVJfT0ZfMihpQWxpZ24pLCBIRUFQX1BBTklD
KEVUSGVhcE5ld0JhZEFsaWdubWVudCkpOworCisgICAgLypNb3ZlZCBjb2RlIHdoaWNoIGRvZXMg
aW5pdGlhbGl6YXRpb24gKi8KKyAgICBpVG9wID0gKFRVaW50OCopdGhpcyArIGlNaW5MZW5ndGg7
CisgICAgc3BhcmVfcGFnZSA9IDA7CisgICAgaUFsbG9jQ291bnQgPSAwOyAvLyBGSVhNRSAgLS0g
bm90IHVzZWQgYW55d2hlcmUgLSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDAgaW4gY29uc3RydWN0
b3IgYW55d2F5CisgICAgbWVtc2V0KCZtcGFyYW1zLDAsc2l6ZW9mKG1wYXJhbXMpKTsKKworICAg
IEluaXRfRGxtYWxsb2MoaVRvcCAtIGlCYXNlLCAwLCBhVHJpbVRocmVzaG9sZCk7CisKKyAgICBz
bGFiX2luaXQoYUJpdG1hcFNsYWIpOworCisgICAgLyoxMC0xSywxMS0ySywxMi00aywxMy04Sywx
NC0xNkssMTUtMzJLLDE2LTY0SyovCisgICAgcGFnZWRfaW5pdChhUGFnZVBvd2VyKTsKKworI2lm
ZGVmIFRSQUNJTkdfQUxMT0NTCisgICAgICAgIFRVaW50MzIgdHJhY2VEYXRhWzNdOworICAgICAg
ICB0cmFjZURhdGFbMF0gPSBhQml0bWFwU2xhYjsKKyAgICAgICAgdHJhY2VEYXRhWzFdID0gYVBh
Z2VQb3dlcjsKKyAgICAgICAgdHJhY2VEYXRhWzJdID0gYVRyaW1UaHJlc2hvbGQ7CisgICAgICAg
IEJUcmFjZUNvbnRleHROKEJUcmFjZTo6RVRlc3QxLCBCVHJhY2U6OkVIZWFwQWxsb2MsIChUVWlu
dDMyKXRoaXMsIDAsIHRyYWNlRGF0YSwgc2l6ZW9mKHRyYWNlRGF0YSkpOworI2VuZGlmCisKKyAg
ICB9CisKK1JOZXdBbGxvY2F0b3I6OlNDZWxsKiBSTmV3QWxsb2NhdG9yOjpHZXRBZGRyZXNzKGNv
bnN0IFRBbnkqIGFDZWxsKSBjb25zdAorLy8KKy8vIEFzIG11Y2ggYXMgcG9zc2libGUsIGNoZWNr
IGEgY2VsbCBhZGRyZXNzIGFuZCBiYWNrc3BhY2UgaXQKKy8vIHRvIHBvaW50IGF0IHRoZSBjZWxs
IGhlYWRlci4KKy8vCisgICAgeworCisgICAgVExpbkFkZHIgbSA9IFRMaW5BZGRyKGlBbGlnbiAt
IDEpOworICAgIF9fQVNTRVJUX0FMV0FZUyghKFRMaW5BZGRyKGFDZWxsKSZtKSwgSEVBUF9QQU5J
QyhFVEhlYXBCYWRDZWxsQWRkcmVzcykpOworCisgICAgU0NlbGwqIHBDID0gKFNDZWxsKikoKChU
VWludDgqKWFDZWxsKS1FQWxsb2NDZWxsU2l6ZSk7CisgICAgX19DSEVDS19DRUxMKHBDKTsKKwor
ICAgIHJldHVybiBwQzsKKyAgICB9CisKK1RJbnQgUk5ld0FsbG9jYXRvcjo6QWxsb2NMZW4oY29u
c3QgVEFueSogYUNlbGwpIGNvbnN0Cit7CisgICAgaWYgKHB0cmRpZmYoYUNlbGwsIHRoaXMpID49
IDApCisgICAgeworICAgICAgICBtY2h1bmtwdHIgbSA9IG1lbTJjaHVuayhhQ2VsbCk7CisgICAg
ICAgIHJldHVybiBjaHVua3NpemUobSkgLSBDSFVOS19PVkVSSEVBRDsgLy8gQW5kcmV3OiBQaWNr
aW5nIHVwIHdlYmtpdCBjaGFuZ2UuCisgICAgfQorICAgIGlmIChsb3diaXRzKGFDZWxsLCBwYWdl
c2l6ZSkgPiBjZWxsYWxpZ24pCisgICAgICAgIHJldHVybiBoZWFkZXJfc2l6ZShzbGFiOjpzbGFi
Zm9yKGFDZWxsKS0+aGVhZGVyKTsKKyAgICBpZiAobG93Yml0cyhhQ2VsbCwgcGFnZXNpemUpID09
IGNlbGxhbGlnbikKKyAgICAgICAgcmV0dXJuICoodW5zaWduZWQqKShvZmZzZXQoYUNlbGwsLWlu
dChjZWxsYWxpZ24pKSktY2VsbGFsaWduOworICAgIHJldHVybiBwYWdlZF9kZXNjcmlwdG9yKGFD
ZWxsKS0+c2l6ZTsKK30KKworVEFueSogUk5ld0FsbG9jYXRvcjo6QWxsb2MoVEludCBhU2l6ZSkK
K3sKKyAgICBfX0FTU0VSVF9BTFdBWVMoKFRVaW50KWFTaXplPChLTWF4VEludC8yKSxIRUFQX1BB
TklDKEVUSGVhcEJhZEFsbG9jYXRlZENlbGxTaXplKSk7CisKKyAgICBUQW55KiBhZGRyOworCisj
aWZkZWYgVFJBQ0lOR19BTExPQ1MKKyAgICBUSW50IGFDbnQ9MDsKKyNlbmRpZgorICAgIExvY2so
KTsKKyAgICBpZiAoYVNpemUgPCBzbGFiX3RocmVzaG9sZCkKKyAgICB7CisgICAgICAgIFRJbnQg
aXggPSBzaXplbWFwWyhhU2l6ZSszKT4+Ml07CisgICAgICAgIEFTU0VSVChpeCAhPSAweGZmKTsK
KyAgICAgICAgYWRkciA9IHNsYWJfYWxsb2NhdGUoc2xhYmFsbG9jW2l4XSk7CisgICAgICAgIGlm
IChhZGRyKSBpVG90YWxBbGxvY1NpemUgKz0gc2xhYmFsbG9jW2l4XS5zaXplOworICAgIH1lbHNl
IGlmICgoYVNpemUgPj4gcGFnZV90aHJlc2hvbGQpPT0wKQorICAgICAgICB7CisjaWZkZWYgVFJB
Q0lOR19BTExPQ1MKKyAgICAgICAgYUNudD0xOworI2VuZGlmCisgICAgICAgIGFkZHIgPSBkbG1h
bGxvYyhhU2l6ZSk7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgIHsKKyNpZmRlZiBUUkFD
SU5HX0FMTE9DUworICAgICAgICBhQ250PTI7CisjZW5kaWYKKyAgICAgICAgYWRkciA9IHBhZ2Vk
X2FsbG9jYXRlKGFTaXplKTsKKyAgICAgICAgLy9hdHRlbXB0IGRsbWFsbG9jKCkgaWYgcGFnZWRf
YWxsb2NhdGUoKSBmYWlscy4gVGhpcyBjYW4gaW1wcm92ZSBhbGxvY2F0aW9uIGNoYW5jZXMgaWYg
ZnJhZ21lbnRhdGlvbiBpcyBoaWdoIGluIHRoZSBoZWFwLgorICAgICAgICBpZiAoIWFkZHIpIHsg
Ly8gcGFnZWRfYWxsb2NhdG9yIGZhaWxlZCwgdHJ5IGluIGRsbWFsbG9jCisgICAgICAgICAgICBh
ZGRyID0gZGxtYWxsb2MoYVNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFkZHIp
IHsKKyAgICAgICAgaUNlbGxDb3VudCsrOworICAgICAgICAvLyBJbmNyZW1lbnQgaVRvdGFsQWxs
b2NTaXplIGluIG1lbW9yeSBzZWdtZW50IHNwZWNpZmljIGNvZGUgZm9yIG1vcmUgYWNjdXJhY3kK
KyAgICAgICAgLy9pVG90YWxBbGxvY1NpemUgKz0gYVNpemU7CisgICAgfQorICAgIFVubG9jaygp
OworCisjaWZkZWYgVFJBQ0lOR19BTExPQ1MKKyAgICBpZiAoaUZsYWdzICYgRVRyYWNlQWxsb2Nz
KQorICAgICAgICB7CisgICAgICAgIFRVaW50MzIgdHJhY2VEYXRhWzNdOworICAgICAgICB0cmFj
ZURhdGFbMF0gPSBBbGxvY0xlbihhZGRyKTsKKyAgICAgICAgdHJhY2VEYXRhWzFdID0gYVNpemU7
CisgICAgICAgIHRyYWNlRGF0YVsyXSA9IGFDbnQ7CisgICAgICAgIEJUcmFjZUNvbnRleHROKEJU
cmFjZTo6RUhlYXAsIEJUcmFjZTo6RUhlYXBBbGxvYywgKFRVaW50MzIpdGhpcywgKFRVaW50MzIp
YWRkciwgdHJhY2VEYXRhLCBzaXplb2YodHJhY2VEYXRhKSk7CisgICAgICAgIFRyYWNlQ2FsbFN0
YWNrKCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGFkZHI7Cit9CisKK1RJbnQg
Uk5ld0FsbG9jYXRvcjo6Q29tcHJlc3MoKQorICAgIHsKKyAgICBpZiAoaUZsYWdzICYgRUZpeGVk
U2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBMb2NrKCk7CisgICAgZGxtYWxsb2NfdHJp
bSgwKTsKKyAgICBpZiAoc3BhcmVfcGFnZSkKKyAgICAgICAgeworICAgICAgICB1bm1hcChzcGFy
ZV9wYWdlLHBhZ2VzaXplKTsKKyAgICAgICAgc3BhcmVfcGFnZSA9IDA7CisgICAgICAgIH0KKyAg
ICBVbmxvY2soKTsKKyAgICByZXR1cm4gMDsKKyAgICB9CisKK3ZvaWQgUk5ld0FsbG9jYXRvcjo6
RnJlZShUQW55KiBhUHRyKQoreworCisjaWZkZWYgVFJBQ0lOR19BTExPQ1MKKyAgICBUSW50IGFD
bnQ9MDsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9ERUJVR19UUkFDRQorICAgIFJUaHJlYWQgbWU7
CisgICAgVEJ1ZjwxMDA+IHRoTmFtZTsKKyAgICBtZS5GdWxsTmFtZSh0aE5hbWUpOworI2VuZGlm
CisgICAgLy9pZiAoIWFQdHIpIHJldHVybjsgLy9yZXR1cm4gaW4gY2FzZSBvZiBOVUxMIHBvaW50
ZXIKKworICAgIExvY2soKTsKKworICAgIGlmICghYVB0cikKKyAgICAgICAgOworICAgIGVsc2Ug
aWYgKHB0cmRpZmYoYVB0ciwgdGhpcykgPj0gMCkKKyAgICAgICAgeworI2lmZGVmIFRSQUNJTkdf
QUxMT0NTCisgICAgICAgIGFDbnQgPSAxOworI2VuZGlmCisgICAgICAgIGRsZnJlZSggYVB0cik7
CisgICAgICAgIH0KKyAgICBlbHNlIGlmIChsb3diaXRzKGFQdHIsIHBhZ2VzaXplKSA8PSBjZWxs
YWxpZ24pCisgICAgICAgIHsKKyNpZmRlZiBUUkFDSU5HX0FMTE9DUworICAgICAgICBhQ250ID0g
MjsKKyNlbmRpZgorICAgICAgICBwYWdlZF9mcmVlKGFQdHIpOworICAgICAgICB9CisgICAgZWxz
ZQorICAgICAgICB7CisjaWZkZWYgVFJBQ0lOR19BTExPQ1MKKyAgICAgICAgYUNudCA9IDA7Cisj
ZW5kaWYKKyAgICAgICAgc2xhYl9mcmVlKGFQdHIpOworICAgICAgICB9CisgICAgaUNlbGxDb3Vu
dC0tOworICAgIFVubG9jaygpOworCisjaWZkZWYgVFJBQ0lOR19BTExPQ1MKKyAgICBpZiAoaUZs
YWdzICYgRVRyYWNlQWxsb2NzKQorICAgICAgICB7CisgICAgICAgIFRVaW50MzIgdHJhY2VEYXRh
OworICAgICAgICB0cmFjZURhdGEgPSBhQ250OworICAgICAgICBCVHJhY2VDb250ZXh0TihCVHJh
Y2U6OkVIZWFwLCBCVHJhY2U6OkVIZWFwRnJlZSwgKFRVaW50MzIpdGhpcywgKFRVaW50MzIpYVB0
ciwgJnRyYWNlRGF0YSwgc2l6ZW9mKHRyYWNlRGF0YSkpOworICAgICAgICBUcmFjZUNhbGxTdGFj
aygpOworICAgICAgICB9CisjZW5kaWYKK30KKworCit2b2lkIFJOZXdBbGxvY2F0b3I6OlJlc2V0
KCkKKyAgICB7CisgICAgLy8gVE9ETyBmcmVlIGV2ZXJ5dGhpbmcKKyAgICBVc2VyOjpQYW5pYyhf
TCgiUk5ld0FsbG9jYXRvciIpLCAxKTsgLy90aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKKyAg
ICB9CisKKyNpZmRlZiBUUkFDSU5HX0FMTE9DUworaW5saW5lIHZvaWQgUk5ld0FsbG9jYXRvcjo6
VHJhY2VSZUFsbG9jKFRBbnkqIGFQdHIsIFRJbnQgYVNpemUsIFRBbnkqIGFOZXdQdHIsIFRJbnQg
YVpvbmUpCit7CisgICAgaWYgKGFOZXdQdHIgJiYgKGlGbGFncyAmIEVUcmFjZUFsbG9jcykpIHsK
KyAgICAgICAgVFVpbnQzMiB0cmFjZURhdGFbM107CisgICAgICAgIHRyYWNlRGF0YVswXSA9IEFs
bG9jTGVuKGFOZXdQdHIpOworICAgICAgICB0cmFjZURhdGFbMV0gPSBhU2l6ZTsKKyAgICAgICAg
dHJhY2VEYXRhWzJdID0gKFRVaW50MzIpIGFQdHI7CisgICAgICAgIEJUcmFjZUNvbnRleHROKEJU
cmFjZTo6RUhlYXAsIEJUcmFjZTo6RUhlYXBSZUFsbG9jLCAoVFVpbnQzMikgdGhpcywgKFRVaW50
MzIpIGFOZXdQdHIsCisgICAgICAgICAgICB0cmFjZURhdGEsIHNpemVvZih0cmFjZURhdGEpKTsK
KyAgICAgICAgVHJhY2VDYWxsU3RhY2soKTsKKyAgICAgICAgLy93b3JrYXJvdW5kIGZvciBTQVcg
bm90IGhhbmRsaW5nIHJlYWxsb2NzIHByb3Blcmx5CisgICAgICAgIGlmIChhWm9uZSA+PSAwICYm
IGFQdHIgIT0gYU5ld1B0cikgeworICAgICAgICAgICAgQlRyYWNlQ29udGV4dE4oQlRyYWNlOjpF
SGVhcCwgQlRyYWNlOjpFSGVhcEZyZWUsIChUVWludDMyKSB0aGlzLCAoVFVpbnQzMikgYVB0ciwK
KyAgICAgICAgICAgICAgICAmYVpvbmUsIHNpemVvZihhWm9uZSkpOworICAgICAgICAgICAgVHJh
Y2VDYWxsU3RhY2soKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbHNlCisvL1FfVU5VU0VEIGdl
bmVyYXRlcyBjb2RlIHRoYXQgcHJldmVudHMgdGhlIGNvbXBpbGVyIG9wdGltaXNpbmcgb3V0IHRo
ZSBlbXB0eSBpbmxpbmUgZnVuY3Rpb24KK2lubGluZSB2b2lkIFJOZXdBbGxvY2F0b3I6OlRyYWNl
UmVBbGxvYyhUQW55KiAsIFRJbnQgLCBUQW55KiAsIFRJbnQgKQore30KKyNlbmRpZgorCitUQW55
KiBSTmV3QWxsb2NhdG9yOjpSZUFsbG9jKFRBbnkqIGFQdHIsIFRJbnQgYVNpemUsIFRJbnQgLyph
TW9kZSA9IDAqLykKKyAgICB7CisgICAgaWYgKHB0cmRpZmYoYVB0cix0aGlzKT49MCkKKyAgICB7
CisgICAgICAgIC8vIG9yaWdpbmFsIGNlbGwgaXMgaW4gREwgem9uZQorICAgICAgICBpZiAoKGFT
aXplPj5wYWdlX3RocmVzaG9sZCk9PTAgfHwgYVNpemUgPD0gY2h1bmtzaXplKG1lbTJjaHVuayhh
UHRyKSkgLSBDSFVOS19PVkVSSEVBRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG5l
dyBvbmUgaXMgYmVsb3cgcGFnZSBsaW1pdCBvciBzbWFsbGVyIHRoYW4gb2xkIG9uZSAoc28gY2Fu
J3QgYmUgbW92ZWQpCisgICAgICAgICAgICBMb2NrKCk7CisgICAgICAgICAgICBUQW55KiBhZGRy
ID0gZGxyZWFsbG9jKGFQdHIsYVNpemUpOworICAgICAgICAgICAgVW5sb2NrKCk7CisgICAgICAg
ICAgICBUcmFjZVJlQWxsb2MoYVB0ciwgYVNpemUsIGFkZHIsIDIpOworICAgICAgICAgICAgcmV0
dXJuIGFkZHI7CisgICAgICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGxvd2JpdHMoYVB0
cixwYWdlc2l6ZSk8PWNlbGxhbGlnbikKKyAgICB7CisgICAgICAgIC8vIG9yaWdpbmFsIGNlbGwg
aXMgZWl0aGVyIE5VTEwgb3IgaW4gcGFnZWQgem9uZQorICAgICAgICBpZiAoIWFQdHIpCisgICAg
ICAgICAgICByZXR1cm4gQWxsb2MoYVNpemUpOworCisgICAgICAgIC8vIGVpdGhlciB0aGUgbmV3
IHNpemUgaXMgbGFyZ2VyIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgc3RpbGwgYmUgaW4gcGFnZWQg
em9uZSkKKyAgICAgICAgLy8gb3IgaXQgaXMgc21hbGxlciwgYnV0IHdlIHdpbGwgbmV2ZXIgbW92
ZSBhIHNocmlua2luZyBjZWxsIHNvIGluIHBhZ2VkIHpvbmUKKyAgICAgICAgLy8gbXVzdCBoYW5k
bGUgW3JhcmVdIGNhc2UgdGhhdCBhU2l6ZSA9PSAwLCBhcyBwYWdlZF9bcmVdYWxsb2NhdGUoKSB3
aWxsIHBhbmljCisgICAgICAgIGlmIChhU2l6ZSA9PSAwKQorICAgICAgICAgICAgYVNpemUgPSAx
OworICAgICAgICBMb2NrKCk7CisgICAgICAgIFRBbnkqIGFkZHIgPSBwYWdlZF9yZWFsbG9jYXRl
KGFQdHIsYVNpemUpOworICAgICAgICBVbmxvY2soKTsKKyAgICAgICAgVHJhY2VSZUFsbG9jKGFQ
dHIsIGFTaXplLCBhZGRyLCAyKTsKKyAgICAgICAgcmV0dXJuIGFkZHI7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIC8vIG9yaWdpbmFsIGNlbGwgaXMgaW4gc2xhYiB6b25lCisgICAg
ICAgIC8vIHJldHVybiBvcmlnaW5hbCBpZiBuZXcgb25lIHNtYWxsZXIKKyAgICAgICAgaWYgKGFT
aXplIDw9IGhlYWRlcl9zaXplKHNsYWI6OnNsYWJmb3IoYVB0ciktPmhlYWRlcikpCisgICAgICAg
ICAgICByZXR1cm4gYVB0cjsKKyAgICB9CisgICAgLy8gY2FuJ3QgZG8gYmV0dGVyIHRoYW4gYWxs
b2NhdGUvY29weS9mcmVlCisgICAgVEFueSogbmV3cCA9IEFsbG9jKGFTaXplKTsKKyAgICBpZiAo
bmV3cCkKKyAgICB7CisgICAgICAgIFRJbnQgb2xkc2l6ZSA9IEFsbG9jTGVuKGFQdHIpOworICAg
ICAgICBtZW1jcHkobmV3cCxhUHRyLG9sZHNpemU8YVNpemU/b2xkc2l6ZTphU2l6ZSk7CisgICAg
ICAgIEZyZWUoYVB0cik7CisgICAgfQorICAgIHJldHVybiBuZXdwOworICAgIH0KKworVEludCBS
TmV3QWxsb2NhdG9yOjpBdmFpbGFibGUoVEludCYgYUJpZ2dlc3RCbG9jaykgY29uc3QKK3sKKyAg
ICAvL1RPRE86IGNvbnNpZGVyIHBhZ2UgYW5kIHNsYWIgYWxsb2NhdG9ycworCisgICAgLy90aGlz
IGdldHMgZnJlZSBzcGFjZSBpbiBETCByZWdpb24gLSB0aGUgQyBwb3J0ZWQgY29kZSBkb2Vzbid0
IHJlc3BlY3QgY29uc3QgeWV0LgorICAgIFJOZXdBbGxvY2F0b3IqIHNlbGYgPSBjb25zdF9jYXN0
PFJOZXdBbGxvY2F0b3IqPiAodGhpcyk7CisgICAgbWFsbGluZm8gaW5mbyA9IHNlbGYtPmRsbWFs
bGluZm8oKTsKKyAgICBhQmlnZ2VzdEJsb2NrID0gaW5mby5sYXJnZXN0QmxvY2s7CisgICAgcmV0
dXJuIGluZm8uZm9yZGJsa3M7Cit9CitUSW50IFJOZXdBbGxvY2F0b3I6OkFsbG9jU2l6ZShUSW50
JiBhVG90YWxBbGxvY1NpemUpIGNvbnN0Cit7CisgICAgYVRvdGFsQWxsb2NTaXplID0gaVRvdGFs
QWxsb2NTaXplOworICAgIHJldHVybiBpQ2VsbENvdW50OworfQorCitUSW50IFJOZXdBbGxvY2F0
b3I6OkRlYnVnRnVuY3Rpb24oVEludCBhRnVuYywgVEFueSogYTEsIFRBbnkqIC8qYTIqLykKKyAg
ICB7CisgICAgVEludCByID0gS0Vyck5vdFN1cHBvcnRlZDsKKyAgICBUSW50KiBhMWludCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VEludCo+KGExKTsKKyAgICBzd2l0Y2ggKGFGdW5jKSB7CisgICAgY2Fz
ZSBSQWxsb2NhdG9yOjpFQ291bnQ6CisgICAgeworICAgICAgICBzdHJ1Y3QgbWFsbGluZm8gbWkg
PSBkbG1hbGxpbmZvKCk7CisgICAgICAgICphMWludCA9IG1pLmZvcmRibGtzOworICAgICAgICBy
ID0gbWkudW9yZGJsa3M7CisgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFJBbGxvY2F0
b3I6OkVNYXJrU3RhcnQ6CisgICAgY2FzZSBSQWxsb2NhdG9yOjpFTWFya0VuZDoKKyAgICBjYXNl
IFJBbGxvY2F0b3I6OkVTZXRGYWlsOgorICAgIGNhc2UgUkFsbG9jYXRvcjo6RUNoZWNrOgorICAg
ICAgICByID0gS0Vyck5vbmU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcjsK
KyAgICB9CisKK1RJbnQgUk5ld0FsbG9jYXRvcjo6RXh0ZW5zaW9uXyhUVWludCAvKiBhRXh0ZW5z
aW9uSWQgKi8sIFRBbnkqJiAvKiBhMCAqLywgVEFueSogLyogYTEgKi8pCisgICAgeworICAgIHJl
dHVybiBLRXJyTm90U3VwcG9ydGVkOworICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gaW1wb3J0ZWQgZnJvbSBkbGEuY3BwCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vI2lu
Y2x1ZGUgPHVuaXN0ZC5oPgorLy8jZGVmaW5lIERFQlVHX1JFQUxMT0MKKyNpZmRlZiBERUJVR19S
RUFMTE9DCisjaW5jbHVkZSA8ZTMyZGVidWcuaD4KKyNlbmRpZgoraW50IFJOZXdBbGxvY2F0b3I6
OmluaXRfbXBhcmFtcyhzaXplX3QgYVRyaW1UaHJlc2hvbGQgLyo9IERFRkFVTFRfVFJJTV9USFJF
U0hPTEQqLykKK3sKKyAgICBpZiAobXBhcmFtcy5wYWdlX3NpemUgPT0gMCkKKyAgICB7CisgICAg
ICAgIHNpemVfdCBzOworICAgICAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9N
TUFQX1RIUkVTSE9MRDsKKyAgICAgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IGFUcmltVGhy
ZXNob2xkOworICAgICAgICAjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgICAgICAgICAgbXBh
cmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVQ7CisgICAgICAg
ICNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgICAgICAgICBtcGFyYW1zLmRl
ZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9V
U19CSVQ7CisgICAgICAgICNlbmRpZiAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisKKyAgICAg
ICAgICAgIHMgPSAoc2l6ZV90KTB4NTg1ODU4NThVOworICAgICAgICBBQ1FVSVJFX01BR0lDX0lO
SVRfTE9DSygmbXBhcmFtcyk7CisgICAgICAgIGlmIChtcGFyYW1zLm1hZ2ljID09IDApIHsKKyAg
ICAgICAgICBtcGFyYW1zLm1hZ2ljID0gczsKKyAgICAgICAgICAvKiBTZXQgdXAgbG9jayBmb3Ig
bWFpbiBtYWxsb2MgYXJlYSAqLworICAgICAgICAgIElOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsK
KyAgICAgICAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX01BR0lDX0lOSVRfTE9DSygmbXBhcmFtcyk7CisKKyAgICAgICAg
bXBhcmFtcy5wYWdlX3NpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7CisKKyAgICAgICAgbXBhcmFt
cy5ncmFudWxhcml0eSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogbXBhcmFtcy5wYWdlX3Np
emUpOworCisgICAgICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgICAg
ICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuCisg
ICAgICAgICAgIGludHMgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVzLgorICAgICAgICAgICBhbGln
bm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVu
ayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLgorICAgICAgICAq
LworCisgICAgICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKFRVaW50OCopKSB8fAor
ICAgICAgICAgICAgKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8CisgICAgICAgICAg
ICAoc2l6ZW9mKGludCkgPCA0KSAgfHwKKyAgICAgICAgICAgIChNQUxMT0NfQUxJR05NRU5UIDwg
KHNpemVfdCk4VSkgfHwKKyAgICAgICAgICAgICgoTUFMTE9DX0FMSUdOTUVOVCAgICAmIChNQUxM
T0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAgICAhPSAwKSB8fAorICAgICAgICAgICAgKChNQ0hV
TktfU0laRSAgICAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICAgICE9IDAp
IHx8CisgICAgICAgICAgICAoKG1wYXJhbXMuZ3JhbnVsYXJpdHkgJiAobXBhcmFtcy5ncmFudWxh
cml0eS1TSVpFX1RfT05FKSkgIT0gMCkgfHwKKyAgICAgICAgICAgICgobXBhcmFtcy5wYWdlX3Np
emUgICAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgICAhPSAwKSkKKyAgICAgICAg
ICBBQk9SVDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUk5ld0FsbG9jYXRvcjo6
aW5pdF9iaW5zKG1zdGF0ZSBtKSB7CisgIC8qIEVzdGFibGlzaCBjaXJjdWxhciBsaW5rcyBmb3Ig
c21hbGxiaW5zICovCisgIGJpbmRleF90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5T
OyArK2kpIHsKKyAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0saSk7CisgICAgYmluLT5m
ZCA9IGJpbi0+YmsgPSBiaW47CisgIH0KK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gbWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGFs
bG9jYXRlIGEgbGFyZ2UgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0
cmVlYmluICovCit2b2lkKiBSTmV3QWxsb2NhdG9yOjp0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBz
aXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHYgPSAwOworICBzaXplX3QgcnNpemUgPSAtbmI7IC8q
IFVuc2lnbmVkIG5lZ2F0aW9uICovCisgIHRjaHVua3B0ciB0OworICBiaW5kZXhfdCBpZHg7Cisg
IGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsKKworICBpZiAoKHQgPSAqdHJlZWJpbl9hdCht
LCBpZHgpKSAhPSAwKSB7CisgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2lu
ZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8KKyAgICBzaXplX3Qgc2l6ZWJpdHMgPQorICAg
IG5iIDw8CisgICAgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7CisgICAgdGNodW5rcHRy
IHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8KKyAgICBm
b3IgKDs7KSB7CisgICAgICB0Y2h1bmtwdHIgcnQ7CisgICAgICBzaXplX3QgdHJlbSA9IGNodW5r
c2l6ZSh0KSAtIG5iOworICAgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgICB2ID0gdDsK
KyAgICAgICAgaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisgICAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBydCA9IHQtPmNoaWxkWzFdOworICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0
cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICBpZiAocnQgIT0g
MCAmJiBydCAhPSB0KQorICAgICAgICByc3QgPSBydDsKKyAgICAgIGlmICh0ID09IDApIHsKKyAg
ICAgICAgdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4g
bmIgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzaXplYml0cyA8PD0gMTsKKyAg
ICB9CisgIH0KKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBu
ZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2Jp
dHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsK
KyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChs
ZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9
ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorICB3aGlsZSAodCAhPSAwKSB7IC8qIGZp
bmQgc21hbGxlc3Qgb2YgdHJlZSBvciBzdWJ0cmVlICovCisgICAgc2l6ZV90IHRyZW0gPSBjaHVu
a3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRy
ZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgICAgdCA9IGxlZnRtb3N0X2NoaWxkKHQpOworICB9
CisgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVz
ZSBpdCAqLworICAgaWYgKHYgIT0gMCkgeworICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2
KSkpIHsgLyogc3BsaXQgKi8KKyAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQo
diwgbmIpOworICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKworICAg
ICAgLyogY2hlY2sgZm9yIGNodW5rIG1lbW9yeSBwYWdlLWluICovCisgICAgICBzaXplX3QgbnBh
Z2VzX291dCA9IDA7CisgICAgICBpZiAocGFnZV9ub3RfaW5fbWVtb3J5KHYsIGNodW5rc2l6ZSh2
KSkpIHsKKyAgICAgICAgICBpZiAoIWlzX3NtYWxsKHJzaXplKSAmJiByc2l6ZT49Q0hVTktfUEFH
RU9VVF9USEVTSE9MRCkgeworICAgICAgICAgICAgICAvLyBwYXJ0aWFsIGNodW5rIHBhZ2UgbWFw
cGluZworICAgICAgICAgICAgICBUSW50IHJlc3VsdCA9IG1hcF9jaHVua19wYWdlc19wYXJ0aWFs
KHYsIGNodW5rc2l6ZSh2KSwgKHRjaHVua3B0cilyLCByc2l6ZSk7CisgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPCAwKSByZXR1cm4gMDsgLy8gRmFpbGVkIHRvIENvbW1pdCBSQU0KKyAgICAgICAg
ICAgICAgZWxzZSBucGFnZXNfb3V0ID0gKHNpemVfdClyZXN1bHQ7CisgICAgICAgICAgfQorICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAvLyBmdWxsIGNodW5rIHBhZ2UgbWFwIG5lZWRl
ZAorICAgICAgICAgICAgICBUSW50IGVyciA9IG1hcF9jaHVua19wYWdlcyh2LCBjaHVua3NpemUo
dikpOworICAgICAgICAgICAgICBpZiAoZXJyICE9IEtFcnJOb25lKSAgcmV0dXJuIDA7IC8vIEZh
aWxlZCB0byBDb21taXQgUkFNCisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoUlRD
SEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7
CisgICAgICAgIGlmIChyc2l6ZSA8IGZyZWVfY2h1bmtfdGhyZXNob2xkKSAvLyBleGF1c3QgaWYg
bGVzcyB0aGFuIHNsYWIgdGhyZXNob2xkCisgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2Uo
bSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc2V0X3NpemVf
YW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisgICAgICAgICAgc2V0X3NpemVf
YW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICBpbnNlcnRfY2h1
bmsobSwgciwgcnNpemUsIG5wYWdlc19vdXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBj
aHVuazJtZW0odik7CisgICAgICB9CisgICAgfQorI2lmICFJTlNFQ1VSRSAvLyBjb25kaXRpb25h
bCBzdGF0ZW1lbnQgdG8ga2VlcCBjb21waWxlciBoYXBweS4gY29kZSBpcyByZWFjaGFibGUgaWYg
UlRDSEVDSyBldmFsdWF0ZXMgdG8gRmFsc2UKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiht
KTsKKyNlbmRpZgorICB9CisgIHJldHVybiAwOworfQorCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJl
cXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLwordm9pZCog
Uk5ld0FsbG9jYXRvcjo6dG1hbGxvY19zbWFsbChtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRj
aHVua3B0ciB0LCB2OworICBzaXplX3QgcnNpemU7CisgIGJpbmRleF90IGk7CisgIGJpbm1hcF90
IGxlYXN0Yml0ID0gbGVhc3RfYml0KG0tPnRyZWVtYXApOworICBjb21wdXRlX2JpdDJpZHgobGVh
c3RiaXQsIGkpOworCisgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgIHJzaXplID0gY2h1
bmtzaXplKHQpIC0gbmI7CisKKyAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDAp
IHsKKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwg
cnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgfQor
CisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7CisgICAgbWNodW5rcHRyIHIgPSBj
aHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6
ZSArIG5iKTsKKworICAgIC8qIGNoZWNrIGZvciBjaHVuayBtZW1vcnkgcGFnZS1pbiAqLworICAg
ICAgaWYgKHBhZ2Vfbm90X2luX21lbW9yeSh2LCBjaHVua3NpemUodikpKSB7CisgICAgICAgICAg
VEludCBlcnIgPSBtYXBfY2h1bmtfcGFnZXModiwgY2h1bmtzaXplKHYpKTsKKyAgICAgICAgICBp
ZiAoZXJyICE9IEtFcnJOb25lKSAgcmV0dXJuIDA7IC8vIEZhaWxlZCB0byBDb21taXQgUkFNCisg
ICAgICB9CisKKyAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgdW5saW5r
X2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgaWYgKHJzaXplIDwgZnJlZV9jaHVua190aHJlc2hv
bGQpIC8vIGV4YXVzdCBpZiBsZXNzIHRoYW4gc2xhYiB0aHJlc2hvbGQKKyAgICAgICAgc2V0X2lu
dXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworICAgICAg
ICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKyAgICAgICAg
c2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgaW5z
ZXJ0X2NodW5rKG0sIHIsIHJzaXplLCAwKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJt
ZW0odik7CisgICAgfQorICB9CisjaWYgIUlOU0VDVVJFIC8vIGNvbmRpdGlvbmFsIHN0YXRlbWVu
dCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LiBjb2RlIGlzIHJlYWNoYWJsZSBpZiBSVENIRUNLIGV2
YWx1YXRlcyB0byBGYWxzZQorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgcmV0dXJu
IDA7CisjZW5kaWYKK30KKwordm9pZCBSTmV3QWxsb2NhdG9yOjppbml0X3RvcChtc3RhdGUgbSwg
bWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkKK3sKKyAgICAvKiBFbnN1cmUgYWxpZ25tZW50ICov
CisgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICAgIHAg
PSAobWNodW5rcHRyKSgoVFVpbnQ4KilwICsgb2Zmc2V0KTsKKyAgICBwc2l6ZSAtPSBvZmZzZXQ7
CisgICAgbS0+dG9wID0gcDsKKyAgICBtLT50b3BzaXplID0gcHNpemU7CisgICAgcC0+aGVhZCA9
IHBzaXplIHwgUElOVVNFX0JJVDsKKyAgICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNo
dW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgICAgbWNodW5rcHRyIGNo
dW5rUGx1c09mZiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICBjaHVua1BsdXNP
ZmYtPmhlYWQgPSBUT1BfRk9PVF9TSVpFOworICAgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRy
aW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCit2b2lkKiBSTmV3
QWxsb2NhdG9yOjppbnRlcm5hbF9yZWFsbG9jKG1zdGF0ZSBtLCB2b2lkKiBvbGRtZW0sIHNpemVf
dCBieXRlcykKK3sKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZB
SUxVUkVfQUNUSU9OOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG0pKSB7
CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBzaXplX3Qgb2xk
c2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNf
b2Zmc2V0KG9sZHAsIG9sZHNpemUpOworICAgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgICB2b2lk
KiBleHRyYSA9IDA7CisKKyAgICAvKiBUcnkgdG8gZWl0aGVyIHNocmluayBvciBleHRlbmQgaW50
byB0b3AuIEVsc2UgbWFsbG9jLWNvcHktZnJlZSAqLworCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRk
cmVzcyhtLCBvbGRwKSAmJiBva19jaW51c2Uob2xkcCkgJiYKKyAgICAgICAgICAgICAgICBva19u
ZXh0KG9sZHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgIHNpemVfdCBuYiA9
IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBpZiAoaXNfbW1hcHBlZChvbGRwKSkKKyAgICAg
ICAgbmV3cCA9IG1tYXBfcmVzaXplKG0sIG9sZHAsIG5iKTsKKyAgICAgIGVsc2UKKyAgICAgIGlm
IChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworICAgICAgICBzaXpl
X3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgICBp
ZiAocnNpemUgPj0gZnJlZV9jaHVua190aHJlc2hvbGQpIHsKKyAgICAgICAgICBtY2h1bmtwdHIg
cmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworICAgICAgICAgIHNldF9p
bnVzZShtLCBuZXdwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNp
emUpOworICAgICAgICAgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisgICAgICAgICAg
aVRvdGFsQWxsb2NTaXplIC09IHJzaXplOworICB9CisgICAgICB9CisgICAgICAgIC8qQU1PRDog
TW9kaWZpZWQgdG8gb3B0aW1pemVkKi8KKyAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT50b3Ag
JiYgb2xkc2l6ZSArIG0tPnRvcHNpemUgPiBuYikKKyAgICAgICAgeworICAgICAgICAgICAgLyog
RXhwYW5kIGludG8gdG9wICovCisgICAgICAgICAgICBpZiAob2xkc2l6ZSArIG0tPnRvcHNpemUg
PiBuYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IG9s
ZHNpemUgKyBtLT50b3BzaXplOworICAgICAgICAgICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0g
bmV3c2l6ZSAtIG5iOworICAgICAgICAgICAgICAgIG1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19w
bHVzX29mZnNldChvbGRwLCBuYik7CisgICAgICAgICAgICAgICAgc2V0X2ludXNlKG0sIG9sZHAs
IG5iKTsKKyAgICAgICAgICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0Vf
QklUOworICAgICAgICAgICAgICAgIG0tPnRvcCA9IG5ld3RvcDsKKyAgICAgICAgICAgICAgICBt
LT50b3BzaXplID0gbmV3dG9wc2l6ZTsKKyAgICAgICAgICAgICAgICBpVG90YWxBbGxvY1NpemUg
Kz0gbmIgLSBvbGRzaXplOworICAgICAgICAgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElP
TihtLCBvbGRtZW0pOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFBPU1RBQ1RJT04obSk7CisKKyAgICBpZiAobmV3cCAhPSAwKSB7CisgICAgICBp
ZiAoZXh0cmEgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIGV4dHJhKTsKKyAgICAg
IH0KKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIGNodW5r
Mm1lbShuZXdwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2b2lkKiBuZXdtZW0gPSBpbnRl
cm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICAgICAgaWYgKG5ld21lbSAhPSAwKSB7CisgICAgICAg
IHNpemVfdCBvYyA9IG9sZHNpemUgLSBvdmVyaGVhZF9mb3Iob2xkcCk7CisgICAgICAgIG1lbWNw
eShuZXdtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKyAgICAgICAgaW50
ZXJuYWxfZnJlZShtLCBvbGRtZW0pOworICAgICAgfQorICAgICAgcmV0dXJuIG5ld21lbTsKKyAg
ICB9CisgIH0KKyNpZiBVU0VfTE9DS1MgLy8ga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkKKyAgcmV0
dXJuIDA7CisjZW5kaWYKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRp
c3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCittYWxsaW5mbyBSTmV3QWxs
b2NhdG9yOjppbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8g
bm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgVEludCBjaHVua0Nu
dCA9IDA7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0p
OworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0la
RV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50
b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAg
IG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAg
ICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICBjaHVua0Nu
dCsrOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAg
ICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAg
IHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBzdW0gKz0gc3o7CisgICAgICAg
ICAgaWYgKCFjaW51c2UocSkpIHsKKyAgICAgICAgICAgIGlmIChzeiA+IG5tLmxhcmdlc3RCbG9j
aykKKyAgICAgICAgICAgICAgbm0ubGFyZ2VzdEJsb2NrID0gc3o7CisgICAgICAgICAgICBtZnJl
ZSArPSBzejsKKyAgICAgICAgICAgICsrbmZyZWU7CisgICAgICAgICAgfQorICAgICAgICAgIHEg
PSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAg
fQorICAgICAgbm0uYXJlbmEgICAgPSBzdW07CisgICAgICBubS5vcmRibGtzICA9IG5mcmVlOwor
ICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07CisgICAgICBubS51c21ibGtz
ICA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAt
IG1mcmVlOworICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKKyAgICAgIG5tLmtlZXBjb3N0ID0g
bS0+dG9wc2l6ZTsKKyAgICAgIG5tLmNlbGxDb3VudD0gY2h1bmtDbnQ7LypudW1iZXIgb2YgY2h1
bmtzIGFsbG9jYXRlZCovCisgICAgfQorICAgIFBPU1RBQ1RJT04obSk7CisgIH0KKyAgcmV0dXJu
IG5tOworfQorCit2b2lkICBSTmV3QWxsb2NhdG9yOjppbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXN0
YXRlIG0pIHsKK2lmICghUFJFQUNUSU9OKG0pKSB7CisgIHNpemVfdCBmcCA9IDA7CisgIHNpemVf
dCB1c2VkID0gMDsKKyAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICBpZiAoaXNfaW5pdGlhbGl6
ZWQobSkpIHsKKyAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAvL3NpemVfdCBtYXhm
cCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgdXNlZCA9
IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsKKworICAgIHdoaWxlIChzICE9IDAp
IHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICB3
aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYm
IHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgaWYgKCFjaW51c2UocSkpCisg
ICAgICAgICAgdXNlZCAtPSBjaHVua3NpemUocSk7CisgICAgICAgIHEgPSBuZXh0X2NodW5rKHEp
OworICAgICAgfQorICAgICAgcyA9IHMtPm5leHQ7CisgICAgfQorICB9CisgIFBPU1RBQ1RJT04o
bSk7Cit9Cit9CisvKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovCitpbnQgUk5ld0FsbG9jYXRvcjo6
Y2hhbmdlX21wYXJhbShpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgc2l6ZV90IHZh
bCA9IChzaXplX3QpdmFsdWU7CisgIGluaXRfbXBhcmFtcyhERUZBVUxUX1RSSU1fVEhSRVNIT0xE
KTsKKyAgc3dpdGNoIChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgor
ICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2Ug
TV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFs
ICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7Cisg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2Ug
TV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAg
IHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisvKiBHZXQgbWVt
b3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KK3ZvaWQqIFJOZXdBbGxv
Y2F0b3I6OnN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKQoreworICAgIFRVaW50OCogdGJh
c2UgPSBDTUZBSUw7CisgICAgc2l6ZV90IHRzaXplID0gMDsKKyAgICBmbGFnX3QgbW1hcF9mbGFn
ID0gMDsKKyAgICAvL2luaXRfbXBhcmFtcygpOy8qTm8gbmVlZCB0byBkbyBpbml0X3BhcmFtcyBo
ZXJlKi8KKyAgICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzICovCisgICAgaWYgKHVzZV9t
bWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpCisgICAgeworICAgICAgICB2
b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICAgICAgaWYgKG1lbSAhPSAwKQorICAg
ICAgICAgICAgcmV0dXJuIG1lbTsKKyAgICB9CisgIC8qCisgICAgVHJ5IGdldHRpbmcgbWVtb3J5
IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bworICAgIGxlYXN0LXBy
ZWZlcnJlZCBvcmRlcik6CisgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1h
bGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3Qg
TU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcgorICAgICAgIG9yIG1h
aW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQp
CisgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9N
TUFQKS4KKyAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1P
UkVDT1JFIGlzIHVuYWJsZSB0bworICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9N
TUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcworICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3Vz
IHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwCisgICAgICAgc3RyYXRl
Z3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNh
c2UKKyAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQg
bW1hcCBtYXkgYmUgYWJsZSB0bworICAgICAgIGZpbmQgc3BhY2UuCisgICAgMy4gQSBjYWxsIHRv
IE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnku
CisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQorICAqLworICAvKlRyeWlu
ZyB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5Ki8KKyAgICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAm
JiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpCisgICAgeworICAgIFRVaW50OCogYnIgPSBDTUZBSUw7
CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5n
KG0sIChUVWludDgqKW0tPnRvcCk7CisgICAgc2l6ZV90IGFzaXplID0gMDsKKyAgICBBQ1FVSVJF
X01PUkVDT1JFX0xPQ0sobSk7CisgICAgaWYgKHNzID09IDApCisgICAgeyAgLyogRmlyc3QgdGlt
ZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICAgIFRVaW50OCogYmFzZSA9IChUVWludDgq
KUNBTExfTU9SRUNPUkUoMCk7CisgICAgICAgIGlmIChiYXNlICE9IENNRkFJTCkKKyAgICAgICAg
eworICAgICAgICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJ
WkUgKyBTSVpFX1RfT05FKTsKKyAgICAgICAgICAgIC8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdl
IGJvdW5kYXJ5ICovCisgICAgICAgICAgICBpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkKKyAg
ICAgICAgICAgICAgICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVf
dCliYXNlKTsKKyAgICAgICAgICAgIC8qIENhbid0IGNhbGwgTU9SRUNPUkUgaWYgc2l6ZSBpcyBu
ZWdhdGl2ZSB3aGVuIHRyZWF0ZWQgYXMgc2lnbmVkICovCisgICAgICAgICAgICBpZiAoYXNpemUg
PCBIQUxGX01BWF9TSVpFX1QgJiYoYnIgPSAoVFVpbnQ4KikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkp
KSA9PSBiYXNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRiYXNlID0gYmFzZTsK
KyAgICAgICAgICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3Rpbmcg
YXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovCisgICAgICAgIGFz
aXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSAr
IFNJWkVfVF9PTkUpOworICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51
b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLworICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0la
RV9UICYmCisgICAgICAgICAgKGJyID0gKFRVaW50OCopKENBTExfTU9SRUNPUkUoYXNpemUpKSkg
PT0gc3MtPmJhc2Urc3MtPnNpemUpIHsKKyAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgdHNp
emUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHRiYXNlID09IENNRkFJTCkgeyAg
ICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovCisgICAgICBpZiAoYnIgIT0gQ01GQUlM
KSB7ICAgIC8qIFRyeSB0byB1c2UvZXh0ZW5kIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisgICAg
ICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgICAgYXNpemUgPCBu
YiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKSB7CisgICAgICAgICAgc2l6ZV90IGVzaXpl
ID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSAtIGFz
aXplKTsKKyAgICAgICAgICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgICAg
ICAgIFRVaW50OCogZW5kID0gKFRVaW50OCopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisgICAgICAg
ICAgICBpZiAoZW5kICE9IENNRkFJTCkKKyAgICAgICAgICAgICAgYXNpemUgKz0gZXNpemU7Cisg
ICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNl
ICovCisgICAgICAgICAgICAgIENBTExfTU9SRUNPUkUoLWFzaXplKTsKKyAgICAgICAgICAgICAg
YnIgPSBDTUZBSUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlk
IGdldCAqLworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAg
ICAgfQorICAgICAgZWxzZQorICAgICAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0
IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKyAgICBSRUxFQVNF
X01PUkVDT1JFX0xPQ0sobSk7CisgIH0KKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZB
SUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJlcSA9IG5iICsgVE9QX0ZPT1RfU0la
RSArIFNJWkVfVF9PTkU7CisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocmVx
KTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICov
CisgICAgICBUVWludDgqIG1wID0gKFRVaW50OCopKENBTExfTU1BUChyc2l6ZSkpOworICAgICAg
aWYgKG1wICE9IENNRkFJTCkgeworICAgICAgICB0YmFzZSA9IG1wOworICAgICAgICB0c2l6ZSA9
IHJzaXplOworICAgICAgICBtbWFwX2ZsYWcgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIH0KKyAg
ICB9CisgIH0KKyAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSB7IC8qIFRy
eSBub25jb250aWd1b3VzIE1PUkVDT1JFICovCisgICAgc2l6ZV90IGFzaXplID0gZ3JhbnVsYXJp
dHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgaWYgKGFzaXpl
IDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICBUVWludDgqIGJyID0gQ01GQUlMOworICAgICAg
VFVpbnQ4KiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0sobSk7Cisg
ICAgICBiciA9IChUVWludDgqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAo
VFVpbnQ4KikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICBSRUxFQVNFX01PUkVDT1JFX0xPQ0so
bSk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQp
IHsKKyAgICAgICAgc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisgICAgICAgIGlmIChzc2l6ZSA+
IG5iICsgVE9QX0ZPT1RfU0laRSkgeworICAgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgICAg
dHNpemUgPSBzc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAodGJh
c2UgIT0gQ01GQUlMKSB7CisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4
X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAg
aWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICov
CisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNl
Zy5zaXplID0gdHNpemU7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOworICAgICAg
bS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgaW5pdF9iaW5zKG0pOworICAgICAgaWYg
KGlzX2dsb2JhbChtKSkKKyAgICAgICAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNp
emUgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgIGVsc2UgeworICAgICAgICAvKiBPZmZzZXQgdG9w
IGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLworICAgICAgICBtY2h1bmtwdHIgbW4gPSBuZXh0
X2NodW5rKG1lbTJjaHVuayhtKSk7CisgICAgICAgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgo
dGJhc2UgKyB0c2l6ZSkgLSAoVFVpbnQ4KiltbikgLVRPUF9GT09UX1NJWkUpOworICAgICAgfQor
ICAgIH1lbHNlIHsKKyAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21l
bnQgKi8KKyAgICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgICAgIHdoaWxlIChzcCAh
PSAwICYmIHRiYXNlICE9IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICAgIHNwID0gc3AtPm5l
eHQ7CisgICAgICBpZiAoc3AgIT0gMCAmJiAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAg
ICAgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisgICAg
ICAgICAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkKKyAgICAgICAgICB7IC8qIGFwcGVuZCAq
LworICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9w
LCBtLT50b3BzaXplICsgdHNpemUpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlm
ICh0YmFzZSA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgICAgbS0+bGVhc3RfYWRkciA9IHRiYXNl
OworICAgICAgICBzcCA9ICZtLT5zZWc7CisgICAgICAgIHdoaWxlIChzcCAhPSAwICYmIHNwLT5i
YXNlICE9IHRiYXNlICsgdHNpemUpCisgICAgICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgICAg
aWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKyAg
ICAgICAgICAgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZykgewor
ICAgICAgICAgIFRVaW50OCogb2xkYmFzZSA9IHNwLT5iYXNlOworICAgICAgICAgIHNwLT5iYXNl
ID0gdGJhc2U7CisgICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgICAgcmV0dXJu
IHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcp
OworICAgICAgfQorICAgIH0KKyAgICBpZiAobmIgPCBtLT50b3BzaXplKSB7IC8qIEFsbG9jYXRl
IGZyb20gbmV3IG9yIGV4dGVuZGVkIHRvcCBzcGFjZSAqLworICAgICAgc2l6ZV90IHJzaXplID0g
bS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbS0+dG9wOworICAgICAgbWNo
dW5rcHRyIHIgPSBtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5o
ZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9p
bnVzZV9jaHVuayhtLCBwLCBuYik7CisgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsK
KyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICAgICAg
cmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgLypuZWVkIHRvIGNoZWNrIHRoaXMq
LworICBNRU1fRFVNUF9PT01fTE9HUyhuYiwgInN5c19hbGxvYzo6IEZBSUxFRCB0byBnZXQgbW9y
ZSBtZW1vcnkiKTsKKworICAvL2Vycm5vID0gLTE7CisgIHJldHVybiAwOworfQorbXNlZ21lbnRw
dHIgUk5ld0FsbG9jYXRvcjo6c2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBUVWludDgqIGFkZHIp
IHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFk
ZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1
cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7Cisg
IH0KK30KKy8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluICovCitpbmxp
bmUgdm9pZCBSTmV3QWxsb2NhdG9yOjp1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXN0YXRlIE0s
bWNodW5rcHRyIEIsbWNodW5rcHRyIFAsYmluZGV4X3QmIEkpCit7CisgIG1jaHVua3B0ciBGID0g
UC0+ZmQ7CisgIGFzc2VydChQICE9IEIpOworICBhc3NlcnQoUCAhPSBGKTsKKyAgYXNzZXJ0KGNo
dW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTsKKyAgaWYgKEIgPT0gRikKKyAgICBj
bGVhcl9zbWFsbG1hcChNLCBJKTsKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYp
KSkgeworICAgIEItPmZkID0gRjsKKyAgICBGLT5iayA9IEI7CisgIH0KKyAgZWxzZSB7CisgICAg
Q09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7CisgIH0KK30KKy8qIExpbmsgYSBmcmVlIGNodW5r
IGludG8gYSBzbWFsbGJpbiAgKi8KK2lubGluZSB2b2lkIFJOZXdBbGxvY2F0b3I6Omluc2VydF9z
bWFsbF9jaHVuayhtc3RhdGUgTSxtY2h1bmtwdHIgUCwgc2l6ZV90IFMpCit7CisgIGJpbmRleF90
IEkgID0gc21hbGxfaW5kZXgoUyk7CisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7
CisgIG1jaHVua3B0ciBGID0gQjsKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpOworICBp
ZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSkKKyAgICBtYXJrX3NtYWxsbWFwKE0sIEkpOwor
ICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSkKKyAgICBGID0gQi0+ZmQ7
CisgIGVsc2UgeworICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pOworICB9CisgIEItPmZk
ID0gUDsKKyAgRi0+YmsgPSBQOworICBQLT5mZCA9IEY7CisgIFAtPmJrID0gQjsKK30KKworCitp
bmxpbmUgdm9pZCBSTmV3QWxsb2NhdG9yOjppbnNlcnRfY2h1bmsobXN0YXRlIE0sbWNodW5rcHRy
IFAsc2l6ZV90IFMsc2l6ZV90IE5QQUdFUykKK3sKKyAgICBpZiAoaXNfc21hbGwoUykpCisgICAg
ICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKTsKKyAgICBlbHNleworICAgICAgICB0Y2h1
bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTLCBO
UEFHRVMpOworICAgICB9Cit9CisKK2lubGluZSB2b2lkIFJOZXdBbGxvY2F0b3I6OnVubGlua19s
YXJnZV9jaHVuayhtc3RhdGUgTSx0Y2h1bmtwdHIgWCkKK3sKKyAgdGNodW5rcHRyIFhQID0gWC0+
cGFyZW50OworICB0Y2h1bmtwdHIgUjsKKyAgcmVzZXRfdGNodW5rX21lbV9wYWdlb3V0KFgpOyAv
LyBjbGVhciBjaHVuayBwYWdlb3V0IGZsYWcKKyAgaWYgKFgtPmJrICE9IFgpIHsKKyAgICB0Y2h1
bmtwdHIgRiA9IFgtPmZkOworICAgIFIgPSBYLT5iazsKKyAgICBpZiAoUlRDSEVDSyhva19hZGRy
ZXNzKE0sIEYpKSkgeworICAgICAgRi0+YmsgPSBSOworICAgICAgUi0+ZmQgPSBGOworICAgIH0K
KyAgICBlbHNlIHsKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pOworICAgIH0KKyAg
fQorICBlbHNlIHsKKyAgICB0Y2h1bmtwdHIqIFJQOworICAgIGlmICgoKFIgPSAqKFJQID0gJihY
LT5jaGlsZFsxXSkpKSAhPSAwKSB8fAorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFsw
XSkpKSAhPSAwKSkgeworICAgICAgdGNodW5rcHRyKiBDUDsKKyAgICAgIHdoaWxlICgoKihDUCA9
ICYoUi0+Y2hpbGRbMV0pKSAhPSAwKSB8fAorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGls
ZFswXSkpICE9IDApKSB7CisgICAgICAgIFIgPSAqKFJQID0gQ1ApOworICAgICAgfQorICAgICAg
aWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKQorICAgICAgICAqUlAgPSAwOworICAgICAg
ZWxzZSB7CisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pOworICAgICAgfQorICAg
IH0KKyAgfQorICBpZiAoWFAgIT0gMCkgeworICAgIHRiaW5wdHIqIEggPSB0cmVlYmluX2F0KE0s
IFgtPmluZGV4KTsKKyAgICBpZiAoWCA9PSAqSCkgeworICAgICAgaWYgKCgqSCA9IFIpID09IDAp
CisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlm
IChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkgeworICAgICAgaWYgKFhQLT5jaGlsZFswXSA9
PSBYKQorICAgICAgICBYUC0+Y2hpbGRbMF0gPSBSOworICAgICAgZWxzZQorICAgICAgICBYUC0+
Y2hpbGRbMV0gPSBSOworICAgIH0KKyAgICBlbHNlCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FD
VElPTihNKTsKKyAgICBpZiAoUiAhPSAwKSB7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNz
KE0sIFIpKSkgeworICAgICAgICB0Y2h1bmtwdHIgQzAsIEMxOworICAgICAgICBSLT5wYXJlbnQg
PSBYUDsKKyAgICAgICAgaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7CisgICAgICAgICAg
aWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMCkpKSB7CisgICAgICAgICAgICBSLT5jaGlsZFsw
XSA9IEMwOworICAgICAgICAgICAgQzAtPnBhcmVudCA9IFI7CisgICAgICAgICAgfQorICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pOworICAgICAg
ICB9CisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkgeworICAgICAgICAgIGlm
IChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkgeworICAgICAgICAgICAgUi0+Y2hpbGRbMV0g
PSBDMTsKKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSOworICAgICAgICAgIH0KKyAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTsKKyAgICAgICAg
fQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihN
KTsKKyAgICB9CisgIH0KK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAq
LworaW5saW5lIHZvaWQgUk5ld0FsbG9jYXRvcjo6dW5saW5rX3NtYWxsX2NodW5rKG1zdGF0ZSBN
LCBtY2h1bmtwdHIgUCxzaXplX3QgUykKK3sKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDsKKyAgbWNo
dW5rcHRyIEIgPSBQLT5iazsKKyAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpOworICBhc3Nl
cnQoUCAhPSBCKTsKKyAgYXNzZXJ0KFAgIT0gRik7CisgIGFzc2VydChjaHVua3NpemUoUCkgPT0g
c21hbGxfaW5kZXgyc2l6ZShJKSk7CisgIGlmIChGID09IEIpCisgICAgY2xlYXJfc21hbGxtYXAo
TSwgSSk7CisgIGVsc2UgaWYgKFJUQ0hFQ0soKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19h
ZGRyZXNzKE0sIEYpKSAmJgorICAgICAgICAgICAgICAgICAgIChCID09IHNtYWxsYmluX2F0KE0s
SSkgfHwgb2tfYWRkcmVzcyhNLCBCKSkpKSB7CisgICAgRi0+YmsgPSBCOworICAgIEItPmZkID0g
RjsKKyAgfQorICBlbHNlIHsKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTsKKyAgfQor
fQorCitpbmxpbmUgdm9pZCBSTmV3QWxsb2NhdG9yOjp1bmxpbmtfY2h1bmsobXN0YXRlIE0sIG1j
aHVua3B0ciBQLCBzaXplX3QgUykKK3sKKyAgaWYgKGlzX3NtYWxsKFMpKQorICAgIHVubGlua19z
bWFsbF9jaHVuayhNLCBQLCBTKTsKKyAgZWxzZQorICB7CisgICAgICB0Y2h1bmtwdHIgVFAgPSAo
dGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsKKyAgfQorfQorCitpbmxp
bmUgdm9pZCBSTmV3QWxsb2NhdG9yOjpjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZV90IFMsIGJpbmRl
eF90JiBJKQoreworICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDsKKyAgaWYgKFggPT0g
MCkKKyAgICBJID0gMDsKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRikKKyAgICBJID0gTlRSRUVCSU5T
LTE7CisgIGVsc2UgeworICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYOworICAg
IHVuc2lnbmVkIGludCBOID0gKChZIC0gMHgxMDApID4+IDE2KSAmIDg7CisgICAgdW5zaWduZWQg
aW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDsKKyAgICBOICs9IEs7Cisg
ICAgTiArPSBLID0gKCgoWSA8PD0gSykgLSAweDQwMDApID4+IDE2KSAmIDI7CisgICAgSyA9IDE0
IC0gTiArICgoWSA8PD0gSykgPj4gMTUpOworICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyAr
IChUUkVFQklOX1NISUZULTEpKSAmIDEpKTsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCitpbmxpbmUgdm9pZCBSTmV3QWxsb2Nh
dG9yOjppbnNlcnRfbGFyZ2VfY2h1bmsobXN0YXRlIE0sdGNodW5rcHRyIFgsc2l6ZV90IFMsc2l6
ZV90IE5QQUdFUykKK3sKKyAgdGJpbnB0ciogSDsKKyAgYmluZGV4X3QgSTsKKyAgY29tcHV0ZV90
cmVlX2luZGV4KFMsIEkpOworICBIID0gdHJlZWJpbl9hdChNLCBJKTsKKyAgWC0+aW5kZXggPSBJ
OworICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDsKKworICBpZiAoTlBBR0VTKSB7IHNl
dF90Y2h1bmtfbWVtX3BhZ2VvdXQoWCwgTlBBR0VTKSB9CisgIGVsc2UgIHsgcmVzZXRfdGNodW5r
X21lbV9wYWdlb3V0KFgpIH0KKworICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7Cisg
ICAgbWFya190cmVlbWFwKE0sIEkpOworICAgICpIID0gWDsKKyAgICBYLT5wYXJlbnQgPSAodGNo
dW5rcHRyKUg7CisgICAgWC0+ZmQgPSBYLT5iayA9IFg7CisgIH0KKyAgZWxzZSB7CisgICAgdGNo
dW5rcHRyIFQgPSAqSDsKKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2lu
ZGV4KEkpOworICAgIGZvciAoOzspIHsKKyAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykgewor
ICAgICAgICB0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1T
SVpFX1RfT05FKSkgJiAxXSk7CisgICAgICAgIEsgPDw9IDE7CisgICAgICAgIGlmICgqQyAhPSAw
KQorICAgICAgICAgIFQgPSAqQzsKKyAgICAgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNz
KE0sIEMpKSkgeworICAgICAgICAgICpDID0gWDsKKyAgICAgICAgICBYLT5wYXJlbnQgPSBUOwor
ICAgICAgICAgIFgtPmZkID0gWC0+YmsgPSBYOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pOwor
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAg
ICAgdGNodW5rcHRyIEYgPSBULT5mZDsKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhN
LCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkgeworICAgICAgICAgIFQtPmZkID0gRi0+YmsgPSBY
OworICAgICAgICAgIFgtPmZkID0gRjsKKyAgICAgICAgICBYLT5iayA9IFQ7CisgICAgICAgICAg
WC0+cGFyZW50ID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IHsKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTsKKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKgorICBVbmxpbmsgc3Rl
cHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNh
bWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMg
cmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1
dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYg
bm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0
byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNv
cnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVz
Y2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhp
cyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFs
IG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVy
IHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAg
IGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4K
KyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtz
KSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50
IChvciBudWxsIGlmIG5vbmUpLgorKi8KKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRo
ZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwg
Ki8KK2lubGluZSB2b2lkIFJOZXdBbGxvY2F0b3I6OnJlcGxhY2VfZHYobXN0YXRlIE0sIG1jaHVu
a3B0ciBQLCBzaXplX3QgUykKK3sKKyAgc2l6ZV90IERWUyA9IE0tPmR2c2l6ZTsKKyAgaWYgKERW
UyAhPSAwKSB7CisgICAgbWNodW5rcHRyIERWID0gTS0+ZHY7CisgICAgYXNzZXJ0KGlzX3NtYWxs
KERWUykpOworICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTsKKyAgfQorICBNLT5k
dnNpemUgPSBTOworICBNLT5kdiA9IFA7Cit9CisKK2lubGluZSB2b2lkIFJOZXdBbGxvY2F0b3I6
OmNvbXB1dGVfYml0MmlkeChiaW5tYXBfdCBYLGJpbmRleF90JiBJKQoreworICAgIHVuc2lnbmVk
IGludCBZID0gWCAtIDE7CisgICAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2Owor
ICAgIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7CisgICAgTiArPSBLID0gWSA+
PiAoOC0zKSAmICA4OyAgWSA+Pj0gSzsKKyAgICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZ
ID4+PSBLOworICAgIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7CisgICAgTiAr
PSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSzsKKyAgICBJID0gKGJpbmRleF90KShOICsg
WSk7Cit9CisKK3ZvaWQgUk5ld0FsbG9jYXRvcjo6YWRkX3NlZ21lbnQobXN0YXRlIG0sIFRVaW50
OCogdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpIHsKKyAgLyogRGV0ZXJtaW5l
IGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLwor
ICBUVWludDgqIG9sZF90b3AgPSAoVFVpbnQ4KiltLT50b3A7CisgIG1zZWdtZW50cHRyIG9sZHNw
ID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOworICBUVWludDgqIG9sZF9lbmQgPSBvbGRz
cC0+YmFzZSArIG9sZHNwLT5zaXplOworICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXpl
b2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7CisgIFRVaW50OCogcmF3c3AgPSBvbGRfZW5kIC0g
KHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90
IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgVFVpbnQ4KiBhc3Ag
PSByYXdzcCArIG9mZnNldDsKKyAgVFVpbnQ4KiBjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5f
Q0hVTktfU0laRSkpPyBvbGRfdG9wIDogYXNwOworICBtY2h1bmtwdHIgc3AgPSAobWNodW5rcHRy
KWNzcDsKKyAgbXNlZ21lbnRwdHIgc3MgPSAobXNlZ21lbnRwdHIpKGNodW5rMm1lbShzcCkpOwor
ICBtY2h1bmtwdHIgdG5leHQgPSBjaHVua19wbHVzX29mZnNldChzcCwgc3NpemUpOworICBtY2h1
bmtwdHIgcCA9IHRuZXh0OworICBpbnQgbmZlbmNlcyA9IDA7CisKKyAgLyogcmVzZXQgdG9wIHRv
IG5ldyBzcGFjZSAqLworICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRP
UF9GT09UX1NJWkUpOworCisgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLworICBhc3NlcnQo
aXNfYWxpZ25lZChzcykpOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0s
IHNwLCBzc2l6ZSk7CisgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLwor
ICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICBtLT5zZWcu
c2ZsYWdzID0gbW1hcHBlZDsKKyAgbS0+c2VnLm5leHQgPSBzczsKKworICAvKiBJbnNlcnQgdHJh
aWxpbmcgZmVuY2Vwb3N0cyAqLworICBmb3IgKDs7KSB7CisgICAgbWNodW5rcHRyIG5leHRwID0g
Y2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOworICAgIHAtPmhlYWQgPSBGRU5DRVBP
U1RfSEVBRDsKKyAgICArK25mZW5jZXM7CisgICAgaWYgKChUVWludDgqKSgmKG5leHRwLT5oZWFk
KSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOwor
ICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBv
bGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3Nw
ICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAg
ICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5r
X3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6
ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSwgMCk7CisgIH0KKworICBjaGVj
a190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworCit2b2lkKiBSTmV3QWxsb2NhdG9yOjpwcmVw
ZW5kX2FsbG9jKG1zdGF0ZSBtLCBUVWludDgqIG5ld2Jhc2UsIFRVaW50OCogb2xkYmFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYikgeworICBtY2h1bmtwdHIgcCA9IGFs
aWduX2FzX2NodW5rKG5ld2Jhc2UpOworICBtY2h1bmtwdHIgb2xkZmlyc3QgPSBhbGlnbl9hc19j
aHVuayhvbGRiYXNlKTsKKyAgc2l6ZV90IHBzaXplID0gKFRVaW50OCopb2xkZmlyc3QgLSAoVFVp
bnQ4KilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6
ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9j
aHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChUVWludDgqKW9sZGZpcnN0ID4gKFRVaW50OCop
cSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9D
SFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVu
ayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90
IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhl
YWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9
CisgIGVsc2UgeworICAgIGlmICghY2ludXNlKG9sZGZpcnN0KSkgeworICAgICAgc2l6ZV90IG5z
aXplID0gY2h1bmtzaXplKG9sZGZpcnN0KTsKKworICAgICAgLyogY2hlY2sgZm9yIGNodW5rIG1l
bW9yeSBwYWdlLWluICovCisgICAgICBpZiAocGFnZV9ub3RfaW5fbWVtb3J5KG9sZGZpcnN0LCBu
c2l6ZSkpCisgICAgICAgIG1hcF9jaHVua19wYWdlcygodGNodW5rcHRyKW9sZGZpcnN0LCBuc2l6
ZSk7ICAgICAgIC8vRXJyIElnbm9yZWQsIGJyYW5jaCBub3QgcmVhY2hhYmxlLgorCisgICAgICB1
bmxpbmtfY2h1bmsobSwgb2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIG9sZGZpcnN0ID0gY2h1bmtf
cGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIHFzaXplICs9IG5zaXplOworICAg
IH0KKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBxc2l6ZSwgb2xkZmlyc3QpOworICAgIGlu
c2VydF9jaHVuayhtLCBxLCBxc2l6ZSwgMCk7CisgICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsK
KyAgfQorCisgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICBy
ZXR1cm4gY2h1bmsybWVtKHApOworfQorCit2b2lkKiBSTmV3QWxsb2NhdG9yOjptbWFwX2FsbG9j
KG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IGdyYW51bGFyaXR5X2Fs
aWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworICBpZiAobW1z
aXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgVFVpbnQ4
KiBtbSA9IChUVWludDgqKShESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01G
QUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkp
OworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsK
KyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+
cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAo
cHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOwor
ICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7
CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAw
OworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRy
ID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3Rw
cmludCkKKyAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFz
c2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVu
ayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVy
biAwOworfQorCisgICAgaW50IFJOZXdBbGxvY2F0b3I6OnN5c190cmltKG1zdGF0ZSBtLCBzaXpl
X3QgcGFkKQorICAgIHsKKyAgICAgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgICAgICBpZiAocGFk
IDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgICAgcGFkICs9IFRP
UF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAq
LworCisgICAgICAgIGlmIChtLT50b3BzaXplID4gcGFkKSB7CisgICAgICAgICAgLyogU2hyaW5r
IHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9u
ZSAqLworICAgICAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKKyAgICAg
ICAgICAgICAgICBzaXplX3QgZXh0cmEgPSAoKG0tPnRvcHNpemUgLSBwYWQgKyAodW5pdCAtIFNJ
WkVfVF9PTkUpKSAvIHVuaXQgLSBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICAgICAgbXNlZ21l
bnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKFRVaW50OCopbS0+dG9wKTsKKworICAgICAg
ICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisgICAgICAgICAgICBpZiAoaXNfbW1h
cHBlZF9zZWdtZW50KHNwKSkgeworICAgICAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmCisgICAg
ICAgICAgICAgICAgICBzcC0+c2l6ZSA+PSBleHRyYSAmJgorICAgICAgICAgICAgICAgICAgIWhh
c19zZWdtZW50X2xpbmsobSwgc3ApKSB7IC8qIGNhbid0IHNocmluayBpZiBwaW5uZWQgKi8KKyAg
ICAgICAgICAgICAgICAvKnNpemVfdCBuZXdzaXplID0gc3AtPnNpemUgLSBleHRyYTsgKi8KKyAg
ICAgICAgICAgICAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisg
ICAgICAgICAgICAgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIHNwLT5z
aXplIC0gZXh0cmEsIDApICE9IE1GQUlMKSB8fAorICAgICAgICAgICAgICAgICAgICAoQ0FMTF9N
VU5NQVAoc3AtPmJhc2UgKyBzcC0+c2l6ZSAtIGV4dHJhLCBleHRyYSkgPT0gMCkpIHsKKyAgICAg
ICAgICAgICAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChIQVZFX01PUkVD
T1JFKSB7CisgICAgICAgICAgICAgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2
b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisgICAgICAgICAgICAgICAgZXh0cmEgPSAoSEFMRl9N
QVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworICAgICAgICAgICAgICBBQ1FVSVJFX01P
UkVDT1JFX0xPQ0sobSk7CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBNYWtl
IHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KKyAgICAgICAg
ICAgICAgICBUVWludDgqIG9sZF9iciA9IChUVWludDgqKShDQUxMX01PUkVDT1JFKDApKTsKKyAg
ICAgICAgICAgICAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKyAgICAg
ICAgICAgICAgICAgIFRVaW50OCogcmVsX2JyID0gKFRVaW50OCopKENBTExfTU9SRUNPUkUoLWV4
dHJhKSk7CisgICAgICAgICAgICAgICAgICBUVWludDgqIG5ld19iciA9IChUVWludDgqKShDQUxM
X01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgICAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYm
IG5ld19iciA8IG9sZF9icikKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBvbGRfYnIg
LSBuZXdfYnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSyhtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
CisKKyAgICAgICAgICBpZiAocmVsZWFzZWQgIT0gMCkgeworICAgICAgICAgICAgc3AtPnNpemUg
LT0gcmVsZWFzZWQ7CisgICAgICAgICAgICBtLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7CisgICAg
ICAgICAgICBpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgLSByZWxlYXNlZCk7CisgICAg
ICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAg
ICAgICAgaWYgKEhBVkVfTU1BUCkKKyAgICAgICAgICByZWxlYXNlZCArPSByZWxlYXNlX3VudXNl
ZF9zZWdtZW50cyhtKTsKKworICAgICAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmlt
IHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8KKyAgICAgICAgaWYgKHJl
bGVhc2VkID09IDApCisgICAgICAgICAgbS0+dHJpbV9jaGVjayA9IE1BWF9TSVpFX1Q7CisgICAg
ICB9CisKKyAgICAgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworICAgIH0KKworICAg
IGlubGluZSBpbnQgUk5ld0FsbG9jYXRvcjo6aGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNl
Z21lbnRwdHIgc3MpCisgICAgeworICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICAg
ICAgZm9yICg7OykgeworICAgICAgICBpZiAoKFRVaW50OCopc3AgPj0gc3MtPmJhc2UgJiYgKFRV
aW50OCopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICB9CisgICAgfQorCisgICAgLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50
cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KKyAgICBzaXplX3QgUk5ld0FsbG9j
YXRvcjo6cmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pCisgICAgeworICAgICAgc2l6
ZV90IHJlbGVhc2VkID0gMDsKKyAgICAgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICAg
ICAgbXNlZ21lbnRwdHIgc3AgPSBwcmVkLT5uZXh0OworICAgICAgd2hpbGUgKHNwICE9IDApIHsK
KyAgICAgICAgVFVpbnQ4KiBiYXNlID0gc3AtPmJhc2U7CisgICAgICAgIHNpemVfdCBzaXplID0g
c3AtPnNpemU7CisgICAgICAgIG1zZWdtZW50cHRyIG5leHQgPSBzcC0+bmV4dDsKKyAgICAgICAg
aWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgewor
ICAgICAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsoYmFzZSk7CisgICAgICAgICAg
c2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICAgIC8qIENhbiB1bm1hcCBpZiBm
aXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAg
ICAgIGlmICghY2ludXNlKHApICYmIChUVWludDgqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAt
IFRPUF9GT09UX1NJWkUpIHsKKyAgICAgICAgICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIp
cDsKKyAgICAgICAgICAgIHNpemVfdCBucGFnZXNfb3V0ID0gdHAtPm5wYWdlczsKKyAgICAgICAg
ICAgIGFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoVFVpbnQ4KilzcCkpOworICAgICAgICAgICAg
dW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUChi
YXNlLCBzaXplKSA9PSAwKSB7CisgICAgICAgICAgICAgIHJlbGVhc2VkICs9IHNpemU7CisgICAg
ICAgICAgICAgIG0tPmZvb3RwcmludCAtPSBzaXplOworICAgICAgICAgICAgICAvKiB1bmxpbmsg
b2Jzb2xldGVkIHJlY29yZCAqLworICAgICAgICAgICAgICBzcCA9IHByZWQ7CisgICAgICAgICAg
ICAgIHNwLT5uZXh0ID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeyAv
KiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKyAgICAgICAgICAgICAgaW5zZXJ0X2xhcmdl
X2NodW5rKG0sIHRwLCBwc2l6ZSwgbnBhZ2VzX291dCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHByZWQgPSBzcDsKKyAgICAgICAgc3AgPSBuZXh0Owor
ICAgICAgfS8qRW5kIG9mIHdoaWxlKi8KKyAgICAgIHJldHVybiByZWxlYXNlZDsKKyAgICB9Cisg
ICAgLyogUmVhbGxvYyB1c2luZyBtbWFwICovCisgICAgaW5saW5lICBtY2h1bmtwdHIgUk5ld0Fs
bG9jYXRvcjo6bW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIp
CisgICAgeworICAgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgICBp
ZiAoaXNfc21hbGwobmIpKSAvKiBDYW4ndCBzaHJpbmsgbW1hcCByZWdpb25zIGJlbG93IHNtYWxs
IHNpemUgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAvKiBLZWVwIG9sZCBjaHVuayBpZiBi
aWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICAgICAgaWYgKG9sZHNpemUgPj0gbmIgKyBT
SVpFX1RfU0laRSAmJgorICAgICAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51
bGFyaXR5IDw8IDEpKQorICAgICAgICByZXR1cm4gb2xkcDsKKyAgICAgIGVsc2UgeworICAgICAg
ICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOworICAg
ICAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7
CisgICAgICAgIHNpemVfdCBuZXdtbXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNJWF9T
SVpFX1RfU0laRVMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0hVTktfQUxJR05fTUFTSyk7CisgICAgICAgIFRVaW50OCogY3AgPSAoVFVpbnQ4KilDQUxM
X01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2xkbW1zaXplLCBuZXdtbXNpemUsIDEpOworICAgICAgICBpZiAoY3AgIT0g
Q01GQUlMKSB7CisgICAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9m
ZnNldCk7CisgICAgICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1B
UF9GT09UX1BBRDsKKyAgICAgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOwor
ICAgICAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7CisgICAgICAgICAgY2h1
bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAg
ICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0g
MDsKKworICAgICAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgICAgICBtLT5s
ZWFzdF9hZGRyID0gY3A7CisgICAgICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXpl
IC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgICAgICBtLT5tYXhfZm9v
dHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwg
bmV3cCk7CisgICAgICAgICAgcmV0dXJuIG5ld3A7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IHJldHVybiAwOworICAgIH0KKworCit2b2lkIFJOZXdBbGxvY2F0b3I6OkluaXRfRGxtYWxsb2Mo
c2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkLCBzaXplX3QgYVRyaW1UaHJlc2hvbGQpCisgICAg
eworICAgICAgICBtZW1zZXQoZ20sMCxzaXplb2YobWFsbG9jX3N0YXRlKSk7CisgICAgICAgIGlu
aXRfbXBhcmFtcyhhVHJpbVRocmVzaG9sZCk7IC8qIEVuc3VyZSBwYWdlc2l6ZSBldGMgaW5pdGlh
bGl6ZWQgKi8KKyAgICAgICAgLy8gVGhlIG1heGltdW0gYW1vdW50IHRoYXQgY2FuIGJlIGFsbG9j
YXRlZCBjYW4gYmUgY2FsY3VsYXRlZCBhczotCisgICAgICAgIC8vIDJec2l6ZW9mKHNpemVfdCkg
LSBzaXplb2YobWFsbG9jX3N0YXRlKSAtIFRPUF9GT09UX1NJWkUgLSBwYWdlIHNpemUgKGFsbCBh
Y2NvcmRpbmdseSBwYWRkZWQpCisgICAgICAgIC8vIElmIHRoZSBjYXBhY2l0eSBleGNlZWRzIHRo
aXMsIG5vIGFsbG9jYXRpb24gd2lsbCBiZSBkb25lLgorICAgICAgICBnbS0+c2VnLmJhc2UgPSBn
bS0+bGVhc3RfYWRkciA9IGlCYXNlOworICAgICAgICBnbS0+c2VnLnNpemUgPSBjYXBhY2l0eTsK
KyAgICAgICAgZ20tPnNlZy5zZmxhZ3MgPSAhSVNfTU1BUFBFRF9CSVQ7CisgICAgICAgIHNldF9s
b2NrKGdtLCBsb2NrZWQpOworICAgICAgICBnbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAg
ICAgICBpbml0X2JpbnMoZ20pOworICAgICAgICBpbml0X3RvcChnbSwgKG1jaHVua3B0cilpQmFz
ZSwgY2FwYWNpdHkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICB9CisKK3ZvaWQqIFJOZXdBbGxvY2F0
b3I6OmRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAvKgorICAgICBCYXNpYyBhbGdvcml0aG06
CisgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92
ZXJoZWFkKToKKyAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNo
dW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uCisgICAgICAgICAgKFJlbWFpbmRlcmxlc3MgbWVh
bnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8gcmVwcmVzZW50IGFzIGEg
Y2h1bmsuKQorICAgICAgIDIuIElmIG9uZSBleGlzdHMsIHNwbGl0IHRoZSBzbWFsbGVzdCBhdmFp
bGFibGUgY2h1bmsgaW4gYSBiaW4sIHNhdmluZyByZW1haW5kZXIgaW4gYmluLgorICAgICAgIDQu
IElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2
YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lz
ZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFp
bGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA0
LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFw
IHRoaXMgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lz
dGVtIGFuZCB1c2UgaXQKKworICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBw
b3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCisgICovCisgIGlmICghUFJFQUNUSU9O
KGdtKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9
IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBf
dCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5L
X1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7
CisgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNt
YWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJp
bi4gKi8KKyAgICAgICAgbWNodW5rcHRyIGIsIHA7CisgICAgICAgIGlkeCArPSB+c21hbGxiaXRz
ICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKyAgICAgICAgYiA9
IHNtYWxsYmluX2F0KGdtLCBpZHgpOworICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgIGFzc2Vy
dChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgdW5saW5r
X2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOworICAgICAgICBzZXRfaW51c2VfYW5k
X3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgbWVtID0gY2h1
bmsybWVtKHApOworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7Cisg
ICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzbWFs
bGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLwor
ICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOworICAgICAgICAgIHNpemVfdCByc2l6ZTsKKyAg
ICAgICAgICBiaW5kZXhfdCBpOworICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxs
Yml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisgICAgICAgICAgYmlubWFw
X3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgICAgIGNvbXB1dGVfYml0
MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsKKyAg
ICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFs
bF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20s
IGIsIHAsIGkpOworICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOwor
ICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNp
emVzICovCisgICAgICAgICAgaWYgKHJzaXplIDwgZnJlZV9jaHVua190aHJlc2hvbGQpCisgICAg
ICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7
CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2lu
dXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQo
cCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIs
IHJzaXplKTsKKyAgICAgICAgICAgIGluc2VydF9jaHVuayhnbSwgciwgcnNpemUsIDApOworICAg
ICAgICAgIH0KKyAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgICAgY2hlY2tf
bWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsK
KyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9
IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkgeworICAgICAgICAgIGNoZWNrX21hbGxvY2Vk
X2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9IC8qIGVsc2UgLSBsYXJnZSBhbGxvYyByZXF1ZXN0ICovCisgICAg
ZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8q
IFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAg
ICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKGdtLT50
cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkgeworICAg
ICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9z
dGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAv
KiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOwor
ICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9w
ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElO
VVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAs
IG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhn
bSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7Cisg
ICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBu
Yik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyNpZmRlZiBETF9DSFVO
S19NRU1fREVCVUcKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1jaHVua3B0ciBwcCA9IG1lbTJj
aHVuayhtZW0pOworICAgICAgICBkb19jaGVja19hbnlfY2h1bmtfYWNjZXNzKHBwLCBjaHVua3Np
emUocHApKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWNodW5r
cHRyIHBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgICAgIGlUb3RhbEFsbG9jU2l6ZSArPSBjaHVu
a3NpemUocHApOworICAgIH0KKworICAgIHJldHVybiBtZW07CisgIH0KKyNpZiBVU0VfTE9DS1Mg
Ly8ga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkKKyAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9p
ZCBSTmV3QWxsb2NhdG9yOjpkbGZyZWUodm9pZCogbWVtKSB7CisgIC8qCisgICAgIENvbnNvbGlk
YXRlIGZyZWVkIGNodW5rcyB3aXRoIHByZWNlZWRpbmcgb3Igc3VjY2VlZGluZyBib3JkZXJpbmcK
KyAgICAgZnJlZSBjaHVua3MsIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIHBsYWNlIGluIGEgYmlu
LiAgSW50ZXJtaXhlZAorICAgICB3aXRoIHNwZWNpYWwgY2FzZXMgZm9yIHRvcCwgZHYsIG1tYXBw
ZWQgY2h1bmtzLCBhbmQgdXNhZ2UgZXJyb3JzLgorICAqLworCisgICAgaWYgKG1lbSAhPSAwKQor
ICAgIHsKKyAgICAgICAgc2l6ZV90IHVubWFwcGVkX3BhZ2VzID0gMDsKKyAgICAgICAgaW50IHBy
ZXZfY2h1bmtfdW5tYXBwZWQgPSAwOworICAgICAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmso
bWVtKTsKKyNpZiBGT09URVJTCisgICAgICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHAp
OworICAgICAgICBpZiAoIW9rX21hZ2ljKGZtKSkKKyAgICAgICAgeworICAgICAgICAgICAgVVNB
R0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
I2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8K
KworICAgICAgICBpZiAoIVBSRUFDVElPTihmbSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNo
ZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJl
c3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICAgICAgICAgIGlUb3RhbEFs
bG9jU2l6ZSAtPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5r
X3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBpbnVzZShwKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9
IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChwcmV2c2l6ZSAmIElTX01N
QVBQRURfQklUKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9
PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBz
aXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtf
bWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YWdlX25vdF9pbl9tZW1vcnkocHJldiwgcHJldnNpemUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldl9jaHVua191bm1hcHBlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5tYXBwZWRfcGFnZXMgPSAoKHRjaHVua3B0cilwcmV2KS0+bnBhZ2VzOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2l6ZSArPSBw
cmV2c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19u
ZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkKKyAgICAgICAgICAgICAgICAgICAg
eyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5leHQgPT0gZm0tPnRvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocHJldl9jaHVua191bm1hcHBlZCkgeyAvLyBwcmV2aW91cyBj
aHVuayBpcyB1bm1hcHBlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVubWFwIGFs
bCBwYWdlcyBiZXR3ZWVuIHByZXZpb3VzbHkgdW5tYXBwZWQgYW5kIGVuZCBvZiB0b3AgY2h1bmsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVzZXQgdG9wIHRvIGJlZ2lubmlu
ZyBvZiBwcmV2IGNodW5rIC0gZG9uZSBpbiBzeXNfdHJpbV9wYXJ0aWFsKCkgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3RyaW1fcGFydGlhbChmbSwgcCwgcHNpemUsIHVu
bWFwcGVkX3BhZ2VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fY2hlY2tf
YW55X2NodW5rX2FjY2VzcyhmbS0+dG9wLCBmbS0+dG9wc2l6ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIGZvcndhcmQgbWVy
Z2UgdG8gdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9
IGZtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bS0+dG9wID0gcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+aGVhZCA9IHRz
aXplIHwgUElOVVNFX0JJVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNo
b3VsZF90cmltKGZtLCB0c2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzeXNfdHJpbShmbSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2No
ZWNrX2FueV9jaHVua19hY2Nlc3MoZm0tPnRvcCwgZm0tPnRvcHNpemUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvL2ludCBuZXh0X2NodW5rX3VubWFwcGVkID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHBhZ2Vfbm90X2luX21lbW9yeShuZXh0LCBuc2l6ZSkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbmV4dF9jaHVua191bm1hcHBlZCA9
IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkX3BhZ2VzICs9ICgo
dGNodW5rcHRyKW5leHQpLT5ucGFnZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAs
IHBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRf
ZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKyAgICAgICAgICAgICAgICAgICAg
LyogY2hlY2sgaWYgY2h1bmsgbWVtbW9yeSBjYW4gYmUgcmVsZWFzZWQgKi8KKyAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG5wYWdlc19vdXQgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzX3NtYWxsKHBzaXplKSAmJiBwc2l6ZT49Q0hVTktfUEFHRU9VVF9USEVTSE9MRCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5wYWdlc19vdXQgPSB1bm1hcF9jaHVua19wYWdlcygodGNodW5r
cHRyKXAsIHBzaXplLCB1bm1hcHBlZF9wYWdlcyk7CisKKyAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0X2NodW5rKGZtLCBwLCBwc2l6ZSwgbnBhZ2VzX291dCk7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworICAgICAgICAgICAgICAgICAgICBkb19jaHVua19w
YWdlX3JlbGVhc2VfY2hlY2socCwgcHNpemUsIGZtLCBucGFnZXNfb3V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KK2Vycm9yYWN0aW9uOgorICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworcG9z
dGFjdGlvbjoKKyAgICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgICAgIH0KKyAgICB9CisjaWYg
IUZPT1RFUlMKKyN1bmRlZiBmbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KK30KKwordm9pZCogUk5l
d0FsbG9jYXRvcjo6ZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlm
IChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxM
T0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRt
ZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZS
RUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxz
ZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmso
b2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNU
SU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVS
UyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9
Cit9CisKKworaW50IFJOZXdBbGxvY2F0b3I6OmRsbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgewor
ICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0g
c3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJl
c3VsdDsKK30KKworc2l6ZV90IFJOZXdBbGxvY2F0b3I6OmRsbWFsbG9jX2Zvb3RwcmludCh2b2lk
KSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgUk5ld0FsbG9jYXRvcjo6
ZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3Rwcmlu
dDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIFJOZXdBbGxvY2F0b3I6
OmRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQor
I2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgUk5ld0FsbG9jYXRvcjo6ZGxtYWxsb2Nf
c3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK2ludCBSTmV3QWxs
b2NhdG9yOjpkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVy
biBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisvL2lubGluZSBzbGFi
KiBzbGFiOjpzbGFiZm9yKHZvaWQqIHApCitzbGFiKiBzbGFiOjpzbGFiZm9yKCBjb25zdCB2b2lk
KiBwKQoreworcmV0dXJuIChzbGFiKikoZmxvb3IocCwgc2xhYnNpemUpKTsKK30KKworCit2b2lk
IFJOZXdBbGxvY2F0b3I6OnRyZWVfcmVtb3ZlKHNsYWIqIHMpCit7CisgICAgc2xhYioqIHIgPSBz
LT5wYXJlbnQ7CisgICAgc2xhYiogYzEgPSBzLT5jaGlsZDE7CisgICAgc2xhYiogYzIgPSBzLT5j
aGlsZDI7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGlmICghYzIpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpyID0gYzE7CisgICAgICAgICAgICBpZiAoYzEpCisgICAgICAgICAgICAg
ICAgYzEtPnBhcmVudCA9IHI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFjMSkKKyAgICAgICAgeworICAgICAgICAgICAgKnIgPSBjMjsKKyAgICAgICAgICAg
IGMyLT5wYXJlbnQgPSByOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChjMSA+IGMyKQorICAgICAgICB7CisgICAgICAgICAgICBzbGFiKiBjMyA9IGMxOworICAg
ICAgICAgICAgYzEgPSBjMjsKKyAgICAgICAgICAgIGMyID0gYzM7CisgICAgICAgIH0KKyAgICAg
ICAgc2xhYiogbmV3YzIgPSBjMS0+Y2hpbGQyOworICAgICAgICAqciA9IGMxOworICAgICAgICBj
MS0+cGFyZW50ID0gcjsKKyAgICAgICAgYzEtPmNoaWxkMiA9IGMyOworICAgICAgICBjMi0+cGFy
ZW50ID0gJmMxLT5jaGlsZDI7CisgICAgICAgIHMgPSBjMTsKKyAgICAgICAgYzEgPSBzLT5jaGls
ZDE7CisgICAgICAgIGMyID0gbmV3YzI7CisgICAgICAgIHIgPSAmcy0+Y2hpbGQxOworICAgIH0K
K30KK3ZvaWQgUk5ld0FsbG9jYXRvcjo6dHJlZV9pbnNlcnQoc2xhYiogcyxzbGFiKiogcikKKyAg
ICB7CisgICAgICAgIHNsYWIqIG4gPSAqcjsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFuKQorICAgICAgICAgICAgeyAgIC8vIHRyZWUgZW1wdHkKKyAgICAg
ICAgICAgICAgICAqciA9IHM7CisgICAgICAgICAgICAgICAgcy0+cGFyZW50ID0gcjsKKyAgICAg
ICAgICAgICAgICBzLT5jaGlsZDEgPSBzLT5jaGlsZDIgPSAwOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMgPCBuKQorICAgICAgICAgICAg
eyAgIC8vIGluc2VydCBiZXR3ZWVuIHBhcmVudCBhbmQgbgorICAgICAgICAgICAgICAgICpyID0g
czsKKyAgICAgICAgICAgICAgICBzLT5wYXJlbnQgPSByOworICAgICAgICAgICAgICAgIHMtPmNo
aWxkMSA9IG47CisgICAgICAgICAgICAgICAgcy0+Y2hpbGQyID0gMDsKKyAgICAgICAgICAgICAg
ICBuLT5wYXJlbnQgPSAmcy0+Y2hpbGQxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc2xhYiogYzEgPSBuLT5jaGlsZDE7CisgICAgICAgICAgICBz
bGFiKiBjMiA9IG4tPmNoaWxkMjsKKyAgICAgICAgICAgIGlmICgoYzEgLSAxKSA+IChjMiAtIDEp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHIgPSAmbi0+Y2hpbGQxOworICAgICAg
ICAgICAgICAgIG4gPSBjMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByID0gJm4tPmNoaWxkMjsKKyAgICAgICAgICAgICAg
ICBuID0gYzI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit2b2lkKiBSTmV3QWxs
b2NhdG9yOjphbGxvY25ld3NsYWIoc2xhYnNldCYgYWxsb2NhdG9yKQorLy8KKy8vIEFjcXVpcmUg
YW5kIGluaXRpYWxpc2UgYSBuZXcgc2xhYiwgcmV0dXJuaW5nIGEgY2VsbCBmcm9tIHRoZSBzbGFi
CisvLyBUaGUgc3RyYXRlZ3kgaXM6CisvLyAxLiBVc2UgdGhlIGxvd2VzdCBhZGRyZXNzIGZyZWUg
c2xhYiwgaWYgYXZhaWxhYmxlLiBUaGlzIGlzIGRvbmUgYnkgdXNpbmcgdGhlIGxvd2VzdCBzbGFi
CisvLyAgICBpbiB0aGUgcGFnZSBhdCB0aGUgcm9vdCBvZiB0aGUgcGFydGlhbF9wYWdlIGhlYXAg
KHdoaWNoIGlzIGFkZHJlc3Mgb3JkZXJlZCkuIElmIHRoZQorLy8gICAgaXMgbm93IGZ1bGx5IHVz
ZWQsIHJlbW92ZSBpdCBmcm9tIHRoZSBwYXJ0aWFsX3BhZ2UgaGVhcC4KKy8vIDIuIEFsbG9jYXRl
IGEgbmV3IHBhZ2UgZm9yIHNsYWJzIGlmIG5vIGVtcHR5IHNsYWJzIGFyZSBhdmFpbGFibGUKKy8v
Cit7CisgICAgcGFnZSogcCA9IHBhZ2U6OnBhZ2Vmb3IocGFydGlhbF9wYWdlKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiBhbGxvY25ld3BhZ2UoYWxsb2NhdG9yKTsKKworICAgIHVuc2ln
bmVkIGggPSBwLT5zbGFic1swXS5oZWFkZXI7CisgICAgdW5zaWduZWQgcGFnZW1hcCA9IGhlYWRl
cl9wYWdlbWFwKGgpOworICAgIEFTU0VSVCgmcC0+c2xhYnNbaGliaXQocGFnZW1hcCldID09IHBh
cnRpYWxfcGFnZSk7CisKKyAgICB1bnNpZ25lZCBzbGFiaXggPSBsb3diaXQocGFnZW1hcCk7Cisg
ICAgcC0+c2xhYnNbMF0uaGVhZGVyID0gaCAmfiAoMHgxMDA8PHNsYWJpeCk7CisgICAgaWYgKCEo
cGFnZW1hcCAmfiAoMTw8c2xhYml4KSkpCisgICAgeworICAgICAgICB0cmVlX3JlbW92ZShwYXJ0
aWFsX3BhZ2UpOyAgLy8gbGFzdCBmcmVlIHNsYWIgaW4gcGFnZQorICAgIH0KKyAgICByZXR1cm4g
YWxsb2NhdG9yLmluaXRzbGFiKCZwLT5zbGFic1tzbGFiaXhdKTsKK30KKworLyoqRGVmaW5hdGlv
biBvZiB0aGlzIGZ1bmN0aW9uaXMgbm90IHRoZXJlIGluIHByb3RvIGNvZGUqKiovCisjaWYgMAor
dm9pZCBSTmV3QWxsb2NhdG9yOjpwYXJ0aWFsX2luc2VydChzbGFiKiBzKQorICAgIHsKKyAgICAg
ICAgLy8gc2xhYiBoYXMgaGFkIGZpcnN0IGNlbGwgZnJlZWQgYW5kIG5lZWRzIHRvIGJlIGxpbmtl
ZCBiYWNrIGludG8gcGFydGlhbCB0cmVlCisgICAgICAgIHNsYWJzZXQmIHNzID0gc2xhYmFsbG9j
W3NpemVtYXBbcy0+Y2x6XV07CisKKyAgICAgICAgQVNTRVJUKHMtPnVzZWQgPT0gc2xhYmZ1bGwp
OworICAgICAgICBzLT51c2VkID0gc3MuZnVsbHVzZSAtIHMtPmNsejsgICAgICAvLyBmdWxsLTEg
bG9hZGluZworICAgICAgICB0cmVlX2luc2VydChzLCZzcy5wYXJ0aWFsKTsKKyAgICAgICAgY2hl
Y2t0cmVlKHNzLnBhcnRpYWwpOworICAgIH0KKy8qKkRlZmluYXRpb24gb2YgdGhpcyBmdW5jdGlv
bmlzIG5vdCB0aGVyZSBpbiBwcm90byBjb2RlKioqLworI2VuZGlmCisKK3ZvaWQqIFJOZXdBbGxv
Y2F0b3I6OmFsbG9jbmV3cGFnZShzbGFic2V0JiBhbGxvY2F0b3IpCisvLworLy8gQWNxdWlyZSBh
bmQgaW5pdGlhbGlzZSBhIG5ldyBwYWdlLCByZXR1cm5pbmcgYSBjZWxsIGZyb20gYSBuZXcgc2xh
YgorLy8gVGhlIHBhcnRpYWxfcGFnZSB0cmVlIGlzIGVtcHR5IChvdGhlcndpc2Ugd2UnZCBoYXZl
IHVzZWQgYSBzbGFiIGZyb20gdGhlcmUpCisvLyBUaGUgcGFydGlhbF9wYWdlIGxpbmsgaXMgcHV0
IGluIHRoZSBoaWdoZXN0IGFkZHJlc3NlZCBzbGFiIGluIHRoZSBwYWdlLCBhbmQgdGhlCisvLyBs
b3dlc3QgYWRkcmVzc2VkIHNsYWIgaXMgdXNlZCB0byBmdWxmaWxsIHRoZSBhbGxvY2F0aW9uIHJl
cXVlc3QKKy8vCit7CisgICAgcGFnZSogcCAgPSBzcGFyZV9wYWdlOworICAgIGlmIChwKQorICAg
ICAgICBzcGFyZV9wYWdlID0gMDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBwID0gc3RhdGlj
X2Nhc3Q8cGFnZSo+KG1hcCgwLHBhZ2VzaXplKSk7CisgICAgICAgIGlmICghcCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBBU1NFUlQocCA9PSBmbG9vcihwLHBhZ2VzaXplKSk7
CisgICAgcC0+c2xhYnNbMF0uaGVhZGVyID0gKCgxPDwzKSArICgxPDwyKSArICgxPDwxKSk8PDg7
ICAgICAvLyBzZXQgcGFnZW1hcAorICAgIHAtPnNsYWJzWzNdLnBhcmVudCA9ICZwYXJ0aWFsX3Bh
Z2U7CisgICAgcC0+c2xhYnNbM10uY2hpbGQxID0gcC0+c2xhYnNbM10uY2hpbGQyID0gMDsKKyAg
ICBwYXJ0aWFsX3BhZ2UgPSAmcC0+c2xhYnNbM107CisgICAgcmV0dXJuIGFsbG9jYXRvci5pbml0
c2xhYigmcC0+c2xhYnNbMF0pOworfQorCit2b2lkIFJOZXdBbGxvY2F0b3I6OmZyZWVwYWdlKHBh
Z2UqIHApCisvLworLy8gUmVsZWFzZSBhbiB1bnVzZWQgcGFnZSB0byB0aGUgT1MKKy8vIEEgc2lu
Z2xlIHBhZ2UgaXMgY2FjaGVkIGZvciByZXVzZSB0byByZWR1Y2UgdGhyYXNoaW5nCisvLyB0aGUg
T1MgYWxsb2NhdG9yLgorLy8KK3sKKyAgICBBU1NFUlQoY2VpbGluZyhwLHBhZ2VzaXplKSA9PSBw
KTsKKyAgICBpZiAoIXNwYXJlX3BhZ2UpCisgICAgeworICAgICAgICBzcGFyZV9wYWdlID0gcDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB1bm1hcChwLHBhZ2VzaXplKTsKK30KKwordm9p
ZCBSTmV3QWxsb2NhdG9yOjpmcmVlc2xhYihzbGFiKiBzKQorLy8KKy8vIFJlbGVhc2UgYW4gZW1w
dHkgc2xhYiB0byB0aGUgc2xhYiBtYW5hZ2VyCisvLyBUaGUgc3RyYXRlZ3kgaXM6CisvLyAxLiBU
aGUgcGFnZSBjb250YWluaW5nIHRoZSBzbGFiIGlzIGNoZWNrZWQgdG8gc2VlIHRoZSBzdGF0ZSBv
ZiB0aGUgb3RoZXIgc2xhYnMgaW4gdGhlIHBhZ2UgYnkKKy8vICAgIGluc3BlY3RpbmcgdGhlIHBh
Z2VtYXAgZmllbGQgaW4gdGhlIGhlYWRlciBvZiB0aGUgZmlyc3Qgc2xhYiBpbiB0aGUgcGFnZS4K
Ky8vIDIuIFRoZSBwYWdlbWFwIGlzIHVwZGF0ZWQgdG8gaW5kaWNhdGUgdGhlIG5ldyB1bnVzZWQg
c2xhYgorLy8gMy4gSWYgdGhpcyBpcyB0aGUgb25seSB1bnVzZWQgc2xhYiBpbiB0aGUgcGFnZSB0
aGVuIHRoZSBzbGFiIGhlYWRlciBpcyB1c2VkIHRvIGFkZCB0aGUgcGFnZSB0bworLy8gICAgdGhl
IHBhcnRpYWxfcGFnZSB0cmVlL2hlYXAKKy8vIDQuIElmIGFsbCB0aGUgc2xhYnMgaW4gdGhlIHBh
Z2UgYXJlIG5vdyB1bnVzZWQgdGhlIHBhZ2UgaXMgcmVsZWFzZSBiYWNrIHRvIHRoZSBPUworLy8g
NS4gSWYgdGhpcyBzbGFiIGhhcyBhIGhpZ2hlciBhZGRyZXNzIHRoYW4gdGhlIG9uZSBjdXJyZW50
bHkgdXNlZCB0byB0cmFjayB0aGlzIHBhZ2UgaW4KKy8vICAgIHRoZSBwYXJ0aWFsX3BhZ2UgaGVh
cCwgdGhlIGxpbmthZ2UgaXMgbW92ZWQgdG8gdGhlIG5ldyB1bnVzZWQgc2xhYgorLy8KK3sKKyAg
ICB0cmVlX3JlbW92ZShzKTsKKyAgICBjaGVja3RyZWUoKnMtPnBhcmVudCk7CisgICAgQVNTRVJU
KGhlYWRlcl91c2VkbTQocy0+aGVhZGVyKSA9PSBoZWFkZXJfc2l6ZShzLT5oZWFkZXIpLTQpOwor
ICAgIENIRUNLKHMtPmhlYWRlciB8PSAweEZGMDAwMDApOyAgICAgICAgICAvLyBpbGxlZ2FsIHZh
bHVlIGZvciBkZWJ1ZyBwdXJwb3NlcworICAgIHBhZ2UqIHAgPSBwYWdlOjpwYWdlZm9yKHMpOwor
ICAgIHVuc2lnbmVkIGggPSBwLT5zbGFic1swXS5oZWFkZXI7CisgICAgaW50IHNsYWJpeCA9IHMg
LSAmcC0+c2xhYnNbMF07CisgICAgdW5zaWduZWQgcGFnZW1hcCA9IGhlYWRlcl9wYWdlbWFwKGgp
OworICAgIHAtPnNsYWJzWzBdLmhlYWRlciA9IGggfCAoMHgxMDA8PHNsYWJpeCk7CisgICAgaWYg
KHBhZ2VtYXAgPT0gMCkKKyAgICB7ICAgLy8gcGFnZSB3YXMgZnVsbCBiZWZvcmUsIHVzZSB0aGlz
IHNsYWIgYXMgbGluayBpbiBlbXB0eSBoZWFwCisgICAgICAgIHRyZWVfaW5zZXJ0KHMsICZwYXJ0
aWFsX3BhZ2UpOworICAgIH0KKyAgICBlbHNlCisgICAgeyAgIC8vIGZpbmQgdGhlIGN1cnJlbnQg
ZW1wdHktbGluayBzbGFiCisgICAgICAgIHNsYWIqIHNsID0gJnAtPnNsYWJzW2hpYml0KHBhZ2Vt
YXApXTsKKyAgICAgICAgcGFnZW1hcCBePSAoMTw8c2xhYml4KTsKKyAgICAgICAgaWYgKHBhZ2Vt
YXAgPT0gMHhmKQorICAgICAgICB7ICAgLy8gcGFnZSBpcyBub3cgZW1wdHkgc28gcmVjeWNsZSBw
YWdlIHRvIG9zCisgICAgICAgICAgICB0cmVlX3JlbW92ZShzbCk7CisgICAgICAgICAgICBmcmVl
cGFnZShwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBlbnN1
cmUgdGhlIGZyZWUgbGlzdCBsaW5rIGlzIGluIGhpZ2hlc3QgYWRkcmVzcyBzbGFiIGluIHBhZ2UK
KyAgICAgICAgaWYgKHMgPiBzbCkKKyAgICAgICAgeyAgIC8vIHJlcGxhY2UgY3VycmVudCBsaW5r
IHdpdGggbmV3IG9uZS4gQWRkcmVzcy1vcmRlciB0cmVlIHNvIHBvc2l0aW9uIHN0YXlzIHRoZSBz
YW1lCisgICAgICAgICAgICBzbGFiKiogciA9IHNsLT5wYXJlbnQ7CisgICAgICAgICAgICBzbGFi
KiBjMSA9IHNsLT5jaGlsZDE7CisgICAgICAgICAgICBzbGFiKiBjMiA9IHNsLT5jaGlsZDI7Cisg
ICAgICAgICAgICBzLT5wYXJlbnQgPSByOworICAgICAgICAgICAgcy0+Y2hpbGQxID0gYzE7Cisg
ICAgICAgICAgICBzLT5jaGlsZDIgPSBjMjsKKyAgICAgICAgICAgICpyID0gczsKKyAgICAgICAg
ICAgIGlmIChjMSkKKyAgICAgICAgICAgICAgICBjMS0+cGFyZW50ID0gJnMtPmNoaWxkMTsKKyAg
ICAgICAgICAgIGlmIChjMikKKyAgICAgICAgICAgICAgICBjMi0+cGFyZW50ID0gJnMtPmNoaWxk
MjsKKyAgICAgICAgfQorICAgICAgICBDSEVDSyhpZiAocyA8IHNsKSBzPXNsKTsKKyAgICB9Cisg
ICAgQVNTRVJUKGhlYWRlcl9wYWdlbWFwKHAtPnNsYWJzWzBdLmhlYWRlcikgIT0gMCk7CisgICAg
QVNTRVJUKGhpYml0KGhlYWRlcl9wYWdlbWFwKHAtPnNsYWJzWzBdLmhlYWRlcikpID09IHVuc2ln
bmVkKHMgLSAmcC0+c2xhYnNbMF0pKTsKK30KKwordm9pZCBSTmV3QWxsb2NhdG9yOjpzbGFiX2lu
aXQodW5zaWduZWQgc2xhYmJpdG1hcCkKK3sKKyAgICBBU1NFUlQoKHNsYWJiaXRtYXAgJiB+b2ti
aXRzKSA9PSAwKTsKKyAgICBBU1NFUlQobWF4c2xhYnNpemUgPD0gNjApOworCisgICAgc2xhYl90
aHJlc2hvbGQ9MDsKKyAgICBwYXJ0aWFsX3BhZ2UgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgaXgg
PSAweGZmOworICAgIHVuc2lnbmVkIGJpdCA9IDE8PCgobWF4c2xhYnNpemU+PjIpLTEpOworICAg
IGZvciAoaW50IHN6ID0gbWF4c2xhYnNpemU7IHN6ID49IDA7IHN6IC09IDQsIGJpdCA+Pj0gMSkK
KyAgICB7CisgICAgICAgIGlmIChzbGFiYml0bWFwICYgYml0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoKytpeCA9PSAwKQorICAgICAgICAgICAgICAgIHNsYWJfdGhyZXNob2xkPXN6KzE7
CisgICAgICAgICAgICBzbGFic2V0JiBjID0gc2xhYmFsbG9jW2l4XTsKKyAgICAgICAgICAgIGMu
c2l6ZSA9IHN6OworICAgICAgICAgICAgYy5wYXJ0aWFsID0gMDsKKyAgICAgICAgfQorICAgICAg
ICBzaXplbWFwW3N6Pj4yXSA9IGl4OworICAgIH0KKworICAgIGZyZWVfY2h1bmtfdGhyZXNob2xk
ID0gcGFkX3JlcXVlc3Qoc2xhYl90aHJlc2hvbGQpOworfQorCit2b2lkKiBSTmV3QWxsb2NhdG9y
OjpzbGFiX2FsbG9jYXRlKHNsYWJzZXQmIHNzKQorLy8KKy8vIEFsbG9jYXRlIGEgY2VsbCBmcm9t
IHRoZSBnaXZlbiBzbGFic2V0CisvLyBTdHJhdGVneToKKy8vIDEuIFRha2UgdGhlIHBhcnRpYWxs
eSBmdWxsIHNsYWIgYXQgdGhlIHRvcCBvZiB0aGUgaGVhcCAobG93ZXN0IGFkZHJlc3MpLgorLy8g
Mi4gSWYgdGhlcmUgaXMgbm8gc3VjaCBzbGFiLCBhbGxvY2F0ZSBmcm9tIGEgbmV3IHNsYWIKKy8v
IDMuIElmIHRoZSBzbGFiIGhhcyBhIG5vbi1lbXB0eSBmcmVlbGlzdCwgcG9wIHRoZSBjZWxsIGZy
b20gdGhlIGZyb250IG9mIHRoZSBsaXN0IGFuZCB1cGRhdGUgdGhlIHNsYWIKKy8vIDQuIE90aGVy
d2lzZSwgaWYgdGhlIHNsYWIgaXMgbm90IGZ1bGwsIHJldHVybiB0aGUgY2VsbCBhdCB0aGUgZW5k
IG9mIHRoZSBjdXJyZW50bHkgdXNlZCByZWdpb24gb2YKKy8vICAgIHRoZSBzbGFiLCB1cGRhdGlu
ZyB0aGUgc2xhYgorLy8gNS4gT3RoZXJ3aXNlLCByZWxlYXNlIHRoZSBzbGFiIGZyb20gdGhlIHBh
cnRpYWwgdHJlZS9oZWFwLCBtYXJraW5nIGl0IGFzICdmbG9hdGluZycgYW5kIGdvIGJhY2sgdG8K
Ky8vICAgIHN0ZXAgMQorLy8KK3sKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgc2xhYiAq
cyA9IHNzLnBhcnRpYWw7CisgICAgICAgIGlmICghcykKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB1bnNpZ25lZCBoID0gcy0+aGVhZGVyOworICAgICAgICB1bnNpZ25lZCBmcmVlID0gaCAm
IDB4ZmY7ICAgICAgIC8vIGV4dHJhY3QgZnJlZSBjZWxsIHBvc2l0aW9uZworICAgICAgICBpZiAo
ZnJlZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCgoZnJlZTw8Miktc2l6ZW9mKHNs
YWJoZHIpKSVoZWFkZXJfc2l6ZShoKSA9PSAwKTsKKyAgICAgICAgICAgIHZvaWQqIHAgPSBvZmZz
ZXQocyxmcmVlPDwyKTsKKyAgICAgICAgICAgIGZyZWUgPSAqKHVuc2lnbmVkIGNoYXIqKXA7ICAv
LyBnZXQgbmV4dCBwb3MgaW4gZnJlZSBsaXN0CisgICAgICAgICAgICBoICs9IChoJjB4M0MwMDAp
PDw2OyAgICAgICAgLy8gdXBkYXRlIHVzZWRtNAorICAgICAgICAgICAgaCAmPSB+MHhmZjsKKyAg
ICAgICAgICAgIGggfD0gZnJlZTsgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZnJlZWxpc3QK
KyAgICAgICAgICAgIHMtPmhlYWRlciA9IGg7CisgICAgICAgICAgICBBU1NFUlQoaGVhZGVyX2Zy
ZWUoaCkgPT0gMCB8fCAoKGhlYWRlcl9mcmVlKGgpPDwyKS1zaXplb2Yoc2xhYmhkcikpJWhlYWRl
cl9zaXplKGgpID09IDApOworICAgICAgICAgICAgQVNTRVJUKGhlYWRlcl91c2VkbTQoaCkgPD0g
MHgzRjh1KTsKKyAgICAgICAgICAgIEFTU0VSVCgoaGVhZGVyX3VzZWRtNChoKSs0KSVoZWFkZXJf
c2l6ZShoKSA9PSAwKTsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgICAg
IHVuc2lnbmVkIGgyID0gaCArICgoaCYweDNDMDAwKTw8Nik7CisgICAgICAgIGlmIChoMiA8IDB4
ZmMwMDAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChoZWFkZXJfdXNlZG00KGgy
KSs0KSVoZWFkZXJfc2l6ZShoMikgPT0gMCk7CisgICAgICAgICAgICBzLT5oZWFkZXIgPSBoMjsK
KyAgICAgICAgICAgIHJldHVybiBvZmZzZXQocywoaD4+MTgpICsgc2l6ZW9mKHVuc2lnbmVkKSAr
IHNpemVvZihzbGFiaGRyKSk7CisgICAgICAgIH0KKyAgICAgICAgaCB8PSAweDgwMDAwMDAwOyAg
ICAgICAgICAgICAgICAvLyBtYXJrIHRoZSBzbGFiIGFzIGZ1bGwtZmxvYXRpbmcKKyAgICAgICAg
cy0+aGVhZGVyID0gaDsKKyAgICAgICAgdHJlZV9yZW1vdmUocyk7CisgICAgICAgIGNoZWNrdHJl
ZShzcy5wYXJ0aWFsKTsKKyAgICAgICAgLy8gZ28gYmFjayBhbmQgdHJ5IHRoZSBuZXh0IHNsYWIu
Li4KKyAgICB9CisgICAgLy8gbm8gcGFydGlhbCBzbGFicyBmb3VuZCwgc28gYWxsb2NhdGUgZnJv
bSBhIG5ldyBzbGFiCisgICAgcmV0dXJuIGFsbG9jbmV3c2xhYihzcyk7Cit9CisKK3ZvaWQgUk5l
d0FsbG9jYXRvcjo6c2xhYl9mcmVlKHZvaWQqIHApCisvLworLy8gRnJlZSBhIGNlbGwgZnJvbSB0
aGUgc2xhYiBhbGxvY2F0b3IKKy8vIFN0cmF0ZWd5OgorLy8gMS4gRmluZCB0aGUgY29udGFpbmlu
ZyBzbGFiIChyb3VuZCBkb3duIHRvIG5lYXJlc3QgMUtCIGJvdW5kYXJ5KQorLy8gMi4gUHVzaCB0
aGUgY2VsbCBpbnRvIHRoZSBzbGFiJ3MgZnJlZWxpc3QsIGFuZCB1cGRhdGUgdGhlIHNsYWIgdXNh
Z2UgY291bnQKKy8vIDMuIElmIHRoaXMgaXMgdGhlIGxhc3QgYWxsb2NhdGVkIGNlbGwsIGZyZWUg
dGhlIHNsYWIgdG8gdGhlIG1haW4gc2xhYiBtYW5hZ2VyCisvLyA0LiBJZiB0aGUgc2xhYiB3YXMg
ZnVsbC1mbG9hdGluZyB0aGVuIGluc2VydCB0aGUgc2xhYiBpbiBpdCdzIHJlc3BlY3RpdmUgcGFy
dGlhbCB0cmVlCisvLworeworICAgIEFTU0VSVChsb3diaXRzKHAsMyk9PTApOworICAgIHNsYWIq
IHMgPSBzbGFiOjpzbGFiZm9yKHApOworCisgICAgdW5zaWduZWQgcG9zID0gbG93Yml0cyhwLCBz
bGFic2l6ZSk7CisgICAgdW5zaWduZWQgaCA9IHMtPmhlYWRlcjsKKyAgICBBU1NFUlQoaGVhZGVy
X3VzZWRtNChoKSAhPSAweDNmQyk7ICAgICAgLy8gc2xhYiBpcyBlbXB0eSBhbHJlYWR5CisgICAg
QVNTRVJUKChwb3Mtc2l6ZW9mKHNsYWJoZHIpKSVoZWFkZXJfc2l6ZShoKSA9PSAwKTsKKyAgICAq
KHVuc2lnbmVkIGNoYXIqKXAgPSAodW5zaWduZWQgY2hhciloOworICAgIGggJj0gfjB4RkY7Cisg
ICAgaCB8PSAocG9zPj4yKTsKKyAgICB1bnNpZ25lZCBzaXplID0gaCAmIDB4M0MwMDA7CisgICAg
dW5zaWduZWQgYWxsb2NTaXplID0gKGggJiAweDNGMDAwKSA+PiAxMjsgLy8gc2l6ZSBpcyBzdG9y
ZWQgaW4gYml0cyAxMi4uLjE3IGluIHNsYWJoZHIKKyAgICBpVG90YWxBbGxvY1NpemUgLT0gYWxs
b2NTaXplOworICAgIGlmIChpbnQoaCkgPj0gMCkKKyAgICB7CisgICAgICAgIGggLT0gc2l6ZTw8
NjsKKyAgICAgICAgaWYgKGludChoKT49MCkKKyAgICAgICAgeworICAgICAgICAgICAgcy0+aGVh
ZGVyID0gaDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmcmVlc2xh
YihzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBoIC09IHNpemU8PDY7CisgICAgaCAm
PSB+MHg4MDAwMDAwMDsKKyAgICBzLT5oZWFkZXIgPSBoOworICAgIHNsYWJzZXQmIHNzID0gc2xh
YmFsbG9jW3NpemVtYXBbc2l6ZT4+MTRdXTsKKyAgICB0cmVlX2luc2VydChzLCZzcy5wYXJ0aWFs
KTsKKyAgICBjaGVja3RyZWUoc3MucGFydGlhbCk7Cit9CisKK3ZvaWQqIHNsYWJzZXQ6OmluaXRz
bGFiKHNsYWIqIHMpCisvLworLy8gaW5pdGlhbGlzZSBhbiBlbXB0eSBzbGFiIGZvciB0aGlzIGFs
bG9jYXRvciBhbmQgcmV0dXJuIHRoZSBmaXN0IGNlbGwKKy8vIHByZS1jb25kaXRpb246IHRoZSBz
bGFic2V0IGhhcyBubyBwYXJ0aWFsIHNsYWJzIGZvciBhbGxvY2F0aW9uCisvLworeworICAgIEFT
U0VSVChwYXJ0aWFsPT0wKTsKKyAgICB1bnNpZ25lZCBoID0gcy0+aGVhZGVyICYgMHhGMDA7IC8v
IHByZXNlcnZlIHBhZ2VtYXAgb25seQorICAgIGggfD0gKHNpemU8PDEyKTsgICAgICAgICAgICAg
ICAgICAgIC8vIHNldCBzaXplCisgICAgaCB8PSAoc2l6ZS00KTw8MTg7ICAgICAgICAgICAgICAg
ICAgLy8gc2V0IHVzZWRtaW51czQgdG8gb25lIG9iamVjdCBtaW51cyA0CisgICAgcy0+aGVhZGVy
ID0gaDsKKyAgICBwYXJ0aWFsID0gczsKKyAgICBzLT5wYXJlbnQgPSAmcGFydGlhbDsKKyAgICBz
LT5jaGlsZDEgPSBzLT5jaGlsZDIgPSAwOworICAgIHJldHVybiBvZmZzZXQocyxzaXplb2Yoc2xh
YmhkcikpOworfQorCitUQW55KiBSTmV3QWxsb2NhdG9yOjpTZXRCcmsoVEludDMyIGFEZWx0YSkK
K3sKKyAgICBpZiAoaUZsYWdzICYgRUZpeGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuIE1GQUlMOwor
CisgICAgaWYgKGFEZWx0YSA8IDApCisgICAgICAgIHsKKyAgICAgICAgdW5tYXAob2Zmc2V0KGlU
b3AsIGFEZWx0YSksIC1hRGVsdGEpOworICAgICAgICB9CisgICAgZWxzZSBpZiAoYURlbHRhID4g
MCkKKyAgICAgICAgeworICAgICAgICBpZiAoIW1hcChpVG9wLCBhRGVsdGEpKQorICAgICAgICAg
ICAgcmV0dXJuIE1GQUlMOworICAgICAgICB9CisgICAgdm9pZCAqIHAgPWlUb3A7CisgICAgaVRv
cCA9IG9mZnNldChpVG9wLCBhRGVsdGEpOworICAgIHJldHVybiBwOworfQorCit2b2lkKiBSTmV3
QWxsb2NhdG9yOjptYXAodm9pZCogcCx1bnNpZ25lZCBzeikKKy8vCisvLyBhbGxvY2F0ZSBwYWdl
cyBpbiB0aGUgY2h1bmsKKy8vIGlmIHAgaXMgTlVMTCwgZmluZCBhbmQgYWxsb2NhdGUgdGhlIHJl
cXVpcmVkIG51bWJlciBvZiBwYWdlcyAod2hpY2ggbXVzdCBsaWUgaW4gdGhlIGxvd2VyIGhhbGYp
CisvLyBvdGhlcndpc2UgY29tbWl0IHRoZSBwYWdlcyBzcGVjaWZpZWQKKy8vCit7CitBU1NFUlQo
cCA9PSBmbG9vcihwLCBwYWdlc2l6ZSkpOworQVNTRVJUKHN6ID09IGNlaWxpbmcoc3osIHBhZ2Vz
aXplKSk7CitBU1NFUlQoc3ogPiAwKTsKKworICAgIGlmIChpQ2h1bmtTaXplICsgc3ogPiBpTWF4
TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJDaHVuayBjaHVuazsKKyAgICBjaHVu
ay5TZXRIYW5kbGUoaUNodW5rSGFuZGxlKTsKKyAgICBpZiAocCkKKyAgICB7CisgICAgICAgIFRJ
bnQgciA9IGNodW5rLkNvbW1pdChpT2Zmc2V0ICsgcHRyZGlmZihwLCB0aGlzKSxzeik7CisgICAg
ICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpQ2h1bmtTaXpl
ICs9IHN6OworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisKKyAgICBUSW50IHIgPSBjaHVuay5B
bGxvY2F0ZShzeik7CisgICAgaWYgKHIgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo
ciA+IGlPZmZzZXQpCisgICAgeworICAgICAgICAvLyBjYW4ndCBhbGxvdyBwYWdlIGFsbG9jYXRp
b25zIGluIERMIHpvbmUKKyAgICAgICAgY2h1bmsuRGVjb21taXQociwgc3opOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaUNodW5rU2l6ZSArPSBzejsKKyNpZmRlZiBUUkFDSU5HX0hF
QVBTCisgICAgaWYgKGlDaHVua1NpemUgPiBpSGlnaFdhdGVyTWFyaykKKyAgICAgICAgeworICAg
ICAgICAgICAgaUhpZ2hXYXRlck1hcmsgPSBjZWlsaW5nKGlDaHVua1NpemUsMTYqcGFnZXNpemUp
OworCisKKyAgICAgICAgICAgIFJDaHVuayBjaHVuazsKKyAgICAgICAgICAgIGNodW5rLlNldEhh
bmRsZShpQ2h1bmtIYW5kbGUpOworICAgICAgICAgICAgVEtOYW1lIGNodW5rX25hbWU7CisgICAg
ICAgICAgICBjaHVuay5GdWxsTmFtZShjaHVua19uYW1lKTsKKyAgICAgICAgICAgIEJUcmFjZUNv
bnRleHRCaWcoQlRyYWNlOjpFVGVzdDEsIDQsIDQ0LCBjaHVua19uYW1lLlB0cigpLCBjaHVua19u
YW1lLlNpemUoKSk7CisKKyAgICAgICAgICAgIFRVaW50MzIgdHJhY2VEYXRhWzZdOworICAgICAg
ICAgICAgdHJhY2VEYXRhWzBdID0gaUNodW5rSGFuZGxlOworICAgICAgICAgICAgdHJhY2VEYXRh
WzFdID0gaU1pbkxlbmd0aDsKKyAgICAgICAgICAgIHRyYWNlRGF0YVsyXSA9IGlNYXhMZW5ndGg7
CisgICAgICAgICAgICB0cmFjZURhdGFbM10gPSBzejsKKyAgICAgICAgICAgIHRyYWNlRGF0YVs0
XSA9IGlDaHVua1NpemU7CisgICAgICAgICAgICB0cmFjZURhdGFbNV0gPSBpSGlnaFdhdGVyTWFy
azsKKyAgICAgICAgICAgIEJUcmFjZUNvbnRleHROKEJUcmFjZTo6RVRlc3QxLCAzLCAoVFVpbnQz
Mil0aGlzLCAzMywgdHJhY2VEYXRhLCBzaXplb2YodHJhY2VEYXRhKSk7CisgICAgICAgIH0KKyNl
bmRpZgorCisgICAgcmV0dXJuIG9mZnNldCh0aGlzLCByIC0gaU9mZnNldCk7CisgICAgLy8gY29k
ZSBiZWxvdyBkb2VzIGRlbGF5ZWQgaW5pdGlhbGlzYXRpb24gb2YgdGhlIHNsYWJzLgorICAgIC8q
CisgICAgaWYgKGlDaHVua1NpemUgPj0gc2xhYl9pbml0X3RocmVzaG9sZCkKKyAgICB7ICAgLy8g
c2V0IHVwIHNsYWIgc3lzdGVtIG5vdyB0aGF0IGhlYXAgaXMgbGFyZ2UgZW5vdWdoCisgICAgICAg
IHNsYWJfY29uZmlnKHNsYWJfY29uZmlnX2JpdHMpOworICAgICAgICBzbGFiX2luaXRfdGhyZXNo
b2xkID0gS01heFRVaW50OworICAgIH0KKyAgICByZXR1cm4gcDsKKyAgICAqLworfQorCit2b2lk
KiBSTmV3QWxsb2NhdG9yOjpyZW1hcCh2b2lkKiBwLHVuc2lnbmVkIG9sZHN6LHVuc2lnbmVkIHN6
KQoreworICAgIGlmIChvbGRzeiA+IHN6KQorICAgICAgICB7ICAgLy8gc2hyaW5rCisgICAgICAg
IHVubWFwKG9mZnNldChwLHN6KSwgb2xkc3otc3opOworICAgICAgICB9CisgICAgZWxzZSBpZiAo
b2xkc3ogPCBzeikKKyAgICAgICAgeyAgIC8vIGdyb3csIHRyeSBhbmQgZG8gdGhpcyBpbiBwbGFj
ZSBmaXJzdAorICAgICAgICBpZiAoIW1hcChvZmZzZXQocCwgb2xkc3opLCBzei1vbGRzeikpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAvLyBuZWVkIHRvIGFsbG9jYXRlLWNvcHktZnJlZQor
ICAgICAgICAgICAgdm9pZCogbmV3cCA9IG1hcCgwLCBzeik7CisgICAgICAgICAgICBpZiAobmV3
cCkgeworICAgICAgICAgICAgICAgIG1lbWNweShuZXdwLCBwLCBvbGRzeik7CisgICAgICAgICAg
ICAgICAgdW5tYXAocCxvbGRzeik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bmV3cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHJldHVybiBwOworfQorCit2b2lk
IFJOZXdBbGxvY2F0b3I6OnVubWFwKHZvaWQqIHAsdW5zaWduZWQgc3opCit7CisgICAgQVNTRVJU
KHAgPT0gZmxvb3IocCwgcGFnZXNpemUpKTsKKyAgICBBU1NFUlQoc3ogPT0gY2VpbGluZyhzeiwg
cGFnZXNpemUpKTsKKyAgICBBU1NFUlQoc3ogPiAwKTsKKworICAgIFJDaHVuayBjaHVuazsKKyAg
ICBjaHVuay5TZXRIYW5kbGUoaUNodW5rSGFuZGxlKTsKKyAgICBUSW50IHIgPSBjaHVuay5EZWNv
bW1pdChwdHJkaWZmKHAsIG9mZnNldCh0aGlzLC1pT2Zmc2V0KSksIHN6KTsKKyAgICAvL1RJbnQg
b2Zmc2V0ID0gKFRVaW50OCopcC0oVFVpbnQ4KiljaHVuay5CYXNlKCk7CisgICAgLy9USW50IHIg
PSBjaHVuay5EZWNvbW1pdChvZmZzZXQsc3opOworCisgICAgQVNTRVJUKHIgPj0gMCk7CisgICAg
aUNodW5rU2l6ZSAtPSBzejsKKyNpZmRlZiBUUkFDSU5HX0hFQVBTCisgICAgaWYgKGlDaHVua1Np
emUgPiBpSGlnaFdhdGVyTWFyaykKKyAgICAgICAgeworICAgICAgICAgICAgaUhpZ2hXYXRlck1h
cmsgPSBjZWlsaW5nKGlDaHVua1NpemUsMTYqcGFnZXNpemUpOworCisKKyAgICAgICAgICAgIFJD
aHVuayBjaHVuazsKKyAgICAgICAgICAgIGNodW5rLlNldEhhbmRsZShpQ2h1bmtIYW5kbGUpOwor
ICAgICAgICAgICAgVEtOYW1lIGNodW5rX25hbWU7CisgICAgICAgICAgICBjaHVuay5GdWxsTmFt
ZShjaHVua19uYW1lKTsKKyAgICAgICAgICAgIEJUcmFjZUNvbnRleHRCaWcoQlRyYWNlOjpFVGVz
dDEsIDQsIDQ0LCBjaHVua19uYW1lLlB0cigpLCBjaHVua19uYW1lLlNpemUoKSk7CisKKyAgICAg
ICAgICAgIFRVaW50MzIgdHJhY2VEYXRhWzZdOworICAgICAgICAgICAgdHJhY2VEYXRhWzBdID0g
aUNodW5rSGFuZGxlOworICAgICAgICAgICAgdHJhY2VEYXRhWzFdID0gaU1pbkxlbmd0aDsKKyAg
ICAgICAgICAgIHRyYWNlRGF0YVsyXSA9IGlNYXhMZW5ndGg7CisgICAgICAgICAgICB0cmFjZURh
dGFbM10gPSBzejsKKyAgICAgICAgICAgIHRyYWNlRGF0YVs0XSA9IGlDaHVua1NpemU7CisgICAg
ICAgICAgICB0cmFjZURhdGFbNV0gPSBpSGlnaFdhdGVyTWFyazsKKyAgICAgICAgICAgIEJUcmFj
ZUNvbnRleHROKEJUcmFjZTo6RVRlc3QxLCAzLCAoVFVpbnQzMil0aGlzLCAzMywgdHJhY2VEYXRh
LCBzaXplb2YodHJhY2VEYXRhKSk7CisgICAgICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFJOZXdB
bGxvY2F0b3I6OnBhZ2VkX2luaXQodW5zaWduZWQgcGFnZXBvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHBhZ2Vwb3dlciA9PSAwKQorICAgICAgICAgICAgcGFnZXBvd2VyID0gMzE7CisgICAgICAg
IGVsc2UgaWYgKHBhZ2Vwb3dlciA8IG1pbnBhZ2Vwb3dlcikKKyAgICAgICAgICAgIHBhZ2Vwb3dl
ciA9IG1pbnBhZ2Vwb3dlcjsKKyAgICAgICAgcGFnZV90aHJlc2hvbGQgPSBwYWdlcG93ZXI7Cisg
ICAgICAgIGZvciAoaW50IGk9MDtpPG5wYWdlY2VsbHM7KytpKQorICAgICAgICB7CisgICAgICAg
ICAgICBwYWdlbGlzdFtpXS5wYWdlID0gMDsKKyAgICAgICAgICAgIHBhZ2VsaXN0W2ldLnNpemUg
PSAwOworICAgICAgICB9CisgICAgfQorCit2b2lkKiBSTmV3QWxsb2NhdG9yOjpwYWdlZF9hbGxv
Y2F0ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHVuc2lnbmVkIG5ieXRlcyA9IGNlaWxpbmcoc2l6
ZSwgcGFnZXNpemUpOworICAgIGlmIChuYnl0ZXMgPCBzaXplICsgY2VsbGFsaWduKQorICAgIHsg
ICAvLyBub3QgZW5vdWdoIGV4dHJhIHNwYWNlIGZvciBoZWFkZXIgYW5kIGFsaWdubWVudCwgdHJ5
IGFuZCB1c2UgY2VsbCBsaXN0CisgICAgICAgIGZvciAocGFnZWNlbGwgKmMgPSBwYWdlbGlzdCwq
ZSA9IGMgKyBucGFnZWNlbGxzO2MgPCBlOysrYykKKyAgICAgICAgICAgIGlmIChjLT5wYWdlID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdm9pZCogcCA9IG1hcCgwLCBuYnl0
ZXMpOworICAgICAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICAgICAgYy0+cGFnZSA9IHA7CisgICAgICAgICAgICAgICAgYy0+c2l6
ZSA9IG5ieXRlczsKKyAgICAgICAgICAgICAgICBpVG90YWxBbGxvY1NpemUgKz0gbmJ5dGVzOwor
ICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgfQorICAgIH0KKyAgICAvLyB1
c2UgYSBjZWxsIGhlYWRlcgorICAgIG5ieXRlcyA9IGNlaWxpbmcoc2l6ZSArIGNlbGxhbGlnbiwg
cGFnZXNpemUpOworICAgIHZvaWQqIHAgPSBtYXAoMCwgbmJ5dGVzKTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybiAwOworICAgICpzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KHApID0gbmJ5dGVz
OworICAgIGlUb3RhbEFsbG9jU2l6ZSArPSBuYnl0ZXM7CisgICAgcmV0dXJuIG9mZnNldChwLCBj
ZWxsYWxpZ24pOworfQorCit2b2lkKiBSTmV3QWxsb2NhdG9yOjpwYWdlZF9yZWFsbG9jYXRlKHZv
aWQqIHAsIHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYgKGxvd2JpdHMocCwgcGFnZXNpemUpID09
IDApCisgICAgeyAgIC8vIGNvbnRpbnVlIHVzaW5nIGRlc2NyaXB0b3IKKyAgICAgICAgcGFnZWNl
bGwqIGMgPSBwYWdlZF9kZXNjcmlwdG9yKHApOworICAgICAgICB1bnNpZ25lZCBuYnl0ZXMgPSBj
ZWlsaW5nKHNpemUsIHBhZ2VzaXplKTsKKyAgICAgICAgdm9pZCogbmV3cCA9IHJlbWFwKHAsIGMt
PnNpemUsIG5ieXRlcyk7CisgICAgICAgIGlmICghbmV3cCkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBjLT5wYWdlID0gbmV3cDsKKyAgICAgICAgYy0+c2l6ZSA9IG5ieXRlczsKKyAg
ICAgICAgaVRvdGFsQWxsb2NTaXplICs9IG5ieXRlcy1jLT5zaXplOworICAgICAgICByZXR1cm4g
bmV3cDsKKyAgICB9CisgICAgZWxzZQorICAgIHsgICAvLyB1c2UgYSBjZWxsIGhlYWRlcgorICAg
ICAgICBBU1NFUlQobG93Yml0cyhwLHBhZ2VzaXplKSA9PSBjZWxsYWxpZ24pOworICAgICAgICBw
ID0gb2Zmc2V0KHAsLWludChjZWxsYWxpZ24pKTsKKyAgICAgICAgdW5zaWduZWQgbmJ5dGVzID0g
Y2VpbGluZyhzaXplICsgY2VsbGFsaWduLCBwYWdlc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIG9i
eXRlcyA9ICpzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KHApOworICAgICAgICB2b2lkKiBuZXdwID0g
cmVtYXAocCwgb2J5dGVzLCBuYnl0ZXMpOworICAgICAgICBpZiAoIW5ld3ApCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgKnN0YXRpY19jYXN0PHVuc2lnbmVkKj4obmV3cCkgPSBuYnl0
ZXM7CisgICAgICAgIGlUb3RhbEFsbG9jU2l6ZSArPSBuYnl0ZXMtb2J5dGVzOworICAgICAgICBy
ZXR1cm4gb2Zmc2V0KG5ld3AsIGNlbGxhbGlnbik7CisgICAgfQorfQorCit2b2lkIFJOZXdBbGxv
Y2F0b3I6OnBhZ2VkX2ZyZWUodm9pZCogcCkKK3sKKyAgICBpZiAobG93Yml0cyhwLHBhZ2VzaXpl
KSA9PSAwKQorICAgIHsgICAvLyBjaGVjayBwYWdlbGlzdAorICAgICAgICBwYWdlY2VsbCogYyA9
IHBhZ2VkX2Rlc2NyaXB0b3IocCk7CisKKyAgICAgICAgaVRvdGFsQWxsb2NTaXplIC09IGMtPnNp
emU7CisKKyAgICAgICAgdW5tYXAocCwgYy0+c2l6ZSk7CisgICAgICAgIGMtPnBhZ2UgPSAwOwor
ICAgICAgICBjLT5zaXplID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsgICAvLyBjaGVjayBw
YWdlIGhlYWRlcgorICAgICAgICB1bnNpZ25lZCogcGFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Kj4ob2Zmc2V0KHAsLWludChjZWxsYWxpZ24pKSk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSAq
cGFnZTsKKworICAgICAgICBpVG90YWxBbGxvY1NpemUgLT0gc2l6ZTsKKworICAgICAgICB1bm1h
cChwYWdlLHNpemUpOworICAgIH0KK30KKworcGFnZWNlbGwqIFJOZXdBbGxvY2F0b3I6OnBhZ2Vk
X2Rlc2NyaXB0b3IoY29uc3Qgdm9pZCogcCkgY29uc3QKK3sKKyAgICBBU1NFUlQobG93Yml0cyhw
LHBhZ2VzaXplKSA9PSAwKTsKKyAgICAvLyBEb3VibGUgY2FzdGluZyB0byBrZWVwIHRoZSBjb21w
aWxlciBoYXBweS4gU2VlbXMgdG8gdGhpbmsgd2UgY2FuIHRyeWluZyB0bworICAgIC8vIGNoYW5n
ZSBhIG5vbi1jb25zdCBtZW1iZXIgKHBhZ2VsaXN0KSBpbiBhIGNvbnN0IGZ1bmN0aW9uCisgICAg
cGFnZWNlbGwqIGMgPSAocGFnZWNlbGwqKSgodm9pZCopcGFnZWxpc3QpOworI2lmZGVmIF9ERUJV
RworICAgIHBhZ2VjZWxsKiBlID0gYyArIG5wYWdlY2VsbHM7CisjZW5kaWYKKyAgICBmb3IgKDs7
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGMhPWUpOworICAgICAgICBpZiAoYy0+cGFnZSA9PSBw
KQorICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgICsrYzsKKyAgICB9Cit9CisKK1JOZXdB
bGxvY2F0b3IqIFJOZXdBbGxvY2F0b3I6OkZpeGVkSGVhcChUQW55KiBhQmFzZSwgVEludCBhTWF4
TGVuZ3RoLCBUSW50IGFBbGlnbiwgVEJvb2wgYVNpbmdsZVRocmVhZCkKKy8qKgorQ3JlYXRlcyBh
IGZpeGVkIGxlbmd0aCBoZWFwIGF0IGEgc3BlY2lmaWVkIGxvY2F0aW9uLgorCitPbiBzdWNjZXNz
ZnVsIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24sIGFNYXhMZW5ndGggYnl0ZXMgYXJlIGNvbW1p
dHRlZCBieSB0aGUgY2h1bmsuCitUaGUgaGVhcCBjYW5ub3QgYmUgZXh0ZW5kZWQuCisKK0BwYXJh
bSBhQmFzZSAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGhlYXAg
aXMgdG8gYmUgY29uc3RydWN0ZWQuCitAcGFyYW0gYU1heExlbmd0aCAgICBUaGUgbGVuZ3RoIG9m
IHRoZSBoZWFwLiBJZiB0aGUgc3VwcGxpZWQgdmFsdWUgaXMgbGVzcworICAgICAgICAgICAgICAg
ICAgICAgdGhhbiBLTWluSGVhcFNpemUsIGl0IGlzIGRpc2NhcmRlZCBhbmQgdGhlIHZhbHVlIEtN
aW5IZWFwU2l6ZQorICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBpbnN0ZWFkLgorQHBhcmFt
IGFBbGlnbiAgICAgICAgVGhlIGFsaWdubWVudCBvZiBoZWFwIGNlbGxzLgorQHBhcmFtIGFTaW5n
bGVUaHJlYWQgSW5kaWNhdGVzIHdoZXRoZXIgc2luZ2xlIHRocmVhZGVkIG9yIG5vdC4KKworQHJl
dHVybiBBIHBvaW50ZXIgdG8gdGhlIG5ldyBoZWFwLCBvciBOVUxMIGlmIHRoZSBoZWFwIGNvdWxk
IG5vdCBiZSBjcmVhdGVkLgorCitAcGFuaWMgVVNFUiA1NiBpZiBhTWF4TGVuZ3RoIGlzIG5lZ2F0
aXZlLgorKi8KKy8vCisvLyBGb3JjZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGZpeGVkIG1lbW9yeS4K
Ky8vCisgICAgeworCisgICAgX19BU1NFUlRfQUxXQVlTKGFNYXhMZW5ndGg+PTAsIDo6UGFuaWMo
RVRIZWFwTWF4TGVuZ3RoTmVnYXRpdmUpKTsKKyAgICBpZiAoYU1heExlbmd0aDxLTWluSGVhcFNp
emUpCisgICAgICAgIGFNYXhMZW5ndGg9S01pbkhlYXBTaXplOworCisgICAgUk5ld0FsbG9jYXRv
ciogaCA9IG5ldyhhQmFzZSkgUk5ld0FsbG9jYXRvcihhTWF4TGVuZ3RoLCBhQWxpZ24sIGFTaW5n
bGVUaHJlYWQpOworCisgICAgaWYgKCFhU2luZ2xlVGhyZWFkKQorICAgICAgICB7CisgICAgICAg
IFRJbnQgciA9IGgtPmlMb2NrLkNyZWF0ZUxvY2FsKCk7CisgICAgICAgIGlmIChyIT1LRXJyTm9u
ZSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBoLT5pSGFuZGxlcyA9IChUSW50
KikmaC0+aUxvY2s7CisgICAgICAgIGgtPmlIYW5kbGVDb3VudCA9IDE7CisgICAgICAgIH0KKyAg
ICByZXR1cm4gaDsKKyAgICB9CisKK1JOZXdBbGxvY2F0b3IqIFJOZXdBbGxvY2F0b3I6OkNodW5r
SGVhcChjb25zdCBURGVzQyogYU5hbWUsIFRJbnQgYU1pbkxlbmd0aCwgVEludCBhTWF4TGVuZ3Ro
LCBUSW50IGFHcm93QnksIFRJbnQgYUFsaWduLCBUQm9vbCBhU2luZ2xlVGhyZWFkKQorLyoqCitD
cmVhdGVzIGEgaGVhcCBpbiBhIGxvY2FsIG9yIGdsb2JhbCBjaHVuay4KKworVGhlIGNodW5rIGhv
c3RpbmcgdGhlIGhlYXAgY2FuIGJlIGxvY2FsIG9yIGdsb2JhbC4KKworQSBsb2NhbCBjaHVuayBp
cyBvbmUgd2hpY2ggaXMgcHJpdmF0ZSB0byB0aGUgcHJvY2VzcyBjcmVhdGluZyBpdCBhbmQgaXMg
bm90CitpbnRlbmRlZCBmb3IgYWNjZXNzIGJ5IG90aGVyIHVzZXIgcHJvY2Vzc2VzLgorQSBnbG9i
YWwgY2h1bmsgaXMgb25lIHdoaWNoIGlzIHZpc2libGUgdG8gYWxsIHByb2Nlc3Nlcy4KKworVGhl
IGhvc3RpbmcgY2h1bmsgaXMgbG9jYWwsIGlmIHRoZSBwb2ludGVyIGFOYW1lIGlzIE5VTEwsIG90
aGVyd2lzZQordGhlIGhvc3RpbmcgY2h1bmsgaXMgZ2xvYmFsIGFuZCB0aGUgZGVzY3JpcHRvciAq
YU5hbWUgaXMgYXNzdW1lZCB0byBjb250YWluCit0aGUgbmFtZSB0byBiZSBhc3NpZ25lZCB0byBp
dC4KKworT3duZXJzaGlwIG9mIHRoZSBob3N0IGNodW5rIGlzIHZlc3RlZCBpbiB0aGUgY3VycmVu
dCBwcm9jZXNzLgorCitBIG1pbmltdW0gYW5kIGEgbWF4aW11bSBzaXplIGZvciB0aGUgaGVhcCBj
YW4gYmUgc3BlY2lmaWVkLiBPbiBzdWNjZXNzZnVsCityZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9u
LCB0aGUgc2l6ZSBvZiB0aGUgaGVhcCBpcyBhdCBsZWFzdCBhTWluTGVuZ3RoLgorSWYgc3Vic2Vx
dWVudCByZXF1ZXN0cyBmb3IgYWxsb2NhdGlvbiBvZiBtZW1vcnkgZnJvbSB0aGUgaGVhcCBjYW5u
b3QgYmUKK3NhdGlzZmllZCBieSBjb21wcmVzc2luZyB0aGUgaGVhcCwgdGhlIHNpemUgb2YgdGhl
IGhlYXAgaXMgZXh0ZW5kZWQgaW4KK2luY3JlbWVudHMgb2YgYUdyb3dCeSB1bnRpbCB0aGUgcmVx
dWVzdCBjYW4gYmUgc2F0aXNmaWVkLiBBdHRlbXB0cyB0byBleHRlbmQKK3RoZSBoZWFwIGNhdXNl
cyB0aGUgc2l6ZSBvZiB0aGUgaG9zdCBjaHVuayB0byBiZSBhZGp1c3RlZC4KKworTm90ZSB0aGF0
IHRoZSBzaXplIG9mIHRoZSBoZWFwIGNhbm5vdCBiZSBhZGp1c3RlZCBieSBtb3JlIHRoYW4gYU1h
eExlbmd0aC4KKworQHBhcmFtIGFOYW1lICAgICAgICAgSWYgTlVMTCwgdGhlIGZ1bmN0aW9uIGNv
bnN0cnVjdHMgYSBsb2NhbCBjaHVuayB0byBob3N0CisgICAgICAgICAgICAgICAgICAgICB0aGUg
aGVhcC4KKyAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBOVUxMLCBhIHBvaW50ZXIgdG8gYSBk
ZXNjcmlwdG9yIGNvbnRhaW5pbmcgdGhlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgIHRvIGJl
IGFzc2lnbmVkIHRvIHRoZSBnbG9iYWwgY2h1bmsgaG9zdGluZyB0aGUgaGVhcC4KK0BwYXJhbSBh
TWluTGVuZ3RoICAgIFRoZSBtaW5pbXVtIGxlbmd0aCBvZiB0aGUgaGVhcC4KK0BwYXJhbSBhTWF4
TGVuZ3RoICAgIFRoZSBtYXhpbXVtIGxlbmd0aCB0byB3aGljaCB0aGUgaGVhcCBjYW4gZ3Jvdy4K
KyAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzdXBwbGllZCB2YWx1ZSBpcyBsZXNzIHRoYW4g
S01pbkhlYXBTaXplLCB0aGVuIGl0CisgICAgICAgICAgICAgICAgICAgICBpcyBkaXNjYXJkZWQg
YW5kIHRoZSB2YWx1ZSBLTWluSGVhcFNpemUgdXNlZCBpbnN0ZWFkLgorQHBhcmFtIGFHcm93Qnkg
ICAgICAgVGhlIGluY3JlbWVudHMgdG8gdGhlIHNpemUgb2YgdGhlIGhvc3QgY2h1bmsuIElmIGEg
dmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCwg
dGhlIHZhbHVlIEtNaW5IZWFwR3Jvd0J5IGlzIHRha2VuCisgICAgICAgICAgICAgICAgICAgICBi
eSBkZWZhdWx0CitAcGFyYW0gYUFsaWduICAgICAgICBUaGUgYWxpZ25tZW50IG9mIGhlYXAgY2Vs
bHMuCitAcGFyYW0gYVNpbmdsZVRocmVhZCBJbmRpY2F0ZXMgd2hldGhlciBzaW5nbGUgdGhyZWFk
ZWQgb3Igbm90LgorCitAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbmV3IGhlYXAgb3IgTlVMTCBp
ZiB0aGUgaGVhcCBjb3VsZCBub3QgYmUgY3JlYXRlZC4KKworQHBhbmljIFVTRVIgNDEgaWYgYU1p
bkxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIHN1cHBsaWVkIHZhbHVlIG9mIGFNYXhMZW5ndGgu
CitAcGFuaWMgVVNFUiA1NSBpZiBhTWluTGVuZ3RoIGlzIG5lZ2F0aXZlLgorQHBhbmljIFVTRVIg
NTYgaWYgYU1heExlbmd0aCBpcyBuZWdhdGl2ZS4KKyovCisvLworLy8gQWxsb2NhdGUgYSBDaHVu
ayBvZiB0aGUgcmVxdWVzdGVkIHNpemUgYW5kIGZvcmNlIGNvbnN0cnVjdGlvbi4KKy8vCisgICAg
eworCisgICAgX19BU1NFUlRfQUxXQVlTKGFNaW5MZW5ndGg+PTAsIDo6UGFuaWMoRVRIZWFwTWlu
TGVuZ3RoTmVnYXRpdmUpKTsKKyAgICBfX0FTU0VSVF9BTFdBWVMoYU1heExlbmd0aD49YU1pbkxl
bmd0aCwgOjpQYW5pYyhFVEhlYXBDcmVhdGVNYXhMZXNzVGhhbk1pbikpOworICAgIGlmIChhTWF4
TGVuZ3RoPEtNaW5IZWFwU2l6ZSkKKyAgICAgICAgYU1heExlbmd0aD1LTWluSGVhcFNpemU7Cisg
ICAgUkNodW5rIGM7CisgICAgVEludCByOworICAgIGlmIChhTmFtZSkKKyAgICAgICAgciA9IGMu
Q3JlYXRlRGlzY29ubmVjdGVkR2xvYmFsKCphTmFtZSwgMCwgMCwgYU1heExlbmd0aCoyLCBhU2lu
Z2xlVGhyZWFkID8gRU93bmVyVGhyZWFkIDogRU93bmVyUHJvY2Vzcyk7CisgICAgZWxzZQorICAg
ICAgICByID0gYy5DcmVhdGVEaXNjb25uZWN0ZWRMb2NhbCgwLCAwLCBhTWF4TGVuZ3RoKjIsIGFT
aW5nbGVUaHJlYWQgPyBFT3duZXJUaHJlYWQgOiBFT3duZXJQcm9jZXNzKTsKKyAgICBpZiAociE9
S0Vyck5vbmUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUk5ld0FsbG9jYXRvciogaCA9
IENodW5rSGVhcChjLCBhTWluTGVuZ3RoLCBhR3Jvd0J5LCBhTWF4TGVuZ3RoLCBhQWxpZ24sIGFT
aW5nbGVUaHJlYWQsIFVzZXJIZWFwOjpFQ2h1bmtIZWFwRHVwbGljYXRlKTsKKyAgICBjLkNsb3Nl
KCk7CisgICAgcmV0dXJuIGg7CisgICAgfQorCitSTmV3QWxsb2NhdG9yKiBSTmV3QWxsb2NhdG9y
OjpDaHVua0hlYXAoUkNodW5rIGFDaHVuaywgVEludCBhTWluTGVuZ3RoLCBUSW50IGFHcm93Qnks
IFRJbnQgYU1heExlbmd0aCwgVEludCBhQWxpZ24sIFRCb29sIGFTaW5nbGVUaHJlYWQsIFRVaW50
MzIgYU1vZGUpCisvKioKK0NyZWF0ZXMgYSBoZWFwIGluIGFuIGV4aXN0aW5nIGNodW5rLgorCitU
aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGEgaGVhcCBpbiBh
IHVzZXIgd3JpdGFibGUgY29kZQorY2h1bmsgYXMgY3JlYXRlZCBieSBhIGNhbGwgdG8gUkNodW5r
OjpDcmVhdGVMb2NhbENvZGUoKS4KK1RoaXMgdHlwZSBvZiBoZWFwIGNhbiBiZSB1c2VkIHRvIGhv
bGQgY29kZSBmcmFnbWVudHMgZnJvbSBhIEpJVCBjb21waWxlci4KKworVGhlIG1heGltdW0gbGVu
Z3RoIHRvIHdoaWNoIHRoZSBoZWFwIGNhbiBncm93IGlzIHRoZSBzYW1lIGFzCit0aGUgbWF4aW11
bSBzaXplIG9mIHRoZSBjaHVuay4KKworQHBhcmFtIGFDaHVuayAgICAgICAgVGhlIGNodW5rIHRo
YXQgd2lsbCBob3N0IHRoZSBoZWFwLgorQHBhcmFtIGFNaW5MZW5ndGggICAgVGhlIG1pbmltdW0g
bGVuZ3RoIG9mIHRoZSBoZWFwLgorQHBhcmFtIGFHcm93QnkgICAgICAgVGhlIGluY3JlbWVudHMg
dG8gdGhlIHNpemUgb2YgdGhlIGhvc3QgY2h1bmsuCitAcGFyYW0gYU1heExlbmd0aCAgICBUaGUg
bWF4aW11bSBsZW5ndGggdG8gd2hpY2ggdGhlIGhlYXAgY2FuIGdyb3cuCitAcGFyYW0gYUFsaWdu
ICAgICAgICBUaGUgYWxpZ25tZW50IG9mIGhlYXAgY2VsbHMuCitAcGFyYW0gYVNpbmdsZVRocmVh
ZCBJbmRpY2F0ZXMgd2hldGhlciBzaW5nbGUgdGhyZWFkZWQgb3Igbm90LgorQHBhcmFtIGFNb2Rl
ICAgICAgICAgRmxhZ3MgY29udHJvbGxpbmcgdGhlIHJlYWxsb2NhdGlvbi4gVGhlIG9ubHkgYml0
IHdoaWNoIGhhcyBhbnkKKyAgICAgICAgICAgICAgICAgICAgIGVmZmVjdCBvbiByZWFsbG9jYXRp
b24gaXMgdGhhdCBkZWZpbmVkIGJ5IHRoZSBlbnVtZXJhdGlvbgorICAgICAgICAgICAgICAgICAg
ICAgRU5ldmVyTW92ZSBvZiB0aGUgZW51bSBSQWxsb2NhdG9yOjpUUmVBbGxvY01vZGUuCisgICAg
ICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHNldCwgdGhlbiBhbnkgc3VjY2Vzc2Z1bCByZWFs
bG9jYXRpb24gZ3VhcmFudGVlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgIHRvIGhhdmUgY2hh
bmdlZCB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgY2VsbC4KKyAgICAgICAgICAgICAgICAgICAg
IEJ5IGRlZmF1bHQsIHRoaXMgcGFyYW1ldGVyIGlzIHplcm8uCisKK0ByZXR1cm4gQSBwb2ludGVy
IHRvIHRoZSBuZXcgaGVhcCBvciBOVUxMIGlmIHRoZSBoZWFwIGNvdWxkIG5vdCBiZSBjcmVhdGVk
LgorKi8KKy8vCisvLyBDb25zdHJ1Y3QgYSBoZWFwIGluIGFuIGFscmVhZHkgZXhpc3RpbmcgY2h1
bmsKKy8vCisgICAgeworCisgICAgcmV0dXJuIE9mZnNldENodW5rSGVhcChhQ2h1bmssIGFNaW5M
ZW5ndGgsIDAsIGFHcm93QnksIGFNYXhMZW5ndGgsIGFBbGlnbiwgYVNpbmdsZVRocmVhZCwgYU1v
ZGUpOworICAgIH0KKworUk5ld0FsbG9jYXRvciogUk5ld0FsbG9jYXRvcjo6T2Zmc2V0Q2h1bmtI
ZWFwKFJDaHVuayBhQ2h1bmssIFRJbnQgYU1pbkxlbmd0aCwgVEludCBhT2Zmc2V0LCBUSW50IGFH
cm93QnksIFRJbnQgYU1heExlbmd0aCwgVEludCBhQWxpZ24sIFRCb29sIGFTaW5nbGVUaHJlYWQs
IFRVaW50MzIgYU1vZGUpCisvKioKK0NyZWF0ZXMgYSBoZWFwIGluIGFuIGV4aXN0aW5nIGNodW5r
LCBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaHVuay4KKworVGhpcyBmdW5jdGlv
biBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSBhIGhlYXAgd2hlcmUgYSBmaXhlZCBh
bW91bnQgb2YKK2FkZGl0aW9uYWwgZGF0YSBtdXN0IGJlIHN0b3JlZCBhdCBhIGtub3duIGxvY2F0
aW9uLiBUaGUgYWRkaXRpb25hbCBkYXRhIGNhbiBiZQorcGxhY2VkIGF0IHRoZSBiYXNlIGFkZHJl
c3Mgb2YgdGhlIGNodW5rLCBhbGxvd2luZyBpdCB0byBiZSBsb2NhdGVkIHdpdGhvdXQKK2RlcGVu
ZGluZyBvbiB0aGUgaW50ZXJuYWxzIG9mIHRoZSBoZWFwIHN0cnVjdHVyZS4KKworVGhlIG1heGlt
dW0gbGVuZ3RoIHRvIHdoaWNoIHRoZSBoZWFwIGNhbiBncm93IGlzIHRoZSBtYXhpbXVtIHNpemUg
b2YgdGhlIGNodW5rLAorbWludXMgdGhlIG9mZnNldC4KKworQHBhcmFtIGFDaHVuayAgICAgICAg
VGhlIGNodW5rIHRoYXQgd2lsbCBob3N0IHRoZSBoZWFwLgorQHBhcmFtIGFNaW5MZW5ndGggICAg
VGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBoZWFwLgorQHBhcmFtIGFPZmZzZXQgICAgICAgVGhl
IG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY2h1bmssIHRvIHRoZSBzdGFydCBvZiB0aGUg
aGVhcC4KK0BwYXJhbSBhR3Jvd0J5ICAgICAgIFRoZSBpbmNyZW1lbnRzIHRvIHRoZSBzaXplIG9m
IHRoZSBob3N0IGNodW5rLgorQHBhcmFtIGFNYXhMZW5ndGggICAgVGhlIG1heGltdW0gbGVuZ3Ro
IHRvIHdoaWNoIHRoZSBoZWFwIGNhbiBncm93LgorQHBhcmFtIGFBbGlnbiAgICAgICAgVGhlIGFs
aWdubWVudCBvZiBoZWFwIGNlbGxzLgorQHBhcmFtIGFTaW5nbGVUaHJlYWQgSW5kaWNhdGVzIHdo
ZXRoZXIgc2luZ2xlIHRocmVhZGVkIG9yIG5vdC4KK0BwYXJhbSBhTW9kZSAgICAgICAgIEZsYWdz
IGNvbnRyb2xsaW5nIHRoZSByZWFsbG9jYXRpb24uIFRoZSBvbmx5IGJpdCB3aGljaCBoYXMgYW55
CisgICAgICAgICAgICAgICAgICAgICBlZmZlY3Qgb24gcmVhbGxvY2F0aW9uIGlzIHRoYXQgZGVm
aW5lZCBieSB0aGUgZW51bWVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgIEVOZXZlck1vdmUg
b2YgdGhlIGVudW0gUkFsbG9jYXRvcjo6VFJlQWxsb2NNb2RlLgorICAgICAgICAgICAgICAgICAg
ICAgSWYgdGhpcyBpcyBzZXQsIHRoZW4gYW55IHN1Y2Nlc3NmdWwgcmVhbGxvY2F0aW9uIGd1YXJh
bnRlZXMgbm90CisgICAgICAgICAgICAgICAgICAgICB0byBoYXZlIGNoYW5nZWQgdGhlIHN0YXJ0
IGFkZHJlc3Mgb2YgdGhlIGNlbGwuCisgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0
aGlzIHBhcmFtZXRlciBpcyB6ZXJvLgorCitAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbmV3IGhl
YXAgb3IgTlVMTCBpZiB0aGUgaGVhcCBjb3VsZCBub3QgYmUgY3JlYXRlZC4KKyovCisvLworLy8g
Q29uc3RydWN0IGEgaGVhcCBpbiBhbiBhbHJlYWR5IGV4aXN0aW5nIGNodW5rCisvLworICAgIHsK
KworICAgIFRJbnQgcGFnZV9zaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIGlmICghYUFs
aWduKQorICAgICAgICBhQWxpZ24gPSBSTmV3QWxsb2NhdG9yOjpFQ2VsbEFsaWdubWVudDsKKyAg
ICBUSW50IG1heExlbmd0aCA9IGFDaHVuay5NYXhTaXplKCk7CisgICAgVEludCByb3VuZF91cCA9
IE1heChhQWxpZ24sIHBhZ2Vfc2l6ZSk7CisgICAgVEludCBtaW5fY2VsbCA9IF9BTElHTl9VUChN
YXgoKFRJbnQpUk5ld0FsbG9jYXRvcjo6RUFsbG9jQ2VsbFNpemUsIChUSW50KVJOZXdBbGxvY2F0
b3I6OkVGcmVlQ2VsbFNpemUpLCBhQWxpZ24pOworICAgIGFPZmZzZXQgPSBfQUxJR05fVVAoYU9m
ZnNldCwgOCk7CisKKyNpZmRlZiBOT19SRVNFUlZFX01FTU9SWQorI2lmZGVmIFRSQUNJTkdfSEVB
UFMKKyAgICBUS05hbWUgY2h1bmtfbmFtZTsKKyAgICBhQ2h1bmsuRnVsbE5hbWUoY2h1bmtfbmFt
ZSk7CisgICAgQlRyYWNlQ29udGV4dEJpZyhCVHJhY2U6OkVUZXN0MSwgMHhGLCAweEZGLCBjaHVu
a19uYW1lLlB0cigpLCBjaHVua19uYW1lLlNpemUoKSk7CisKKyAgICBUVWludDMyIHRyYWNlRGF0
YVs0XTsKKyAgICB0cmFjZURhdGFbMF0gPSBhQ2h1bmsuSGFuZGxlKCk7CisgICAgdHJhY2VEYXRh
WzFdID0gYU1pbkxlbmd0aDsKKyAgICB0cmFjZURhdGFbMl0gPSBhTWF4TGVuZ3RoOworICAgIHRy
YWNlRGF0YVszXSA9IGFBbGlnbjsKKyAgICBCVHJhY2VDb250ZXh0TihCVHJhY2U6OkVUZXN0MSwg
MHhFLCAweEVFLCAweEVFLCB0cmFjZURhdGEsIHNpemVvZih0cmFjZURhdGEpKTsKKyNlbmRpZgor
ICAgIC8vbW9kaWZ5aW5nIHRoZSBhTWluTGVuZ3RoIGJlY2F1c2Ugbm90IGFsbCBtZW1vcnkgaXMg
dGhlIHNhbWUgaW4gdGhlIG5ldyBhbGxvY2F0b3IuIFNvIGl0IGNhbm5vdCByZXNlcnZlIGl0IHBy
b3Blcmx5CisgICAgaWYgKCBhTWluTGVuZ3RoPGFNYXhMZW5ndGgpCisgICAgICAgIGFNaW5MZW5n
dGggPSAwOworI2VuZGlmCisKKyAgICBpZiAoYU1heExlbmd0aCAmJiBhTWF4TGVuZ3RoK2FPZmZz
ZXQ8bWF4TGVuZ3RoKQorICAgICAgICBtYXhMZW5ndGggPSBfQUxJR05fVVAoYU1heExlbmd0aCth
T2Zmc2V0LCByb3VuZF91cCk7CisgICAgX19BU1NFUlRfQUxXQVlTKGFNaW5MZW5ndGg+PTAsIDo6
UGFuaWMoRVRIZWFwTWluTGVuZ3RoTmVnYXRpdmUpKTsKKyAgICBfX0FTU0VSVF9BTFdBWVMobWF4
TGVuZ3RoPj1hTWluTGVuZ3RoLCA6OlBhbmljKEVUSGVhcENyZWF0ZU1heExlc3NUaGFuTWluKSk7
CisgICAgYU1pbkxlbmd0aCA9IF9BTElHTl9VUChNYXgoYU1pbkxlbmd0aCwgKFRJbnQpc2l6ZW9m
KFJOZXdBbGxvY2F0b3IpICsgbWluX2NlbGwpICsgYU9mZnNldCwgcm91bmRfdXApOworCisgICAg
Ly8gdGhlIG5ldyBhbGxvY2F0b3IgdXNlcyBhIGRpc2Nvbm5lY3RlZCBjaHVuayBzbyBtdXN0IGNv
bW1pdCB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uCisgICAgLy8gd2l0aCBDb21taXQoKSBpbnN0ZWFk
IG9mIEFkanVzdCgpCisgICAgLy8gIFRJbnQgcj1hQ2h1bmsuQWRqdXN0KGFNaW5MZW5ndGgpOwor
ICAgIC8vVEludCByID0gYUNodW5rLkNvbW1pdChhT2Zmc2V0LCBhTWluTGVuZ3RoKTsKKworICAg
IGFPZmZzZXQgPSBtYXhMZW5ndGg7CisgICAgLy9USW50IE1PUkVfQ09SRV9PRkZTRVQgPSBtYXhM
ZW5ndGgvMjsKKyAgICAvL1RJbnQgciA9IGFDaHVuay5Db21taXQoTU9SRV9DT1JFX09GRlNFVCwg
YU1pbkxlbmd0aCk7CisgICAgVEludCByID0gYUNodW5rLkNvbW1pdChhT2Zmc2V0LCBhTWluTGVu
Z3RoKTsKKworICAgIGlmIChyIT1LRXJyTm9uZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg
ICBSTmV3QWxsb2NhdG9yKiBoID0gbmV3IChhQ2h1bmsuQmFzZSgpICsgYU9mZnNldCkgUk5ld0Fs
bG9jYXRvcihhQ2h1bmsuSGFuZGxlKCksIGFPZmZzZXQsIGFNaW5MZW5ndGgsIG1heExlbmd0aCwg
YUdyb3dCeSwgYUFsaWduLCBhU2luZ2xlVGhyZWFkKTsKKyAgICAvL1JOZXdBbGxvY2F0b3IqIGgg
PSBuZXcgKGFDaHVuay5CYXNlKCkgKyBNT1JFX0NPUkVfT0ZGU0VUKSBSTmV3QWxsb2NhdG9yKGFD
aHVuay5IYW5kbGUoKSwgYU9mZnNldCwgYU1pbkxlbmd0aCwgbWF4TGVuZ3RoLCBhR3Jvd0J5LCBh
QWxpZ24sIGFTaW5nbGVUaHJlYWQpOworCisgICAgVEJvb2wgZHVwbGljYXRlTG9jayA9IEVGYWxz
ZTsKKyAgICBpZiAoIWFTaW5nbGVUaHJlYWQpCisgICAgICAgIHsKKyAgICAgICAgZHVwbGljYXRl
TG9jayA9IGFNb2RlICYgVXNlckhlYXA6OkVDaHVua0hlYXBTd2l0Y2hUbzsKKyAgICAgICAgaWYg
KGgtPmlMb2NrLkNyZWF0ZUxvY2FsKGR1cGxpY2F0ZUxvY2sgPyBFT3duZXJUaHJlYWQgOiBFT3du
ZXJQcm9jZXNzKSE9S0Vyck5vbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBoLT5pQ2h1
bmtIYW5kbGUgPSAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgIGlmIChhTW9kZSAmIFVzZXJIZWFwOjpFQ2h1bmtIZWFwU3dpdGNoVG8p
CisgICAgICAgIFVzZXI6OlN3aXRjaEhlYXAoaCk7CisKKyAgICBoLT5pSGFuZGxlcyA9ICZoLT5p
Q2h1bmtIYW5kbGU7CisgICAgaWYgKCFhU2luZ2xlVGhyZWFkKQorICAgICAgICB7CisgICAgICAg
IC8vIG5vdyBjaGFuZ2UgdGhlIHRocmVhZC1yZWxhdGl2ZSBjaHVuay9zZW1hcGhvcmUgaGFuZGxl
cyBpbnRvIHByb2Nlc3MtcmVsYXRpdmUgaGFuZGxlcworICAgICAgICBoLT5pSGFuZGxlQ291bnQg
PSAyOworICAgICAgICBpZiAoZHVwbGljYXRlTG9jaykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIFJIYW5kbGVCYXNlIHMgPSBoLT5pTG9jazsKKyAgICAgICAgICAgIHIgPSBoLT5pTG9jay5E
dXBsaWNhdGUoUlRocmVhZCgpKTsKKyAgICAgICAgICAgIHMuQ2xvc2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKHI9PUtFcnJOb25lICYmIChhTW9kZSAmIFVzZXJIZWFwOjpFQ2h1bmtI
ZWFwRHVwbGljYXRlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHIgPSAoKFJDaHVuayop
JmgtPmlDaHVua0hhbmRsZSktPkR1cGxpY2F0ZShSVGhyZWFkKCkpOworICAgICAgICAgICAgaWYg
KHIhPUtFcnJOb25lKQorICAgICAgICAgICAgICAgIGgtPmlMb2NrLkNsb3NlKCksIGgtPmlDaHVu
a0hhbmRsZT0wOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgIGgtPmlIYW5kbGVDb3VudCA9IDE7CisgICAgICAgIGlmIChhTW9kZSAmIFVzZXJI
ZWFwOjpFQ2h1bmtIZWFwRHVwbGljYXRlKQorICAgICAgICAgICAgciA9ICgoUkNodW5rKikmaC0+
aUNodW5rSGFuZGxlKS0+RHVwbGljYXRlKFJUaHJlYWQoKSwgRU93bmVyVGhyZWFkKTsKKyAgICAg
ICAgfQorCisgICAgLy8gcmV0dXJuIHRoZSBoZWFwIGFkZHJlc3MKKyAgICByZXR1cm4gKHI9PUtF
cnJOb25lKSA/IGggOiBOVUxMOworICAgIH0KKworICAgIC8qIE9ubHkgZm9yIGRlYnVnZ2luZyBw
dXJwb3NlIC0gc3RhcnQqLworI2lmZGVmIERMX0NIVU5LX01FTV9ERUJVRwordm9pZCBSTmV3QWxs
b2NhdG9yOjpkZWJ1Z19jaGVja19zbWFsbF9jaHVua19hY2Nlc3MobWNodW5rcHRyIHAsIHNpemVf
dCBwc2l6ZSkKK3sKKyAgICBzaXplX3Qgc3ogPSBjaHVua3NpemUocCk7CisgICAgY2hhciBjaCA9
ICooKGNoYXIqKWNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplLTEpKTsKK30KKwordm9pZCBSTmV3
QWxsb2NhdG9yOjpkZWJ1Z19jaGVja19hbnlfY2h1bmtfYWNjZXNzKG1jaHVua3B0ciBwLCBzaXpl
X3QgcHNpemUpCit7CisgICAgaWYgKHA9PTAgfHwgcHNpemU9PTApIHJldHVybjsKKworICAgIG1j
aHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgIGNoYXIqIHQg
PSAoY2hhciopY2h1bmtfcGx1c19vZmZzZXQocCwgbXBhcmFtcy5wYWdlX3NpemUpOworICAgIGNo
YXIgY2ggPSAqKChjaGFyKilwKTsKKyAgICB3aGlsZSAoKHNpemVfdCl0PChzaXplX3QpbmV4dCkK
KyAgICB7CisgICAgICAgIGNoID0gKnQ7CisgICAgICAgIHQgPSAoY2hhciopY2h1bmtfcGx1c19v
ZmZzZXQodCwgbXBhcmFtcy5wYWdlX3NpemUpOworICAgIH07Cit9CisKK3ZvaWQgUk5ld0FsbG9j
YXRvcjo6ZGVidWdfY2hlY2tfbGFyZ2VfY2h1bmtfYWNjZXNzKHRjaHVua3B0ciBwLCBzaXplX3Qg
cHNpemUpCit7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6
ZSk7CisgICAgY2hhciogdCA9IChjaGFyKiljaHVua19wbHVzX29mZnNldChwLCBtcGFyYW1zLnBh
Z2Vfc2l6ZSk7CisgICAgY2hhciBjaCA9ICooKGNoYXIqKXApOworICAgIHdoaWxlICgoc2l6ZV90
KXQ8KHNpemVfdCluZXh0KQorICAgIHsKKyAgICAgICAgY2ggPSAqdDsKKyAgICAgICAgdCA9IChj
aGFyKiljaHVua19wbHVzX29mZnNldCh0LCBtcGFyYW1zLnBhZ2Vfc2l6ZSk7CisgICAgfTsKK30K
Kwordm9pZCBSTmV3QWxsb2NhdG9yOjpkZWJ1Z19jaHVua19wYWdlX3JlbGVhc2VfY2hlY2sobWNo
dW5rcHRyIHAsIHNpemVfdCBwc2l6ZSwgbXN0YXRlIGZtLCBpbnQgbWVtX3JlbGVhc2VkKQorewor
ICAgIGlmIChtZW1fcmVsZWFzZWQpCisgICAgeworICAgICAgICBpZiAoIXBhZ2Vfbm90X2luX21l
bW9yeShwLCBwc2l6ZSkgKQorICAgICAgICAgICAgTUVNX0xPRygiQ0hVTktfUEFHRV9FUlJPUjo6
ZGxmcmVlLCBlcnJvciAtIHBhZ2VfaW5fbWVtIGZsYWcgaXMgY29ycnVwdCIpOworICAgICAgICBp
ZiAoY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpID4gZm0tPnRvcCkKKyAgICAgICAgICAgIE1F
TV9MT0coIkNIVU5LX1BBR0VfRVJST1I6IGVycm9yIFRvcCBjaHVuayBhZGRyZXNzIGludmFsaWQi
KTsKKyAgICAgICAgaWYgKGZtLT5kdiA+PSBwICYmIGZtLT5kdiA8IGNodW5rX3BsdXNfb2Zmc2V0
KHAsIHBzaXplKSkKKyAgICAgICAgICAgIE1FTV9MT0coIkNIVU5LX1BBR0VfRVJST1I6IGVycm9y
IERWIGNodW5rIGFkZHJlc3MgaW52YWxpZCIpOworICAgIH0KK30KKyNlbmRpZgorCisjaWZkZWYg
T09NX0xPR0dJTkcKKyNpbmNsdWRlIDxoYWwuaD4KK3ZvaWQgUk5ld0FsbG9jYXRvcjo6ZHVtcF9s
YXJnZV9jaHVuayhtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKKyAgICB0Y2h1bmtwdHIgdSA9IHQ7
CisgICAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7CisgICAgc2l6ZV90IHRzaXplID0gY2h1
bmtzaXplKHQpOworICAgIGJpbmRleF90IGlkeDsKKyAgICBjb21wdXRlX3RyZWVfaW5kZXgodHNp
emUsIGlkeCk7CisKKyAgICBzaXplX3QgZnJlZSA9IDA7CisgICAgaW50IG5mcmVlID0gMDsKKyAg
ICBkbworICAgICAgICB7ICAgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVk
IG5vZGVzICovCisgICAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgZHVtcF9sYXJnZV9jaHVuayhtLCB1LT5jaGlsZFswXSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHUtPmNoaWxkWzFdICE9IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICBkdW1wX2xhcmdlX2NodW5rKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBmcmVlICs9IGNodW5rc2l6ZSh1KTsKKyAgICAgICAgbmZyZWUrKzsKKyAgICAg
ICAgdSA9IHUtPmZkOworICAgICAgICB9CisgICAgd2hpbGUgKHUgIT0gdCk7CisgICAgQ19MT0dG
KF9MOCgiTEFSR0VfQklOLCVkLCVkLCVkIiksIHRzaXplLCBmcmVlLCBuZnJlZSk7Cit9CisKK3Zv
aWQgUk5ld0FsbG9jYXRvcjo6ZHVtcF9kbF9mcmVlX2NodW5rcygpCit7CisgICAgQ19MT0coIiIp
OworICAgIENfTE9HKCItLS0tLS0tLS0tLS0gZHVtcF9kbF9mcmVlX2NodW5rcyBzdGFydCAtLS0t
LS0tLS0tLS0tIik7CisgICAgQ19MT0coIkJpblR5cGUsQmluU2l6ZSxGcmVlU2l6ZSxGcmVlQ291
bnQiKTsKKworICAgIC8vIGR1bXAgc21hbGwgYmlucworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TlNNQUxMQklOUzsgKytpKQorICAgICAgICB7CisgICAgICAgIHNiaW5wdHIgYiA9IHNtYWxsYmlu
X2F0KGdtLCBpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVtcHR5ID0gKGdtLT5zbWFsbG1hcCAm
ICgxIDw8IGkpKSA9PSAwOworICAgICAgICBpbnQgbmZyZWUgPSAwOworICAgICAgICBpZiAoIWVt
cHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IG5mcmVlID0gMDsKKyAgICAgICAg
ICAgIHNpemVfdCBmcmVlID0gMDsKKyAgICAgICAgICAgIG1jaHVua3B0ciBwID0gYi0+Yms7Cisg
ICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgICAgIGZvciAo
OyBwICE9IGI7IHAgPSBwLT5iaykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZnJlZSArPSBjaHVua3NpemUocCk7CisgICAgICAgICAgICAgICAgbmZyZWUrKzsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIENfTE9HRihfTDgoIlNNQUxMX0JJTiwlZCwlZCwlZCIp
LCBzaXplLCBmcmVlLCBuZnJlZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIC8v
IGR1bXAgbGFyZ2UgYmlucworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kp
CisgICAgICAgIHsKKyAgICAgICAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KGdtLCBpKTsKKyAg
ICAgICAgdGNodW5rcHRyIHQgPSAqdGI7CisgICAgICAgIGludCBlbXB0eSA9IChnbS0+dHJlZW1h
cCAmICgxIDw8IGkpKSA9PSAwOworICAgICAgICBpZiAoIWVtcHR5KQorICAgICAgICAgICAgZHVt
cF9sYXJnZV9jaHVuayhnbSwgdCk7CisgICAgICAgIH0KKworICAgIENfTE9HKCItLS0tLS0tLS0t
LS0gZHVtcF9kbF9mcmVlX2NodW5rcyBlbmQgLS0tLS0tLS0tLS0tLSIpOworICAgIENfTE9HKCIi
KTsKKyAgICB9CisKK3ZvaWQgUk5ld0FsbG9jYXRvcjo6ZHVtcF9oZWFwX2xvZ3Moc2l6ZV90IGZh
aWxfc2l6ZSkKK3sKKyAgICBNRU1fTE9HKCIiKTsKKyAgICBpZiAoZmFpbF9zaXplKSB7CisgICAg
ICAgIE1FTV9MT0coIk1FTURFQlVHOjpSU3ltYmlhbkRMSGVhcCBPT00gTG9nIGR1bXAgKioqKioq
KioqKioqKioqIHN0YXJ0Iik7CisgICAgICAgIE1FTV9MT0dGKF9MOCgiRmFpbGluZyB0byBhbGxv
YyBzaXplOiAlZCIpLCBmYWlsX3NpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIE1FTV9M
T0coIk1FTURFQlVHOjpSU3ltYmlhbkRMSGVhcCBMb2cgZHVtcCAqKioqKioqKioqKioqKiogc3Rh
cnQiKTsKKworICAgIFRJbnQgZGxfY2h1bmtfc2l6ZSA9IHB0cmRpZmYoaVRvcCxpQmFzZSk7Cisg
ICAgVEludCBzbGFicF9jaHVua19zaXplID0gaUNodW5rU2l6ZSArIGlVbm1hcHBlZENodW5rU2l6
ZSAtIGRsX2NodW5rX3NpemU7CisgICAgVEludCBmcmVlTWVtID0gMDsKKyAgICBIQUw6OkdldChI
QUxEYXRhOjpFTWVtb3J5UkFNRnJlZSwgZnJlZU1lbSk7CisgICAgTUVNX0xPR0YoX0w4KCJTeXN0
ZW0gRnJlZSBSQU0gU2l6ZTogJWQiKSwgZnJlZU1lbSk7CisgICAgTUVNX0xPR0YoX0w4KCJBbGxv
Y2F0b3IgQ29tbWl0ZWQgQ2h1bmsgU2l6ZTogJWQiKSwgaUNodW5rU2l6ZSk7CisgICAgTUVNX0xP
R0YoX0w4KCJETEhlYXAgQXJlbmEgU2l6ZT0lZCIpLCBkbF9jaHVua19zaXplKTsKKyAgICBNRU1f
TE9HRihfTDgoIkRMSGVhcCB1bm1hcHBlZCBjaHVuayBzaXplOiAlZCIpLCBpVW5tYXBwZWRDaHVu
a1NpemUpOworICAgIE1FTV9MT0dGKF9MOCgiU2xhYi1QYWdlIEFsbG9jYXRvciBDaHVuayBTaXpl
PSVkIiksIHNsYWJwX2NodW5rX3NpemUpOworCisgICAgbWFsbGluZm8gaW5mbyA9IGRsbWFsbGlu
Zm8oKTsKKyAgICBUVWludCBoZWFwQWxsb2MgPSBpbmZvLnVvcmRibGtzOworICAgIFRVaW50IGhl
YXBGcmVlID0gaW5mby5mb3JkYmxrczsKKyAgICBNRU1fTE9HRihfTDgoIkRMSGVhcCBhbGxvY2F0
ZWQgc2l6ZTogJWQiKSwgaGVhcEFsbG9jKTsKKyAgICBNRU1fTE9HRihfTDgoIkRMSGVhcCBmcmVl
IHNpemU6ICVkIiksIGhlYXBGcmVlKTsKKworICAgIGlmIChmYWlsX3NpemUpIHsKKyAgICAgICAg
TUVNX0xPRygiTUVNREVCVUc6OlJTeW1iaWFuRExIZWFwIE9PTSBMb2cgZHVtcCAqKioqKioqKioq
KioqKiogZW5kIik7CisgICAgfWVsc2UgeworICAgICAgICBNRU1fTE9HKCJNRU1ERUJVRzo6UlN5
bWJpYW5ETEhlYXAgTG9nIGR1bXAgKioqKioqKioqKioqKioqIGVuZCIpOworICAgIH0KKyAgICBN
RU1fTE9HKCIiKTsKK30KKworI2VuZGlmCisvKiBPbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZSAt
IGVuZCovCisKKworI2RlZmluZSBVc2VyVGVzdERlYnVnTWFza0JpdChiaXQpIChUQm9vbCkoVXNl
clN2cjo6RGVidWdNYXNrKGJpdD4+NSkgJiAoMTw8KGJpdCYzMSkpKQorCisjaWZuZGVmIE5PX05B
TUVEX0xPQ0FMX0NIVU5LUworLy90aGlzIGNsYXNzIHJlcXVpcmVzIFN5bWJpYW5eMyBmb3IgRWxv
Y2FsTmFtZWQKKworLy8gSGFjayB0byBnZXQgYWNjZXNzIHRvIFRDaHVua0NyZWF0ZUluZm8gaW50
ZXJuYWxzIG91dHNpZGUgb2YgdGhlIGtlcm5lbAorY2xhc3MgVEZha2VDaHVua0NyZWF0ZUluZm86
IHB1YmxpYyBUQ2h1bmtDcmVhdGVJbmZvCisgICAgeworcHVibGljOgorICAgICB2b2lkIFNldFRo
cmVhZE5ld0FsbG9jYXRvcihUSW50IGFJbml0aWFsU2l6ZSwgVEludCBhTWF4U2l6ZSwgY29uc3Qg
VERlc0MmIGFOYW1lKQorICAgICAgICB7CisgICAgICAgIGlUeXBlID0gVENodW5rQ3JlYXRlOjpF
Tm9ybWFsIHwgVENodW5rQ3JlYXRlOjpFRGlzY29ubmVjdGVkIHwgVENodW5rQ3JlYXRlOjpFRGF0
YTsKKyAgICAgICAgaU1heFNpemUgPSBhTWF4U2l6ZSAqIDI7CisKKyAgICAgICAgaUluaXRpYWxC
b3R0b20gPSAwOworICAgICAgICBpSW5pdGlhbFRvcCA9IGFJbml0aWFsU2l6ZTsKKyAgICAgICAg
aUF0dHJpYnV0ZXMgPSBUQ2h1bmtDcmVhdGU6OkVMb2NhbE5hbWVkOworICAgICAgICBpTmFtZSA9
ICZhTmFtZTsKKyAgICAgICAgaU93bmVyVHlwZSA9IEVPd25lclRocmVhZDsKKyAgICAgICAgfQor
ICAgIH07CisjZW5kaWYKKworI2lmbmRlZiBOT19OQU1FRF9MT0NBTF9DSFVOS1MKK19MSVQoS0xp
dERvbGxhckhlYXAsIiRIRUFQIik7CisjZW5kaWYKK1RJbnQgUk5ld0FsbG9jYXRvcjo6Q3JlYXRl
VGhyZWFkSGVhcChTU3RkRXBvY1RocmVhZENyZWF0ZUluZm8mIGFJbmZvLCBSTmV3QWxsb2NhdG9y
KiYgYUhlYXAsIFRJbnQgYUFsaWduLCBUQm9vbCBhU2luZ2xlVGhyZWFkKQorLyoqCitAaW50ZXJu
YWxDb21wb25lbnQKKyovCisvLworLy8gQ3JlYXRlIGEgdXNlci1zaWRlIGhlYXAKKy8vCisgICAg
eworICAgIFRJbnQgcGFnZV9zaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIFRJbnQgbWlu
TGVuZ3RoID0gX0FMSUdOX1VQKGFJbmZvLmlIZWFwSW5pdGlhbFNpemUsIHBhZ2Vfc2l6ZSk7Cisg
ICAgVEludCBtYXhMZW5ndGggPSBNYXgoYUluZm8uaUhlYXBNYXhTaXplLCBtaW5MZW5ndGgpOwor
I2lmZGVmIFRSQUNJTkdfQUxMT0NTCisgICAgaWYgKFVzZXJUZXN0RGVidWdNYXNrQml0KDk2KSkg
Ly8gOTYgPT0gS1VTRVJIRUFQVFJBQ0UgaW4gbmtfdHJhY2UuaAorICAgICAgICBhSW5mby5pRmxh
Z3MgfD0gRVRyYWNlSGVhcEFsbG9jczsKKyNlbmRpZgorICAgIC8vIENyZWF0ZSB0aGUgdGhyZWFk
J3MgaGVhcCBjaHVuay4KKyAgICBSQ2h1bmsgYzsKKyNpZm5kZWYgTk9fTkFNRURfTE9DQUxfQ0hV
TktTCisgICAgVEZha2VDaHVua0NyZWF0ZUluZm8gY3JlYXRlSW5mbzsKKyAgICBjcmVhdGVJbmZv
LlNldFRocmVhZE5ld0FsbG9jYXRvcigwLCBtYXhMZW5ndGgsIEtMaXREb2xsYXJIZWFwKCkpOyAg
IC8vIEluaXRpYWxpc2Ugd2l0aCBubyBtZW1vcnkgY29tbWl0dGVkLgorICAgIFRJbnQgciA9IGMu
Q3JlYXRlKGNyZWF0ZUluZm8pOworI2Vsc2UKKyAgICBUSW50IHIgPSBjLkNyZWF0ZURpc2Nvbm5l
Y3RlZExvY2FsKDAsIDAsIG1heExlbmd0aCAqIDIpOworI2VuZGlmCisgICAgaWYgKHIhPUtFcnJO
b25lKQorICAgICAgICByZXR1cm4gcjsKKyAgICBhSGVhcCA9IENodW5rSGVhcChjLCBtaW5MZW5n
dGgsIHBhZ2Vfc2l6ZSwgbWF4TGVuZ3RoLCBhQWxpZ24sIGFTaW5nbGVUaHJlYWQsIFVzZXJIZWFw
OjpFQ2h1bmtIZWFwU3dpdGNoVG98VXNlckhlYXA6OkVDaHVua0hlYXBEdXBsaWNhdGUpOworICAg
IGMuQ2xvc2UoKTsKKyAgICBpZiAoIWFIZWFwKQorICAgICAgICByZXR1cm4gS0Vyck5vTWVtb3J5
OworI2lmZGVmIFRSQUNJTkdfQUxMT0NTCisgICAgaWYgKGFJbmZvLmlGbGFncyAmIEVUcmFjZUhl
YXBBbGxvY3MpCisgICAgICAgIHsKKyAgICAgICAgYUhlYXAtPmlGbGFncyB8PSBSQWxsb2NhdG9y
OjpFVHJhY2VBbGxvY3M7CisgICAgICAgIEJUcmFjZUNvbnRleHQ4KEJUcmFjZTo6RUhlYXAsIEJU
cmFjZTo6RUhlYXBDcmVhdGUsKFRVaW50MzIpYUhlYXAsIFJOZXdBbGxvY2F0b3I6OkVBbGxvY0Nl
bGxTaXplKTsKKyAgICAgICAgVEludCBoYW5kbGUgPSBhSGVhcC0+Q2h1bmtIYW5kbGUoKTsKKyAg
ICAgICAgVEludCBjaHVua0lkID0gKChSSGFuZGxlQmFzZSYpaGFuZGxlKS5CVHJhY2VJZCgpOwor
ICAgICAgICBCVHJhY2VDb250ZXh0OChCVHJhY2U6OkVIZWFwLCBCVHJhY2U6OkVIZWFwQ2h1bmtD
cmVhdGUsIChUVWludDMyKWFIZWFwLCBjaHVua0lkKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
cmV0dXJuIEtFcnJOb25lOworICAgIH0KKworLyoKKyAqIFxpbnRlcm5hbAorICogQ2FsbGVkIGZy
b20gdGhlIHF0bWFpbi5saWIgYXBwbGljYXRpb24gd3JhcHBlci4KKyAqIENyZWF0ZSBhIG5ldyBo
ZWFwIGFzIHJlcXVlc3RlZCwgYnV0IHVzZSB0aGUgbmV3IGFsbG9jYXRvcgorICovCitUSW50IF9z
eW1iaWFuX1NldHVwVGhyZWFkSGVhcChUQm9vbCAvKmFOb3RGaXJzdCovLCBTU3RkRXBvY1RocmVh
ZENyZWF0ZUluZm8mIGFJbmZvKQorICAgIHsKKyAgICBUSW50IHIgPSBLRXJyTm9uZTsKKyAgICBp
ZiAoIWFJbmZvLmlBbGxvY2F0b3IgJiYgYUluZm8uaUhlYXBJbml0aWFsU2l6ZT4wKQorICAgICAg
ICB7CisgICAgICAgIC8vIG5ldyBoZWFwIHJlcXVpcmVkCisgICAgICAgIFJOZXdBbGxvY2F0b3Iq
IHBIID0gTlVMTDsKKyAgICAgICAgciA9IFJOZXdBbGxvY2F0b3I6OkNyZWF0ZVRocmVhZEhlYXAo
YUluZm8sIHBIKTsKKyAgICAgICAgfQorICAgIGVsc2UgaWYgKGFJbmZvLmlBbGxvY2F0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgLy8gc2hhcmluZyBhIGhlYXAKKyAgICAgICAgUkFsbG9jYXRvciog
cEEgPSBhSW5mby5pQWxsb2NhdG9yOworICAgICAgICByID0gcEEtPk9wZW4oKTsKKyAgICAgICAg
aWYgKHIgPT0gS0Vyck5vbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBVc2VyOjpTd2l0
Y2hBbGxvY2F0b3IocEEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcmV0dXJuIHI7
CisgICAgfQorCisjaWZuZGVmIF9fV0lOU19fCisjcHJhZ21hIHBvcAorI2VuZGlmCkluZGV4OiBX
ZWJLaXRUb29scy9TeW1iaWFuTWVtb3J5QWxsb2NhdG9yL25ld2FsbG9jYXRvcl9ob29rLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TeW1iaWFuTWVtb3J5QWxsb2NhdG9yL25ld2FsbG9j
YXRvcl9ob29rLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1N5bWJpYW5NZW1vcnlB
bGxvY2F0b3IvbmV3YWxsb2NhdG9yX2hvb2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1
IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgUXQgV2ViIFJ1bnRpbWUuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxlMzJz
dGQuaD4KKworZXh0ZXJuIFRJbnQgX3N5bWJpYW5fU2V0dXBUaHJlYWRIZWFwKFRCb29sIGFOb3RG
aXJzdCwgU1N0ZEVwb2NUaHJlYWRDcmVhdGVJbmZvJiBhSW5mbyk7CisKKy8qCisgKiBcaW50ZXJu
YWwKKyAqCisgKiBVc2VzIGxpbmstdGltZSBzeW1ib2wgcHJlZW1wdGlvbiB0byBjYXB0dXJlIGEg
Y2FsbCBmcm9tIHRoZSBhcHBsaWNhdGlvbgorICogc3RhcnR1cC4gT24gcmV0dXJuLCB0aGVyZSBp
cyBzb21lIGtpbmQgb2YgaGVhcCBhbGxvY2F0b3IgaW5zdGFsbGVkIG9uIHRoZQorICogdGhyZWFk
LgorICovCitUSW50IFVzZXJIZWFwOjpTZXR1cFRocmVhZEhlYXAoVEJvb2wgYU5vdEZpcnN0LCBT
U3RkRXBvY1RocmVhZENyZWF0ZUluZm8mIGFJbmZvKQoreworICAgIHJldHVybiBfc3ltYmlhbl9T
ZXR1cFRocmVhZEhlYXAoYU5vdEZpcnN0LCBhSW5mbyk7Cit9CkluZGV4OiBXZWJLaXRUb29scy9T
eW1iaWFuTWVtb3J5QWxsb2NhdG9yL25ld2FsbG9jYXRvcl9wLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9uZXdhbGxvY2F0b3JfcC5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0VG9vbHMvU3ltYmlhbk1lbW9yeUFsbG9jYXRvci9uZXdhbGxvY2F0b3Jf
cC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgUXQgV2ViIFJ1bnRpbWUuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1i
aWFuIGFwcGxpY2F0aW9uIHdyYXBwZXIgb2YgdGhlIFF0IFRvb2xraXQuCisgKgorICogVGhlIG1l
bW9yeSBhbGxvY2F0b3IgaXMgYmFja3BvcnRlZCBmcm9tIFN5bWJpYW4gT1MsIGFuZCBjYW4gZXZl
bnR1YWxseQorICogYmUgcmVtb3ZlZCBmcm9tIFF0IG9uY2UgaXQgaXMgYnVpbHQgaW4gdG8gYWxs
IHN1cHBvcnRlZCBPUyB2ZXJzaW9ucy4KKyAqIFRoZSBhbGxvY2F0b3IgaXMgYSBjb21wb3NpdGUg
b2YgdGhyZWUgYWxsb2NhdG9yczoKKyAqICAtIEEgcGFnZSBhbGxvY2F0b3IsIGZvciBsYXJnZSBh
bGxvY2F0aW9ucworICogIC0gQSBzbGFiIGFsbG9jYXRvciwgZm9yIHNtYWxsIGFsbG9jYXRpb25z
CisgKiAgLSBEb3VnIExlYSdzIGFsbG9jYXRvciwgZm9yIG1lZGl1bSBzaXplIGFsbG9jYXRpb25z
CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIE5FV0FMTE9DQVRPUl9ICisj
ZGVmaW5lIE5FV0FMTE9DQVRPUl9ICisKK2NsYXNzIFJOZXdBbGxvY2F0b3IgOiBwdWJsaWMgUkFs
bG9jYXRvcgorICAgIHsKK3B1YmxpYzoKKyAgICBlbnVte0VBbGxvY0NlbGxTaXplID0gOH07CisK
KyAgICB2aXJ0dWFsIFRBbnkqIEFsbG9jKFRJbnQgYVNpemUpOworICAgIHZpcnR1YWwgdm9pZCBG
cmVlKFRBbnkqIGFQdHIpOworICAgIHZpcnR1YWwgVEFueSogUmVBbGxvYyhUQW55KiBhUHRyLCBU
SW50IGFTaXplLCBUSW50IGFNb2RlPTApOworICAgIHZpcnR1YWwgVEludCBBbGxvY0xlbihjb25z
dCBUQW55KiBhQ2VsbCkgY29uc3Q7CisgICAgdmlydHVhbCBUSW50IENvbXByZXNzKCk7CisgICAg
dmlydHVhbCB2b2lkIFJlc2V0KCk7CisgICAgdmlydHVhbCBUSW50IEFsbG9jU2l6ZShUSW50JiBh
VG90YWxBbGxvY1NpemUpIGNvbnN0OworICAgIHZpcnR1YWwgVEludCBBdmFpbGFibGUoVEludCYg
YUJpZ2dlc3RCbG9jaykgY29uc3Q7CisgICAgdmlydHVhbCBUSW50IERlYnVnRnVuY3Rpb24oVElu
dCBhRnVuYywgVEFueSogYTE9TlVMTCwgVEFueSogYTI9TlVMTCk7Citwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBUSW50IEV4dGVuc2lvbl8oVFVpbnQgYUV4dGVuc2lvbklkLCBUQW55KiYgYTAsIFRB
bnkqIGExKTsKKworcHVibGljOgorICAgIFRJbnQgU2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4g
aUNodW5rU2l6ZTsgfQorCisgICAgaW5saW5lIFRJbnQgTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAg
aW5saW5lIFRVaW50OCogQmFzZSgpIGNvbnN0OworICAgIGlubGluZSBUSW50IEFsaWduKFRJbnQg
YSkgY29uc3Q7CisgICAgaW5saW5lIGNvbnN0IFRBbnkqIEFsaWduKGNvbnN0IFRBbnkqIGEpIGNv
bnN0OworICAgIGlubGluZSB2b2lkIExvY2soKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBVbmxv
Y2soKSBjb25zdDsKKyAgICBpbmxpbmUgVEludCBDaHVua0hhbmRsZSgpIGNvbnN0OworCisgICAg
LyoqCisgICAgQGludGVybmFsQ29tcG9uZW50CisgICAgKi8KKyAgICBzdHJ1Y3QgX3NfYWxpZ24g
e2NoYXIgYzsgZG91YmxlIGQ7fTsKKworICAgIC8qKgorICAgIFRoZSBzdHJ1Y3R1cmUgb2YgYSBo
ZWFwIGNlbGwgaGVhZGVyIGZvciBhIGhlYXAgY2VsbCBvbiB0aGUgZnJlZSBsaXN0LgorICAgICov
CisgICAgc3RydWN0IFNDZWxsIHsKKyAgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAg
ICAgIFRoZSBsZW5ndGggb2YgdGhlIGNlbGwsIHdoaWNoIGluY2x1ZGVzIHRoZSBsZW5ndGggb2YK
KyAgICAgICAgICAgICAgICAgdGhpcyBoZWFkZXIuCisgICAgICAgICAgICAgICAgICovCisgICAg
ICAgICAgICAgICAgIFRJbnQgbGVuOworCisKKyAgICAgICAgICAgICAgICAgLyoqCisgICAgICAg
ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbmV4dCBjZWxsIGluIHRoZSBmcmVlIGxpc3QuCisg
ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgIFNDZWxsKiBuZXh0OworICAgICAg
ICAgICAgICAgICB9OworCisgICAgLyoqCisgICAgVGhlIGRlZmF1bHQgY2VsbCBhbGlnbm1lbnQu
CisgICAgKi8KKyAgICBlbnVtIHtFQ2VsbEFsaWdubWVudCA9IHNpemVvZihfc19hbGlnbiktc2l6
ZW9mKGRvdWJsZSl9OworCisgICAgLyoqCisgICAgU2l6ZSBvZiBhIGZyZWUgY2VsbCBoZWFkZXIu
CisgICAgKi8KKyAgICBlbnVtIHtFRnJlZUNlbGxTaXplID0gc2l6ZW9mKFNDZWxsKX07CisKKyAg
ICAvKioKKyAgICBAaW50ZXJuYWxDb21wb25lbnQKKyAgICAqLworICAgIGVudW0gVERlZmF1bHRT
aHJpbmtSYXRpb3Mge0VTaHJpbmtSYXRpbzE9MjU2LCBFU2hyaW5rUmF0aW9EZmx0PTUxMn07CisK
K3B1YmxpYzoKKyAgICBSTmV3QWxsb2NhdG9yKFRJbnQgYU1heExlbmd0aCwgVEludCBhQWxpZ249
MCwgVEJvb2wgYVNpbmdsZVRocmVhZD1FVHJ1ZSk7CisgICAgUk5ld0FsbG9jYXRvcihUSW50IGFD
aHVua0hhbmRsZSwgVEludCBhT2Zmc2V0LCBUSW50IGFNaW5MZW5ndGgsIFRJbnQgYU1heExlbmd0
aCwgVEludCBhR3Jvd0J5LCBUSW50IGFBbGlnbj0wLCBUQm9vbCBhU2luZ2xlVGhyZWFkPUVGYWxz
ZSk7CisgICAgaW5saW5lIFJOZXdBbGxvY2F0b3IoKTsKKworICAgIFRBbnkqIG9wZXJhdG9yIG5l
dyhUVWludCBhU2l6ZSwgVEFueSogYUJhc2UpIF9fTk9fVEhST1c7CisgICAgaW5saW5lIHZvaWQg
b3BlcmF0b3IgZGVsZXRlKFRBbnkqLCBUQW55Kik7CisKK3Byb3RlY3RlZDoKKyAgICBTQ2VsbCog
R2V0QWRkcmVzcyhjb25zdCBUQW55KiBhQ2VsbCkgY29uc3Q7CisKK3B1YmxpYzoKKyAgICBUSW50
IGlNaW5MZW5ndGg7CisgICAgVEludCBpTWF4TGVuZ3RoOyAgICAgICAgICAgIC8vIG1heGltdW0g
Ynl0ZXMgdXNlZCBieSB0aGUgYWxsb2NhdG9yIGluIHRvdGFsCisgICAgVEludCBpT2Zmc2V0OyAg
ICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgb2YgUk5ld0FsbG9jYXRvciBvYmplY3QgZnJvbSBj
aHVuayBiYXNlCisgICAgVEludCBpR3Jvd0J5OworCisgICAgVEludCBpQ2h1bmtIYW5kbGU7ICAg
ICAgICAgIC8vIGhhbmRsZSBvZiBjaHVuaworICAgIFJGYXN0TG9jayBpTG9jazsKKyAgICBUVWlu
dDgqIGlCYXNlOyAgICAgICAgICAgICAgLy8gYm90dG9tIG9mIERMIG1lbW9yeSwgaS5lLiB0aGlz
K3NpemVvZihSTmV3QWxsb2NhdG9yKQorICAgIFRVaW50OCogaVRvcDsgICAgICAgICAgICAgICAg
ICAgLy8gdG9wIG9mIERMIG1lbW9yeSAocGFnZSBhbGlnbmVkKQorICAgIFRJbnQgaUFsaWduOwor
ICAgIFRJbnQgaU1pbkNlbGw7CisgICAgVEludCBpUGFnZVNpemU7CisgICAgU0NlbGwgaUZyZWU7
Citwcm90ZWN0ZWQ6CisgICAgVEludCBpTmVzdGluZ0xldmVsOworICAgIFRJbnQgaUFsbG9jQ291
bnQ7CisgICAgVEFsbG9jRmFpbCBpRmFpbFR5cGU7CisgICAgVEludCBpRmFpbFJhdGU7CisgICAg
VEJvb2wgaUZhaWxlZDsKKyAgICBUSW50IGlGYWlsQWxsb2NDb3VudDsKKyAgICBUSW50IGlSYW5k
OworICAgIFRBbnkqIGlUZXN0RGF0YTsKK3Byb3RlY3RlZDoKKyAgICBUSW50IGlDaHVua1NpemU7
ICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnl0ZXMgaW4gdGhlIGNodW5r
ICg9PSBjaHVuay5TaXplKCkpCisgICAgbWFsbG9jX3N0YXRlIGlHbG9iYWxNYWxsb2NTdGF0ZTsK
KyAgICBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisgICAgVEludCBpSGlnaFdhdGVyTWFyazsKK3By
aXZhdGU6CisgICAgdm9pZCBJbml0KFRJbnQgYUJpdG1hcFNsYWIsIFRJbnQgYVBhZ2VQb3dlciwg
c2l6ZV90IGFUcmltVGhyZXNob2xkKTsvKkluaXQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzKi8K
KyAgICBpbmxpbmUgaW50IGluaXRfbXBhcmFtcyhzaXplX3QgYVRyaW1UaHJlc2hvbGQgLyo9IERF
RkFVTFRfVFJJTV9USFJFU0hPTEQqLyk7CisgICAgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pOwor
ICAgIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpOwor
ICAgIHZvaWQqIHN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKTsKKyAgICBtc2VnbWVudHB0
ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIFRVaW50OCogYWRkcik7CisgICAgdm9pZCBhZGRf
c2VnbWVudChtc3RhdGUgbSwgVFVpbnQ4KiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1h
cHBlZCk7CisgICAgaW50IHN5c190cmltKG1zdGF0ZSBtLCBzaXplX3QgcGFkKTsKKyAgICBpbnQg
aGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpOworICAgIHNpemVfdCBy
ZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtc3RhdGUgbSk7CisgICAgdm9pZCogbW1hcF9hbGxvYyht
c3RhdGUgbSwgc2l6ZV90IG5iKTsvKk5lZWQgdG8gY2hlY2sgdGhpcyBmdW5jdGlvbiovCisgICAg
dm9pZCogcHJlcGVuZF9hbGxvYyhtc3RhdGUgbSwgVFVpbnQ4KiBuZXdiYXNlLCBUVWludDgqIG9s
ZGJhc2UsIHNpemVfdCBuYik7CisgICAgdm9pZCogdG1hbGxvY19sYXJnZShtc3RhdGUgbSwgc2l6
ZV90IG5iKTsKKyAgICB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpOwor
ICAgIC8qTUFDUk9TIGNvbnZlcnRlZCBmdW5jdGlvbnMqLworICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXN0YXRlIE0sbWNodW5rcHRyIEIsbWNodW5rcHRy
IFAsYmluZGV4X3QmIEkpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRfc21hbGxfY2h1
bmsobXN0YXRlIE0sbWNodW5rcHRyIFAsIHNpemVfdCBTKTsKKyAgICBzdGF0aWMgaW5saW5lIHZv
aWQgaW5zZXJ0X2NodW5rKG1zdGF0ZSBNLG1jaHVua3B0ciBQLHNpemVfdCBTLHNpemVfdCBOUEFH
RVMpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxpbmtfbGFyZ2VfY2h1bmsobXN0YXRlIE0s
dGNodW5rcHRyIFgpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxpbmtfc21hbGxfY2h1bmso
bXN0YXRlIE0sIG1jaHVua3B0ciBQLHNpemVfdCBTKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dW5saW5rX2NodW5rKG1zdGF0ZSBNLCBtY2h1bmtwdHIgUCwgc2l6ZV90IFMpOworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZV90IFMsIGJpbmRleF90JiBJKTsK
KyAgICBzdGF0aWMgaW5saW5lIHZvaWQgaW5zZXJ0X2xhcmdlX2NodW5rKG1zdGF0ZSBNLHRjaHVu
a3B0ciBYLHNpemVfdCBTLHNpemVfdCBOUEFHRVMpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBy
ZXBsYWNlX2R2KG1zdGF0ZSBNLCBtY2h1bmtwdHIgUCwgc2l6ZV90IFMpOworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlX2JpdDJpZHgoYmlubWFwX3QgWCxiaW5kZXhfdCYgSSk7CisgICAg
LypNQUNST1MgY29udmVydGVkIGZ1bmN0aW9ucyovCisgICAgVEFueSogU2V0QnJrKFRJbnQzMiBh
RGVsdGEpOworICAgIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1l
bSwgc2l6ZV90IGJ5dGVzKTsKKyAgICB2b2lkICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXN0YXRl
IG0pOworICAgIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSk7
CisjaWYgIU5PX01BTExJTkZPCisgICAgICAgIG1hbGxpbmZvIGludGVybmFsX21hbGxpbmZvKG1z
dGF0ZSBtKTsKKyNlbmRpZgorICAgIHZvaWQgSW5pdF9EbG1hbGxvYyhzaXplX3QgY2FwYWNpdHks
IGludCBsb2NrZWQsIHNpemVfdCBhVHJpbVRocmVzaG9sZCk7CisgICAgdm9pZCogZGxtYWxsb2Mo
c2l6ZV90KTsKKyAgICB2b2lkICBkbGZyZWUodm9pZCopOworICAgIHZvaWQqIGRscmVhbGxvYyh2
b2lkKiwgc2l6ZV90KTsKKyAgICBpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKyAgICBzaXplX3Qg
ZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpOworICAgIHNpemVfdCBkbG1hbGxvY19tYXhfZm9vdHBy
aW50KHZvaWQpOworICAgICNpZiAhTk9fTUFMTElORk8KKyAgICAgICAgc3RydWN0IG1hbGxpbmZv
IGRsbWFsbGluZm8odm9pZCk7CisgICAgI2VuZGlmCisgICAgaW50ICBkbG1hbGxvY190cmltKHNp
emVfdCk7CisgICAgc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqKTsKKyAgICB2b2lk
ICBkbG1hbGxvY19zdGF0cyh2b2lkKTsKKyAgICBpbmxpbmUgIG1jaHVua3B0ciBtbWFwX3Jlc2l6
ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYik7CisKKyAgICAgICAgLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKipDb2RlIEFkZGVkIEZvciBETCBoZWFwKioqKioqKioqKioq
KioqKioqKioqKi8KKyAgICBmcmllbmQgVEludCBfc3ltYmlhbl9TZXR1cFRocmVhZEhlYXAoVEJv
b2wgYU5vdEZpcnN0LCBTU3RkRXBvY1RocmVhZENyZWF0ZUluZm8mIGFJbmZvKTsKK3ByaXZhdGU6
CisgICAgdW5zaWduZWQgc2hvcnQgc2xhYl90aHJlc2hvbGQ7CisgICAgdW5zaWduZWQgc2hvcnQg
cGFnZV90aHJlc2hvbGQ7ICAgICAgLy8gMl5uIGlzIHNtYWxsZXN0IGNlbGwgc2l6ZSBhbGxvY2F0
ZWQgaW4gcGFnZWQgYWxsb2NhdG9yCisgICAgdW5zaWduZWQgc2xhYl9pbml0X3RocmVzaG9sZDsK
KyAgICB1bnNpZ25lZCBzbGFiX2NvbmZpZ19iaXRzOworICAgIHNsYWIqIHBhcnRpYWxfcGFnZTsv
LyBwYXJ0aWFsLXVzZSBwYWdlIHRyZWUKKyAgICBwYWdlKiBzcGFyZV9wYWdlOyAgICAgICAgICAg
ICAgICAgICAvLyBzaW5nbGUgZW1wdHkgcGFnZSBjYWNoZWQKKyAgICB1bnNpZ25lZCBjaGFyIHNp
emVtYXBbKG1heHNsYWJzaXplPj4yKSsxXTsgIC8vIGluZGV4IG9mIHNsYWJzZXQgYmFzZWQgb24g
c2l6ZSBjbGFzcworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB0cmVlX3JlbW92ZShzbGFiKiBz
KTsKKyAgICBzdGF0aWMgdm9pZCB0cmVlX2luc2VydChzbGFiKiBzLHNsYWIqKiByKTsKK3B1Ymxp
YzoKKyAgICBlbnVtIHtva2JpdHMgPSAoMTw8KG1heHNsYWJzaXplPj4yKSktMX07CisgICAgdm9p
ZCBzbGFiX2luaXQodW5zaWduZWQgc2xhYmJpdG1hcCk7CisgICAgdm9pZCBzbGFiX2NvbmZpZyh1
bnNpZ25lZCBzbGFiYml0bWFwKTsKKyAgICB2b2lkKiBzbGFiX2FsbG9jYXRlKHNsYWJzZXQmIGFs
bG9jYXRvcik7CisgICAgdm9pZCBzbGFiX2ZyZWUodm9pZCogcCk7CisgICAgdm9pZCogYWxsb2Nu
ZXdzbGFiKHNsYWJzZXQmIGFsbG9jYXRvcik7CisgICAgdm9pZCogYWxsb2NuZXdwYWdlKHNsYWJz
ZXQmIGFsbG9jYXRvcik7CisgICAgdm9pZCogaW5pdG5ld3NsYWIoc2xhYnNldCYgYWxsb2NhdG9y
LCBzbGFiKiBzKTsKKyAgICB2b2lkIGZyZWVzbGFiKHNsYWIqIHMpOworICAgIHZvaWQgZnJlZXBh
Z2UocGFnZSogcCk7CisgICAgdm9pZCogbWFwKHZvaWQqIHAsdW5zaWduZWQgc3opOworICAgIHZv
aWQqIHJlbWFwKHZvaWQqIHAsdW5zaWduZWQgb2xkc3osdW5zaWduZWQgc3opOworICAgIHZvaWQg
dW5tYXAodm9pZCogcCx1bnNpZ25lZCBzeik7CisgICAgLyoqSSB0aGluayB3ZSBuZWVkIHRvIG1v
dmUgdGhpcyBmdW5jdGlvbnMgdG8gc2xhYiBhbGxvY2F0b3IgY2xhc3MqKiovCisgICAgc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBoZWFkZXJfZnJlZSh1bnNpZ25lZCBoKQorICAgIHtyZXR1cm4gKGgm
MHgwMDAwMDBmZik7fQorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGVhZGVyX3BhZ2VtYXAo
dW5zaWduZWQgaCkKKyAgICB7cmV0dXJuIChoJjB4MDAwMDBmMDApPj44O30KKyAgICBzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGhlYWRlcl9zaXplKHVuc2lnbmVkIGgpCisgICAge3JldHVybiAoaCYw
eDAwMDNmMDAwKT4+MTI7fQorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGVhZGVyX3VzZWRt
NCh1bnNpZ25lZCBoKQorICAgIHtyZXR1cm4gKGgmMHgwZmZjMDAwMCk+PjE4O30KKyAgICAvKioq
cGFnZWQgYWxsb2NhdG9yIGNvZGUqKiovCisgICAgdm9pZCBwYWdlZF9pbml0KHVuc2lnbmVkIHBh
Z2Vwb3dlcik7CisgICAgdm9pZCogcGFnZWRfYWxsb2NhdGUodW5zaWduZWQgc2l6ZSk7CisgICAg
dm9pZCBwYWdlZF9mcmVlKHZvaWQqIHApOworICAgIHZvaWQqIHBhZ2VkX3JlYWxsb2NhdGUodm9p
ZCogcCwgdW5zaWduZWQgc2l6ZSk7CisgICAgcGFnZWNlbGwqIHBhZ2VkX2Rlc2NyaXB0b3IoY29u
c3Qgdm9pZCogcCkgY29uc3QgOworCisgICAgLyogRGwgaGVhcCBsb2cgZHVtcCBmdW5jdGlvbnMq
LworI2lmZGVmIE9PTV9MT0dHSU5HCisgICAgdm9pZCBkdW1wX2hlYXBfbG9ncyhzaXplX3QgZmFp
bF9zaXplKTsKKyAgICB2b2lkIGR1bXBfZGxfZnJlZV9jaHVua3MoKTsKKyAgICB2b2lkIGR1bXBf
bGFyZ2VfY2h1bmsobXN0YXRlIG0sIHRjaHVua3B0ciB0KTsKKyAgICBzaXplX3QgaVVubWFwcGVk
Q2h1bmtTaXplOworI2VuZGlmCitwcml2YXRlOgorICAgICAvKiBEdWJ1ZyBjaGVja3MgZm9yIGNo
dW5rIHBhZ2Ugc3VwcG9ydCovCisjaWZkZWYgRExfQ0hVTktfTUVNX0RFQlVHCisjZGVmaW5lIGRv
X2NodW5rX3BhZ2VfcmVsZWFzZV9jaGVjayhwLCBwc2l6ZSwgZm0sIG1lbV9yZWxlYXNlZCkgZGVi
dWdfY2h1bmtfcGFnZV9yZWxlYXNlX2NoZWNrKHAsIHBzaXplLCBmbSwgbWVtX3JlbGVhc2VkKQor
I2RlZmluZSBkb19jaGVja19sYXJnZV9jaHVua19hY2Nlc3MocCwgcHNpemUpIGRlYnVnX2NoZWNr
X2xhcmdlX2NodW5rX2FjY2VzcyhwLCBwc2l6ZSkKKyNkZWZpbmUgZG9fY2hlY2tfc21hbGxfY2h1
bmtfYWNjZXNzKHAsIHBzaXplKSBkZWJ1Z19jaGVja19zbWFsbF9jaHVua19hY2Nlc3MocCwgcHNp
emUpCisjZGVmaW5lIGRvX2NoZWNrX2FueV9jaHVua19hY2Nlc3MocCwgcHNpemUpIGRlYnVnX2No
ZWNrX2FueV9jaHVua19hY2Nlc3MocCwgcHNpemUpCisgICAgdm9pZCBkZWJ1Z19jaGVja19sYXJn
ZV9jaHVua19hY2Nlc3ModGNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSk7CisgICAgdm9pZCBkZWJ1
Z19jaGVja19zbWFsbF9jaHVua19hY2Nlc3MobWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSk7Cisg
ICAgdm9pZCBkZWJ1Z19jaGVja19hbnlfY2h1bmtfYWNjZXNzKG1jaHVua3B0ciBwLCBzaXplX3Qg
cHNpemUpOworICAgIHZvaWQgZGVidWdfY2h1bmtfcGFnZV9yZWxlYXNlX2NoZWNrKG1jaHVua3B0
ciBwLCBzaXplX3QgcHNpemUsIG1zdGF0ZSBmbSwgaW50IG1lbV9yZWxlYXNlZCk7CisjZWxzZQor
I2RlZmluZSBkb19jaHVua19wYWdlX3JlbGVhc2VfY2hlY2socCwgcHNpemUsIGZtLCBtZW1fcmVs
ZWFzZWQpCisjZGVmaW5lIGRvX2NoZWNrX2xhcmdlX2NodW5rX2FjY2VzcyhwLCBwc2l6ZSkKKyNk
ZWZpbmUgZG9fY2hlY2tfc21hbGxfY2h1bmtfYWNjZXNzKHAsIHBzaXplKQorI2RlZmluZSBkb19j
aGVja19hbnlfY2h1bmtfYWNjZXNzKHAsIHBzaXplKQorI2VuZGlmCisKKyAgICAvKiBDaHVuayBw
YWdlIHJlbGVhc2UgbWVjaGFuaXNtIHN1cHBvcnQgKi8KKyAgICBUSW50IG1hcF9jaHVua19wYWdl
cyh0Y2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKTsKKyAgICBUSW50IHVubWFwX2NodW5rX3BhZ2Vz
KHRjaHVua3B0ciBwLCBzaXplX3QgcHNpemUsIHNpemVfdCBwcmV2X25wYWdlcyk7CisgICAgVElu
dCBtYXBfY2h1bmtfcGFnZXNfcGFydGlhbCh0Y2h1bmtwdHIgdHAsIHNpemVfdCBwc2l6ZSwgdGNo
dW5rcHRyIHIsIHNpemVfdCByc2l6ZSk7CisgICAgVEludCBzeXNfdHJpbV9wYXJ0aWFsKG1zdGF0
ZSBtLCBtY2h1bmtwdHIgcHJldiwgc2l6ZV90IHBzaXplLCBzaXplX3QgcHJldl9ucGFnZXMpOwor
ICAgIHNpemVfdCBmcmVlX2NodW5rX3RocmVzaG9sZDsKKworICAgIC8vIHBhZ2VkIGFsbG9jYXRv
ciBzdHJ1Y3R1cmVzCisgICAgZW51bSB7bnBhZ2VjZWxscz00fTsKKyAgICBwYWdlY2VsbCBwYWdl
bGlzdFtucGFnZWNlbGxzXTsgICAgICAvLyBkZXNjcmlwdG9ycyBmb3IgcGFnZS1hbGlnbmVkIGxh
cmdlIGFsbG9jYXRpb25zCisgICAgaW5saW5lIHZvaWQgVHJhY2VSZUFsbG9jKFRBbnkqIGFQdHIs
IFRJbnQgYVNpemUsIFRBbnkqIGFOZXdQdHIsIFRJbnQgYVpvbmUpOworICAgIGlubGluZSB2b2lk
IFRyYWNlQ2FsbFN0YWNrKCk7CisgICAgLy8gdG8gdHJhY2sgbWF4aW11bSB1c2VkCisgICAgLy9U
SW50IGlIaWdoV2F0ZXJNYXJrOworCisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJOZXdBbGxvY2F0
b3IqIEZpeGVkSGVhcChUQW55KiBhQmFzZSwgVEludCBhTWF4TGVuZ3RoLCBUSW50IGFBbGlnbiwg
VEJvb2wgYVNpbmdsZVRocmVhZCk7CisgICAgc3RhdGljIFJOZXdBbGxvY2F0b3IqIENodW5rSGVh
cChjb25zdCBURGVzQyogYU5hbWUsIFRJbnQgYU1pbkxlbmd0aCwgVEludCBhTWF4TGVuZ3RoLCBU
SW50IGFHcm93QnksIFRJbnQgYUFsaWduLCBUQm9vbCBhU2luZ2xlVGhyZWFkKTsKKyAgICBzdGF0
aWMgUk5ld0FsbG9jYXRvciogQ2h1bmtIZWFwKFJDaHVuayBhQ2h1bmssIFRJbnQgYU1pbkxlbmd0
aCwgVEludCBhR3Jvd0J5LCBUSW50IGFNYXhMZW5ndGgsIFRJbnQgYUFsaWduLCBUQm9vbCBhU2lu
Z2xlVGhyZWFkLCBUVWludDMyIGFNb2RlKTsKKyAgICBzdGF0aWMgUk5ld0FsbG9jYXRvciogT2Zm
c2V0Q2h1bmtIZWFwKFJDaHVuayBhQ2h1bmssIFRJbnQgYU1pbkxlbmd0aCwgVEludCBhT2Zmc2V0
LCBUSW50IGFHcm93QnksIFRJbnQgYU1heExlbmd0aCwgVEludCBhQWxpZ24sIFRCb29sIGFTaW5n
bGVUaHJlYWQsIFRVaW50MzIgYU1vZGUpOworICAgIHN0YXRpYyBUSW50IENyZWF0ZVRocmVhZEhl
YXAoU1N0ZEVwb2NUaHJlYWRDcmVhdGVJbmZvJiBhSW5mbywgUk5ld0FsbG9jYXRvciomIGFIZWFw
LCBUSW50IGFBbGlnbiA9IDAsIFRCb29sIGFTaW5nbGVUaHJlYWQgPSBFRmFsc2UpOworCisKK3By
aXZhdGU6CisgICAgLyoqCisgICAgICphbHdheXMga2VlcCB0aGlzIHZhcmlhYmxlIGF0IHRoZSBi
b3R0b20gb2YgdGhlIGNsYXNzIGFzIGl0cyB1c2VkIGFzCisgICAgICogYXJyYXkgb2YgbW9yZSB0
aGFuIDEgb2JqZXN0IHRob3VnaCBpdCBkZWNsYXJlZCBhIHNpbmdsZS4KKyAgICAgKiAgVE9ETzog
ZHluYW1pYyBzaXppbmcgb2YgaGVhcCBvYmplY3QgYmFzZWQgb24gc2xhYiBjb25maWd1cmF0aW9u
LgorICAgICAqICAgICAgICAgICAgIEp1c3QgYWxsb2NhdGUgbWF4aW11bSBudW1iZXIgb2Ygc2xh
YnNldHMgZm9yIG5vdworICAgICAqICovCisgICAgc2xhYnNldCBzbGFiYWxsb2NbbWF4c2xhYnNp
emU+PjJdOworCit9OworCitpbmxpbmUgUk5ld0FsbG9jYXRvcjo6Uk5ld0FsbG9jYXRvcigpCisg
ICAge30KKworLyoqCitAcmV0dXJuIFRoZSBtYXhpbXVtIGxlbmd0aCB0byB3aGljaCB0aGUgaGVh
cCBjYW4gZ3Jvdy4KKworQHB1Ymxpc2hlZEFsbAorQHJlbGVhc2VkCisqLworaW5saW5lIFRJbnQg
Uk5ld0FsbG9jYXRvcjo6TWF4TGVuZ3RoKCkgY29uc3QKKyAgICB7cmV0dXJuIGlNYXhMZW5ndGg7
fQorCitpbmxpbmUgdm9pZCBSTmV3QWxsb2NhdG9yOjpvcGVyYXRvciBkZWxldGUoVEFueSosIFRB
bnkqKQorLyoqCitDYWxsZWQgaWYgY29uc3RydWN0b3IgaXNzdWVkIGJ5IG9wZXJhdG9yIG5ldyhU
VWludCBhU2l6ZSwgVEFueSogYUJhc2UpIHRocm93cyBleGNlcHRpb24uCitUaGlzIGlzIGR1bW15
IGFzIGNvcnJlc3BvbmRpbmcgbmV3IG9wZXJhdG9yIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeS4K
KyovCisgICAge30KKworCitpbmxpbmUgVFVpbnQ4KiBSTmV3QWxsb2NhdG9yOjpCYXNlKCkgY29u
c3QKKy8qKgorR2V0cyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBoZWFwLgorCitOb3Rl
IHRoYXQgYmVjYXVzZSBvZiB0aGUgc21hbGwgc3BhY2Ugb3ZlcmhlYWQgaW5jdXJyZWQgYnkgYWxs
IGFsbG9jYXRlZCBjZWxscywKK25vIGNlbGwgd2lsbCBoYXZlIHRoZSBzYW1lIGFkZHJlc3MgYXMg
dGhhdCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLgorCitAcmV0dXJuIEEgcG9pbnRlciB0byB0
aGUgYmFzZSBvZiB0aGUgaGVhcC4KKyovCisgICAge3JldHVybiBpQmFzZTt9CisKKworaW5saW5l
IFRJbnQgUk5ld0FsbG9jYXRvcjo6QWxpZ24oVEludCBhKSBjb25zdAorLyoqCitAaW50ZXJuYWxD
b21wb25lbnQKKyovCisgICAge3JldHVybiBfQUxJR05fVVAoYSwgaUFsaWduKTt9CisKKworCisK
K2lubGluZSBjb25zdCBUQW55KiBSTmV3QWxsb2NhdG9yOjpBbGlnbihjb25zdCBUQW55KiBhKSBj
b25zdAorLyoqCitAaW50ZXJuYWxDb21wb25lbnQKKyovCisgICAge3JldHVybiAoY29uc3QgVEFu
eSopX0FMSUdOX1VQKChUTGluQWRkcilhLCBpQWxpZ24pO30KKworCisKK2lubGluZSB2b2lkIFJO
ZXdBbGxvY2F0b3I6OkxvY2soKSBjb25zdAorLyoqCitAaW50ZXJuYWxDb21wb25lbnQKKyovCisg
ICAgeygoUkZhc3RMb2NrJilpTG9jaykuV2FpdCgpO30KKworCisKKworaW5saW5lIHZvaWQgUk5l
d0FsbG9jYXRvcjo6VW5sb2NrKCkgY29uc3QKKy8qKgorQGludGVybmFsQ29tcG9uZW50CisqLwor
ICAgIHsoKFJGYXN0TG9jayYpaUxvY2spLlNpZ25hbCgpO30KKworCitpbmxpbmUgVEludCBSTmV3
QWxsb2NhdG9yOjpDaHVua0hhbmRsZSgpIGNvbnN0CisvKioKK0BpbnRlcm5hbENvbXBvbmVudAor
Ki8KKyAgICB7CisgICAgcmV0dXJuIGlDaHVua0hhbmRsZTsKKyAgICB9CisKKyNlbmRpZiAvLyBO
RVdBTExPQ0FUT1JfSAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>