<?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>129992</bug_id>
          
          <creation_ts>2014-03-09 09:22:50 -0700</creation_ts>
          <short_desc>JS engine completely broken on ia64</short_desc>
          <delta_ts>2015-11-03 13:14:36 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Émeric MASCHINO">emeric.maschino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>emeric.maschino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gnome</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>988728</commentid>
    <comment_count>0</comment_count>
    <who name="Émeric MASCHINO">emeric.maschino</who>
    <bug_when>2014-03-09 09:22:50 -0700</bug_when>
    <thetext>Hi,

Starting up a WebKit-based application, e.g. GNOME Epiphany or Yelp, immediately segfaults.

Back in the WebKit 1.x days, patches for WebKit 1.8.1 on Debian were provided to fix JS engine on ia64 [1][2]. Sadly, it seems to me that these were never reported/merged upstream. They address three problems in WebKit JS engine.

[1st issue] On ia64, USE(JSVALUE64) is true. From the source code comment, JSVALUE64 path uses some sophisticated tricks in order to get everything in a 64-bits wide data type. As outlined there, this will work as long the high 16-bits of the addresses of any allocated memory are cleared. This is not always the case on ia64. A similar issue was fixed on Mozilla JS engine [3]. Original 01-ia64-wide-ptr patch against WebKit 1.8.1 [4] fixed this issue by defining a third JSVALUE64W option that was used on ia64 only. This path uses an encapsulated union without any trick for the variant data. As outlined by original author, this a portable but the data type is 128-bits wide and enabling JIT compiler isn&apos;t possible (note that ia64 doesn&apos;t have a JIT compiler).

[2nd issue] On ia64, and probably other arches too, caches are not coherent automatically. As such fast malloc implementation in Source/JavaScriptCore/wtf/FastMalloc.cpp is totally buggy. This was work-around by using system malloc instead in ia64-use-system-malloc patch [5].

[3rd issue] On Linux ia64, and probably other arches too, memory pages are not necessarily 4K. ia64 can have 4K, 8K, 16K or 64K memory pages. Most (all?) Linux ia64 distributions come with 16K memory pages. This was fixed in large-mem-page patch [6]. It&apos;s my understanding that this issue has also been fixed in bug #80615, but I may be wrong.

So, we&apos;re left with first two issues, unless second issue is no more valid nowadays.

Since original patch author no more wants to invest time on debugging WebKit, I&apos;ve tried to port his work to WebKit 2.2.5, as it&apos;s the version we&apos;re trying to stabilize with GNOME 3.10 on Gentoo. It&apos;s not an easy task for me as (i) I&apos;m not the original patch author so don&apos;t know what he&apos;s got in mind and (ii) I&apos;m not a WebKit developer at all, so don&apos;t know how code has evolved or has been refactored since the Webkit 1.x days.

So, if a kind soul could have a look at the patches I&apos;ll post in this bugreport and give me advice to get WebKit JS engine fixed on ia64 or commonalize this work with other arches (is ia64 the only one using full 64-bit data path?), I would be really happy ;-)

     Émeric

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642750#96
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=694971#5
[3] https://bugzilla.mozilla.org/show_bug.cgi?id=589735
[4] https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=69;filename=01-ia64-wide-ptr.patch;att=1;bug=642750
[5] https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=69;filename=02-ia64-use-system-malloc.patch;att=2;bug=642750
[6] https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=large-mem-page.patch;att=1;bug=694971</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988734</commentid>
    <comment_count>1</comment_count>
      <attachid>226259</attachid>
    <who name="Émeric MASCHINO">emeric.maschino</who>
    <bug_when>2014-03-09 10:28:32 -0700</bug_when>
    <thetext>Created attachment 226259
First attempt at porting WebKit 1.8.1 01-ia64-wide-ptr.patch to WebKit 2.2.5

This is a port to WebKit 2.2.5 of 01-ia64-wide-ptr.patch originally created against WebKit 1.8.1 [1]. With this, all is not done, as I&apos;m still getting compilation errors in files that either didn&apos;t exist in the WebKit 1.8.1 era or weren&apos;t #defined USE(VALUE32_64) or USE(VALUE64) as now. It seems to me that some of the problematic files could be:
- Source/JavaScriptCore/runtime/CommonSlowPaths.h
- Source/JavaScriptCore/runtime/JSWrapperObject.h
- Source/JavaScriptCore/interpreter/CallFrame.h
- Source/JavaScriptCore/interpreter/CallFrameInlines.h

So, reviewing at the attached patch, if you can advise me for the above files (or other files too) to what I should do/fix, I&apos;m your man.

     Émeric


