<?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>45599</bug_id>
          
          <creation_ts>2010-09-11 13:04:55 -0700</creation_ts>
          <short_desc>[Cairo] Generalize ContextShadow from the Qt port and use it for shadow code</short_desc>
          <delta_ts>2010-09-23 08:51:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>krit</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>277771</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-11 13:04:55 -0700</bug_when>
    <thetext>I believe we should fork Qt&apos;s ContextShadow implementation and use it for all Cairo shadowing code. Reasons for this:

1. It will better abstract shadowing logic. My initial implementation of this has already  simplified the shadowing code in places like FontCairo.cpp. It will also make it simpler to fix shadow bugs and add full-shadow support in places where it is broken: (see https://bugs.webkit.org/show_bug.cgi?id=45597).

2. Reduce the number of full-surface copies. The SVG filter code requires one surface copy for the input and makes another copy for the output. That&apos;s probably one more than we need.

3. It can be alpha-only. webkit-box-shadow, text shadows and canvas shadows are alpha only. The blurring algorithm should be more efficient if it&apos;s operating on only one channel.

4. We can support shadows without depending on SVG filters. This is a minor point, but it&apos;s a nice thing to have for embedders who want a small library.

Why fork:

The Qt version of ContextShadow is written with fast transposition in mind (Cairo doesn&apos;t support this) and four channel images. There is very little extra logic outside of this (calculating the appropriate transformations for the temporary surface, for instance). I&apos;m confidant unforking is possible though, especially if some other port wishes to use this abstraction.

I should have a first-round patch for this early next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277777</commentid>
    <comment_count>1</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-09-11 14:44:41 -0700</bug_when>
    <thetext>Can you wait until I land the patch for https://bugs.webkit.org/show_bug.cgi?id=44222 first? The blur code is rewritten to be smaller and faster there and you certainly don&apos;t want to redo the generalization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277817</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-11 18:54:20 -0700</bug_when>
    <thetext>Hrm. If you land a generalized version at some time in the future, the cost of switching the implementation should be almost zero. In the Cairo version I&apos;ve kept the interface to ShadowContext exactly the same as your version. The blur algorithm that I&apos;m using is currently a very naive sliding window type, because the most important optimization for us was to properly handle clipping. This means that when you land your code, there will be a large incentive for us to share it and I don&apos;t mind doing that work.

Additionally, we&apos;d also like to expose our tiling optimizations on it as a higher level method. I think having a fork (even if for a short amount of time), will allow us to do this without getting in your way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279260</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-14 17:11:13 -0700</bug_when>
    <thetext>Arriya informed me that his soon-to-be-posted changes to the blur algorithm do not assume fast transposition. I think instead of forking we should probably just generalize ContextShadow. I&apos;ve posted prelimary patch which does this. I&apos;ll prepare it for real once Arriya lands his improvements (an advance version of which this patch uses).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279262</commentid>
    <comment_count>4</comment_count>
      <attachid>67620</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-14 17:14:41 -0700</bug_when>
    <thetext>Created attachment 67620
Preliminary patch for this issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279921</commentid>
    <comment_count>5</comment_count>
      <attachid>67766</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-15 20:03:02 -0700</bug_when>
    <thetext>Created attachment 67766
Generalize ContextShadow and add a (disabled) Cairo implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279925</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-15 20:05:41 -0700</bug_when>
    <thetext>Attachment 67766 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/cairo/CairoUtilities.h:29:  cairo_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/ContextShadow.h:37:  cairo_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/ContextShadow.h:38:  cairo_surface_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279926</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-15 20:06:07 -0700</bug_when>
    <thetext>Ariya has landed his awesome improvements to the blurring algorithm, so I&apos;ve posted the first patch for this issue. I&apos;ve decided to split this into two patches.

1. The first will generalize ContextShadow and add an unused Cairo implementation.
2. The second will activate it for all shadow code and update the baselines.

This should make the first patch easier to review by those unfamiliar with the Cairo code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279927</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-15 20:06:50 -0700</bug_when>
    <thetext>Here is a bug tracking the issue with check-webkit-style: https://bugs.webkit.org/show_bug.cgi?id=45867</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280140</commentid>
    <comment_count>9</comment_count>
      <attachid>67804</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-16 09:26:48 -0700</bug_when>
    <thetext>Created attachment 67804
Patch with Alex&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280142</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-16 09:29:04 -0700</bug_when>
    <thetext>Attachment 67804 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/cairo/CairoUtilities.h:29:  cairo_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/ContextShadow.h:38:  cairo_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/graphics/ContextShadow.h:39:  cairo_surface_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280148</commentid>
    <comment_count>11</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-09-16 09:39:32 -0700</bug_when>
    <thetext>*** Bug 43962 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282957</commentid>
    <comment_count>12</comment_count>
      <attachid>67804</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-22 08:44:13 -0700</bug_when>
    <thetext>Comment on attachment 67804
Patch with Alex&apos;s suggestions

View in context: https://bugs.webkit.org/attachment.cgi?id=67804&amp;action=review

Ok, great patch. I would like to see Ariya or someother guy of the Qt folks to look at the qt changes. Otherwise looks good, please fix the style issues. Did not look at the style bot results. r- for the issues mentioned above. If no Qt guy is available, I look at the qt changes again.

&gt; WebCore/platform/graphics/ContextShadow.cpp:33
&gt; +#include &quot;MathExtras.h&quot;
&gt; +#include &quot;Timer.h&quot;

shouldn&apos;T it be &lt;wtf/MathExtras.h&gt;? not sure about timer. Why do you need timer?

&gt; WebCore/platform/graphics/ContextShadow.cpp:57
&gt; -    if (!color.isValid() || !color.alpha()) {
&gt; +    if (!m_color.isValid()) {

Why not chechink for alpha?

&gt; WebCore/platform/graphics/ContextShadow.cpp:76
&gt; +    m_offset = FloatSize(0, 0);

Just FloatSize()

&gt; WebCore/platform/graphics/cairo/ContextShadowCairo.cpp:49
&gt; +// ContextShadow needs a scratch image as the buffer for the blur filter.
&gt; +// Instead of creating and destroying the buffer for every operation,
&gt; +// we create a buffer which will be automatically purged via a timer.
&gt; +class PurgeScratchBufferTimer : public TimerBase {
&gt; +private:

Ah here you need the timer, can the include get removed on th platform independent file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283090</commentid>
    <comment_count>13</comment_count>
      <attachid>68401</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-22 11:27:09 -0700</bug_when>
    <thetext>Created attachment 68401
Patch with Dirk&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283092</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-22 11:29:35 -0700</bug_when>
    <thetext>(In reply to comment #12)

Thanks for the review!

&gt; &gt; WebCore/platform/graphics/ContextShadow.cpp:33
&gt; &gt; +#include &quot;MathExtras.h&quot;
&gt; &gt; +#include &quot;Timer.h&quot;
&gt; shouldn&apos;T it be &lt;wtf/MathExtras.h&gt;? not sure about timer. Why do you need timer?

Fixed! Also removed the extra Timer.h.

&gt; &gt; WebCore/platform/graphics/ContextShadow.cpp:57
&gt; &gt; -    if (!color.isValid() || !color.alpha()) {
&gt; &gt; +    if (!m_color.isValid()) {
&gt; Why not chechink for alpha?

I&apos;m not sure where that went. I added it back.

&gt; &gt; WebCore/platform/graphics/ContextShadow.cpp:76
&gt; &gt; +    m_offset = FloatSize(0, 0);
&gt; Just FloatSize()

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283524</commentid>
    <comment_count>15</comment_count>
      <attachid>68401</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-09-22 22:26:17 -0700</bug_when>
    <thetext>Comment on attachment 68401
Patch with Dirk&apos;s suggestions

View in context: https://bugs.webkit.org/attachment.cgi?id=68401&amp;action=review

Nice stuff :)

&gt; WebCore/platform/graphics/ContextShadow.h:113
&gt; +    void calculateMinimalLayerRect(const FloatRect&amp; layerArea, const IntRect&amp; clipRect);

I guess &apos;calculateLayerBoundingRect&apos; is less complicated. &apos;Minimal&apos; there does not add anything.


Otherwise, LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283670</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-23 08:45:17 -0700</bug_when>
    <thetext>(In reply to comment #15)

&gt; I guess &apos;calculateLayerBoundingRect&apos; is less complicated. &apos;Minimal&apos; there does not add anything.

Thanks for the review! I&apos;ll change this before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283673</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-23 08:51:58 -0700</bug_when>
    <thetext>Committed r68145: &lt;http://trac.webkit.org/changeset/68145&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67620</attachid>
            <date>2010-09-14 17:14:41 -0700</date>
            <delta_ts>2010-09-15 20:02:59 -0700</delta_ts>
            <desc>Preliminary patch for this issue</desc>
            <filename>bug-45599-20100914171443.patch</filename>
            <type>text/plain</type>
            <size>85125</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzMwNjNhYTdmYTU4NmRlMjAyNTkyY2M4NjgxMDE1MmJkYjM3NjY4MS4uY2MxMGZhZDA0OTU0ODgw
ZGYzNzYyYjM4YjFkYmRjODcyZjNhMTkzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MCBAQAorMjAxMC0wOS0xNCAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0NhaXJvXSBHZW5lcmFsaXplIENvbnRleHRT
aGFkb3cgZnJvbSB0aGUgUXQgcG9ydCBhbmQgdXNlIGl0IGZvciBzaGFkb3cgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1OTkKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRT
aGFkb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OkNvbnRl
eHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6Ymx1ckxheWVySW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6Y2FsY3VsYXRlTWluaW1hbExheWVyUmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6Om9mZnNldCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cHVyZ2VTY3Jh
dGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOjpm
aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVwYXJlQ29udGV4dEZvckds
eXBoRHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzVG9Db250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y29udGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQ
bGF0Zm9ybUZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGxhdGZvcm1TdHJva2UpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsbFJlY3RTb3VyY2VPdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdQYXRoU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxDdXJyZW50Q2Fpcm9QYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZUN1cnJlbnRDYWlyb1BhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKGdldENhaXJvU3VyZmFjZVBpeGVsKToKKyAgICAgICAgKGdldEdk
a1BpeGJ1ZlBpeGVsKToKKyAgICAgICAgKGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93QnVmZmVyOjpzY3JhdGNoSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZl
cjo6dGltZXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpiZWdpblNo
YWRvd0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmVuZFNoYWRvd0xh
eWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6aGFzU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKwogMjAxMC0w
OS0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBhYjY4NTI3ZDA3NzRjYzI4OTkxOWIxN2I4OGQ3
YjM2YWM0ODhhNTFhLi44OTE3Y2RlOTc5ZDMzNWUxNTY1ODE4M2ZhZGI0NWFjZDg0Njc0NmM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTIwNzgsNiArMjA3OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmggXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rhc2hBcnJheS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmggXApAQCAtMzM0Myw2ICszMzQ1LDkgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRnJh
bWVHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhY2hlQ2Fpcm8uY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKQEAgLTMz
NzYsOCArMzM4MSw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5j
cHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmggXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSWNvbkd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNzI2YjYwMGEzM2JmMGY3ZmQ2MGVmODY4YTdhODU1Zjhj
OTRmY2Y4Zi4uNTE4MmFkMzU0ZmIzYmUwYTUwMjNlYjgzODhlYmIxY2I0MjI4Yzk2NSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0x
MDk0LDYgKzEwOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bnRleHRTaGFkb3cuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCkBAIC0xOTc0LDYgKzE5NzUsNyBAQCBIRUFERVJTICs9
IFwKICAgICBwbGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmggXApAQCAtMjAwNyw3ICsyMDA5LDYgQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGVuLmggXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0xheWVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VEZWNvZGVyUXQuaCBcCkBAIC0yNTI4LDcgKzI1MjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
YWdlL3F0L0ZyYW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1h
dGlvbk1hdHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAg
XAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZv
cm1EYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgzMGE2NjcyYmRhMWQ1NjI4YTVmMzA4MjU3ZDNkYWRhNTQ3MDY2YzUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCkBAIC0w
LDAgKzEsMTY3IEBACisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRleHRT
aGFkb3cuaCIKKworI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCit1c2luZyBXVEY6Om1pbjsKK3VzaW5nIFdU
Rjo6bWF4OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRleHRTaGFkb3c6OkNvbnRleHRT
aGFkb3coKQorICAgIDogbV90eXBlKE5vU2hhZG93KQorICAgICwgbV9ibHVyUmFkaXVzKDApCit7
Cit9CisKK0NvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3coY29uc3QgQ29sb3ImIGNvbG9yLCBm
bG9hdCByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgIDogbV9jb2xvcihjb2xv
cikKKyAgICAsIG1fYmx1clJhZGl1cyhyb3VuZChyYWRpdXMpKQorICAgICwgbV9vZmZzZXQob2Zm
c2V0KQoreworICAgIC8vIFNlZSBjb21tZW50cyBpbiBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNzkz
LCBpdCBzZWVtcyBzZW5zaWJsZQorICAgIC8vIHRvIGZvbGxvdyBTa2lhJ3MgbGltaXQgb2YgMTI4
IHBpeGVscyBvZiBibHVyIHJhZGl1cworICAgIG1fYmx1clJhZGl1cyA9IG1pbihtX2JsdXJSYWRp
dXMsIDEyOCk7CisKKyAgICAvLyBUaGUgdHlwZSBvZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUg
Ymx1ciByYWRpdXMsIHNoYWRvdyBvZmZzZXQsIGFuZCBzaGFkb3cgY29sb3IuCisgICAgaWYgKCFt
X2NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDYW4ndCBwYWludCB0aGUgc2hhZG93IHdp
dGggaW52YWxpZCBvciBpbnZpc2libGUgY29sb3IuCisgICAgICAgIG1fdHlwZSA9IE5vU2hhZG93
OworICAgIH0gZWxzZSBpZiAocmFkaXVzID4gMCkgeworICAgICAgICAvLyBTaGFkb3cgaXMgYWx3
YXlzIGJsdXJyZWQsIGV2ZW4gdGhlIG9mZnNldCBpcyB6ZXJvLgorICAgICAgICBtX3R5cGUgPSBC
bHVyU2hhZG93OworICAgIH0gZWxzZSBpZiAoIW1fb2Zmc2V0LndpZHRoKCkgJiYgIW1fb2Zmc2V0
LmhlaWdodCgpKSB7CisgICAgICAgIC8vIFdpdGhvdXQgYmx1ciBhbmQgemVybyBvZmZzZXQgbWVh
bnMgdGhlIHNoYWRvdyBpcyBmdWxseSBoaWRkZW4uCisgICAgICAgIG1fdHlwZSA9IE5vU2hhZG93
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fdHlwZSA9IFNvbGlkU2hhZG93OworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0U2hhZG93OjpjbGVhcigpCit7CisgICAgbV90eXBlID0gTm9TaGFkb3c7
CisgICAgbV9jb2xvciA9IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gMDsKKyAgICBtX29m
ZnNldCA9IEZsb2F0U2l6ZSgwLCAwKTsKK30KKworc3RhdGljIGNvbnN0IGludCBCbHVyU3VtU2hp
ZnQgPSAxNTsKK3ZvaWQgQ29udGV4dFNoYWRvdzo6Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hh
ciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgcm93U3RyaWRlKQoreworICAg
IGludCBjaGFubmVsc1s0XSA9IHsgMywgMCwgMSwgMyB9OworICAgIGludCBkbWF4ID0gbV9ibHVy
UmFkaXVzID4+IDE7CisgICAgaW50IGRtaW4gPSBkbWF4IC0gMSArIChtX2JsdXJSYWRpdXMgJiAx
KTsKKyAgICBpZiAoZG1pbiA8IDApCisgICAgICAgIGRtaW4gPSAwOworCisgICAgLy8gVHdvIHN0
YWdlczogaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKKyAgICBmb3IgKGludCBrID0gMDsgayA8IDI7
ICsraykgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGE7CisgICAg
ICAgIGludCBzdHJpZGUgPSAoayA9PSAwKSA/IDQgOiByb3dTdHJpZGU7CisgICAgICAgIGludCBk
ZWx0YSA9IChrID09IDApID8gcm93U3RyaWRlIDogNDsKKyAgICAgICAgaW50IGpmaW5hbCA9IChr
ID09IDApID8gc2l6ZS5oZWlnaHQoKSA6IHNpemUud2lkdGgoKTsKKyAgICAgICAgaW50IGRpbSA9
IChrID09IDApID8gc2l6ZS53aWR0aCgpIDogc2l6ZS5oZWlnaHQoKTsKKworICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGpmaW5hbDsgKytqLCBwaXhlbHMgKz0gZGVsdGEpIHsKKworICAgICAg
ICAgICAgLy8gRm9yIGVhY2ggc3RlcCwgd2UgYmx1ciB0aGUgYWxwaGEgaW4gYSBjaGFubmVsIGFu
ZCBzdG9yZSB0aGUgcmVzdWx0IGluCisgICAgICAgICAgICAvLyBhbm90aGVyIGNoYW5uZWwgZm9y
IHRoZSBzdWJzZXF1ZW50IHN0ZXAuIFdlIHVzZSBzbGlkaW5nIHdpbmRvdyBhbGdvcml0aG0KKyAg
ICAgICAgICAgIC8vIHRvIGFjY3VtdWxhdGUgdGhlIGFscGhhIHZhbHVlcy4gVGhpcyBpcyBtdWNo
IG1vcmUgZWZmaWNpZW50IHRoYW4gY29tcHV0aW5nCisgICAgICAgICAgICAvLyB0aGUgc3VtIG9m
IGVhY2ggcGl4ZWxzICBjb3ZlcmVkIGJ5IHRoZSBib3gga2VybmVsIHNpemUgZm9yIGVhY2ggeC4K
KyAgICAgICAgICAgIGZvciAoaW50IHN0ZXAgPSAwOyBzdGVwIDwgMzsgKytzdGVwKSB7CisgICAg
ICAgICAgICAgICAgaW50IHNpZGUxID0gKHN0ZXAgPT0gMCkgPyBkbWluIDogZG1heDsKKyAgICAg
ICAgICAgICAgICBpbnQgc2lkZTIgPSAoc3RlcCA9PSAxKSA/IGRtaW4gOiBkbWF4OworICAgICAg
ICAgICAgICAgIGludCBwaXhlbENvdW50ID0gc2lkZTEgKyAxICsgc2lkZTI7CisgICAgICAgICAg
ICAgICAgaW50IGludkNvdW50ID0gKCgxIDw8IEJsdXJTdW1TaGlmdCkgKyBwaXhlbENvdW50IC0g
MSkgLyBwaXhlbENvdW50OworICAgICAgICAgICAgICAgIGludCBvZnMgPSAxICsgc2lkZTI7Cisg
ICAgICAgICAgICAgICAgaW50IGFscGhhMSA9IHBpeGVsc1tjaGFubmVsc1tzdGVwXV07CisgICAg
ICAgICAgICAgICAgaW50IGFscGhhMiA9IHBpeGVsc1soZGltIC0gMSkgKiBzdHJpZGUgKyBjaGFu
bmVsc1tzdGVwXV07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcHRyID0gcGl4ZWxz
ICsgY2hhbm5lbHNbc3RlcCArIDFdOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBy
ZXYgPSBwaXhlbHMgKyBzdHJpZGUgKyBjaGFubmVsc1tzdGVwXTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiBuZXh0ID0gcGl4ZWxzICsgb2ZzICogc3RyaWRlICsgY2hhbm5lbHNbc3Rl
cF07CisKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBpbnQgc3VtID0g
c2lkZTEgKiBhbHBoYTEgKyBhbHBoYTE7CisgICAgICAgICAgICAgICAgaW50IGxpbWl0ID0gKGRp
bSA8IHNpZGUyICsgMSkgPyBkaW0gOiBzaWRlMiArIDE7CisgICAgICAgICAgICAgICAgZm9yIChp
ID0gMTsgaSA8IGxpbWl0OyArK2ksIHByZXYgKz0gc3RyaWRlKQorICAgICAgICAgICAgICAgICAg
ICBzdW0gKz0gKnByZXY7CisgICAgICAgICAgICAgICAgaWYgKGxpbWl0IDw9IHNpZGUyKQorICAg
ICAgICAgICAgICAgICAgICBzdW0gKz0gKHNpZGUyIC0gbGltaXQgKyAxKSAqIGFscGhhMjsKKwor
ICAgICAgICAgICAgICAgIGxpbWl0ID0gKHNpZGUxIDwgZGltKSA/IHNpZGUxIDogZGltOworICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW1pdDsgcHRyICs9IHN0cmlkZSwgbmV4dCAr
PSBzdHJpZGUsICsraSwgKytvZnMpIHsKKyAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChzdW0g
KiBpbnZDb3VudCkgPj4gQmx1clN1bVNoaWZ0OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0g
KChvZnMgPCBkaW0pID8gKm5leHQgOiBhbHBoYTIpIC0gYWxwaGExOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBwcmV2ID0gcGl4ZWxzICsgY2hhbm5lbHNbc3RlcF07CisgICAg
ICAgICAgICAgICAgZm9yICg7IG9mcyA8IGRpbTsgcHRyICs9IHN0cmlkZSwgcHJldiArPSBzdHJp
ZGUsIG5leHQgKz0gc3RyaWRlLCArK2ksICsrb2ZzKSB7CisgICAgICAgICAgICAgICAgICAgICpw
dHIgPSAoc3VtICogaW52Q291bnQpID4+IEJsdXJTdW1TaGlmdDsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtICs9ICgqbmV4dCkgLSAoKnByZXYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmb3IgKDsgaSA8IGRpbTsgcHRyICs9IHN0cmlkZSwgcHJldiArPSBzdHJpZGUsICsr
aSkgeworICAgICAgICAgICAgICAgICAgICAqcHRyID0gKHN1bSAqIGludkNvdW50KSA+PiBCbHVy
U3VtU2hpZnQ7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBhbHBoYTIgLSAoKnByZXYpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBDb250ZXh0U2hhZG93OjpjYWxjdWxhdGVNaW5pbWFsTGF5ZXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICAvLyBDYWxj
dWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBibHVycmVkIGxheWVyLgorICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QobGF5ZXJBcmVhKTsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZSht
X29mZnNldCk7CisgICAgbV9sYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRlc3RpbmF0aW9u
UmVjdCk7CisKKyAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzICog
MiB0byBnaXZlIGV4dHJhIHNwYWNlIGZvciB0aGUgYmx1ciB0cmFuc2l0aW9uLgorICAgIG1fbGF5
ZXJSZWN0LmluZmxhdGUoKG1fdHlwZSA9PSBCbHVyU2hhZG93KSA/IGNlaWwobV9ibHVyUmFkaXVz
ICogMikgOiAwKTsKKworICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMobV9sYXllclJlY3QpKSB7
CisgICAgICAgIC8vIE5vIG5lZWQgdG8gaGF2ZSB0aGUgYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBj
bGlwLgorICAgICAgICBtX2xheWVyUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworCisgICAgICAg
IC8vIElmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLCB3ZSBhcmVuJ3Qg
cGFpbnRpbmcgYXQgYWxsLgorICAgICAgICBpZiAobV9sYXllclJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIGFkanVzdCBhZ2FpbiBiZWNhdXNlIHRo
ZSBwaXhlbHMgYXQgdGhlIGJvcmRlcnMgYXJlIHN0aWxsCisgICAgICAgIC8vIHBvdGVudGlhbGx5
IGFmZmVjdGVkIGJ5IHRoZSBwaXhlbHMgb3V0c2lkZSB0aGUgYnVmZmVyLgorICAgICAgICBpZiAo
bV90eXBlID09IEJsdXJTaGFkb3cpCisgICAgICAgICAgICBtX2xheWVyUmVjdC5pbmZsYXRlKCht
X3R5cGUgPT0gQmx1clNoYWRvdykgPyBjZWlsKG1fYmx1clJhZGl1cyAqIDIpIDogMCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29udGV4dFNoYWRvdy5oCnNpbWlsYXJpdHkgaW5kZXggNTglCnJlbmFtZSBmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5oCnJlbmFtZSB0byBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaAppbmRleCA3MTQwMzQwZDc4ZTRkNDgy
NDhjZjAxY2Y3MzZmZDJiMWQwNWE5MWQ3Li4zOWYyOWFiYmJkYWI3MjgyODQ2YjI1YTViZDk5YTE3
YmY2MDFjZjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRl
eHRTaGFkb3cuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cu
aApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KICAqCiAgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKQEAgLTgsOCArOSw3IEBACiAgKiBhcmUgbWV0OgogICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgogICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQpA
QCAtMjgsNyArMjgsMjIgQEAKICNpZm5kZWYgQ29udGV4dFNoYWRvd19oCiAjZGVmaW5lIENvbnRl
eHRTaGFkb3dfaAogCi0jaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVm
Q291bnRlZC5oIgorCisjaWYgUExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8g
Y2Fpcm9fdDsKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsK
K3R5cGVkZWYgY2Fpcm9fc3VyZmFjZV90KiBQbGF0Zm9ybUltYWdlOwordHlwZWRlZiBjYWlyb190
KiBQbGF0Zm9ybUNvbnRleHQ7CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRSW1hZ2U+
CitjbGFzcyBRUGFpbnRlcjsKK3R5cGVkZWYgUUltYWdlIFBsYXRmb3JtSW1hZ2U7Cit0eXBlZGVm
IFFQYWludGVyKiBQbGF0Zm9ybUNvbnRleHQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00NCw0OSArNTksNTcgQEAgY2xhc3MgQ29udGV4dFNoYWRvdyB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vU2hhZG93LAotICAgICAgICBPcGFxdWVTb2xpZFNoYWRvdywK
LSAgICAgICAgQWxwaGFTb2xpZFNoYWRvdywKKyAgICAgICAgU29saWRTaGFkb3csCiAgICAgICAg
IEJsdXJTaGFkb3cKLSAgICB9IHR5cGU7CisgICAgfSBtX3R5cGU7CiAKLSAgICBRQ29sb3IgY29s
b3I7Ci0gICAgaW50IGJsdXJSYWRpdXM7Ci0gICAgUVBvaW50RiBvZmZzZXQ7CisgICAgQ29sb3Ig
bV9jb2xvcjsKKyAgICBpbnQgbV9ibHVyUmFkaXVzOworICAgIEZsb2F0U2l6ZSBtX29mZnNldDsK
IAogICAgIENvbnRleHRTaGFkb3coKTsKLSAgICBDb250ZXh0U2hhZG93KGNvbnN0IFFDb2xvciYg
YywgZmxvYXQgciwgcXJlYWwgZHgsIHFyZWFsIGR5KTsKKyAgICBDb250ZXh0U2hhZG93KGNvbnN0
IENvbG9yJiwgZmxvYXQgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7CiAKICAgICB2
b2lkIGNsZWFyKCk7CiAKICAgICAvLyBUaGUgcGFpciBiZWdpblNoYWRvd0xheWVyIGFuZCBlbmRT
aGFkb3dMYXllciBjcmVhdGVzIGEgdGVtcG9yYXJ5IGltYWdlCi0gICAgLy8gd2hlcmUgdGhlIGNh
bGxlciBjYW4gZHJhdyBvbnRvLCB1c2luZyB0aGUgcmV0dXJuZWQgUVBhaW50ZXIuIFRoaXMKLSAg
ICAvLyBRUGFpbnRlciBpbnN0YW5jZSBtdXN0IGJlIHVzZWQgb25seSB0byBkcmF3IGJldHdlZW4g
dGhlIGNhbGwgdG8KLSAgICAvLyBiZWdpblNoYWRvd0xheWVyIGFuZCBlbmRTaGFkb3dMYXllci4K
KyAgICAvLyB3aGVyZSB0aGUgY2FsbGVyIGNhbiBkcmF3IG9udG8sIHVzaW5nIHRoZSByZXR1cm5l
ZCBjb250ZXh0LiBUaGlzCisgICAgLy8gY29udGV4dCBtdXN0IGJlIHVzZWQgb25seSB0byBkcmF3
IGJldHdlZW4gdGhlIGNhbGwgdG8gIGJlZ2luU2hhZG93TGF5ZXIgCisgICAgLy8gYW5kIGVuZFNo
YWRvd0xheWVyLgogICAgIC8vCi0gICAgLy8gTm90ZTogbXVsdGlwbGUvbmVzdGVkIHNoYWRvdyBs
YXllciBpcyBOT1QgYWxsb3dlZC4KKyAgICAvLyBOb3RlOiBtdWx0aXBsZS9uZXN0ZWQgc2hhZG93
IGxheWVycyBhcmUgTk9UIGFsbG93ZWQuCiAgICAgLy8KICAgICAvLyBUaGUgY3VycmVudCBjbGlw
IHJlZ2lvbiB3aWxsIGJlIHVzZWQgdG8gb3B0aW1pemUgdGhlIHNpemUgb2YgdGhlCiAgICAgLy8g
dGVtcG9yYXJ5IGltYWdlLiBUaHVzLCB0aGUgb3JpZ2luYWwgcGFpbnRlciBzaG91bGQgbm90IGNo
YW5nZSBhbnkKLSAgICAvLyBjbGlwcGluZyB1bnRpbCBlbmRTaGFkb3dMYXllci4KLSAgICAvLyBJ
ZiB0aGUgc2hhZG93IHdpbGwgYmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBjbGlwcGluZyByZWdp
b24sCi0gICAgLy8gYmVnaW5TaGFkb3dMYXllciB3aWxsIHJldHVybiAwLgorICAgIC8vIGNsaXBw
aW5nIHVudGlsIGVuZFNoYWRvd0xheWVyLiBJZiB0aGUgc2hhZG93IHdpbGwgYmUgY29tcGxldGVs
eSBvdXRzaWRlIAorICAgIC8vIHRoZSBjbGlwcGluZyByZWdpb24sIGJlZ2luU2hhZG93TGF5ZXIg
d2lsbCByZXR1cm4gMC4KICAgICAvLwotICAgIC8vIFRoZSByZXR1cm5lZCBRUGFpbnRlciB3aWxs
IGhhdmUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhbmQgY2xpcHBpbmcKKyAgICAvLyBUaGUg
cmV0dXJuZWQgY29udGV4dCB3aWxsIGhhdmUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhbmQg
Y2xpcHBpbmcKICAgICAvLyBwcm9wZXJseSBpbml0aWFsaXplZCB0byBzdGFydCBkb2luZyB0aGUg
cGFpbnRpbmcgKG5vIG5lZWQgdG8gYWNjb3VudAogICAgIC8vIGZvciB0aGUgc2hhZG93IG9mZnNl
dCksIGhvd2V2ZXIgaXQgd2lsbCBub3QgaGF2ZSB0aGUgc2FtZSByZW5kZXIgaGludHMsCi0gICAg
Ly8gcGVuLCBicnVzaCwgZXRjIGFzIHRoZSBwYXNzZWQgUVBhaW50ZXIuIFRoaXMgaXMgaW50ZW50
aW9uYWwsIHVzdWFsbHkKLSAgICAvLyBzaGFkb3cgaGFzIGRpZmZlcmVudCBwcm9wZXJ0aWVzIHRo
YW4gdGhlIHNoYXBlIHdoaWNoIGNhc3RzIHRoZSBzaGFkb3cuCisgICAgLy8gcGVuLCBicnVzaCwg
ZXRjIGFzIHRoZSBwYXNzZWQgY29udGV4dC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgdXN1YWxseQor
ICAgIC8vIHNoYWRvd3MgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyB0aGFuIHRoZSBzaGFwZXMg
d2hpY2ggY2FzdCB0aGVtLgogICAgIC8vCiAgICAgLy8gT25jZSBlbmRTaGFkb3dMYXllciBpcyBj
YWxsZWQsIHRoZSB0ZW1wb3JhcnkgaW1hZ2Ugd2lsbCBiZSBkcmF3bgogICAgIC8vIHdpdGggdGhl
IG9yaWdpbmFsIHBhaW50ZXIuIElmIGJsdXIgcmFkaXVzIGlzIHNwZWNpZmllZCwgdGhlIHNoYWRv
dwogICAgIC8vIHdpbGwgYmUgZmlsdGVyZWQgZmlyc3QuCi0gICAgUVBhaW50ZXIqIGJlZ2luU2hh
ZG93TGF5ZXIoUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0RiYgcmVjdCk7Ci0gICAgdm9pZCBlbmRT
aGFkb3dMYXllcihRUGFpbnRlciogcCk7CisgICAgUGxhdGZvcm1Db250ZXh0IGJlZ2luU2hhZG93
TGF5ZXIoUGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSk7CisgICAg
dm9pZCBlbmRTaGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQpOworICAgIHZvaWQgYmx1ckxheWVy
SW1hZ2UoKTsKKyAgICBzdGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsKKworI2lmIFBM
QVRGT1JNKFFUKQorICAgIFFQb2ludEYgb2Zmc2V0KCkgeyByZXR1cm4gUVBvaW50RihtX29mZnNl
dC53aWR0aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7IH0KKyNlbmRpZgorCiAKIHByaXZhdGU6Ci0g
ICAgUVJlY3QgbV9sYXllclJlY3Q7Ci0gICAgUUltYWdlIG1fbGF5ZXJJbWFnZTsKLSAgICBRUGFp
bnRlciogbV9sYXllclBhaW50ZXI7CisgICAgSW50UmVjdCBtX2xheWVyUmVjdDsKKyAgICBQbGF0
Zm9ybUltYWdlIG1fbGF5ZXJJbWFnZTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgbV9sYXllckNvbnRl
eHQ7CisKKyAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRT
aXplJiBpbWFnZVNpemUsIGludCBzdHJpZGUpOworICAgIHZvaWQgY2FsY3VsYXRlTWluaW1hbExh
eWVyUmVjdChjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggY2IwNDVlMTYxZDA5YWNlM2E1MDQxOTcxNzQ0
NGYwZTRjNmQ1NGJmZi4uODQ0MDRlZDQwNmQ2N2ZkMjVlMjQ0NTI5MzViYmYyZjU5YjNkZjU4OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC00Miw2
ICs0Miw5IEBAIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKICNlbGlmIFBMQVRGT1JNKENBSVJPKQogI2luY2x1ZGUgIlBsYXRmb3JtUmVmUHRyQ2Fpcm8u
aCIKIHR5cGVkZWYgc3RydWN0IF9jYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRleHRTaGFkb3c7Cit9CiAjZWxpZiBQTEFURk9STShP
UEVOVkcpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTdXJmYWNlT3BlblZHOwpAQCAtNDE2
LDYgKzQxOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRHZGtFeHBv
c2VFdmVudChHZGtFdmVudEV4cG9zZSopOwogICAgICAgICBHZGtEcmF3YWJsZSogZ2RrRHJhd2Fi
bGUoKSBjb25zdDsKICAgICAgICAgR2RrRXZlbnRFeHBvc2UqIGdka0V4cG9zZUV2ZW50KCkgY29u
c3Q7CisgICAgICAgIENvbnRleHRTaGFkb3cqIGNvbnRleHRTaGFkb3coKTsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oSEFJS1UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9DYWlyb1V0aWxpdGllcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5jcHAKc2ltaWxhcml0eSBpbmRleCA3OSUKY29weSBmcm9tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmgKY29weSB0byBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAppbmRleCA1OTRhYmMwZDRm
ODI1Mzc5NjI3OTVhYjk4OTA1NTFkMTEwMDU0Yjg3Li5lZDRlYjgwYzc3ZTY5NGE0ZmM0MjA4YTBl
NDVkNzQ4MzAyZmI2MGYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0yMyw5ICsyMywxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIENhaXJvVXRpbGl0aWVzX2gKLSNkZWZpbmUgQ2Fpcm9VdGlsaXRpZXNfaAor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAKLUdka1Bp
eGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpOworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KIAotI2VuZGlmIC8v
IENhaXJvVXRpbGl0aWVzX2gKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAg
ICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKKyAgICBjb2xvci5nZXRSR0JBKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCnNpbWls
YXJpdHkgaW5kZXggOTAlCmNvcHkgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
YWlyb1V0aWxpdGllcy5oCmNvcHkgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCmluZGV4IDU5NGFiYzBkNGY4MjUzNzk2Mjc5NWFiOTg5MDU1MWQxMTAw
NTRiODcuLmFkZWQyMTQ3YTY5YTQyZGM2NDhmZWRhMTJjYThhYjQyMmU4NjE3YTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCkBAIC0yNiw2
ICsyNiwxMyBAQAogI2lmbmRlZiBDYWlyb1V0aWxpdGllc19oCiAjZGVmaW5lIENhaXJvVXRpbGl0
aWVzX2gKIAotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSk7Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29sb3I7CisKK3ZvaWQgc2V0U291cmNlUkdCQUZyb21D
b2xvcihjYWlyb190KiwgY29uc3QgQ29sb3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gQ2Fpcm9VdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNzYy
Zjc4NzBjMDNjMmE5YWE5ZDZkYmZlNWU4NDVmZjhkN2Q0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKQEAg
LTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0U2hhZG93
LmgiCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY2Fpcm9f
c3VyZmFjZV90KiBzY3JhdGNoQnVmZmVyID0gMDsKK3N0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1
ZmZlcigpCit7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHNjcmF0Y2hCdWZmZXIpOworICAg
IHNjcmF0Y2hCdWZmZXIgPSAwOworfQorCisvLyBDb250ZXh0U2hhZG93IG5lZWRzIGEgc2NyYXRj
aCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgYmx1ciBmaWx0ZXIuCisvLyBJbnN0ZWFkIG9m
IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwK
Ky8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2Vk
IHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGlt
ZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0
Y2hCdWZmZXIoKTsgfQorfTsKK3N0YXRpYyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciBwdXJnZVNj
cmF0Y2hCdWZmZXJUaW1lcjsKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KCkKK3sKKyAgICBpZiAocHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RvcCgpOworICAgIHB1cmdlU2NyYXRjaEJ1ZmZl
clRpbWVyLnN0YXJ0T25lU2hvdCgyKTsKK30KKworc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogZ2V0
U2NyYXRjaEJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgc2Ny
YXRjaFdpZHRoID0gc2NyYXRjaEJ1ZmZlciA/IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KHNjcmF0Y2hCdWZmZXIpIDogMDsKKyAgICBpbnQgc2NyYXRjaEhlaWdodCA9IHNjcmF0Y2hCdWZm
ZXIgPyBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc2NyYXRjaEJ1ZmZlcikgOiAwOwor
CisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVm
ZmVyIGlzIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUu
IEhvd2V2ZXIsIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcworICAgIC8vIG11Y2ggc21hbGxlciB0
aGFuIG91ciBidWZmZXIsIHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKKyAg
ICAvLyBrZWVwIHRvbyBtYW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgorICAgIGlm
IChzY3JhdGNoQnVmZmVyICYmIChzY3JhdGNoV2lkdGggPiB3aWR0aCkgJiYgKHNjcmF0Y2hIZWln
aHQgPiBoZWlnaHQpCisgICAgICAgICYmICgoKDIgKiB3aWR0aCkgPiBzY3JhdGNoV2lkdGgpICYm
ICgoMiAqIGhlaWdodCkgPiBzY3JhdGNoSGVpZ2h0KSkpIHsKKyAgICAgICAgcmV0dXJuIHNjcmF0
Y2hCdWZmZXI7CisgICAgfQorCisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisKKyAgICAvLyBS
b3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZl
ciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4KKyAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+
IDUpKSA8PCA1OworICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKyAgICBz
Y3JhdGNoQnVmZmVyID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FS
R0IzMiwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHNjcmF0Y2hCdWZmZXI7Cit9CisKK1Bs
YXRmb3JtQ29udGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKFBsYXRmb3JtQ29u
dGV4dCBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKK3sKKyAgICBkb3VibGUg
eDEsIHgyLCB5MSwgeTI7CisgICAgY2Fpcm9fY2xpcF9leHRlbnRzKGNvbnRleHQsICZ4MSwgJnkx
LCAmeDIsICZ5Mik7CisgICAgY2FsY3VsYXRlTWluaW1hbExheWVyUmVjdChsYXllckFyZWEsIElu
dFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKSk7CisKKyAgICAvLyBEb24ndCBwYWludCBp
ZiB3ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KKyAgICBpZiAobV9sYXll
clJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9
IGdldFNjcmF0Y2hCdWZmZXIobV9sYXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyQ29udGV4
dCA9IGNhaXJvX2NyZWF0ZShtX2xheWVySW1hZ2UpOworCisgICAgLy8gQWx3YXlzIGNsZWFyIHRo
ZSBzdXJmYWNlIGZpcnN0LgorICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVyQ29udGV4dCwg
Q0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KG1fbGF5ZXJDb250ZXh0KTsK
KyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJBVE9SX09W
RVIpOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0LCBtX29mZnNldC53aWR0
aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fbGF5ZXJDb250
ZXh0LCAtbV9sYXllclJlY3QueCgpLCAtbV9sYXllclJlY3QueSgpKTsKKyAgICByZXR1cm4gbV9s
YXllckNvbnRleHQ7Cit9CisKK3ZvaWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoY2Fp
cm9fdCogY3IpCit7CisgICAgY2Fpcm9fZGVzdHJveShtX2xheWVyQ29udGV4dCk7CisgICAgbV9s
YXllckNvbnRleHQgPSAwOworCisgICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KQorICAgICAg
ICBibHVyTGF5ZXJJbWFnZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fbGF5ZXJJbWFn
ZSksCisgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgobV9sYXllckltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1f
bGF5ZXJJbWFnZSkpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUobV9sYXllckltYWdlKSk7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBz
ZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBtX2NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1cmZh
Y2UoY3IsIG1fbGF5ZXJJbWFnZSwgbV9sYXllclJlY3QueCgpLCBtX2xheWVyUmVjdC55KCkpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAgLy8gU2NoZWR1bGUgYSBwdXJnZSBvZiB0aGUg
c2NyYXRjaCBidWZmZXIuIFdlIGRvIG5vdCBuZWVkIHRvIGRlc3Ryb3kgdGhlIHN1cmZhY2UuCisg
ICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IGNkNWQzNjI2MTA1ZGM2MmE5
YmE3ZTk5YWMyMDcwOWM2NjEzOTEwNmMuLjk1NWJmYTg1NTAwMzY2ZGYwYmRlNjhkNTRhZTkzNjE3
ZDk5NTFkMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
by5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdy
YWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00MiwxNCArNDQsMzEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3N0YXRpYyB2b2lk
IHByZXBhcmVDb250ZXh0Rm9yR2x5cGhEcmF3aW5nKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3NhdmUoY3Ip
OworICAgIGNhaXJvX3NldF9zY2FsZWRfZm9udChjb250ZXh0LCBmb250LT5wbGF0Zm9ybURhdGEo
KS5zY2FsZWRGb250KCkpOworICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNP
YmxpcXVlKCkpIHsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgbWF0ID0gezEsIDAsIC10YW5mKFNZ
TlRIRVRJQ19PQkxJUVVFX0FOR0xFICogYWNvc2YoMCkgLyA5MCksIDEsIHBvaW50LngoKSwgcG9p
bnQueSgpfTsKKyAgICAgICAgY2Fpcm9fdHJhbnNmb3JtKGNvbnRleHQsICZtYXQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCBwb2ludC54KCksIHBvaW50
LnkoKSk7CisgICAgfQorfQogCi0gICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNyLCBmb250LT5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpOworc3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29u
dGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQoreworICAgIGNhaXJvX3Nob3dfZ2x5
cGhzKGNvbnRleHQsIGdseXBocywgbnVtR2x5cGhzKTsKKyAgICBpZiAoZm9udC0+c3ludGhldGlj
Qm9sZE9mZnNldCgpKSB7CisgICAgICAgIC8vIFdlIGNvdWxkIHVzZSBjYWlyb19zYXZlL2NhaXJv
X3Jlc3RvcmUgaGVyZSwgYnV0IHR3byB0cmFuc2xhdGlvbnMgYXJlIGxpa2VseSBmYXN0ZXIuCisg
ICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0
KCksIDApOworICAgICAgICBjYWlyb19zaG93X2dseXBocyhjb250ZXh0LCBnbHlwaHMsIG51bUds
eXBocyk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtZm9udC0+c3ludGhldGlj
Qm9sZE9mZnNldCgpLCAwKTsKKyAgICB9Cit9CiAKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewogICAgIEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IChHbHlwaEJ1ZmZlckdseXBoKilnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSAwLjBmOwpAQCAtNTksNzUgKzc4LDMy
IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQoZnJvbSArIGkpOwogICAgIH0KIAotICAgIENvbG9yIGZpbGxDb2xvciA9IGNv
bnRleHQtPmZpbGxDb2xvcigpOwotCi0gICAgLy8gU3ludGhldGljIE9ibGlxdWUKLSAgICBpZihm
b250LT5wbGF0Zm9ybURhdGEoKS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgY2Fpcm9f
bWF0cml4X3QgbWF0ID0gezEsIDAsIC10YW5mKFNZTlRIRVRJQ19PQkxJUVVFX0FOR0xFICogYWNv
c2YoMCkgLyA5MCksIDEsIHBvaW50LngoKSwgcG9pbnQueSgpfTsKLSAgICAgICAgY2Fpcm9fdHJh
bnNmb3JtKGNyLCAmbWF0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLSAgICB9Ci0KLSAgICAvLyBUZXh0IHNoYWRvdywg
aW5zcGlyZWQgYnkgRm9udE1hYwotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxv
YXQgc2hhZG93Qmx1ciA9IDA7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgYm9vbCBoYXNT
aGFkb3cgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIGNUZXh0RmlsbAotICAgICAgICAg
ICAgICAgICAgICAgJiYgY29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1
ciwgc2hhZG93Q29sb3IpOworICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7CisgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dC0+Y29udGV4dFNoYWRv
dygpOwogCi0gICAgLy8gVE9ETzogQmx1ciBzdXBwb3J0Ci0gICAgaWYgKGhhc1NoYWRvdykgewot
ICAgICAgICAvLyBEaXNhYmxlIGdyYXBoaWNzIGNvbnRleHQgc2hhZG93cyAobm90IHlldCBpbXBs
ZW1lbnRlZCkgYW5kIHBhaW50IHRoZW0gbWFudWFsbHkKLSAgICAgICAgY29udGV4dC0+Y2xlYXJT
aGFkb3coKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0NvbG9yLnJlZCgp
LCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRvd0NvbG9yLmFs
cGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7CisgICAgLy8gT3B0aW1pemUgbm9uLWJs
dXJyeSBzaGFkb3dzLCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3aXRob3V0IHRoZSBDb250ZXh0U2hh
ZG93LgorICAgIEFTU0VSVChzaGFkb3cpOworICAgIGlmIChzaGFkb3ctPm1fdHlwZSA9PSBDb250
ZXh0U2hhZG93OjpTb2xpZFNoYWRvdykgewogICAgICAgICBjYWlyb19zYXZlKGNyKTsKLQotICAg
ICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICAgICAgc2hhZG93RmlsbENv
bG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLQotI2lmIEVOQUJMRShG
SUxURVJTKQorICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRvdy0+bV9vZmZzZXQud2lk
dGgoKSwgc2hhZG93LT5tX29mZnNldC5oZWlnaHQoKSk7CisgICAgICAgIHNldFNvdXJjZVJHQkFG
cm9tQ29sb3IoY3IsIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgIHByZXBhcmVDb250ZXh0Rm9y
R2x5cGhEcmF3aW5nKGNyLCBmb250LCBwb2ludCk7CisgICAgICAgIGNhaXJvX3Nob3dfZ2x5cGhz
KGNyLCBnbHlwaHMsIG51bUdseXBocyk7CisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworICAg
IH0gZWxzZSBpZiAoc2hhZG93LT5tX3R5cGUgPT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykg
ewogICAgICAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwogICAgICAgICBjYWlyb19z
Y2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQo
KSwgZ2x5cGhzLCBudW1HbHlwaHMsICZleHRlbnRzKTsKLQotICAgICAgICBGbG9hdFJlY3QgcmVj
dChGbG9hdFBvaW50KCksIEZsb2F0U2l6ZShleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCkp
OwotICAgICAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemU7Ci0gICAgICAgIEZsb2F0UmVjdCBz
aGFkb3dSZWN0OwotICAgICAgICBmbG9hdCByYWRpdXMgPSAwOwotICAgICAgICBjb250ZXh0LT5j
YWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1lbnNpb25zKHNoYWRvd0J1ZmZlclNpemUsIHNoYWRvd1Jl
Y3QsIHJhZGl1cywgcmVjdCwgc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKTsKLQotICAgICAgICAv
LyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyCi0gICAgICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaGFkb3dCdWZmZXJT
aXplKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93QnVm
ZmVyLT5jb250ZXh0KCk7Ci0gICAgICAgIGNhaXJvX3QqIHNoYWRvd0NyID0gc2hhZG93Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRvd0Ny
LCByYWRpdXMsIGV4dGVudHMuaGVpZ2h0ICsgcmFkaXVzKTsKLQotICAgICAgICBjYWlyb19zZXRf
c2NhbGVkX2ZvbnQoc2hhZG93Q3IsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSk7
Ci0gICAgICAgIGNhaXJvX3Nob3dfZ2x5cGhzKHNoYWRvd0NyLCBnbHlwaHMsIG51bUdseXBocyk7
Ci0gICAgICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAg
IGNhaXJvX3NhdmUoc2hhZG93Q3IpOwotICAgICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKHNoYWRv
d0NyLCBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIDApOwotICAgICAgICAgICAgY2Fpcm9f
c2hvd19nbHlwaHMoc2hhZG93Q3IsIGdseXBocywgbnVtR2x5cGhzKTsKLSAgICAgICAgICAgIGNh
aXJvX3Jlc3RvcmUoc2hhZG93Q3IpOworICAgICAgICBGbG9hdFJlY3QgZm9udEV4dGVudHNSZWN0
KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQsIGV4dGVudHMud2lkdGgsIGV4
dGVudHMuaGVpZ2h0KTsKKyAgICAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+
YmVnaW5TaGFkb3dMYXllcihjciwgZm9udEV4dGVudHNSZWN0KTsKKyAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKKyAgICAgICAgICAgIHByZXBhcmVDb250ZXh0Rm9yR2x5cGhEcmF3aW5nKHNo
YWRvd0NvbnRleHQsIGZvbnQsIHBvaW50KTsKKyAgICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRl
eHQoc2hhZG93Q29udGV4dCwgZm9udCwgZ2x5cGhzLCBudW1HbHlwaHMpOworICAgICAgICAgICAg
c2hhZG93LT5lbmRTaGFkb3dMYXllcihjcik7CiAgICAgICAgIH0KLSAgICAgICAgY2Fpcm9fdHJh
bnNsYXRlKGNyLCAwLjAsIC1leHRlbnRzLmhlaWdodCk7Ci0gICAgICAgIGNvbnRleHQtPmFwcGx5
UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRv
d1JlY3QsIHJhZGl1cyk7Ci0jZWxzZQotICAgICAgICBjYWlyb190cmFuc2xhdGUoY3IsIHNoYWRv
d09mZnNldC53aWR0aCgpLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19z
aG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwotICAgICAgICBpZiAoZm9udC0+c3lu
dGhldGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAg
ICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCAw
KTsKLSAgICAgICAgICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNyLCBnbHlwaHMsIG51bUdseXBocyk7
Ci0gICAgICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAg
ICAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAgICAgfQogCisgICAgY2Fpcm9fc2F2ZShjcik7Cisg
ICAgcHJlcGFyZUNvbnRleHRGb3JHbHlwaERyYXdpbmcoY3IsIGZvbnQsIHBvaW50KTsKICAgICBp
ZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBjVGV4dEZpbGwpIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNl
KGNyLCBjb250ZXh0LT5maWxsR3JhZGllbnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKQEAgLTE0
NywxNyArMTIzLDEwIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGF0dGVybik7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICAgICAg
ICAgIGZpbGxDb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEgKiBj
b250ZXh0LT5nZXRBbHBoYSgpKTsKLSAgICAgICAgfQotICAgICAgICBjYWlyb19zaG93X2dseXBo
cyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwotICAgICAgICBpZiAoZm9udC0+c3ludGhldGljQm9s
ZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgICAgIGNh
aXJvX3RyYW5zbGF0ZShjciwgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCAwKTsKLSAgICAg
ICAgICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNyLCBnbHlwaHMsIG51bUdseXBocyk7Ci0gICAgICAg
ICAgICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gY29udGV4
dC0+ZmlsbENvbG9yKCk7CisgICAgICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBj
b2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLnJnYigpLCBjb2xvci5hbHBoYSgpICogY29udGV4
dC0+Z2V0QWxwaGEoKSkpOwogICAgICAgICB9CisgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQo
Y3IsIGZvbnQsIGdseXBocywgbnVtR2x5cGhzKTsKICAgICB9CiAKICAgICAvLyBQcmV2ZW50IHJ1
bm5pbmcgaW50byBhIGxvbmcgY29tcHV0YXRpb24gd2l0aGluIGNhaXJvLiBJZiB0aGUgc3Ryb2tl
IHdpZHRoIGlzCkBAIC0xODMsMjAgKzE1MiwxNCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdHRlcm4p
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IgPSBjb250
ZXh0LT5zdHJva2VDb2xvcigpOwotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGE7Ci0gICAgICAgICAgICBzdHJva2VDb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEgKiBjb250ZXh0LT5nZXRBbHBoYSgpKTsKLSAgICAgICAgfSAKKyAgICAg
ICAgICAgIENvbG9yIGNvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgICAg
IHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3Iu
cmdiKCksIGNvbG9yLmFscGhhKCkgKiBjb250ZXh0LT5nZXRBbHBoYSgpKSk7CisgICAgICAgIH0K
ICAgICAgICAgY2Fpcm9fZ2x5cGhfcGF0aChjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwogICAgICAg
ICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkpOwog
ICAgICAgICBjYWlyb19zdHJva2UoY3IpOwogICAgIH0KIAotICAgIC8vIFJlLWVuYWJsZSB0aGUg
cGxhdGZvcm0gc2hhZG93IHdlIGRpc2FibGVkIGVhcmxpZXIKLSAgICBpZiAoaGFzU2hhZG93KQot
ICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFk
b3dDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7Ci0KICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAppbmRleCBkNmNjOTZhNmNhZDQ2YzlhZDUzYmE0NWVkNjAyMzA0YTdi
ZTFmZTZhLi5lOTg2YzQyMDcxY2VkMDBhMjZjMGQ1OGM1NjAwMGQ0MjlkZDE2YWQ0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcApAQCAtMzUsNiArMzUsOCBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC00OCw3ICs1MCw2
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1SZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotCiAjaW5jbHVkZSA8Y2Fpcm8u
aD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTcxLDExICs3Miw5
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGlubGluZSB2b2lkIHNldENvbG9yKGNhaXJvX3QqIGNyLCBjb25zdCBDb2xvciYgY29sKQorQ29u
dGV4dFNoYWRvdyogR3JhcGhpY3NDb250ZXh0Ojpjb250ZXh0U2hhZG93KCkKIHsKLSAgICBmbG9h
dCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICBjb2wuZ2V0UkdCQShyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CisgICAgcmV0dXJuICZtX2RhdGEtPnNoYWRvdzsKIH0KIAogc3RhdGljIGlu
bGluZSB2b2lkIHNldFBsYXRmb3JtRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJv
X3QqIGNyLCBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBnY3ApCkBAIC04OSw3ICs4OCw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQbGF0Zm9ybUZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjYWlyb190KiBjciwgR3JhcGhpCiAgICAgfSBlbHNlIGlmIChnY3AtPnN0YXRlLmZpbGxHcmFk
aWVudCkKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5maWxsR3JhZGll
bnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgZWxzZQotICAgICAgICBzZXRDb2xvcihjciwg
Y29udGV4dC0+ZmlsbENvbG9yKCkpOworICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNy
LCBjb250ZXh0LT5maWxsQ29sb3IoKSk7CiAgICAgY2Fpcm9fY2xpcF9wcmVzZXJ2ZShjcik7CiAg
ICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjciwgZ2NwLT5zdGF0ZS5nbG9iYWxBbHBoYSk7CiAg
ICAgY2Fpcm9fcmVzdG9yZShjcik7CkBAIC0xMDksNyArMTA4LDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIHNldFBsYXRmb3JtU3Ryb2tlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY2Fpcm9fdCog
Y3IsIEdyYXAKICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ2NwLT5zdGF0ZS5zdHJva2VH
cmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICBlbHNlICB7CiAgICAgICAgIENvbG9y
IHN0cm9rZUNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShjb250ZXh0LT5zdHJva2VDb2xv
cigpLnJnYigpLCBjb250ZXh0LT5zdHJva2VDb2xvcigpLmFscGhhKCkgLyAyNTUuZiAqIGdjcC0+
c3RhdGUuZ2xvYmFsQWxwaGEpOwotICAgICAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IpOwor
ICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7CiAgICAgfQog
ICAgIGlmIChnY3AtPnN0YXRlLmdsb2JhbEFscGhhIDwgMS4wZiAmJiAoZ2NwLT5zdGF0ZS5zdHJv
a2VQYXR0ZXJuIHx8IGdjcC0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpKSB7CiAgICAgICAgIGNhaXJv
X3B1c2hfZ3JvdXAoY3IpOwpAQCAtMTI1LDcgKzEyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNhaXJvX3QqIGNyLCBH
cmFwCiAvLyBBIGZpbGxSZWN0IGhlbHBlcgogc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291
cmNlT3ZlcihjYWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sKQogewotICAgIHNldENvbG9yKGNyLCBjb2wpOworICAgIHNldFNvdXJjZVJHQkFGcm9tQ29s
b3IoY3IsIGNvbCk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCBDQUlST19PUEVSQVRPUl9PVkVSKTsKICAgICBjYWlyb19maWxsKGNyKTsKQEAgLTE5MSw2OSAr
MTkwLDQyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYWxjdWxhdGVTaGFkb3dCdWZmZXJEaW1l
bnNpb25zKEludFNpemUmIHNoYWRvd0J1ZmZlclNpemUsCiAjZW5kaWYKIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZSogZ2NwLCBib29sIGZpbGxTaGFkb3csIGJvb2wgc3Ryb2tlU2hhZG93
KQorZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsgRmlsbCwgU3Ryb2tlIH07CitzdGF0aWMgaW5saW5l
IHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0Nv
bnRleHRQcml2YXRlKiBnY3AsIFBhdGhEcmF3aW5nU3R5bGUgZHJhd2luZ1N0eWxlKQogewotI2lm
IEVOQUJMRShGSUxURVJTKQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQg
c2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoIWNvbnRleHQtPmdl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKSkKKyAgICBDb250
ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CisgICAgaWYgKCFz
aGFkb3cpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBDYWxjdWxhdGUgZmlsdGVyIHZh
bHVlcyB0byBjcmVhdGUgYXBwcm9wcmlhdGUgc2hhZG93LgotICAgIGNhaXJvX3QqIGNyID0gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGV4dGVudHMg
b2YgdGhlIHJlbmRlcmVkIHNvbGlkIHBhdGhzLgorICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGNhaXJvX3BhdGhfdCogcGF0aCA9IGNh
aXJvX2NvcHlfcGF0aChjYWlyb0NvbnRleHQpOwogICAgIGRvdWJsZSB4MCwgeDEsIHkwLCB5MTsK
LSAgICBpZiAoc3Ryb2tlU2hhZG93KQotICAgICAgICBjYWlyb19zdHJva2VfZXh0ZW50cyhjciwg
JngwLCAmeTAsICZ4MSwgJnkxKTsKKyAgICBpZiAoZHJhd2luZ1N0eWxlID09IFN0cm9rZSkKKyAg
ICAgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY2Fpcm9Db250ZXh0LCAmeDAsICZ5MCwgJngxLCAm
eTEpOwogICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fZmlsbF9leHRlbnRzKGNyLCAmeDAsICZ5MCwg
JngxLCAmeTEpOwotICAgIEZsb2F0UmVjdCByZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7
Ci0KLSAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNpemU7Ci0gICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3Q7Ci0gICAgZmxvYXQgcmFkaXVzID0gMDsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0
ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoc2hhZG93QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFk
aXVzLCByZWN0LCBzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIpOwotCi0gICAgY2Fpcm9fY2xpcF9l
eHRlbnRzKGNyLCAmeDAsICZ5MCwgJngxLCAmeTEpOwotICAgIEZsb2F0UmVjdCBjbGlwUmVjdCh4
MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwotCi0gICAgRmxvYXRQb2ludCByZWN0TG9jYXRpb24g
PSBzaGFkb3dSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICAvLyBSZWR1Y2UgdGhlIHNoYWRvdyByZWN0
IHVzaW5nIHRoZSBjbGlwIGFyZWEuCi0gICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhzaGFkb3dS
ZWN0KSkgewotICAgICAgICBzaGFkb3dSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7Ci0gICAgICAg
IGlmIChzaGFkb3dSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
c2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1cyk7Ci0gICAgICAgIHNoYWRvd0J1ZmZlclNpemUgPSBJ
bnRTaXplKHNoYWRvd1JlY3Qud2lkdGgoKSwgc2hhZG93UmVjdC5oZWlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgc2hhZG93T2Zmc2V0ID0gcmVjdExvY2F0aW9uIC0gc2hhZG93UmVjdC5sb2NhdGlvbigp
OworICAgICAgICBjYWlyb19maWxsX2V4dGVudHMoY2Fpcm9Db250ZXh0LCAmeDAsICZ5MCwgJngx
LCAmeTEpOworICAgIEZsb2F0UmVjdCBzb2xpZEZpZ3VyZUV4dGVudHMoeDAsIHkwLCB4MSAtIHgw
LCB5MSAtIHkwKTsKIAotICAgIC8vIENyZWF0ZSBzdWl0YWJseS1zaXplZCBJbWFnZUJ1ZmZlciB0
byBob2xkIHRoZSBzaGFkb3cuCi0gICAgT3duUHRyPEltYWdlQnVmZmVyPiBzaGFkb3dCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNoYWRvd0J1ZmZlclNpemUpOwotCi0gICAgLy8gRHJhdyBz
aGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlci4KLSAgICBjYWlyb190KiBzaGFkb3dDb250ZXh0
ID0gc2hhZG93QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvcHlD
b250ZXh0UHJvcGVydGllcyhjciwgc2hhZG93Q29udGV4dCk7Ci0gICAgY2Fpcm9fdHJhbnNsYXRl
KHNoYWRvd0NvbnRleHQsIC1yZWN0LngoKSArIHJhZGl1cyArIHNoYWRvd09mZnNldC53aWR0aCgp
LCAtcmVjdC55KCkgKyByYWRpdXMgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwotICAgIGNhaXJv
X25ld19wYXRoKHNoYWRvd0NvbnRleHQpOwotICAgIE93blB0cjxjYWlyb19wYXRoX3Q+IHBhdGgo
Y2Fpcm9fY29weV9wYXRoKGNyKSk7Ci0gICAgY2Fpcm9fYXBwZW5kX3BhdGgoc2hhZG93Q29udGV4
dCwgcGF0aC5nZXQoKSk7CisgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVn
aW5TaGFkb3dMYXllcihjYWlyb0NvbnRleHQsIHNvbGlkRmlndXJlRXh0ZW50cyk7CisgICAgaWYg
KCFzaGFkb3dDb250ZXh0KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmlsbFNoYWRvdykK
KyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBjb3B5IHRoZSBjb250ZXh0IHByb3BlcnRpZXMgdG8g
dGhlIG5ldyBzaGFkb3cKKyAgICAvLyBjb250ZXh0IHRvIHByZXNlcnZlIHRoaW5ncyBzdWNoIGFz
IHRoZSBmaWxsIHJ1bGUgYW5kIHN0cm9rZSB3aWR0aDsKKyAgICBjb3B5Q29udGV4dFByb3BlcnRp
ZXMoY2Fpcm9Db250ZXh0LCBzaGFkb3dDb250ZXh0KTsKKyAgICBjYWlyb19hcHBlbmRfcGF0aChz
aGFkb3dDb250ZXh0LCBwYXRoKTsKKyAgICBpZiAoZHJhd2luZ1N0eWxlID09IEZpbGwpCiAgICAg
ICAgIHNldFBsYXRmb3JtRmlsbChjb250ZXh0LCBzaGFkb3dDb250ZXh0LCBnY3ApOwotICAgIGlm
IChzdHJva2VTaGFkb3cpCisgICAgZWxzZSBpZiAoZHJhd2luZ1N0eWxlID09IFN0cm9rZSkKICAg
ICAgICAgc2V0UGxhdGZvcm1TdHJva2UoY29udGV4dCwgc2hhZG93Q29udGV4dCwgZ2NwKTsKLQot
ICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3coc2hhZG93QnVmZmVyLnJlbGVhc2UoKSwg
c2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7Ci0jZW5kaWYKKyAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKGNhaXJvQ29udGV4dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbGxDdXJyZW50
Q2Fpcm9QYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSogZ2NwLCBjYWlyb190KiBjYWlyb0NvbnRleHQpCiB7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVs
ZShjYWlyb0NvbnRleHQsIGNvbnRleHQtPmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJ
Uk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGRy
YXdQYXRoU2hhZG93KGNvbnRleHQsIGdjcCwgdHJ1ZSwgZmFsc2UpOworICAgIGRyYXdQYXRoU2hh
ZG93KGNvbnRleHQsIGdjcCwgRmlsbCk7CiAKICAgICBzZXRQbGF0Zm9ybUZpbGwoY29udGV4dCwg
Y2Fpcm9Db250ZXh0LCBnY3ApOwogICAgIGNhaXJvX25ld19wYXRoKGNhaXJvQ29udGV4dCk7CkBA
IC0yNjEsNyArMjMzLDcgQEAgc3RhdGljIHZvaWQgZmlsbEN1cnJlbnRDYWlyb1BhdGgoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRQcml2YXQKIAogc3RhdGljIHZvaWQg
c3Ryb2tlQ3VycmVudENhaXJvUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dFByaXZhdGUqIGdjcCwgY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQogewotICAgIGRyYXdQ
YXRoU2hhZG93KGNvbnRleHQsIGdjcCwgZmFsc2UsIHRydWUpOworICAgIGRyYXdQYXRoU2hhZG93
KGNvbnRleHQsIGdjcCwgU3Ryb2tlKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZShjb250ZXh0LCBj
YWlyb0NvbnRleHQsIGdjcCk7CiAgICAgY2Fpcm9fbmV3X3BhdGgoY2Fpcm9Db250ZXh0KTsKIH0K
QEAgLTI5OCwxMSArMjcwLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1T
dGF0ZSgpCiB7CiAgICAgY2Fpcm9fc2F2ZShtX2RhdGEtPmNyKTsKICAgICBtX2RhdGEtPnNhdmUo
KTsKKyAgICBtX2RhdGEtPnNoYWRvd1N0YWNrLmFwcGVuZChtX2RhdGEtPnNoYWRvdyk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7CiAgICAgY2Fp
cm9fcmVzdG9yZShtX2RhdGEtPmNyKTsKKworICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KCk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gbV9kYXRhLT5zaGFkb3dTdGFjay5sYXN0
KCk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93U3RhY2sucmVtb3ZlTGFzdCgpOworICAgIH0KKwog
ICAgIG1fZGF0YS0+cmVzdG9yZSgpOwogfQogCkBAIC0zMTksNyArMzAwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3ZlcihjciwgcmVjdCwgZmlsbENvbG9yKCkpOwogCiAgICAgaWYgKHN0cm9rZVN0
eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9yKCkp
OworICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKICAg
ICAgICAgRmxvYXRSZWN0IHIocmVjdCk7CiAgICAgICAgIHIuaW5mbGF0ZSgtLjVmKTsKICAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSk7CkBAIC0zNjcsNyArMzQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNv
bnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKIAogICAgIGNhaXJvX3NldF9h
bnRpYWxpYXMoY3IsIENBSVJPX0FOVElBTElBU19OT05FKTsKIApAQCAtNDM3LDEyICs0MTgsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3Qp
CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkg
ewotICAgICAgICBzZXRDb2xvcihjciwgZmlsbENvbG9yKCkpOworICAgICAgICBzZXRTb3VyY2VS
R0JBRnJvbUNvbG9yKGNyLCBmaWxsQ29sb3IoKSk7CiAgICAgICAgIGNhaXJvX2ZpbGxfcHJlc2Vy
dmUoY3IpOwogICAgIH0KIAogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7Ci0g
ICAgICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICAgICAgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CiAgICAgICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNyLCBzdHJva2VUaGlja25lc3MoKSk7CiAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAg
ICAgfSBlbHNlCkBAIC00OTEsNyArNDcyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3AKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9yKCkpOwor
ICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIHN0cm9rZUNvbG9yKCkpOwogCiAgICAgaWYg
KHBhdFdpZHRoKSB7CiAgICAgICAgIC8vIEV4YW1wbGU6IDgwIHBpeGVscyB3aXRoIGEgd2lkdGgg
b2YgMzAgcGl4ZWxzLgpAQCAtNTUwLDEzICs1MzEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMKICAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNyLCBucG9pbnRzLCBwb2ludHMpOwog
CiAgICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKLSAgICAgICAgc2V0Q29sb3IoY3IsIGZp
bGxDb2xvcigpKTsKKyAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgZmlsbENvbG9y
KCkpOwogICAgICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBDQUlST19GSUxMX1JVTEVfRVZF
Tl9PREQpOwogICAgICAgICBjYWlyb19maWxsX3ByZXNlcnZlKGNyKTsKICAgICB9CiAKICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewotICAgICAgICBzZXRDb2xvcihjciwgc3Ry
b2tlQ29sb3IoKSk7CisgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIHN0cm9rZUNv
bG9yKCkpOwogICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgc3Ryb2tlVGhpY2tuZXNz
KCkpOwogICAgICAgICBjYWlyb19zdHJva2UoY3IpOwogICAgIH0gZWxzZQpAQCAtNjE5LDcgKzYw
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCiAgICAgc2V0UGF0aE9uQ2Fp
cm9Db250ZXh0KGNyLCBtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpKTsKIAogICAgIGNh
aXJvX3NldF9maWxsX3J1bGUoY3IsIGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9f
RklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGRyYXdQ
YXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCB0cnVlLCB0cnVlKTsKKyAgICBkcmF3UGF0aFNoYWRv
dyh0aGlzLCBtX2NvbW1vbiwgRmlsbCk7CiAKICAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgY3Is
IG1fY29tbW9uKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZSh0aGlzLCBjciwgbV9jb21tb24pOwpA
QCAtNjM4LDUwICs2MTksMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotc3RhdGljIHZv
aWQgZHJhd0JvcmRlcmxlc3NSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgcmVjdENvbG9yKQotewotI2lmIEVOQUJM
RShGSUxURVJTKQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRD
VE0oKTsKLSAgICAvLyBkcmF3VGlsZWRTaGFkb3cgc3RpbGwgZG9lcyBub3Qgd29yayB3aXRoIHJv
dGF0aW9ucy4KLSAgICBpZiAoKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxp
cHBlZCgpKSkgewotICAgICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgYXBwZW5kV2ViQ29yZVBhdGhU
b0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUmVjdGFuZ2xlKHJlY3QpKTsKLSAgICAgICAg
RmxvYXRTaXplIGNvcm5lcjsKLSAgICAgICAgSW50UmVjdCBzaGFkb3dSZWN0KHJlY3QpOwotICAg
ICAgICBjb250ZXh0LT5kcmF3VGlsZWRTaGFkb3coc2hhZG93UmVjdCwgY29ybmVyLCBjb3JuZXIs
IGNvcm5lciwgY29ybmVyLCBEZXZpY2VDb2xvclNwYWNlKTsKLSAgICAgICAgY2Fpcm9fcmVzdG9y
ZShjcik7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQot
ICAgIGlmICghY29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hh
ZG93Q29sb3IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHNoYWRvd0J1ZmZlclNp
emU7Ci0gICAgRmxvYXRSZWN0IHNoYWRvd1JlY3Q7Ci0gICAgZmxvYXQgcmFkaXVzID0gMDsKLSAg
ICBHcmFwaGljc0NvbnRleHQ6OmNhbGN1bGF0ZVNoYWRvd0J1ZmZlckRpbWVuc2lvbnMoc2hhZG93
QnVmZmVyU2l6ZSwgc2hhZG93UmVjdCwgcmFkaXVzLCByZWN0LCBzaGFkb3dPZmZzZXQsIHNoYWRv
d0JsdXIpOwotCi0gICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZlcgotICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gc2hhZG93QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aGFkb3dCdWZmZXJTaXplKTsKLSAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBz
aGFkb3dCdWZmZXItPmNvbnRleHQoKTsKLSAgICBzaGFkb3dDb250ZXh0LT5maWxsUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludChyYWRpdXMsIHJhZGl1cyksIHJlY3Quc2l6ZSgpKSwgcmVjdENvbG9y
LCBEZXZpY2VDb2xvclNwYWNlKTsKLQotICAgIGNvbnRleHQtPmFwcGx5UGxhdGZvcm1TaGFkb3co
c2hhZG93QnVmZmVyLnJlbGVhc2UoKSwgc2hhZG93Q29sb3IsIHNoYWRvd1JlY3QsIHJhZGl1cyk7
Ci0jZW5kaWYKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZHJh
d0JvcmRlcmxlc3NSZWN0U2hhZG93KHRoaXMsIHJlY3QsIGNvbG9yKTsKKyAgICBpZiAobV9kYXRh
LT5zaGFkb3cubV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgICAgIGNh
aXJvX3QqIHNoYWRvd0NvbnRleHQgPSBtX2RhdGEtPnNoYWRvdy5iZWdpblNoYWRvd0xheWVyKG1f
ZGF0YS0+Y3IsIHJlY3QpOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAg
ICAgZmlsbFJlY3RTb3VyY2VPdmVyKHNoYWRvd0NvbnRleHQsIHJlY3QsIGNvbG9yKTsKKyAgICAg
ICAgICAgIG1fZGF0YS0+c2hhZG93LmVuZFNoYWRvd0xheWVyKG1fZGF0YS0+Y3IpOworICAgICAg
ICB9CisgICAgfQogICAgIGlmIChjb2xvci5hbHBoYSgpKQogICAgICAgICBmaWxsUmVjdFNvdXJj
ZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3IpOwogfQpAQCAtNzUwLDcgKzY5OSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGludCB3aWR0aCwgaW50CiAgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnKTsKICNl
bmRpZgogCi0gICAgc2V0Q29sb3IoY3IsIGNvbG9yKTsKKyAgICBzZXRTb3VyY2VSR0JBRnJvbUNv
bG9yKGNyLCBjb2xvcik7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIDIuMGYpOwogICAg
IHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoRG90dGVkU3Ryb2tlKTsKICNlbHNlCkBAIC03NjAsNyAr
NzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQKIAogICAgIC8vIEZvcmNlIHRoZSBhbHBo
YSB0byA1MCUuICBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRsaW5lIHJp
bmdzLgogICAgIENvbG9yIHJpbmdDb2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29s
b3IuYmx1ZSgpLCAxMjcpOwotICAgIHNldENvbG9yKGNyLCByaW5nQ29sb3IpOworICAgIHNldFNv
dXJjZVJHQkFGcm9tQ29sb3IoY3IsIHJpbmdDb2xvcik7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lk
dGgoY3IsIHdpZHRoKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
ICNlbmRpZgpAQCAtOTQ2LDcgKzg5NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5l
clJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzCiAgICAg
Y2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9hdFNpemUgY29uc3QmIHNpemUsIGZsb2F0
LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25z
dCYgY29sb3IsIENvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNo
YWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgogICAg
IC8vIGZ1bmN0aW9ucwpAQCAtOTU1LDEzICs5MDQsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQsIENvbG9yIGNv
bnMKICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3Nv
Y2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
CiAgICAgICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53
aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4
dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0
KCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFk
b3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsK
ICAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVBsYXRmb3JtU2hhZG93KFBh
c3NPd25QdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBj
b25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGZsb2F0IHJhZGl1cykKIHsKICNpZiBFTkFCTEUo
RklMVEVSUykKLSAgICBzZXRDb2xvcihtX2RhdGEtPmNyLCBzaGFkb3dDb2xvcik7CisgICAgc2V0
U291cmNlUkdCQUZyb21Db2xvcihtX2RhdGEtPmNyLCBzaGFkb3dDb2xvcik7CiAgICAgUGxhdGZv
cm1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzaGFkb3dNYXNrKGNyZWF0ZVNoYWRvd01hc2soYnVm
ZmVyLCBzaGFkb3dSZWN0LCByYWRpdXMpKTsKICAgICBjYWlyb19tYXNrX3N1cmZhY2UobV9kYXRh
LT5jciwgc2hhZG93TWFzay5nZXQoKSwgc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsK
ICNlbmRpZgpAQCAtOTk0LDcgKzk0Niw3IEBAIFBsYXRmb3JtUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTaGFkb3dNYXNrKFBhc3NPd25QdHI8SW1hCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdygpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQpAQCAtMTM3Miw3ICsxMzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNo
YWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcEwKICAgICBQbGF0
Zm9ybVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNoYWRvd01hc2soY3JlYXRlU2hhZG93TWFzayhz
bWFsbEJ1ZmZlci5yZWxlYXNlKCksIHNtYWxsUmVjdCwgYmx1clJhZGl1cykpOwogCiAgICAgY2Fp
cm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvd0J1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBzZXRDb2xvcihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xvcik7CisgICAg
c2V0U291cmNlUkdCQUZyb21Db2xvcihzaGFkb3dDb250ZXh0LCBzaGFkb3dDb2xvcik7CiAgICAg
Y2Fpcm9fbWFza19zdXJmYWNlKHNoYWRvd0NvbnRleHQsIHNoYWRvd01hc2suZ2V0KCksIDAsIDAp
OwogCiAgICAgLy8gRmlsbCB0aGUgaW50ZXJuYWwgcGFydCBvZiB0aGUgc2hhZG93LgpAQCAtMTM4
MCw3ICsxMzMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZFNoYWRvdyhjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcEwKICAgICBpZiAoIXNoYWRvd1Jl
Y3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNhaXJvX3NhdmUoY3IpOwogICAgICAgICBhcHBlbmRX
ZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xl
KHNoYWRvd1JlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFk
aXVzLCBib3R0b21SaWdodFJhZGl1cykpOwotICAgICAgICBzZXRDb2xvcihjciwgc2hhZG93Q29s
b3IpOworICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzaGFkb3dDb2xvcik7CiAg
ICAgICAgIGNhaXJvX2ZpbGwoY3IpOwogICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKICAgICB9
CkBAIC0xNDU5LDEzICsxNDExLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRl
ZFJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKICAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fc2F2ZShjcik7CiAgICAgYXBwZW5kV2Vi
Q29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShy
LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpKTsKLSAgICBzZXRD
b2xvcihjciwgY29sb3IpOworICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIGNvbG9yKTsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gdGhpcy0+Z2V0Q1RNKCk7CiAgICAgLy8g
ZHJhd1RpbGVkU2hhZG93IHN0aWxsIGRvZXMgbm90IHdvcmsgd2l0aCByb3RhdGlvbnMuCiAgICAg
aWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKQogICAgICAg
ICBkcmF3VGlsZWRTaGFkb3cociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRv
bVJpZ2h0LCBjb2xvclNwYWNlKTsKICAgICBlbHNlCi0gICAgICAgIGRyYXdQYXRoU2hhZG93KHRo
aXMsIG1fY29tbW9uLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIGRyYXdQYXRoU2hhZG93KHRoaXMs
IG1fY29tbW9uLCBGaWxsKTsKICAgICBjYWlyb19maWxsKGNyKTsKICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAppbmRleCA4
MTk4N2VmNGVmNjk5M2I2NTg4YTI2ZjA2NjNjMWI2OWIzNGY1NjAzLi5jMDAwNTkyYjM5M2NhNmIy
NDU5YmUwZjFlZGZhMjczNDgyNDI2MmQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDYWlyby5oCkBAIC00Miw2ICs0Miw4IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtFeHBvc2VF
dmVudCBHZGtFeHBvc2VFdmVudDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb250
ZXh0U2hhZG93OworCiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgewogcHVi
bGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCkBAIC05OCw2ICsxMDAs
OSBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPGZsb2F0PiBsYXllcnM7CiAgICAgQ2Fpcm9QYXRoIG1f
cGVuZGluZ1BhdGg7CiAKKyAgICBDb250ZXh0U2hhZG93IHNoYWRvdzsKKyAgICBWZWN0b3I8Q29u
dGV4dFNoYWRvdz4gc2hhZG93U3RhY2s7CisKICNpZiBQTEFURk9STShHVEspCiAgICAgR2RrRXZl
bnRFeHBvc2UqIGV4cG9zZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcApzaW1pbGFyaXR5IGluZGV4
IDk5JQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxp
dGllcy5jcHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJv
VXRpbGl0aWVzLmNwcAppbmRleCA4MWUwMGYwODE1ZGU3OTM3MzRlMTZiNmVkNDNjNjJhNGZlN2Uw
MTU2Li5kNzY4Y2UyNTU3OWEyMTNkMTJmMTc4N2NkOGMyY2QzZWZjODY1YWIyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhaXJv
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUg
PGNhaXJvLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1l
IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaApyZW5h
bWUgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaApp
bmRleCA1OTRhYmMwZDRmODI1Mzc5NjI3OTVhYjk4OTA1NTFkMTEwMDU0Yjg3Li5mZjViM2VkZWZj
MTExZGI5NDZlMzJhYzgxZDBmYzJhMDUwY2UwMjZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDYWlyb1V0aWxpdGllc19oCi0jZGVmaW5lIENhaXJv
VXRpbGl0aWVzX2gKKyNpZm5kZWYgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorI2RlZmluZSBHZGtDYWly
b1V0aWxpdGllc19oCiAKIEdka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1Zihj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOwogCi0jZW5kaWYgLy8gQ2Fpcm9VdGlsaXRpZXNfaAor
I2VuZGlmIC8vIEdka0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAppbmRleCA4MjFjYzEyYzg1YjdmNmZiNzVkNDJh
NzlhYzE4ZmZhODRjMGYzZThmLi5lZGIyNmYwYWI0ZjZkM2Y2MGM1NDYxMGZjODRiMDc0ZTliY2Zk
NzViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZl
ckd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJH
dGsuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2lu
Y2x1ZGUgIkJhc2U2NC5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
R2RrQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVkZSAiR1Jl
ZlB0ckd0ay5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAppbmRleCA1MjcyMjQzNTBjMTc0NWQ0YTNhZDBm
ZjZjOTFhOTNlN2FiOGUyZWM3Li42MjNhY2U2MTI0N2I0MjU3MWIxYjEwODI4N2VkMjZiOWEzMjJl
MTVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyOWNhODI5OTJkODEwZGM1NDg1OWY1ZjdhMjdhYzNjZWY0ZTk3ZjIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Db250ZXh0U2hhZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRl
eHRTaGFkb3cuaCIKLQotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVl
ZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8v
IEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkg
b3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGlj
YWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0KLWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFP
YmplY3QgewotcHVibGljOgotICAgIFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsK
LQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZv
aWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFU
aW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZhdGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGlu
dCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFy
ZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0gICAgLCB0aW1lcklkKDApCi17Ci19Ci0KLVFJ
bWFnZSogU2hhZG93QnVmZmVyOjpzY3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpCi17Ci0g
ICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdo
dCgpOwotCi0gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0
aGUgYnVmZmVyIGlzIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVk
IHNpemUuIEhvd2V2ZXIsIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcwotICAgIC8vIG11Y2ggc21h
bGxlciB0aGFuIG91ciBidWZmZXIsIHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBu
b3QKLSAgICAvLyBrZWVwIHRvbyBtYW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgot
ICAgIGlmICghaW1hZ2UuaXNOdWxsKCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkgJiYgKGlt
YWdlLmhlaWdodCgpID4gaGVpZ2h0KSkKLSAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+IGltYWdl
LndpZHRoKCkpICYmICgoMiAqIGhlaWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKLSAgICAgICAg
ICAgIGltYWdlLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgICAgIHJldHVybiAmaW1h
Z2U7Ci0gICAgICAgIH0KLQotICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBz
byB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGV2ZXJ5dGltZQotICAgIC8vIHRoZXJlIGlzIGxh
cmdlciByZXF1ZXN0IGJ5IDEgcGl4ZWwuCi0gICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkg
PDwgNTsKLSAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICBpbWFn
ZSA9IFFJbWFnZSh3aWR0aCwgaGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlw
bGllZCk7Ci0gICAgaW1hZ2UuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgIHJldHVybiAmaW1h
Z2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAga2ls
bFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVs
YXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZl
bnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAg
ICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAg
IH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RBVElD
KFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1ZmZlcikKLQotQ29udGV4dFNoYWRvdzo6Q29u
dGV4dFNoYWRvdygpCi0gICAgOiB0eXBlKE5vU2hhZG93KQotICAgICwgYmx1clJhZGl1cygwKQot
ewotfQotCi1Db250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KGNvbnN0IFFDb2xvciYgYywgZmxv
YXQgciwgcXJlYWwgZHgsIHFyZWFsIGR5KQotICAgIDogY29sb3IoYykKLSAgICAsIGJsdXJSYWRp
dXMocVJvdW5kKHIpKQotICAgICwgb2Zmc2V0KGR4LCBkeSkKLXsKLSAgICAvLyBUaGUgdHlwZSBv
ZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUgYmx1ciByYWRpdXMsIHNoYWRvdyBvZmZzZXQsIGFu
ZCBzaGFkb3cgY29sb3IuCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhh
KCkpIHsKLSAgICAgICAgLy8gQ2FuJ3QgcGFpbnQgdGhlIHNoYWRvdyB3aXRoIGludmFsaWQgb3Ig
aW52aXNpYmxlIGNvbG9yLgotICAgICAgICB0eXBlID0gTm9TaGFkb3c7Ci0gICAgfSBlbHNlIGlm
IChyID4gMCkgewotICAgICAgICAvLyBTaGFkb3cgaXMgYWx3YXlzIGJsdXJyZWQsIGV2ZW4gdGhl
IG9mZnNldCBpcyB6ZXJvLgotICAgICAgICB0eXBlID0gQmx1clNoYWRvdzsKLSAgICB9IGVsc2Ug
aWYgKG9mZnNldC5pc051bGwoKSkgewotICAgICAgICAvLyBXaXRob3V0IGJsdXIgYW5kIHplcm8g
b2Zmc2V0IG1lYW5zIHRoZSBzaGFkb3cgaXMgZnVsbHkgaGlkZGVuLgotICAgICAgICB0eXBlID0g
Tm9TaGFkb3c7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPiAwKQot
ICAgICAgICAgICAgdHlwZSA9IEFscGhhU29saWRTaGFkb3c7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHR5cGUgPSBPcGFxdWVTb2xpZFNoYWRvdzsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGV4
dFNoYWRvdzo6Y2xlYXIoKQotewotICAgIHR5cGUgPSBOb1NoYWRvdzsKLSAgICBjb2xvciA9IFFD
b2xvcigpOwotICAgIGJsdXJSYWRpdXMgPSAwOwotICAgIG9mZnNldCA9IFFQb2ludEYoMCwgMCk7
Ci19Ci0KLS8vIEluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiwgd2UgdXNlIDE4LjE0IGZvciBm
aXhlZC1wb2ludCBkaXZpc2lvbi4KLXN0YXRpYyBjb25zdCBpbnQgQmx1clN1bVNoaWZ0ID0gMTQ7
Ci0KLS8vIE5vdGU6IGltYWdlIG11c3QgYmUgUkdCMzIgZm9ybWF0Ci1zdGF0aWMgdm9pZCBibHVy
SG9yaXpvbnRhbChRSW1hZ2UmIGltYWdlLCBpbnQgcmFkaXVzLCBib29sIHN3YXAgPSBmYWxzZSkK
LXsKLSAgICBRX0FTU0VSVChpbWFnZS5mb3JtYXQoKSA9PSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJf
UHJlbXVsdGlwbGllZCk7Ci0KLSAgICAvLyBTZWUgY29tbWVudHMgaW4gaHR0cDovL3dlYmtpdC5v
cmcvYi80MDc5MywgaXQgc2VlbXMgc2Vuc2libGUKLSAgICAvLyB0byBmb2xsb3cgU2tpYSdzIGxp
bWl0IG9mIDEyOCBwaXhlbHMgb2YgYmx1ciByYWRpdXMKLSAgICByYWRpdXMgPSBxTWluKDEyOCwg
cmFkaXVzKTsKLQotICAgIGludCBpbWdXaWR0aCA9IGltYWdlLndpZHRoKCk7Ci0gICAgaW50IGlt
Z0hlaWdodCA9IGltYWdlLmhlaWdodCgpOwotCi0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1cgotICAgIC8vIGZvciB0aGUgYXBw
cm9hY2hlcyB3aGVuIHRoZSBib3gtYmx1ciByYWRpdXMgaXMgZXZlbiB2cyBvZGQuCi0gICAgaW50
IGRtYXggPSByYWRpdXMgPj4gMTsKLSAgICBpbnQgZG1pbiA9IHFNYXgoMCwgZG1heCAtIDEgKyAo
cmFkaXVzICYgMSkpOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWdIZWlnaHQ7ICsreSkg
ewotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlLnNjYW5MaW5lKHkpOwot
Ci0gICAgICAgIGludCBsZWZ0OwotICAgICAgICBpbnQgcmlnaHQ7Ci0gICAgICAgIGludCBwaXhl
bENvdW50OwotICAgICAgICBpbnQgcHJldjsKLSAgICAgICAgaW50IG5leHQ7Ci0gICAgICAgIGlu
dCBmaXJzdEFscGhhOwotICAgICAgICBpbnQgbGFzdEFscGhhOwotICAgICAgICBpbnQgdG90YWxB
bHBoYTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogdGFyZ2V0OwotICAgICAgICB1bnNpZ25lZCBj
aGFyKiBwcmV2UHRyOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiBuZXh0UHRyOwotCi0gICAgICAg
IGludCBpbnZDb3VudDsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGFscGhhQ2hhbm5lbCA9
IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgYmx1ZUNoYW5uZWwgPSAwOwotICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGdyZWVuQ2hhbm5lbCA9IDE7Ci0KLSAgICAgICAgLy8gRm9yIGVhY2gg
c3RlcCwgd2UgdXNlIHNsaWRpbmcgd2luZG93IGFsZ29yaXRobS4gVGhpcyBpcyBtdWNoIG1vcmUK
LSAgICAgICAgLy8gZWZmaWNpZW50IHRoYW4gY29tcHV0aW5nIHRoZSBzdW0gb2YgZWFjaCBwaXhl
bHMgY292ZXJlZCBieSB0aGUgYm94Ci0gICAgICAgIC8vIGtlcm5lbCBzaXplIGZvciBlYWNoIHgu
Ci0KLSAgICAgICAgLy8gQXMgbm90ZWQgaW4gdGhlIFNWRyBmaWx0ZXIgc3BlY2lmaWNhdGlvbiwg
cnVubmluZyBib3ggYmx1ciAzeAotICAgICAgICAvLyBhcHByb3hpbWF0ZXMgYSByZWFsIGdhdXNz
aWFuIGJsdXIgbmljZWx5LgotCi0gICAgICAgIC8vIFN0ZXAgMTogYmx1ciBhbHBoYSBjaGFubmVs
IGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBibHVlIGNoYW5uZWwuCi0gICAgICAgIGxlZnQg
PSBzd2FwID8gZG1heCA6IGRtaW47Ci0gICAgICAgIHJpZ2h0ID0gc3dhcCA/IGRtaW4gOiBkbWF4
OwotICAgICAgICBwaXhlbENvdW50ID0gbGVmdCArIDEgKyByaWdodDsKLSAgICAgICAgaW52Q291
bnQgPSAoMSA8PCBCbHVyU3VtU2hpZnQpIC8gcGl4ZWxDb3VudDsKLSAgICAgICAgcHJldiA9IC1s
ZWZ0OwotICAgICAgICBuZXh0ID0gMSArIHJpZ2h0OwotICAgICAgICBmaXJzdEFscGhhID0gcGl4
ZWxzW2FscGhhQ2hhbm5lbF07Ci0gICAgICAgIGxhc3RBbHBoYSA9IHBpeGVsc1soaW1nV2lkdGgg
LSAxKSAqIDQgKyBhbHBoYUNoYW5uZWxdOwotICAgICAgICB0b3RhbEFscGhhID0gMDsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpCi0gICAgICAgICAgICB0b3Rh
bEFscGhhICs9IHBpeGVsc1txQm91bmQoMCwgaSAtIGxlZnQsIGltZ1dpZHRoIC0gMSkgKiA0ICsg
YWxwaGFDaGFubmVsXTsKLSAgICAgICAgdGFyZ2V0ID0gcGl4ZWxzICsgYmx1ZUNoYW5uZWw7Ci0g
ICAgICAgIHByZXZQdHIgPSBwaXhlbHMgKyBwcmV2ICogNCArIGFscGhhQ2hhbm5lbDsKLSAgICAg
ICAgbmV4dFB0ciA9IHBpeGVscyArIG5leHQgKiA0ICsgYWxwaGFDaGFubmVsOwotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGltZ1dpZHRoOyArK3gsICsrcHJldiwgKytuZXh0LCB0YXJnZXQg
Kz0gNCwgcHJldlB0ciArPSA0LCBuZXh0UHRyICs9IDQpIHsKLSAgICAgICAgICAgICp0YXJnZXQg
PSAodG90YWxBbHBoYSAqIGludkNvdW50KSA+PiBCbHVyU3VtU2hpZnQ7Ci0gICAgICAgICAgICBp
bnQgZGVsdGEgPSAoKG5leHQgPCBpbWdXaWR0aCkgPyAqbmV4dFB0ciA6IGxhc3RBbHBoYSkgLQot
ICAgICAgICAgICAgICAgICAgICAgICAgKChwcmV2ID4gMCkgPyAqcHJldlB0ciA6IGZpcnN0QWxw
aGEpOwotICAgICAgICAgICAgdG90YWxBbHBoYSArPSBkZWx0YTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFN0ZXAgMjogYmx1ciBibHVlIGNoYW5uZWwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4g
dGhlIGdyZWVuIGNoYW5uZWwuCi0gICAgICAgIGxlZnQgPSBzd2FwID8gZG1pbiA6IGRtYXg7Ci0g
ICAgICAgIHJpZ2h0ID0gc3dhcCA/IGRtYXggOiBkbWluOwotICAgICAgICBwaXhlbENvdW50ID0g
bGVmdCArIDEgKyByaWdodDsKLSAgICAgICAgaW52Q291bnQgPSAoMSA8PCBCbHVyU3VtU2hpZnQp
IC8gcGl4ZWxDb3VudDsKLSAgICAgICAgcHJldiA9IC1sZWZ0OwotICAgICAgICBuZXh0ID0gMSAr
IHJpZ2h0OwotICAgICAgICBmaXJzdEFscGhhID0gcGl4ZWxzW2JsdWVDaGFubmVsXTsKLSAgICAg
ICAgbGFzdEFscGhhID0gcGl4ZWxzWyhpbWdXaWR0aCAtIDEpICogNCArIGJsdWVDaGFubmVsXTsK
LSAgICAgICAgdG90YWxBbHBoYSA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4
ZWxDb3VudDsgKytpKQotICAgICAgICAgICAgdG90YWxBbHBoYSArPSBwaXhlbHNbcUJvdW5kKDAs
IGkgLSBsZWZ0LCBpbWdXaWR0aCAtIDEpICogNCArIGJsdWVDaGFubmVsXTsKLSAgICAgICAgdGFy
Z2V0ID0gcGl4ZWxzICsgZ3JlZW5DaGFubmVsOwotICAgICAgICBwcmV2UHRyID0gcGl4ZWxzICsg
cHJldiAqIDQgKyBibHVlQ2hhbm5lbDsKLSAgICAgICAgbmV4dFB0ciA9IHBpeGVscyArIG5leHQg
KiA0ICsgYmx1ZUNoYW5uZWw7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1nV2lkdGg7
ICsreCwgKytwcmV2LCArK25leHQsIHRhcmdldCArPSA0LCBwcmV2UHRyICs9IDQsIG5leHRQdHIg
Kz0gNCkgewotICAgICAgICAgICAgKnRhcmdldCA9ICh0b3RhbEFscGhhICogaW52Q291bnQpID4+
IEJsdXJTdW1TaGlmdDsKLSAgICAgICAgICAgIGludCBkZWx0YSA9ICgobmV4dCA8IGltZ1dpZHRo
KSA/ICpuZXh0UHRyIDogbGFzdEFscGhhKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHBy
ZXYgPiAwKSA/ICpwcmV2UHRyIDogZmlyc3RBbHBoYSk7Ci0gICAgICAgICAgICB0b3RhbEFscGhh
ICs9IGRlbHRhOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RlcCAzOiBibHVyIGdyZWVuIGNo
YW5uZWwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAg
IGxlZnQgPSBkbWF4OwotICAgICAgICByaWdodCA9IGRtYXg7Ci0gICAgICAgIHBpeGVsQ291bnQg
PSBsZWZ0ICsgMSArIHJpZ2h0OwotICAgICAgICBpbnZDb3VudCA9ICgxIDw8IEJsdXJTdW1TaGlm
dCkgLyBwaXhlbENvdW50OwotICAgICAgICBwcmV2ID0gLWxlZnQ7Ci0gICAgICAgIG5leHQgPSAx
ICsgcmlnaHQ7Ci0gICAgICAgIGZpcnN0QWxwaGEgPSBwaXhlbHNbZ3JlZW5DaGFubmVsXTsKLSAg
ICAgICAgbGFzdEFscGhhID0gcGl4ZWxzWyhpbWdXaWR0aCAtIDEpICogNCArIGdyZWVuQ2hhbm5l
bF07Ci0gICAgICAgIHRvdGFsQWxwaGEgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHBpeGVsQ291bnQ7ICsraSkKLSAgICAgICAgICAgIHRvdGFsQWxwaGEgKz0gcGl4ZWxzW3FCb3Vu
ZCgwLCBpIC0gbGVmdCwgaW1nV2lkdGggLSAxKSAqIDQgKyBncmVlbkNoYW5uZWxdOwotICAgICAg
ICB0YXJnZXQgPSBwaXhlbHMgKyBhbHBoYUNoYW5uZWw7Ci0gICAgICAgIHByZXZQdHIgPSBwaXhl
bHMgKyBwcmV2ICogNCArIGdyZWVuQ2hhbm5lbDsKLSAgICAgICAgbmV4dFB0ciA9IHBpeGVscyAr
IG5leHQgKiA0ICsgZ3JlZW5DaGFubmVsOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGlt
Z1dpZHRoOyArK3gsICsrcHJldiwgKytuZXh0LCB0YXJnZXQgKz0gNCwgcHJldlB0ciArPSA0LCBu
ZXh0UHRyICs9IDQpIHsKLSAgICAgICAgICAgICp0YXJnZXQgPSAodG90YWxBbHBoYSAqIGludkNv
dW50KSA+PiBCbHVyU3VtU2hpZnQ7Ci0gICAgICAgICAgICBpbnQgZGVsdGEgPSAoKG5leHQgPCBp
bWdXaWR0aCkgPyAqbmV4dFB0ciA6IGxhc3RBbHBoYSkgLQotICAgICAgICAgICAgICAgICAgICAg
ICAgKChwcmV2ID4gMCkgPyAqcHJldlB0ciA6IGZpcnN0QWxwaGEpOwotICAgICAgICAgICAgdG90
YWxBbHBoYSArPSBkZWx0YTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2hh
ZG93Qmx1cihRSW1hZ2UmIGltYWdlLCBpbnQgcmFkaXVzLCBjb25zdCBRQ29sb3ImIHNoYWRvd0Nv
bG9yKQotewotICAgIGJsdXJIb3Jpem9udGFsKGltYWdlLCByYWRpdXMpOwotCi0gICAgUVRyYW5z
Zm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnJvdGF0ZSg5MCk7Ci0gICAgaW1hZ2UgPSBp
bWFnZS50cmFuc2Zvcm1lZCh0cmFuc2Zvcm0pOwotICAgIGJsdXJIb3Jpem9udGFsKGltYWdlLCBy
YWRpdXMsIHRydWUpOwotICAgIHRyYW5zZm9ybS5yZXNldCgpOwotICAgIHRyYW5zZm9ybS5yb3Rh
dGUoMjcwKTsKLSAgICBpbWFnZSA9IGltYWdlLnRyYW5zZm9ybWVkKHRyYW5zZm9ybSk7Ci0KLSAg
ICAvLyAiQ29sb3JpemUiIHdpdGggdGhlIHJpZ2h0IHNoYWRvdyBjb2xvci4KLSAgICBRUGFpbnRl
ciBwKCZpbWFnZSk7Ci0gICAgcC5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgcC5maWxsUmVjdChpbWFnZS5yZWN0KCksIHNoYWRvd0Nv
bG9yLnJnYigpKTsKLSAgICBwLmVuZCgpOwotfQotCi1RUGFpbnRlciogQ29udGV4dFNoYWRvdzo6
YmVnaW5TaGFkb3dMYXllcihRUGFpbnRlciogcCwgY29uc3QgUVJlY3RGICZyZWN0KQotewotICAg
IC8vIFdlIGV4cGFuZCB0aGUgYXJlYSBieSB0aGUgYmx1ciByYWRpdXMgKiAyIHRvIGdpdmUgZXh0
cmEgc3BhY2UKLSAgICAvLyBmb3IgdGhlIGJsdXIgdHJhbnNpdGlvbi4KLSAgICBpbnQgZXh0cmEg
PSAodHlwZSA9PSBCbHVyU2hhZG93KSA/IGJsdXJSYWRpdXMgKiAyIDogMDsKLQotICAgIFFSZWN0
RiBzaGFkb3dSZWN0ID0gcmVjdC50cmFuc2xhdGVkKG9mZnNldCk7Ci0gICAgUVJlY3RGIGJ1ZmZl
clJlY3QgPSBzaGFkb3dSZWN0LmFkanVzdGVkKC1leHRyYSwgLWV4dHJhLCBleHRyYSwgZXh0cmEp
OwotICAgIG1fbGF5ZXJSZWN0ID0gYnVmZmVyUmVjdC50b0FsaWduZWRSZWN0KCk7Ci0KLSAgICBR
UmVjdCBjbGlwUmVjdDsKLSAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKLSNpZiBRVF9WRVJTSU9O
ID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5jbGlw
Qm91bmRpbmdSZWN0KCk7Ci0jZWxzZQotICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24o
KS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgotICAgIGVsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBw
LT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOwotCi0gICAgaWYg
KCFjbGlwUmVjdC5jb250YWlucyhtX2xheWVyUmVjdCkpIHsKLQotICAgICAgICAvLyBObyBuZWVk
IHRvIGhhdmUgdGhlIGJ1ZmZlciBsYXJnZXIgdGhhbiB0aGUgY2xpcC4KLSAgICAgICAgbV9sYXll
clJlY3QgPSBtX2xheWVyUmVjdC5pbnRlcnNlY3RlZChjbGlwUmVjdCk7Ci0gICAgICAgIGlmICht
X2xheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAv
LyBXZSBhZGp1c3QgYWdhaW4gYmVjYXVzZSB0aGUgcGl4ZWxzIGF0IHRoZSBib3JkZXJzIGFyZSBz
dGlsbAotICAgICAgICAvLyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSB0aGUgcGl4ZWxzIG91dHNp
ZGUgdGhlIGJ1ZmZlci4KLSAgICAgICAgaWYgKHR5cGUgPT0gQmx1clNoYWRvdykKLSAgICAgICAg
ICAgIG1fbGF5ZXJSZWN0LmFkanVzdCgtZXh0cmEsIC1leHRyYSwgZXh0cmEsIGV4dHJhKTsKLSAg
ICB9Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dCdWZm
ZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5zY3JhdGNoSW1h
Z2UobV9sYXllclJlY3Quc2l6ZSgpKTsKLSAgICBtX2xheWVySW1hZ2UgPSBRSW1hZ2UoKnNoYWRv
d0ltYWdlKTsKLQotICAgIG1fbGF5ZXJQYWludGVyID0gbmV3IFFQYWludGVyOwotICAgIG1fbGF5
ZXJQYWludGVyLT5iZWdpbigmbV9sYXllckltYWdlKTsKLSAgICBtX2xheWVyUGFpbnRlci0+c2V0
Rm9udChwLT5mb250KCkpOwotICAgIG1fbGF5ZXJQYWludGVyLT50cmFuc2xhdGUob2Zmc2V0KTsK
LQotICAgIC8vIFRoZSBvcmlnaW4gaXMgbm93IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNj
cmF0Y2ggaW1hZ2UuCi0gICAgbV9sYXllclBhaW50ZXItPnRyYW5zbGF0ZSgtbV9sYXllclJlY3Qu
dG9wTGVmdCgpKTsKLQotICAgIHJldHVybiBtX2xheWVyUGFpbnRlcjsKLX0KLQotdm9pZCBDb250
ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihRUGFpbnRlciogcCkKLXsKLSAgICBtX2xheWVyUGFp
bnRlci0+ZW5kKCk7Ci0gICAgZGVsZXRlIG1fbGF5ZXJQYWludGVyOwotICAgIG1fbGF5ZXJQYWlu
dGVyID0gMDsKLQotICAgIGlmICh0eXBlID09IEJsdXJTaGFkb3cpCi0gICAgICAgIHNoYWRvd0Js
dXIobV9sYXllckltYWdlLCBibHVyUmFkaXVzLCBjb2xvcik7Ci0KLSAgICBwLT5kcmF3SW1hZ2Uo
bV9sYXllclJlY3QudG9wTGVmdCgpLCBtX2xheWVySW1hZ2UpOwotCi0gICAgc2NyYXRjaFNoYWRv
d0J1ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmMzYjE4Y2I2
NDk1YjMzZjc5M2M1ZTVkZTljMDhiNDY3MDJhODkxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCkBAIC0wLDAgKzEsMTU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
bnRleHRTaGFkb3cuaCIKKworI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFUaW1lckV2
ZW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBz
Y3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KKy8vIEluc3Rl
YWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0
aW9uLAorLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBw
dXJnZWQgdmlhIGEgdGltZXIuCisKK2NsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3Qg
eworcHVibGljOgorICAgIFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKworICAg
IFFJbWFnZSogc2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKKworICAgIHZvaWQgc2No
ZWR1bGVQdXJnZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2
ZW50KiBldmVudCk7CisKK3ByaXZhdGU6CisgICAgUUltYWdlIGltYWdlOworICAgIGludCB0aW1l
cklkOworfTsKKworU2hhZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQor
ICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCB0aW1lcklkKDApCit7Cit9CisKK1FJbWFnZSog
U2hhZG93QnVmZmVyOjpzY3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpCit7CisgICAgaW50
IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwor
CisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVm
ZmVyIGlzIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUu
IEhvd2V2ZXIsIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcworICAgIC8vIG11Y2ggc21hbGxlciB0
aGFuIG91ciBidWZmZXIsIHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKKyAg
ICAvLyBrZWVwIHRvbyBtYW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgorICAgIGlm
ICghaW1hZ2UuaXNOdWxsKCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkgJiYgKGltYWdlLmhl
aWdodCgpID4gaGVpZ2h0KSkKKyAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+IGltYWdlLndpZHRo
KCkpICYmICgoMiAqIGhlaWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIGlt
YWdlLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgICAgIHJldHVybiAmaW1hZ2U7Cisg
ICAgICAgIH0KKworICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBk
byBub3QgZ3JvdyB0aGUgYnVmZmVyIGV2ZXJ5dGltZQorICAgIC8vIHRoZXJlIGlzIGxhcmdlciBy
ZXF1ZXN0IGJ5IDEgcGl4ZWwuCisgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsK
KyAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisKKyAgICBpbWFnZSA9IFFJ
bWFnZSh3aWR0aCwgaGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7
CisgICAgaW1hZ2UuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgIHJldHVybiAmaW1hZ2U7Cit9
CisKK3ZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCisgICAga2lsbFRpbWVy
KHRpbWVySWQpOworICAgIHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAx
MDAwKTsKK30KKwordm9pZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2
ZW50KQoreworICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKKyAgICAgICAg
a2lsbFRpbWVyKHRpbWVySWQpOworICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOworICAgIH0KKyAg
ICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2ZW50KTsKK30KKworUV9HTE9CQUxfU1RBVElDKFNoYWRv
d0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1ZmZlcikKKworUGxhdGZvcm1Db250ZXh0IENvbnRleHRT
aGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIoUGxhdGZvcm1Db250ZXh0IHAsIGNvbnN0IEZsb2F0UmVj
dCYgbGF5ZXJBcmVhKQoreworICAgIFFSZWN0IGNsaXBSZWN0OworICAgIGlmIChwLT5oYXNDbGlw
cGluZygpKQorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQorICAg
ICAgICBjbGlwUmVjdCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKTsKKyNlbHNlCisgICAgICAgIGNs
aXBSZWN0ID0gcC0+Y2xpcFJlZ2lvbigpLmJvdW5kaW5nUmVjdCgpOworI2VuZGlmCisgICAgZWxz
ZQorICAgICAgICBjbGlwUmVjdCA9IHAtPnRyYW5zZm9ybSgpLmludmVydGVkKCkubWFwUmVjdChw
LT53aW5kb3coKSk7CisKKyAgICBjYWxjdWxhdGVNaW5pbWFsTGF5ZXJSZWN0KGxheWVyQXJlYSwg
SW50UmVjdChjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lkdGgoKSwgY2xp
cFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIC8vIERvbid0IHBhaW50IGlmIHdlIGFyZSB0b3RhbGx5
IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLgorICAgIGlmIChtX2xheWVyUmVjdC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgU2hhZG93QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBz
Y3JhdGNoU2hhZG93QnVmZmVyKCk7CisgICAgUUltYWdlKiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1
ZmZlci0+c2NyYXRjaEltYWdlKG1fbGF5ZXJSZWN0LnNpemUoKSk7CisgICAgbV9sYXllckltYWdl
ID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7CisKKyAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBRUGFp
bnRlcjsKKyAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7CisgICAgbV9s
YXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICBtX2xheWVyQ29udGV4dC0+dHJh
bnNsYXRlKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0LmhlaWdodCgpKTsKKworICAgIC8vIFRo
ZSBvcmlnaW4gaXMgbm93IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmF0Y2ggaW1hZ2Uu
CisgICAgbV9sYXllckNvbnRleHQtPnRyYW5zbGF0ZSgtbV9sYXllclJlY3QueCgpLCAtbV9sYXll
clJlY3QueSgpKTsKKworICAgIHJldHVybiBtX2xheWVyQ29udGV4dDsKK30KKwordm9pZCBDb250
ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQgcCkKK3sKKyAgICBtX2xh
eWVyQ29udGV4dC0+ZW5kKCk7CisgICAgZGVsZXRlIG1fbGF5ZXJDb250ZXh0OworICAgIG1fbGF5
ZXJDb250ZXh0ID0gMDsKKworICAgIGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykgeworICAgICAg
ICBibHVyTGF5ZXJJbWFnZShtX2xheWVySW1hZ2UuYml0cygpLCBJbnRTaXplKG1fbGF5ZXJJbWFn
ZS53aWR0aCgpLCBtX2xheWVySW1hZ2UuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICBtX2xheWVySW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOworCisgICAgICAgIC8vICJDb2xvcml6ZSIg
d2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgorICAgICAgICBRUGFpbnRlciBwKCZtX2xheWVy
SW1hZ2UpOworICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZUluKTsKKyAgICAgICAgcC5maWxsUmVjdChtX2xheWVySW1hZ2UucmVjdCgp
LCBtX2NvbG9yLnJnYigpKTsKKyAgICAgICAgcC5lbmQoKTsKKyAgICB9CisKKyAgICBwLT5kcmF3
SW1hZ2UobV9sYXllclJlY3QudG9wTGVmdCgpLCBtX2xheWVySW1hZ2UpOworICAgIHNjcmF0Y2hT
aGFkb3dCdWZmZXIoKS0+c2NoZWR1bGVQdXJnZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRRdC5jcHAKaW5kZXggMmIyNDZkZWFlMmY3YWM2OWE4MzBkN2JjYzQzY2Jj
MjhlZjg3MDY2OS4uYjYxNjBiMDdmM2RlNmNjN2ZiODJhYTc5YzRmNjM4N2VhZDNkNWZmNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcApAQCAtMTI1LDM3ICsxMjUsMzgg
QEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKIAogICAgICAgICAgICAgQ29udGV4dFNoYWRvdyog
Y3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7CiAKLSAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgIGlm
IChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgewogICAgICAg
ICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAg
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0LngoKSA+IDApCi0gICAgICAgICAgICAg
ICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+b2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y3R4U2hhZG93LT5tX29mZnNldC53aWR0aCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZHgy
ID0gY3R4U2hhZG93LT5tX29mZnNldC53aWR0aCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0LngoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQueSgpID4gMCkKLSAgICAgICAgICAgICAgICAg
ICAgZHkyID0gY3R4U2hhZG93LT5vZmZzZXQueSgpOworICAgICAgICAgICAgICAgICAgICBkeDEg
PSAtY3R4U2hhZG93LT5tX29mZnNldC53aWR0aCgpOworICAgICAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPm1fb2Zmc2V0LmhlaWdodCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZHkyID0g
Y3R4U2hhZG93LT5tX29mZnNldC5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm9mZnNldC55KCk7CisgICAgICAgICAg
ICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm1fb2Zmc2V0LmhlaWdodCgpOwogICAgICAgICAg
ICAgICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93
IGFzIHdlbGwKICAgICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIp
OwotICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPmJsdXJSYWRpdXMsIC1j
dHhTaGFkb3ctPmJsdXJSYWRpdXMsIGN0eFNoYWRvdy0+Ymx1clJhZGl1cywgY3R4U2hhZG93LT5i
bHVyUmFkaXVzKTsKKyAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgtY3R4U2hhZG93LT5tX2Js
dXJSYWRpdXMsIC1jdHhTaGFkb3ctPm1fYmx1clJhZGl1cywgY3R4U2hhZG93LT5tX2JsdXJSYWRp
dXMsIGN0eFNoYWRvdy0+bV9ibHVyUmFkaXVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHAtPnNhdmUoKTsKICAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0
OjpJbnRlcnNlY3RDbGlwKTsKICAgICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsK
IAotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1No
YWRvdykgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFk
b3c6Ok5vU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93
ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+
dHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7CisgICAgICAgICAgICAgICAgaWYg
KGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKICAgICAg
ICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4o
Y3R4U2hhZG93LT5jb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhT
aGFkb3ctPm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ct
Pm1fY29sb3IpOworICAgICAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5t
X29mZnNldC53aWR0aCgpLCBjdHhTaGFkb3ctPm1fb2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbGluZS5kcmF3KHAsIHB0KTsKICAgICAgICAgICAgICAgICAgICAgcC0+cmVz
dG9yZSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIGJv
dW5kaW5nUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5
LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3Ip
OwogICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MSwxMiArMTgyLDEyIEBAIHN0YXRpYyB2b2lkIGRy
YXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0CiAgICAgaWYgKCFpc0NvbXBsZXhUZXh0ICYmICEoY3R4LT50ZXh0RHJhd2luZ01v
ZGUoKSAmIGNUZXh0U3Ryb2tlKSkKICAgICAgICAgZmxhZ3MgfD0gUXQ6OlRleHRCeXBhc3NTaGFw
aW5nOwogI2VuZGlmCi0gICAgaWYgKGN0eC0+Y29udGV4dFNoYWRvdygpLT50eXBlICE9IENvbnRl
eHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgaWYgKGN0eC0+Y29udGV4dFNoYWRvdygpLT5tX3R5
cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKICAgICAgICAgQ29udGV4dFNoYWRvdyog
Y3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChjdHhTaGFkb3ct
PnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAgICAgICBpZiAoY3R4U2hh
ZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgewogICAgICAgICAgICAg
cC0+c2F2ZSgpOwotICAgICAgICAgICAgcC0+c2V0UGVuKGN0eFNoYWRvdy0+Y29sb3IpOwotICAg
ICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHAt
PnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0
eFNoYWRvdy0+bV9vZmZzZXQud2lkdGgoKSwgY3R4U2hhZG93LT5tX29mZnNldC5oZWlnaHQoKSk7
CiAgICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLnBhZGRpbmco
KSk7CiAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTYs
NyArMTk3LDcgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBj
dHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVk
IGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCiAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLnBhZGRpbmco
KSk7CiAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihwKTsKICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHAKaW5kZXggYzljNzRkZDhiNmI1NGQyM2QzMzc1NDE5OTk5OWI5NDZhNTg2Mjhh
OC4uMTA3MDBhZDVlZmUzNjNmOWRhYzJhNDI1ZWM3Yjc5Yjc0YzQwNjMwMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTIw
Niw3ICsyMDYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gc2hhZG93LnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3c7
CisgICAgICAgIHJldHVybiBzaGFkb3cubV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93
OwogICAgIH0KIAogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29uc3QKQEAgLTQ0Niw5
ICs0NDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcAogCiAgICAgaWYgKG1fZGF0YS0+aGFz
U2hhZG93KCkpIHsKICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICBwLT50cmFuc2xhdGUobV9k
YXRhLT5zaGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93
Lm9mZnNldCgpKTsKICAgICAgICAgUVBlbiBwZW4ocC0+cGVuKCkpOwotICAgICAgICBwZW4uc2V0
Q29sb3IobV9kYXRhLT5zaGFkb3cuY29sb3IpOworICAgICAgICBwZW4uc2V0Q29sb3IobV9kYXRh
LT5zaGFkb3cubV9jb2xvcik7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICBwLT5k
cmF3QXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3Bhbik7CiAgICAgICAgIHAtPnJlc3RvcmUo
KTsKQEAgLTQ3NiwxMiArNDc2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzCiAgICAgcC0+
c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBzaG91bGRBbnRpYWxpYXMpOwog
ICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAg
ICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5z
bGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgICAgIGlmIChwLT5icnVzaCgpLnN0
eWxlKCkgIT0gUXQ6Ok5vQnJ1c2gpCi0gICAgICAgICAgICBwLT5zZXRCcnVzaChRQnJ1c2gobV9k
YXRhLT5zaGFkb3cuY29sb3IpKTsKKyAgICAgICAgICAgIHAtPnNldEJydXNoKFFCcnVzaChtX2Rh
dGEtPnNoYWRvdy5tX2NvbG9yKSk7CiAgICAgICAgIFFQZW4gcGVuKHAtPnBlbigpKTsKICAgICAg
ICAgaWYgKHBlbi5zdHlsZSgpICE9IFF0OjpOb1BlbikgewotICAgICAgICAgICAgcGVuLnNldENv
bG9yKG1fZGF0YS0+c2hhZG93LmNvbG9yKTsKKyAgICAgICAgICAgIHBlbi5zZXRDb2xvcihtX2Rh
dGEtPnNoYWRvdy5tX2NvbG9yKTsKICAgICAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAg
ICB9CiAgICAgICAgIHAtPmRyYXdDb252ZXhQb2x5Z29uKHBvbHlnb24pOwpAQCAtNTI1LDkgKzUy
NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgcGF0aC5zZXRGaWxs
UnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKG1fZGF0YS0+aGFzU2hh
ZG93KCkpIHsKLSAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCk7Ci0g
ICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIG1fZGF0YS0+c2hhZG93LmNvbG9yKTsKLSAgICAgICAg
cC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAgICAgICBwLT50cmFuc2xh
dGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBR
Q29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICBwLT50cmFuc2xhdGUoLW1f
ZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKICAgICB9CiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwpAQCAtNTUzLDEx
ICs1NTMsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgIHBhdGgu
c2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChtX2RhdGEt
Pmhhc1NoYWRvdygpKSB7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZz
ZXQpOworICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAg
ICAgICBRUGVuIHNoYWRvd1BlbihwZW4pOwotICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9k
YXRhLT5zaGFkb3cuY29sb3IpOworICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5z
aGFkb3cubV9jb2xvcik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgc2hhZG93UGVuKTsK
LSAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAgICAgICBw
LT50cmFuc2xhdGUoLW1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKICAgICB9CiAgICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBh
ZmZpbmU7CkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAg
ICAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1BhaW50ZXIsIGltYWdlLCBub3JtYWxp
emVkUmVjdCwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fY29tbW9u
LT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUlu
KTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBz
aGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1h
bGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFk
b3dMYXllcihwKTsKICAgICAgICAgfQogICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFn
ZSwgbm9ybWFsaXplZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgp
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CkBAIC02NzAsMTMgKzY3
MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgc2hhZG93UGFp
bnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1Nv
dXJjZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRS
ZWN0LCBzaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgfQogICAgICAgICBwLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdCwgYnJ1c2gpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2RhdGEtPmhhc1No
YWRvdygpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93LT50eXBlID09IENvbnRleHRTaGFkb3c6
OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSA9PSBDb250ZXh0
U2hhZG93OjpCbHVyU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJlY3QpOwogICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKQEAgLTY4
NSw5ICs2ODUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTb2xp
ZCByZWN0YW5nbGUgZmlsbCB3aXRoIG5vIGJsdXIgc2hhZG93IGNhbiBiZSBkb25lIGZhc3Rlcgog
ICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBhbGwu
Ci0gICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcjsKKyAg
ICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7CiAgICAg
ICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICog
cC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVj
dChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KSwgc2hhZG93Q29sb3Ip
OworICAgICAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQo
c2hhZG93LT5vZmZzZXQoKSksIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgcC0+YnJ1c2goKSk7CkBAIC03
MDcsMTQgKzcwNywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIGlmIChtX2RhdGEt
Pmhhc1NoYWRvdygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRT
aGFkb3coKTsKIAotICAgICAgICBpZiAoc2hhZG93LT50eXBlICE9IENvbnRleHRTaGFkb3c6OkJs
dXJTaGFkb3cpIHsKKyAgICAgICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6
OkJsdXJTaGFkb3cpIHsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIGFueSBsYXllciBm
b3Igc2ltcGxlIHNoYWRvdy4KLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0
LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQpLCBzaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAg
IHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQoKSks
IHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCBub3JtYWxpemVk
UmVjdCk7CiAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9y
bWFsaXplZFJlY3QsIHNoYWRvdy0+Y29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAg
ICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTczMSw5ICs3MzEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIFBhdGgg
cGF0aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+
cCgpOwogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7Ci0gICAgICAgIHAtPnRyYW5zbGF0
ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQpOwotICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRm
b3JtUGF0aCgpLCBtX2RhdGEtPnNoYWRvdy5jb2xvcik7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZSgt
bV9kYXRhLT5zaGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hh
ZG93Lm9mZnNldCgpKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwg
UUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKC1t
X2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgfQogICAgIHAtPmZpbGxQYXRoKHBhdGgucGxh
dGZvcm1QYXRoKCksIFFDb2xvcihjb2xvcikpOwogfQpAQCAtODkwLDkgKzg5MCw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IGJsdXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAogICAg
ICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZl
IG9wcG9zaXRlIFkgYXhpcwogICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93T2Zmc2V0ID0g
RmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEt
PnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3Is
IGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVy
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9
IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67766</attachid>
            <date>2010-09-15 20:03:02 -0700</date>
            <delta_ts>2010-09-16 09:26:44 -0700</delta_ts>
            <desc>Generalize ContextShadow and add a (disabled) Cairo implementation</desc>
            <filename>bug-45599-20100915200302.patch</filename>
            <type>text/plain</type>
            <size>48465</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDJiNGYwYjE3ZTk0ODM2MDNjMjUxYzg4MjM2ZDRkZTViNTczNjU2NS4uYmUxYWUxYTQ4YzAxOTU2
YzA3YTUxZGM5MjJkZDQzOWI4OTE4OTJmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOS0xNSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0NhaXJvXSBHZW5lcmFsaXplIENvbnRleHRT
aGFkb3cgZnJvbSB0aGUgUXQgcG9ydCBhbmQgdXNlIGl0IGZvciBzaGFkb3cgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1OTkKKworICAgICAg
ICBNYWtlIENvbnRleHRTaGFkb3cgcGxhdGZvcm0taW5kZXBlbmRlbnQgYW5kIGFkZCBhIENhaXJv
IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGN1cnJlbnRseQorICAgICAgICBkaXNhYmxlZCBmb3Ig
Q2Fpcm8sIGJ1dCB3aWxsIGJlIGVuYWJsZWQgaW4gYSBmb2xsb3d1cCBwYXRjaCB3aXRoIG5ldyBi
YXNlbGluZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgZG9lcyBub3QgY2hhbmdl
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogVXBkYXRlIHNvdXJj
ZSBsaXN0cy4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogVXBkYXRlIHNvdXJjZSBsaXN0cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcDogQWRkZWQuIEEgZ2Vu
ZXJhbGl6ZWQgdmVyc2lvbiBvZiBRdCdzIENvbnRleHRTaGFkb3cuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRTaGFkb3c6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmJsdXJM
YXllckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZU1p
bmltYWxMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFk
b3cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpvZmZzZXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcDogQWRk
ZWQuIAorICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlUkdCQUZyb21Db2xvcik6IEEgdXRpbGl0
eSB0byBzZXQgdGhlIHNvdXJjZSBSR0JBIG9uIGEgQ2Fpcm8gc3VyZmFjZSBmcm9tIGEgV2ViQ29y
ZSBjb2xvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hh
ZG93Q2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnB1cmdlU2NyYXRjaEJ1ZmZl
cik6IFN0YXRpYyBmdW5jdGlvbiB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOjpmaXJlZCk6IFRpbWVyIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6c2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UpOiBTY2hlZHVs
ZSdzIGEgV2ViQ29yZSB0aW1lciB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OmdldFNjcmF0Y2hCdWZmZXIpOiBDcmVhdGUgb3IgcmV1c2UgdGhlIHNjcmF0Y2gg
YnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXll
cik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5
ZXIpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRp
ZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0
aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtD
YWlyb1V0aWxpdGllcy5jcHA6IFJlbmFtZWQgZnJvbSBDYWlyb1V0aWxpdGllcy5jcHAuCisgICAg
ICAgIChnZXRDYWlyb1N1cmZhY2VQaXhlbCk6CisgICAgICAgIChnZXRHZGtQaXhidWZQaXhlbCk6
CisgICAgICAgIChjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwOiBBZGRlZC4gQWRhcHRlZCBmcm9tIGNvZGUg
b3JpZ2luYWxseSBpbiBDb250ZXh0U2hhZG93LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0J1ZmZlcjo6U2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6
c2NyYXRjaEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6c2NoZWR1bGVQ
dXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0
Q29tbW9uKTogVXBkYXRlZCB0byByZWZsZWN0IG5ldyBDb250ZXh0U2hhZG93IG1lbWJlcnMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoYXNTaGFkb3cp
OiBVcGRhdGVkIHRvIHJlZmxlY3QgbmV3IENvbnRleHRTaGFkb3cgbWVtYmVycy4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KTogRGl0dG8uCisK
IDIwMTAtMDktMTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IGNocm9taXVtIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNjIzMDEyNjAxNTQyN2RmNjhjM2Y1
ZmEyNGQ0Zjc2YWU4MDY0NDdiYi4uNTIxNDhlNDJkZjAxMGVkOGY4YjY2NWU2ZmRkNjEzZjUwMjAz
MTQ0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0yMDc5LDYgKzIwNzksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFj
ZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oIFwKQEAgLTMzNDMsNyArMzM0NSwxMCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNw
cCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YS5oIFwKQEAgLTMzNzYsOCAr
MzM4MSw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5o
IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAgXAot
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmggXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
SWNvbkd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggYzM4NGYzMzgwMmRmNmIwMjNjNWM0MmFiMGU4YzMyZTRiYTIyNDg3
NS4uYjExZGMwNmVhM2IwNmY4OTg4Nzc2NzRkMTEzMDFmMTkyOWVkYzZlNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDk0LDYg
KzEwOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRT
aGFkb3cuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcCBcCkBAIC0xOTc0LDYgKzE5NzUsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmggXApAQCAtMjAwNyw3ICsyMDA5LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGVuLmggXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNv
ZGVyUXQuaCBcCkBAIC0yNTI4LDcgKzI1MjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0
L0ZyYW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1h
dHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCnNpbWlsYXJpdHkg
aW5kZXggNTAlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4
dFNoYWRvdy5jcHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNo
YWRvdy5jcHAKaW5kZXggNDYwOTkyM2RhZGM1Njg4MWRmMTJmM2M5NzNjYTk5MTU1YzAwNzRlZi4u
NmVkY2RiYWQyNzk4Njg0ZTk4M2ViOTUwNzYwM2MwMjQ4NzJhODIzNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93LmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjgsMTE1
ICsyOSw1MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cu
aCIKIAotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFz
IHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcg
YW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3Jl
YXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGlt
ZXIuCi0KLWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAg
IFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRj
aEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0K
LXByaXZhdGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hh
ZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChw
YXJlbnQpCi0gICAgLCB0aW1lcklkKDApCi17Ci19Ci0KLVFJbWFnZSogU2hhZG93QnVmZmVyOjpz
Y3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpCi17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotCi0gICAgLy8gV2UgZG8g
bm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVmZmVyIGlzIHJlYXNvbmFi
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuIEhvd2V2ZXIsIGlmIHRo
ZSByZXF1ZXN0ZWQgc2l6ZSBpcwotICAgIC8vIG11Y2ggc21hbGxlciB0aGFuIG91ciBidWZmZXIs
IHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKLSAgICAvLyBrZWVwIHRvbyBt
YW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgotICAgIGlmICghaW1hZ2UuaXNOdWxs
KCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkgJiYgKGltYWdlLmhlaWdodCgpID4gaGVpZ2h0
KSkKLSAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+IGltYWdlLndpZHRoKCkpICYmICgoMiAqIGhl
aWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKLSAgICAgICAgICAgIGltYWdlLmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKLSAgICAgICAgICAgIHJldHVybiAmaW1hZ2U7Ci0gICAgICAgIH0KLQotICAg
IC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUg
YnVmZmVyIGV2ZXJ5dGltZQotICAgIC8vIHRoZXJlIGlzIGxhcmdlciByZXF1ZXN0IGJ5IDEgcGl4
ZWwuCi0gICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKLSAgICBoZWlnaHQgPSAo
MSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICBpbWFnZSA9IFFJbWFnZSh3aWR0aCwgaGVp
Z2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Ci0gICAgaW1hZ2UuZmls
bChRdDo6dHJhbnNwYXJlbnQpOwotICAgIHJldHVybiAmaW1hZ2U7Ci19Ci0KLXZvaWQgU2hhZG93
QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZl
clB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAg
IHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9p
ZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlm
IChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVy
SWQpOwotICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1l
ckV2ZW50KGV2ZW50KTsKLX0KK3VzaW5nIFdURjo6bWluOwordXNpbmcgV1RGOjptYXg7CiAKLVFf
R0xPQkFMX1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFkb3dCdWZmZXIpCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIENvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3coKQotICAgIDogdHlw
ZShOb1NoYWRvdykKLSAgICAsIGJsdXJSYWRpdXMoMCkKKyAgICA6IG1fdHlwZShOb1NoYWRvdykK
KyAgICAsIG1fYmx1clJhZGl1cygwKQogewogfQogCi1Db250ZXh0U2hhZG93OjpDb250ZXh0U2hh
ZG93KGNvbnN0IFFDb2xvciYgYywgZmxvYXQgciwgcXJlYWwgZHgsIHFyZWFsIGR5KQotICAgIDog
Y29sb3IoYykKLSAgICAsIGJsdXJSYWRpdXMocVJvdW5kKHIpKQotICAgICwgb2Zmc2V0KGR4LCBk
eSkKK0NvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3coY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgIDogbV9jb2xvcihjb2xvcikK
KyAgICAsIG1fYmx1clJhZGl1cyhyb3VuZChyYWRpdXMpKQorICAgICwgbV9vZmZzZXQob2Zmc2V0
KQogeworICAgIC8vIFNlZSBjb21tZW50cyBpbiBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNzkzLCBp
dCBzZWVtcyBzZW5zaWJsZQorICAgIC8vIHRvIGZvbGxvdyBTa2lhJ3MgbGltaXQgb2YgMTI4IHBp
eGVscyBvZiBibHVyIHJhZGl1cworICAgIG1fYmx1clJhZGl1cyA9IG1pbihtX2JsdXJSYWRpdXMs
IDEyOCk7CisKICAgICAvLyBUaGUgdHlwZSBvZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUgYmx1
ciByYWRpdXMsIHNoYWRvdyBvZmZzZXQsIGFuZCBzaGFkb3cgY29sb3IuCi0gICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpIHsKKyAgICBpZiAoIW1fY29sb3IuaXNWYWxp
ZCgpKSB7CiAgICAgICAgIC8vIENhbid0IHBhaW50IHRoZSBzaGFkb3cgd2l0aCBpbnZhbGlkIG9y
IGludmlzaWJsZSBjb2xvci4KLSAgICAgICAgdHlwZSA9IE5vU2hhZG93OwotICAgIH0gZWxzZSBp
ZiAociA+IDApIHsKKyAgICAgICAgbV90eXBlID0gTm9TaGFkb3c7CisgICAgfSBlbHNlIGlmIChy
YWRpdXMgPiAwKSB7CiAgICAgICAgIC8vIFNoYWRvdyBpcyBhbHdheXMgYmx1cnJlZCwgZXZlbiB0
aGUgb2Zmc2V0IGlzIHplcm8uCi0gICAgICAgIHR5cGUgPSBCbHVyU2hhZG93OwotICAgIH0gZWxz
ZSBpZiAob2Zmc2V0LmlzTnVsbCgpKSB7CisgICAgICAgIG1fdHlwZSA9IEJsdXJTaGFkb3c7Cisg
ICAgfSBlbHNlIGlmICghbV9vZmZzZXQud2lkdGgoKSAmJiAhbV9vZmZzZXQuaGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gV2l0aG91dCBibHVyIGFuZCB6ZXJvIG9mZnNldCBtZWFucyB0aGUgc2hhZG93
IGlzIGZ1bGx5IGhpZGRlbi4KLSAgICAgICAgdHlwZSA9IE5vU2hhZG93OworICAgICAgICBtX3R5
cGUgPSBOb1NoYWRvdzsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA+
IDApCi0gICAgICAgICAgICB0eXBlID0gQWxwaGFTb2xpZFNoYWRvdzsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdHlwZSA9IE9wYXF1ZVNvbGlkU2hhZG93OworICAgICAgICBtX3R5cGUgPSBT
b2xpZFNoYWRvdzsKICAgICB9CiB9CiAKIHZvaWQgQ29udGV4dFNoYWRvdzo6Y2xlYXIoKQogewot
ICAgIHR5cGUgPSBOb1NoYWRvdzsKLSAgICBjb2xvciA9IFFDb2xvcigpOwotICAgIGJsdXJSYWRp
dXMgPSAwOwotICAgIG9mZnNldCA9IFFQb2ludEYoMCwgMCk7CisgICAgbV90eXBlID0gTm9TaGFk
b3c7CisgICAgbV9jb2xvciA9IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gMDsKKyAgICBt
X29mZnNldCA9IEZsb2F0U2l6ZSgwLCAwKTsKIH0KIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2VyIGRp
dmlzaW9uLCB3ZSB1c2UgMTcuMTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgpAQCAtMTQ2LDI3
ICs4MywyMiBAQCBzdGF0aWMgY29uc3QgaW50IEJsdXJTdW1TaGlmdCA9IDE1OwogLy8gQXMgbm90
ZWQgaW4gdGhlIFNWRyBmaWx0ZXIgc3BlY2lmaWNhdGlvbiwgcnVubmluZyBib3ggYmx1ciAzeAog
Ly8gYXBwcm94aW1hdGVzIGEgcmVhbCBnYXVzc2lhbiBibHVyIG5pY2VseS4KIAotdm9pZCBzaGFk
b3dCbHVyKFFJbWFnZSYgaW1hZ2UsIGludCByYWRpdXMsIGNvbnN0IFFDb2xvciYgc2hhZG93Q29s
b3IpCit2b2lkIENvbnRleHRTaGFkb3c6OmJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqIGlt
YWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHJvd1N0cmlkZSkKIHsKLSAgICAvLyBT
ZWUgY29tbWVudHMgaW4gaHR0cDovL3dlYmtpdC5vcmcvYi80MDc5MywgaXQgc2VlbXMgc2Vuc2li
bGUKLSAgICAvLyB0byBmb2xsb3cgU2tpYSdzIGxpbWl0IG9mIDEyOCBwaXhlbHMgZm9yIHRoZSBi
bHVyIHJhZGl1cy4KLSAgICBpZiAocmFkaXVzID4gMTI4KQotICAgICAgICByYWRpdXMgPSAxMjg7
Ci0KICAgICBpbnQgY2hhbm5lbHNbNF0gPSB7IDMsIDAsIDEsIDMgfTsKLSAgICBpbnQgZG1heCA9
IHJhZGl1cyA+PiAxOwotICAgIGludCBkbWluID0gZG1heCAtIDEgKyAocmFkaXVzICYgMSk7Cisg
ICAgaW50IGRtYXggPSBtX2JsdXJSYWRpdXMgPj4gMTsKKyAgICBpbnQgZG1pbiA9IGRtYXggLSAx
ICsgKG1fYmx1clJhZGl1cyAmIDEpOwogICAgIGlmIChkbWluIDwgMCkKICAgICAgICAgZG1pbiA9
IDA7CiAKICAgICAvLyBUd28gc3RhZ2VzOiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogICAgIGZv
ciAoaW50IGsgPSAwOyBrIDwgMjsgKytrKSB7CiAKLSAgICAgICAgdW5zaWduZWQgY2hhciogcGl4
ZWxzID0gaW1hZ2UuYml0cygpOwotICAgICAgICBpbnQgc3RyaWRlID0gKCFrKSA/IDQgOiBpbWFn
ZS5ieXRlc1BlckxpbmUoKTsKLSAgICAgICAgaW50IGRlbHRhID0gKCFrKSA/IGltYWdlLmJ5dGVz
UGVyTGluZSgpIDogNDsKLSAgICAgICAgaW50IGpmaW5hbCA9ICghaykgPyBpbWFnZS5oZWlnaHQo
KSA6IGltYWdlLndpZHRoKCk7Ci0gICAgICAgIGludCBkaW0gPSAoIWspID8gaW1hZ2Uud2lkdGgo
KSA6IGltYWdlLmhlaWdodCgpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFn
ZURhdGE7CisgICAgICAgIGludCBzdHJpZGUgPSAoIWspID8gNCA6IHJvd1N0cmlkZTsKKyAgICAg
ICAgaW50IGRlbHRhID0gKCFrKSA/IHJvd1N0cmlkZSA6IDQ7CisgICAgICAgIGludCBqZmluYWwg
PSAoIWspID8gc2l6ZS5oZWlnaHQoKSA6IHNpemUud2lkdGgoKTsKKyAgICAgICAgaW50IGRpbSA9
ICghaykgPyBzaXplLndpZHRoKCkgOiBzaXplLmhlaWdodCgpOwogCiAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgamZpbmFsOyArK2osIHBpeGVscyArPSBkZWx0YSkgewogCkBAIC0yMTMsNzQg
KzE0NSwzMSBAQCB2b2lkIHNoYWRvd0JsdXIoUUltYWdlJiBpbWFnZSwgaW50IHJhZGl1cywgY29u
c3QgUUNvbG9yJiBzaGFkb3dDb2xvcikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LQotICAgIC8vICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgIFFQ
YWludGVyIHAoJmltYWdlKTsKLSAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICBwLmZpbGxSZWN0KGltYWdlLnJlY3QoKSwgc2hh
ZG93Q29sb3IucmdiKCkpOwotICAgIHAuZW5kKCk7CiB9CiAKLVFQYWludGVyKiBDb250ZXh0U2hh
ZG93OjpiZWdpblNoYWRvd0xheWVyKFFQYWludGVyKiBwLCBjb25zdCBRUmVjdEYgJnJlY3QpCit2
b2lkIENvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIC8vIFdlIGV4
cGFuZCB0aGUgYXJlYSBieSB0aGUgYmx1ciByYWRpdXMgKiAyIHRvIGdpdmUgZXh0cmEgc3BhY2UK
LSAgICAvLyBmb3IgdGhlIGJsdXIgdHJhbnNpdGlvbi4KLSAgICBpbnQgZXh0cmEgPSAodHlwZSA9
PSBCbHVyU2hhZG93KSA/IGJsdXJSYWRpdXMgKiAyIDogMDsKLQotICAgIFFSZWN0RiBzaGFkb3dS
ZWN0ID0gcmVjdC50cmFuc2xhdGVkKG9mZnNldCk7Ci0gICAgUVJlY3RGIGJ1ZmZlclJlY3QgPSBz
aGFkb3dSZWN0LmFkanVzdGVkKC1leHRyYSwgLWV4dHJhLCBleHRyYSwgZXh0cmEpOwotICAgIG1f
bGF5ZXJSZWN0ID0gYnVmZmVyUmVjdC50b0FsaWduZWRSZWN0KCk7CisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmx1cnJlZCBsYXllci4KKyAgICBGbG9hdFJlY3QgZGVz
dGluYXRpb25SZWN0KGxheWVyQXJlYSk7CisgICAgZGVzdGluYXRpb25SZWN0Lm1vdmUobV9vZmZz
ZXQpOworICAgIG1fbGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkZXN0aW5hdGlvblJlY3Qp
OwogCi0gICAgUVJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCi0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCi0gICAgICAgIGNsaXBSZWN0
ID0gcC0+Y2xpcEJvdW5kaW5nUmVjdCgpOwotI2Vsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5j
bGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7Ci0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIGNs
aXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsK
KyAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzICogMiB0byBnaXZl
IGV4dHJhIHNwYWNlIGZvciB0aGUgYmx1ciB0cmFuc2l0aW9uLgorICAgIG1fbGF5ZXJSZWN0Lmlu
ZmxhdGUoKG1fdHlwZSA9PSBCbHVyU2hhZG93KSA/IGNlaWwobV9ibHVyUmFkaXVzICogMikgOiAw
KTsKIAogICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMobV9sYXllclJlY3QpKSB7Ci0KICAgICAg
ICAgLy8gTm8gbmVlZCB0byBoYXZlIHRoZSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIGNsaXAuCi0g
ICAgICAgIG1fbGF5ZXJSZWN0ID0gbV9sYXllclJlY3QuaW50ZXJzZWN0ZWQoY2xpcFJlY3QpOwor
ICAgICAgICBtX2xheWVyUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworCisgICAgICAgIC8vIElm
IHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLCB3ZSBhcmVuJ3QgcGFpbnRp
bmcgYXQgYWxsLgogICAgICAgICBpZiAobV9sYXllclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gV2UgYWRqdXN0
IGFnYWluIGJlY2F1c2UgdGhlIHBpeGVscyBhdCB0aGUgYm9yZGVycyBhcmUgc3RpbGwKICAgICAg
ICAgLy8gcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBpeGVscyBvdXRzaWRlIHRoZSBidWZm
ZXIuCi0gICAgICAgIGlmICh0eXBlID09IEJsdXJTaGFkb3cpCi0gICAgICAgICAgICBtX2xheWVy
UmVjdC5hZGp1c3QoLWV4dHJhLCAtZXh0cmEsIGV4dHJhLCBleHRyYSk7CisgICAgICAgIGlmICht
X3R5cGUgPT0gQmx1clNoYWRvdykKKyAgICAgICAgICAgIG1fbGF5ZXJSZWN0LmluZmxhdGUoKG1f
dHlwZSA9PSBCbHVyU2hhZG93KSA/IGNlaWwobV9ibHVyUmFkaXVzICogMikgOiAwKTsKICAgICB9
Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dCdWZmZXIo
KTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5zY3JhdGNoSW1hZ2Uo
bV9sYXllclJlY3Quc2l6ZSgpKTsKLSAgICBtX2xheWVySW1hZ2UgPSBRSW1hZ2UoKnNoYWRvd0lt
YWdlKTsKLQotICAgIG1fbGF5ZXJQYWludGVyID0gbmV3IFFQYWludGVyOwotICAgIG1fbGF5ZXJQ
YWludGVyLT5iZWdpbigmbV9sYXllckltYWdlKTsKLSAgICBtX2xheWVyUGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgIG1fbGF5ZXJQYWludGVyLT50cmFuc2xhdGUob2Zmc2V0KTsKLQot
ICAgIC8vIFRoZSBvcmlnaW4gaXMgbm93IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmF0
Y2ggaW1hZ2UuCi0gICAgbV9sYXllclBhaW50ZXItPnRyYW5zbGF0ZSgtbV9sYXllclJlY3QudG9w
TGVmdCgpKTsKLQotICAgIHJldHVybiBtX2xheWVyUGFpbnRlcjsKIH0KIAotdm9pZCBDb250ZXh0
U2hhZG93OjplbmRTaGFkb3dMYXllcihRUGFpbnRlciogcCkKLXsKLSAgICBtX2xheWVyUGFpbnRl
ci0+ZW5kKCk7Ci0gICAgZGVsZXRlIG1fbGF5ZXJQYWludGVyOwotICAgIG1fbGF5ZXJQYWludGVy
ID0gMDsKLQotICAgIGlmICh0eXBlID09IEJsdXJTaGFkb3cpCi0gICAgICAgIHNoYWRvd0JsdXIo
bV9sYXllckltYWdlLCBibHVyUmFkaXVzLCBjb2xvcik7Ci0KLSAgICBwLT5kcmF3SW1hZ2UobV9s
YXllclJlY3QudG9wTGVmdCgpLCBtX2xheWVySW1hZ2UpOwotCi0gICAgc2NyYXRjaFNoYWRvd0J1
ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmgKc2ltaWxhcml0eSBp
bmRleCA1MyUKcmVuYW1lIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0
U2hhZG93LmgKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRv
dy5oCmluZGV4IDcxNDAzNDBkNzhlNGQ0ODI0OGNmMDFjZjczNmZkMmIxZDA1YTkxZDcuLjg4NjEz
ZWI3OTczNTRhZjJhOWMzYWI4OWMwYTAxNzAyOGIyYzVhN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtOCw4ICs5LDcgQEAKICAq
IGFyZSBtZXQ6CiAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCkBAIC0yOCw3ICsyOCwyMiBAQAogI2lmbmRlZiBDb250
ZXh0U2hhZG93X2gKICNkZWZpbmUgQ29udGV4dFNoYWRvd19oCiAKLSNpbmNsdWRlIDxRUGFpbnRl
cj4KKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisKKyNpZiBQTEFURk9STShDQUlS
TykKK3R5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
X3N1cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwordHlwZWRlZiBjYWlyb19zdXJmYWNlX3QqIFBsYXRm
b3JtSW1hZ2U7Cit0eXBlZGVmIGNhaXJvX3QqIFBsYXRmb3JtQ29udGV4dDsKKyNlbGlmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgPFFJbWFnZT4KK2NsYXNzIFFQYWludGVyOwordHlwZWRlZiBRSW1h
Z2UgUGxhdGZvcm1JbWFnZTsKK3R5cGVkZWYgUVBhaW50ZXIqIFBsYXRmb3JtQ29udGV4dDsKKyNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDQ5ICs1OSw1OCBAQCBjbGFzcyBD
b250ZXh0U2hhZG93IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9TaGFkb3csCi0g
ICAgICAgIE9wYXF1ZVNvbGlkU2hhZG93LAotICAgICAgICBBbHBoYVNvbGlkU2hhZG93LAorICAg
ICAgICBTb2xpZFNoYWRvdywKICAgICAgICAgQmx1clNoYWRvdwotICAgIH0gdHlwZTsKKyAgICB9
IG1fdHlwZTsKIAotICAgIFFDb2xvciBjb2xvcjsKLSAgICBpbnQgYmx1clJhZGl1czsKLSAgICBR
UG9pbnRGIG9mZnNldDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIGludCBtX2JsdXJSYWRpdXM7
CisgICAgRmxvYXRTaXplIG1fb2Zmc2V0OwogCiAgICAgQ29udGV4dFNoYWRvdygpOwotICAgIENv
bnRleHRTaGFkb3coY29uc3QgUUNvbG9yJiBjLCBmbG9hdCByLCBxcmVhbCBkeCwgcXJlYWwgZHkp
OworICAgIENvbnRleHRTaGFkb3coY29uc3QgQ29sb3ImLCBmbG9hdCByYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIC8vIFRoZSBwYWly
IGJlZ2luU2hhZG93TGF5ZXIgYW5kIGVuZFNoYWRvd0xheWVyIGNyZWF0ZXMgYSB0ZW1wb3Jhcnkg
aW1hZ2UKLSAgICAvLyB3aGVyZSB0aGUgY2FsbGVyIGNhbiBkcmF3IG9udG8sIHVzaW5nIHRoZSBy
ZXR1cm5lZCBRUGFpbnRlci4gVGhpcwotICAgIC8vIFFQYWludGVyIGluc3RhbmNlIG11c3QgYmUg
dXNlZCBvbmx5IHRvIGRyYXcgYmV0d2VlbiB0aGUgY2FsbCB0bwotICAgIC8vIGJlZ2luU2hhZG93
TGF5ZXIgYW5kIGVuZFNoYWRvd0xheWVyLgorICAgIC8vIHdoZXJlIHRoZSBjYWxsZXIgY2FuIGRy
YXcgb250bywgdXNpbmcgdGhlIHJldHVybmVkIGNvbnRleHQuIFRoaXMgY29udGV4dAorICAgIC8v
IG11c3QgYmUgdXNlZCBvbmx5IHRvIGRyYXcgYmV0d2VlbiB0aGUgY2FsbCB0byBiZWdpblNoYWRv
d0xheWVyIGFuZAorICAgIC8vIGVuZFNoYWRvd0xheWVyLgogICAgIC8vCi0gICAgLy8gTm90ZTog
bXVsdGlwbGUvbmVzdGVkIHNoYWRvdyBsYXllciBpcyBOT1QgYWxsb3dlZC4KKyAgICAvLyBOb3Rl
OiBtdWx0aXBsZS9uZXN0ZWQgc2hhZG93IGxheWVycyBhcmUgTk9UIGFsbG93ZWQuCiAgICAgLy8K
ICAgICAvLyBUaGUgY3VycmVudCBjbGlwIHJlZ2lvbiB3aWxsIGJlIHVzZWQgdG8gb3B0aW1pemUg
dGhlIHNpemUgb2YgdGhlCiAgICAgLy8gdGVtcG9yYXJ5IGltYWdlLiBUaHVzLCB0aGUgb3JpZ2lu
YWwgcGFpbnRlciBzaG91bGQgbm90IGNoYW5nZSBhbnkKLSAgICAvLyBjbGlwcGluZyB1bnRpbCBl
bmRTaGFkb3dMYXllci4KLSAgICAvLyBJZiB0aGUgc2hhZG93IHdpbGwgYmUgY29tcGxldGVseSBv
dXRzaWRlIHRoZSBjbGlwcGluZyByZWdpb24sCi0gICAgLy8gYmVnaW5TaGFkb3dMYXllciB3aWxs
IHJldHVybiAwLgorICAgIC8vIGNsaXBwaW5nIHVudGlsIGVuZFNoYWRvd0xheWVyLiBJZiB0aGUg
c2hhZG93IHdpbGwgYmUgY29tcGxldGVseSBvdXRzaWRlCisgICAgLy8gdGhlIGNsaXBwaW5nIHJl
Z2lvbiwgYmVnaW5TaGFkb3dMYXllciB3aWxsIHJldHVybiAwLgogICAgIC8vCi0gICAgLy8gVGhl
IHJldHVybmVkIFFQYWludGVyIHdpbGwgaGF2ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGFu
ZCBjbGlwcGluZwotICAgIC8vIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHN0YXJ0IGRvaW5nIHRo
ZSBwYWludGluZyAobm8gbmVlZCB0byBhY2NvdW50Ci0gICAgLy8gZm9yIHRoZSBzaGFkb3cgb2Zm
c2V0KSwgaG93ZXZlciBpdCB3aWxsIG5vdCBoYXZlIHRoZSBzYW1lIHJlbmRlciBoaW50cywKLSAg
ICAvLyBwZW4sIGJydXNoLCBldGMgYXMgdGhlIHBhc3NlZCBRUGFpbnRlci4gVGhpcyBpcyBpbnRl
bnRpb25hbCwgdXN1YWxseQotICAgIC8vIHNoYWRvdyBoYXMgZGlmZmVyZW50IHByb3BlcnRpZXMg
dGhhbiB0aGUgc2hhcGUgd2hpY2ggY2FzdHMgdGhlIHNoYWRvdy4KKyAgICAvLyBUaGUgcmV0dXJu
ZWQgY29udGV4dCB3aWxsIGhhdmUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhbmQgY2xpcHBp
bmcKKyAgICAvLyBwcm9wZXJseSBpbml0aWFsaXplZCB0byBzdGFydCBkb2luZyB0aGUgcGFpbnRp
bmcgKG5vIG5lZWQgdG8gYWNjb3VudCBmb3IKKyAgICAvLyB0aGUgc2hhZG93IG9mZnNldCksIGhv
d2V2ZXIgaXQgd2lsbCBub3QgaGF2ZSB0aGUgc2FtZSByZW5kZXIgaGludHMsIHBlbiwKKyAgICAv
LyBicnVzaCwgZXRjIGFzIHRoZSBwYXNzZWQgY29udGV4dC4gVGhpcyBpcyBpbnRlbnRpb25hbCwg
dXN1YWxseSBzaGFkb3dzCisgICAgLy8gaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyB0aGFuIHRo
ZSBzaGFwZXMgd2hpY2ggY2FzdCB0aGVtLgogICAgIC8vCi0gICAgLy8gT25jZSBlbmRTaGFkb3dM
YXllciBpcyBjYWxsZWQsIHRoZSB0ZW1wb3JhcnkgaW1hZ2Ugd2lsbCBiZSBkcmF3bgotICAgIC8v
IHdpdGggdGhlIG9yaWdpbmFsIHBhaW50ZXIuIElmIGJsdXIgcmFkaXVzIGlzIHNwZWNpZmllZCwg
dGhlIHNoYWRvdwotICAgIC8vIHdpbGwgYmUgZmlsdGVyZWQgZmlyc3QuCi0gICAgUVBhaW50ZXIq
IGJlZ2luU2hhZG93TGF5ZXIoUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0RiYgcmVjdCk7Ci0gICAg
dm9pZCBlbmRTaGFkb3dMYXllcihRUGFpbnRlciogcCk7CisgICAgLy8gT25jZSBlbmRTaGFkb3dM
YXllciBpcyBjYWxsZWQsIHRoZSB0ZW1wb3JhcnkgaW1hZ2Ugd2lsbCBiZSBkcmF3biB3aXRoIHRo
ZQorICAgIC8vIG9yaWdpbmFsIHBhaW50ZXIuIElmIGJsdXIgcmFkaXVzIGlzIHNwZWNpZmllZCwg
dGhlIHNoYWRvdyB3aWxsIGJlCisgICAgLy8gZmlsdGVyZWQgZmlyc3QuCisKKyAgICBQbGF0Zm9y
bUNvbnRleHQgYmVnaW5TaGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVuZFNoYWRvd0xheWVyKFBsYXRmb3JtQ29udGV4dCk7
CisgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSgpOworICAgIHN0YXRpYyB2b2lkIHB1cmdlU2NyYXRj
aEJ1ZmZlcigpOworCisjaWYgUExBVEZPUk0oUVQpCisgICAgUVBvaW50RiBvZmZzZXQoKSB7IHJl
dHVybiBRUG9pbnRGKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0LmhlaWdodCgpKTsgfQorI2Vu
ZGlmCisKIAogcHJpdmF0ZToKLSAgICBRUmVjdCBtX2xheWVyUmVjdDsKLSAgICBRSW1hZ2UgbV9s
YXllckltYWdlOwotICAgIFFQYWludGVyKiBtX2xheWVyUGFpbnRlcjsKKyAgICBJbnRSZWN0IG1f
bGF5ZXJSZWN0OworICAgIFBsYXRmb3JtSW1hZ2UgbV9sYXllckltYWdlOworICAgIFBsYXRmb3Jt
Q29udGV4dCBtX2xheWVyQ29udGV4dDsKKworICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWdu
ZWQgY2hhciosIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgaW50IHN0cmlkZSk7CisgICAgdm9p
ZCBjYWxjdWxhdGVNaW5pbWFsTGF5ZXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKc2lt
aWxhcml0eSBpbmRleCA3OSUKY29weSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NhaXJvVXRpbGl0aWVzLmgKY29weSB0byBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmNwcAppbmRleCA1OTRhYmMwZDRmODI1Mzc5NjI3OTVhYjk4OTA1NTFk
MTEwMDU0Yjg3Li5lZDRlYjgwYzc3ZTY5NGE0ZmM0MjA4YTBlNDVkNzQ4MzAyZmI2MGYyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCkBA
IC0yMyw5ICsyMywxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENhaXJvVXRp
bGl0aWVzX2gKLSNkZWZpbmUgQ2Fpcm9VdGlsaXRpZXNfaAorI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAKLUdka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZh
Y2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KIAotI2VuZGlmIC8vIENhaXJvVXRpbGl0aWVzX2gKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3Qq
IGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBmbG9hdCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYTsKKyAgICBjb2xvci5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
KyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCmNvcHkg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5oCmNvcHkg
dG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCmluZGV4
IDU5NGFiYzBkNGY4MjUzNzk2Mjc5NWFiOTg5MDU1MWQxMTAwNTRiODcuLmFkZWQyMTQ3YTY5YTQy
ZGM2NDhmZWRhMTJjYThhYjQyMmU4NjE3YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCkBAIC0yNiw2ICsyNiwxMyBAQAogI2lmbmRlZiBD
YWlyb1V0aWxpdGllc19oCiAjZGVmaW5lIENhaXJvVXRpbGl0aWVzX2gKIAotR2RrUGl4YnVmKiBj
YWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7Cit0
eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ29sb3I7CisKK3ZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiwgY29uc3Qg
Q29sb3ImKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ2Fpcm9VdGls
aXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250
ZXh0U2hhZG93Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250
ZXh0U2hhZG93Q2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNzYyZjc4NzBjMDNjMmE5YWE5ZDZkYmZl
NWU4NDVmZjhkN2Q0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCisKKyNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBzY3JhdGNoQnVm
ZmVyID0gMDsKK3N0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1ZmZlcigpCit7CisgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KHNjcmF0Y2hCdWZmZXIpOworICAgIHNjcmF0Y2hCdWZmZXIgPSAwOwor
fQorCisvLyBDb250ZXh0U2hhZG93IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVy
IGZvciB0aGUgYmx1ciBmaWx0ZXIuCisvLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95
aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwKKy8vIHdlIGNyZWF0ZSBhIGJ1ZmZl
ciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgorY2xhc3Mg
UHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQorfTsKK3N0
YXRpYyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lcjsKK3N0
YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkKK3sKKyAgICBpZiAocHVyZ2VT
Y3JhdGNoQnVmZmVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVy
VGltZXIuc3RvcCgpOworICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0YXJ0T25lU2hvdCgy
KTsKK30KKworc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogZ2V0U2NyYXRjaEJ1ZmZlcihjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0gc2NyYXRjaEJ1
ZmZlciA/IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHNjcmF0Y2hCdWZmZXIpIDogMDsK
KyAgICBpbnQgc2NyYXRjaEhlaWdodCA9IHNjcmF0Y2hCdWZmZXIgPyBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc2NyYXRjaEJ1ZmZlcikgOiAwOworCisgICAgLy8gV2UgZG8gbm90IG5l
ZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVmZmVyIGlzIHJlYXNvbmFibHkKKyAg
ICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuIEhvd2V2ZXIsIGlmIHRoZSByZXF1
ZXN0ZWQgc2l6ZSBpcworICAgIC8vIG11Y2ggc21hbGxlciB0aGFuIG91ciBidWZmZXIsIHJlZHVj
ZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKKyAgICAvLyBrZWVwIHRvbyBtYW55IGFs
bG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgorICAgIGlmIChzY3JhdGNoQnVmZmVyICYmIChz
Y3JhdGNoV2lkdGggPiB3aWR0aCkgJiYgKHNjcmF0Y2hIZWlnaHQgPiBoZWlnaHQpCisgICAgICAg
ICYmICgoKDIgKiB3aWR0aCkgPiBzY3JhdGNoV2lkdGgpICYmICgoMiAqIGhlaWdodCkgPiBzY3Jh
dGNoSGVpZ2h0KSkpIHsKKyAgICAgICAgcmV0dXJuIHNjcmF0Y2hCdWZmZXI7CisgICAgfQorCisg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisKKyAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAz
MiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCBy
ZXF1ZXN0cy4KKyAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OworICAgIGhlaWdo
dCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKyAgICBzY3JhdGNoQnVmZmVyID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCk7
CisgICAgcmV0dXJuIHNjcmF0Y2hCdWZmZXI7Cit9CisKK1BsYXRmb3JtQ29udGV4dCBDb250ZXh0
U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKFBsYXRmb3JtQ29udGV4dCBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGxheWVyQXJlYSkKK3sKKyAgICBkb3VibGUgeDEsIHgyLCB5MSwgeTI7CisgICAg
Y2Fpcm9fY2xpcF9leHRlbnRzKGNvbnRleHQsICZ4MSwgJnkxLCAmeDIsICZ5Mik7CisgICAgY2Fs
Y3VsYXRlTWluaW1hbExheWVyUmVjdChsYXllckFyZWEsIEludFJlY3QoeDEsIHkxLCB4MiAtIHgx
LCB5MiAtIHkxKSk7CisKKyAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90YWxseSBvdXRz
aWRlIHRoZSBjbGlwIHJlZ2lvbi4KKyAgICBpZiAobV9sYXllclJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9IGdldFNjcmF0Y2hCdWZmZXIobV9s
YXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyQ29udGV4dCA9IGNhaXJvX2NyZWF0ZShtX2xh
eWVySW1hZ2UpOworCisgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSBzdXJmYWNlIGZpcnN0LgorICAg
IGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVyQ29udGV4dCwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIp
OworICAgIGNhaXJvX3BhaW50KG1fbGF5ZXJDb250ZXh0KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJBVE9SX09WRVIpOworCisgICAgY2Fpcm9fdHJh
bnNsYXRlKG1fbGF5ZXJDb250ZXh0LCBtX29mZnNldC53aWR0aCgpLCBtX29mZnNldC5oZWlnaHQo
KSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0LCAtbV9sYXllclJlY3QueCgp
LCAtbV9sYXllclJlY3QueSgpKTsKKyAgICByZXR1cm4gbV9sYXllckNvbnRleHQ7Cit9CisKK3Zv
aWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoY2Fpcm9fdCogY3IpCit7CisgICAgY2Fp
cm9fZGVzdHJveShtX2xheWVyQ29udGV4dCk7CisgICAgbV9sYXllckNvbnRleHQgPSAwOworCisg
ICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KQorICAgICAgICBibHVyTGF5ZXJJbWFnZShjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fbGF5ZXJJbWFnZSksCisgICAgICAgICAgICAgICAg
ICAgICAgIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9sYXllckltYWdl
KSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fbGF5ZXJJbWFnZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9sYXllcklt
YWdlKSk7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9y
KGNyLCBtX2NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IsIG1fbGF5ZXJJbWFnZSwg
bV9sYXllclJlY3QueCgpLCBtX2xheWVyUmVjdC55KCkpOworICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OworCisgICAgLy8gU2NoZWR1bGUgYSBwdXJnZSBvZiB0aGUgc2NyYXRjaCBidWZmZXIuIFdlIGRv
IG5vdCBuZWVkIHRvIGRlc3Ryb3kgdGhlIHN1cmZhY2UuCisgICAgc2NoZWR1bGVTY3JhdGNoQnVm
ZmVyUHVyZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
R2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmNwcApyZW5hbWUgdG8g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCmluZGV4
IDgxZTAwZjA4MTVkZTc5MzczNGUxNmI2ZWQ0M2M2MmE0ZmU3ZTAxNTYuLmQ3NjhjZTI1NTc5YTIx
M2QxMmYxNzg3Y2Q4YzJjZDNlZmM4NjVhYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRl
IDxndGsvZ3RrLmg+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
YWlyb1V0aWxpdGllcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9V
dGlsaXRpZXMuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5oCnJlbmFtZSB0byBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oCmluZGV4IDU5NGFiYzBkNGY4MjUz
Nzk2Mjc5NWFiOTg5MDU1MWQxMTAwNTRiODcuLmZmNWIzZWRlZmMxMTFkYjk0NmUzMmFjODFkMGZj
MmEwNTBjZTAyNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nh
aXJvVXRpbGl0aWVzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fp
cm9VdGlsaXRpZXMuaApAQCAtMjMsOSArMjMsOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIENhaXJvVXRpbGl0aWVzX2gKLSNkZWZpbmUgQ2Fpcm9VdGlsaXRpZXNfaAorI2lmbmRl
ZiBHZGtDYWlyb1V0aWxpdGllc19oCisjZGVmaW5lIEdka0NhaXJvVXRpbGl0aWVzX2gKIAogR2Rr
UGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSk7CiAKLSNlbmRpZiAvLyBDYWlyb1V0aWxpdGllc19oCisjZW5kaWYgLy8gR2RrQ2Fpcm9V
dGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VCdWZmZXJHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZm
ZXJHdGsuY3BwCmluZGV4IDgyMWNjMTJjODViN2Y2ZmI3NWQ0MmE3OWFjMThmZmE4NGMwZjNlOGYu
LmVkYjI2ZjBhYjRmNmQzZjYwYzU0NjEwZmM4NGIwNzRlOWJjZmQ3NWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKQEAgLTIxLDcgKzIx
LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0j
aW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5o
IgogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW1hZ2VHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VHdGsuY3BwCmluZGV4IDUyNzIyNDM1MGMxNzQ1ZDRhM2FkMGZmNmM5MWE5M2U3YWI4ZTJlYzcu
LjYyM2FjZTYxMjQ3YjQyNTcxYjFiMTA4Mjg3ZWQyNmI5YTMyMmUxNWEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fp
cm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdPd25QdHJHdGsuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0NvbnRleHRTaGFkb3dRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRl
eHRTaGFkb3dRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJjM2IxOGNiNjQ5NWIzM2Y3OTNjNWU1ZGU5YzA4
YjQ2NzAyYTg5MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvd1F0LmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCisKKyNp
bmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRVGltZXJFdmVudD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBDb250ZXh0U2hhZG93IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUg
YnVmZmVyIGZvciB0aGUgYmx1ciBmaWx0ZXIuCisvLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBk
ZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwKKy8vIHdlIGNyZWF0ZSBh
IGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgor
CitjbGFzcyBTaGFkb3dCdWZmZXI6IHB1YmxpYyBRT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBTaGFk
b3dCdWZmZXIoUU9iamVjdCogcGFyZW50ID0gMCk7CisKKyAgICBRSW1hZ2UqIHNjcmF0Y2hJbWFn
ZShjb25zdCBRU2l6ZSYgc2l6ZSk7CisKKyAgICB2b2lkIHNjaGVkdWxlUHVyZ2UoKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpOworCitwcml2
YXRlOgorICAgIFFJbWFnZSBpbWFnZTsKKyAgICBpbnQgdGltZXJJZDsKK307CisKK1NoYWRvd0J1
ZmZlcjo6U2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50
KQorICAgICwgdGltZXJJZCgwKQoreworfQorCitRSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRj
aEltYWdlKGNvbnN0IFFTaXplJiBzaXplKQoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKKyAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKworICAgIC8vIFdlIGRvIG5vdCBu
ZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Cisg
ICAgLy8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVx
dWVzdGVkIHNpemUgaXMKKyAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1
Y2Ugb3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdpbGwgbm90CisgICAgLy8ga2VlcCB0b28gbWFueSBh
bGxvY2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9uZy4KKyAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYm
IChpbWFnZS53aWR0aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCisg
ICAgICAgIGlmICgoKDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQp
ID4gaW1hZ2UuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICBpbWFnZS5maWxsKFF0Ojp0cmFuc3Bh
cmVudCk7CisgICAgICAgICAgICByZXR1cm4gJmltYWdlOworICAgICAgICB9CisKKyAgICAvLyBS
b3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZl
ciBldmVyeXRpbWUKKyAgICAvLyB0aGVyZSBpcyBsYXJnZXIgcmVxdWVzdCBieSAxIHBpeGVsLgor
ICAgIHdpZHRoID0gKDEgKyAod2lkdGggPj4gNSkpIDw8IDU7CisgICAgaGVpZ2h0ID0gKDEgKyAo
aGVpZ2h0ID4+IDUpKSA8PCA1OworCisgICAgaW1hZ2UgPSBRSW1hZ2Uod2lkdGgsIGhlaWdodCwg
UUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgIGltYWdlLmZpbGwoUXQ6
OnRyYW5zcGFyZW50KTsKKyAgICByZXR1cm4gJmltYWdlOworfQorCit2b2lkIFNoYWRvd0J1ZmZl
cjo6c2NoZWR1bGVQdXJnZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBCdWZmZXJQdXJn
ZURlbGF5ID0gMjsgLy8gc2Vjb25kcworICAgIGtpbGxUaW1lcih0aW1lcklkKTsKKyAgICB0aW1l
cklkID0gc3RhcnRUaW1lcihCdWZmZXJQdXJnZURlbGF5ICogMTAwMCk7Cit9CisKK3ZvaWQgU2hh
ZG93QnVmZmVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZl
bnQtPnRpbWVySWQoKSA9PSB0aW1lcklkKSB7CisgICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsK
KyAgICAgICAgaW1hZ2UgPSBRSW1hZ2UoKTsKKyAgICB9CisgICAgUU9iamVjdDo6dGltZXJFdmVu
dChldmVudCk7Cit9CisKK1FfR0xPQkFMX1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFk
b3dCdWZmZXIpCisKK1BsYXRmb3JtQ29udGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xh
eWVyKFBsYXRmb3JtQ29udGV4dCBwLCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKK3sKKyAg
ICBRUmVjdCBjbGlwUmVjdDsKKyAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKKyNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKKyAgICAgICAgY2xpcFJlY3QgPSBwLT5j
bGlwQm91bmRpbmdSZWN0KCk7CisjZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdp
b24oKS5ib3VuZGluZ1JlY3QoKTsKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgY2xpcFJlY3Qg
PSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOworCisgICAg
Y2FsY3VsYXRlTWluaW1hbExheWVyUmVjdChsYXllckFyZWEsIEludFJlY3QoY2xpcFJlY3QueCgp
LCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKSk7CisK
KyAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJl
Z2lvbi4KKyAgICBpZiAobV9sYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFNoYWRvd0J1ZmZlciogc2hhZG93QnVmZmVyID0gc2NyYXRjaFNoYWRvd0J1ZmZlcigp
OworICAgIFFJbWFnZSogc2hhZG93SW1hZ2UgPSBzaGFkb3dCdWZmZXItPnNjcmF0Y2hJbWFnZSht
X2xheWVyUmVjdC5zaXplKCkpOworICAgIG1fbGF5ZXJJbWFnZSA9IFFJbWFnZSgqc2hhZG93SW1h
Z2UpOworCisgICAgbV9sYXllckNvbnRleHQgPSBuZXcgUVBhaW50ZXI7CisgICAgbV9sYXllckNv
bnRleHQtPmJlZ2luKCZtX2xheWVySW1hZ2UpOworICAgIG1fbGF5ZXJDb250ZXh0LT5zZXRGb250
KHAtPmZvbnQoKSk7CisgICAgbV9sYXllckNvbnRleHQtPnRyYW5zbGF0ZShtX29mZnNldC53aWR0
aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7CisKKyAgICAvLyBUaGUgb3JpZ2luIGlzIG5vdyB0aGUg
dG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JhdGNoIGltYWdlLgorICAgIG1fbGF5ZXJDb250ZXh0
LT50cmFuc2xhdGUoLW1fbGF5ZXJSZWN0LngoKSwgLW1fbGF5ZXJSZWN0LnkoKSk7CisKKyAgICBy
ZXR1cm4gbV9sYXllckNvbnRleHQ7Cit9CisKK3ZvaWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93
TGF5ZXIoUGxhdGZvcm1Db250ZXh0IHApCit7CisgICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwor
ICAgIGRlbGV0ZSBtX2xheWVyQ29udGV4dDsKKyAgICBtX2xheWVyQ29udGV4dCA9IDA7CisKKyAg
ICBpZiAobV90eXBlID09IEJsdXJTaGFkb3cpIHsKKyAgICAgICAgYmx1ckxheWVySW1hZ2UobV9s
YXllckltYWdlLmJpdHMoKSwgSW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllcklt
YWdlLmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVz
UGVyTGluZSgpKTsKKworICAgICAgICAvLyAiQ29sb3JpemUiIHdpdGggdGhlIHJpZ2h0IHNoYWRv
dyBjb2xvci4KKyAgICAgICAgUVBhaW50ZXIgcCgmbV9sYXllckltYWdlKTsKKyAgICAgICAgcC5z
ZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7Cisg
ICAgICAgIHAuZmlsbFJlY3QobV9sYXllckltYWdlLnJlY3QoKSwgbV9jb2xvci5yZ2IoKSk7Cisg
ICAgICAgIHAuZW5kKCk7CisgICAgfQorCisgICAgcC0+ZHJhd0ltYWdlKG1fbGF5ZXJSZWN0LnRv
cExlZnQoKSwgbV9sYXllckltYWdlKTsKKyAgICBzY3JhdGNoU2hhZG93QnVmZmVyKCktPnNjaGVk
dWxlUHVyZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3Bw
CmluZGV4IDJiMjQ2ZGVhZTJmN2FjNjlhODMwZDdiY2M0M2NiYzI4ZWY4NzA2NjkuLmRiOWQ3ZTg0
NDEyOWEzYWMwYmI1YjQ2NGM5ODk5MGVmNzIzZjc1ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTEyNSwzNyArMTI1LDM4IEBAIHN0YXRpYyB2b2lkIGRyYXdU
ZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0CiAKICAgICAgICAgICAgIENvbnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29u
dGV4dFNoYWRvdygpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlICE9IENvbnRl
eHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUg
IT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKICAgICAgICAgICAgICAgICBxcmVhbCBkeDEg
PSAwLCBkeDIgPSAwLCBkeTEgPSAwLCBkeTIgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPm9mZnNldC54KCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBkeDIgPSBjdHhTaGFk
b3ctPm9mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0KCku
eCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hhZG93LT5vZmZzZXQoKS54
KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkeDEgPSAtY3R4
U2hhZG93LT5vZmZzZXQueCgpOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNl
dC55KCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBkeTIgPSBjdHhTaGFkb3ctPm9mZnNldC55
KCk7CisgICAgICAgICAgICAgICAgICAgIGR4MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgpLngoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS55KCkgPiAwKQorICAgICAg
ICAgICAgICAgICAgICBkeTIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm9mZnNldC55
KCk7CisgICAgICAgICAgICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsK
ICAgICAgICAgICAgICAgICAvLyBleHBhbmQgdGhlIGNsaXAgcmVjdCB0byBpbmNsdWRlIHRoZSB0
ZXh0IHNoYWRvdyBhcyB3ZWxsCiAgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoZHgxLCBkeDIs
IGR5MSwgZHkyKTsKLSAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgtY3R4U2hhZG93LT5ibHVy
UmFkaXVzLCAtY3R4U2hhZG93LT5ibHVyUmFkaXVzLCBjdHhTaGFkb3ctPmJsdXJSYWRpdXMsIGN0
eFNoYWRvdy0+Ymx1clJhZGl1cyk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWN0eFNo
YWRvdy0+bV9ibHVyUmFkaXVzLCAtY3R4U2hhZG93LT5tX2JsdXJSYWRpdXMsIGN0eFNoYWRvdy0+
bV9ibHVyUmFkaXVzLCBjdHhTaGFkb3ctPm1fYmx1clJhZGl1cyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwLT5zYXZlKCk7CiAgICAgICAgICAgICBwLT5zZXRDbGlwUmVjdChjbGlwLnRv
UmVjdCgpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiAgICAgICAgICAgICBwdC5zZXRZKHB0LnkoKSAt
IGFzY2VudCk7CiAKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUgIT0gQ29udGV4dFNo
YWRvdzo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBD
b250ZXh0U2hhZG93OjpOb1NoYWRvdykgewogICAgICAgICAgICAgICAgIENvbnRleHRTaGFkb3cq
IGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotICAgICAgICAgICAgICAgIGlmIChj
dHhTaGFkb3ctPnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAgICAgICAg
ICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93
KSB7CiAgICAgICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
cC0+c2V0UGVuKGN0eFNoYWRvdy0+Y29sb3IpOwotICAgICAgICAgICAgICAgICAgICBwLT50cmFu
c2xhdGUoY3R4U2hhZG93LT5vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4o
Y3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0
eFNoYWRvdy0+b2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQp
OwogICAgICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhT
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgYm91bmRpbmdSZWN0KTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNp
bmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVy
IGhpbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0
eFNoYWRvdy0+Y29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
c2V0Rm9udChwLT5mb250KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3R4
U2hhZG93LT5lbmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgx
LDEyICsxODIsMTIgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0
KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICBpZiAoIWlzQ29tcGxl
eFRleHQgJiYgIShjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgY1RleHRTdHJva2UpKQogICAgICAg
ICBmbGFncyB8PSBRdDo6VGV4dEJ5cGFzc1NoYXBpbmc7CiAjZW5kaWYKLSAgICBpZiAoY3R4LT5j
b250ZXh0U2hhZG93KCktPnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICBp
ZiAoY3R4LT5jb250ZXh0U2hhZG93KCktPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRv
dykgewogICAgICAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFk
b3coKTsKLSAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVy
U2hhZG93KSB7CisgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93
OjpCbHVyU2hhZG93KSB7CiAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgICAgICBwLT5z
ZXRQZW4oY3R4U2hhZG93LT5jb2xvcik7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hh
ZG93LT5vZmZzZXQpOworICAgICAgICAgICAgcC0+c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7
CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7CiAgICAgICAg
ICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLnBhZGRpbmcoKSk7CiAgICAg
ICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTYsNyArMTk3LDcg
QEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVy
KSB7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwg
d2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnNldFBlbihjdHhTaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLnBhZGRpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKaW5kZXggYzljNzRkZDhiNmI1NGQyM2QzMzc1NDE5OTk5OWI5NDZhNTg2MjhhOC4uMTA3MDBh
ZDVlZmUzNjNmOWRhYzJhNDI1ZWM3Yjc5Yjc0YzQwNjMwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTIwNiw3ICsyMDYs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gc2hhZG93LnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3c7CisgICAgICAg
IHJldHVybiBzaGFkb3cubV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93OwogICAgIH0K
IAogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29uc3QKQEAgLTQ0Niw5ICs0NDYsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGlu
dCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcAogCiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkp
IHsKICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFk
b3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgp
KTsKICAgICAgICAgUVBlbiBwZW4ocC0+cGVuKCkpOwotICAgICAgICBwZW4uc2V0Q29sb3IobV9k
YXRhLT5zaGFkb3cuY29sb3IpOworICAgICAgICBwZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFkb3cu
bV9jb2xvcik7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICBwLT5kcmF3QXJjKHJl
Y3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3Bhbik7CiAgICAgICAgIHAtPnJlc3RvcmUoKTsKQEAgLTQ3
NiwxMiArNDc2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzCiAgICAgcC0+c2V0UmVuZGVy
SGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBzaG91bGRBbnRpYWxpYXMpOwogICAgIGlmICht
X2RhdGEtPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgcC0+dHJh
bnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5zbGF0ZShtX2Rh
dGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgICAgIGlmIChwLT5icnVzaCgpLnN0eWxlKCkgIT0g
UXQ6Ok5vQnJ1c2gpCi0gICAgICAgICAgICBwLT5zZXRCcnVzaChRQnJ1c2gobV9kYXRhLT5zaGFk
b3cuY29sb3IpKTsKKyAgICAgICAgICAgIHAtPnNldEJydXNoKFFCcnVzaChtX2RhdGEtPnNoYWRv
dy5tX2NvbG9yKSk7CiAgICAgICAgIFFQZW4gcGVuKHAtPnBlbigpKTsKICAgICAgICAgaWYgKHBl
bi5zdHlsZSgpICE9IFF0OjpOb1BlbikgewotICAgICAgICAgICAgcGVuLnNldENvbG9yKG1fZGF0
YS0+c2hhZG93LmNvbG9yKTsKKyAgICAgICAgICAgIHBlbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRv
dy5tX2NvbG9yKTsKICAgICAgICAgICAgIHAtPnNldFBlbihwZW4pOwogICAgICAgICB9CiAgICAg
ICAgIHAtPmRyYXdDb252ZXhQb2x5Z29uKHBvbHlnb24pOwpAQCAtNTI1LDkgKzUyNSw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgcGF0aC5zZXRGaWxsUnVsZSh0b1F0
RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsK
LSAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCk7Ci0gICAgICAgIHAt
PmZpbGxQYXRoKHBhdGgsIG1fZGF0YS0+c2hhZG93LmNvbG9yKTsKLSAgICAgICAgcC0+dHJhbnNs
YXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRh
LT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQ29sb3IobV9k
YXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICBwLT50cmFuc2xhdGUoLW1fZGF0YS0+c2hh
ZG93Lm9mZnNldCgpKTsKICAgICB9CiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwpAQCAtNTUzLDExICs1NTMsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogICAgIHBhdGguc2V0RmlsbFJ1
bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRv
dygpKSB7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAg
ICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAgICAgICBRUGVu
IHNoYWRvd1BlbihwZW4pOwotICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFk
b3cuY29sb3IpOworICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFkb3cubV9j
b2xvcik7CiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgc2hhZG93UGVuKTsKLSAgICAgICAg
cC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAgICAgICBwLT50cmFuc2xh
dGUoLW1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKICAgICB9CiAgICAgaWYgKG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CkBA
IC02NTksNyArNjU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAg
IGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1BhaW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwg
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPmNv
bG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0
LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihw
KTsKICAgICAgICAgfQogICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFnZSwgbm9ybWFs
aXplZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX2NvbW1v
bi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CkBAIC02NzAsMTMgKzY3MCwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+Zmls
bFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsK
LSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFk
b3ctPmNvbG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6
ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dM
YXllcihwKTsKICAgICAgICAgfQogICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwg
YnJ1c2gpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7
Ci0gICAgICAgICAgICBpZiAoc2hhZG93LT50eXBlID09IENvbnRleHRTaGFkb3c6OkJsdXJTaGFk
b3cpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSA9PSBDb250ZXh0U2hhZG93OjpC
bHVyU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJlY3QpOwogICAgICAgICAgICAg
ICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKQEAgLTY4NSw5ICs2ODUs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTb2xpZCByZWN0YW5n
bGUgZmlsbCB3aXRoIG5vIGJsdXIgc2hhZG93IGNhbiBiZSBkb25lIGZhc3RlcgogICAgICAgICAg
ICAgICAgIC8vIHdpdGhvdXQgdXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBhbGwuCi0gICAgICAg
ICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcjsKKyAgICAgICAgICAg
ICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7CiAgICAgICAgICAgICAg
ICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2go
KS5jb2xvcigpLmFscGhhRigpKTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KSwgc2hhZG93Q29sb3IpOworICAgICAg
ICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5v
ZmZzZXQoKSksIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgcC0+YnJ1c2goKSk7CkBAIC03MDcsMTQgKzcw
NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRv
dygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsK
IAotICAgICAgICBpZiAoc2hhZG93LT50eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cp
IHsKKyAgICAgICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFk
b3cpIHsKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIGFueSBsYXllciBmb3Igc2ltcGxl
IHNoYWRvdy4KLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0
ZWQoc2hhZG93LT5vZmZzZXQpLCBzaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgIHAtPmZpbGxS
ZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNoYWRvdy0+
bV9jb2xvcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihwLCBub3JtYWxpemVkUmVjdCk7CiAg
ICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJj
ZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJl
Y3QsIHNoYWRvdy0+Y29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxS
ZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgICAgIHNo
YWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTcz
MSw5ICs3MzEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIFBhdGggcGF0aCA9IFBh
dGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogICAg
IGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEt
PnNoYWRvdy5vZmZzZXQpOwotICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgp
LCBtX2RhdGEtPnNoYWRvdy5jb2xvcik7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5z
aGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNl
dCgpKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1f
ZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNo
YWRvdy5vZmZzZXQoKSk7CiAgICAgfQogICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRo
KCksIFFDb2xvcihjb2xvcikpOwogfQpAQCAtODkwLDkgKzg5MCw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJs
dXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQg
aXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAogICAgICAgICAvLyBX
ZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRl
IFkgYXhpcwogICAgICAgICBtX2NvbW1vbi0+c3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXpl
KHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9
IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
OworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZs
b2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRT
aGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
KTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67804</attachid>
            <date>2010-09-16 09:26:48 -0700</date>
            <delta_ts>2010-09-22 11:27:06 -0700</delta_ts>
            <desc>Patch with Alex&apos;s suggestions</desc>
            <filename>bug-45599-20100916092647.patch</filename>
            <type>text/plain</type>
            <size>47617</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDJiNGYwYjE3ZTk0ODM2MDNjMjUxYzg4MjM2ZDRkZTViNTczNjU2NS4uYmUxYWUxYTQ4YzAxOTU2
YzA3YTUxZGM5MjJkZDQzOWI4OTE4OTJmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOS0xNSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0NhaXJvXSBHZW5lcmFsaXplIENvbnRleHRT
aGFkb3cgZnJvbSB0aGUgUXQgcG9ydCBhbmQgdXNlIGl0IGZvciBzaGFkb3cgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1OTkKKworICAgICAg
ICBNYWtlIENvbnRleHRTaGFkb3cgcGxhdGZvcm0taW5kZXBlbmRlbnQgYW5kIGFkZCBhIENhaXJv
IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGN1cnJlbnRseQorICAgICAgICBkaXNhYmxlZCBmb3Ig
Q2Fpcm8sIGJ1dCB3aWxsIGJlIGVuYWJsZWQgaW4gYSBmb2xsb3d1cCBwYXRjaCB3aXRoIG5ldyBi
YXNlbGluZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgZG9lcyBub3QgY2hhbmdl
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogVXBkYXRlIHNvdXJj
ZSBsaXN0cy4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogVXBkYXRlIHNvdXJjZSBsaXN0cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcDogQWRkZWQuIEEgZ2Vu
ZXJhbGl6ZWQgdmVyc2lvbiBvZiBRdCdzIENvbnRleHRTaGFkb3cuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRTaGFkb3c6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmJsdXJM
YXllckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZU1p
bmltYWxMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFk
b3cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpvZmZzZXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcDogQWRk
ZWQuIAorICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlUkdCQUZyb21Db2xvcik6IEEgdXRpbGl0
eSB0byBzZXQgdGhlIHNvdXJjZSBSR0JBIG9uIGEgQ2Fpcm8gc3VyZmFjZSBmcm9tIGEgV2ViQ29y
ZSBjb2xvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hh
ZG93Q2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnB1cmdlU2NyYXRjaEJ1ZmZl
cik6IFN0YXRpYyBmdW5jdGlvbiB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOjpmaXJlZCk6IFRpbWVyIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6c2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UpOiBTY2hlZHVs
ZSdzIGEgV2ViQ29yZSB0aW1lciB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OmdldFNjcmF0Y2hCdWZmZXIpOiBDcmVhdGUgb3IgcmV1c2UgdGhlIHNjcmF0Y2gg
YnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXll
cik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5
ZXIpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRp
ZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0
aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtD
YWlyb1V0aWxpdGllcy5jcHA6IFJlbmFtZWQgZnJvbSBDYWlyb1V0aWxpdGllcy5jcHAuCisgICAg
ICAgIChnZXRDYWlyb1N1cmZhY2VQaXhlbCk6CisgICAgICAgIChnZXRHZGtQaXhidWZQaXhlbCk6
CisgICAgICAgIChjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwOiBBZGRlZC4gQWRhcHRlZCBmcm9tIGNvZGUg
b3JpZ2luYWxseSBpbiBDb250ZXh0U2hhZG93LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0J1ZmZlcjo6U2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6
c2NyYXRjaEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6c2NoZWR1bGVQ
dXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0
Q29tbW9uKTogVXBkYXRlZCB0byByZWZsZWN0IG5ldyBDb250ZXh0U2hhZG93IG1lbWJlcnMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoYXNTaGFkb3cp
OiBVcGRhdGVkIHRvIHJlZmxlY3QgbmV3IENvbnRleHRTaGFkb3cgbWVtYmVycy4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KTogRGl0dG8uCisK
IDIwMTAtMDktMTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IGNocm9taXVtIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNjIzMDEyNjAxNTQyN2RmNjhjM2Y1
ZmEyNGQ0Zjc2YWU4MDY0NDdiYi4uNTIxNDhlNDJkZjAxMGVkOGY4YjY2NWU2ZmRkNjEzZjUwMjAz
MTQ0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0yMDc5LDYgKzIwNzksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFj
ZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oIFwKQEAgLTMzNDMsNyArMzM0NSwxMCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNw
cCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udFBsYXRmb3JtRGF0YS5oIFwKQEAgLTMzNzYsOCAr
MzM4MSw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5o
IFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAgXAot
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmggXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
SWNvbkd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggYzM4NGYzMzgwMmRmNmIwMjNjNWM0MmFiMGU4YzMyZTRiYTIyNDg3
NS4uYjExZGMwNmVhM2IwNmY4OTg4Nzc2NzRkMTEzMDFmMTkyOWVkYzZlNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDk0LDYg
KzEwOTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRT
aGFkb3cuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcCBcCkBAIC0xOTc0LDYgKzE5NzUsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmggXApAQCAtMjAwNyw3ICsyMDA5LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGVuLmggXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNv
ZGVyUXQuaCBcCkBAIC0yNTI4LDcgKzI1MjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0
L0ZyYW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1h
dHJpeFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCnNpbWlsYXJpdHkg
aW5kZXggNTAlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4
dFNoYWRvdy5jcHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNo
YWRvdy5jcHAKaW5kZXggNDYwOTkyM2RhZGM1Njg4MWRmMTJmM2M5NzNjYTk5MTU1YzAwNzRlZi4u
NmVkY2RiYWQyNzk4Njg0ZTk4M2ViOTUwNzYwM2MwMjQ4NzJhODIzNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93LmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjgsMTE1
ICsyOSw1MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cu
aCIKIAotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFz
IHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcg
YW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3Jl
YXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGlt
ZXIuCi0KLWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAg
IFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRj
aEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0K
LXByaXZhdGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hh
ZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChw
YXJlbnQpCi0gICAgLCB0aW1lcklkKDApCi17Ci19Ci0KLVFJbWFnZSogU2hhZG93QnVmZmVyOjpz
Y3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpCi17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotCi0gICAgLy8gV2UgZG8g
bm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVmZmVyIGlzIHJlYXNvbmFi
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuIEhvd2V2ZXIsIGlmIHRo
ZSByZXF1ZXN0ZWQgc2l6ZSBpcwotICAgIC8vIG11Y2ggc21hbGxlciB0aGFuIG91ciBidWZmZXIs
IHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKLSAgICAvLyBrZWVwIHRvbyBt
YW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgotICAgIGlmICghaW1hZ2UuaXNOdWxs
KCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkgJiYgKGltYWdlLmhlaWdodCgpID4gaGVpZ2h0
KSkKLSAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+IGltYWdlLndpZHRoKCkpICYmICgoMiAqIGhl
aWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKLSAgICAgICAgICAgIGltYWdlLmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKLSAgICAgICAgICAgIHJldHVybiAmaW1hZ2U7Ci0gICAgICAgIH0KLQotICAg
IC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUg
YnVmZmVyIGV2ZXJ5dGltZQotICAgIC8vIHRoZXJlIGlzIGxhcmdlciByZXF1ZXN0IGJ5IDEgcGl4
ZWwuCi0gICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKLSAgICBoZWlnaHQgPSAo
MSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICBpbWFnZSA9IFFJbWFnZSh3aWR0aCwgaGVp
Z2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7Ci0gICAgaW1hZ2UuZmls
bChRdDo6dHJhbnNwYXJlbnQpOwotICAgIHJldHVybiAmaW1hZ2U7Ci19Ci0KLXZvaWQgU2hhZG93
QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZl
clB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAg
IHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9p
ZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlm
IChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVy
SWQpOwotICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1l
ckV2ZW50KGV2ZW50KTsKLX0KK3VzaW5nIFdURjo6bWluOwordXNpbmcgV1RGOjptYXg7CiAKLVFf
R0xPQkFMX1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFkb3dCdWZmZXIpCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIENvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3coKQotICAgIDogdHlw
ZShOb1NoYWRvdykKLSAgICAsIGJsdXJSYWRpdXMoMCkKKyAgICA6IG1fdHlwZShOb1NoYWRvdykK
KyAgICAsIG1fYmx1clJhZGl1cygwKQogewogfQogCi1Db250ZXh0U2hhZG93OjpDb250ZXh0U2hh
ZG93KGNvbnN0IFFDb2xvciYgYywgZmxvYXQgciwgcXJlYWwgZHgsIHFyZWFsIGR5KQotICAgIDog
Y29sb3IoYykKLSAgICAsIGJsdXJSYWRpdXMocVJvdW5kKHIpKQotICAgICwgb2Zmc2V0KGR4LCBk
eSkKK0NvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3coY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgIDogbV9jb2xvcihjb2xvcikK
KyAgICAsIG1fYmx1clJhZGl1cyhyb3VuZChyYWRpdXMpKQorICAgICwgbV9vZmZzZXQob2Zmc2V0
KQogeworICAgIC8vIFNlZSBjb21tZW50cyBpbiBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNzkzLCBp
dCBzZWVtcyBzZW5zaWJsZQorICAgIC8vIHRvIGZvbGxvdyBTa2lhJ3MgbGltaXQgb2YgMTI4IHBp
eGVscyBvZiBibHVyIHJhZGl1cworICAgIG1fYmx1clJhZGl1cyA9IG1pbihtX2JsdXJSYWRpdXMs
IDEyOCk7CisKICAgICAvLyBUaGUgdHlwZSBvZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUgYmx1
ciByYWRpdXMsIHNoYWRvdyBvZmZzZXQsIGFuZCBzaGFkb3cgY29sb3IuCi0gICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpIHsKKyAgICBpZiAoIW1fY29sb3IuaXNWYWxp
ZCgpKSB7CiAgICAgICAgIC8vIENhbid0IHBhaW50IHRoZSBzaGFkb3cgd2l0aCBpbnZhbGlkIG9y
IGludmlzaWJsZSBjb2xvci4KLSAgICAgICAgdHlwZSA9IE5vU2hhZG93OwotICAgIH0gZWxzZSBp
ZiAociA+IDApIHsKKyAgICAgICAgbV90eXBlID0gTm9TaGFkb3c7CisgICAgfSBlbHNlIGlmIChy
YWRpdXMgPiAwKSB7CiAgICAgICAgIC8vIFNoYWRvdyBpcyBhbHdheXMgYmx1cnJlZCwgZXZlbiB0
aGUgb2Zmc2V0IGlzIHplcm8uCi0gICAgICAgIHR5cGUgPSBCbHVyU2hhZG93OwotICAgIH0gZWxz
ZSBpZiAob2Zmc2V0LmlzTnVsbCgpKSB7CisgICAgICAgIG1fdHlwZSA9IEJsdXJTaGFkb3c7Cisg
ICAgfSBlbHNlIGlmICghbV9vZmZzZXQud2lkdGgoKSAmJiAhbV9vZmZzZXQuaGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gV2l0aG91dCBibHVyIGFuZCB6ZXJvIG9mZnNldCBtZWFucyB0aGUgc2hhZG93
IGlzIGZ1bGx5IGhpZGRlbi4KLSAgICAgICAgdHlwZSA9IE5vU2hhZG93OworICAgICAgICBtX3R5
cGUgPSBOb1NoYWRvdzsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA+
IDApCi0gICAgICAgICAgICB0eXBlID0gQWxwaGFTb2xpZFNoYWRvdzsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdHlwZSA9IE9wYXF1ZVNvbGlkU2hhZG93OworICAgICAgICBtX3R5cGUgPSBT
b2xpZFNoYWRvdzsKICAgICB9CiB9CiAKIHZvaWQgQ29udGV4dFNoYWRvdzo6Y2xlYXIoKQogewot
ICAgIHR5cGUgPSBOb1NoYWRvdzsKLSAgICBjb2xvciA9IFFDb2xvcigpOwotICAgIGJsdXJSYWRp
dXMgPSAwOwotICAgIG9mZnNldCA9IFFQb2ludEYoMCwgMCk7CisgICAgbV90eXBlID0gTm9TaGFk
b3c7CisgICAgbV9jb2xvciA9IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gMDsKKyAgICBt
X29mZnNldCA9IEZsb2F0U2l6ZSgwLCAwKTsKIH0KIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2VyIGRp
dmlzaW9uLCB3ZSB1c2UgMTcuMTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgpAQCAtMTQ2LDI3
ICs4MywyMiBAQCBzdGF0aWMgY29uc3QgaW50IEJsdXJTdW1TaGlmdCA9IDE1OwogLy8gQXMgbm90
ZWQgaW4gdGhlIFNWRyBmaWx0ZXIgc3BlY2lmaWNhdGlvbiwgcnVubmluZyBib3ggYmx1ciAzeAog
Ly8gYXBwcm94aW1hdGVzIGEgcmVhbCBnYXVzc2lhbiBibHVyIG5pY2VseS4KIAotdm9pZCBzaGFk
b3dCbHVyKFFJbWFnZSYgaW1hZ2UsIGludCByYWRpdXMsIGNvbnN0IFFDb2xvciYgc2hhZG93Q29s
b3IpCit2b2lkIENvbnRleHRTaGFkb3c6OmJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqIGlt
YWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHJvd1N0cmlkZSkKIHsKLSAgICAvLyBT
ZWUgY29tbWVudHMgaW4gaHR0cDovL3dlYmtpdC5vcmcvYi80MDc5MywgaXQgc2VlbXMgc2Vuc2li
bGUKLSAgICAvLyB0byBmb2xsb3cgU2tpYSdzIGxpbWl0IG9mIDEyOCBwaXhlbHMgZm9yIHRoZSBi
bHVyIHJhZGl1cy4KLSAgICBpZiAocmFkaXVzID4gMTI4KQotICAgICAgICByYWRpdXMgPSAxMjg7
Ci0KICAgICBpbnQgY2hhbm5lbHNbNF0gPSB7IDMsIDAsIDEsIDMgfTsKLSAgICBpbnQgZG1heCA9
IHJhZGl1cyA+PiAxOwotICAgIGludCBkbWluID0gZG1heCAtIDEgKyAocmFkaXVzICYgMSk7Cisg
ICAgaW50IGRtYXggPSBtX2JsdXJSYWRpdXMgPj4gMTsKKyAgICBpbnQgZG1pbiA9IGRtYXggLSAx
ICsgKG1fYmx1clJhZGl1cyAmIDEpOwogICAgIGlmIChkbWluIDwgMCkKICAgICAgICAgZG1pbiA9
IDA7CiAKICAgICAvLyBUd28gc3RhZ2VzOiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogICAgIGZv
ciAoaW50IGsgPSAwOyBrIDwgMjsgKytrKSB7CiAKLSAgICAgICAgdW5zaWduZWQgY2hhciogcGl4
ZWxzID0gaW1hZ2UuYml0cygpOwotICAgICAgICBpbnQgc3RyaWRlID0gKCFrKSA/IDQgOiBpbWFn
ZS5ieXRlc1BlckxpbmUoKTsKLSAgICAgICAgaW50IGRlbHRhID0gKCFrKSA/IGltYWdlLmJ5dGVz
UGVyTGluZSgpIDogNDsKLSAgICAgICAgaW50IGpmaW5hbCA9ICghaykgPyBpbWFnZS5oZWlnaHQo
KSA6IGltYWdlLndpZHRoKCk7Ci0gICAgICAgIGludCBkaW0gPSAoIWspID8gaW1hZ2Uud2lkdGgo
KSA6IGltYWdlLmhlaWdodCgpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFn
ZURhdGE7CisgICAgICAgIGludCBzdHJpZGUgPSAoIWspID8gNCA6IHJvd1N0cmlkZTsKKyAgICAg
ICAgaW50IGRlbHRhID0gKCFrKSA/IHJvd1N0cmlkZSA6IDQ7CisgICAgICAgIGludCBqZmluYWwg
PSAoIWspID8gc2l6ZS5oZWlnaHQoKSA6IHNpemUud2lkdGgoKTsKKyAgICAgICAgaW50IGRpbSA9
ICghaykgPyBzaXplLndpZHRoKCkgOiBzaXplLmhlaWdodCgpOwogCiAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgamZpbmFsOyArK2osIHBpeGVscyArPSBkZWx0YSkgewogCkBAIC0yMTMsNzQg
KzE0NSwzMSBAQCB2b2lkIHNoYWRvd0JsdXIoUUltYWdlJiBpbWFnZSwgaW50IHJhZGl1cywgY29u
c3QgUUNvbG9yJiBzaGFkb3dDb2xvcikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LQotICAgIC8vICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgIFFQ
YWludGVyIHAoJmltYWdlKTsKLSAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICBwLmZpbGxSZWN0KGltYWdlLnJlY3QoKSwgc2hh
ZG93Q29sb3IucmdiKCkpOwotICAgIHAuZW5kKCk7CiB9CiAKLVFQYWludGVyKiBDb250ZXh0U2hh
ZG93OjpiZWdpblNoYWRvd0xheWVyKFFQYWludGVyKiBwLCBjb25zdCBRUmVjdEYgJnJlY3QpCit2
b2lkIENvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIC8vIFdlIGV4
cGFuZCB0aGUgYXJlYSBieSB0aGUgYmx1ciByYWRpdXMgKiAyIHRvIGdpdmUgZXh0cmEgc3BhY2UK
LSAgICAvLyBmb3IgdGhlIGJsdXIgdHJhbnNpdGlvbi4KLSAgICBpbnQgZXh0cmEgPSAodHlwZSA9
PSBCbHVyU2hhZG93KSA/IGJsdXJSYWRpdXMgKiAyIDogMDsKLQotICAgIFFSZWN0RiBzaGFkb3dS
ZWN0ID0gcmVjdC50cmFuc2xhdGVkKG9mZnNldCk7Ci0gICAgUVJlY3RGIGJ1ZmZlclJlY3QgPSBz
aGFkb3dSZWN0LmFkanVzdGVkKC1leHRyYSwgLWV4dHJhLCBleHRyYSwgZXh0cmEpOwotICAgIG1f
bGF5ZXJSZWN0ID0gYnVmZmVyUmVjdC50b0FsaWduZWRSZWN0KCk7CisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmx1cnJlZCBsYXllci4KKyAgICBGbG9hdFJlY3QgZGVz
dGluYXRpb25SZWN0KGxheWVyQXJlYSk7CisgICAgZGVzdGluYXRpb25SZWN0Lm1vdmUobV9vZmZz
ZXQpOworICAgIG1fbGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkZXN0aW5hdGlvblJlY3Qp
OwogCi0gICAgUVJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCi0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCi0gICAgICAgIGNsaXBSZWN0
ID0gcC0+Y2xpcEJvdW5kaW5nUmVjdCgpOwotI2Vsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5j
bGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7Ci0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIGNs
aXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsK
KyAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzICogMiB0byBnaXZl
IGV4dHJhIHNwYWNlIGZvciB0aGUgYmx1ciB0cmFuc2l0aW9uLgorICAgIG1fbGF5ZXJSZWN0Lmlu
ZmxhdGUoKG1fdHlwZSA9PSBCbHVyU2hhZG93KSA/IGNlaWwobV9ibHVyUmFkaXVzICogMikgOiAw
KTsKIAogICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMobV9sYXllclJlY3QpKSB7Ci0KICAgICAg
ICAgLy8gTm8gbmVlZCB0byBoYXZlIHRoZSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIGNsaXAuCi0g
ICAgICAgIG1fbGF5ZXJSZWN0ID0gbV9sYXllclJlY3QuaW50ZXJzZWN0ZWQoY2xpcFJlY3QpOwor
ICAgICAgICBtX2xheWVyUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOworCisgICAgICAgIC8vIElm
IHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLCB3ZSBhcmVuJ3QgcGFpbnRp
bmcgYXQgYWxsLgogICAgICAgICBpZiAobV9sYXllclJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gV2UgYWRqdXN0
IGFnYWluIGJlY2F1c2UgdGhlIHBpeGVscyBhdCB0aGUgYm9yZGVycyBhcmUgc3RpbGwKICAgICAg
ICAgLy8gcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBpeGVscyBvdXRzaWRlIHRoZSBidWZm
ZXIuCi0gICAgICAgIGlmICh0eXBlID09IEJsdXJTaGFkb3cpCi0gICAgICAgICAgICBtX2xheWVy
UmVjdC5hZGp1c3QoLWV4dHJhLCAtZXh0cmEsIGV4dHJhLCBleHRyYSk7CisgICAgICAgIGlmICht
X3R5cGUgPT0gQmx1clNoYWRvdykKKyAgICAgICAgICAgIG1fbGF5ZXJSZWN0LmluZmxhdGUoKG1f
dHlwZSA9PSBCbHVyU2hhZG93KSA/IGNlaWwobV9ibHVyUmFkaXVzICogMikgOiAwKTsKICAgICB9
Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dCdWZmZXIo
KTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5zY3JhdGNoSW1hZ2Uo
bV9sYXllclJlY3Quc2l6ZSgpKTsKLSAgICBtX2xheWVySW1hZ2UgPSBRSW1hZ2UoKnNoYWRvd0lt
YWdlKTsKLQotICAgIG1fbGF5ZXJQYWludGVyID0gbmV3IFFQYWludGVyOwotICAgIG1fbGF5ZXJQ
YWludGVyLT5iZWdpbigmbV9sYXllckltYWdlKTsKLSAgICBtX2xheWVyUGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgIG1fbGF5ZXJQYWludGVyLT50cmFuc2xhdGUob2Zmc2V0KTsKLQot
ICAgIC8vIFRoZSBvcmlnaW4gaXMgbm93IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHNjcmF0
Y2ggaW1hZ2UuCi0gICAgbV9sYXllclBhaW50ZXItPnRyYW5zbGF0ZSgtbV9sYXllclJlY3QudG9w
TGVmdCgpKTsKLQotICAgIHJldHVybiBtX2xheWVyUGFpbnRlcjsKIH0KIAotdm9pZCBDb250ZXh0
U2hhZG93OjplbmRTaGFkb3dMYXllcihRUGFpbnRlciogcCkKLXsKLSAgICBtX2xheWVyUGFpbnRl
ci0+ZW5kKCk7Ci0gICAgZGVsZXRlIG1fbGF5ZXJQYWludGVyOwotICAgIG1fbGF5ZXJQYWludGVy
ID0gMDsKLQotICAgIGlmICh0eXBlID09IEJsdXJTaGFkb3cpCi0gICAgICAgIHNoYWRvd0JsdXIo
bV9sYXllckltYWdlLCBibHVyUmFkaXVzLCBjb2xvcik7Ci0KLSAgICBwLT5kcmF3SW1hZ2UobV9s
YXllclJlY3QudG9wTGVmdCgpLCBtX2xheWVySW1hZ2UpOwotCi0gICAgc2NyYXRjaFNoYWRvd0J1
ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmgKc2ltaWxhcml0eSBp
bmRleCA1NCUKcmVuYW1lIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0
U2hhZG93LmgKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRv
dy5oCmluZGV4IDcxNDAzNDBkNzhlNGQ0ODI0OGNmMDFjZjczNmZkMmIxZDA1YTkxZDcuLjMzZGE4
NmVmNzc4YmE0MmQ0MDNmOTkyMWQ4ODRlMDFiMjY4MjlkMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvdy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjgsNyArMjksMjIgQEAK
ICNpZm5kZWYgQ29udGV4dFNoYWRvd19oCiAjZGVmaW5lIENvbnRleHRTaGFkb3dfaAogCi0jaW5j
bHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorCisjaWYg
UExBVEZPUk0oQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKK3R5cGVkZWYg
c3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKK3R5cGVkZWYgY2Fpcm9fc3Vy
ZmFjZV90KiBQbGF0Zm9ybUltYWdlOwordHlwZWRlZiBjYWlyb190KiBQbGF0Zm9ybUNvbnRleHQ7
CisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRSW1hZ2U+CitjbGFzcyBRUGFpbnRlcjsK
K3R5cGVkZWYgUUltYWdlIFBsYXRmb3JtSW1hZ2U7Cit0eXBlZGVmIFFQYWludGVyKiBQbGF0Zm9y
bUNvbnRleHQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw0OSArNjAs
NTcgQEAgY2xhc3MgQ29udGV4dFNoYWRvdyB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAg
IE5vU2hhZG93LAotICAgICAgICBPcGFxdWVTb2xpZFNoYWRvdywKLSAgICAgICAgQWxwaGFTb2xp
ZFNoYWRvdywKKyAgICAgICAgU29saWRTaGFkb3csCiAgICAgICAgIEJsdXJTaGFkb3cKLSAgICB9
IHR5cGU7CisgICAgfSBtX3R5cGU7CiAKLSAgICBRQ29sb3IgY29sb3I7Ci0gICAgaW50IGJsdXJS
YWRpdXM7Ci0gICAgUVBvaW50RiBvZmZzZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBpbnQg
bV9ibHVyUmFkaXVzOworICAgIEZsb2F0U2l6ZSBtX29mZnNldDsKIAogICAgIENvbnRleHRTaGFk
b3coKTsKLSAgICBDb250ZXh0U2hhZG93KGNvbnN0IFFDb2xvciYgYywgZmxvYXQgciwgcXJlYWwg
ZHgsIHFyZWFsIGR5KTsKKyAgICBDb250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiwgZmxvYXQgcmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICAvLyBUaGUgcGFpciBiZWdpblNoYWRvd0xheWVyIGFuZCBlbmRTaGFkb3dMYXllciBjcmVhdGVz
IGEgdGVtcG9yYXJ5IGltYWdlCi0gICAgLy8gd2hlcmUgdGhlIGNhbGxlciBjYW4gZHJhdyBvbnRv
LCB1c2luZyB0aGUgcmV0dXJuZWQgUVBhaW50ZXIuIFRoaXMKLSAgICAvLyBRUGFpbnRlciBpbnN0
YW5jZSBtdXN0IGJlIHVzZWQgb25seSB0byBkcmF3IGJldHdlZW4gdGhlIGNhbGwgdG8KLSAgICAv
LyBiZWdpblNoYWRvd0xheWVyIGFuZCBlbmRTaGFkb3dMYXllci4KKyAgICAvLyB3aGVyZSB0aGUg
Y2FsbGVyIGNhbiBkcmF3IG9udG8sIHVzaW5nIHRoZSByZXR1cm5lZCBjb250ZXh0LiBUaGlzIGNv
bnRleHQKKyAgICAvLyBtdXN0IGJlIHVzZWQgb25seSB0byBkcmF3IGJldHdlZW4gdGhlIGNhbGwg
dG8gYmVnaW5TaGFkb3dMYXllciBhbmQKKyAgICAvLyBlbmRTaGFkb3dMYXllci4KICAgICAvLwot
ICAgIC8vIE5vdGU6IG11bHRpcGxlL25lc3RlZCBzaGFkb3cgbGF5ZXIgaXMgTk9UIGFsbG93ZWQu
CisgICAgLy8gTm90ZTogbXVsdGlwbGUvbmVzdGVkIHNoYWRvdyBsYXllcnMgYXJlIE5PVCBhbGxv
d2VkLgogICAgIC8vCiAgICAgLy8gVGhlIGN1cnJlbnQgY2xpcCByZWdpb24gd2lsbCBiZSB1c2Vk
IHRvIG9wdGltaXplIHRoZSBzaXplIG9mIHRoZQotICAgIC8vIHRlbXBvcmFyeSBpbWFnZS4gVGh1
cywgdGhlIG9yaWdpbmFsIHBhaW50ZXIgc2hvdWxkIG5vdCBjaGFuZ2UgYW55Ci0gICAgLy8gY2xp
cHBpbmcgdW50aWwgZW5kU2hhZG93TGF5ZXIuCi0gICAgLy8gSWYgdGhlIHNoYWRvdyB3aWxsIGJl
IGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgY2xpcHBpbmcgcmVnaW9uLAotICAgIC8vIGJlZ2luU2hh
ZG93TGF5ZXIgd2lsbCByZXR1cm4gMC4KKyAgICAvLyB0ZW1wb3JhcnkgaW1hZ2UuIFRodXMsIHRo
ZSBvcmlnaW5hbCBjb250ZXh0IHNob3VsZCBub3QgY2hhbmdlIGFueQorICAgIC8vIGNsaXBwaW5n
IHVudGlsIGVuZFNoYWRvd0xheWVyLiBJZiB0aGUgc2hhZG93IHdpbGwgYmUgY29tcGxldGVseSBv
dXRzaWRlCisgICAgLy8gdGhlIGNsaXBwaW5nIHJlZ2lvbiwgYmVnaW5TaGFkb3dMYXllciB3aWxs
IHJldHVybiAwLgogICAgIC8vCi0gICAgLy8gVGhlIHJldHVybmVkIFFQYWludGVyIHdpbGwgaGF2
ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGFuZCBjbGlwcGluZwotICAgIC8vIHByb3Blcmx5
IGluaXRpYWxpemVkIHRvIHN0YXJ0IGRvaW5nIHRoZSBwYWludGluZyAobm8gbmVlZCB0byBhY2Nv
dW50Ci0gICAgLy8gZm9yIHRoZSBzaGFkb3cgb2Zmc2V0KSwgaG93ZXZlciBpdCB3aWxsIG5vdCBo
YXZlIHRoZSBzYW1lIHJlbmRlciBoaW50cywKLSAgICAvLyBwZW4sIGJydXNoLCBldGMgYXMgdGhl
IHBhc3NlZCBRUGFpbnRlci4gVGhpcyBpcyBpbnRlbnRpb25hbCwgdXN1YWxseQotICAgIC8vIHNo
YWRvdyBoYXMgZGlmZmVyZW50IHByb3BlcnRpZXMgdGhhbiB0aGUgc2hhcGUgd2hpY2ggY2FzdHMg
dGhlIHNoYWRvdy4KKyAgICAvLyBUaGUgcmV0dXJuZWQgY29udGV4dCB3aWxsIGhhdmUgdGhlIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCBhbmQgY2xpcHBpbmcKKyAgICAvLyBwcm9wZXJseSBpbml0aWFs
aXplZCB0byBzdGFydCBkb2luZyB0aGUgcGFpbnRpbmcgKG5vIG5lZWQgdG8gYWNjb3VudCBmb3IK
KyAgICAvLyB0aGUgc2hhZG93IG9mZnNldCksIGhvd2V2ZXIgaXQgd2lsbCBub3QgaGF2ZSB0aGUg
c2FtZSByZW5kZXIgaGludHMsIHBlbiwKKyAgICAvLyBicnVzaCwgZXRjIGFzIHRoZSBwYXNzZWQg
Y29udGV4dC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgdXN1YWxseSBzaGFkb3dzCisgICAgLy8gaGF2
ZSBkaWZmZXJlbnQgcHJvcGVydGllcyB0aGFuIHRoZSBzaGFwZXMgd2hpY2ggY2FzdCB0aGVtLgog
ICAgIC8vCi0gICAgLy8gT25jZSBlbmRTaGFkb3dMYXllciBpcyBjYWxsZWQsIHRoZSB0ZW1wb3Jh
cnkgaW1hZ2Ugd2lsbCBiZSBkcmF3bgotICAgIC8vIHdpdGggdGhlIG9yaWdpbmFsIHBhaW50ZXIu
IElmIGJsdXIgcmFkaXVzIGlzIHNwZWNpZmllZCwgdGhlIHNoYWRvdwotICAgIC8vIHdpbGwgYmUg
ZmlsdGVyZWQgZmlyc3QuCi0gICAgUVBhaW50ZXIqIGJlZ2luU2hhZG93TGF5ZXIoUVBhaW50ZXIq
IHAsIGNvbnN0IFFSZWN0RiYgcmVjdCk7Ci0gICAgdm9pZCBlbmRTaGFkb3dMYXllcihRUGFpbnRl
ciogcCk7CisgICAgLy8gT25jZSBlbmRTaGFkb3dMYXllciBpcyBjYWxsZWQsIHRoZSB0ZW1wb3Jh
cnkgaW1hZ2Ugd2lsbCBiZSBkcmF3biB3aXRoIHRoZQorICAgIC8vIG9yaWdpbmFsIGNvbnRleHQu
IElmIGJsdXIgcmFkaXVzIGlzIHNwZWNpZmllZCwgdGhlIHNoYWRvdyB3aWxsIGJlCisgICAgLy8g
ZmlsdGVyZWQgZmlyc3QuCisKKyAgICBQbGF0Zm9ybUNvbnRleHQgYmVnaW5TaGFkb3dMYXllcihQ
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVu
ZFNoYWRvd0xheWVyKFBsYXRmb3JtQ29udGV4dCk7CisgICAgc3RhdGljIHZvaWQgcHVyZ2VTY3Jh
dGNoQnVmZmVyKCk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBRUG9pbnRGIG9mZnNldCgpIHsg
cmV0dXJuIFFQb2ludEYobV9vZmZzZXQud2lkdGgoKSwgbV9vZmZzZXQuaGVpZ2h0KCkpOyB9Cisj
ZW5kaWYKKwogCiBwcml2YXRlOgotICAgIFFSZWN0IG1fbGF5ZXJSZWN0OwotICAgIFFJbWFnZSBt
X2xheWVySW1hZ2U7Ci0gICAgUVBhaW50ZXIqIG1fbGF5ZXJQYWludGVyOworICAgIEludFJlY3Qg
bV9sYXllclJlY3Q7CisgICAgUGxhdGZvcm1JbWFnZSBtX2xheWVySW1hZ2U7CisgICAgUGxhdGZv
cm1Db250ZXh0IG1fbGF5ZXJDb250ZXh0OworCisgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1bnNp
Z25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBpbnQgc3RyaWRlKTsKKyAgICB2
b2lkIGNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QoY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVz
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcApz
aW1pbGFyaXR5IGluZGV4IDc5JQpjb3B5IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvQ2Fpcm9VdGlsaXRpZXMuaApjb3B5IHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCmluZGV4IDU5NGFiYzBkNGY4MjUzNzk2Mjc5NWFiOTg5MDU1
MWQxMTAwNTRiODcuLmVkNGViODBjNzdlNjk0YTRmYzQyMDhhMGU0NWQ3NDgzMDJmYjYwZjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAK
QEAgLTIzLDkgKzIzLDE5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ2Fpcm9V
dGlsaXRpZXNfaAotI2RlZmluZSBDYWlyb1V0aWxpdGllc19oCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKIAotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3Vy
ZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7CisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogCi0jZW5kaWYgLy8gQ2Fpcm9VdGlsaXRpZXNfaAor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9f
dCogY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGZsb2F0IHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhOworICAgIGNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKY29w
eSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmgKY29w
eSB0byBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKaW5k
ZXggNTk0YWJjMGQ0ZjgyNTM3OTYyNzk1YWI5ODkwNTUxZDExMDA1NGI4Ny4uYWRlZDIxNDdhNjlh
NDJkYzY0OGZlZGExMmNhOGFiNDIyZTg2MTdhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTI2LDYgKzI2LDEzIEBACiAjaWZuZGVm
IENhaXJvVXRpbGl0aWVzX2gKICNkZWZpbmUgQ2Fpcm9VdGlsaXRpZXNfaAogCi1HZGtQaXhidWYq
IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKTsK
K3R5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OworCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBDb2xvcjsKKwordm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqLCBjb25z
dCBDb2xvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDYWlyb1V0
aWxpdGllc19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIyYWUyMjk4Zjk1Y2E1MDllZTkxYjY2
NjMwY2EzOTE2ZTRiNmM0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKKworI2luY2x1ZGUgIkNh
aXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIHNjcmF0Y2hC
dWZmZXIgPSAwOworc3RhdGljIHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCkKK3sKKyAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3koc2NyYXRjaEJ1ZmZlcik7CisgICAgc2NyYXRjaEJ1ZmZlciA9IDA7
Cit9CisKKy8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZm
ZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KKy8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ry
b3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAorLy8gd2UgY3JlYXRlIGEgYnVm
ZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCitjbGFz
cyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgeworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IHB1cmdlU2NyYXRjaEJ1ZmZlcigpOyB9Cit9Owor
c3RhdGljIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOwor
c3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKQoreworICAgIGlmIChwdXJn
ZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBwdXJnZVNjcmF0Y2hCdWZm
ZXJUaW1lci5zdG9wKCk7CisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90
KDIpOworfQorCitzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBnZXRTY3JhdGNoQnVmZmVyKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlu
dCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGludCBzY3JhdGNoV2lkdGggPSBzY3JhdGNo
QnVmZmVyID8gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc2NyYXRjaEJ1ZmZlcikgOiAw
OworICAgIGludCBzY3JhdGNoSGVpZ2h0ID0gc2NyYXRjaEJ1ZmZlciA/IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzY3JhdGNoQnVmZmVyKSA6IDA7CisKKyAgICAvLyBXZSBkbyBub3Qg
bmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJn
ZSBlbm91Z2guCisgICAgaWYgKHNjcmF0Y2hCdWZmZXIgJiYgc2NyYXRjaFdpZHRoID49IHdpZHRo
ICYmIHNjcmF0Y2hIZWlnaHQgPj0gaGVpZ2h0KQorICAgICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZl
cjsKKworICAgIHB1cmdlU2NyYXRjaEJ1ZmZlcigpOworCisgICAgLy8gUm91bmQgdG8gdGhlIG5l
YXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIg
c2l6ZWQgcmVxdWVzdHMuCisgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKKyAg
ICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisgICAgc2NyYXRjaEJ1ZmZlciA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBo
ZWlnaHQpOworICAgIHJldHVybiBzY3JhdGNoQnVmZmVyOworfQorCitQbGF0Zm9ybUNvbnRleHQg
Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCit7CisgICAgZG91YmxlIHgxLCB4MiwgeTEsIHky
OworICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjb250ZXh0LCAmeDEsICZ5MSwgJngyLCAmeTIpOwor
ICAgIGNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QobGF5ZXJBcmVhLCBJbnRSZWN0KHgxLCB5MSwg
eDIgLSB4MSwgeTIgLSB5MSkpOworCisgICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgYXJlIHRvdGFs
bHkgb3V0c2lkZSB0aGUgY2xpcCByZWdpb24uCisgICAgaWYgKG1fbGF5ZXJSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xheWVySW1hZ2UgPSBnZXRTY3JhdGNoQnVm
ZmVyKG1fbGF5ZXJSZWN0LnNpemUoKSk7CisgICAgbV9sYXllckNvbnRleHQgPSBjYWlyb19jcmVh
dGUobV9sYXllckltYWdlKTsKKworICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgc3VyZmFjZSBmaXJz
dC4KKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICBjYWlyb19wYWludChtX2xheWVyQ29udGV4dCk7CisgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKG1fbGF5ZXJDb250ZXh0LCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKworICAgIGNh
aXJvX3RyYW5zbGF0ZShtX2xheWVyQ29udGV4dCwgbV9vZmZzZXQud2lkdGgoKSwgbV9vZmZzZXQu
aGVpZ2h0KCkpOworICAgIGNhaXJvX3RyYW5zbGF0ZShtX2xheWVyQ29udGV4dCwgLW1fbGF5ZXJS
ZWN0LngoKSwgLW1fbGF5ZXJSZWN0LnkoKSk7CisgICAgcmV0dXJuIG1fbGF5ZXJDb250ZXh0Owor
fQorCit2b2lkIENvbnRleHRTaGFkb3c6OmVuZFNoYWRvd0xheWVyKGNhaXJvX3QqIGNyKQorewor
ICAgIGNhaXJvX2Rlc3Ryb3kobV9sYXllckNvbnRleHQpOworICAgIG1fbGF5ZXJDb250ZXh0ID0g
MDsKKworICAgIGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykKKyAgICAgICAgYmx1ckxheWVySW1h
Z2UoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2xheWVySW1hZ2UpLAorICAgICAgICAg
ICAgICAgICAgICAgICBJbnRTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fbGF5
ZXJJbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2xheWVySW1hZ2UpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
bGF5ZXJJbWFnZSkpOworCisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgc2V0U291cmNlUkdCQUZy
b21Db2xvcihjciwgbV9jb2xvcik7CisgICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLCBtX2xheWVy
SW1hZ2UsIG1fbGF5ZXJSZWN0LngoKSwgbV9sYXllclJlY3QueSgpKTsKKyAgICBjYWlyb19yZXN0
b3JlKGNyKTsKKworICAgIC8vIFNjaGVkdWxlIGEgcHVyZ2Ugb2YgdGhlIHNjcmF0Y2ggYnVmZmVy
LiBXZSBkbyBub3QgbmVlZCB0byBkZXN0cm95IHRoZSBzdXJmYWNlLgorICAgIHNjaGVkdWxlU2Ny
YXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NhaXJvVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAKcmVu
YW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNw
cAppbmRleCA4MWUwMGYwODE1ZGU3OTM3MzRlMTZiNmVkNDNjNjJhNGZlN2UwMTU2Li5kNzY4Y2Uy
NTU3OWEyMTNkMTJmMTc4N2NkOGMyY2QzZWZjODY1YWIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0aWxpdGllcy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+CiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dk
a0NhaXJvVXRpbGl0aWVzLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRpZXMuaApyZW5hbWUgdG8gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaAppbmRleCA1OTRhYmMw
ZDRmODI1Mzc5NjI3OTVhYjk4OTA1NTFkMTEwMDU0Yjg3Li5mZjViM2VkZWZjMTExZGI5NDZlMzJh
YzgxZDBmYzJhMDUwY2UwMjZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dka0NhaXJvVXRpbGl0aWVzLmgKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBDYWlyb1V0aWxpdGllc19oCi0jZGVmaW5lIENhaXJvVXRpbGl0aWVzX2gK
KyNpZm5kZWYgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorI2RlZmluZSBHZGtDYWlyb1V0aWxpdGllc19o
CiAKIEdka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UpOwogCi0jZW5kaWYgLy8gQ2Fpcm9VdGlsaXRpZXNfaAorI2VuZGlmIC8vIEdk
a0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlQnVmZmVyR3RrLmNwcAppbmRleCA4MjFjYzEyYzg1YjdmNmZiNzVkNDJhNzlhYzE4ZmZhODRj
MGYzZThmLi5lZGIyNmYwYWI0ZjZkM2Y2MGM1NDYxMGZjODRiMDc0ZTliY2ZkNzViIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCkBAIC0y
MSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkJhc2U2
NC5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ltYWdlR3RrLmNwcAppbmRleCA1MjcyMjQzNTBjMTc0NWQ0YTNhZDBmZjZjOTFhOTNlN2Fi
OGUyZWM3Li42MjNhY2U2MTI0N2I0MjU3MWIxYjEwODI4N2VkMjZiOWEzMjJlMTVhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Db250ZXh0U2hhZG93UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViYzNiMThjYjY0OTViMzNmNzkzYzVl
NWRlOWMwOGI0NjcwMmE4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVRpbWVyRXZlbnQ+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQ29udGV4dFNoYWRvdyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2Ug
YXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGJsdXIgZmlsdGVyLgorLy8gSW5zdGVhZCBvZiBjcmVhdGlu
ZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCisvLyB3ZSBj
cmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0
aW1lci4KKworY2xhc3MgU2hhZG93QnVmZmVyOiBwdWJsaWMgUU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgU2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCA9IDApOworCisgICAgUUltYWdlKiBzY3Jh
dGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpOworCisgICAgdm9pZCBzY2hlZHVsZVB1cmdlKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KTsK
KworcHJpdmF0ZToKKyAgICBRSW1hZ2UgaW1hZ2U7CisgICAgaW50IHRpbWVySWQ7Cit9OworCitT
aGFkb3dCdWZmZXI6OlNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0
KHBhcmVudCkKKyAgICAsIHRpbWVySWQoMCkKK3sKK30KKworUUltYWdlKiBTaGFkb3dCdWZmZXI6
OnNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgd2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICAvLyBXZSBk
byBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBidWZmZXIgaXMgcmVhc29u
YWJseQorICAgIC8vIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gSG93ZXZlciwgaWYg
dGhlIHJlcXVlc3RlZCBzaXplIGlzCisgICAgLy8gbXVjaCBzbWFsbGVyIHRoYW4gb3VyIGJ1ZmZl
ciwgcmVkdWNlIG91ciBidWZmZXIgc28gdGhhdCB3ZSB3aWxsIG5vdAorICAgIC8vIGtlZXAgdG9v
IG1hbnkgYWxsb2NhdGVkIHBpeGVscyBmb3IgdG9vIGxvbmcuCisgICAgaWYgKCFpbWFnZS5pc051
bGwoKSAmJiAoaW1hZ2Uud2lkdGgoKSA+IHdpZHRoKSAmJiAoaW1hZ2UuaGVpZ2h0KCkgPiBoZWln
aHQpKQorICAgICAgICBpZiAoKCgyICogd2lkdGgpID4gaW1hZ2Uud2lkdGgoKSkgJiYgKCgyICog
aGVpZ2h0KSA+IGltYWdlLmhlaWdodCgpKSkgeworICAgICAgICAgICAgaW1hZ2UuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgcmV0dXJuICZpbWFnZTsKKyAgICAgICAgfQorCisg
ICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRo
ZSBidWZmZXIgZXZlcnl0aW1lCisgICAgLy8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBw
aXhlbC4KKyAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OworICAgIGhlaWdodCA9
ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKworICAgIGltYWdlID0gUUltYWdlKHdpZHRoLCBo
ZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZS5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgcmV0dXJuICZpbWFnZTsKK30KKwordm9pZCBTaGFk
b3dCdWZmZXI6OnNjaGVkdWxlUHVyZ2UoKQoreworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgQnVm
ZmVyUHVyZ2VEZWxheSA9IDI7IC8vIHNlY29uZHMKKyAgICBraWxsVGltZXIodGltZXJJZCk7Cisg
ICAgdGltZXJJZCA9IHN0YXJ0VGltZXIoQnVmZmVyUHVyZ2VEZWxheSAqIDEwMDApOworfQorCit2
b2lkIFNoYWRvd0J1ZmZlcjo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpCit7CisgICAg
aWYgKGV2ZW50LT50aW1lcklkKCkgPT0gdGltZXJJZCkgeworICAgICAgICBraWxsVGltZXIodGlt
ZXJJZCk7CisgICAgICAgIGltYWdlID0gUUltYWdlKCk7CisgICAgfQorICAgIFFPYmplY3Q6OnRp
bWVyRXZlbnQoZXZlbnQpOworfQorCitRX0dMT0JBTF9TVEFUSUMoU2hhZG93QnVmZmVyLCBzY3Jh
dGNoU2hhZG93QnVmZmVyKQorCitQbGF0Zm9ybUNvbnRleHQgQ29udGV4dFNoYWRvdzo6YmVnaW5T
aGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQgcCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEp
Cit7CisgICAgUVJlY3QgY2xpcFJlY3Q7CisgICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCisjaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCisgICAgICAgIGNsaXBSZWN0
ID0gcC0+Y2xpcEJvdW5kaW5nUmVjdCgpOworI2Vsc2UKKyAgICAgICAgY2xpcFJlY3QgPSBwLT5j
bGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7CisjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIGNs
aXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsK
KworICAgIGNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QobGF5ZXJBcmVhLCBJbnRSZWN0KGNsaXBS
ZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQo
KSkpOworCisgICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgYXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUg
Y2xpcCByZWdpb24uCisgICAgaWYgKG1fbGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dC
dWZmZXIoKTsKKyAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5zY3JhdGNo
SW1hZ2UobV9sYXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVySW1hZ2UgPSBRSW1hZ2UoKnNo
YWRvd0ltYWdlKTsKKworICAgIG1fbGF5ZXJDb250ZXh0ID0gbmV3IFFQYWludGVyOworICAgIG1f
bGF5ZXJDb250ZXh0LT5iZWdpbigmbV9sYXllckltYWdlKTsKKyAgICBtX2xheWVyQ29udGV4dC0+
c2V0Rm9udChwLT5mb250KCkpOworICAgIG1fbGF5ZXJDb250ZXh0LT50cmFuc2xhdGUobV9vZmZz
ZXQud2lkdGgoKSwgbV9vZmZzZXQuaGVpZ2h0KCkpOworCisgICAgLy8gVGhlIG9yaWdpbiBpcyBu
b3cgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyYXRjaCBpbWFnZS4KKyAgICBtX2xheWVy
Q29udGV4dC0+dHJhbnNsYXRlKC1tX2xheWVyUmVjdC54KCksIC1tX2xheWVyUmVjdC55KCkpOwor
CisgICAgcmV0dXJuIG1fbGF5ZXJDb250ZXh0OworfQorCit2b2lkIENvbnRleHRTaGFkb3c6OmVu
ZFNoYWRvd0xheWVyKFBsYXRmb3JtQ29udGV4dCBwKQoreworICAgIG1fbGF5ZXJDb250ZXh0LT5l
bmQoKTsKKyAgICBkZWxldGUgbV9sYXllckNvbnRleHQ7CisgICAgbV9sYXllckNvbnRleHQgPSAw
OworCisgICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KSB7CisgICAgICAgIGJsdXJMYXllcklt
YWdlKG1fbGF5ZXJJbWFnZS5iaXRzKCksIEludFNpemUobV9sYXllckltYWdlLndpZHRoKCksIG1f
bGF5ZXJJbWFnZS5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXJJbWFn
ZS5ieXRlc1BlckxpbmUoKSk7CisKKyAgICAgICAgLy8gIkNvbG9yaXplIiB3aXRoIHRoZSByaWdo
dCBzaGFkb3cgY29sb3IuCisgICAgICAgIFFQYWludGVyIHAoJm1fbGF5ZXJJbWFnZSk7CisgICAg
ICAgIHAuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNl
SW4pOworICAgICAgICBwLmZpbGxSZWN0KG1fbGF5ZXJJbWFnZS5yZWN0KCksIG1fY29sb3Iucmdi
KCkpOworICAgICAgICBwLmVuZCgpOworICAgIH0KKworICAgIHAtPmRyYXdJbWFnZShtX2xheWVy
UmVjdC50b3BMZWZ0KCksIG1fbGF5ZXJJbWFnZSk7CisgICAgc2NyYXRjaFNoYWRvd0J1ZmZlcigp
LT5zY2hlZHVsZVB1cmdlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFF0LmNwcAppbmRleCAyYjI0NmRlYWUyZjdhYzY5YTgzMGQ3YmNjNDNjYmMyOGVmODcwNjY5Li5k
YjlkN2U4NDQxMjlhM2FjMGJiNWI0NjRjOTg5OTBlZjcyM2Y3NWRhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCkBAIC0xMjUsMzcgKzEyNSwzOCBAQCBzdGF0aWMgdm9p
ZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdAogCiAgICAgICAgICAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBj
dHgtPmNvbnRleHRTaGFkb3coKTsKIAotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSAh
PSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+
bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgcXJl
YWwgZHgxID0gMCwgZHgyID0gMCwgZHkxID0gMCwgZHkyID0gMDsKLSAgICAgICAgICAgICAgICBp
ZiAoY3R4U2hhZG93LT5vZmZzZXQueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0g
Y3R4U2hhZG93LT5vZmZzZXQueCgpOworICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9m
ZnNldCgpLngoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+b2Zm
c2V0KCkueCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgx
ID0gLWN0eFNoYWRvdy0+b2Zmc2V0LngoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93
LT5vZmZzZXQueSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHkyID0gY3R4U2hhZG93LT5v
ZmZzZXQueSgpOworICAgICAgICAgICAgICAgICAgICBkeDEgPSAtY3R4U2hhZG93LT5vZmZzZXQo
KS54KCk7CisgICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgZHkyID0gY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkeTEgPSAtY3R4U2hhZG93LT5v
ZmZzZXQueSgpOworICAgICAgICAgICAgICAgICAgICBkeTEgPSAtY3R4U2hhZG93LT5vZmZzZXQo
KS55KCk7CiAgICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVk
ZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2VsbAogICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KGR4
MSwgZHgyLCBkeTEsIGR5Mik7Ci0gICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWN0eFNoYWRv
dy0+Ymx1clJhZGl1cywgLWN0eFNoYWRvdy0+Ymx1clJhZGl1cywgY3R4U2hhZG93LT5ibHVyUmFk
aXVzLCBjdHhTaGFkb3ctPmJsdXJSYWRpdXMpOworICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0
KC1jdHhTaGFkb3ctPm1fYmx1clJhZGl1cywgLWN0eFNoYWRvdy0+bV9ibHVyUmFkaXVzLCBjdHhT
aGFkb3ctPm1fYmx1clJhZGl1cywgY3R4U2hhZG93LT5tX2JsdXJSYWRpdXMpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3Qo
Y2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0WShw
dC55KCkgLSBhc2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlICE9IENv
bnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5
cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKICAgICAgICAgICAgICAgICBDb250ZXh0
U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgICAg
ICBpZiAoY3R4U2hhZG93LT50eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1
clNoYWRvdykgewogICAgICAgICAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPmNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgcC0+
c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5z
bGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3
KHAsIHB0KTsKICAgICAgICAgICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIGJvdW5kaW5nUmVjdCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0
IHJlbmRlciBoaW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dFBlbihjdHhTaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTE4MSwxMiArMTgyLDEyIEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNz
Q29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgaWYgKCFp
c0NvbXBsZXhUZXh0ICYmICEoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIGNUZXh0U3Ryb2tlKSkK
ICAgICAgICAgZmxhZ3MgfD0gUXQ6OlRleHRCeXBhc3NTaGFwaW5nOwogI2VuZGlmCi0gICAgaWYg
KGN0eC0+Y29udGV4dFNoYWRvdygpLT50eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7
CisgICAgaWYgKGN0eC0+Y29udGV4dFNoYWRvdygpLT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6
Tm9TaGFkb3cpIHsKICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250
ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUgIT0gQ29udGV4dFNoYWRv
dzo6Qmx1clNoYWRvdykgeworICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4
dFNoYWRvdzo6Qmx1clNoYWRvdykgewogICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAg
ICAgcC0+c2V0UGVuKGN0eFNoYWRvdy0+Y29sb3IpOwotICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KGN0eFNoYWRvdy0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1f
Y29sb3IpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOwog
ICAgICAgICAgICAgcC0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5wYWRkaW5nKCkp
OwogICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTk2LDcg
KzE5Nyw3IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgICAgICAgICBpZiAoc2hhZG93
UGFpbnRlcikgewogICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBh
bnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5jb2xvcik7CisgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5wYWRkaW5nKCkp
OwogICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwCmluZGV4IGM5Yzc0ZGQ4YjZiNTRkMjNkMzM3NTQxOTk5OTliOTQ2YTU4NjI4YTgu
LjEwNzAwYWQ1ZWZlMzYzZjlkYWMyYTQyNWVjN2I3OWI3NGM0MDYzMDIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0yMDYs
NyArMjA2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIHNoYWRvdy50eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93Owor
ICAgICAgICByZXR1cm4gc2hhZG93Lm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdzsK
ICAgICB9CiAKICAgICBRUmVjdEYgY2xpcEJvdW5kaW5nUmVjdCgpIGNvbnN0CkBAIC00NDYsOSAr
NDQ2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3AKIAogICAgIGlmIChtX2RhdGEtPmhhc1No
YWRvdygpKSB7CiAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0
YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5v
ZmZzZXQoKSk7CiAgICAgICAgIFFQZW4gcGVuKHAtPnBlbigpKTsKLSAgICAgICAgcGVuLnNldENv
bG9yKG1fZGF0YS0+c2hhZG93LmNvbG9yKTsKKyAgICAgICAgcGVuLnNldENvbG9yKG1fZGF0YS0+
c2hhZG93Lm1fY29sb3IpOwogICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAgcC0+ZHJh
d0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4pOwogICAgICAgICBwLT5yZXN0b3JlKCk7
CkBAIC00NzYsMTIgKzQ3NiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIHAtPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgc2hvdWxkQW50aWFsaWFzKTsKICAg
ICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAg
IHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQpOworICAgICAgICBwLT50cmFuc2xh
dGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAgICAgICBpZiAocC0+YnJ1c2goKS5zdHls
ZSgpICE9IFF0OjpOb0JydXNoKQotICAgICAgICAgICAgcC0+c2V0QnJ1c2goUUJydXNoKG1fZGF0
YS0+c2hhZG93LmNvbG9yKSk7CisgICAgICAgICAgICBwLT5zZXRCcnVzaChRQnJ1c2gobV9kYXRh
LT5zaGFkb3cubV9jb2xvcikpOwogICAgICAgICBRUGVuIHBlbihwLT5wZW4oKSk7CiAgICAgICAg
IGlmIChwZW4uc3R5bGUoKSAhPSBRdDo6Tm9QZW4pIHsKLSAgICAgICAgICAgIHBlbi5zZXRDb2xv
cihtX2RhdGEtPnNoYWRvdy5jb2xvcik7CisgICAgICAgICAgICBwZW4uc2V0Q29sb3IobV9kYXRh
LT5zaGFkb3cubV9jb2xvcik7CiAgICAgICAgICAgICBwLT5zZXRQZW4ocGVuKTsKICAgICAgICAg
fQogICAgICAgICBwLT5kcmF3Q29udmV4UG9seWdvbihwb2x5Z29uKTsKQEAgLTUyNSw5ICs1MjUs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgIHBhdGguc2V0RmlsbFJ1
bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRv
dygpKSB7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQpOwotICAg
ICAgICBwLT5maWxsUGF0aChwYXRoLCBtX2RhdGEtPnNoYWRvdy5jb2xvcik7Ci0gICAgICAgIHAt
PnRyYW5zbGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRl
KG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUNv
bG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2Rh
dGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgfQogICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmls
bFBhdHRlcm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKQEAgLTU1MywxMSAr
NTUzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICBwYXRoLnNl
dEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5o
YXNTaGFkb3coKSkgewotICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0
KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKICAgICAg
ICAgUVBlbiBzaGFkb3dQZW4ocGVuKTsKLSAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKG1fZGF0
YS0+c2hhZG93LmNvbG9yKTsKKyAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKG1fZGF0YS0+c2hh
ZG93Lm1fY29sb3IpOwogICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHNoYWRvd1Blbik7Ci0g
ICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+
dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgfQogICAgIGlmIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZm
aW5lOwpAQCAtNjU5LDcgKzY1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAg
ICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwgbm9ybWFsaXpl
ZFJlY3QsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX2NvbW1vbi0+
c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVy
LT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7
Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hh
ZG93LT5jb2xvcik7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIocCk7CiAgICAgICAgIH0KICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2Us
IG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwg
bV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwpAQCAtNjcwLDEzICs2NzAs
MTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7CiAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVj
dCwgc2hhZG93LT5jb2xvcik7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIocCk7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXpl
ZFJlY3QsIGJydXNoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9kYXRhLT5oYXNTaGFk
b3coKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvdy0+dHlwZSA9PSBDb250ZXh0U2hhZG93OjpC
bHVyU2hhZG93KSB7CisgICAgICAgICAgICBpZiAoc2hhZG93LT5tX3R5cGUgPT0gQ29udGV4dFNo
YWRvdzo6Qmx1clNoYWRvdykgewogICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWlu
dGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KTsKICAgICAg
ICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgcC0+YnJ1c2goKSk7CkBAIC02ODUs
OSArNjg1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU29saWQg
cmVjdGFuZ2xlIGZpbGwgd2l0aCBubyBibHVyIHNoYWRvdyBjYW4gYmUgZG9uZSBmYXN0ZXIKICAg
ICAgICAgICAgICAgICAvLyB3aXRob3V0IHVzaW5nIHRoZSBzaGFkb3cgbGF5ZXIgYXQgYWxsLgot
ICAgICAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3I7CisgICAg
ICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwogICAgICAg
ICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAt
PmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0gICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNldCksIHNoYWRvd0NvbG9yKTsK
KyAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNo
YWRvdy0+b2Zmc2V0KCkpLCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHAtPmJydXNoKCkpOwpAQCAtNzA3
LDE0ICs3MDcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBpZiAobV9kYXRhLT5o
YXNTaGFkb3coKSkgewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hh
ZG93KCk7CiAKLSAgICAgICAgaWYgKHNoYWRvdy0+dHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVy
U2hhZG93KSB7CisgICAgICAgIGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpC
bHVyU2hhZG93KSB7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCBhbnkgbGF5ZXIgZm9y
IHNpbXBsZSBzaGFkb3cuCi0gICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50
cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KSwgc2hhZG93LT5jb2xvcik7CisgICAgICAgICAgICBw
LT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBz
aGFkb3ctPm1fY29sb3IpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgbm9ybWFsaXplZFJl
Y3QpOwogICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1h
bGl6ZWRSZWN0LCBzaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVy
LT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHApOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC03MzEsOSArNzMxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBQYXRoIHBh
dGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0
LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAo
KTsKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewotICAgICAgICBwLT50cmFuc2xhdGUo
bV9kYXRhLT5zaGFkb3cub2Zmc2V0KTsKLSAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9y
bVBhdGgoKSwgbV9kYXRhLT5zaGFkb3cuY29sb3IpOwotICAgICAgICBwLT50cmFuc2xhdGUoLW1f
ZGF0YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRv
dy5vZmZzZXQoKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFD
b2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7CisgICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9k
YXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAgIH0KICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRm
b3JtUGF0aCgpLCBRQ29sb3IoY29sb3IpKTsKIH0KQEAgLTg5MCw5ICs4OTAsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCBibHVyLCBjb25zdAogICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBj
b250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAg
ICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBv
cHBvc2l0ZSBZIGF4aXMKICAgICAgICAgbV9jb21tb24tPnN0YXRlLnNoYWRvd09mZnNldCA9IEZs
b2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9kYXRhLT5z
aGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBzaXplLndpZHRoKCksIC1zaXplLmhl
aWdodCgpKTsKKyAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBi
bHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBD
b250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68401</attachid>
            <date>2010-09-22 11:27:09 -0700</date>
            <delta_ts>2010-09-22 22:26:17 -0700</delta_ts>
            <desc>Patch with Dirk&apos;s suggestions</desc>
            <filename>bug-45599-20100922112708.patch</filename>
            <type>text/plain</type>
            <size>44120</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDdhNjY5MGRiNTQzM2FmM2M5NDRhN2NmZGI0MjZkNjNhMzgxZmFkOS4uYzdkZDdmZTc4MjI4MjUy
MGViNDRiNjIzYzZlZjBhYzMwYzNmMzI0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOS0xNSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0NhaXJvXSBHZW5lcmFsaXplIENvbnRleHRT
aGFkb3cgZnJvbSB0aGUgUXQgcG9ydCBhbmQgdXNlIGl0IGZvciBzaGFkb3cgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU1OTkKKworICAgICAg
ICBNYWtlIENvbnRleHRTaGFkb3cgcGxhdGZvcm0taW5kZXBlbmRlbnQgYW5kIGFkZCBhIENhaXJv
IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGN1cnJlbnRseQorICAgICAgICBkaXNhYmxlZCBmb3Ig
Q2Fpcm8sIGJ1dCB3aWxsIGJlIGVuYWJsZWQgaW4gYSBmb2xsb3d1cCBwYXRjaCB3aXRoIG5ldyBi
YXNlbGluZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgZG9lcyBub3QgY2hhbmdl
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogVXBkYXRlIHNvdXJj
ZSBsaXN0cy4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogVXBkYXRlIHNvdXJjZSBsaXN0cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcDogQWRkZWQuIEEgZ2Vu
ZXJhbGl6ZWQgdmVyc2lvbiBvZiBRdCdzIENvbnRleHRTaGFkb3cuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRTaGFkb3c6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmJsdXJM
YXllckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZU1p
bmltYWxMYXllclJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFk
b3cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjpvZmZzZXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcDogQWRk
ZWQuIAorICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlUkdCQUZyb21Db2xvcik6IEEgdXRpbGl0
eSB0byBzZXQgdGhlIHNvdXJjZSBSR0JBIG9uIGEgQ2Fpcm8gc3VyZmFjZSBmcm9tIGEgV2ViQ29y
ZSBjb2xvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hh
ZG93Q2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnB1cmdlU2NyYXRjaEJ1ZmZl
cik6IFN0YXRpYyBmdW5jdGlvbiB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OlB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyOjpmaXJlZCk6IFRpbWVyIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6c2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UpOiBTY2hlZHVs
ZSdzIGEgV2ViQ29yZSB0aW1lciB0byBwdXJnZSB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICAgICAg
KFdlYkNvcmU6OmdldFNjcmF0Y2hCdWZmZXIpOiBDcmVhdGUgb3IgcmV1c2UgdGhlIHNjcmF0Y2gg
YnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXll
cik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5
ZXIpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ2Fpcm9VdGlsaXRp
ZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9DYWlyb1V0
aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtD
YWlyb1V0aWxpdGllcy5jcHA6IFJlbmFtZWQgZnJvbSBDYWlyb1V0aWxpdGllcy5jcHAuCisgICAg
ICAgIChnZXRDYWlyb1N1cmZhY2VQaXhlbCk6CisgICAgICAgIChnZXRHZGtQaXhidWZQaXhlbCk6
CisgICAgICAgIChjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwOiBBZGRlZC4gQWRhcHRlZCBmcm9tIGNvZGUg
b3JpZ2luYWxseSBpbiBDb250ZXh0U2hhZG93LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0J1ZmZlcjo6U2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6
c2NyYXRjaEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0J1ZmZlcjo6c2NoZWR1bGVQ
dXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0
Q29tbW9uKTogVXBkYXRlZCB0byByZWZsZWN0IG5ldyBDb250ZXh0U2hhZG93IG1lbWJlcnMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpoYXNTaGFkb3cp
OiBVcGRhdGVkIHRvIHJlZmxlY3QgbmV3IENvbnRleHRTaGFkb3cgbWVtYmVycy4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KTogRGl0dG8uCisK
IDIwMTAtMDktMjIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU3MjY1YjY0ZTVlMTYzNjQ0
MzRkMzUwZGI4MTFhMmEwOGY3YWE5ZjEuLmJmZTZiZGQyMWIyYzRkMjU1ZTFlY2VkZGMwZjZjYWRm
ZWQwMWY5ZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjA4Niw2ICsyMDg2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
U3BhY2UuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIFwKQEAgLTMzNTYsNiArMzM1OCw3IEBAIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1Bh
dGguaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRQbGF0Zm9ybURhdGEuaCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCA4NDg1NTZiODk5N2YzMjQzNzJhMTUxNjhhYmE1OWQyNDVlNjk5ZTc4Li40NzA0ZWIzZGQ4ZWIz
YzUwMjkyOTQ0ODg0NzdjY2U4ZjM4MWIxN2Y5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
cHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTEwOTUsNiArMTA5NSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3Bw
IFwKQEAgLTE5NzcsNiArMTk3OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL21vY2sv
U3BlZWNoSW5wdXRDbGllbnRNb2NrLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBc
CkBAIC0yMDIyLDcgKzIwMjQsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoVHJhdmVyc2FsU3RhdGUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvdy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJR
dC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oIFwKQEAgLTI1
MzUsNyArMjUzNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvQ29udGV4dFNoYWRvdy5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRl
eHRTaGFkb3dRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5jcHAKc2ltaWxhcml0eSBpbmRleCA1MCUKcmVuYW1l
IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93LmNwcApyZW5h
bWUgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAppbmRleCBi
OGZhOTE0Y2JkNGE1ZjZmMmU2YmZmNDQ4ODM5Nzc5ZTM3OWNhOWE2Li5lM2EwNzE3YjBjZGU0NmE2
MDUzOGQzMWZiNmE1NDgzNjhiN2E1MmIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29udGV4dFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFNlbmNoYSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCiAg
KgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0yOCwxMTUgKzI5LDUwIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogCi0jaW5jbHVkZSA8
UVRpbWVyRXZlbnQ+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb250ZXh0U2hhZG93
IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgYmx1ciBmaWx0ZXIu
Ci0vLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2
ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotCi1jbGFzcyBTaGFkb3dCdWZmZXI6IHB1Ymxp
YyBRT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50ID0g
MCk7Ci0KLSAgICBRSW1hZ2UqIHNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6ZSk7Ci0KLSAg
ICB2b2lkIHNjaGVkdWxlUHVyZ2UoKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdGltZXJFdmVu
dChRVGltZXJFdmVudCogZXZlbnQpOwotCi1wcml2YXRlOgotICAgIFFJbWFnZSBpbWFnZTsKLSAg
ICBpbnQgdGltZXJJZDsKLX07Ci0KLVNoYWRvd0J1ZmZlcjo6U2hhZG93QnVmZmVyKFFPYmplY3Qq
IHBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotICAgICwgdGltZXJJZCgwKQotewotfQot
Ci1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKQot
ewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIg
aWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVl
c3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMKLSAgICAvLyBtdWNo
IHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1Y2Ugb3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdp
bGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBhbGxvY2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9u
Zy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYmIChpbWFnZS53aWR0aCgpID4gd2lkdGgpICYm
IChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0gICAgICAgIGlmICgoKDIgKiB3aWR0aCkgPiBp
bWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQpID4gaW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAg
ICAgICAgICBpbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgICAgICByZXR1cm4g
JmltYWdlOwotICAgICAgICB9Ci0KLSAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhl
bHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBldmVyeXRpbWUKLSAgICAvLyB0aGVyZSBp
cyBsYXJnZXIgcmVxdWVzdCBieSAxIHBpeGVsLgotICAgIHdpZHRoID0gKDEgKyAod2lkdGggPj4g
NSkpIDw8IDU7Ci0gICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OwotCi0gICAg
aW1hZ2UgPSBRSW1hZ2Uod2lkdGgsIGhlaWdodCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11
bHRpcGxpZWQpOwotICAgIGltYWdlLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICByZXR1cm4g
JmltYWdlOwotfQotCi12b2lkIFNoYWRvd0J1ZmZlcjo6c2NoZWR1bGVQdXJnZSgpCi17Ci0gICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBCdWZmZXJQdXJnZURlbGF5ID0gMjsgLy8gc2Vjb25kcwotICAg
IGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICB0aW1lcklkID0gc3RhcnRUaW1lcihCdWZmZXJQdXJn
ZURlbGF5ICogMTAwMCk7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjp0aW1lckV2ZW50KFFUaW1l
ckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSB0aW1lcklkKSB7
Ci0gICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICAgICAgaW1hZ2UgPSBRSW1hZ2UoKTsK
LSAgICB9Ci0gICAgUU9iamVjdDo6dGltZXJFdmVudChldmVudCk7Ci19Cit1c2luZyBXVEY6Om1p
bjsKK3VzaW5nIFdURjo6bWF4OwogCi1RX0dMT0JBTF9TVEFUSUMoU2hhZG93QnVmZmVyLCBzY3Jh
dGNoU2hhZG93QnVmZmVyKQorbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb250ZXh0U2hhZG93OjpD
b250ZXh0U2hhZG93KCkKLSAgICA6IHR5cGUoTm9TaGFkb3cpCi0gICAgLCBibHVyUmFkaXVzKDAp
CisgICAgOiBtX3R5cGUoTm9TaGFkb3cpCisgICAgLCBtX2JsdXJSYWRpdXMoMCkKIHsKIH0KIAot
Q29udGV4dFNoYWRvdzo6Q29udGV4dFNoYWRvdyhjb25zdCBRQ29sb3ImIGMsIGZsb2F0IHIsIHFy
ZWFsIGR4LCBxcmVhbCBkeSkKLSAgICA6IGNvbG9yKGMpCi0gICAgLCBibHVyUmFkaXVzKHFSb3Vu
ZChyKSkKLSAgICAsIG9mZnNldChkeCwgZHkpCitDb250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93
KGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMocm91bmQocmFkaXVz
KSkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKIHsKKyAgICAvLyBTZWUgY29tbWVudHMgaW4gaHR0
cDovL3dlYmtpdC5vcmcvYi80MDc5MywgaXQgc2VlbXMgc2Vuc2libGUKKyAgICAvLyB0byBmb2xs
b3cgU2tpYSdzIGxpbWl0IG9mIDEyOCBwaXhlbHMgb2YgYmx1ciByYWRpdXMKKyAgICBtX2JsdXJS
YWRpdXMgPSBtaW4obV9ibHVyUmFkaXVzLCAxMjgpOworCiAgICAgLy8gVGhlIHR5cGUgb2Ygc2hh
ZG93IGlzIGRlY2lkZWQgYnkgdGhlIGJsdXIgcmFkaXVzLCBzaGFkb3cgb2Zmc2V0LCBhbmQgc2hh
ZG93IGNvbG9yLgotICAgIGlmICghY29sb3IuaXNWYWxpZCgpIHx8ICFjb2xvci5hbHBoYSgpKSB7
CisgICAgaWYgKCFtX2NvbG9yLmlzVmFsaWQoKSB8fCAhY29sb3IuYWxwaGEoKSkgewogICAgICAg
ICAvLyBDYW4ndCBwYWludCB0aGUgc2hhZG93IHdpdGggaW52YWxpZCBvciBpbnZpc2libGUgY29s
b3IuCi0gICAgICAgIHR5cGUgPSBOb1NoYWRvdzsKLSAgICB9IGVsc2UgaWYgKHIgPiAwKSB7Cisg
ICAgICAgIG1fdHlwZSA9IE5vU2hhZG93OworICAgIH0gZWxzZSBpZiAocmFkaXVzID4gMCkgewog
ICAgICAgICAvLyBTaGFkb3cgaXMgYWx3YXlzIGJsdXJyZWQsIGV2ZW4gdGhlIG9mZnNldCBpcyB6
ZXJvLgotICAgICAgICB0eXBlID0gQmx1clNoYWRvdzsKLSAgICB9IGVsc2UgaWYgKG9mZnNldC5p
c051bGwoKSkgeworICAgICAgICBtX3R5cGUgPSBCbHVyU2hhZG93OworICAgIH0gZWxzZSBpZiAo
IW1fb2Zmc2V0LndpZHRoKCkgJiYgIW1fb2Zmc2V0LmhlaWdodCgpKSB7CiAgICAgICAgIC8vIFdp
dGhvdXQgYmx1ciBhbmQgemVybyBvZmZzZXQgbWVhbnMgdGhlIHNoYWRvdyBpcyBmdWxseSBoaWRk
ZW4uCi0gICAgICAgIHR5cGUgPSBOb1NoYWRvdzsKKyAgICAgICAgbV90eXBlID0gTm9TaGFkb3c7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPiAwKQotICAgICAgICAg
ICAgdHlwZSA9IEFscGhhU29saWRTaGFkb3c7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR5
cGUgPSBPcGFxdWVTb2xpZFNoYWRvdzsKKyAgICAgICAgbV90eXBlID0gU29saWRTaGFkb3c7CiAg
ICAgfQogfQogCiB2b2lkIENvbnRleHRTaGFkb3c6OmNsZWFyKCkKIHsKLSAgICB0eXBlID0gTm9T
aGFkb3c7Ci0gICAgY29sb3IgPSBRQ29sb3IoKTsKLSAgICBibHVyUmFkaXVzID0gMDsKLSAgICBv
ZmZzZXQgPSBRUG9pbnRGKDAsIDApOworICAgIG1fdHlwZSA9IE5vU2hhZG93OworICAgIG1fY29s
b3IgPSBDb2xvcigpOworICAgIG1fYmx1clJhZGl1cyA9IDA7CisgICAgbV9vZmZzZXQgPSBGbG9h
dFNpemUoKTsKIH0KIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9uLCB3ZSB1c2UgMTcu
MTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgpAQCAtMTQ2LDI3ICs4MiwyMiBAQCBzdGF0aWMg
Y29uc3QgaW50IEJsdXJTdW1TaGlmdCA9IDE1OwogLy8gQXMgbm90ZWQgaW4gdGhlIFNWRyBmaWx0
ZXIgc3BlY2lmaWNhdGlvbiwgcnVubmluZyBib3ggYmx1ciAzeAogLy8gYXBwcm94aW1hdGVzIGEg
cmVhbCBnYXVzc2lhbiBibHVyIG5pY2VseS4KIAotdm9pZCBzaGFkb3dCbHVyKFFJbWFnZSYgaW1h
Z2UsIGludCByYWRpdXMsIGNvbnN0IFFDb2xvciYgc2hhZG93Q29sb3IpCit2b2lkIENvbnRleHRT
aGFkb3c6OmJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqIGltYWdlRGF0YSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgaW50IHJvd1N0cmlkZSkKIHsKLSAgICAvLyBTZWUgY29tbWVudHMgaW4gaHR0
cDovL3dlYmtpdC5vcmcvYi80MDc5MywgaXQgc2VlbXMgc2Vuc2libGUKLSAgICAvLyB0byBmb2xs
b3cgU2tpYSdzIGxpbWl0IG9mIDEyOCBwaXhlbHMgZm9yIHRoZSBibHVyIHJhZGl1cy4KLSAgICBp
ZiAocmFkaXVzID4gMTI4KQotICAgICAgICByYWRpdXMgPSAxMjg7Ci0KICAgICBpbnQgY2hhbm5l
bHNbNF0gPSB7IDMsIDAsIDEsIDMgfTsKLSAgICBpbnQgZG1heCA9IHJhZGl1cyA+PiAxOwotICAg
IGludCBkbWluID0gZG1heCAtIDEgKyAocmFkaXVzICYgMSk7CisgICAgaW50IGRtYXggPSBtX2Js
dXJSYWRpdXMgPj4gMTsKKyAgICBpbnQgZG1pbiA9IGRtYXggLSAxICsgKG1fYmx1clJhZGl1cyAm
IDEpOwogICAgIGlmIChkbWluIDwgMCkKICAgICAgICAgZG1pbiA9IDA7CiAKICAgICAvLyBUd28g
c3RhZ2VzOiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAogICAgIGZvciAoaW50IGsgPSAwOyBrIDwg
MjsgKytrKSB7CiAKLSAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2UuYml0cygp
OwotICAgICAgICBpbnQgc3RyaWRlID0gKCFrKSA/IDQgOiBpbWFnZS5ieXRlc1BlckxpbmUoKTsK
LSAgICAgICAgaW50IGRlbHRhID0gKCFrKSA/IGltYWdlLmJ5dGVzUGVyTGluZSgpIDogNDsKLSAg
ICAgICAgaW50IGpmaW5hbCA9ICghaykgPyBpbWFnZS5oZWlnaHQoKSA6IGltYWdlLndpZHRoKCk7
Ci0gICAgICAgIGludCBkaW0gPSAoIWspID8gaW1hZ2Uud2lkdGgoKSA6IGltYWdlLmhlaWdodCgp
OworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGE7CisgICAgICAgIGlu
dCBzdHJpZGUgPSAoIWspID8gNCA6IHJvd1N0cmlkZTsKKyAgICAgICAgaW50IGRlbHRhID0gKCFr
KSA/IHJvd1N0cmlkZSA6IDQ7CisgICAgICAgIGludCBqZmluYWwgPSAoIWspID8gc2l6ZS5oZWln
aHQoKSA6IHNpemUud2lkdGgoKTsKKyAgICAgICAgaW50IGRpbSA9ICghaykgPyBzaXplLndpZHRo
KCkgOiBzaXplLmhlaWdodCgpOwogCiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgamZpbmFs
OyArK2osIHBpeGVscyArPSBkZWx0YSkgewogCkBAIC0yMTMsNzQgKzE0NCwzMSBAQCB2b2lkIHNo
YWRvd0JsdXIoUUltYWdlJiBpbWFnZSwgaW50IHJhZGl1cywgY29uc3QgUUNvbG9yJiBzaGFkb3dD
b2xvcikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIC8vICJDb2xvcml6
ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgIFFQYWludGVyIHAoJmltYWdlKTsK
LSAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJj
ZUluKTsKLSAgICBwLmZpbGxSZWN0KGltYWdlLnJlY3QoKSwgc2hhZG93Q29sb3IucmdiKCkpOwot
ICAgIHAuZW5kKCk7CiB9CiAKLVFQYWludGVyKiBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xh
eWVyKFFQYWludGVyKiBwLCBjb25zdCBRUmVjdEYgJnJlY3QpCit2b2lkIENvbnRleHRTaGFkb3c6
OmNhbGN1bGF0ZU1pbmltYWxMYXllclJlY3QoY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEsIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIC8vIFdlIGV4cGFuZCB0aGUgYXJlYSBieSB0
aGUgYmx1ciByYWRpdXMgKiAyIHRvIGdpdmUgZXh0cmEgc3BhY2UKLSAgICAvLyBmb3IgdGhlIGJs
dXIgdHJhbnNpdGlvbi4KLSAgICBpbnQgZXh0cmEgPSAodHlwZSA9PSBCbHVyU2hhZG93KSA/IGJs
dXJSYWRpdXMgKiAyIDogMDsKLQotICAgIFFSZWN0RiBzaGFkb3dSZWN0ID0gcmVjdC50cmFuc2xh
dGVkKG9mZnNldCk7Ci0gICAgUVJlY3RGIGJ1ZmZlclJlY3QgPSBzaGFkb3dSZWN0LmFkanVzdGVk
KC1leHRyYSwgLWV4dHJhLCBleHRyYSwgZXh0cmEpOwotICAgIG1fbGF5ZXJSZWN0ID0gYnVmZmVy
UmVjdC50b0FsaWduZWRSZWN0KCk7CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBv
ZiB0aGUgYmx1cnJlZCBsYXllci4KKyAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KGxheWVy
QXJlYSk7CisgICAgZGVzdGluYXRpb25SZWN0Lm1vdmUobV9vZmZzZXQpOworICAgIG1fbGF5ZXJS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkZXN0aW5hdGlvblJlY3QpOwogCi0gICAgUVJlY3QgY2xp
cFJlY3Q7Ci0gICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCi0jaWYgUVRfVkVSU0lPTiA+PSBRVF9W
RVJTSU9OX0NIRUNLKDQsIDgsIDApCi0gICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcEJvdW5kaW5n
UmVjdCgpLnRvQWxpZ25lZFJlY3QoKTsKLSNlbHNlCi0gICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xp
cFJlZ2lvbigpLmJvdW5kaW5nUmVjdCgpOwotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBjbGlw
UmVjdCA9IHAtPnRyYW5zZm9ybSgpLmludmVydGVkKCkubWFwUmVjdChwLT53aW5kb3coKSk7Cisg
ICAgLy8gV2UgZXhwYW5kIHRoZSBhcmVhIGJ5IHRoZSBibHVyIHJhZGl1cyAqIDIgdG8gZ2l2ZSBl
eHRyYSBzcGFjZSBmb3IgdGhlIGJsdXIgdHJhbnNpdGlvbi4KKyAgICBtX2xheWVyUmVjdC5pbmZs
YXRlKChtX3R5cGUgPT0gQmx1clNoYWRvdykgPyBjZWlsKG1fYmx1clJhZGl1cyAqIDIpIDogMCk7
CiAKICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5zKG1fbGF5ZXJSZWN0KSkgewotCiAgICAgICAg
IC8vIE5vIG5lZWQgdG8gaGF2ZSB0aGUgYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBjbGlwLgotICAg
ICAgICBtX2xheWVyUmVjdCA9IG1fbGF5ZXJSZWN0LmludGVyc2VjdGVkKGNsaXBSZWN0KTsKKyAg
ICAgICAgbV9sYXllclJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKKworICAgICAgICAvLyBJZiB3
ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbiwgd2UgYXJlbid0IHBhaW50aW5n
IGF0IGFsbC4KICAgICAgICAgaWYgKG1fbGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFdlIGFkanVzdCBh
Z2FpbiBiZWNhdXNlIHRoZSBwaXhlbHMgYXQgdGhlIGJvcmRlcnMgYXJlIHN0aWxsCiAgICAgICAg
IC8vIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IHRoZSBwaXhlbHMgb3V0c2lkZSB0aGUgYnVmZmVy
LgotICAgICAgICBpZiAodHlwZSA9PSBCbHVyU2hhZG93KQotICAgICAgICAgICAgbV9sYXllclJl
Y3QuYWRqdXN0KC1leHRyYSwgLWV4dHJhLCBleHRyYSwgZXh0cmEpOworICAgICAgICBpZiAobV90
eXBlID09IEJsdXJTaGFkb3cpCisgICAgICAgICAgICBtX2xheWVyUmVjdC5pbmZsYXRlKChtX3R5
cGUgPT0gQmx1clNoYWRvdykgPyBjZWlsKG1fYmx1clJhZGl1cyAqIDIpIDogMCk7CiAgICAgfQot
Ci0gICAgU2hhZG93QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBzY3JhdGNoU2hhZG93QnVmZmVyKCk7
Ci0gICAgUUltYWdlKiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1ZmZlci0+c2NyYXRjaEltYWdlKG1f
bGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllckltYWdlID0gUUltYWdlKCpzaGFkb3dJbWFn
ZSk7Ci0KLSAgICBtX2xheWVyUGFpbnRlciA9IG5ldyBRUGFpbnRlcjsKLSAgICBtX2xheWVyUGFp
bnRlci0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAgbV9sYXllclBhaW50ZXItPnNldEZvbnQo
cC0+Zm9udCgpKTsKLSAgICBtX2xheWVyUGFpbnRlci0+dHJhbnNsYXRlKG9mZnNldCk7Ci0KLSAg
ICAvLyBUaGUgb3JpZ2luIGlzIG5vdyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JhdGNo
IGltYWdlLgotICAgIG1fbGF5ZXJQYWludGVyLT50cmFuc2xhdGUoLW1fbGF5ZXJSZWN0LnRvcExl
ZnQoKSk7Ci0KLSAgICByZXR1cm4gbV9sYXllclBhaW50ZXI7CiB9CiAKLXZvaWQgQ29udGV4dFNo
YWRvdzo6ZW5kU2hhZG93TGF5ZXIoUVBhaW50ZXIqIHApCi17Ci0gICAgbV9sYXllclBhaW50ZXIt
PmVuZCgpOwotICAgIGRlbGV0ZSBtX2xheWVyUGFpbnRlcjsKLSAgICBtX2xheWVyUGFpbnRlciA9
IDA7Ci0KLSAgICBpZiAodHlwZSA9PSBCbHVyU2hhZG93KQotICAgICAgICBzaGFkb3dCbHVyKG1f
bGF5ZXJJbWFnZSwgYmx1clJhZGl1cywgY29sb3IpOwotCi0gICAgcC0+ZHJhd0ltYWdlKG1fbGF5
ZXJSZWN0LnRvcExlZnQoKSwgbV9sYXllckltYWdlKTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZm
ZXIoKS0+c2NoZWR1bGVQdXJnZSgpOwotfQotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCnNpbWlsYXJpdHkgaW5k
ZXggNTQlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNo
YWRvdy5oCnJlbmFtZSB0byBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cu
aAppbmRleCA3MTQwMzQwZDc4ZTRkNDgyNDhjZjAxY2Y3MzZmZDJiMWQwNWE5MWQ3Li4zM2RhODZl
Zjc3OGJhNDJkNDAzZjk5MjFkODg0ZTAxYjI2ODI5ZDA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3cuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI4LDcgKzI5LDIyIEBACiAj
aWZuZGVmIENvbnRleHRTaGFkb3dfaAogI2RlZmluZSBDb250ZXh0U2hhZG93X2gKIAotI2luY2x1
ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKworI2lmIFBM
QVRGT1JNKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7Cit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7Cit0eXBlZGVmIGNhaXJvX3N1cmZh
Y2VfdCogUGxhdGZvcm1JbWFnZTsKK3R5cGVkZWYgY2Fpcm9fdCogUGxhdGZvcm1Db250ZXh0Owor
I2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UUltYWdlPgorY2xhc3MgUVBhaW50ZXI7Cit0
eXBlZGVmIFFJbWFnZSBQbGF0Zm9ybUltYWdlOwordHlwZWRlZiBRUGFpbnRlciogUGxhdGZvcm1D
b250ZXh0OworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNDkgKzYwLDU3
IEBAIGNsYXNzIENvbnRleHRTaGFkb3cgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b1NoYWRvdywKLSAgICAgICAgT3BhcXVlU29saWRTaGFkb3csCi0gICAgICAgIEFscGhhU29saWRT
aGFkb3csCisgICAgICAgIFNvbGlkU2hhZG93LAogICAgICAgICBCbHVyU2hhZG93Ci0gICAgfSB0
eXBlOworICAgIH0gbV90eXBlOwogCi0gICAgUUNvbG9yIGNvbG9yOwotICAgIGludCBibHVyUmFk
aXVzOwotICAgIFFQb2ludEYgb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgaW50IG1f
Ymx1clJhZGl1czsKKyAgICBGbG9hdFNpemUgbV9vZmZzZXQ7CiAKICAgICBDb250ZXh0U2hhZG93
KCk7Ci0gICAgQ29udGV4dFNoYWRvdyhjb25zdCBRQ29sb3ImIGMsIGZsb2F0IHIsIHFyZWFsIGR4
LCBxcmVhbCBkeSk7CisgICAgQ29udGV4dFNoYWRvdyhjb25zdCBDb2xvciYsIGZsb2F0IHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAg
Ly8gVGhlIHBhaXIgYmVnaW5TaGFkb3dMYXllciBhbmQgZW5kU2hhZG93TGF5ZXIgY3JlYXRlcyBh
IHRlbXBvcmFyeSBpbWFnZQotICAgIC8vIHdoZXJlIHRoZSBjYWxsZXIgY2FuIGRyYXcgb250bywg
dXNpbmcgdGhlIHJldHVybmVkIFFQYWludGVyLiBUaGlzCi0gICAgLy8gUVBhaW50ZXIgaW5zdGFu
Y2UgbXVzdCBiZSB1c2VkIG9ubHkgdG8gZHJhdyBiZXR3ZWVuIHRoZSBjYWxsIHRvCi0gICAgLy8g
YmVnaW5TaGFkb3dMYXllciBhbmQgZW5kU2hhZG93TGF5ZXIuCisgICAgLy8gd2hlcmUgdGhlIGNh
bGxlciBjYW4gZHJhdyBvbnRvLCB1c2luZyB0aGUgcmV0dXJuZWQgY29udGV4dC4gVGhpcyBjb250
ZXh0CisgICAgLy8gbXVzdCBiZSB1c2VkIG9ubHkgdG8gZHJhdyBiZXR3ZWVuIHRoZSBjYWxsIHRv
IGJlZ2luU2hhZG93TGF5ZXIgYW5kCisgICAgLy8gZW5kU2hhZG93TGF5ZXIuCiAgICAgLy8KLSAg
ICAvLyBOb3RlOiBtdWx0aXBsZS9uZXN0ZWQgc2hhZG93IGxheWVyIGlzIE5PVCBhbGxvd2VkLgor
ICAgIC8vIE5vdGU6IG11bHRpcGxlL25lc3RlZCBzaGFkb3cgbGF5ZXJzIGFyZSBOT1QgYWxsb3dl
ZC4KICAgICAvLwogICAgIC8vIFRoZSBjdXJyZW50IGNsaXAgcmVnaW9uIHdpbGwgYmUgdXNlZCB0
byBvcHRpbWl6ZSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAvLyB0ZW1wb3JhcnkgaW1hZ2UuIFRodXMs
IHRoZSBvcmlnaW5hbCBwYWludGVyIHNob3VsZCBub3QgY2hhbmdlIGFueQotICAgIC8vIGNsaXBw
aW5nIHVudGlsIGVuZFNoYWRvd0xheWVyLgotICAgIC8vIElmIHRoZSBzaGFkb3cgd2lsbCBiZSBj
b21wbGV0ZWx5IG91dHNpZGUgdGhlIGNsaXBwaW5nIHJlZ2lvbiwKLSAgICAvLyBiZWdpblNoYWRv
d0xheWVyIHdpbGwgcmV0dXJuIDAuCisgICAgLy8gdGVtcG9yYXJ5IGltYWdlLiBUaHVzLCB0aGUg
b3JpZ2luYWwgY29udGV4dCBzaG91bGQgbm90IGNoYW5nZSBhbnkKKyAgICAvLyBjbGlwcGluZyB1
bnRpbCBlbmRTaGFkb3dMYXllci4gSWYgdGhlIHNoYWRvdyB3aWxsIGJlIGNvbXBsZXRlbHkgb3V0
c2lkZQorICAgIC8vIHRoZSBjbGlwcGluZyByZWdpb24sIGJlZ2luU2hhZG93TGF5ZXIgd2lsbCBy
ZXR1cm4gMC4KICAgICAvLwotICAgIC8vIFRoZSByZXR1cm5lZCBRUGFpbnRlciB3aWxsIGhhdmUg
dGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBhbmQgY2xpcHBpbmcKLSAgICAvLyBwcm9wZXJseSBp
bml0aWFsaXplZCB0byBzdGFydCBkb2luZyB0aGUgcGFpbnRpbmcgKG5vIG5lZWQgdG8gYWNjb3Vu
dAotICAgIC8vIGZvciB0aGUgc2hhZG93IG9mZnNldCksIGhvd2V2ZXIgaXQgd2lsbCBub3QgaGF2
ZSB0aGUgc2FtZSByZW5kZXIgaGludHMsCi0gICAgLy8gcGVuLCBicnVzaCwgZXRjIGFzIHRoZSBw
YXNzZWQgUVBhaW50ZXIuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHVzdWFsbHkKLSAgICAvLyBzaGFk
b3cgaGFzIGRpZmZlcmVudCBwcm9wZXJ0aWVzIHRoYW4gdGhlIHNoYXBlIHdoaWNoIGNhc3RzIHRo
ZSBzaGFkb3cuCisgICAgLy8gVGhlIHJldHVybmVkIGNvbnRleHQgd2lsbCBoYXZlIHRoZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXggYW5kIGNsaXBwaW5nCisgICAgLy8gcHJvcGVybHkgaW5pdGlhbGl6
ZWQgdG8gc3RhcnQgZG9pbmcgdGhlIHBhaW50aW5nIChubyBuZWVkIHRvIGFjY291bnQgZm9yCisg
ICAgLy8gdGhlIHNoYWRvdyBvZmZzZXQpLCBob3dldmVyIGl0IHdpbGwgbm90IGhhdmUgdGhlIHNh
bWUgcmVuZGVyIGhpbnRzLCBwZW4sCisgICAgLy8gYnJ1c2gsIGV0YyBhcyB0aGUgcGFzc2VkIGNv
bnRleHQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHVzdWFsbHkgc2hhZG93cworICAgIC8vIGhhdmUg
ZGlmZmVyZW50IHByb3BlcnRpZXMgdGhhbiB0aGUgc2hhcGVzIHdoaWNoIGNhc3QgdGhlbS4KICAg
ICAvLwotICAgIC8vIE9uY2UgZW5kU2hhZG93TGF5ZXIgaXMgY2FsbGVkLCB0aGUgdGVtcG9yYXJ5
IGltYWdlIHdpbGwgYmUgZHJhd24KLSAgICAvLyB3aXRoIHRoZSBvcmlnaW5hbCBwYWludGVyLiBJ
ZiBibHVyIHJhZGl1cyBpcyBzcGVjaWZpZWQsIHRoZSBzaGFkb3cKLSAgICAvLyB3aWxsIGJlIGZp
bHRlcmVkIGZpcnN0LgotICAgIFFQYWludGVyKiBiZWdpblNoYWRvd0xheWVyKFFQYWludGVyKiBw
LCBjb25zdCBRUmVjdEYmIHJlY3QpOwotICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIoUVBhaW50ZXIq
IHApOworICAgIC8vIE9uY2UgZW5kU2hhZG93TGF5ZXIgaXMgY2FsbGVkLCB0aGUgdGVtcG9yYXJ5
IGltYWdlIHdpbGwgYmUgZHJhd24gd2l0aCB0aGUKKyAgICAvLyBvcmlnaW5hbCBjb250ZXh0LiBJ
ZiBibHVyIHJhZGl1cyBpcyBzcGVjaWZpZWQsIHRoZSBzaGFkb3cgd2lsbCBiZQorICAgIC8vIGZp
bHRlcmVkIGZpcnN0LgorCisgICAgUGxhdGZvcm1Db250ZXh0IGJlZ2luU2hhZG93TGF5ZXIoUGxh
dGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSk7CisgICAgdm9pZCBlbmRT
aGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQpOworICAgIHN0YXRpYyB2b2lkIHB1cmdlU2NyYXRj
aEJ1ZmZlcigpOworCisjaWYgUExBVEZPUk0oUVQpCisgICAgUVBvaW50RiBvZmZzZXQoKSB7IHJl
dHVybiBRUG9pbnRGKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0LmhlaWdodCgpKTsgfQorI2Vu
ZGlmCisKIAogcHJpdmF0ZToKLSAgICBRUmVjdCBtX2xheWVyUmVjdDsKLSAgICBRSW1hZ2UgbV9s
YXllckltYWdlOwotICAgIFFQYWludGVyKiBtX2xheWVyUGFpbnRlcjsKKyAgICBJbnRSZWN0IG1f
bGF5ZXJSZWN0OworICAgIFBsYXRmb3JtSW1hZ2UgbV9sYXllckltYWdlOworICAgIFBsYXRmb3Jt
Q29udGV4dCBtX2xheWVyQ29udGV4dDsKKworICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWdu
ZWQgY2hhciosIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgaW50IHN0cmlkZSk7CisgICAgdm9p
ZCBjYWxjdWxhdGVNaW5pbWFsTGF5ZXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
CmluZGV4IDM0YjQ0ODJmMjRiYTc2ZmI5ZGQ0YzgwZjE5ODJlMzljMjQ4ZDc0MjguLjhjMjA0OWY2
YWNhMjFmN2MwZjA5NWM2MDI1Mjk1NDJlMWVlMDIwOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKIAorI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKQEAgLTQ4LDUgKzQ5LDExIEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJv
X3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcikKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGRzdENy
LCBjYWlyb19nZXRfZmlsbF9ydWxlKHNyY0NyKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKK3ZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAg
Y29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCmluZGV4IDJlZmU5ZWEzNjU2NzEzOWIzYjNlNDBkNzU3Yjc0NGNlOTdh
ZjIyMGEuLjA2NzViOTA2YjUxZjU2ODBmYWUxNWE5N2Y5NTBiMThkZDIyODYwZDAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTI5
LDggKzI5LDExIEBACiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQ29sb3I7CiAKIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNh
aXJvX3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcik7Cit2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29s
b3IoY2Fpcm9fdCosIGNvbnN0IENvbG9yJik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIENhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjJhZTIy
OThmOTVjYTUwOWVlOTFiNjY2MzBjYTM5MTZlNGI2YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCkBAIC0w
LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNhaXJvX3N1
cmZhY2VfdCogc2NyYXRjaEJ1ZmZlciA9IDA7CitzdGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZm
ZXIoKQoreworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzY3JhdGNoQnVmZmVyKTsKKyAgICBz
Y3JhdGNoQnVmZmVyID0gMDsKK30KKworLy8gQ29udGV4dFNoYWRvdyBuZWVkcyBhIHNjcmF0Y2gg
aW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGJsdXIgZmlsdGVyLgorLy8gSW5zdGVhZCBvZiBj
cmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCisv
LyB3ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2
aWEgYSB0aW1lci4KK2NsYXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIDogcHVibGljIFRpbWVy
QmFzZSB7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsgcHVyZ2VTY3JhdGNo
QnVmZmVyKCk7IH0KK307CitzdGF0aWMgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgcHVyZ2VTY3Jh
dGNoQnVmZmVyVGltZXI7CitzdGF0aWMgdm9pZCBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgp
Cit7CisgICAgaWYgKHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0b3AoKTsKKyAgICBwdXJnZVNjcmF0Y2hCdWZmZXJU
aW1lci5zdGFydE9uZVNob3QoMik7Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGdldFNj
cmF0Y2hCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgd2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgaW50IHNjcmF0
Y2hXaWR0aCA9IHNjcmF0Y2hCdWZmZXIgPyBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChz
Y3JhdGNoQnVmZmVyKSA6IDA7CisgICAgaW50IHNjcmF0Y2hIZWlnaHQgPSBzY3JhdGNoQnVmZmVy
ID8gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHNjcmF0Y2hCdWZmZXIpIDogMDsKKwor
ICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1cnJl
bnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBpZiAoc2NyYXRjaEJ1ZmZlciAmJiBzY3Jh
dGNoV2lkdGggPj0gd2lkdGggJiYgc2NyYXRjaEhlaWdodCA+PSBoZWlnaHQpCisgICAgICAgIHJl
dHVybiBzY3JhdGNoQnVmZmVyOworCisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisKKyAgICAv
LyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1
ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4KKyAgICB3aWR0aCA9ICgxICsgKHdpZHRo
ID4+IDUpKSA8PCA1OworICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKyAg
ICBzY3JhdGNoQnVmZmVyID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X0FSR0IzMiwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHNjcmF0Y2hCdWZmZXI7Cit9CisK
K1BsYXRmb3JtQ29udGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKFBsYXRmb3Jt
Q29udGV4dCBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKK3sKKyAgICBkb3Vi
bGUgeDEsIHgyLCB5MSwgeTI7CisgICAgY2Fpcm9fY2xpcF9leHRlbnRzKGNvbnRleHQsICZ4MSwg
JnkxLCAmeDIsICZ5Mik7CisgICAgY2FsY3VsYXRlTWluaW1hbExheWVyUmVjdChsYXllckFyZWEs
IEludFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKSk7CisKKyAgICAvLyBEb24ndCBwYWlu
dCBpZiB3ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KKyAgICBpZiAobV9s
YXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFn
ZSA9IGdldFNjcmF0Y2hCdWZmZXIobV9sYXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyQ29u
dGV4dCA9IGNhaXJvX2NyZWF0ZShtX2xheWVySW1hZ2UpOworCisgICAgLy8gQWx3YXlzIGNsZWFy
IHRoZSBzdXJmYWNlIGZpcnN0LgorICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2xheWVyQ29udGV4
dCwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KG1fbGF5ZXJDb250ZXh0
KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9sYXllckNvbnRleHQsIENBSVJPX09QRVJBVE9S
X09WRVIpOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0LCBtX29mZnNldC53
aWR0aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKG1fbGF5ZXJD
b250ZXh0LCAtbV9sYXllclJlY3QueCgpLCAtbV9sYXllclJlY3QueSgpKTsKKyAgICByZXR1cm4g
bV9sYXllckNvbnRleHQ7Cit9CisKK3ZvaWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIo
Y2Fpcm9fdCogY3IpCit7CisgICAgY2Fpcm9fZGVzdHJveShtX2xheWVyQ29udGV4dCk7CisgICAg
bV9sYXllckNvbnRleHQgPSAwOworCisgICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KQorICAg
ICAgICBibHVyTGF5ZXJJbWFnZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fbGF5ZXJJ
bWFnZSksCisgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgobV9sYXllckltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KG1fbGF5ZXJJbWFnZSkpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUobV9sYXllckltYWdlKSk7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAg
ICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBtX2NvbG9yKTsKKyAgICBjYWlyb19tYXNrX3N1
cmZhY2UoY3IsIG1fbGF5ZXJJbWFnZSwgbV9sYXllclJlY3QueCgpLCBtX2xheWVyUmVjdC55KCkp
OworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAgLy8gU2NoZWR1bGUgYSBwdXJnZSBvZiB0
aGUgc2NyYXRjaCBidWZmZXIuIFdlIGRvIG5vdCBuZWVkIHRvIGRlc3Ryb3kgdGhlIHN1cmZhY2Uu
CisgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFh
NzM4ODhiOTk4MmMyZTIwOTRhOWI1ZDU2YzU3MWRiN2YwN2RmNzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKQEAgLTAs
MCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29udGV4dFNoYWRvdy5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8
UVRpbWVyRXZlbnQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udGV4dFNoYWRvdyBu
ZWVkcyBhIHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGJsdXIgZmlsdGVyLgor
Ly8gSW5zdGVhZCBvZiBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVy
eSBvcGVyYXRpb24sCisvLyB3ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0
aWNhbGx5IHB1cmdlZCB2aWEgYSB0aW1lci4KKworY2xhc3MgU2hhZG93QnVmZmVyOiBwdWJsaWMg
UU9iamVjdCB7CitwdWJsaWM6CisgICAgU2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCA9IDAp
OworCisgICAgUUltYWdlKiBzY3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpOworCisgICAg
dm9pZCBzY2hlZHVsZVB1cmdlKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRpbWVyRXZlbnQo
UVRpbWVyRXZlbnQqIGV2ZW50KTsKKworcHJpdmF0ZToKKyAgICBRSW1hZ2UgaW1hZ2U7CisgICAg
aW50IHRpbWVySWQ7Cit9OworCitTaGFkb3dCdWZmZXI6OlNoYWRvd0J1ZmZlcihRT2JqZWN0KiBw
YXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIHRpbWVySWQoMCkKK3sKK30KKwor
UUltYWdlKiBTaGFkb3dCdWZmZXI6OnNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6ZSkKK3sK
KyAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUuaGVp
Z2h0KCk7CisKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlm
IHRoZSBidWZmZXIgaXMgcmVhc29uYWJseQorICAgIC8vIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0
ZWQgc2l6ZS4gSG93ZXZlciwgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzCisgICAgLy8gbXVjaCBz
bWFsbGVyIHRoYW4gb3VyIGJ1ZmZlciwgcmVkdWNlIG91ciBidWZmZXIgc28gdGhhdCB3ZSB3aWxs
IG5vdAorICAgIC8vIGtlZXAgdG9vIG1hbnkgYWxsb2NhdGVkIHBpeGVscyBmb3IgdG9vIGxvbmcu
CisgICAgaWYgKCFpbWFnZS5pc051bGwoKSAmJiAoaW1hZ2Uud2lkdGgoKSA+IHdpZHRoKSAmJiAo
aW1hZ2UuaGVpZ2h0KCkgPiBoZWlnaHQpKQorICAgICAgICBpZiAoKCgyICogd2lkdGgpID4gaW1h
Z2Uud2lkdGgoKSkgJiYgKCgyICogaGVpZ2h0KSA+IGltYWdlLmhlaWdodCgpKSkgeworICAgICAg
ICAgICAgaW1hZ2UuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgcmV0dXJuICZp
bWFnZTsKKyAgICAgICAgfQorCisgICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxz
IHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCisgICAgLy8gdGhlcmUgaXMg
bGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KKyAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUp
KSA8PCA1OworICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKKworICAgIGlt
YWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0
aXBsaWVkKTsKKyAgICBpbWFnZS5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgcmV0dXJuICZp
bWFnZTsKK30KKwordm9pZCBTaGFkb3dCdWZmZXI6OnNjaGVkdWxlUHVyZ2UoKQoreworICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgQnVmZmVyUHVyZ2VEZWxheSA9IDI7IC8vIHNlY29uZHMKKyAgICBr
aWxsVGltZXIodGltZXJJZCk7CisgICAgdGltZXJJZCA9IHN0YXJ0VGltZXIoQnVmZmVyUHVyZ2VE
ZWxheSAqIDEwMDApOworfQorCit2b2lkIFNoYWRvd0J1ZmZlcjo6dGltZXJFdmVudChRVGltZXJF
dmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50aW1lcklkKCkgPT0gdGltZXJJZCkgewor
ICAgICAgICBraWxsVGltZXIodGltZXJJZCk7CisgICAgICAgIGltYWdlID0gUUltYWdlKCk7Cisg
ICAgfQorICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXZlbnQpOworfQorCitRX0dMT0JBTF9TVEFU
SUMoU2hhZG93QnVmZmVyLCBzY3JhdGNoU2hhZG93QnVmZmVyKQorCitQbGF0Zm9ybUNvbnRleHQg
Q29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcihQbGF0Zm9ybUNvbnRleHQgcCwgY29uc3Qg
RmxvYXRSZWN0JiBsYXllckFyZWEpCit7CisgICAgUVJlY3QgY2xpcFJlY3Q7CisgICAgaWYgKHAt
Pmhhc0NsaXBwaW5nKCkpCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgs
IDApCisgICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcEJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJl
Y3QoKTsKKyNlbHNlCisgICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcFJlZ2lvbigpLmJvdW5kaW5n
UmVjdCgpOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAtPnRyYW5zZm9y
bSgpLmludmVydGVkKCkubWFwUmVjdChwLT53aW5kb3coKSk7CisKKyAgICBjYWxjdWxhdGVNaW5p
bWFsTGF5ZXJSZWN0KGxheWVyQXJlYSwgSW50UmVjdChjbGlwUmVjdC54KCksIGNsaXBSZWN0Lnko
KSwgY2xpcFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpKTsKKworICAgIC8vIERvbid0
IHBhaW50IGlmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLgorICAgIGlm
IChtX2xheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2hhZG93
QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBzY3JhdGNoU2hhZG93QnVmZmVyKCk7CisgICAgUUltYWdl
KiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1ZmZlci0+c2NyYXRjaEltYWdlKG1fbGF5ZXJSZWN0LnNp
emUoKSk7CisgICAgbV9sYXllckltYWdlID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7CisKKyAgICBt
X2xheWVyQ29udGV4dCA9IG5ldyBRUGFpbnRlcjsKKyAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4o
Jm1fbGF5ZXJJbWFnZSk7CisgICAgbV9sYXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsK
KyAgICBtX2xheWVyQ29udGV4dC0+dHJhbnNsYXRlKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0
LmhlaWdodCgpKTsKKworICAgIC8vIFRoZSBvcmlnaW4gaXMgbm93IHRoZSB0b3AgbGVmdCBjb3Ju
ZXIgb2YgdGhlIHNjcmF0Y2ggaW1hZ2UuCisgICAgbV9sYXllckNvbnRleHQtPnRyYW5zbGF0ZSgt
bV9sYXllclJlY3QueCgpLCAtbV9sYXllclJlY3QueSgpKTsKKworICAgIHJldHVybiBtX2xheWVy
Q29udGV4dDsKK30KKwordm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihQbGF0Zm9y
bUNvbnRleHQgcCkKK3sKKyAgICBtX2xheWVyQ29udGV4dC0+ZW5kKCk7CisgICAgZGVsZXRlIG1f
bGF5ZXJDb250ZXh0OworICAgIG1fbGF5ZXJDb250ZXh0ID0gMDsKKworICAgIGlmIChtX3R5cGUg
PT0gQmx1clNoYWRvdykgeworICAgICAgICBibHVyTGF5ZXJJbWFnZShtX2xheWVySW1hZ2UuYml0
cygpLCBJbnRTaXplKG1fbGF5ZXJJbWFnZS53aWR0aCgpLCBtX2xheWVySW1hZ2UuaGVpZ2h0KCkp
LAorICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVySW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOwor
CisgICAgICAgIC8vICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgorICAg
ICAgICBRUGFpbnRlciBwKCZtX2xheWVySW1hZ2UpOworICAgICAgICBwLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKKyAgICAgICAgcC5maWxs
UmVjdChtX2xheWVySW1hZ2UucmVjdCgpLCBtX2NvbG9yLnJnYigpKTsKKyAgICAgICAgcC5lbmQo
KTsKKyAgICB9CisKKyAgICBwLT5kcmF3SW1hZ2UobV9sYXllclJlY3QudG9wTGVmdCgpLCBtX2xh
eWVySW1hZ2UpOworICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIoKS0+c2NoZWR1bGVQdXJnZSgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKaW5kZXggMmIyNDZk
ZWFlMmY3YWM2OWE4MzBkN2JjYzQzY2JjMjhlZjg3MDY2OS4uZGI5ZDdlODQ0MTI5YTNhYzBiYjVi
NDY0Yzk4OTkwZWY3MjNmNzVkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcApAQCAtMTI1LDM3ICsxMjUsMzggQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3Jh
cGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKIAogICAg
ICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7
CiAKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9T
aGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hh
ZG93OjpOb1NoYWRvdykgewogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAs
IGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0
LngoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+b2Zmc2V0Lngo
KTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS54KCkgPiAwKQorICAg
ICAgICAgICAgICAgICAgICBkeDIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLngoKTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR4MSA9IC1jdHhTaGFkb3ctPm9mZnNl
dC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0LnkoKSA+IDApCi0g
ICAgICAgICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0LnkoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpOworICAgICAgICAgICAg
ICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAg
IGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgZHkxID0gLWN0eFNoYWRvdy0+b2Zmc2V0LnkoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZHkxID0gLWN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOwogICAgICAgICAgICAg
ICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFz
IHdlbGwKICAgICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwot
ICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPmJsdXJSYWRpdXMsIC1jdHhT
aGFkb3ctPmJsdXJSYWRpdXMsIGN0eFNoYWRvdy0+Ymx1clJhZGl1cywgY3R4U2hhZG93LT5ibHVy
UmFkaXVzKTsKKyAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgtY3R4U2hhZG93LT5tX2JsdXJS
YWRpdXMsIC1jdHhTaGFkb3ctPm1fYmx1clJhZGl1cywgY3R4U2hhZG93LT5tX2JsdXJSYWRpdXMs
IGN0eFNoYWRvdy0+bV9ibHVyUmFkaXVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAt
PnNhdmUoKTsKICAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0OjpJ
bnRlcnNlY3RDbGlwKTsKICAgICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsKIAot
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRv
dykgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6
Ok5vU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0g
Y3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlw
ZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7CisgICAgICAgICAgICAgICAgaWYgKGN0
eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKICAgICAgICAg
ICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4
U2hhZG93LT5jb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFk
b3ctPm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1f
Y29sb3IpOworICAgICAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7CiAgICAgICAgICAg
ICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihwLCBib3VuZGluZ1JlY3QpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc2hh
ZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBi
ZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5jb2xv
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZv
bnQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4
U2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhzaGFk
b3dQYWludGVyLCBwdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNo
YWRvd0xheWVyKHApOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODEsMTIgKzE4MiwxMiBA
QCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgIGlmICghaXNDb21wbGV4VGV4dCAmJiAhKGN0
eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBjVGV4dFN0cm9rZSkpCiAgICAgICAgIGZsYWdzIHw9IFF0
OjpUZXh0QnlwYXNzU2hhcGluZzsKICNlbmRpZgotICAgIGlmIChjdHgtPmNvbnRleHRTaGFkb3co
KS0+dHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgIGlmIChjdHgtPmNvbnRl
eHRTaGFkb3coKS0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CiAgICAgICAg
IENvbnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotICAgICAg
ICBpZiAoY3R4U2hhZG93LT50eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKKyAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cp
IHsKICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFk
b3ctPmNvbG9yKTsKLSAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCk7
CisgICAgICAgICAgICBwLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAg
IHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKICAgICAgICAgICAgIHAtPmRyYXdU
ZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4ucGFkZGluZygpKTsKICAgICAgICAgICAgIHAtPnJl
c3RvcmUoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5Niw3ICsxOTcsNyBAQCBzdGF0aWMgdm9p
ZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdAogICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAg
ICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJl
IGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRG
b250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0
eFNoYWRvdy0+Y29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihj
dHhTaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdU
ZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4ucGFkZGluZygpKTsKICAgICAgICAgICAgICAgICBj
dHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKHApOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA1YTI5
YWQ0YThlNmM4ODNhZTY1NDMwZjU4NjE4YzAxYzcxYjJlYmNhLi43M2VjZWZiZGQwMDA2ZWY2OGVm
ZDMxYzk0ZWIzYWY5NWM5NjA1ZDllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzaGFk
b3cudHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdzsKKyAgICAgICAgcmV0dXJuIHNoYWRv
dy5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3c7CiAgICAgfQogCiAgICAgUVJlY3RG
IGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdApAQCAtNDQwLDkgKzQ0MCw5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUs
IGludCBhbmdsZVNwCiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBw
LT5zYXZlKCk7Ci0gICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQpOwor
ICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAgICAgICBR
UGVuIHBlbihwLT5wZW4oKSk7Ci0gICAgICAgIHBlbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRvdy5j
b2xvcik7CisgICAgICAgIHBlbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKTsKICAg
ICAgICAgcC0+c2V0UGVuKHBlbik7CiAgICAgICAgIHAtPmRyYXdBcmMocmVjdCwgc3RhcnRBbmds
ZSwgYW5nbGVTcGFuKTsKICAgICAgICAgcC0+cmVzdG9yZSgpOwpAQCAtNDcwLDEyICs0NzAsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRz
LCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHNob3VsZEFudGlhbGlhcyk7CiAgICAgaWYgKG1fZGF0YS0+aGFzU2hh
ZG93KCkpIHsKICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRh
LT5zaGFkb3cub2Zmc2V0KTsKKyAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9m
ZnNldCgpKTsKICAgICAgICAgaWYgKHAtPmJydXNoKCkuc3R5bGUoKSAhPSBRdDo6Tm9CcnVzaCkK
LSAgICAgICAgICAgIHAtPnNldEJydXNoKFFCcnVzaChtX2RhdGEtPnNoYWRvdy5jb2xvcikpOwor
ICAgICAgICAgICAgcC0+c2V0QnJ1c2goUUJydXNoKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsK
ICAgICAgICAgUVBlbiBwZW4ocC0+cGVuKCkpOwogICAgICAgICBpZiAocGVuLnN0eWxlKCkgIT0g
UXQ6Ok5vUGVuKSB7Ci0gICAgICAgICAgICBwZW4uc2V0Q29sb3IobV9kYXRhLT5zaGFkb3cuY29s
b3IpOworICAgICAgICAgICAgcGVuLnNldENvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpOwog
ICAgICAgICAgICAgcC0+c2V0UGVuKHBlbik7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZHJhd0Nv
bnZleFBvbHlnb24ocG9seWdvbik7CkBAIC01MTksOSArNTE5LDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKCkKICAgICBwYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxs
UnVsZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewotICAgICAgICBwLT50
cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KTsKLSAgICAgICAgcC0+ZmlsbFBhdGgocGF0
aCwgbV9kYXRhLT5zaGFkb3cuY29sb3IpOwotICAgICAgICBwLT50cmFuc2xhdGUoLW1fZGF0YS0+
c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZz
ZXQoKSk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5t
X2NvbG9yKSk7CisgICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkp
OwogICAgIH0KICAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSBhZmZpbmU7CkBAIC01NDcsMTEgKzU0NywxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgcGF0aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1
bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKLSAgICAg
ICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5z
bGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBl
bik7Ci0gICAgICAgIHNoYWRvd1Blbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRvdy5jb2xvcik7Cisg
ICAgICAgIHNoYWRvd1Blbi5zZXRDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKTsKICAgICAg
ICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBzaGFkb3dQZW4pOwotICAgICAgICBwLT50cmFuc2xhdGUo
LW1fZGF0YS0+c2hhZG93Lm9mZnNldCk7CisgICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5z
aGFkb3cub2Zmc2V0KCkpOwogICAgIH0KICAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBh
dHRlcm4pIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKQEAgLTY1Myw3ICs2NTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgZHJhd1JlcGVhdFBh
dHRlcm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX2NvbW1vbi0+c3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5y
ZXBlYXRZKCkpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW4pOwotICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+Y29sb3IpOworICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9j
b2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHApOwogICAgICAgICB9
CiAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHAsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9j
b21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fY29tbW9uLT5zdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WSgpKTsKQEAgLTY2NCwxMyArNjY0LDEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdCwgYnJ1c2gpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW4pOwotICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+Y29sb3IpOwor
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRv
dy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHApOwogICAg
ICAgICB9CiAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAg
IGlmIChzaGFkb3ctPnR5cGUgPT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAgICAg
ICAgICAgaWYgKHNoYWRvdy0+bV90eXBlID09IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsK
ICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihwLCBub3JtYWxpemVkUmVjdCk7CiAgICAgICAgICAgICAgICAgaWYgKHNoYWRv
d1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QsIHAtPmJydXNoKCkpOwpAQCAtNjc5LDkgKzY3OSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNvbGlkIHJlY3RhbmdsZSBmaWxsIHdpdGgg
bm8gYmx1ciBzaGFkb3cgY2FuIGJlIGRvbmUgZmFzdGVyCiAgICAgICAgICAgICAgICAgLy8gd2l0
aG91dCB1c2luZyB0aGUgc2hhZG93IGxheWVyIGF0IGFsbC4KLSAgICAgICAgICAgICAgICBRQ29s
b3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yOworICAgICAgICAgICAgICAgIFFDb2xvciBz
aGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKICAgICAgICAgICAgICAgICBzaGFkb3dDb2xv
ci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxw
aGFGKCkpOwotICAgICAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5z
bGF0ZWQoc2hhZG93LT5vZmZzZXQpLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgcC0+
ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hh
ZG93Q29sb3IpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHAtPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKQEAgLTcwMSwxNCArNzAxLDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTCiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKICAgICAg
ICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwogCi0gICAgICAgIGlm
IChzaGFkb3ctPnR5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAgICAgICBp
ZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgewogICAgICAg
ICAgICAgLy8gV2UgZG8gbm90IG5lZWQgYW55IGxheWVyIGZvciBzaW1wbGUgc2hhZG93LgotICAg
ICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9m
ZnNldCksIHNoYWRvdy0+Y29sb3IpOworICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXpl
ZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93LT5tX2NvbG9yKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKHAsIG5vcm1hbGl6ZWRSZWN0KTsKICAgICAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5j
b2xvcik7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXpl
ZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFk
b3dMYXllcihwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzI1LDkgKzcyNSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmCiAgICAgUGF0aCBwYXRoID0gUGF0aDo6Y3JlYXRlUm91
bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9t
UmlnaHQpOwogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgaWYgKG1fZGF0YS0+
aGFzU2hhZG93KCkpIHsKLSAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNl
dCk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIG1fZGF0YS0+c2hh
ZG93LmNvbG9yKTsKLSAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQp
OworICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAg
ICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cu
bV9jb2xvcikpOworICAgICAgICBwLT50cmFuc2xhdGUoLW1fZGF0YS0+c2hhZG93Lm9mZnNldCgp
KTsKICAgICB9CiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKGNv
bG9yKSk7CiB9CkBAIC04ODQsOSArODg0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QKICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhl
aWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCiAgICAg
ICAgIG1fY29tbW9uLT5zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgp
LCAtc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRv
dyhjb2xvciwgYmx1ciwgc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1f
ZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUu
d2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2RhdGEt
PnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwg
Ymx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwogICAgIH0KIH0K
IAo=
</data>
<flag name="review"
          id="57912"
          type_id="1"
          status="+"
          setter="ariya.hidayat"
    />
          </attachment>
      

    </bug>

</bugzilla>