[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=69;filename=01-ia64-wide-ptr.patch;att=1;bug=642750</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999264</commentid>
    <comment_count>2</comment_count>
      <attachid>228977</attachid>
    <who name="Émeric MASCHINO">emeric.maschino</who>
    <bug_when>2014-04-09 13:17:10 -0700</bug_when>
    <thetext>Created attachment 228977
Second attempt at porting WebKit 1.8.1 01-ia64-wide-ptr.patch to WebKit 2.2.5

This new patch fixes the compilation problems of the initial patch port. As a quick test, MiniBrowser now starts up flawlessly, some URLs can even be browsed, others simply don&apos;t work (nothing happens when hitting the Enter key). As I&apos;m not a WebKit developer, it&apos;s entirely plausible that I&apos;m doing a lot of things wrong, but without more help from the WebKit community, it would be hard for me to go further. Indeed, in some places of my patch, it&apos;s really tries/guesses...

Currently, the impacted files are:
- API/APICast.h
- heap/CopiedBlock.h
- heap/Region.h
- interpreter/CallFrame.h
- interpreter/CallFrameInlines.h
- interpreter/Register.h
- llint/LLIntData.cpp
- llint/LLIntOfflineAsmConfig.h
- llint/LowLevelInterpreter.asm
- llint/LowLevelInterpreter.cpp
- runtime/JSCJSValue.h
- runtime/JSCJSValueInlines.h
- runtime/JSGlobalObjectFunctions.cpp
- runtime/JSWrapperObject.h
- wtf/Platform.h

Since the basic idea of this patch is to introduce another JSVALUE64W value type alongside JSVALUE32_64 and JSVALUE64, does this filelist sound OK or are they obvious missing participants?

One big difference between WebKit 1.8 and 2.x is the low-level interpreter that is used for C Loops when JIT is disabled (this is the case here for ia64). So I&apos;m wondering e.g. if I have to mimic the JSVALUE64W changes at the llint level as I seem to decipher a close pattern between the structures in JSCJSValues.h and LLIntData.cpp for the JSVALUE32_64 and JSVALUE64 cases. Or should I adapt the JSVALUE64W-defined structures in JSCJSValues.h to use the JSVALUE64 path in LLIntData.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138308</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-01 06:41:32 -0800</bug_when>
    <thetext>If you want a review on this, please submit a rebased patch with updated changelog files (using Tools/Scripts/prepare-ChangeLogs) and set the review? and commit-queue? Bugzilla flag on the attachment. See http://www.webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138320</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 08:41:27 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Hi,
&gt; 
&gt; Starting up a WebKit-based application, e.g. GNOME Epiphany or Yelp,
&gt; immediately segfaults.
&gt; 
&gt; Back in the WebKit 1.x days, patches for WebKit 1.8.1 on Debian were
&gt; provided to fix JS engine on ia64 [1][2]. Sadly, it seems to me that these
&gt; were never reported/merged upstream. They address three problems in WebKit
&gt; JS engine.
&gt; 
&gt; [1st issue] On ia64, USE(JSVALUE64) is true. From the source code comment,
&gt; JSVALUE64 path uses some sophisticated tricks in order to get everything in
&gt; a 64-bits wide data type. As outlined there, this will work as long the high
&gt; 16-bits of the addresses of any allocated memory are cleared. This is not
&gt; always the case on ia64. A similar issue was fixed on Mozilla JS engine [3].
&gt; Original 01-ia64-wide-ptr patch against WebKit 1.8.1 [4] fixed this issue by
&gt; defining a third JSVALUE64W option that was used on ia64 only. This path
&gt; uses an encapsulated union without any trick for the variant data. As
&gt; outlined by original author, this a portable but the data type is 128-bits
&gt; wide and enabling JIT compiler isn&apos;t possible (note that ia64 doesn&apos;t have a
&gt; JIT compiler).

You&apos;re going to have a really bad time with JSVALUE64W, particularly since it will always be an obscure configuration that nobody uses.  This is especially true since ia64 is effectively dead - it&apos;s hard to get help implementing and maintaining a port for unused architectures. I recommend trying to address this problem with a less invasive approach that is less work to implement and less work to maintain.

I suggest teaching our GC to allocate pages in a low memory range where the top 16 address bits are zero. I think that&apos;s what Mozilla did. 

You could also have a global variable that contains the global heap offset and turn each access into:

PtrBits = Value &amp; 0xffffffffffff
Ptr = HeapBase + PtrBits

This would still be a big change, so it&apos;s preferable to just find the right mmap trick to pin the heap in low memory. 

&gt; 
&gt; [2nd issue] On ia64, and probably other arches too, caches are not coherent
&gt; automatically. As such fast malloc implementation in
&gt; Source/JavaScriptCore/wtf/FastMalloc.cpp is totally buggy. This was
&gt; work-around by using system malloc instead in ia64-use-system-malloc patch
&gt; [5].

If this is true then you&apos;ll need to make lots of other changes in WebKit. WebKit assumes that the memory model is never weaker than what ARM would do. 

&gt; 
&gt; [3rd issue] On Linux ia64, and probably other arches too, memory pages are
&gt; not necessarily 4K. ia64 can have 4K, 8K, 16K or 64K memory pages. Most
&gt; (all?) Linux ia64 distributions come with 16K memory pages. This was fixed
&gt; in large-mem-page patch [6]. It&apos;s my understanding that this issue has also
&gt; been fixed in bug #80615, but I may be wrong.

I doubt that this is an issue anymore. I know we run with different page sizes on different platforms now. 

&gt; 
&gt; So, we&apos;re left with first two issues, unless second issue is no more valid
&gt; nowadays.
&gt; 
&gt; Since original patch author no more wants to invest time on debugging
&gt; WebKit, I&apos;ve tried to port his work to WebKit 2.2.5, as it&apos;s the version
&gt; we&apos;re trying to stabilize with GNOME 3.10 on Gentoo. It&apos;s not an easy task
&gt; for me as (i) I&apos;m not the original patch author so don&apos;t know what he&apos;s got
&gt; in mind and (ii) I&apos;m not a WebKit developer at all, so don&apos;t know how code
&gt; has evolved or has been refactored since the Webkit 1.x days.
&gt; 
&gt; So, if a kind soul could have a look at the patches I&apos;ll post in this
&gt; bugreport and give me advice to get WebKit JS engine fixed on ia64 or
&gt; commonalize this work with other arches (is ia64 the only one using full
&gt; 64-bit data path?), I would be really happy ;-)
&gt; 
&gt;      Émeric
&gt; 
&gt; [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642750#96
&gt; [2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=694971#5
&gt; [3] https://bugzilla.mozilla.org/show_bug.cgi?id=589735
&gt; [4]
&gt; https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=69;filename=01-ia64-wide-
&gt; ptr.patch;att=1;bug=642750
&gt; [5]
&gt; https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=69;filename=02-ia64-use-
&gt; system-malloc.patch;att=2;bug=642750
&gt; [6]
&gt; https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=large-mem-page.
&gt; patch;att=1;bug=694971</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139021</commentid>
    <comment_count>5</comment_count>
    <who name="Émeric MASCHINO">emeric.maschino</who>
    <bug_when>2015-11-03 12:28:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; If you want a review on this, please submit a rebased patch with updated
&gt; changelog files (using Tools/Scripts/prepare-ChangeLogs) and set the review?
&gt; and commit-queue? Bugzilla flag on the attachment. See
&gt; http://www.webkit.org/coding/contributing.html

Well, idea fast rather a quick informal review, or more appropriately implementation guidances, just as Filip Pizlo did in comment #4. From there, porting old WebKit 1.x Debian patches to WebKit 2.x doesn&apos;t seem the right way to go. Exactly the kind of orientation I was after.

Formal review will follow later, much later... when I actually rewrote something more suitable with current WebKit architecture/codebase.

Thanks anyway,

     Émeric</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139042</commentid>
    <comment_count>6</comment_count>
    <who name="Émeric MASCHINO">emeric.maschino</who>
    <bug_when>2015-11-03 13:14:36 -0800</bug_when>
    <thetext>(In reply to comment #4)

Thank you for taking the time to look at this.

&gt; You&apos;re going to have a really bad time with JSVALUE64W, particularly since
&gt; it will always be an obscure configuration that nobody uses.  This is
&gt; especially true since ia64 is effectively dead - it&apos;s hard to get help
&gt; implementing and maintaining a port for unused architectures. I recommend
&gt; trying to address this problem with a less invasive approach that is less
&gt; work to implement and less work to maintain.

Thank you for guidance here.

&gt; I suggest teaching our GC to allocate pages in a low memory range where the
&gt; top 16 address bits are zero. I think that&apos;s what Mozilla did. 

You&apos;re probably referring to [1], aren&apos;t you?

Mozilla&apos;s approach is thus to pass mmap an &quot;addr&quot; parameter that equals 0x0000070000000000 to ensure that all allocated pointers have their high 17 bits clear.

Would the same mmap trick work for WebKit&apos;s GC, adapting it to have the high 16 bits clear (rather than 17)?

&gt; If this is true then you&apos;ll need to make lots of other changes in WebKit.
&gt; WebKit assumes that the memory model is never weaker than what ARM would do. 

I can&apos;t be sure there, I&apos;m not a kernel developer.

Isn&apos;t there no other architecture in WebKit&apos;s codebase with a memory model as weak as ia64 that I can have a look at to discover how they deal with cache/memory coherency? I can see a lot of arches in CMakeLists.txt and Source/JavaScriptCore/CMakeLists.txt, but are they actually working properly or are in the same bad shape than ia64 currently?

&gt; I doubt that this is an issue anymore. I know we run with different page
&gt; sizes on different platforms now.

Are you referring to [2] there? From what I understand, choice of 4K and 16K page sizes are supported, but what about other values, such as 8K and 64K for Linux ia64?

Fortunately enough, most (all?) ia64 Linux distributions came configured by default with CONFIG_IA64_PAGE_SIZE_16KB=y back at the time, so are on a supported case w.r.t. bug #115502.

     Émeric


[1] http://hg.mozilla.org/mozilla-central/rev/9c15d0fb3e25
[2] http://trac.webkit.org/changeset/149472</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226259</attachid>
            <date>2014-03-09 10:28:32 -0700</date>
            <delta_ts>2014-04-09 13:17:10 -0700</delta_ts>
            <desc>First attempt at porting WebKit 1.8.1 01-ia64-wide-ptr.patch to WebKit 2.2.5</desc>
            <filename>webkit-gtk-2.2.5-ia64-wide-ptr.patch</filename>
            <type>text/plain</type>
            <size>18469</size>
            <attacher name="Émeric MASCHINO">emeric.maschino</attacher>
            
              <data encoding="base64">ZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvQVBJQ2FzdC5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQ
SUNhc3QuaAotLS0gd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgJMjAxNC0wMy0wNyAwNzo1NTo1Mi42NjY1NDkxMjUgKzAxMDAKKysrIHdlYmtp
dGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkyMDE0LTAzLTA0
IDIzOjM5OjM4Ljg3NDU5MjMxNyArMDEwMApAQCAtNTcsMTcgKzU3LDE3IEBAIGlubGluZSBKU0M6
OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnQKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpFeGVjU3RhdGUqPihjKTsKIH0KIAogaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUmVmIHYpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShKU1ZBTFVFNjRXKQogICAgIEpTQzo6SlNDZWxsKiBq
c0NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQzo6SlNDZWxsKj4oY29uc3RfY2FzdDxPcGFxdWVK
U1ZhbHVlKj4odikpOwogICAgIGlmICghanNDZWxsKQogICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChqc0NlbGwtPmlzQVBJVmFs
dWVXcmFwcGVyKCkpCiAgICAgICAgIHJlc3VsdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElWYWx1
ZVdyYXBwZXIqPihqc0NlbGwpLT52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0g
anNDZWxsOwpAQCAtNzksMTcgKzc5LDE3IEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSoKICAgICBpZiAocmVzdWx0LmlzQ2VsbCgpKQogICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuYXNDZWxsKCktPm1ldGhvZFRhYmxlKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0ZvckdDKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlUmVmIHYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShKU1ZBTFVFNjRX
KQogICAgIEpTQzo6SlNDZWxsKiBqc0NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQzo6SlNDZWxs
Kj4oY29uc3RfY2FzdDxPcGFxdWVKU1ZhbHVlKj4odikpOwogICAgIGlmICghanNDZWxsKQogICAg
ICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlKCk7CiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpz
Q2VsbDsKICNlbHNlCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6SlNWYWx1ZTo6ZGVj
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpFbmNvZGVkSlNWYWx1ZT4oY29uc3RfY2FzdDxPcGFx
dWVKU1ZhbHVlKj4odikpKTsKICNlbmRpZgogICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmlzQ2Vs
bCgpKQpAQCAtMTE4LDE3ICsxMTgsMTcgQEAgaW5saW5lIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkq
IHRvSlMoSlNQcgogCiBpbmxpbmUgSlNDOjpWTSogdG9KUyhKU0NvbnRleHRHcm91cFJlZiBnKQog
ewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6Vk0qPihjb25zdF9jYXN0PE9wYXF1
ZUpTQ29udGV4dEdyb3VwKj4oZykpOwogfQogCiBpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHYpCiB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KSB8fCBVU0UoSlNWQUxVRTY0VykKICAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghdi5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4oSlNDOjpqc0FQSVZhbHVlV3JhcHBlcihleGVj
LCB2KS5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4o
di5hc0NlbGwoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTVmFsdWU6OmVuY29kZSh2KSk7CmRp
ZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXIuaCB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyLmgKLS0tIHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCTIwMTQtMDMtMDcgMDc6NTc6MTYu
MTU0NDQxODkwICswMTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyLmgJMjAxNC0wMy0wNCAyMzo1MzoxMi44NjQ4NDE1MjMgKzAx
MDAKQEAgLTE3NSwyNyArMTc1LDM3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgQUxXQVlTX0lO
TElORSBJbmxpbmVDYWxsRnJhbWUqIFJlZ2lzdGVyOjphc0lubGluZUNhbGxGcmFtZSgpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gdS5pbmxpbmVDYWxsRnJhbWU7CiAgICAgfQogICAgICAg
ICAKICAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgUmVnaXN0ZXI6OnVuYm94ZWRJbnQzMigpIGNv
bnN0CiAgICAgeworI2lmIFVTRShKU1ZBTFVFNjRXKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKHUudmFsdWUpLmFzSW50MzIoKTsKKyNlbHNlCiAgICAgICAgIHJldHVybiBwYXlsb2Fk
KCk7CisjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgUmVnaXN0ZXI6OnVu
Ym94ZWRCb29sZWFuKCkgY29uc3QKICAgICB7CisjaWYgVVNFKEpTVkFMVUU2NFcpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS52YWx1ZSkuYXNCb29sZWFuKCk7CisjZWxzZQogICAg
ICAgICByZXR1cm4gISFwYXlsb2FkKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkgY29uc3QKICAgICB7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0VykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSh1LnZhbHVlKS5hc0NlbGwoKTsKKyNlbGlmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHJldHVybiB1LmVuY29kZWRWYWx1ZS5wdHI7CiAjZWxzZQogICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEpTQ2VsbCo+KHBheWxvYWQoKSk7CiAjZW5kaWYKICAgICB9CiAKICAgICBBTFdBWVNf
SU5MSU5FIGludDMyX3QgUmVnaXN0ZXI6OnBheWxvYWQoKSBjb25zdAogICAgIHsKZGlmZiAtcnAg
LXU4IHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuaCB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJMjAxNC0wMy0wNyAwNzo1NjozNS41NTQ0OTQwMjkgKzAx
MDAKKysrIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmgJMjAxNC0wMy0wOCAwMToxMzozNC4yMDY2MTIyMzkgKzAxMDAKQEAgLTcwLDE4ICs3
MCwxOSBAQCBzdHJ1Y3QgRHVtcENvbnRleHQ7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiBzdHJ1Y3Qg
TWV0aG9kVGFibGU7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNl
OwogCiBlbnVtIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgeyBOb1ByZWZlcmVuY2UsIFByZWZlck51
bWJlciwgUHJlZmVyU3RyaW5nIH07CiBlbnVtIEVDTUFNb2RlIHsgU3RyaWN0TW9kZSwgTm90U3Ry
aWN0TW9kZSB9OwogCi10eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7Ci0gICAgCisKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KSB8fCBVU0UoSlNWQUxVRTY0KQorCiB1bmlvbiBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yIHsKICAgICBpbnQ2NF90IGFzSW50NjQ7CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBkb3VibGUgYXNEb3VibGU7CiAjZWxpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTQ2Vs
bCogcHRyOwogI2VuZGlmCiAgICAgICAgIApAQCAtOTMsMTYgKzk0LDQ3IEBAIHVuaW9uIEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IgewogI2Vsc2UKICAgICBzdHJ1Y3QgewogICAgICAgICBpbnQzMl90
IHBheWxvYWQ7CiAgICAgICAgIGludDMyX3QgdGFnOwogICAgIH0gYXNCaXRzOwogI2VuZGlmCiB9
OwogCisjZWxpZiBVU0UoSlNWQUxVRTY0VykKKworc3RydWN0IEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IgeworICAgIHVuc2lnbmVkIGNoYXIgdGFnOworICAgIHVuaW9uIHsKKyAgICAgICAgaW50NjRf
dCBhc0ludDY0OworICAgICAgICBkb3VibGUgYXNEb3VibGU7CisgICAgICAgIEpTQ2VsbCogcHRy
OworCisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBp
bnQzMl90IHRhZzsKKyAgICAgICAgICAgIGludDMyX3QgcGF5bG9hZDsKKyAgICAgICAgfSBhc0Jp
dHM7CisjZWxzZQorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgaW50MzJfdCBwYXlsb2Fk
OworICAgICAgICAgICAgaW50MzJfdCB0YWc7CisgICAgICAgIH0gYXNCaXRzOworI2VuZGlmCisg
ICAgfTsKK307CisKKyNlbmRpZgorCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgVVNFKEpTVkFM
VUU2NCkKK3R5cGVkZWYgaW50NjRfdCBFbmNvZGVkSlNWYWx1ZTsKKyNlbGlmIFVTRShKU1ZBTFVF
NjRXKQordHlwZWRlZiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIEVuY29kZWRKU1ZhbHVlOworI2Vu
ZGlmCisKIC8vIFRoaXMgaW1wbGVtZW50cyBUb0ludDMyLCBkZWZpbmVkIGluIEVDTUEtMjYyIDku
NS4KIEpTX0VYUE9SVF9QUklWQVRFIGludDMyX3QgdG9JbnQzMihkb3VibGUpOwogCiAvLyBUaGlz
IGltcGxlbWVudHMgVG9VSW50MzIsIGRlZmluZWQgaW4gRUNNQS0yNjIgOS42LgogaW5saW5lIHVp
bnQzMl90IHRvVUludDMyKGRvdWJsZSBudW1iZXIpCiB7CiAgICAgLy8gQXMgY29tbWVudGVkIGlu
IHRoZSBzcGVjLCB0aGUgb3BlcmF0aW9uIG9mIFRvSW50MzIgYW5kIFRvVWludDMyIG9ubHkgZGlm
ZmVyCiAgICAgLy8gaW4gaG93IHRoZSByZXN1bHQgaXMgaW50ZXJwcmV0ZWQ7IHNlZSBOT1RFcyBp
biBzZWN0aW9ucyA5LjUgYW5kIDkuNi4KQEAgLTMwOSwxNiArMzQxLDE4IEBAIHByaXZhdGU6CiAg
ICAgLy8gdmFsdWVzLgogICAgIGV4cGxpY2l0IEpTVmFsdWUoaW50MzJfdCB0YWcsIGludDMyX3Qg
cGF5bG9hZCk7CiAjZW5kaWYKIAogI2VsaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvKgogICAgICAq
IE9uIDY0LWJpdCBwbGF0Zm9ybXMgVVNFKEpTVkFMVUU2NCkgc2hvdWxkIGJlIGRlZmluZWQsIGFu
ZCB3ZSB1c2UgYSBOYU4tZW5jb2RlZAogICAgICAqIGZvcm0gZm9yIGltbWVkaWF0ZXMuCisgICAg
ICogSWYgdGhlIGhpZ2hlc3QgMTYgYml0cyBvZiBwb2ludGVycyBhcmVuJ3QgY2xlYXJlZCBvbiB0
aGUgcGxhdGZvcm0sIFVTRShKU1ZBTFVFNjRXKQorICAgICAqIHNob3VsZCBiZSBkZWZpbmVkIGlu
c3RlYWQuIFNlZSBiZWxvdy4KICAgICAgKgogICAgICAqIFRoZSBlbmNvZGluZyBtYWtlcyB1c2Ug
b2YgdW51c2VkIE5hTiBzcGFjZSBpbiB0aGUgSUVFRTc1NCByZXByZXNlbnRhdGlvbi4gIEFueSB2
YWx1ZQogICAgICAqIHdpdGggdGhlIHRvcCAxMyBiaXRzIHNldCByZXByZXNlbnRzIGEgUU5hTiAo
d2l0aCB0aGUgc2lnbiBiaXQgc2V0KS4gIFFOYU4gdmFsdWVzCiAgICAgICogY2FuIGVuY29kZSBh
IDUxLWJpdCBwYXlsb2FkLiAgSGFyZHdhcmUgcHJvZHVjZWQgYW5kIEMtbGlicmFyeSBwYXlsb2Fk
cyB0eXBpY2FsbHkKICAgICAgKiBoYXZlIGEgcGF5bG9hZCBvZiB6ZXJvLiAgV2UgYXNzdW1lIHRo
YXQgbm9uLXplcm8gcGF5bG9hZHMgYXJlIGF2YWlsYWJsZSB0byBlbmNvZGUKICAgICAgKiBwb2lu
dGVyIGFuZCBpbnRlZ2VyIHZhbHVlcy4gIFNpbmNlIGFueSA2NC1iaXQgYml0IHBhdHRlcm4gd2hl
cmUgdGhlIHRvcCAxNSBiaXRzIGFyZQogICAgICAqIGFsbCBzZXQgcmVwcmVzZW50cyBhIE5hTiB3
aXRoIGEgbm9uLXplcm8gcGF5bG9hZCwgd2UgY2FuIHVzZSB0aGlzIHNwYWNlIGluIHRoZSBOYU4K
ICAgICAgKiByYW5nZXMgdG8gZW5jb2RlIG90aGVyIHZhbHVlcyAoaG93ZXZlciB0aGVyZSBhcmUg
YWxzbyBvdGhlciByYW5nZXMgb2YgTmFOIHNwYWNlIHRoYXQKQEAgLTM4Niw0MCArNDIwLDEzNyBA
QCBwcml2YXRlOgogCiAgICAgLy8gVGhlc2Ugc3BlY2lhbCB2YWx1ZXMgYXJlIG5ldmVyIHZpc2li
bGUgdG8gSmF2YVNjcmlwdCBjb2RlOyBFbXB0eSBpcyB1c2VkIHRvIHJlcHJlc2VudAogICAgIC8v
IEFycmF5IGhvbGVzLCBhbmQgZm9yIHVuaW5pdGlhbGl6ZWQgSlNWYWx1ZXMuIERlbGV0ZWQgaXMg
dXNlZCBpbiBoYXNoIHRhYmxlIGNvZGUuCiAgICAgLy8gVGhlc2UgdmFsdWVzIHdvdWxkIG1hcCB0
byBjZWxsIHR5cGVzIGluIHRoZSBKU1ZhbHVlIGVuY29kaW5nLCBidXQgbm90IHZhbGlkIEdDIGNl
bGwKICAgICAvLyBwb2ludGVyIHNob3VsZCBoYXZlIGVpdGhlciBvZiB0aGVzZSB2YWx1ZXMgKEVt
cHR5IGlzIG51bGwsIGRlbGV0ZWQgaXMgYXQgYW4gaW52YWxpZAogICAgIC8vIGFsaWdubWVudCBm
b3IgYSBHQyBjZWxsLCBhbmQgaW4gdGhlIHplcm8gcGFnZSkuCiAgICAgI2RlZmluZSBWYWx1ZUVt
cHR5ICAgMHgwbGwKICAgICAjZGVmaW5lIFZhbHVlRGVsZXRlZCAweDRsbAorCisjZWxpZiBVU0Uo
SlNWQUxVRTY0VykKKyAgICAvKgorICAgICAqIE9uIDY0LWJpdCBwbGF0Zm9ybXMgVVNFKEpTVkFM
VUU2NFcpIHNob3VsZCBiZSBkZWZpbmVkIGlmIHBvaW50ZXJzIG5lZWQgdGhlaXIKKyAgICAgKiBl
bnRpcmUgNjQtYml0cyB3aWR0aCwgaW5jbHVkaW5nIHRoZSBoaWdoZXN0IDE2LWJpdHMuIFRoaXMg
aXMgdGhlIGNhc2UgaWYgdGhlCisgICAgICogbWVtb3J5IG1hbmFnZW1lbnQgbWFwcyBhbGxvY2F0
ZWQgbWVtb3J5IHRvIGhpZ2ggYWRkcmVzc2VzIG9uIHRoZSBwbGF0Zm9ybS4KKyAgICAgKgorICAg
ICAqIFRoZSBlbmNvZGluZyBtYWtlcyB1c2Ugb2YgYW4gZW5jYXBzdWxhdGVkIHVuaW9uIHdpdGhv
dXQgYW55IHRyaWNrIGluIGEgcG9ydGFibGUgd2F5LgorICAgICAqIFNpbmNlIHRoZSBlbmNvZGVk
IHZhbHVlIGlzIGxhcmdlciB0aGFuIDY0LWJpdHMsIHRoaXMgaXNuJ3QgdmVyeSBlZmZpY2llbnQu
IEVuYWJsaW5nCisgICAgICogdGhlIEpJVCBpc24ndCBwb3NzaWJsZSBlaXRoZXIuCisgICAgICoK
KyAgICAgKiBUaGUgdG9wIDItYml0cyBvZiB0YWcgZGVub3RlIHRoZSB0eXBlIG9mIHRoZSBlbmNv
ZGVkIEpTVmFsdWU6CisgICAgICogICAgIFBvaW50ZXIgMHgwMAorICAgICAqICAgICBEb3VibGUg
IDB4NDAKKyAgICAgKiAgICAgSW50ZWdlciAweGMwCisgICAgICoKKyAgICAgKiBUaGUgdGFnIDB4
MDAgZGVub3RlcyBhIHBvaW50ZXIsIG9yIGFub3RoZXIgZm9ybSBvZiB0YWdnZWQgaW1tZWRpYXRl
LiBCb29sZWFuLAorICAgICAqIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHJlcHJlc2Vu
dGVkIGJ5IHRoZSBib3R0b20gNS1iaXRzIG9mIHRhZ3M6CisgICAgICoKKyAgICAgKiAgICAgUG9p
bnRlcjogICAweDEwCisgICAgICogICAgIEZhbHNlOiAgICAgMHgwNgorICAgICAqICAgICBUcnVl
OiAgICAgIDB4MDcKKyAgICAgKiAgICAgVW5kZWZpbmVkOiAweDBhCisgICAgICogICAgIE51bGw6
ICAgICAgMHgwMgorICAgICAqCisgICAgICogVGhlc2UgdmFsdWVzIGhhdmUgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzOgorICAgICAqIC0gQml0IDEgKFRhZ0JpdFR5cGVPdGhlcikgaXMgc2V0IGZv
ciBhbGwgZm91ciB2YWx1ZXMsIGFsbG93aW5nIHJlYWwgcG9pbnRlcnMgdG8gYmUKKyAgICAgKiAg
IHF1aWNrbHkgZGlzdGluZ3Vpc2hlZCBmcm9tIGFsbCBpbW1lZGlhdGUgdmFsdWVzLCBpbmNsdWRp
bmcgdGhlc2UgaW52YWxpZCBwb2ludGVycy4KKyAgICAgKiAtIFdpdGggYml0IDMgaXMgbWFza2Vk
IG91dCAoVGFnQml0VW5kZWZpbmVkKSBVbmRlZmluZWQgYW5kIE51bGwgc2hhcmUgdGhlIAorICAg
ICAqICAgc2FtZSB2YWx1ZSwgYWxsb3dpbmcgbnVsbCAmIHVuZGVmaW5lZCB0byBiZSBxdWlja2x5
IGRldGVjdGVkLgorICAgICAqCisgICAgICogTm8gdmFsaWQgSlNWYWx1ZSB3aWxsIGhhdmUgdGhl
IGJpdCBwYXR0ZXJuIDB4MCwgdGhpcyBpcyB1c2VkIHRvIHJlcHJlc2VudCBhcnJheQorICAgICAq
IGhvbGVzLCBhbmQgYXMgYSBDKysgJ25vIHZhbHVlJyByZXN1bHQgKGUuZy4gSlNWYWx1ZSgpIGhh
cyBhbiBpbnRlcm5hbCB2YWx1ZSBvZiAwKS4KKyAgICAgKi8KKworICAgICNkZWZpbmUgVGFnVHlw
ZU1hc2sgICAweGMwdQorICAgICNkZWZpbmUgVGFnVHlwZVB0ciAgICAweDAwdQorICAgICNkZWZp
bmUgVGFnVHlwZURvdWJsZSAweDQwdQorICAgICNkZWZpbmUgVGFnVHlwZU51bWJlciAweGMwdQor
CisgICAgLy8gQWxsIG5vbi1udW1lcmljIChib29sLCBudWxsLCB1bmRlZmluZWQpIGltbWVkaWF0
ZXMgaGF2ZSBiaXQgMiBzZXQuCisgICAgI2RlZmluZSBUYWdCaXRUeXBlT3RoZXIgMHgwMnUKKyAg
ICAjZGVmaW5lIFRhZ0JpdEJvb2wgICAgICAweDA0dQorICAgICNkZWZpbmUgVGFnQml0VW5kZWZp
bmVkIDB4MDh1CisgICAgI2RlZmluZSBUYWdCaXRWYWxpZFB0ciAgMHgxMHUKKyAgICAvLyBDb21i
aW5lZCBpbnRlZ2VyIHZhbHVlIGZvciBub24tbnVtZXJpYyBpbW1lZGlhdGVzLgorICAgICNkZWZp
bmUgVmFsdWVWYWxpZFB0ciAgKFRhZ1R5cGVQdHIgfCBUYWdCaXRWYWxpZFB0cikKKyAgICAjZGVm
aW5lIFZhbHVlRmFsc2UgICAgIChUYWdUeXBlUHRyIHwgVGFnQml0VHlwZU90aGVyIHwgVGFnQml0
Qm9vbCB8IGZhbHNlKQorICAgICNkZWZpbmUgVmFsdWVUcnVlICAgICAgKFRhZ1R5cGVQdHIgfCBU
YWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgdHJ1ZSkKKyAgICAjZGVmaW5lIFZhbHVlVW5k
ZWZpbmVkIChUYWdUeXBlUHRyIHwgVGFnQml0VHlwZU90aGVyIHwgVGFnQml0VW5kZWZpbmVkKQor
ICAgICNkZWZpbmUgVmFsdWVOdWxsICAgICAgKFRhZ1R5cGVQdHIgfCBUYWdCaXRUeXBlT3RoZXIp
CisKKyAgICAvLyBUYWdNYXNrIGlzIHVzZWQgdG8gY2hlY2sgZm9yIGFsbCB0eXBlcyBvZiBpbW1l
ZGlhdGUgdmFsdWVzIChlaXRoZXIgbnVtYmVyIG9yICdvdGhlcicpLgorICAgICNkZWZpbmUgVGFn
TWFzayAoVGFnVHlwZU1hc2sgfCBUYWdCaXRUeXBlT3RoZXIpCisKKyAgICAvLyBUaGVzZSBzcGVj
aWFsIHZhbHVlcyBhcmUgbmV2ZXIgdmlzaWJsZSB0byBKYXZhU2NyaXB0IGNvZGU7IEVtcHR5IGlz
IHVzZWQgdG8gcmVwcmVzZW50CisgICAgLy8gQXJyYXkgaG9sZXMsIGFuZCBmb3IgdW5pbml0aWFs
aXplZCBKU1ZhbHVlcy4gRGVsZXRlZCBpcyB1c2VkIGluIGhhc2ggdGFibGUgY29kZS4KKyAgICAv
LyBUaGVzZSB2YWx1ZXMgd291bGQgbWFwIHRvIGNlbGwgdHlwZXMgaW4gdGhlIEpTVmFsdWUgZW5j
b2RpbmcsIGJ1dCBub3QgdmFsaWQgR0MgY2VsbAorICAgIC8vIHBvaW50ZXIgc2hvdWxkIGhhdmUg
ZWl0aGVyIG9mIHRoZXNlIHZhbHVlcyAoRW1wdHkgaXMgbnVsbCwgZGVsZXRlZCBpcyBhdCBhbiBp
bnZhbGlkCisgICAgLy8gYWxpZ25tZW50IGZvciBhIEdDIGNlbGwsIGFuZCBpbiB0aGUgemVybyBw
YWdlKS4KKyAgICAjZGVmaW5lIFZhbHVlRW1wdHkgICAweDB1CisgICAgI2RlZmluZSBWYWx1ZURl
bGV0ZWQgMHg0dQogI2VuZGlmCiAKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHU7CiB9Owog
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgVVNFKEpTVkFMVUU2NCkKIHR5cGVkZWYgSW50SGFz
aDxFbmNvZGVkSlNWYWx1ZT4gRW5jb2RlZEpTVmFsdWVIYXNoOwogCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEVuY29k
ZWRKU1ZhbHVlPiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZh
bHNlOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7IH0KICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUmIHNsb3QpIHsgc2xvdCA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpOyB9CiAgICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkp
OyB9CiB9OwogI2Vsc2UKIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZh
bHVlKEVuY29kZWRKU1ZhbHVlJiBzbG90KSB7IHNsb3QgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShKU1ZhbHVlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKTsgfQogICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKTsgfQog
fTsKICNlbmRpZgogCisjZWxpZiBVU0UoSlNWQUxVRTY0VykKK3N0cnVjdCBFbmNvZGVkSlNWYWx1
ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEVuY29kZWRKU1ZhbHVlJiB2
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChzdGF0aWNfY2FzdDx1aW50NjRf
dD4oV1RGOjppbnRIYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHYudGFnKSkpIDw8IDMyCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV1RGOjppbnRI
YXNoKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2LmFzSW50NjQpKSk7CisgICAgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEVuY29kZWRKU1ZhbHVlJiBhLCBjb25zdCBFbmNvZGVkSlNWYWx1
ZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYSkgPT0gSlNWYWx1
ZTo6ZGVjb2RlKGIpOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4geworICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
ZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOyB9CisgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlJiBzbG90KSB7
IHNsb3QgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVEZWxldGVk
VmFsdWUpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpID09IEpTVmFsdWUoSlNWYWx1
ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQorfTsKKyNlbmRpZgorCiB0eXBlZGVmIEhhc2hN
YXA8RW5jb2RlZEpTVmFsdWUsIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRK
U1ZhbHVlSGFzaFRyYWl0cz4gSlNWYWx1ZU1hcDsKIAogLy8gU3RhbmQtYWxvbmUgaGVscGVyIGZ1
bmN0aW9ucy4KKyNpZiBVU0UoSlNWQUxVRTY0VykKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEVuY29kZWRKU1ZhbHVlJiAgYSwgY29uc3QgRW5jb2RlZEpTVmFsdWUmIGIpCisgICAg
eworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGEpID09IEpTVmFsdWU6OmRlY29kZShi
KTsKKyAgICB9OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbmNvZGVkSlNW
YWx1ZSYgIGEsIGNvbnN0IEVuY29kZWRKU1ZhbHVlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShhKSAhPSBKU1ZhbHVlOjpkZWNvZGUoYik7CisgICAgfTsKKyNlbmRp
ZgorCiBpbmxpbmUgSlNWYWx1ZSBqc051bGwoKQogewogICAgIHJldHVybiBKU1ZhbHVlKEpTVmFs
dWU6OkpTTnVsbCk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIGpzVW5kZWZpbmVkKCkKIHsKICAgICBy
ZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU1VuZGVmaW5lZCk7CmRpZmYgLXJwIC11OCB3ZWJraXRn
dGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5s
aW5lcy5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCTIwMTQtMDMtMDcgMDc6NTY6NDMuNTk0
NDgzNzA0ICswMTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkyMDE0LTAzLTA4IDAxOjE1OjE3LjgwMjM0ODAwOSAr
MDEwMApAQCAtMTM4LDE2ICsxMzgsMTcgQEAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoZG91Ymxl
IGQpCiAgICAgY29uc3QgaW50MzJfdCBhc0ludDMyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oZCk7
CiAgICAgaWYgKGFzSW50MzIgIT0gZCB8fCAoIWFzSW50MzIgJiYgc3RkOjpzaWduYml0KGQpKSkg
eyAvLyB0cnVlIGZvciAtMC4wCiAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJs
ZSwgZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGQpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShK
U1ZBTFVFNjQpCiBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlLnUuYXNJbnQ2NDsKIH0KIAogaW5saW5lIEpTVmFs
dWUgSlNWYWx1ZTo6ZGVjb2RlKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKQogewogICAg
IEpTVmFsdWUgdjsKQEAgLTQ4OSwxNiArNDkwLDE5NSBAQCBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpp
c051bWJlcigpIGNvbnN0CiBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoaXNDZWxsKCkpOwogICAgIHJldHVybiB1LnB0cjsKIH0KIAog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKKyNlbGlmIFVTRShKU1ZBTFVFNjRXKQorCitpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHZhbHVlLnU7Cit9CisKK2lubGluZSBKU1ZhbHVlIEpTVmFsdWU6OmRlY29kZShFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkSlNWYWx1ZSkKK3sKKyAgICBKU1ZhbHVlIHY7CisgICAgdi51ID0g
ZW5jb2RlZEpTVmFsdWU7CisgICAgcmV0dXJuIHY7Cit9CisKK2lubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKCkKK3sKKyAgICB1LnRhZyA9IFZhbHVlRW1wdHk7CisgICAgdS5wdHIgPSAwOworfQorCitp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU051bGxUYWcpCit7CisgICAgdS50YWcgPSBWYWx1ZU51
bGw7CisgICAgdS5wdHIgPSAwOworfQorCitpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1VuZGVm
aW5lZFRhZykKK3sKKyAgICB1LnRhZyA9IFZhbHVlVW5kZWZpbmVkOworICAgIHUucHRyID0gMDsK
K30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNUcnVlVGFnKQoreworICAgIHUudGFnID0g
VmFsdWVUcnVlOworICAgIHUucHRyID0gMDsKK30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
SlNGYWxzZVRhZykKK3sKKyAgICB1LnRhZyA9IFZhbHVlRmFsc2U7CisgICAgdS5wdHIgPSAwOwor
fQorCitpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCit7
CisgICAgdS50YWcgPSBWYWx1ZURlbGV0ZWQ7CisgICAgdS5wdHIgPSAwOworfQorCitpbmxpbmUg
SlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICB1
LnRhZyA9IFZhbHVlVmFsaWRQdHI7CisgICAgZWxzZQorICAgICAgICB1LnRhZyA9IFZhbHVlRW1w
dHk7CisgICAgdS5wdHIgPSBwdHI7Cit9CisKK2lubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0
IEpTQ2VsbCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIHUudGFnID0gVmFsdWVWYWxp
ZFB0cjsKKyAgICBlbHNlCisgICAgICAgIHUudGFnID0gVmFsdWVFbXB0eTsKKyAgICB1LnB0ciA9
IGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKTsKK30KKworaW5saW5lIEpTVmFsdWU6Om9wZXJhdG9y
IGJvb2woKSBjb25zdAoreworICAgIEFTU0VSVCh1LnRhZyAhPSBWYWx1ZURlbGV0ZWQpOworICAg
IHJldHVybiB1LnRhZyAhPSBWYWx1ZUVtcHR5OworfQorCitpbmxpbmUgYm9vbCBKU1ZhbHVlOjpv
cGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB1LnRh
ZyA9PSBvdGhlci51LnRhZworICAgICAgICAgICAmJiB1LnB0ciA9PSBvdGhlci51LnB0cjsKK30K
KworaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gdS50YWcgIT0gb3RoZXIudS50YWcKKyAgICAgICAgICAgfHwg
dS5wdHIgIT0gb3RoZXIudS5wdHI7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6OmlzRW1wdHko
KSBjb25zdAoreworICAgIHJldHVybiB1LnRhZyA9PSBWYWx1ZUVtcHR5OworfQorCitpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHUudGFnID09
IFZhbHVlVW5kZWZpbmVkOworfQorCitpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25z
dAoreworICAgIHJldHVybiB1LnRhZyA9PSBWYWx1ZU51bGw7Cit9CisKK2lubGluZSBib29sIEpT
VmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNVbmRlZmlu
ZWQoKSB8fCBpc051bGwoKTsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNDZWxsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKHUudGFnICYgVGFnTWFzaykgPT0gVGFnVHlwZVB0cjsKK30KKwor
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICh1LnRh
ZyAmIFRhZ1R5cGVNYXNrKSA9PSBUYWdUeXBlTnVtYmVyOworfQorCitpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHUudGFnID09IFRhZ1R5cGVEb3Vi
bGU7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHUudGFnID09IFZhbHVlVHJ1ZTsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNGYWxz
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHUudGFnID09IFZhbHVlRmFsc2U7Cit9CisKK2lubGlu
ZSBpbnQzMl90IEpTVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIEFTU0VSVChpc0ludDMy
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih1LmFzSW50NjQpOworfQorCitp
bmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNE
b3VibGUoKSk7CisgICAgcmV0dXJuIHUuYXNEb3VibGU7Cit9CisKK0FMV0FZU19JTkxJTkUgSlND
ZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAoreworICAgIEFTU0VSVChpc0NlbGwoKSk7Cisg
ICAgcmV0dXJuIHUucHRyOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5j
b2RlQXNEb3VibGVUYWcsIGRvdWJsZSBkKQoreworICAgIHUudGFnID0gVGFnVHlwZURvdWJsZTsK
KyAgICB1LmFzRG91YmxlID0gZDsKK30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkp
Cit7CisgICAgdS50YWcgPSBUYWdUeXBlTnVtYmVyOworICAgIHUuYXNJbnQ2NCA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihpKTsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1iZXIoKSBj
b25zdAoreworICAgIHJldHVybiAodS50YWcgJiBUYWdUeXBlTWFzaykgIT0gVGFnVHlwZVB0cjsK
K30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKCB1LnRhZyAmIFRhZ0JpdEJvb2wgKSA/IHRydWUgOiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgSlNWYWx1ZTo6YXNCb29sZWFuKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNCb29sZWFuKCkp
OworICAgIHJldHVybiB1LnRhZyA9PSBWYWx1ZVRydWU7Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0VykKKwogaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNTdHJpbmcoKSBjb25zdAogewogICAg
IHJldHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKS0+aXNTdHJpbmcoKTsKIH0KIAogaW5saW5lIGJv
b2wgSlNWYWx1ZTo6aXNQcmltaXRpdmUoKSBjb25zdAogewogICAgIHJldHVybiAhaXNDZWxsKCkg
fHwgYXNDZWxsKCktPmlzU3RyaW5nKCk7CmRpZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3Jp
Zy9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCTIwMTQtMDMtMDcgMDc6NTc6NTUuNTMwMzkxMzM2ICswMTAwCisrKyB3ZWJraXRndGst
Mi4yLjUvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkyMDE0LTAzLTA1IDAxOjE2OjE3LjkzNjIy
MTM3MCArMDEwMApAQCAtNjgxLDI4ICs2ODEsMzMgQEAKICNkZWZpbmUgRU5BQkxFX0NPREVCTE9D
S19TQU1QTElORyAwCiAjaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykgJiYgIUVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAjZXJyb3IgIkNPREVCTE9DS19TQU1QTElORyByZXF1aXJlcyBPUENP
REVfU0FNUExJTkciCiAjZW5kaWYKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKSB8fCBFTkFC
TEUoU0FNUExJTkdfRkxBR1MpIHx8IEVOQUJMRShTQU1QTElOR19SRUdJT05TKQogI2RlZmluZSBF
TkFCTEVfU0FNUExJTkdfVEhSRUFEIDEKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoV1RGX1VTRV9K
U1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KQotI2lmIChDUFUoWDg2
XzY0KSAmJiAoT1MoVU5JWCkgfHwgT1MoV0lORE9XUykpKSBcCi0gICAgfHwgKENQVShJQTY0KSAm
JiAhQ1BVKElBNjRfMzIpKSBcCisjaWYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjRXKSBcCisg
ICAgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFNjQpIFwKKyAgICAmJiAhZGVmaW5lZChXVEZf
VVNFX0pTVkFMVUUzMl82NCkKKyNpZiAoQ1BVKElBNjQpICYmICFDUFUoSUE2NF8zMikpCisjZGVm
aW5lIFdURl9VU0VfSlNWQUxVRTY0VyAxCisjZWxpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgp
IHx8IE9TKFdJTkRPV1MpKSkgXAogICAgIHx8IENQVShBTFBIQSkgXAogICAgIHx8IENQVShTUEFS
QzY0KSBcCiAgICAgfHwgQ1BVKFMzOTBYKSBcCiAgICAgfHwgQ1BVKFBQQzY0KQogI2RlZmluZSBX
VEZfVVNFX0pTVkFMVUU2NCAxCiAjZWxzZQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMl82NCAx
CiAjZW5kaWYKLSNlbmRpZiAvKiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkgJiYgIWRlZmlu
ZWQoV1RGX1VTRV9KU1ZBTFVFMzJfNjQpICovCisjZW5kaWYgLyogIWRlZmluZWQoV1RGX1VTRV9K
U1ZBTFVFNjRXKQorICAgICAgICAgICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KQorICAg
ICAgICAgICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KSAqLwogCiAvKiBEaXNhYmxl
IHRoZSBKSVQgb24gdmVyc2lvbnMgb2YgR0NDIHByaW9yIHRvIDQuMSAqLwogI2lmICFkZWZpbmVk
KEVOQUJMRV9KSVQpICYmIENPTVBJTEVSKEdDQykgJiYgIUdDQ19WRVJTSU9OX0FUX0xFQVNUKDQs
IDEsIDApCiAjZGVmaW5lIEVOQUJMRV9KSVQgMAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFC
TEVfSklUKSAmJiBDUFUoU0g0KSAmJiBQTEFURk9STShRVCkKICNkZWZpbmUgRU5BQkxFX0pJVCAx
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228977</attachid>
            <date>2014-04-09 13:17:10 -0700</date>
            <delta_ts>2014-04-09 13:17:10 -0700</delta_ts>
            <desc>Second attempt at porting WebKit 1.8.1 01-ia64-wide-ptr.patch to WebKit 2.2.5</desc>
            <filename>webkit-gtk-2.2.5-ia64-wide-ptr.patch</filename>
            <type>text/plain</type>
            <size>40160</size>
            <attacher name="Émeric MASCHINO">emeric.maschino</attacher>
            
              <data encoding="base64">ZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvQVBJQ2FzdC5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQ
SUNhc3QuaAotLS0gd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgJMjAxNC0wMy0wNyAwNzo1NTo1Mi42NjY1NDkxMjUgKzAxMDAKKysrIHdlYmtp
dGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkyMDE0LTAzLTA0
IDIzOjM5OjM4Ljg3NDU5MjMxNyArMDEwMApAQCAtNTcsMTcgKzU3LDE3IEBAIGlubGluZSBKU0M6
OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnQKIHsKICAgICBBU1NFUlQoYyk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpFeGVjU3RhdGUqPihjKTsKIH0KIAogaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlUmVmIHYpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShKU1ZBTFVFNjRXKQogICAgIEpTQzo6SlNDZWxsKiBq
c0NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQzo6SlNDZWxsKj4oY29uc3RfY2FzdDxPcGFxdWVK
U1ZhbHVlKj4odikpOwogICAgIGlmICghanNDZWxsKQogICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChqc0NlbGwtPmlzQVBJVmFs
dWVXcmFwcGVyKCkpCiAgICAgICAgIHJlc3VsdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElWYWx1
ZVdyYXBwZXIqPihqc0NlbGwpLT52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0g
anNDZWxsOwpAQCAtNzksMTcgKzc5LDE3IEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSoKICAgICBpZiAocmVzdWx0LmlzQ2VsbCgpKQogICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuYXNDZWxsKCktPm1ldGhvZFRhYmxlKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0ZvckdDKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlUmVmIHYpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShKU1ZBTFVFNjRX
KQogICAgIEpTQzo6SlNDZWxsKiBqc0NlbGwgPSByZWludGVycHJldF9jYXN0PEpTQzo6SlNDZWxs
Kj4oY29uc3RfY2FzdDxPcGFxdWVKU1ZhbHVlKj4odikpOwogICAgIGlmICghanNDZWxsKQogICAg
ICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlKCk7CiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpz
Q2VsbDsKICNlbHNlCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6SlNWYWx1ZTo6ZGVj
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpFbmNvZGVkSlNWYWx1ZT4oY29uc3RfY2FzdDxPcGFx
dWVKU1ZhbHVlKj4odikpKTsKICNlbmRpZgogICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmlzQ2Vs
bCgpKQpAQCAtMTE4LDE3ICsxMTgsMTcgQEAgaW5saW5lIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkq
IHRvSlMoSlNQcgogCiBpbmxpbmUgSlNDOjpWTSogdG9KUyhKU0NvbnRleHRHcm91cFJlZiBnKQog
ewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6Vk0qPihjb25zdF9jYXN0PE9wYXF1
ZUpTQ29udGV4dEdyb3VwKj4oZykpOwogfQogCiBpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHYpCiB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KSB8fCBVU0UoSlNWQUxVRTY0VykKICAgICBpZiAoIXYp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghdi5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4oSlNDOjpqc0FQSVZhbHVlV3JhcHBlcihleGVj
LCB2KS5hc0NlbGwoKSk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4o
di5hc0NlbGwoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTVmFsdWU6OmVuY29kZSh2KSk7CmRp
ZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9jay5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9jay5oCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCTIwMTQtMDItMTcgMTI6MjQ6MDIuMDAwMDAwMDAwICsw
MTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
QmxvY2suaAkyMDE0LTAzLTIzIDAwOjM1OjEzLjY3MzE2OTI4NyArMDEwMApAQCAtMTA2LDE3ICsx
MDYsMTcgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRCbG9jazo6Y3JlYXRlKAogewogICAg
IENvcGllZEJsb2NrKiBuZXdCbG9jayA9IGNyZWF0ZU5vWmVyb0ZpbGwoYmxvY2spOwogICAgIG5l
d0Jsb2NrLT56ZXJvRmlsbFdpbGRlcm5lc3MoKTsKICAgICByZXR1cm4gbmV3QmxvY2s7CiB9CiAK
IGlubGluZSB2b2lkIENvcGllZEJsb2NrOjp6ZXJvRmlsbFdpbGRlcm5lc3MoKQogewotI2lmIFVT
RShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAg
bWVtc2V0KHdpbGRlcm5lc3MoKSwgMCwgd2lsZGVybmVzc1NpemUoKSk7CiAjZWxzZQogICAgIEpT
VmFsdWUgZW1wdHlWYWx1ZTsKICAgICBKU1ZhbHVlKiBsaW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPEpTVmFsdWUqPih3aWxkZXJuZXNzRW5kKCkpOwogICAgIGZvciAoSlNWYWx1ZSogY3VycmVu
dFZhbHVlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHdpbGRlcm5lc3MoKSk7IGN1
cnJlbnRWYWx1ZSA8IGxpbWl0OyBjdXJyZW50VmFsdWUrKykKICAgICAgICAgKmN1cnJlbnRWYWx1
ZSA9IGVtcHR5VmFsdWU7CiAjZW5kaWYKIH0KZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5v
cmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1JlZ2lvbi5oIHdlYmtpdGd0ay0yLjIuNS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZWdpb24uaAotLS0gd2Via2l0Z3RrLTIuMi41Lm9y
aWcvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVnaW9uLmgJMjAxNC0wMi0xNyAxMjoyNDow
Mi4wMDAwMDAwMDAgKzAxMDAKKysrIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9SZWdpb24uaAkyMDE0LTAzLTIzIDAwOjM1OjE5LjkwOTE1NjEyOCArMDEwMApAQCAt
MzIsMTcgKzMyLDE3IEBACiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KICNp
bmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CiAKICNkZWZpbmUgSEVBUF9NRU1P
UllfSUQgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KC0zKSkK
IAogI2RlZmluZSBFTkFCTEVfU1VQRVJfUkVHSU9OIDAKIAogI2lmbmRlZiBFTkFCTEVfU1VQRVJf
UkVHSU9OCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0KSB8fCBVU0UoSlNW
QUxVRTY0VykKICNkZWZpbmUgRU5BQkxFX1NVUEVSX1JFR0lPTiAxCiAjZWxzZQogI2RlZmluZSBF
TkFCTEVfU1VQRVJfUkVHSU9OIDAKICNlbmRpZgogI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0Mgewog
CmRpZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmggd2Via2l0Z3RrLTIuMi41L1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAotLS0gd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCTIwMTQtMDItMTcgMTI6
MjQ6MDIuMDAwMDAwMDAwICswMTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCTIwMTQtMDQtMDMgMDE6Mjk6MjUuMzU1MzE3
NDM5ICswMjAwCkBAIC0xMTUsMTcgKzExNSwxNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAjZW5kaWYK
ICAgICAgICAgQWJzdHJhY3RQQyBhYnN0cmFjdFJldHVyblBDKFZNJiB2bSkgeyByZXR1cm4gQWJz
dHJhY3RQQyh2bSwgdGhpcyk7IH0KIAogICAgICAgICBjbGFzcyBMb2NhdGlvbiB7CiAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZGVjb2RlKHVpbnQz
Ml90IGJpdHMpOwogCiAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNCeXRlY29kZUxv
Y2F0aW9uKHVpbnQzMl90IGJpdHMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFM
VUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQz
Ml90IGVuY29kZUFzQnl0ZWNvZGVPZmZzZXQodWludDMyX3QgYml0cyk7CiAjZWxzZQogICAgICAg
ICAgICAgc3RhdGljIGlubGluZSB1aW50MzJfdCBlbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24o
SW5zdHJ1Y3Rpb24qKTsKICNlbmRpZgogCiAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNDb2RlT3JpZ2luSW5kZXgodWludDMyX3QgYml0cyk7CiAgICAgICAgICAgICBzdGF0aWMgaW5s
aW5lIHVpbnQzMl90IGVuY29kZUFzQ29kZU9yaWdpbkluZGV4KHVpbnQzMl90IGJpdHMpOwogCkBA
IC0xMzcsMTcgKzEzNywxNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgICAgICAgICAgQnl0
ZWNvZGVMb2NhdGlvblRhZyA9IDAsCiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbkluZGV4VGFn
ID0gMSwKICAgICAgICAgICAgICAgICBJc0lubGluZWRDb2RlVGFnID0gMiwKICAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZW5jb2RlKFR5cGVUYWcs
IHVpbnQzMl90IGJpdHMpOwogCiAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19t
YXNrID0gMHgzOwotI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNF
KEpTVkFMVUU2NFcpCiAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19zaGlmdCA9
IDMwOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHNfc2hpZnRlZE1hc2sgPSBz
X21hc2sgPDwgc19zaGlmdDsKICNlbHNlCiAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMy
X3Qgc19zaGlmdCA9IDI7CiAjZW5kaWYKICAgICAgICAgfTsKIAogICAgICAgICBib29sIGlzSW5s
aW5lZEZyYW1lKCkgY29uc3Q7CmRpZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIHdlYmtpdGd0
ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5l
cy5oCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCTIwMTQtMDItMTcgMTI6MjQ6MDIuMDAwMDAwMDAwICsw
MTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZUlubGluZXMuaAkyMDE0LTA0LTAzIDAxOjI5OjMyLjg2NzI5NjI0NiArMDIwMApA
QCAtMjcsNDIgKzI3LDQyIEBACiAjZGVmaW5lIENhbGxGcmFtZUlubGluZXNfaAogCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAKIG5hbWVzcGFjZSBKU0MgIHsKIAogaW5saW5lIHVpbnQzMl90IENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZShDYWxsRnJhbWU6OkxvY2F0aW9uOjpUeXBlVGFnIHRh
ZywgdWludDMyX3QgYml0cykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQorI2lmIFVTRShKU1ZBTFVF
NjQpIHx8IFVTRShKU1ZBTFVFNjRXKQogICAgIEFTU0VSVCghKGJpdHMgJiBzX3NoaWZ0ZWRNYXNr
KSk7CiAgICAgQVNTRVJUKCEodGFnICYgfnNfbWFzaykpOwogICAgIHJldHVybiBiaXRzIHwgKHRh
ZyA8PCBzX3NoaWZ0KTsKICNlbHNlCiAgICAgQVNTRVJUKCEodGFnICYgfnNfbWFzaykpOwogICAg
IGlmICh0YWcgJiBDb2RlT3JpZ2luSW5kZXhUYWcpCiAgICAgICAgIGJpdHMgPSAoYml0cyA8PCBz
X3NoaWZ0KTsKICAgICBBU1NFUlQoIShiaXRzICYgc19tYXNrKSk7CiAgICAgYml0cyB8PSB0YWc7
CiAgICAgcmV0dXJuIGJpdHM7CiAjZW5kaWYKIH0KIAogaW5saW5lIHVpbnQzMl90IENhbGxGcmFt
ZTo6TG9jYXRpb246OmRlY29kZSh1aW50MzJfdCBiaXRzKQogewotI2lmIFVTRShKU1ZBTFVFNjQp
CisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgcmV0dXJuIGJpdHMg
JiB+c19zaGlmdGVkTWFzazsKICNlbHNlCiAgICAgaWYgKGlzQ29kZU9yaWdpbkluZGV4KGJpdHMp
KQogICAgICAgICByZXR1cm4gYml0cyA+PiBzX3NoaWZ0OwogICAgIHJldHVybiBiaXRzICYgfnNf
bWFzazsKICNlbmRpZgogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0
KSB8fCBVU0UoSlNWQUxVRTY0VykKIGlubGluZSB1aW50MzJfdCBDYWxsRnJhbWU6OkxvY2F0aW9u
OjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KHVpbnQzMl90IGJpdHMpCiB7CiAgICAgdWludDMyX3Qg
ZW5jb2RlZEJpdHMgPSBlbmNvZGUoQnl0ZWNvZGVMb2NhdGlvblRhZywgYml0cyk7CiAgICAgQVNT
RVJUKGlzQnl0ZWNvZGVMb2NhdGlvbihlbmNvZGVkQml0cykpOwogICAgIHJldHVybiBlbmNvZGVk
Qml0czsKIH0KICNlbHNlCiBpbmxpbmUgdWludDMyX3QgQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5j
b2RlQXNCeXRlY29kZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKQEAgLTg5
LDI3ICs4OSwyNyBAQCBpbmxpbmUgdWludDMyX3QgQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jCiAK
IGlubGluZSBib29sIENhbGxGcmFtZTo6TG9jYXRpb246OmlzQnl0ZWNvZGVMb2NhdGlvbih1aW50
MzJfdCBiaXRzKQogewogICAgIHJldHVybiAhaXNDb2RlT3JpZ2luSW5kZXgoYml0cyk7CiB9CiAK
IGlubGluZSBib29sIENhbGxGcmFtZTo6TG9jYXRpb246OmlzQ29kZU9yaWdpbkluZGV4KHVpbnQz
Ml90IGJpdHMpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0KSB8fCBV
U0UoSlNWQUxVRTY0VykKICAgICBUeXBlVGFnIHRhZyA9IHN0YXRpY19jYXN0PFR5cGVUYWc+KGJp
dHMgPj4gc19zaGlmdCk7CiAgICAgcmV0dXJuICEhKHRhZyAmIENvZGVPcmlnaW5JbmRleFRhZyk7
CiAjZWxzZQogICAgIHJldHVybiAhIShiaXRzICYgQ29kZU9yaWdpbkluZGV4VGFnKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OkxvY2F0aW9uOjppc0lubGluZWRDb2RlKHVp
bnQzMl90IGJpdHMpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0KSB8
fCBVU0UoSlNWQUxVRTY0VykKICAgICBUeXBlVGFnIHRhZyA9IHN0YXRpY19jYXN0PFR5cGVUYWc+
KGJpdHMgPj4gc19zaGlmdCk7CiAgICAgcmV0dXJuICEhKHRhZyAmIElzSW5saW5lZENvZGVUYWcp
OwogI2Vsc2UKICAgICByZXR1cm4gISEoYml0cyAmIElzSW5saW5lZENvZGVUYWcpOwogI2VuZGlm
CiB9CiAKIGlubGluZSBib29sIENhbGxGcmFtZTo6aXNJbmxpbmVkRnJhbWUoKSBjb25zdApAQCAt
MTQwLDMxICsxNDAsMzEgQEAgaW5saW5lIHVuc2lnbmVkIENhbGxGcmFtZTo6bG9jYXRpb25Bc1Jh
dwogICAgIHJldHVybiB0aGlzW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnRhZygpOwogfQogCiBp
bmxpbmUgdm9pZCBDYWxsRnJhbWU6OnNldExvY2F0aW9uQXNSYXdCaXRzKHVuc2lnbmVkIGJpdHMp
CiB7CiAgICAgdGhpc1tKU1N0YWNrOjpBcmd1bWVudENvdW50XS50YWcoKSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KGJpdHMpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxV
RTY0KSB8fCBVU0UoSlNWQUxVRTY0VykKIGlubGluZSB1bnNpZ25lZCBDYWxsRnJhbWU6OmxvY2F0
aW9uQXNCeXRlY29kZU9mZnNldCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0xvY2F0aW9uQXNC
eXRlY29kZU9mZnNldCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwogICAgIHJldHVybiBM
b2NhdGlvbjo6ZGVjb2RlKGxvY2F0aW9uQXNSYXdCaXRzKCkpOwogfQogCiBpbmxpbmUgdm9pZCBD
YWxsRnJhbWU6OnNldExvY2F0aW9uQXNCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiB7
CiAgICAgQVNTRVJUKGNvZGVCbG9jaygpKTsKICAgICBzZXRMb2NhdGlvbkFzUmF3Qml0cyhMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChvZmZzZXQpKTsKICAgICBBU1NFUlQoaGFzTG9j
YXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwogfQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisj
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAKIGlubGluZSB1bnNp
Z25lZCBDYWxsRnJhbWU6OmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAogewogICAg
IEFTU0VSVChoYXNMb2NhdGlvbkFzQ29kZU9yaWdpbkluZGV4KCkpOwogICAgIEFTU0VSVChjb2Rl
QmxvY2soKSk7CiAgICAgcmV0dXJuIExvY2F0aW9uOjpkZWNvZGUobG9jYXRpb25Bc1Jhd0JpdHMo
KSk7CiB9CiAKZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAotLS0gd2Via2l0Z3RrLTIuMi41Lm9y
aWcvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJMjAxNC0wMy0w
NyAwNzo1NzoxNi4xNTQ0NDE4OTAgKzAxMDAKKysrIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkyMDE0LTAzLTA0IDIzOjUzOjEyLjg2
NDg0MTUyMyArMDEwMApAQCAtMTc1LDI3ICsxNzUsMzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBBTFdBWVNfSU5MSU5FIElubGluZUNhbGxGcmFtZSogUmVnaXN0ZXI6OmFzSW5saW5lQ2FsbEZy
YW1lKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB1LmlubGluZUNhbGxGcmFtZTsKICAg
ICB9CiAgICAgICAgIAogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6dW5ib3hl
ZEludDMyKCkgY29uc3QKICAgICB7CisjaWYgVVNFKEpTVkFMVUU2NFcpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodS52YWx1ZSkuYXNJbnQzMigpOworI2Vsc2UKICAgICAgICAgcmV0
dXJuIHBheWxvYWQoKTsKKyNlbmRpZgogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBS
ZWdpc3Rlcjo6dW5ib3hlZEJvb2xlYW4oKSBjb25zdAogICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0
VykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh1LnZhbHVlKS5hc0Jvb2xlYW4oKTsK
KyNlbHNlCiAgICAgICAgIHJldHVybiAhIXBheWxvYWQoKTsKKyNlbmRpZgogICAgIH0KIAogICAg
IEFMV0FZU19JTkxJTkUgSlNDZWxsKiBSZWdpc3Rlcjo6dW5ib3hlZENlbGwoKSBjb25zdAogICAg
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQorI2lmIFVTRShKU1ZBTFVFNjRXKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKHUudmFsdWUpLmFzQ2VsbCgpOworI2VsaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgcmV0dXJuIHUuZW5jb2RlZFZhbHVlLnB0cjsKICNlbHNlCiAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4ocGF5bG9hZCgpKTsKICNlbmRpZgogICAgIH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6cGF5bG9hZCgpIGNvbnN0CiAgICAg
ewpkaWZmIC1ycCAtdTggd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50T2ZmbGluZUFzbUNvbmZpZy5oIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmgKLS0tIHdlYmtpdGd0ay0y
LjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVBc21Db25m
aWcuaAkyMDE0LTAyLTE3IDEyOjI0OjAyLjAwMDAwMDAwMCArMDEwMAorKysgd2Via2l0Z3RrLTIu
Mi41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZmxpbmVBc21Db25maWcuaAky
MDE0LTA0LTAzIDAxOjMwOjQxLjY3NTEwMjIzOSArMDIwMApAQCAtOTMsMTggKzkzLDIxIEBACiAj
aWYgQ1BVKFNINCkKICNkZWZpbmUgT0ZGTElORV9BU01fU0g0IDEKICNlbHNlCiAjZGVmaW5lIE9G
RkxJTkVfQVNNX1NINCAwCiAjZW5kaWYKIAogI2VuZGlmIC8vICFFTkFCTEUoTExJTlRfQ19MT09Q
KQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyNpZiBVU0UoSlNWQUxVRTY0KSB8fCBVU0UoSlNWQUxV
RTY0VykKICNkZWZpbmUgT0ZGTElORV9BU01fSlNWQUxVRTY0IDEKKyNpZiBVU0UoSlNWQUxVRTY0
VykKKyNkZWZpbmUgT0ZGTElORV9BU01fSlNWQUxVRTY0VyAxCisjZW5kaWYKICNlbHNlCiAjZGVm
aW5lIE9GRkxJTkVfQVNNX0pTVkFMVUU2NCAwCiAjZW5kaWYKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICNkZWZpbmUgT0ZGTElORV9BU01fQVNTRVJUX0VOQUJMRUQgMQogI2Vsc2UKICNkZWZpbmUg
T0ZGTElORV9BU01fQVNTRVJUX0VOQUJMRUQgMApkaWZmIC1ycCAtdTggd2Via2l0Z3RrLTIuMi41
Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
IHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KLS0tIHdlYmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkyMDE0LTAyLTE3IDEyOjI0OjAyLjAwMDAw
MDAwMCArMDEwMAorKysgd2Via2l0Z3RrLTIuMi41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkyMDE0LTA0LTAzIDAxOjMwOjU1LjY4MzA2Mjc2OSAr
MDIwMApAQCAtMzgsMTcgKzM4LDI5IEBAIGNvbnN0IENhbGxlckZyYW1lID0gLTQwCiBjb25zdCBD
YWxsZWUgPSAtMzIKIGNvbnN0IFNjb3BlQ2hhaW4gPSAtMjQKIGNvbnN0IFJldHVyblBDID0gLTE2
CiBjb25zdCBDb2RlQmxvY2sgPSAtOAogCiBjb25zdCBUaGlzQXJndW1lbnRPZmZzZXQgPSAtQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSAtIDgKIAogIyBTb21lIHZhbHVlIHJlcHJlc2VudGF0aW9uIGNvbnN0
YW50cy4KLWlmIEpTVkFMVUU2NAoraWYgSlNWQUxVRTY0VworY29uc3QgVGFnVHlwZVB0ciAgICAg
ID0gMHgwCitjb25zdCBUYWdCaXRUeXBlT3RoZXIgPSAweDIKK2NvbnN0IFRhZ0JpdEJvb2wgICAg
ICA9IDB4NAorY29uc3QgVGFnQml0VW5kZWZpbmVkID0gMHg4Citjb25zdCBUYWdCaXRWYWxpZFB0
ciAgPSAweDEwCitjb25zdCBWYWx1ZUVtcHR5ICAgICAgPSAweDAKK2NvbnN0IFZhbHVlVmFsaWRQ
dHIgICA9IFRhZ1R5cGVQdHIgfCBUYWdCaXRWYWxpZFB0cgorY29uc3QgVmFsdWVGYWxzZSAgICAg
ID0gVGFnVHlwZVB0ciB8IFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wKK2NvbnN0IFZhbHVl
VHJ1ZSAgICAgICA9IFRhZ1R5cGVQdHIgfCBUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwg
MQorY29uc3QgVmFsdWVVbmRlZmluZWQgID0gVGFnVHlwZVB0ciB8IFRhZ0JpdFR5cGVPdGhlciB8
IFRhZ0JpdFVuZGVmaW5lZAorY29uc3QgVmFsdWVOdWxsICAgICAgID0gVGFnVHlwZVB0ciB8IFRh
Z0JpdFR5cGVPdGhlcgorZWxzaWYgSlNWQUxVRTY0CiBjb25zdCBUYWdCaXRUeXBlT3RoZXIgPSAw
eDIKIGNvbnN0IFRhZ0JpdEJvb2wgICAgICA9IDB4NAogY29uc3QgVGFnQml0VW5kZWZpbmVkID0g
MHg4CiBjb25zdCBWYWx1ZUVtcHR5ICAgICAgPSAweDAKIGNvbnN0IFZhbHVlRmFsc2UgICAgICA9
IFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wKIGNvbnN0IFZhbHVlVHJ1ZSAgICAgICA9IFRh
Z0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wgfCAxCiBjb25zdCBWYWx1ZVVuZGVmaW5lZCAgPSBU
YWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRVbmRlZmluZWQKIGNvbnN0IFZhbHVlTnVsbCAgICAgICA9
IFRhZ0JpdFR5cGVPdGhlcgpAQCAtNTksMTcgKzcxLDE3IEBAIGNvbnN0IE51bGxUYWcgPSAtMwog
Y29uc3QgVW5kZWZpbmVkVGFnID0gLTQKIGNvbnN0IENlbGxUYWcgPSAtNQogY29uc3QgRW1wdHlW
YWx1ZVRhZyA9IC02CiBjb25zdCBEZWxldGVkVmFsdWVUYWcgPSAtNwogY29uc3QgTG93ZXN0VGFn
ID0gRGVsZXRlZFZhbHVlVGFnCiBlbmQKIAogIyBTb21lIHJlZ2lzdGVyIGNvbnZlbnRpb25zLgot
aWYgSlNWQUxVRTY0CitpZiBKU1ZBTFVFNjQgb3IgSlNWQUxVRTY0VwogICAgICMgLSBVc2UgYSBw
YWlyIG9mIHJlZ2lzdGVycyB0byByZXByZXNlbnQgdGhlIFBDOiBvbmUgcmVnaXN0ZXIgZm9yIHRo
ZQogICAgICMgICBiYXNlIG9mIHRoZSBzdGFjaywgYW5kIG9uZSByZWdpc3RlciBmb3IgdGhlIGlu
ZGV4LgogICAgICMgLSBUaGUgUEMgYmFzZSAob3IgUEIgZm9yIHNob3J0KSBzaG91bGQgYmUgc3Rv
cmVkIGluIHRoZSBjc3IuIEl0IHdpbGwKICAgICAjICAgZ2V0IGNsb2JiZXJlZCBvbiBjYWxscyB0
byBvdGhlciBKUyBjb2RlLCBidXQgd2lsbCBnZXQgc2F2ZWQgb24gY2FsbHMKICAgICAjICAgdG8g
QyBmdW5jdGlvbnMuCiAgICAgIyAtIEMgY2FsbHMgYXJlIHN0aWxsIGdpdmVuIHRoZSBJbnN0cnVj
dGlvbiogcmF0aGVyIHRoYW4gdGhlIFBDIGluZGV4LgogICAgICMgICBUaGlzIHJlcXVpcmVzIGFu
IGFkZCBiZWZvcmUgdGhlIGNhbGwsIGFuZCBhIHN1YiBhZnRlci4KICAgICBjb25zdCBQQyA9IHQ0
CkBAIC0xNTMsMjUgKzE2NSwyNSBAQCBjb25zdCBDbG9zdXJlVmFyID0gMgogY29uc3QgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzID0gMwogY29uc3QgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA9IDQKIGNvbnN0IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzID0gNQogY29uc3QgRHluYW1pYyA9IDYKIAogY29uc3QgUmVzb2x2ZU1vZGVNYXNrID0gMHhm
ZmZmCiAKICMgQWxsb2NhdGlvbiBjb25zdGFudHMKLWlmIEpTVkFMVUU2NAoraWYgSlNWQUxVRTY0
IG9yIEpTVkFMVUU2NFcKICAgICBjb25zdCBKU0ZpbmFsT2JqZWN0U2l6ZUNsYXNzSW5kZXggPSAx
CiBlbHNlCiAgICAgY29uc3QgSlNGaW5hbE9iamVjdFNpemVDbGFzc0luZGV4ID0gMwogZW5kCiAK
ICMgVGhpcyBtdXN0IG1hdGNoIHd0Zi9WZWN0b3IuaAogY29uc3QgVmVjdG9yQnVmZmVyT2Zmc2V0
ID0gMAotaWYgSlNWQUxVRTY0CitpZiBKU1ZBTFVFNjQgb3IgSlNWQUxVRTY0VwogICAgIGNvbnN0
IFZlY3RvclNpemVPZmZzZXQgPSAxMgogZWxzZQogICAgIGNvbnN0IFZlY3RvclNpemVPZmZzZXQg
PSA4CiBlbmQKIAogIyBTb21lIGNvbW1vbiB1dGlsaXRpZXMuCiBtYWNybyBjcmFzaCgpCiAgICAg
aWYgQ19MT09QCkBAIC0zMjAsMTcgKzMzMiwxNyBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tH
ZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgIGptcCB0MAogICAgIC5yZWNvdmVyOgogICAgICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgLmNvbnRpbnVlOgogICAgIGVuZAogICAgIGNvZGVCbG9j
a1NldHRlcih0MSkKICAgICAKICAgICAjIFNldCB1cCB0aGUgUEMuCi0gICAgaWYgSlNWQUxVRTY0
CisgICAgaWYgSlNWQUxVRTY0IG9yIEpTVkFMVUU2NFcKICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2luc3RydWN0aW9uc1t0MV0sIFBCCiAgICAgICAgIG1vdmUgMCwgUEMKICAgICBlbHNlCiAg
ICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQwogICAgIGVuZAog
ZW5kCiAKICMgRXhwZWN0cyB0aGF0IENvZGVCbG9jayBpcyBpbiB0MSwgd2hpY2ggaXMgd2hhdCBw
cm9sb2d1ZSgpIGxlYXZlcyBiZWhpbmQuCkBAIC0zNDksMTcgKzM2MSwxNyBAQCBtYWNybyBmdW5j
dGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgICAgIGFzc2VydChtYWNybyAob2sp
IGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxl
RG9uZQogICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsg
VmVjdG9yQnVmZmVyT2Zmc2V0W3QxXSwgdDMKICAgICAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9m
aWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgICAg
ICBuZWdwIHQwCiAgICAgICAgIGxzaGlmdHAgMywgdDAKICAgICAgICAgYWRkcCB0MiwgdDMKICAg
ICAuYXJndW1lbnRQcm9maWxlTG9vcDoKLSAgICAgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIGlm
IEpTVkFMVUU2NCBvciBKU1ZBTFVFNjRXCiAgICAgICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRP
ZmZzZXQgKyA4IC0gcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgogICAgICAgICAgICAg
c3VicCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MwogICAgICAgICAgICAgc3RvcmVxIHQyLCBwcm9m
aWxlQXJnU2tpcCAqIHNpemVvZiBWYWx1ZVByb2ZpbGUgKyBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0
c1t0M10KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zmc2V0
ICsgVGFnT2Zmc2V0ICsgOCAtIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKICAgICAg
ICAgICAgIHN1YnAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDMKICAgICAgICAgICAgIHN0b3JlaSB0
MiwgcHJvZmlsZUFyZ1NraXAgKiBzaXplb2YgVmFsdWVQcm9maWxlICsgVmFsdWVQcm9maWxlOjpt
X2J1Y2tldHMgKyBUYWdPZmZzZXRbdDNdCiAgICAgICAgICAgICBsb2FkaSBUaGlzQXJndW1lbnRP
ZmZzZXQgKyBQYXlsb2FkT2Zmc2V0ICsgOCAtIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwg
dDIKQEAgLTQ0NywxNyArNDU5LDE3IEBAIF9sbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9j
aGVjazoKIAogCiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjazoKICAg
ICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25D
b2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eUNoZWNrLCBfbGxpbnRfdHJhY2VfYXJpdHlDaGVja19mb3JfY29uc3RydWN0KQogICAgIGZ1
bmN0aW9uQXJpdHlDaGVjayguZnVuY3Rpb25Gb3JDb25zdHJ1Y3RCZWdpbiwgX3Nsb3dfcGF0aF9j
b25zdHJ1Y3RfYXJpdHlDaGVjaykKIAogCiAjIFZhbHVlLXJlcHJlc2VudGF0aW9uLXNwZWNpZmlj
IGNvZGUuCi1pZiBKU1ZBTFVFNjQKK2lmIEpTVkFMVUU2NCBvciBKU1ZBTFVFNjRXCiAgICAgaW5j
bHVkZSBMb3dMZXZlbEludGVycHJldGVyNjQKIGVsc2UKICAgICBpbmNsdWRlIExvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NAogZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1hZ25vc3RpYyBj
b2RlLgogX2xsaW50X29wX25ld19hcnJheToKZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5v
cmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcCB3
ZWJraXRndGstMi4yLjUvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuY3BwCi0tLSB3ZWJraXRndGstMi4yLjUub3JpZy9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAJMjAxNC0wMi0xNyAxMjoyNDowMi4wMDAwMDAw
MDAgKzAxMDAKKysrIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5jcHAJMjAxNC0wNC0wMyAwMTozMDoyOC4xMzExNDA0MTEgKzAy
MDAKQEAgLTEzOCwxNyArMTM4LDE3IEBAIHN0YXRpYyB2b2lkIERvdWJsZTJJbnRzKGRvdWJsZSB2
YWwsIHVpbnQKIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVk
IENQVSByZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFs
bGVyIHRoYW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQogLy8gcHNldWRvIHJlZ2lzdGVy
LCBhcyB3ZWxsIGFzIGhpZGVzIGVuZGlhbm5lc3MgZGlmZmVyZW5jZXMuCiAKIHN0cnVjdCBDTG9v
cFJlZ2lzdGVyIHsKICAgICB1bmlvbiB7CiAgICAgICAgIGludHB0cl90IGk7CiAgICAgICAgIHVp
bnRwdHJfdCB1OwotI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNF
KEpTVkFMVUU2NFcpCiAjaWYgQ1BVKEJJR19FTkRJQU4pCiAgICAgICAgIHN0cnVjdCB7CiAgICAg
ICAgICAgICBpbnQzMl90IGkzMnBhZGRpbmc7CiAgICAgICAgICAgICBpbnQzMl90IGkzMjsKICAg
ICAgICAgfTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIHVpbnQzMl90IHUzMnBhZGRp
bmc7CiAgICAgICAgICAgICB1aW50MzJfdCB1MzI7CkBAIC0xNzQsMTcgKzE3NCwxNyBAQCBzdHJ1
Y3QgQ0xvb3BSZWdpc3RlciB7CiAgICAgICAgICAgICBpbnQ4X3QgaTg7CiAgICAgICAgICAgICBp
bnQ4X3QgaThwYWRkaW5nWzddOwogICAgICAgICB9OwogICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgdWludDhfdCB1ODsKICAgICAgICAgICAgIHVpbnQ4X3QgdThwYWRkaW5nWzddOwogICAg
ICAgICB9OwogI2VuZGlmIC8vICFDUFUoQklHX0VORElBTikKLSNlbHNlIC8vICFVU0UoSlNWQUxV
RTY0KQorI2Vsc2UgLy8gIShVU0UoSlNWQUxVRTY0KSB8fCBVU0UoSlNWQUxVRTY0VykpCiAgICAg
ICAgIGludDMyX3QgaTMyOwogICAgICAgICB1aW50MzJfdCB1MzI7CiAKICNpZiBDUFUoQklHX0VO
RElBTikKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGludDhfdCBpOHBhZGRpbmdbM107
CiAgICAgICAgICAgICBpbnQ4X3QgaTg7CiAgICAgICAgIH07CkBAIC0yMDUsMjYgKzIwNSwyNiBA
QCBzdHJ1Y3QgQ0xvb3BSZWdpc3RlciB7CiAjZW5kaWYgLy8gIUNQVShCSUdfRU5ESUFOKQogI2Vu
ZGlmIC8vICFVU0UoSlNWQUxVRTY0KQogCiAgICAgICAgIGludDhfdCogaThwOwogICAgICAgICB2
b2lkKiB2cDsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjU3RhdGU7CiAgICAgICAgIHZvaWQqIGlu
c3RydWN0aW9uOwogICAgICAgICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jOwotI2lmIFVTRShK
U1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgICAg
IGludDY0X3QgaTY0OwogICAgICAgICB1aW50NjRfdCB1NjQ7CiAgICAgICAgIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRKU1ZhbHVlOwogICAgICAgICBkb3VibGUgY2FzdFRvRG91YmxlOwogI2VuZGlm
CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgfTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCisj
aWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgaW5saW5lIHZvaWQgY2xl
YXJIaWdoV29yZCgpIHsgaTMycGFkZGluZyA9IDA7IH0KICNlbHNlCiAgICAgaW5saW5lIHZvaWQg
Y2xlYXJIaWdoV29yZCgpIHsgfQogI2VuZGlmCiB9OwogCiAvLz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
IC8vIFRoZSBsbGludCBDKysgaW50ZXJwcmV0ZXIgbG9vcDoKQEAgLTI2OCwxNyArMjY4LDE3IEBA
IEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKIAogICAgIEFTU0VSVChj
YWxsRnJhbWUtPnZtKCkudG9wQ2FsbEZyYW1lID09IGNhbGxGcmFtZSk7CiAKICAgICAvLyBEZWZp
bmUgdGhlIHBzZXVkbyByZWdpc3RlcnMgdXNlZCBieSB0aGUgTExJTlQgQyBMb29wIGJhY2tlbmQ6
CiAgICAgQVNTRVJUKHNpemVvZihDTG9vcFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50cHRyX3QpKTsK
IAogICAgIHVuaW9uIENMb29wRG91YmxlUmVnaXN0ZXIgewogICAgICAgICBkb3VibGUgZDsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQorI2lmIFVTRShKU1ZBTFVFNjQpIHx8IFVTRShKU1ZBTFVFNjRXKQog
ICAgICAgICBpbnQ2NF90IGNhc3RUb0ludDY0OwogI2VuZGlmCiAgICAgfTsKIAogICAgIC8vIFRo
ZSBDTG9vcCBsbGludCBiYWNrZW5kIGlzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgQVJNdjcgYmFj
a2VuZCwgYW5kCiAgICAgLy8gdGhlbiBmdXJ0aGVyIGVuaGFuY2VkIHdpdGggYSBmZXcgaW5zdHJ1
Y3Rpb25zIGZyb20gdGhlIHg4NiBiYWNrZW5kIHRvCiAgICAgLy8gc3VwcG9ydCBidWlsZGluZyBm
b3IgWDY0IHRhcmdldHMuIEhlbmNlLCB0aGUgc2hhcGUgb2YgdGhlIGdlbmVyYXRlZAogICAgIC8v
IGNvZGUgYW5kIHRoZSB1c2FnZSBjb252ZW50aW9uIG9mIHJlZ2lzdGVycyB3aWxsIGxvb2sgYSBs
b3QgbGlrZSB0aGUKQEAgLTI5OCwxNyArMjk4LDE3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUo
Q2FsbEZyYW1lKiBjYWxsRnIKICAgICAvLwogICAgIC8vIE9uIGEgNjQtYml0IGJ1aWxkLCBpdCBt
b3JlIGxpa2UgeDY0IGluIHRoYXQgdGhlIHJlZ2lzdGVycyBhcmUgNjQgYml0LgogICAgIC8vIEhl
bmNlOgogICAgIC8vIDEuIE91dGdvaW5nIGFyZ3MgYXJlIHN0aWxsIHRoZSBzYW1lOiBhcmcxIGlu
IHQwLCBhcmcyIGluIHQxLCBldGMuCiAgICAgLy8gMi4gMzIgYml0IHJlc3VsdCB2YWx1ZXMgd2ls
bCBiZSBpbiB0aGUgbG93IDMyLWJpdCBvZiB0MC4KICAgICAvLyAzLiA2NCBiaXQgcmVzdWx0IHZh
bHVlcyB3aWxsIGJlIGluIHQwLgogCiAgICAgQ0xvb3BSZWdpc3RlciB0MCwgdDEsIHQyLCB0MzsK
LSNpZiBVU0UoSlNWQUxVRTY0KQorI2lmIFVTRShKU1ZBTFVFNjQpIHx8IFVTRShKU1ZBTFVFNjRX
KQogICAgIENMb29wUmVnaXN0ZXIgckJhc2VQQywgdGFnVHlwZU51bWJlciwgdGFnTWFzazsKICNl
bmRpZgogICAgIENMb29wUmVnaXN0ZXIgclJldFZQQzsKICAgICBDTG9vcERvdWJsZVJlZ2lzdGVy
IGQwLCBkMTsKIAogICAgIC8vIEtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5LiBXZSBkb24ndCByZWFs
bHkgbmVlZCB0aGlzLCBidXQgdGhlIGNvbXBpbGVyCiAgICAgLy8gd2lsbCBjb21wbGFpbi4gVGhp
cyBtYWtlcyB0aGUgd2FybmluZyBnbyBhd2F5LgogICAgIHQwLmkgPSAwOwpAQCAtMzI4LDI1ICsz
MjgsMjUgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShDYWxsRnJhbWUqIGNhbGxGcgogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJbnN0cnVj
dGlvbiogdlBDOwogCiAgICAgLy8gclBDIGlzIGFuIGFsaWFzIGZvciB2UEMuIFNldCB1cCB0aGUg
YWxpYXM6CiAgICAgQ0xvb3BSZWdpc3RlciYgclBDID0gKkNBU1Q8Q0xvb3BSZWdpc3Rlcio+KCZ2
UEMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQorI2Vsc2UgLy8gVVNF
KEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgdlBDID0gMDsKICAgICByQmFzZVBD
LnZwID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCiAgICAgLy8gRm9yIHRo
ZSBBU00gbGxpbnQsIEpJVFN0dWJzIHRha2VzIGNhcmUgb2YgdGhpcyBpbml0aWFsaXphdGlvbi4g
V2UgZG8KICAgICAvLyBpdCBleHBsaWNpdGx5IGhlcmUgZm9yIHRoZSBDIGxvb3A6CiAgICAgdGFn
VHlwZU51bWJlci5pID0gMHhGRkZGMDAwMDAwMDAwMDAwOwogICAgIHRhZ01hc2suaSA9IDB4RkZG
RjAwMDAwMDAwMDAwMjsKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpIHx8IFVTRShKU1ZBTFVFNjRXKQogCiAgICAgLy8gY2ZyIGlzIGFuIGFsaWFzIGZv
ciBjYWxsRnJhbWUuIFNldCB1cCB0aGlzIGFsaWFzOgogICAgIENMb29wUmVnaXN0ZXImIGNmciA9
ICpDQVNUPENMb29wUmVnaXN0ZXIqPigmY2FsbEZyYW1lKTsKIAogICAgIC8vIFNpbXVsYXRlIGEg
bmF0aXZlIHJldHVybiBQQyB3aGljaCBzaG91bGQgbmV2ZXIgYmUgdXNlZDoKICAgICByUmV0VlBD
LmkgPSAweGJiYWRiZWVmOwogCiAgICAgLy8gSW50ZXJwcmV0ZXIgdmFyaWFibGVzIGZvciB2YWx1
ZSBwYXNzaW5nIGJldHdlZW4gb3Bjb2RlcyBhbmQvb3IgaGVscGVyczoKQEAgLTM2MCwxOSArMzYw
LDE5IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICAgICAg
I2RlZmluZSBSRUNPUkRfT1BDT0RFX1NUQVRTKF9fb3Bjb2RlKSBcCiAgICAgICAgICAgICBPcGNv
ZGVTdGF0czo6cmVjb3JkSW5zdHJ1Y3Rpb24oX19vcGNvZGUpCiAgICAgI2Vsc2UKICAgICAgICAg
I2RlZmluZSBSRUNPUkRfT1BDT0RFX1NUQVRTKF9fb3Bjb2RlKQogICAgICNlbmRpZgogCiAgICAg
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICNkZWZpbmUgRkVUQ0hfT1BDT0RFKCkgdlBD
LT51Lm9wY29kZQotICAgICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCisgICAgI2Vsc2UgLy8gVVNF
KEpTVkFMVUU2NCkgfHwgVVNFKEpTVkFMVUU2NFcpCiAgICAgICAgICNkZWZpbmUgRkVUQ0hfT1BD
T0RFKCkgKmJpdHdpc2VfY2FzdDxPcGNvZGUqPihyQmFzZVBDLmk4cCArIHJQQy5pICogOCkKLSAg
ICAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKyAgICAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkg
fHwgVVNFKEpTVkFMVUU2NFcpCiAKICAgICAjZGVmaW5lIE5FWFRfSU5TVFJVQ1RJT04oKSBcCiAg
ICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgb3Bjb2Rl
ID0gRkVUQ0hfT1BDT0RFKCk7IFwKICAgICAgICAgICAgIERJU1BBVENIX09QQ09ERSgpOyAgICAg
ICBcCiAgICAgICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9f
T1BDT0RFUykKQEAgLTQ2NCwxNyArNDY0LDE3IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2Fs
bEZyYW1lKiBjYWxsRnIKICAgICAgICAgLy8gZnJvbSBBcmd1bWVudENvdW50LnRhZygpIChzZWUg
dGhlIGRpc3BhdGNoQWZ0ZXJDYWxsKCkgbWFjcm8gdXNlZCBpbgogICAgICAgICAvLyB0aGUgY2Fs
bFRhcmdldEZ1bmN0aW9uKCkgbWFjcm8gaW4gdGhlIGxsaW50IGFzbSBmaWxlcykuCiAgICAgICAg
IC8vCiAgICAgICAgIC8vIEZvciB0aGUgQyBsb29wLCB3ZSBkb24ndCBoYXZlIHRoZSBKSVQgc3R1
YiB0byBkbyB0aGlzIHdvcmsgZm9yIHVzLiBTbywKICAgICAgICAgLy8gd2UganVtcCB0byBsbGlu
dF9nZW5lcmljX3JldHVybl9wb2ludC4KIAogICAgICAgICB2UEMgPSBjYWxsRnJhbWUtPmN1cnJl
bnRWUEMoKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkgfHwgVVNF
KEpTVkFMVUU2NFcpCiAgICAgICAgIC8vIEJhc2VkIG9uIExvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20ncyBkaXNwYXRjaEFmdGVyQ2FsbCgpOgogCiAgICAgICAgIC8vIFdoZW4gcmV0dXJuaW5nIGZy
b20gYSBuYXRpdmUgdHJhbXBvbGluZSBjYWxsLCB1bmxpa2UgdGhlIGFzc2VtYmx5CiAgICAgICAg
IC8vIExMSW50LCB3ZSBjYW4ndCBzaW1wbHkgcmV0dXJuIHRvIHRoZSBjYWxsZXIuIEluIG91ciBj
YXNlLCB3ZSBncmFiCiAgICAgICAgIC8vIHRoZSBjYWxsZXIncyBWUEMgYW5kIHJlc3VtZSBleGVj
dXRpb24gdGhlcmUuIEhvd2V2ZXIsIHRoZSBjYWxsZXIncwogICAgICAgICAvLyBWUEMgcmV0dXJu
ZWQgYnkgY2FsbEZyYW1lLT5jdXJyZW50VlBDKCkgaXMgaW4gdGhlIGZvcm0gb2YgdGhlIHJlYWwK
ICAgICAgICAgLy8gYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGJ5dGVjb2RlLCBidXQgdGhlIDY0LWJp
dCBsbGludCBleHBlY3RzIHRoZQogICAgICAgICAvLyBWUEMgdG8gYmUgYSBieXRlY29kZSBvZmZz
ZXQuIEhlbmNlLCB3ZSBuZWVkIHRvIG1hcCBpdCBiYWNrIHRvIGEKQEAgLTQ4MywxNyArNDgzLDE3
IEBAIEpTVmFsdWUgQ0xvb3A6OmV4ZWN1dGUoQ2FsbEZyYW1lKiBjYWxsRnIKIAogICAgICAgICBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBBU1NFUlQoY29kZUJs
b2NrKTsKICAgICAgICAgclBDLnZwID0gY2FsbEZyYW1lLT5jdXJyZW50VlBDKCk7CiAgICAgICAg
IHJQQy5pID0gclBDLmk4cCAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpKTsKICAgICAgICAgclBDLmkgPj49IDM7CiAKICAgICAgICAg
ckJhc2VQQy52cCA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIHx8IFVTRShKU1ZBTFVF
NjRXKQogCiAgICAgICAgIGdvdG8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQ7CiAKICAgICB9
IC8vIEVORCBkb1JldHVybkhlbHBlci4KIAogCiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BD
T0RFUykKICAgICAvLyBLZWVwIHRoZSBjb21waWxlciBoYXBweSBzbyB0aGF0IGl0IGRvZXNuJ3Qg
Y29tcGxhaW4gYWJvdXQgdW51c2VkCmRpZmYgLXJwIC11OCB3ZWJraXRndGstMi4yLjUub3JpZy9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggd2Via2l0Z3RrLTIuMi41
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAotLS0gd2Via2l0Z3Rr
LTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCTIw
MTQtMDMtMDcgMDc6NTY6MzUuNTU0NDk0MDI5ICswMTAwCisrKyB3ZWJraXRndGstMi4yLjUvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCTIwMTQtMDMtMDggMDE6MTM6
MzQuMjA2NjEyMjM5ICswMTAwCkBAIC03MCwxOCArNzAsMTkgQEAgc3RydWN0IER1bXBDb250ZXh0
Owogc3RydWN0IEluc3RydWN0aW9uOwogc3RydWN0IE1ldGhvZFRhYmxlOwogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKIAogZW51bSBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlIHsgTm9QcmVmZXJlbmNlLCBQcmVmZXJOdW1iZXIsIFByZWZlclN0cmluZyB9OwogZW51
bSBFQ01BTW9kZSB7IFN0cmljdE1vZGUsIE5vdFN0cmljdE1vZGUgfTsKIAotdHlwZWRlZiBpbnQ2
NF90IEVuY29kZWRKU1ZhbHVlOwotICAgIAorCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgVVNF
KEpTVkFMVUU2NCkKKwogdW5pb24gRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB7CiAgICAgaW50NjRf
dCBhc0ludDY0OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgZG91YmxlIGFzRG91YmxlOwog
I2VsaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU0NlbGwqIHB0cjsKICNlbmRpZgogICAgICAgICAK
QEAgLTkzLDE2ICs5NCw0NyBAQCB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICNlbHNl
CiAgICAgc3RydWN0IHsKICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAgICAgICBpbnQzMl90
IHRhZzsKICAgICB9IGFzQml0czsKICNlbmRpZgogfTsKIAorI2VsaWYgVVNFKEpTVkFMVUU2NFcp
CisKK3N0cnVjdCBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKKyAgICB1bnNpZ25lZCBjaGFyIHRh
ZzsKKyAgICB1bmlvbiB7CisgICAgICAgIGludDY0X3QgYXNJbnQ2NDsKKyAgICAgICAgZG91Ymxl
IGFzRG91YmxlOworICAgICAgICBKU0NlbGwqIHB0cjsKKworI2lmIENQVShCSUdfRU5ESUFOKQor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgaW50MzJfdCB0YWc7CisgICAgICAgICAgICBp
bnQzMl90IHBheWxvYWQ7CisgICAgICAgIH0gYXNCaXRzOworI2Vsc2UKKyAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIGludDMyX3QgcGF5bG9hZDsKKyAgICAgICAgICAgIGludDMyX3QgdGFn
OworICAgICAgICB9IGFzQml0czsKKyNlbmRpZgorICAgIH07Cit9OworCisjZW5kaWYKKworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpIHx8IFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIGludDY0X3QgRW5j
b2RlZEpTVmFsdWU7CisjZWxpZiBVU0UoSlNWQUxVRTY0VykKK3R5cGVkZWYgRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciBFbmNvZGVkSlNWYWx1ZTsKKyNlbmRpZgorCiAvLyBUaGlzIGltcGxlbWVudHMg
VG9JbnQzMiwgZGVmaW5lZCBpbiBFQ01BLTI2MiA5LjUuCiBKU19FWFBPUlRfUFJJVkFURSBpbnQz
Ml90IHRvSW50MzIoZG91YmxlKTsKIAogLy8gVGhpcyBpbXBsZW1lbnRzIFRvVUludDMyLCBkZWZp
bmVkIGluIEVDTUEtMjYyIDkuNi4KIGlubGluZSB1aW50MzJfdCB0b1VJbnQzMihkb3VibGUgbnVt
YmVyKQogewogICAgIC8vIEFzIGNvbW1lbnRlZCBpbiB0aGUgc3BlYywgdGhlIG9wZXJhdGlvbiBv
ZiBUb0ludDMyIGFuZCBUb1VpbnQzMiBvbmx5IGRpZmZlcgogICAgIC8vIGluIGhvdyB0aGUgcmVz
dWx0IGlzIGludGVycHJldGVkOyBzZWUgTk9URXMgaW4gc2VjdGlvbnMgOS41IGFuZCA5LjYuCkBA
IC0zMDksMTYgKzM0MSwxOCBAQCBwcml2YXRlOgogICAgIC8vIHZhbHVlcy4KICAgICBleHBsaWNp
dCBKU1ZhbHVlKGludDMyX3QgdGFnLCBpbnQzMl90IHBheWxvYWQpOwogI2VuZGlmCiAKICNlbGlm
IFVTRShKU1ZBTFVFNjQpCiAgICAgLyoKICAgICAgKiBPbiA2NC1iaXQgcGxhdGZvcm1zIFVTRShK
U1ZBTFVFNjQpIHNob3VsZCBiZSBkZWZpbmVkLCBhbmQgd2UgdXNlIGEgTmFOLWVuY29kZWQKICAg
ICAgKiBmb3JtIGZvciBpbW1lZGlhdGVzLgorICAgICAqIElmIHRoZSBoaWdoZXN0IDE2IGJpdHMg
b2YgcG9pbnRlcnMgYXJlbid0IGNsZWFyZWQgb24gdGhlIHBsYXRmb3JtLCBVU0UoSlNWQUxVRTY0
VykKKyAgICAgKiBzaG91bGQgYmUgZGVmaW5lZCBpbnN0ZWFkLiBTZWUgYmVsb3cuCiAgICAgICoK
ICAgICAgKiBUaGUgZW5jb2RpbmcgbWFrZXMgdXNlIG9mIHVudXNlZCBOYU4gc3BhY2UgaW4gdGhl
IElFRUU3NTQgcmVwcmVzZW50YXRpb24uICBBbnkgdmFsdWUKICAgICAgKiB3aXRoIHRoZSB0b3Ag
MTMgYml0cyBzZXQgcmVwcmVzZW50cyBhIFFOYU4gKHdpdGggdGhlIHNpZ24gYml0IHNldCkuICBR
TmFOIHZhbHVlcwogICAgICAqIGNhbiBlbmNvZGUgYSA1MS1iaXQgcGF5bG9hZC4gIEhhcmR3YXJl
IHByb2R1Y2VkIGFuZCBDLWxpYnJhcnkgcGF5bG9hZHMgdHlwaWNhbGx5CiAgICAgICogaGF2ZSBh
IHBheWxvYWQgb2YgemVyby4gIFdlIGFzc3VtZSB0aGF0IG5vbi16ZXJvIHBheWxvYWRzIGFyZSBh
dmFpbGFibGUgdG8gZW5jb2RlCiAgICAgICogcG9pbnRlciBhbmQgaW50ZWdlciB2YWx1ZXMuICBT
aW5jZSBhbnkgNjQtYml0IGJpdCBwYXR0ZXJuIHdoZXJlIHRoZSB0b3AgMTUgYml0cyBhcmUKICAg
ICAgKiBhbGwgc2V0IHJlcHJlc2VudHMgYSBOYU4gd2l0aCBhIG5vbi16ZXJvIHBheWxvYWQsIHdl
IGNhbiB1c2UgdGhpcyBzcGFjZSBpbiB0aGUgTmFOCiAgICAgICogcmFuZ2VzIHRvIGVuY29kZSBv
dGhlciB2YWx1ZXMgKGhvd2V2ZXIgdGhlcmUgYXJlIGFsc28gb3RoZXIgcmFuZ2VzIG9mIE5hTiBz
cGFjZSB0aGF0CkBAIC0zODYsNDAgKzQyMCwxMzcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNl
IHNwZWNpYWwgdmFsdWVzIGFyZSBuZXZlciB2aXNpYmxlIHRvIEphdmFTY3JpcHQgY29kZTsgRW1w
dHkgaXMgdXNlZCB0byByZXByZXNlbnQKICAgICAvLyBBcnJheSBob2xlcywgYW5kIGZvciB1bmlu
aXRpYWxpemVkIEpTVmFsdWVzLiBEZWxldGVkIGlzIHVzZWQgaW4gaGFzaCB0YWJsZSBjb2RlLgog
ICAgIC8vIFRoZXNlIHZhbHVlcyB3b3VsZCBtYXAgdG8gY2VsbCB0eXBlcyBpbiB0aGUgSlNWYWx1
ZSBlbmNvZGluZywgYnV0IG5vdCB2YWxpZCBHQyBjZWxsCiAgICAgLy8gcG9pbnRlciBzaG91bGQg
aGF2ZSBlaXRoZXIgb2YgdGhlc2UgdmFsdWVzIChFbXB0eSBpcyBudWxsLCBkZWxldGVkIGlzIGF0
IGFuIGludmFsaWQKICAgICAvLyBhbGlnbm1lbnQgZm9yIGEgR0MgY2VsbCwgYW5kIGluIHRoZSB6
ZXJvIHBhZ2UpLgogICAgICNkZWZpbmUgVmFsdWVFbXB0eSAgIDB4MGxsCiAgICAgI2RlZmluZSBW
YWx1ZURlbGV0ZWQgMHg0bGwKKworI2VsaWYgVVNFKEpTVkFMVUU2NFcpCisgICAgLyoKKyAgICAg
KiBPbiA2NC1iaXQgcGxhdGZvcm1zIFVTRShKU1ZBTFVFNjRXKSBzaG91bGQgYmUgZGVmaW5lZCBp
ZiBwb2ludGVycyBuZWVkIHRoZWlyCisgICAgICogZW50aXJlIDY0LWJpdHMgd2lkdGgsIGluY2x1
ZGluZyB0aGUgaGlnaGVzdCAxNi1iaXRzLiBUaGlzIGlzIHRoZSBjYXNlIGlmIHRoZQorICAgICAq
IG1lbW9yeSBtYW5hZ2VtZW50IG1hcHMgYWxsb2NhdGVkIG1lbW9yeSB0byBoaWdoIGFkZHJlc3Nl
cyBvbiB0aGUgcGxhdGZvcm0uCisgICAgICoKKyAgICAgKiBUaGUgZW5jb2RpbmcgbWFrZXMgdXNl
IG9mIGFuIGVuY2Fwc3VsYXRlZCB1bmlvbiB3aXRob3V0IGFueSB0cmljayBpbiBhIHBvcnRhYmxl
IHdheS4KKyAgICAgKiBTaW5jZSB0aGUgZW5jb2RlZCB2YWx1ZSBpcyBsYXJnZXIgdGhhbiA2NC1i
aXRzLCB0aGlzIGlzbid0IHZlcnkgZWZmaWNpZW50LiBFbmFibGluZworICAgICAqIHRoZSBKSVQg
aXNuJ3QgcG9zc2libGUgZWl0aGVyLgorICAgICAqCisgICAgICogVGhlIHRvcCAyLWJpdHMgb2Yg
dGFnIGRlbm90ZSB0aGUgdHlwZSBvZiB0aGUgZW5jb2RlZCBKU1ZhbHVlOgorICAgICAqICAgICBQ
b2ludGVyIDB4MDAKKyAgICAgKiAgICAgRG91YmxlICAweDQwCisgICAgICogICAgIEludGVnZXIg
MHhjMAorICAgICAqCisgICAgICogVGhlIHRhZyAweDAwIGRlbm90ZXMgYSBwb2ludGVyLCBvciBh
bm90aGVyIGZvcm0gb2YgdGFnZ2VkIGltbWVkaWF0ZS4gQm9vbGVhbiwKKyAgICAgKiBudWxsIGFu
ZCB1bmRlZmluZWQgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgYm90dG9tIDUtYml0cyBv
ZiB0YWdzOgorICAgICAqCisgICAgICogICAgIFBvaW50ZXI6ICAgMHgxMAorICAgICAqICAgICBG
YWxzZTogICAgIDB4MDYKKyAgICAgKiAgICAgVHJ1ZTogICAgICAweDA3CisgICAgICogICAgIFVu
ZGVmaW5lZDogMHgwYQorICAgICAqICAgICBOdWxsOiAgICAgIDB4MDIKKyAgICAgKgorICAgICAq
IFRoZXNlIHZhbHVlcyBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAgICAgKiAtIEJp
dCAxIChUYWdCaXRUeXBlT3RoZXIpIGlzIHNldCBmb3IgYWxsIGZvdXIgdmFsdWVzLCBhbGxvd2lu
ZyByZWFsIHBvaW50ZXJzIHRvIGJlCisgICAgICogICBxdWlja2x5IGRpc3Rpbmd1aXNoZWQgZnJv
bSBhbGwgaW1tZWRpYXRlIHZhbHVlcywgaW5jbHVkaW5nIHRoZXNlIGludmFsaWQgcG9pbnRlcnMu
CisgICAgICogLSBXaXRoIGJpdCAzIGlzIG1hc2tlZCBvdXQgKFRhZ0JpdFVuZGVmaW5lZCkgVW5k
ZWZpbmVkIGFuZCBOdWxsIHNoYXJlIHRoZSAKKyAgICAgKiAgIHNhbWUgdmFsdWUsIGFsbG93aW5n
IG51bGwgJiB1bmRlZmluZWQgdG8gYmUgcXVpY2tseSBkZXRlY3RlZC4KKyAgICAgKgorICAgICAq
IE5vIHZhbGlkIEpTVmFsdWUgd2lsbCBoYXZlIHRoZSBiaXQgcGF0dGVybiAweDAsIHRoaXMgaXMg
dXNlZCB0byByZXByZXNlbnQgYXJyYXkKKyAgICAgKiBob2xlcywgYW5kIGFzIGEgQysrICdubyB2
YWx1ZScgcmVzdWx0IChlLmcuIEpTVmFsdWUoKSBoYXMgYW4gaW50ZXJuYWwgdmFsdWUgb2YgMCku
CisgICAgICovCisKKyAgICAjZGVmaW5lIFRhZ1R5cGVNYXNrICAgMHhjMHUKKyAgICAjZGVmaW5l
IFRhZ1R5cGVQdHIgICAgMHgwMHUKKyAgICAjZGVmaW5lIFRhZ1R5cGVEb3VibGUgMHg0MHUKKyAg
ICAjZGVmaW5lIFRhZ1R5cGVOdW1iZXIgMHhjMHUKKworICAgIC8vIEFsbCBub24tbnVtZXJpYyAo
Ym9vbCwgbnVsbCwgdW5kZWZpbmVkKSBpbW1lZGlhdGVzIGhhdmUgYml0IDIgc2V0LgorICAgICNk
ZWZpbmUgVGFnQml0VHlwZU90aGVyIDB4MDJ1CisgICAgI2RlZmluZSBUYWdCaXRCb29sICAgICAg
MHgwNHUKKyAgICAjZGVmaW5lIFRhZ0JpdFVuZGVmaW5lZCAweDA4dQorICAgICNkZWZpbmUgVGFn
Qml0VmFsaWRQdHIgIDB4MTB1CisgICAgLy8gQ29tYmluZWQgaW50ZWdlciB2YWx1ZSBmb3Igbm9u
LW51bWVyaWMgaW1tZWRpYXRlcy4KKyAgICAjZGVmaW5lIFZhbHVlVmFsaWRQdHIgIChUYWdUeXBl
UHRyIHwgVGFnQml0VmFsaWRQdHIpCisgICAgI2RlZmluZSBWYWx1ZUZhbHNlICAgICAoVGFnVHlw
ZVB0ciB8IFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wgfCBmYWxzZSkKKyAgICAjZGVmaW5l
IFZhbHVlVHJ1ZSAgICAgIChUYWdUeXBlUHRyIHwgVGFnQml0VHlwZU90aGVyIHwgVGFnQml0Qm9v
bCB8IHRydWUpCisgICAgI2RlZmluZSBWYWx1ZVVuZGVmaW5lZCAoVGFnVHlwZVB0ciB8IFRhZ0Jp
dFR5cGVPdGhlciB8IFRhZ0JpdFVuZGVmaW5lZCkKKyAgICAjZGVmaW5lIFZhbHVlTnVsbCAgICAg
IChUYWdUeXBlUHRyIHwgVGFnQml0VHlwZU90aGVyKQorCisgICAgLy8gVGFnTWFzayBpcyB1c2Vk
IHRvIGNoZWNrIGZvciBhbGwgdHlwZXMgb2YgaW1tZWRpYXRlIHZhbHVlcyAoZWl0aGVyIG51bWJl
ciBvciAnb3RoZXInKS4KKyAgICAjZGVmaW5lIFRhZ01hc2sgKFRhZ1R5cGVNYXNrIHwgVGFnQml0
VHlwZU90aGVyKQorCisgICAgLy8gVGhlc2Ugc3BlY2lhbCB2YWx1ZXMgYXJlIG5ldmVyIHZpc2li
bGUgdG8gSmF2YVNjcmlwdCBjb2RlOyBFbXB0eSBpcyB1c2VkIHRvIHJlcHJlc2VudAorICAgIC8v
IEFycmF5IGhvbGVzLCBhbmQgZm9yIHVuaW5pdGlhbGl6ZWQgSlNWYWx1ZXMuIERlbGV0ZWQgaXMg
dXNlZCBpbiBoYXNoIHRhYmxlIGNvZGUuCisgICAgLy8gVGhlc2UgdmFsdWVzIHdvdWxkIG1hcCB0
byBjZWxsIHR5cGVzIGluIHRoZSBKU1ZhbHVlIGVuY29kaW5nLCBidXQgbm90IHZhbGlkIEdDIGNl
bGwKKyAgICAvLyBwb2ludGVyIHNob3VsZCBoYXZlIGVpdGhlciBvZiB0aGVzZSB2YWx1ZXMgKEVt
cHR5IGlzIG51bGwsIGRlbGV0ZWQgaXMgYXQgYW4gaW52YWxpZAorICAgIC8vIGFsaWdubWVudCBm
b3IgYSBHQyBjZWxsLCBhbmQgaW4gdGhlIHplcm8gcGFnZSkuCisgICAgI2RlZmluZSBWYWx1ZUVt
cHR5ICAgMHgwdQorICAgICNkZWZpbmUgVmFsdWVEZWxldGVkIDB4NHUKICNlbmRpZgogCiAgICAg
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciB1OwogfTsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8
IFVTRShKU1ZBTFVFNjQpCiB0eXBlZGVmIEludEhhc2g8RW5jb2RlZEpTVmFsdWU+IEVuY29kZWRK
U1ZhbHVlSGFzaDsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBzdHJ1Y3QgRW5jb2RlZEpTVmFs
dWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOyB9
CiAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlJiBz
bG90KSB7IHNsb3QgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWUpKTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29kZWRK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShK
U1ZhbHVlOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpKTsgfQogfTsKICNlbHNlCiBzdHJ1Y3QgRW5j
b2RlZEpTVmFsdWVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkg
eyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKSk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1
ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KIH07CiAjZW5kaWYKIAorI2VsaWYgVVNFKEpT
VkFMVUU2NFcpCitzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBFbmNvZGVkSlNWYWx1ZSYgdikKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OmludEhhc2goc3RhdGljX2Nhc3Q8dWludDY0X3Q+KFdURjo6aW50SGFzaChzdGF0aWNfY2Fz
dDx1aW50OF90Pih2LnRhZykpKSA8PCAzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFdURjo6aW50SGFzaChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
di5hc0ludDY0KSkpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBFbmNvZGVk
SlNWYWx1ZSYgYSwgY29uc3QgRW5jb2RlZEpTVmFsdWUmIGIpCisgICAgeworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKGEpID09IEpTVmFsdWU6OmRlY29kZShiKTsKKyAgICB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworc3RydWN0IEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8RW5jb2Rl
ZEpTVmFsdWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKHZhbHVlKSA9PSBKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7
IH0KK307CisjZW5kaWYKKwogdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCB1bnNpZ25l
ZCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFsdWVN
YXA7CiAKIC8vIFN0YW5kLWFsb25lIGhlbHBlciBmdW5jdGlvbnMuCisjaWYgVVNFKEpTVkFMVUU2
NFcpCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbmNvZGVkSlNWYWx1ZSYgIGEs
IGNvbnN0IEVuY29kZWRKU1ZhbHVlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZShhKSA9PSBKU1ZhbHVlOjpkZWNvZGUoYik7CisgICAgfTsKKworICAgIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRW5jb2RlZEpTVmFsdWUmICBhLCBjb25zdCBFbmNvZGVkSlNW
YWx1ZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYSkgIT0gSlNW
YWx1ZTo6ZGVjb2RlKGIpOworICAgIH07CisjZW5kaWYKKwogaW5saW5lIEpTVmFsdWUganNOdWxs
KCkKIHsKICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU051bGwpOwogfQogCiBpbmxpbmUg
SlNWYWx1ZSBqc1VuZGVmaW5lZCgpCiB7CiAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNV
bmRlZmluZWQpOwpkaWZmIC1ycCAtdTggd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaCB3ZWJraXRndGstMi4yLjUvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAotLS0gd2Via2l0
Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkyMDE0LTAzLTA3IDA3OjU2OjQzLjU5NDQ4MzcwNCArMDEwMAorKysgd2Via2l0Z3Rr
LTIuMi41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJ
MjAxNC0wMy0wOCAwMToxNToxNy44MDIzNDgwMDkgKzAxMDAKQEAgLTEzOCwxNiArMTM4LDE3IEBA
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGRvdWJsZSBkKQogICAgIGNvbnN0IGludDMyX3QgYXNJ
bnQzMiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGQpOwogICAgIGlmIChhc0ludDMyICE9IGQgfHwg
KCFhc0ludDMyICYmIHN0ZDo6c2lnbmJpdChkKSkpIHsgLy8gdHJ1ZSBmb3IgLTAuMAogICAgICAg
ICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIGQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihkKSk7CiB9CiAK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KSB8fCBVU0UoSlNWQUxVRTY0KQogaW5saW5lIEVuY29kZWRK
U1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1
ZS51LmFzSW50NjQ7CiB9CiAKIGlubGluZSBKU1ZhbHVlIEpTVmFsdWU6OmRlY29kZShFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkSlNWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHY7CkBAIC00ODksMTYgKzQ5
MCwxOTUgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAogQUxXQVlTX0lO
TElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzQ2Vs
bCgpKTsKICAgICByZXR1cm4gdS5wdHI7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQog
CisjZWxpZiBVU0UoSlNWQUxVRTY0VykKKworaW5saW5lIEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS51OworfQorCitpbmxp
bmUgSlNWYWx1ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUp
Cit7CisgICAgSlNWYWx1ZSB2OworICAgIHYudSA9IGVuY29kZWRKU1ZhbHVlOworICAgIHJldHVy
biB2OworfQorCitpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCit7CisgICAgdS50YWcgPSBWYWx1
ZUVtcHR5OworICAgIHUucHRyID0gMDsKK30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNO
dWxsVGFnKQoreworICAgIHUudGFnID0gVmFsdWVOdWxsOworICAgIHUucHRyID0gMDsKK30KKwor
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNVbmRlZmluZWRUYWcpCit7CisgICAgdS50YWcgPSBW
YWx1ZVVuZGVmaW5lZDsKKyAgICB1LnB0ciA9IDA7Cit9CisKK2lubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKEpTVHJ1ZVRhZykKK3sKKyAgICB1LnRhZyA9IFZhbHVlVHJ1ZTsKKyAgICB1LnB0ciA9IDA7
Cit9CisKK2lubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCit7CisgICAgdS50YWcg
PSBWYWx1ZUZhbHNlOworICAgIHUucHRyID0gMDsKK30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQoreworICAgIHUudGFnID0gVmFsdWVEZWxldGVk
OworICAgIHUucHRyID0gMDsKK30KKworaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNDZWxsKiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgdS50YWcgPSBWYWx1ZVZhbGlkUHRyOworICAg
IGVsc2UKKyAgICAgICAgdS50YWcgPSBWYWx1ZUVtcHR5OworICAgIHUucHRyID0gcHRyOworfQor
CitpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjb25zdCBKU0NlbGwqIHB0cikKK3sKKyAgICBpZiAo
cHRyKQorICAgICAgICB1LnRhZyA9IFZhbHVlVmFsaWRQdHI7CisgICAgZWxzZQorICAgICAgICB1
LnRhZyA9IFZhbHVlRW1wdHk7CisgICAgdS5wdHIgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cik7
Cit9CisKK2lubGluZSBKU1ZhbHVlOjpvcGVyYXRvciBib29sKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQodS50YWcgIT0gVmFsdWVEZWxldGVkKTsKKyAgICByZXR1cm4gdS50YWcgIT0gVmFsdWVFbXB0
eTsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gdS50YWcgPT0gb3RoZXIudS50YWcKKyAgICAgICAg
ICAgJiYgdS5wdHIgPT0gb3RoZXIudS5wdHI7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6Om9w
ZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHUudGFn
ICE9IG90aGVyLnUudGFnCisgICAgICAgICAgIHx8IHUucHRyICE9IG90aGVyLnUucHRyOworfQor
CitpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdS50
YWcgPT0gVmFsdWVFbXB0eTsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQo
KSBjb25zdAoreworICAgIHJldHVybiB1LnRhZyA9PSBWYWx1ZVVuZGVmaW5lZDsKK30KKworaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdS50YWcgPT0g
VmFsdWVOdWxsOworfQorCitpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVW5kZWZpbmVkKCkgfHwgaXNOdWxsKCk7Cit9CisKK2lu
bGluZSBib29sIEpTVmFsdWU6OmlzQ2VsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICh1LnRhZyAm
IFRhZ01hc2spID09IFRhZ1R5cGVQdHI7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6OmlzSW50
MzIoKSBjb25zdAoreworICAgIHJldHVybiAodS50YWcgJiBUYWdUeXBlTWFzaykgPT0gVGFnVHlw
ZU51bWJlcjsKK30KKworaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAorewor
ICAgIHJldHVybiB1LnRhZyA9PSBUYWdUeXBlRG91YmxlOworfQorCitpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc1RydWUoKSBjb25zdAoreworICAgIHJldHVybiB1LnRhZyA9PSBWYWx1ZVRydWU7Cit9
CisKK2lubGluZSBib29sIEpTVmFsdWU6OmlzRmFsc2UoKSBjb25zdAoreworICAgIHJldHVybiB1
LnRhZyA9PSBWYWx1ZUZhbHNlOworfQorCitpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMy
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNJbnQzMigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50MzJfdD4odS5hc0ludDY0KTsKK30KKworaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0Rv
dWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRG91YmxlKCkpOworICAgIHJldHVybiB1LmFz
RG91YmxlOworfQorCitBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNDZWxsKCkpOworICAgIHJldHVybiB1LnB0cjsKK30KKworQUxX
QVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkK
K3sKKyAgICB1LnRhZyA9IFRhZ1R5cGVEb3VibGU7CisgICAgdS5hc0RvdWJsZSA9IGQ7Cit9CisK
K2lubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludCBpKQoreworICAgIHUudGFnID0gVGFnVHlwZU51
bWJlcjsKKyAgICB1LmFzSW50NjQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSk7Cit9CisKK2lu
bGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKHUudGFn
ICYgVGFnVHlwZU1hc2spICE9IFRhZ1R5cGVQdHI7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6
OmlzQm9vbGVhbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICggdS50YWcgJiBUYWdCaXRCb29sICkg
PyB0cnVlIDogZmFsc2U7Cit9CisKK2lubGluZSBib29sIEpTVmFsdWU6OmFzQm9vbGVhbigpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKKyAgICByZXR1cm4gdS50YWcgPT0gVmFs
dWVUcnVlOworfQorCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NFcpCisKIGlubGluZSBib29sIEpT
VmFsdWU6OmlzU3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNDZWxsKCkgJiYgYXNDZWxs
KCktPmlzU3RyaW5nKCk7CiB9CiAKIGlubGluZSBib29sIEpTVmFsdWU6OmlzUHJpbWl0aXZlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gIWlzQ2VsbCgpIHx8IGFzQ2VsbCgpLT5pc1N0cmluZygpOwpk
aWZmIC1ycCAtdTggd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIHdlYmtpdGd0ay0yLjIuNS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKLS0tIHdl
YmtpdGd0ay0yLjIuNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkyMDE0LTAyLTE3IDEyOjI0OjAyLjAwMDAwMDAwMCArMDEwMAor
Kysgd2Via2l0Z3RrLTIuMi41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkyMDE0LTA0LTAzIDA3OjIxOjM2LjAxNDA2ODUyMCArMDIwMApA
QCAtNTE0LDE3ICs1MTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRQogICAgICAgICBMaXRlcmFsUGFyc2VyPFVDaGFyPiBwcmVwYXJzZXIoZXhlYywgcy5jaGFy
YWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CiAgICAgICAgIGlmIChKU1Zh
bHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocGFyc2VkT2JqZWN0KTsgICAgICAgIAogICAgIH0K
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBjYWxsZWVHbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UocyksIGZhbHNlKTsKICAgICBpZiAoIWV2YWwp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWwsIGV4ZWMsIGNhbGxlZUdsb2JhbE9iamVjdC0+
Z2xvYmFsVGhpcygpLCBjYWxsZWVHbG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIHJhZGl4VmFs
dWUgPSBleGVjLT5hcmd1bWVudCgxKTsKZGlmZiAtcnAgLXU4IHdlYmtpdGd0ay0yLjIuNS5vcmln
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oIHdlYmtpdGd0
ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAot
LS0gd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
cmFwcGVyT2JqZWN0LmgJMjAxMy0wOC0yMyAwODoyNjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrIHdl
YmtpdGd0ay0yLjIuNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuaAkyMDE0LTA0LTAzIDAxOjMwOjA3LjIyNzE5OTM0MSArMDIwMApAQCAtNDQsMTcgKzQ0LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkgCiAgICAgICAgIHsgCiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgaW50ZXJuYWxWYWx1ZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dyYXBwZXJPYmplY3QsIG1faW50ZXJuYWxWYWx1ZSk7IH0KICAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBpbnRlcm5hbFZhbHVlQ2VsbE9mZnNldCgpCiAgICAgICAgIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQorI2lmIFVTRShKU1ZBTFVFNjQpIHx8IFVTRShKU1ZBTFVFNjRXKQogICAgICAgICAgICAg
cmV0dXJuIGludGVybmFsVmFsdWVPZmZzZXQoKTsKICNlbHNlCiAgICAgICAgICAgICByZXR1cm4g
aW50ZXJuYWxWYWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKTsKICNlbmRpZgogICAgICAgICB9CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChWTSYsIFN0cnVjdHVyZSopOwpk
aWZmIC1ycCAtdTggd2Via2l0Z3RrLTIuMi41Lm9yaWcvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aCB3ZWJraXRndGstMi4yLjUvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAotLS0gd2Via2l0Z3Rr
LTIuMi41Lm9yaWcvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkyMDE0LTAzLTIyIDIxOjM4OjAw
Ljg0ODA3NzQ4OSArMDEwMAorKysgd2Via2l0Z3RrLTIuMi41L1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgJMjAxNC0wMy0yMiAyMTozMjoyMi45MjQ1NzAxNDYgKzAxMDAKQEAgLTY3OCwyOCArNjc4
LDMzIEBACiAjZGVmaW5lIEVOQUJMRV9DT0RFQkxPQ0tfU0FNUExJTkcgMAogI2lmIEVOQUJMRShD
T0RFQkxPQ0tfU0FNUExJTkcpICYmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogI2Vycm9yICJD
T0RFQkxPQ0tfU0FNUExJTkcgcmVxdWlyZXMgT1BDT0RFX1NBTVBMSU5HIgogI2VuZGlmCiAjaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykgfHwgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKSB8fCBFTkFC
TEUoU0FNUExJTkdfUkVHSU9OUykKICNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX1RIUkVBRCAxCiAj
ZW5kaWYKIAotI2lmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVmaW5lZChXVEZf
VVNFX0pTVkFMVUUzMl82NCkKLSNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJ
TkRPV1MpKSkgXAotICAgIHx8IChDUFUoSUE2NCkgJiYgIUNQVShJQTY0XzMyKSkgXAorI2lmICFk
ZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0VykgXAorICAgICYmICFkZWZpbmVkKFdURl9VU0VfSlNW
QUxVRTY0KSBcCisgICAgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzJfNjQpCisjaWYgKENQ
VShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKQorI2RlZmluZSBXVEZfVVNFX0pTVkFMVUU2NFcgMQor
I2VsaWYgKENQVShYODZfNjQpICYmIChPUyhVTklYKSB8fCBPUyhXSU5ET1dTKSkpIFwKICAgICB8
fCBDUFUoQUxQSEEpIFwKICAgICB8fCBDUFUoU1BBUkM2NCkgXAogICAgIHx8IENQVShTMzkwWCkg
XAogICAgIHx8IENQVShQUEM2NCkKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQogI2Vsc2UK
ICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzJfNjQgMQogI2VuZGlmCi0jZW5kaWYgLyogIWRlZmlu
ZWQoV1RGX1VTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KSAq
LworI2VuZGlmIC8qICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0VykKKyAgICAgICAgICAmJiAh
ZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkKKyAgICAgICAgICAmJiAhZGVmaW5lZChXVEZfVVNF
X0pTVkFMVUUzMl82NCkgKi8KIAogLyogRGlzYWJsZSB0aGUgSklUIG9uIHZlcnNpb25zIG9mIEdD
QyBwcmlvciB0byA0LjEgKi8KICNpZiAhZGVmaW5lZChFTkFCTEVfSklUKSAmJiBDT01QSUxFUihH
Q0MpICYmICFHQ0NfVkVSU0lPTl9BVF9MRUFTVCg0LCAxLCAwKQogI2RlZmluZSBFTkFCTEVfSklU
IDAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkgJiYgQ1BVKFNINCkgJiYgUExB
VEZPUk0oUVQpCiAjZGVmaW5lIEVOQUJMRV9KSVQgMQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>