<?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>56431</bug_id>
          
          <creation_ts>2011-03-15 17:09:25 -0700</creation_ts>
          <short_desc>Add support for preserveDrawingBuffer context creation attribute</short_desc>
          <delta_ts>2011-03-22 20:25:20 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="John Bauman">jbauman</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jamesr</cc>
    
    <cc>jbauman</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>368056</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-15 17:09:25 -0700</bug_when>
    <thetext>The preserveDrawingBuffer context creation attribute is currently unimplemented, causing WebGL conformance suite failures. The preserveDrawingBuffer=false behavior needs to be properly supported, which requires that operations against a WebGL-rendered canvas like toDataURL, readPixels, drawImage and texImage2D return transparent black once the canvas&apos;s contents have been presented to the compositor. The current behavior, which matches preserveDrawingBuffer=true, also needs to be officially supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369475</commentid>
    <comment_count>1</comment_count>
      <attachid>86130</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-17 20:09:53 -0700</bug_when>
    <thetext>Created attachment 86130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369905</commentid>
    <comment_count>2</comment_count>
      <attachid>86130</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-18 14:44:37 -0700</bug_when>
    <thetext>Comment on attachment 86130
Patch

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

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:293
&gt; +        WebGLRenderingContext* ctx = static_cast&lt;WebGLRenderingContext*&gt;(m_context.get());
&gt; +
&gt; +        ctx-&gt;markLayerComposited();

Odd to not just do this cast inline.  Then you don&apos;t need the extra lines or { }

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:315
&gt; +        // The buffer contains the last presented data, so save a
&gt; +        // copy of it.

We don&apos;t wrap to 80c in webkit.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:505
&gt; +    if (m_context-&gt;layerComposited() &amp;&amp; !m_layerCleared
&gt; +        &amp;&amp; !getContextAttributes()-&gt;preserveDrawingBuffer()) {

Seems we could early-return here instead, no?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:512
&gt; +            m_context-&gt;clearColor(m_colorMask[0] ? m_currentClearColor[0] : 0.0f,

Isn&apos;t there a clearer way to write this?  Using a Color object perhaps?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:517
&gt; +            m_context-&gt;clearColor(0.0f, 0.0f, 0.0f, 0.0f);

Do these really need to be 0.0f instead of 0?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:531
&gt; +        m_context-&gt;clearColor(m_currentClearColor[0], m_currentClearColor[1],
&gt; +                              m_currentClearColor[2], m_currentClearColor[3]);

Again, seems long-winded.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:555
&gt; +    clearIfComposited(0);

What&apos;s the 0 mean here?  should it be a default parameter?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt; +    m_currentClearColor[0] = r;
&gt; +    m_currentClearColor[1] = g;
&gt; +    m_currentClearColor[2] = b;
&gt; +    m_currentClearColor[3] = a;

I see, these are GC3DFloat values.  Seems we need a GC3DRGBA class, no?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:450
&gt; +    bool m_layerCleared;
&gt; +    GC3Dfloat m_currentClearColor[4];
&gt; +    bool m_scissorEnabled;

You might want to keep the bools together for possible future bitfield usage.  I&apos;m not sure it maters, and I am not sure we&apos;ll ever have very many of these object either.  Just noting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369925</commentid>
    <comment_count>3</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-18 15:00:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 86130 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86130&amp;action=review
&lt;snip&gt;
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:512
&gt; &gt; +            m_context-&gt;clearColor(m_colorMask[0] ? m_currentClearColor[0] : 0.0f,
&gt; 
&gt; Isn&apos;t there a clearer way to write this?  Using a Color object perhaps?
&gt; 
&lt;snip&gt;
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt; &gt; +    m_currentClearColor[0] = r;
&gt; &gt; +    m_currentClearColor[1] = g;
&gt; &gt; +    m_currentClearColor[2] = b;
&gt; &gt; +    m_currentClearColor[3] = a;
&gt; 
&gt; I see, these are GC3DFloat values.  Seems we need a GC3DRGBA class, no?
&gt; 
That would certainly work, although currently this API and those types are based on GL, so I don&apos;t know if we want to add more and make them dissimilar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369947</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-03-18 15:19:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 86130 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86130&amp;action=review
&gt; &lt;snip&gt;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:512
&gt; &gt; &gt; +            m_context-&gt;clearColor(m_colorMask[0] ? m_currentClearColor[0] : 0.0f,
&gt; &gt; 
&gt; &gt; Isn&apos;t there a clearer way to write this?  Using a Color object perhaps?
&gt; &gt; 
&gt; &lt;snip&gt;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt; &gt; &gt; +    m_currentClearColor[0] = r;
&gt; &gt; &gt; +    m_currentClearColor[1] = g;
&gt; &gt; &gt; +    m_currentClearColor[2] = b;
&gt; &gt; &gt; +    m_currentClearColor[3] = a;
&gt; &gt; 
&gt; &gt; I see, these are GC3DFloat values.  Seems we need a GC3DRGBA class, no?
&gt; &gt; 
&gt; That would certainly work, although currently this API and those types are based on GL, so I don&apos;t know if we want to add more and make them dissimilar.

GC3D types should be strictly matching corresponding GL types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369962</commentid>
    <comment_count>5</comment_count>
      <attachid>86130</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-03-18 15:30:52 -0700</bug_when>
    <thetext>Comment on attachment 86130
Patch

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

A few more nits besides Eric&apos;s review.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:417
&gt; +    m_currentClearColor[0] = m_currentClearColor[1] = m_currentClearColor[2] = m_currentClearColor[3] = 0.0f;

Should be 0.  0.0 or 0.0f is against webkit coding style.  Here and a few other places.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:502
&gt; +

Maybe clear depth and/or stentil only these buffers are there?

&gt;&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:979
&gt;&gt; +    m_currentClearColor[3] = a;
&gt; 
&gt; I see, these are GC3DFloat values.  Seems we need a GC3DRGBA class, no?

GC3D types are strictly matching GL types.

&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.h:49
&gt; +    virtual void textureUpdated();

setTextureUpdated()?

&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.h:59
&gt; +    bool m_textureUpdated;

Initialize this member.

&gt; Source/WebKit/chromium/src/GraphicsContext3DInternal.h:281
&gt; +    bool m_layerComposited;

You need to initialize this member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370826</commentid>
    <comment_count>6</comment_count>
      <attachid>86353</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-21 12:30:35 -0700</bug_when>
    <thetext>Created attachment 86353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370984</commentid>
    <comment_count>7</comment_count>
      <attachid>86353</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-21 16:14:30 -0700</bug_when>
    <thetext>Comment on attachment 86353
Patch

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

Overall this looks excellent; thanks for taking care of it. There are a few comments that need to be fixed, and there are a couple of questions about completeness of the logic.

&gt; Source/WebCore/ChangeLog:16
&gt; +        No new tests. It seems difficult to be difficult/impossible to trigger

Grammar: &quot;seems difficult&quot; -&gt; &quot;seems&quot;

&gt; Source/WebCore/ChangeLog:18
&gt; +        an early compositing operation in DumpRenderTree, making this hard to
&gt; +        test automatically. There is a WebGL conformance test for it.

For the record, we might be able to test this automatically by making it a pixel test.

Please also mention the manual testing that was done with this patch. In particular, we should test the following cases:
  - Chromium with normal flags
  - Chromium with --disable-accelerated-compositing
  - Safari on Mac

with the conformance test as well as a few demos.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:531
&gt; +    if (contextAttributes-&gt;stencil())
&gt; +        clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT;

Per Vlad&apos;s email to the WebGL working group, we may need to be careful with the clearing of the stencil buffer. We prefer to use packed a depth stencil renderbuffer in implementations, so we need to make sure that if there&apos;s a stencil buffer attached, even if the user didn&apos;t request it, that we properly clear it here. If this doesn&apos;t already work (perhaps getContextAttributes() is already doing the right thing) then we should at least add a FIXME here.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:481
&gt; +    // Clear if the backbuffer if it was composited since the last operation.

Typo: &quot;Clear if&quot; -&gt; &quot;Clear&quot;.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:1482
&gt; +    // FIXME: Any accelerated compositor needs to be notified of the changes.

What are the consequences of this FIXME for the Safari / Mac port? We definitely do not want to regress that port; it is working well now and needs to continue to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370992</commentid>
    <comment_count>8</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-21 16:20:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 86353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86353&amp;action=review
&gt; 
&gt; Overall this looks excellent; thanks for taking care of it. There are a few comments that need to be fixed, and there are a couple of questions about completeness of the logic.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        No new tests. It seems difficult to be difficult/impossible to trigger
&gt; 
&gt; Grammar: &quot;seems difficult&quot; -&gt; &quot;seems&quot;
Oh, oops
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        an early compositing operation in DumpRenderTree, making this hard to
&gt; &gt; +        test automatically. There is a WebGL conformance test for it.
&gt; 
&gt; For the record, we might be able to test this automatically by making it a pixel test.

Unfortunately, that only does compositing after the test is finished. We need compositing to happen before that for the test to work.
&gt; 
&gt; Please also mention the manual testing that was done with this patch. In particular, we should test the following cases:
&gt;   - Chromium with normal flags
&gt;   - Chromium with --disable-accelerated-compositing
&gt;   - Safari on Mac
&gt; 
&gt; with the conformance test as well as a few demos.

Ok, I&apos;ll mention that those have been tested.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:531
&gt; &gt; +    if (contextAttributes-&gt;stencil())
&gt; &gt; +        clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT;
&gt; 
&gt; Per Vlad&apos;s email to the WebGL working group, we may need to be careful with the clearing of the stencil buffer. We prefer to use packed a depth stencil renderbuffer in implementations, so we need to make sure that if there&apos;s a stencil buffer attached, even if the user didn&apos;t request it, that we properly clear it here. If this doesn&apos;t already work (perhaps getContextAttributes() is already doing the right thing) then we should at least add a FIXME here.

getContextAttributes returns what&apos;s actually been allocated for the context, so it should work properly.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:481
&gt; &gt; +    // Clear if the backbuffer if it was composited since the last operation.
&gt; 
&gt; Typo: &quot;Clear if&quot; -&gt; &quot;Clear&quot;.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:1482
&gt; &gt; +    // FIXME: Any accelerated compositor needs to be notified of the changes.
&gt; 
&gt; What are the consequences of this FIXME for the Safari / Mac port? We definitely do not want to regress that port; it is working well now and needs to continue to do so.

When accelerated compositing is disabled, preserveDrawingBuffer will work correctly. When accelerated compositing is enabled, this code won&apos;t receive any notification that compositing has happened, so it should act exactly the same way it does now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371146</commentid>
    <comment_count>9</comment_count>
      <attachid>86409</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-21 19:21:31 -0700</bug_when>
    <thetext>Created attachment 86409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371626</commentid>
    <comment_count>10</comment_count>
      <attachid>86409</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-22 14:08:20 -0700</bug_when>
    <thetext>Comment on attachment 86409
Patch

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

Looks better. Thanks for getting this working on the Mac. There is one remaining issue which I think should be addressed before committing. Not touching the r? or cq? yet. Please let me know what you think.

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:99
&gt; +    , m_layerComposited(false)

You should really initialize all of the new members: m_internalColorFormat, m_activeTexture and m_boundTexture0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371810</commentid>
    <comment_count>11</comment_count>
      <attachid>86541</attachid>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-22 16:46:31 -0700</bug_when>
    <thetext>Created attachment 86541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371812</commentid>
    <comment_count>12</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-22 16:47:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 86409 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86409&amp;action=review
&gt; 
&gt; Looks better. Thanks for getting this working on the Mac. There is one remaining issue which I think should be addressed before committing. Not touching the r? or cq? yet. Please let me know what you think.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:99
&gt; &gt; +    , m_layerComposited(false)
&gt; 
&gt; You should really initialize all of the new members: m_internalColorFormat, m_activeTexture and m_boundTexture0.

Sure, that definitely can&apos;t hurt. I&apos;ve uploaded a newer fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371815</commentid>
    <comment_count>13</comment_count>
      <attachid>86541</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-22 16:52:11 -0700</bug_when>
    <thetext>Comment on attachment 86541
Patch

Thanks, looks great. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371889</commentid>
    <comment_count>14</comment_count>
      <attachid>86541</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-22 18:24:20 -0700</bug_when>
    <thetext>Comment on attachment 86541
Patch

Clearing flags on attachment: 86541

Committed r81740: &lt;http://trac.webkit.org/changeset/81740&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371890</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-22 18:24:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371934</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 20:09:57 -0700</bug_when>
    <thetext>Why is WebGLLayerChromium::setTextureUpdated() declared virtual?  I see no sign of virtual dispatch being used currently.  Do you intend for this function to be used for other layer types?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371943</commentid>
    <comment_count>17</comment_count>
    <who name="John Bauman">jbauman</who>
    <bug_when>2011-03-22 20:25:20 -0700</bug_when>
    <thetext>Yeah, I was thinking (vaguely) about having other layer types use that, but I guess that since this really only affects WebGL having it be virtual is unnecessary.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86130</attachid>
            <date>2011-03-17 20:09:53 -0700</date>
            <delta_ts>2011-03-21 12:30:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56431-20110317200952.patch</filename>
            <type>text/plain</type>
            <size>27086</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzNhMTE2NzUzNmM4NDQ2
MTEwMWU3ZTc3MDAxODQwMjk4ZTY2MTJkLi43ZTFkZjFhZDVhZDA5ZDVlZTE5ZmI4OTA3Y2Q2YTBm
ZDg2YWFmNmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDMtMTcgIEpvaG4g
QmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHByZXNlcnZlRHJhd2luZ0J1
ZmZlciBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzEKKworICAgICAgICBGb3IgdGhlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGNhc2UsIG9ubHkgcHJlcGFyZSB0aGUgdGV4dHVyZSBpZiBpdAorICAg
ICAgICBoYXMgYmVlbiB1cGRhdGVkIHNpbmNlIHRoZSBsYXN0IGNvbXBvc2l0ZS4gRm9yIHRoZSBu
b24tYWNjZWxlcmF0ZWQgY2FzZSwgbWFrZSBzdXJlIHRvCisgICAgICAgIGdyYWIgYSBjb3B5IG9m
IHRoZSBpbWFnZSBidWZmZXIgYW5kIHBhaW50IGZyb20gdGhhdCBpZiB0aGUgYmFja2J1ZmZlcgor
ICAgICAgICB3b3VsZCBiZSBjbGVhcmVkLgorCisgICAgICAgIEluIGJvdGggY2FzZXMsIG1ha2Ug
c3VyZSB0byBjbGVhciB0aGUgY29udGV4dCdzIGJhY2tidWZmZXIgYmVmb3JlIHRoZQorICAgICAg
ICBmaXJzdCBvcGVyYXRpb24gdGhhdCB1c2VzIGl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
SXQgc2VlbXMgZGlmZmljdWx0IHRvIGJlIGRpZmZpY3VsdC9pbXBvc3NpYmxlIHRvIHRyaWdnZXIK
KyAgICAgICAgYW4gZWFybHkgY29tcG9zaXRpbmcgb3BlcmF0aW9uIGluIER1bXBSZW5kZXJUcmVl
LCBtYWtpbmcgdGhpcyBoYXJkIHRvCisgICAgICAgIHRlc3QgYXV0b21hdGljYWxseS4gVGhlcmUg
aXMgYSBXZWJHTCBjb25mb3JtYW5jZSB0ZXN0IGZvciBpdC4KKworICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjptYWtlUHJlc2Vu
dGF0aW9uQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJQ
cmVzZW50YXRpb25Db3B5KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpwcmVzZXJ2ZURyYXdpbmdCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0QXR0cmlidXRlczo6c2V0UHJlc2VydmVE
cmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklm
Q29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
cmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzOjpBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVy
Q2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQp
OgorCiAyMDExLTAzLTE3ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKaW5kZXggNjQ2MWRiNmI0YzViMjgyOTYyMDVlNzQ2MDViYTJhOTk1YWU5NzAwOS4u
MGRkNmVkYzRiZWIwNzMzYThiNmU2NGFmYzUwMjBkNThjMzNlMWJiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTI3NywxNSArMjc3LDI1IEBAIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcikKICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlcikgewotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyLT5kcmF3c1VzaW5nQ29weSgpKQor
ICAgICAgICAgICAgaWYgKG1fcHJlc2VudGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IHIpOworICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkp
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwg
cik7CiAgICAgICAgIH0KICAgICB9Ci19CiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAorICAgIGlm
IChpczNEKCkpIHsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHggPSBzdGF0aWNf
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworCisgICAgICAg
IGN0eC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgRU5B
QkxFKFdFQkdMKQogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKTsKQEAgLTI5OCw2ICszMDgsMjAg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUo
KQogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9
CiAKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6Om1ha2VQcmVzZW50YXRpb25Db3B5KCkKK3sKKyAg
ICBpZiAoIW1fcHJlc2VudGVkSW1hZ2UpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250YWlu
cyB0aGUgbGFzdCBwcmVzZW50ZWQgZGF0YSwgc28gc2F2ZSBhCisgICAgICAgIC8vIGNvcHkgb2Yg
aXQuCisgICAgICAgIG1fcHJlc2VudGVkSW1hZ2UgPSBidWZmZXIoKS0+Y29weUltYWdlKCk7Cisg
ICAgfQorfQorCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhclByZXNlbnRhdGlvbkNvcHko
KQoreworICAgIG1fcHJlc2VudGVkSW1hZ2UuY2xlYXIoKTsKK30KKwogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6YXR0YWNoKCkKIHsKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggODcwNmM2YjExMjE1MDIxZTEyZGJj
ZWY3YWU5ZWQxMzVmNjQwYWM0OC4uZjhjYzg5NDk3OGE4ZjE0OTc3YjRhOWEwMGI2ZDBlMjYzOWRh
YTgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTA3LDYg
KzEwNyw4IEBAIHB1YmxpYzoKICAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2
b2lkIGNsZWFyQ29waWVkSW1hZ2UoKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKCk7CisgICAgdm9pZCBtYWtlUHJlc2VudGF0aW9uQ29weSgpOworICAgIHZvaWQgY2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZp
Y2UoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRv
RGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHByaXZh
dGU6CiAgICAgbXV0YWJsZSBib29sIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFi
bGUgT3duUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIAorICAgIG11dGFibGUg
UmVmUHRyPEltYWdlPiBtX3ByZXNlbnRlZEltYWdlOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdl
PiBtX2NvcGllZEltYWdlOyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3Jt
cyB0aGF0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBD
U1NDYW52YXNWYWx1ZSkuCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCmluZGV4IDZhNDdlYTkyM2I1MTVlM2RhMjJl
MzczNzI0ZDFhNGE5OGI4YjA3OGUuLmUzNmUwNGVmMDU2NzkwZGQyZjA4OTNmMWU3OTY3M2Y0Mzg1
ZDkyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0xMDcsNiArMTA3LDE2IEBAIHZvaWQgV2ViR0xDb250ZXh0
QXR0cmlidXRlczo6c2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhh
KQogICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOwog
fQogCitib29sIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OnByZXNlcnZlRHJhd2luZ0J1ZmZlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyOworfQor
Cit2b2lkIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihi
b29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKK3sKKyAgICBtX2F0dHJzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciA9IHByZXNlcnZlRHJhd2luZ0J1ZmZlcjsKK30KKwogR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgV2ViR0xDb250ZXh0QXR0cmlidXRlczo6YXR0cmlidXRlcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fYXR0cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgKaW5kZXggYTEwODYwNTJkMzk3MmNkYjI5NzE4ZmVl
NWYwNjIzY2IxOTMzNzBjZC4uNTM5MWEyYjdkMDU2ZDc2YmQwZDNmOGU4ZjM2YThkYmU4YmQ3Nzli
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuaApAQCAtNjUsNiArNjUsMTEgQEAgY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRl
cyA6IHB1YmxpYyBDYW52YXNDb250ZXh0QXR0cmlidXRlcyB7CiAgICAgYm9vbCBwcmVtdWx0aXBs
aWVkQWxwaGEoKSBjb25zdDsKICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHBy
ZW11bHRpcGxpZWRBbHBoYSk7CiAKKyAgICAvLyBXaGV0aGVyIG9yIG5vdCB0byBwcmVzZXJ2ZSB0
aGUgZHJhd2luZyBidWZmZXIgYWZ0ZXIgcHJlc2VudGF0aW9uIHRvIHRoZQorICAgIC8vIHNjcmVl
bjsgZGVmYXVsdD1mYWxzZQorICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYm9vbCk7CisKICAgICAvLyBGZXRj
aGVzIGEgY29weSBvZiB0aGUgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhpcyBvYmplY3QgaW4gYQog
ICAgIC8vIGZvcm0gdGhhdCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGEgR3JhcGhpY3NDb250
ZXh0M0QuCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmlkbAppbmRleCAwZmEwYzJjMTZhOWU5Zjg0YzcwZjE4ZTk5NjBmOGVmNDA1ZTE1
NmZkLi41NmRhMWM2MWVlZDI5YTVmOGMzZGU4YTBjOWMzMWQxYjNkNmEyMzMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlk
bApAQCAtMzQsNSArMzQsNiBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBib29s
ZWFuIHN0ZW5jaWw7CiAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGFudGlhbGlhczsKICAgICAg
ICAgYXR0cmlidXRlIGJvb2xlYW4gcHJlbXVsdGlwbGllZEFscGhhOworICAgICAgICBhdHRyaWJ1
dGUgYm9vbGVhbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4
IGNiNDUxY2JhMzYzM2ZmY2E1NmEzNDg5NDlmNDMwMjVlOTVmZDJkOTEuLjEzZjAxY2FkYTc1NjFk
YzUxMWNhMWQxZWQ4NmZkMjdiMGViNWQ1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNDEyLDYgKzQxMiwxMyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAg
IG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZG
RkZGRkY7CiAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xh
eWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIAorICAgIG1fY3VycmVudENsZWFyQ29sb3JbMF0gPSBt
X2N1cnJlbnRDbGVhckNvbG9yWzFdID0gbV9jdXJyZW50Q2xlYXJDb2xvclsyXSA9IG1fY3VycmVu
dENsZWFyQ29sb3JbM10gPSAwLjBmOworICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBtX2NsZWFyRGVwdGggPSAxLjA7CisgICAgbV9jbGVhclN0ZW5jaWwgPSAwOworICAgIG1fY29s
b3JNYXNrWzBdID0gbV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNr
WzNdID0gdHJ1ZTsKIAogICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9
IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsKQEAgLTQ3Miw2ICs0NzksOCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRl
cmluZ0NvbnRleHQoKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRD
aGFuZ2VkKCkKIHsKKyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwogICAgIGlm
IChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIo
KS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQpAQCAtNDg2LDkgKzQ5NSw2NSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKICAgICBtX21hcmtl
ZENhbnZhc0RpcnR5ID0gdHJ1ZTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpIAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGNvbWJpbmVkQ2xlYXIg
PSBmYWxzZTsKKyAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9sYXll
ckNsZWFyZWQKKyAgICAgICAgJiYgIWdldENvbnRleHRBdHRyaWJ1dGVzKCktPnByZXNlcnZlRHJh
d2luZ0J1ZmZlcigpKSB7CisgICAgICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRv
IGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvcgorICAgICAgICAvLyBhbmQgdGhp
cyBjbGVhci4KKyAgICAgICAgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJs
ZWQ7CisKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY3VycmVudENsZWFyQ29sb3JbMF0gOiAwLjBmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jdXJy
ZW50Q2xlYXJDb2xvclsxXSA6IDAuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jb2xvck1hc2tbMl0gPyBtX2N1cnJlbnRDbGVhckNvbG9yWzJdIDogMC4wZiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1szXSA/IG1fY3VycmVudENs
ZWFyQ29sb3JbM10gOiAwLjBmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0
LT5jbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworICAgICAgICBtX2NvbnRleHQt
PmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgaWYgKCFjb21iaW5l
ZENsZWFyIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKSkK
KyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKKyAgICAgICAgaWYgKCFj
b21iaW5lZENsZWFyIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZF
Ul9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAg
IG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisKKyAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgICAgIGlmICht
X3NjaXNzb3JFbmFibGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KG1fY3VycmVudENsZWFyQ29sb3JbMF0sIG1fY3VycmVudENsZWFyQ29sb3JbMV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRDbGVhckNvbG9yWzJdLCBtX2N1cnJlbnRD
bGVhckNvbG9yWzNdKTsKKyAgICAgICAgbV9jb250ZXh0LT5jb2xvck1hc2sobV9jb2xvck1hc2tb
MF0sIG1fY29sb3JNYXNrWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
bV9jbGVhckRlcHRoKTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0
ZW5jaWwpOworICAgICAgICBtX2xheWVyQ2xlYXJlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJr
TGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKCkKIHsKLSAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpCisgICAgLy8gVW50
aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFy
IHRoYXQKKyAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUg
aWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBv
c2l0ZWQoKSAmJiAhZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS0+cHJlc2VydmVEcmF3aW5nQnVmZmVy
KCkpCisgICAgICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOworICAgIGVsc2UK
KyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAgIGNsZWFySWZD
b21wb3NpdGVkKDApOworICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNs
ZWFyZWQpCiAgICAgICAgIHJldHVybjsKICAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgp
OwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKQEAgLTQ5Nyw2ICs1NjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KQogCiBQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCiB7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoMCk7
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
KTsKIH0KIApAQCAtODkwLDcgKzk1Niw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
bGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAg
aWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhciht
YXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTkwNiw2
ICs5NzMsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZs
b2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MKICAgICAgICAgYiA9IDA7CiAgICAg
aWYgKGlzbmFuKGEpKQogICAgICAgICBhID0gMTsKKyAgICBtX2N1cnJlbnRDbGVhckNvbG9yWzBd
ID0gcjsKKyAgICBtX2N1cnJlbnRDbGVhckNvbG9yWzFdID0gZzsKKyAgICBtX2N1cnJlbnRDbGVh
ckNvbG9yWzJdID0gYjsKKyAgICBtX2N1cnJlbnRDbGVhckNvbG9yWzNdID0gYTsKICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KQEAgLTkxNCw2ICs5ODUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVwdGgpCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3QoKSkKICAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJEZXB0aCA9IGRlcHRoOwogICAgIG1f
Y29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTkyMiw2ICs5OTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwogICAgIG1fY29udGV4dC0+
Y2xlYXJTdGVuY2lsKHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CkBAIC05MzAsNiArMTAwMywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JN
YXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0RibwogewogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9
IHJlZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0g
Ymx1ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwogICAgIG1fY29udGV4dC0+Y29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQpAQCAtMTIzOSw2ICsxMzE2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkg
fHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47CisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE0ODQsNiArMTU2Myw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjbGVhcklm
Q29tcG9zaXRlZCgwKTsKKwogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNl
OwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2lt
dWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKQEAgLTE1
NTUsNiArMTYzNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51CiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgwKTsKIAogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwogICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CkBAIC0xNTc2LDYgKzE2NTgsOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKICAgICAgICAgcmV0dXJu
OworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICAg
ICAgbV9zY2lzc29yRW5hYmxlZCA9IHRydWU7CiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjc1Nyw2ICsyODQx
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKDApOwogICAgIHZvaWQqIGRh
dGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CiAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiAjaWYgT1MoREFSV0lOKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aAppbmRleCA2Yjg4NWQ5MmVkOTFiNDVhNGI0M2M2ZTFjNWRmMTBhYjczN2YyNWYwLi5kNTY4YTc4
NjY3OWY0YmM5NTMyZDhkZGZhNGU0ZTEzM2Q1M2E4YjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMjg1LDYgKzI4NSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
CisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIApAQCAtNDQ0LDYgKzQ0
NSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2NvbnRleHRMb3N0OwogICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKIAorICAgIGJvb2wgbV9sYXllckNsZWFy
ZWQ7CisgICAgR0MzRGZsb2F0IG1fY3VycmVudENsZWFyQ29sb3JbNF07CisgICAgYm9vbCBtX3Nj
aXNzb3JFbmFibGVkOworICAgIEdDM0RmbG9hdCBtX2NsZWFyRGVwdGg7CisgICAgR0MzRGludCBt
X2NsZWFyU3RlbmNpbDsKKyAgICBHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKKwogICAgIGxv
bmcgbV9zdGVuY2lsQml0czsKICAgICBHQzNEdWludCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxN
YXNrQmFjazsKICAgICBHQzNEaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5v
dCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KQEAgLTQ3MCw2ICs0NzgsOCBAQCBwdWJsaWM6
CiAgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7
CiAgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOwog
CisgICAgYm9vbCBjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzayk7CisKICAgICB2
b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGNmYzRkYTYzNjg3ZWYzZWYzZTA3OTliZmMzOTljY2Qy
YTdhZTViZDMuLmNmZGE3NzdmYmQ3NWNkMzg0MmJjMmEwOGY1ZjRlZTU4NmU3ZTE0NGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtNDIwLDYgKzQyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgYW50aWFsaWFz
KHRydWUpCiAgICAgICAgICAgICAsIHByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQogICAgICAgICAg
ICAgLCBjYW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzKHRydWUpCisgICAgICAgICAgICAsIHByZXNl
cnZlRHJhd2luZ0J1ZmZlcihmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQyOSw2
ICs0MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgYW50aWFsaWFzOwogICAgICAgICBib29s
IHByZW11bHRpcGxpZWRBbHBoYTsKICAgICAgICAgYm9vbCBjYW5SZWNvdmVyRnJvbUNvbnRleHRM
b3NzOworICAgICAgICBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjsKICAgICB9OwogCiAgICAg
ZW51bSBSZW5kZXJTdHlsZSB7CkBAIC03NTYsNiArNzU4LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRl
eHRSZWYgY29udGV4dCk7CiAjZW5kaWYKIAorICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7
CisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgYm9vbCBsYXllckNvbXBvc2l0
ZWQoKSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAKQEAgLTg4OCw2ICs4OTQsNyBA
QCBwdWJsaWM6CiAgICAgR0MzRHVpbnQgbV90ZXh0dXJlOwogICAgIEdDM0R1aW50IG1fZmJvOwog
ICAgIEdDM0R1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOworICAgIGJvb2wgbV9sYXllckNvbXBv
c2l0ZWQ7CiAKICAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCiAgICAgR0Mz
RHVpbnQgbV9ib3VuZEZCTzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGU4
M2QwNDU2YTVjNWVhNTgyYmZhNzFhNGJkNzc0ZGM2N2UwZTg3NTcuLmYxZjY5ZjZhYTllN2EwY2Zj
M2M1YjIxZTgyNzgzNjM2MTZhYjhkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNw
cApAQCAtNjgsMTkgKzY4LDI4IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQog
ICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUgY29t
cG9zaXRvci4KLSAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgaWYgKG1fY29udGVudHNE
aXJ0eSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZVRl
eHR1cmUoKTsKKyAgICAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAgICAg
ICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgICAgICBtX3RleHR1cmVVcGRhdGVkID0g
ZmFsc2U7CiAgICAgfQogfQogCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0
ZWQoKQoreworICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOworfQorCiB2b2lkIFdlYkdMTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
IHsKICAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4
dCk7CiAKICAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0Zm9ybVRl
eHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKQorICAgIGlmICh0ZXh0
dXJlSWQgIT0gbV90ZXh0dXJlSWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7
CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOworICAgIH0KICAgICBtX3RleHR1cmVJ
ZCA9IHRleHR1cmVJZDsKICAgICBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IG1fY29udGV4dC0+Z2V0
Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDcwYmU4NzY5MjgzNDZhZTQ2MzQ4NTg5ZjFlYjVlZmI2ZjczODQ0
OWQuLjk0MTZjYTcxZGE4YjAxMGRkZWEwZjVmNGZjZTBkZjI5MWMxNWViMzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGly
dHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4dHVyZVVwZGF0ZWQoKTsKIAogICAgIHZvaWQgc2V0
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CiAKQEAgLTU1LDYgKzU2
LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJHTExheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IG1fY29udGV4dDsKKyAgICBib29sIG1fdGV4dHVyZVVwZGF0ZWQ7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAyNTQ3YjUzNGZmMDY1Y2RkZDUyZDc0
ZGFhMmFhYjc5M2QzNjRiZGZlLi45Zjg1NTJlYmYxNzc2OWU4YTdhMWJjZmE2ZjhjN2I0ZGY0ZTI5
ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTE0NzcsNiAr
MTQ3NywyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNE
ZW51bSBlcnJvcikKICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIC8vIEZJWE1F
OiBBbnkgYWNjZWxlcmF0ZWQgY29tcG9zaXRvciBuZWVkcyB0byBiZSBub3RpZmllZCBvZiB0aGUg
Y2hhbmdlcy4KKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9z
aXRlZCA9IHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCiBFeHRlbnNp
b25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKIHsKICAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggYWYxNTNhOTM3M2M0OWU4YjEy
YzM0YzRkZTliYWEzZTk5M2QwYzk0Yi4uNjZiYWNhOTFlZjhhNzk0Y2ZjZTIyNGZiMDliOTI4YTFl
OTU3M2FhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTI2MCw2ICsyNjAsNyBAQCBwdWJs
aWM6CiAgICAgR0x1aW50IG1fY3VycmVudEZibzsKICAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsK
ICAgICBRSW1hZ2UgbV9waXhlbHM7CisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKICAgICBM
aXN0SGFzaFNldDx1bnNpZ25lZCBpbnQ+IG1fc3ludGhldGljRXJyb3JzOwogCiAgICAgT3duUHRy
PEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CkBAIC0yOTQsNiArMjk1LDcgQEAgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXQKICAgICAsIG1fbWFpbkZibygwKQogICAgICwgbV9jdXJyZW50RmJv
KDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxz
ZSkKICAgICAsIG1fY29udGV4dFZhbGlkKHRydWUpCiB7CiAgICAgUGFnZUNsaWVudFFXaWRnZXQq
IHdlYlBhZ2VDbGllbnQKQEAgLTE2MjksNiArMTYzMSwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKICAgICBtX2ludGVybmFsLT5t
X3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2xheWVyQ29tcG9z
aXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hh
bmdlZCgpCit7CisgICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3NpdG9yIG5lZWRz
IHRvIGJlIHRvbGQgdG8gcmUtcmVhZCBmcm9tIGhlcmUuCisgICAgbV9pbnRlcm5hbC0+bV9sYXll
ckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJD
b21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9sYXllckNvbXBv
c2l0ZWQ7Cit9CisKIEV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lv
bnMoKQogewogICAgIGlmICghbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBlMTQzMmYxOWViNzY5OGQ5MDBjNzhmY2M5NWYwNmRhYzZhNWM3Mzcz
Li40NTg5MzU3YzcwMWExYjhhMmE2M2RjODJiOTU1NWQyYzdmZjFiNWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE3ICBKb2huIEJhdW1hbiAg
PGpiYXVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgY29u
dGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU2NDMxCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL0dy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xNyAgQWRyaWVubmUgV2Fsa2Vy
ICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRENocm9taXVtLmNwcAppbmRleCA4ZDEyYzRkNTFlNTU2ZjBjZTMyZWIzNjNlZDcxODg1MGQz
NTdmOGE2Li5iMGE4Y2YxOWFhMTRlZTI0N2Y2M2E0MTU1YjQ0NjE2NmI4YmMxZTIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENo
cm9taXVtLmNwcApAQCAtMTYwLDYgKzE2MCwyNCBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogfQogI2VuZGlmCiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgcGxhdGZvcm1MYXllcigpLT50
ZXh0dXJlVXBkYXRlZCgpOworI2VuZGlmCisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYXJrTGF5ZXJDb21wb3NpdGVk
KCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllckNvbXBvc2l0ZWQ7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFz
KCk7CkBAIC0xMDg1LDYgKzExMDMsMTQgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhB
dHRyaWJQb2ludGVyLCBHQzNEdWludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rib28KIAogREVM
RUdBVEVfVE9fSU5URVJOQUxfNCh2aWV3cG9ydCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVp
LCBHQzNEc2l6ZWkpCiAKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKG1hcmtMYXllckNvbXBvc2l0ZWQp
CitERUxFR0FURV9UT19JTlRFUk5BTChtYXJrQ29udGV4dENoYW5nZWQpCisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPmxheWVyQ29tcG9zaXRlZCgpOworfQorCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KikKIERF
TEVHQVRFX1RPX0lOVEVSTkFMX1IocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEsIFBh
c3NSZWZQdHI8SW1hZ2VEYXRhPikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCmluZGV4IGI1MTdlNjBiOGRmOWViZjcx
MmY2NTYyOThmZGQ1NjA1YjhlZDBlYTQuLjBhZjI5MWU5NjMyMjliNmM4NGQ1NzI5ODA0Y2MwYTFj
N2U3NjFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzREludGVybmFsLmgKQEAgLTY2LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBJbnRTaXplIGdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCk7CiAKKyAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwor
ICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CisgICAgdm9pZCBtYXJrTGF5ZXJDb21w
b3NpdGVkKCk7CisKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdDsKQEAgLTI3NCw2ICsyNzgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbml0
aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZW5hYmxl
ZEV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25z
OworICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXll
cjsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86353</attachid>
            <date>2011-03-21 12:30:35 -0700</date>
            <delta_ts>2011-03-21 19:21:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56431-20110321123034.patch</filename>
            <type>text/plain</type>
            <size>29236</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzNhMTE2NzUzNmM4NDQ2
MTEwMWU3ZTc3MDAxODQwMjk4ZTY2MTJkLi43ZTFkZjFhZDVhZDA5ZDVlZTE5ZmI4OTA3Y2Q2YTBm
ZDg2YWFmNmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDMtMTcgIEpvaG4g
QmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHByZXNlcnZlRHJhd2luZ0J1
ZmZlciBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzEKKworICAgICAgICBGb3IgdGhlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGNhc2UsIG9ubHkgcHJlcGFyZSB0aGUgdGV4dHVyZSBpZiBpdAorICAg
ICAgICBoYXMgYmVlbiB1cGRhdGVkIHNpbmNlIHRoZSBsYXN0IGNvbXBvc2l0ZS4gRm9yIHRoZSBu
b24tYWNjZWxlcmF0ZWQgY2FzZSwgbWFrZSBzdXJlIHRvCisgICAgICAgIGdyYWIgYSBjb3B5IG9m
IHRoZSBpbWFnZSBidWZmZXIgYW5kIHBhaW50IGZyb20gdGhhdCBpZiB0aGUgYmFja2J1ZmZlcgor
ICAgICAgICB3b3VsZCBiZSBjbGVhcmVkLgorCisgICAgICAgIEluIGJvdGggY2FzZXMsIG1ha2Ug
c3VyZSB0byBjbGVhciB0aGUgY29udGV4dCdzIGJhY2tidWZmZXIgYmVmb3JlIHRoZQorICAgICAg
ICBmaXJzdCBvcGVyYXRpb24gdGhhdCB1c2VzIGl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
SXQgc2VlbXMgZGlmZmljdWx0IHRvIGJlIGRpZmZpY3VsdC9pbXBvc3NpYmxlIHRvIHRyaWdnZXIK
KyAgICAgICAgYW4gZWFybHkgY29tcG9zaXRpbmcgb3BlcmF0aW9uIGluIER1bXBSZW5kZXJUcmVl
LCBtYWtpbmcgdGhpcyBoYXJkIHRvCisgICAgICAgIHRlc3QgYXV0b21hdGljYWxseS4gVGhlcmUg
aXMgYSBXZWJHTCBjb25mb3JtYW5jZSB0ZXN0IGZvciBpdC4KKworICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjptYWtlUHJlc2Vu
dGF0aW9uQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJQ
cmVzZW50YXRpb25Db3B5KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpwcmVzZXJ2ZURyYXdpbmdCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0QXR0cmlidXRlczo6c2V0UHJlc2VydmVE
cmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklm
Q29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
cmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzOjpBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVy
Q2hyb21pdW06OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQp
OgorCiAyMDExLTAzLTE3ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKaW5kZXggNjQ2MWRiNmI0YzViMjgyOTYyMDVlNzQ2MDViYTJhOTk1YWU5NzAwOS4u
YzkxMTE5NDE2OTkzMWU0MTFkZTVlN2E2MDJjZDEyNDM3YThjNDBjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTI3NywxNSArMjc3LDIyIEBAIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcikKICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1
ZmZlcikgewotICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyLT5kcmF3c1VzaW5nQ29weSgpKQor
ICAgICAgICAgICAgaWYgKG1fcHJlc2VudGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlKG1fcHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IHIpOworICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkp
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIHIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwg
cik7CiAgICAgICAgIH0KICAgICB9Ci19CiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAorICAgIGlm
IChpczNEKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1f
Y29udGV4dC5nZXQoKSktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyNlbmRpZgorfQorCisjaWYg
RU5BQkxFKFdFQkdMKQogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKTsKQEAgLTI5OCw2ICszMDUs
MTkgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFi
bGUoKQogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7
CiB9CiAKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6Om1ha2VQcmVzZW50YXRpb25Db3B5KCkKK3sK
KyAgICBpZiAoIW1fcHJlc2VudGVkSW1hZ2UpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250
YWlucyB0aGUgbGFzdCBwcmVzZW50ZWQgZGF0YSwgc28gc2F2ZSBhIGNvcHkgb2YgaXQuCisgICAg
ICAgIG1fcHJlc2VudGVkSW1hZ2UgPSBidWZmZXIoKS0+Y29weUltYWdlKCk7CisgICAgfQorfQor
Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhclByZXNlbnRhdGlvbkNvcHkoKQoreworICAg
IG1fcHJlc2VudGVkSW1hZ2UuY2xlYXIoKTsKK30KKwogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
YXR0YWNoKCkKIHsKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggODcwNmM2YjExMjE1MDIxZTEyZGJjZWY3YWU5ZWQx
MzVmNjQwYWM0OC4uZjhjYzg5NDk3OGE4ZjE0OTc3YjRhOWEwMGI2ZDBlMjYzOWRhYTgyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNyw4IEBA
IHB1YmxpYzoKICAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFy
Q29waWVkSW1hZ2UoKTsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7
CisgICAgdm9pZCBtYWtlUHJlc2VudGF0aW9uQ29weSgpOworICAgIHZvaWQgY2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CiAKICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAg
bXV0YWJsZSBib29sIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFibGUgT3duUHRy
PEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIAorICAgIG11dGFibGUgUmVmUHRyPElt
YWdlPiBtX3ByZXNlbnRlZEltYWdlOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGll
ZEltYWdlOyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhh
dmUgdG8gY29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNW
YWx1ZSkuCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuY3BwCmluZGV4IDZhNDdlYTkyM2I1MTVlM2RhMjJlMzczNzI0ZDFh
NGE5OGI4YjA3OGUuLmUzNmUwNGVmMDU2NzkwZGQyZjA4OTNmMWU3OTY3M2Y0Mzg1ZDkyYzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJp
YnV0ZXMuY3BwCkBAIC0xMDcsNiArMTA3LDE2IEBAIHZvaWQgV2ViR0xDb250ZXh0QXR0cmlidXRl
czo6c2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKQogICAgIG1f
YXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOwogfQogCitib29s
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OnByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyOworfQorCit2b2lkIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXM6OnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihib29sIHByZXNl
cnZlRHJhd2luZ0J1ZmZlcikKK3sKKyAgICBtX2F0dHJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9
IHByZXNlcnZlRHJhd2luZ0J1ZmZlcjsKK30KKwogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgV2ViR0xDb250ZXh0QXR0cmlidXRlczo6YXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fYXR0cnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgKaW5kZXggYTEwODYwNTJkMzk3MmNkYjI5NzE4ZmVlNWYwNjIzY2Ix
OTMzNzBjZC4uNTM5MWEyYjdkMDU2ZDc2YmQwZDNmOGU4ZjM2YThkYmU4YmQ3NzliYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMu
aApAQCAtNjUsNiArNjUsMTEgQEAgY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlcyA6IHB1Ymxp
YyBDYW52YXNDb250ZXh0QXR0cmlidXRlcyB7CiAgICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEo
KSBjb25zdDsKICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxp
ZWRBbHBoYSk7CiAKKyAgICAvLyBXaGV0aGVyIG9yIG5vdCB0byBwcmVzZXJ2ZSB0aGUgZHJhd2lu
ZyBidWZmZXIgYWZ0ZXIgcHJlc2VudGF0aW9uIHRvIHRoZQorICAgIC8vIHNjcmVlbjsgZGVmYXVs
dD1mYWxzZQorICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoYm9vbCk7CisKICAgICAvLyBGZXRjaGVzIGEgY29w
eSBvZiB0aGUgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhpcyBvYmplY3QgaW4gYQogICAgIC8vIGZv
cm0gdGhhdCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGEgR3JhcGhpY3NDb250ZXh0M0QuCiAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmlkbAppbmRleCAwZmEwYzJjMTZhOWU5Zjg0YzcwZjE4ZTk5NjBmOGVmNDA1ZTE1NmZkLi41NmRh
MWM2MWVlZDI5YTVmOGMzZGU4YTBjOWMzMWQxYjNkNmEyMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbApAQCAtMzQs
NSArMzQsNiBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIHN0ZW5j
aWw7CiAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGFudGlhbGlhczsKICAgICAgICAgYXR0cmli
dXRlIGJvb2xlYW4gcHJlbXVsdGlwbGllZEFscGhhOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVh
biBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNiNDUxY2Jh
MzYzM2ZmY2E1NmEzNDg5NDlmNDMwMjVlOTVmZDJkOTEuLjhlYjIwZGQ2OTE2NWU4M2M0MDYyZTMy
M2U5MmNlZDFiNjE5NzExOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNDEyLDYgKzQxMiwxMyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fc3RlbmNp
bEZ1bmNSZWZCYWNrID0gMDsKICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7CiAg
ICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xheWVyQ2xlYXJl
ZCA9IGZhbHNlOworICAgIAorICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9
IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5h
YmxlZCA9IGZhbHNlOworICAgIG1fY2xlYXJEZXB0aCA9IDEuMDsKKyAgICBtX2NsZWFyU3RlbmNp
bCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNr
WzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwogCiAgICAgR0MzRGludCBudW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwpAQCAtNDcyLDYgKzQ3OSwxMCBAQCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgp
OworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgp
OwogICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJv
eC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQpAQCAtNDg2LDkgKzQ5Nyw2
OSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKICAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpIAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmli
dXRlcygpOworCisgICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5
ZXJDbGVhcmVkCisgICAgICAgIHx8IGNvbnRleHRBdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdpbmdC
dWZmZXIoKSB8fCBtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIg
dGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFyLgorICAgIGJvb2wgY29tYmluZWRDbGVh
ciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CisKKyAgICBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIg
JiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCisgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sxXSA/IG1fY2xl
YXJDb2xvclsxXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFz
a1syXSA/IG1fY2xlYXJDb2xvclsyXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbG9yTWFza1szXSA/IG1fY2xlYXJDb2xvclszXSA6IDApOworICAgIGVsc2UKKyAgICAg
ICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29s
b3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cy0+ZGVwdGgoKSAmJiAoIWNvbWJpbmVkQ2xlYXIgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEu
MGYpOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpICYmICghY29tYmluZWRD
bGVhciB8fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkp
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIEdDM0RiaXRmaWVsZCBj
bGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAo
Y29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkpCisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwoKSkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JVRkZFUl9CSVQ7CisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAg
Ly8gUmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Np
c3NvckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3Jb
MF0sIG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNv
bG9yWzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29s
b3JNYXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nv
bG9yTWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCht
X2NsZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2ls
KTsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVh
cjsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNvbXBvc2l0ZWQo
KQoreworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewot
ICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlz
IHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhh
cHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBj
b21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFnZXRD
b250ZXh0QXR0cmlidXRlcygpLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSkKKyAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgZWxzZQorICAgICAgICBjYW52YXMo
KS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAg
ICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICBy
ZXR1cm47CiAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gZmFsc2U7CkBAIC00OTcsNiArNTY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKIAogUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKQogeworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgcmV0dXJuIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIH0KIApAQCAtODkwLDcg
Kzk2Miw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQg
bWFzaykKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgaWYgKCFjbGVhcklmQ29tcG9z
aXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKQEAgLTkwNiw2ICs5NzksMTAgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBn
LCBHQzNEZmxvYXQgYiwgR0MKICAgICAgICAgYiA9IDA7CiAgICAgaWYgKGlzbmFuKGEpKQogICAg
ICAgICBhID0gMTsKKyAgICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsx
XSA9IGc7CisgICAgbV9jbGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBh
OwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtOTE0LDYgKzk5MSw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVw
dGg7CiAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtOTIyLDYgKzEwMDAsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwogICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CkBAIC05MzAsNiArMTAwOSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
bwogewogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwogICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtOTY0LDYgKzEwNDcsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICBpZiAoaXNSZXNvdXJj
ZVNhZmUoKSkKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBlbHNl
IHsKQEAgLTEwMDcsNiArMTA5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjbGVh
cklmQ29tcG9zaXRlZCgpOwogICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQogICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIGVsc2UgewpAQCAtMTIzOSw2ICsxMzI0LDggQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAg
IGlmIChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAg
ICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KQorICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5kaXNh
YmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE0
ODQsNiArMTU3MSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworCiAgICAgYm9vbCB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAg
ICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3Qg
KyBjb3VudCAtIDEpOwpAQCAtMTU1NSw2ICsxNjQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnUKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11
bGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewpAQCAtMTU3Niw2
ICsxNjY2LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBj
YXApCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNh
cCkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpCisgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwogICAgIG1fY29u
dGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KQEAgLTE2MDIsNyArMTY5NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5p
c2goKQogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Nv
bnRleHQtPmZpbmlzaCgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Zmx1c2goKQpAQCAtMTYxMCw3ICsxNzAyLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZsdXNoKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbCh0cnVlKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJn
ZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjc1
Nyw2ICsyODQ5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAg
dm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKICAgICBtX2NvbnRleHQtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKICNpZiBPUyhE
QVJXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCmluZGV4IDZiODg1ZDkyZWQ5MWI0NWE0YjQzYzZlMWM1ZGYxMGFiNzM3ZjI1ZjAu
LjliYmIwM2QyMGZhMTdhNTliYTdlM2U0NDJkMzhlNGEwNjdiZDQ3MDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yODUs
NiArMjg1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAKKyAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCkBAIC00
NDQsNiArNDQ1LDEzIEBAIHB1YmxpYzoKICAgICBib29sIG1fY29udGV4dExvc3Q7CiAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogCisgICAgYm9vbCBtX2xh
eWVyQ2xlYXJlZDsKKyAgICBHQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOworICAgIGJvb2wgbV9z
Y2lzc29yRW5hYmxlZDsKKyAgICBHQzNEZmxvYXQgbV9jbGVhckRlcHRoOworICAgIEdDM0RpbnQg
bV9jbGVhclN0ZW5jaWw7CisgICAgR0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CisKICAgICBs
b25nIG1fc3RlbmNpbEJpdHM7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2ls
TWFza0JhY2s7CiAgICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVm
QmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBu
b3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCkBAIC00NzAsNiArNDc4LDExIEBAIHB1Ymxp
YzoKICAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVt
KTsKICAgICBXZWJHTEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7
CiAKKyAgICAvLyBDbGVhciBpZiB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBz
aW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUg
Yml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRp
bWUKKyAgICAvLyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlz
IG5vdyB1bm5lY2Vzc2FyeS4KKyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVs
ZCBjbGVhck1hc2sgPSAwKTsKKwogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggY2ZjNGRh
NjM2ODdlZjNlZjNlMDc5OWJmYzM5OWNjZDJhN2FlNWJkMy4uY2ZkYTc3N2ZiZDc1Y2QzODQyYmMy
YTA4ZjVmNGVlNTg2ZTdlMTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00MjAsNiArNDIwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgLCBhbnRpYWxpYXModHJ1ZSkKICAgICAgICAgICAgICwgcHJlbXVsdGlw
bGllZEFscGhhKHRydWUpCiAgICAgICAgICAgICAsIGNhblJlY292ZXJGcm9tQ29udGV4dExvc3Mo
dHJ1ZSkKKyAgICAgICAgICAgICwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKGZhbHNlKQogICAgICAg
ICB7CiAgICAgICAgIH0KIApAQCAtNDI5LDYgKzQzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBhbnRpYWxpYXM7CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhOwogICAgICAgICBi
b29sIGNhblJlY292ZXJGcm9tQ29udGV4dExvc3M7CisgICAgICAgIGJvb2wgcHJlc2VydmVEcmF3
aW5nQnVmZmVyOwogICAgIH07CiAKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKQEAgLTc1Niw2ICs3
NTgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzV2lkdGgs
IGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KTsKICNlbmRpZgogCisgICAg
dm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKKyAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OworCiAgICAgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsK
ICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURh
dGEoKTsKIApAQCAtODg4LDYgKzg5NCw3IEBAIHB1YmxpYzoKICAgICBHQzNEdWludCBtX3RleHR1
cmU7CiAgICAgR0MzRHVpbnQgbV9mYm87CiAgICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXI7CisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKIAogICAgIC8vIEZvciB0cmFja2luZyB3
aGljaCBGQk8gaXMgYm91bmQKICAgICBHQzNEdWludCBtX2JvdW5kRkJPOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZTgzZDA0NTZhNWM1ZWE1ODJiZmE3MWE0YmQ3NzRkYzY3
ZTBlODc1Ny4uN2UzOTUxMjQ5YTFlOThmNTRjMDRmNjQ3NzI3YzcwOWM3ZTU4ZDBkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIFBhc3NSZWZQdHI8
V2ViR0xMYXllckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qCiBXZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bShvd25l
cikKICAgICAsIG1fY29udGV4dCgwKQorICAgICwgbV90ZXh0dXJlVXBkYXRlZChmYWxzZSkKIHsK
IH0KIApAQCAtNjgsMTkgKzY5LDI4IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50c0lmRGlydHkoKQogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gZmFsc2U7CiAgICAg
fQogICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHRleHR1cmUgdXNlZCBieSB0aGUg
Y29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgaWYgKG1fY29udGVu
dHNEaXJ0eSAmJiBtX3RleHR1cmVVcGRhdGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+cHJlcGFy
ZVRleHR1cmUoKTsKKyAgICAgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiAg
ICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgICAgICBtX3RleHR1cmVVcGRhdGVk
ID0gZmFsc2U7CiAgICAgfQogfQogCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVy
ZVVwZGF0ZWQoKQoreworICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOworfQorCiB2b2lkIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4o
Y29udGV4dCk7CiAKICAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5wbGF0
Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKQorICAgIGlm
ICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9
IHRydWU7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOworICAgIH0KICAgICBtX3Rl
eHR1cmVJZCA9IHRleHR1cmVJZDsKICAgICBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IG1fY29udGV4
dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGE7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcwYmU4NzY5MjgzNDZhZTQ2MzQ4NTg5ZjFlYjVlZmI2
ZjczODQ0OWQuLmY5M2M5NzAzZGM5YTc5YWZmNmJmMzIwYTg3MWMyZjA5ODhiODhjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZVVwZGF0ZWQoKTsKIAogICAg
IHZvaWQgc2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CiAKQEAg
LTU1LDYgKzU2LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJHTExh
eWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBib29sIG1fdGV4dHVyZVVwZGF0ZWQ7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAyNTQ3YjUzNGZmMDY1
Y2RkZDUyZDc0ZGFhMmFhYjc5M2QzNjRiZGZlLi45Zjg1NTJlYmYxNzc2OWU4YTdhMWJjZmE2Zjhj
N2I0ZGY0ZTI5ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAg
LTE0NzcsNiArMTQ3NywyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xF
cnJvcihHQzNEZW51bSBlcnJvcikKICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAg
IC8vIEZJWE1FOiBBbnkgYWNjZWxlcmF0ZWQgY29tcG9zaXRvciBuZWVkcyB0byBiZSBub3RpZmll
ZCBvZiB0aGUgY2hhbmdlcy4KKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVy
Q29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQor
CiBFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKIHsKICAg
ICBpZiAoIW1fZXh0ZW5zaW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggYWYxNTNhOTM3
M2M0OWU4YjEyYzM0YzRkZTliYWEzZTk5M2QwYzk0Yi4uNjZiYWNhOTFlZjhhNzk0Y2ZjZTIyNGZi
MDliOTI4YTFlOTU3M2FhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTI2MCw2ICsyNjAs
NyBAQCBwdWJsaWM6CiAgICAgR0x1aW50IG1fY3VycmVudEZibzsKICAgICBHTHVpbnQgbV9kZXB0
aEJ1ZmZlcjsKICAgICBRSW1hZ2UgbV9waXhlbHM7CisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRl
ZDsKICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBpbnQ+IG1fc3ludGhldGljRXJyb3JzOwogCiAg
ICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CkBAIC0yOTQsNiArMjk1LDcg
QEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXQKICAgICAsIG1fbWFpbkZibygwKQogICAgICwgbV9j
dXJyZW50RmJvKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2xheWVyQ29tcG9z
aXRlZChmYWxzZSkKICAgICAsIG1fY29udGV4dFZhbGlkKHRydWUpCiB7CiAgICAgUGFnZUNsaWVu
dFFXaWRnZXQqIHdlYlBhZ2VDbGllbnQKQEAgLTE2MjksNiArMTYzMSwyMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKICAgICBtX2lu
dGVybmFsLT5tX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtD
b250ZXh0Q2hhbmdlZCgpCit7CisgICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3Np
dG9yIG5lZWRzIHRvIGJlIHRvbGQgdG8gcmUtcmVhZCBmcm9tIGhlcmUuCisgICAgbV9pbnRlcm5h
bC0+bV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9s
YXllckNvbXBvc2l0ZWQ7Cit9CisKIEV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEV4dGVuc2lvbnMoKQogewogICAgIGlmICghbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlMTQzMmYxOWViNzY5OGQ5MDBjNzhmY2M5NWYwNmRh
YzZhNWM3MzczLi40NTg5MzU3YzcwMWExYjhhMmE2M2RjODJiOTU1NWQyYzdmZjFiNWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE3ICBKb2hu
IEJhdW1hbiAgPGpiYXVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBwcmVzZXJ2ZURyYXdpbmdC
dWZmZXIgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDMxCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3ND
b250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xNyAgQWRyaWVu
bmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVz
IFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhp
Y3NDb250ZXh0M0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAppbmRleCA4ZDEyYzRkNTFlNTU2ZjBjZTMyZWIzNjNl
ZDcxODg1MGQzNTdmOGE2Li41NGMxOGUzNTdiZmEyZmM4M2NlYTQyMDM3ZTUwNmNiYTE2ZTVjN2E3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzRENocm9taXVtLmNwcApAQCAtODIsNiArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKCkK
ICAgICA6IG1fd2ViVmlld0ltcGwoMCkKICAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRl
bnNpb25zKGZhbHNlKQorICAgICwgbV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCiAjaWYgVVNFKFNL
SUEpCiAjZWxpZiBQTEFURk9STShDRykKICAgICAsIG1fcmVuZGVyT3V0cHV0KDApCkBAIC0xNjAs
NiArMTYxLDI0IEBAIFdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBwbGF0Zm9ybUxheWVyKCktPnNldFRleHR1cmVVcGRhdGVkKCk7
CisjZW5kaWYKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRl
ZDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKQEAgLTEwODUsNiAr
MTEwNCwxNCBAQCBERUxFR0FURV9UT19JTlRFUk5BTF82KHZlcnRleEF0dHJpYlBvaW50ZXIsIEdD
M0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvbwogCiBERUxFR0FURV9UT19JTlRFUk5B
TF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAor
REVMRUdBVEVfVE9fSU5URVJOQUwobWFya0xheWVyQ29tcG9zaXRlZCkKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMKG1hcmtDb250ZXh0Q2hhbmdlZCkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5
ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bGF5ZXJDb21w
b3NpdGVkKCk7Cit9CisKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJO
QUxfUihwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURh
dGE+KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzREludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzREludGVybmFsLmgKaW5kZXggYjUxN2U2MGI4ZGY5ZWJmNzEyZjY1NjI5OGZkZDU2MDVi
OGVkMGVhNC4uMGFmMjkxZTk2MzIyOWI2Yzg0ZDU3Mjk4MDRjYzBhMWM3ZTc2MWM0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaApAQCAtNjYsNiArNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwogICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKTsKIAorICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgYm9vbCBsYXllckNv
bXBvc2l0ZWQoKSBjb25zdDsKKyAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKwogICAg
IHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCopOwogICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0lt
YWdlRGF0YSgpOwogICAgIGJvb2wgcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwpAQCAt
Mjc0LDYgKzI3OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7CisgICAgYm9vbCBtX2xh
eWVyQ29tcG9zaXRlZDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUmVm
UHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gbV9jb21wb3NpdGluZ0xheWVyOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86409</attachid>
            <date>2011-03-21 19:21:31 -0700</date>
            <delta_ts>2011-03-22 16:46:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56431-20110321192130.patch</filename>
            <type>text/plain</type>
            <size>35998</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzNhMTE2NzUzNmM4NDQ2
MTEwMWU3ZTc3MDAxODQwMjk4ZTY2MTJkLi4wY2NjYmFlNTMyZDEzN2I0MzBmYzI5MWQ0OGI5NTZi
MzhiYTczNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDMtMTcgIEpvaG4g
QmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHByZXNlcnZlRHJhd2luZ0J1
ZmZlciBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzEKKworICAgICAgICBGb3IgdGhlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGNhc2UsIG9ubHkgcHJlcGFyZSB0aGUgdGV4dHVyZSBpZiBpdAorICAg
ICAgICBoYXMgYmVlbiB1cGRhdGVkIHNpbmNlIHRoZSBsYXN0IGNvbXBvc2l0ZS4gRm9yIHRoZSBu
b24tYWNjZWxlcmF0ZWQgY2FzZSwgbWFrZSBzdXJlIHRvCisgICAgICAgIGdyYWIgYSBjb3B5IG9m
IHRoZSBpbWFnZSBidWZmZXIgYW5kIHBhaW50IGZyb20gdGhhdCBpZiB0aGUgYmFja2J1ZmZlcgor
ICAgICAgICB3b3VsZCBiZSBjbGVhcmVkLgorCisgICAgICAgIEluIGJvdGggY2FzZXMsIG1ha2Ug
c3VyZSB0byBjbGVhciB0aGUgY29udGV4dCdzIGJhY2tidWZmZXIgYmVmb3JlIHRoZQorICAgICAg
ICBmaXJzdCBvcGVyYXRpb24gdGhhdCB1c2VzIGl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
SXQgc2VlbXMgdG8gYmUgZGlmZmljdWx0L2ltcG9zc2libGUgdG8gdHJpZ2dlciBhbiBlYXJseQor
ICAgICAgICBjb21wb3NpdGluZyBvcGVyYXRpb24gaW4gRHVtcFJlbmRlclRyZWUsIG1ha2luZyB0
aGlzIGhhcmQgdG8KKyAgICAgICAgdGVzdCBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBDaHJvbWl1
bSBhbmQgU2FmYXJpIChNYWMpIGhhdmUgYmVlbgorICAgICAgICB0ZXN0ZWQgbWFudWFsbHkgb24g
dGhlIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QgZm9yIHRoaXMuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVByZXNl
bnRhdGlvbkNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFy
UHJlc2VudGF0aW9uQ29weSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0QXR0cmlidXRlczo6cHJlc2VydmVEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OnNldFByZXNlcnZl
RHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRs
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJ
ZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpt
YXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlczo6QXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5
ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorCiAyMDExLTAzLTE3
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
NjQ2MWRiNmI0YzViMjgyOTYyMDVlNzQ2MDViYTJhOTk1YWU5NzAwOS4uYzkxMTE5NDE2OTkzMWU0
MTFkZTVlN2E2MDJjZDEyNDM3YThjNDBjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKQEAgLTI3NywxNSArMjc3LDIyIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcikKICAg
ICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAgICAg
ICAgICAgaWYgKGltYWdlQnVmZmVyLT5kcmF3c1VzaW5nQ29weSgpKQorICAgICAgICAgICAgaWYg
KG1fcHJlc2VudGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1f
cHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHIpOworICAgICAgICAg
ICAgZWxzZSBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkpCiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IHIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwgcik7CiAgICAgICAgIH0K
ICAgICB9Ci19CiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAorICAgIGlmIChpczNEKCkpCisgICAg
ICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSkt
Pm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFdFQkdMKQog
Ym9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29u
dGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKTsKQEAgLTI5OCw2ICszMDUsMTkgQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKQogICAgICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9CiAKK3ZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6Om1ha2VQcmVzZW50YXRpb25Db3B5KCkKK3sKKyAgICBpZiAoIW1fcHJl
c2VudGVkSW1hZ2UpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250YWlucyB0aGUgbGFzdCBw
cmVzZW50ZWQgZGF0YSwgc28gc2F2ZSBhIGNvcHkgb2YgaXQuCisgICAgICAgIG1fcHJlc2VudGVk
SW1hZ2UgPSBidWZmZXIoKS0+Y29weUltYWdlKCk7CisgICAgfQorfQorCit2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpjbGVhclByZXNlbnRhdGlvbkNvcHkoKQoreworICAgIG1fcHJlc2VudGVkSW1h
Z2UuY2xlYXIoKTsKK30KKwogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6YXR0YWNoKCkKIHsKICAg
ICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgKaW5kZXggODcwNmM2YjExMjE1MDIxZTEyZGJjZWY3YWU5ZWQxMzVmNjQwYWM0OC4uZjhj
Yzg5NDk3OGE4ZjE0OTc3YjRhOWEwMGI2ZDBlMjYzOWRhYTgyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICBJ
bWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKTsK
ICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CisgICAgdm9pZCBtYWtl
UHJlc2VudGF0aW9uQ29weSgpOworICAgIHZvaWQgY2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAK
ICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29u
c3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYp
IGNvbnN0OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBib29sIG1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOwogICAgIAorICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX3ByZXNlbnRl
ZEltYWdlOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUg
aW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwCmluZGV4IDZhNDdlYTkyM2I1MTVlM2RhMjJlMzczNzI0ZDFhNGE5OGI4YjA3OGUuLmUz
NmUwNGVmMDU2NzkwZGQyZjA4OTNmMWU3OTY3M2Y0Mzg1ZDkyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0x
MDcsNiArMTA3LDE2IEBAIHZvaWQgV2ViR0xDb250ZXh0QXR0cmlidXRlczo6c2V0UHJlbXVsdGlw
bGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKQogICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOwogfQogCitib29sIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM6OnByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyOworfQorCit2b2lkIFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM6OnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZl
cikKK3sKKyAgICBtX2F0dHJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjsKK30KKwogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgV2ViR0xDb250ZXh0
QXR0cmlidXRlczo6YXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cnM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmgKaW5kZXggYTEwODYwNTJkMzk3MmNkYjI5NzE4ZmVlNWYwNjIzY2IxOTMzNzBjZC4uNTM5MWEy
YjdkMDU2ZDc2YmQwZDNmOGU4ZjM2YThkYmU4YmQ3NzliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaApAQCAtNjUsNiArNjUs
MTEgQEAgY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlcyA6IHB1YmxpYyBDYW52YXNDb250ZXh0
QXR0cmlidXRlcyB7CiAgICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEoKSBjb25zdDsKICAgICB2
b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxpZWRBbHBoYSk7CiAKKyAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0byBwcmVzZXJ2ZSB0aGUgZHJhd2luZyBidWZmZXIgYWZ0ZXIg
cHJlc2VudGF0aW9uIHRvIHRoZQorICAgIC8vIHNjcmVlbjsgZGVmYXVsdD1mYWxzZQorICAgIGJv
b2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZURy
YXdpbmdCdWZmZXIoYm9vbCk7CisKICAgICAvLyBGZXRjaGVzIGEgY29weSBvZiB0aGUgYXR0cmli
dXRlcyBzdG9yZWQgaW4gdGhpcyBvYmplY3QgaW4gYQogICAgIC8vIGZvcm0gdGhhdCBjYW4gYmUg
dXNlZCB0byBpbml0aWFsaXplIGEgR3JhcGhpY3NDb250ZXh0M0QuCiAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAppbmRleCAwZmEw
YzJjMTZhOWU5Zjg0YzcwZjE4ZTk5NjBmOGVmNDA1ZTE1NmZkLi41NmRhMWM2MWVlZDI5YTVmOGMz
ZGU4YTBjOWMzMWQxYjNkNmEyMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbApAQCAtMzQsNSArMzQsNiBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIHN0ZW5jaWw7CiAgICAgICAgIGF0
dHJpYnV0ZSBib29sZWFuIGFudGlhbGlhczsKICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gcHJl
bXVsdGlwbGllZEFscGhhOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNiNDUxY2JhMzYzM2ZmY2E1NmEzNDg5
NDlmNDMwMjVlOTVmZDJkOTEuLjhlYjIwZGQ2OTE2NWU4M2M0MDYyZTMyM2U5MmNlZDFiNjE5NzEx
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtNDEyLDYgKzQxMiwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0g
MDsKICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7CiAgICAgbV9zdGVuY2lsRnVu
Y01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAg
IAorICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsy
XSA9IG1fY2xlYXJDb2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwor
ICAgIG1fY2xlYXJEZXB0aCA9IDEuMDsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9j
b2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1h
c2tbM10gPSB0cnVlOwogCiAgICAgR0MzRGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwpAQCAtNDcyLDYgKzQ3OSwxMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJl
bmRlcmluZ0NvbnRleHQoKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwogICAgIGlmIChyZW5k
ZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQpAQCAtNDg2LDkgKzQ5Nyw2OSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
IAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOworCisgICAg
aWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5ZXJDbGVhcmVkCisgICAg
ICAgIHx8IGNvbnRleHRBdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSB8fCBtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRGV0ZXJt
aW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQg
Zm9yIGFuZCB0aGlzIGNsZWFyLgorICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1f
c2Npc3NvckVuYWJsZWQ7CisKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCisgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sxXSA/IG1fY2xlYXJDb2xvclsxXSA6IDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSA/IG1fY2xlYXJD
b2xvclsyXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sz
XSA/IG1fY2xlYXJDb2xvclszXSA6IDApOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5j
bGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRy
dWUsIHRydWUsIHRydWUpOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+ZGVwdGgoKSAmJiAo
IWNvbWJpbmVkQ2xlYXIgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQpKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgIGlmIChj
b250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpICYmICghY29tYmluZWRDbGVhciB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkpCisgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMtPmRlcHRoKCkpCisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0ZW5jaWwoKSkKKyAg
ICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gUmVzdG9yZSB0aGUg
c3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xv
clsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFy
Q29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2Nv
bG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9j
b2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKKyAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fY29u
dGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewotICAgIGlmICghbV9tYXJr
ZWRDYW52YXNEaXJ0eSkKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkg
dGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0
IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAg
IGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFnZXRDb250ZXh0QXR0cmlidXRl
cygpLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSkKKyAgICAgICAgY2FudmFzKCktPm1ha2VQcmVz
ZW50YXRpb25Db3B5KCk7CisgICAgZWxzZQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAoIW1fbWFya2Vk
Q2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CiAgICAgY2Fu
dmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7CkBAIC00OTcsNiArNTY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQogewor
ICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIH0KIApAQCAtODkwLDcgKzk2Miw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29u
dGV4dC0+Y2xlYXIobWFzayk7CisgICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKKyAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwodHJ1ZSk7CiB9CiAKQEAgLTkwNiw2ICs5NzksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwg
R0MKICAgICAgICAgYiA9IDA7CiAgICAgaWYgKGlzbmFuKGEpKQogICAgICAgICBhID0gMTsKKyAg
ICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9j
bGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwogICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQpAQCAtOTE0LDYgKzk5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CiAgICAgbV9jb250
ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQpAQCAtOTIyLDYgKzEwMDAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwogICAgIG1fY29udGV4dC0+Y2xl
YXJTdGVuY2lsKHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBA
IC05MzAsNiArMTAwOSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0RibwogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQpAQCAtOTY0LDYgKzEwNDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKICAgICAg
ICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBlbHNlIHsKQEAgLTEwMDcsNiAr
MTA5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OwogICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogICAgIGVsc2UgewpAQCAtMTIzOSw2ICsxMzI0LDggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgICAgICBtX3Nj
aXNzb3JFbmFibGVkID0gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE0ODQsNiArMTU3MSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOworCiAgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwpA
QCAtMTU1NSw2ICsxNjQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVt
ZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNsZWFySWZD
b21wb3NpdGVkKCk7CiAKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsK
ICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewpAQCAtMTU3Niw2ICsxNjY2LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXApCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNh
cCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE2MDIsNyAr
MTY5NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5pc2goKQogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZpbmlzaCgp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1
c2goKQpAQCAtMTYxMCw3ICsxNzAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZs
dXNoKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjc1Nyw2ICsyODQ5LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKICNpZiBPUyhEQVJXSU4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4
IDZiODg1ZDkyZWQ5MWI0NWE0YjQzYzZlMWM1ZGYxMGFiNzM3ZjI1ZjAuLjliYmIwM2QyMGZhMTdh
NTliYTdlM2U0NDJkMzhlNGEwNjdiZDQ3MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yODUsNiArMjg1LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICB2
b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCkBAIC00NDQsNiArNDQ1LDEzIEBA
IHB1YmxpYzoKICAgICBib29sIG1fY29udGV4dExvc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogCisgICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsKKyAg
ICBHQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsK
KyAgICBHQzNEZmxvYXQgbV9jbGVhckRlcHRoOworICAgIEdDM0RpbnQgbV9jbGVhclN0ZW5jaWw7
CisgICAgR0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CisKICAgICBsb25nIG1fc3RlbmNpbEJp
dHM7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2lsTWFza0JhY2s7CiAgICAg
R0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0
aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhlIGludGVybmFs
IGNsYW1wZWQgdmFsdWUuCkBAIC00NzAsNiArNDc4LDExIEBAIHB1YmxpYzoKICAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKICAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CiAKKyAgICAvLyBDbGVh
ciBpZiB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBv
cGVyYXRpb24uCisgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55
IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQg
dGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2Fy
eS4KKyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAw
KTsKKwogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggY2ZjNGRhNjM2ODdlZjNlZjNlMDc5
OWJmYzM5OWNjZDJhN2FlNWJkMy4uMzUxYjQ0NWY4YTEzZGNlNmFlOTM3ZWQ4MzVmYTRkYjFjMWZj
ZTVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCkBAIC00MjAsNiArNDIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
LCBhbnRpYWxpYXModHJ1ZSkKICAgICAgICAgICAgICwgcHJlbXVsdGlwbGllZEFscGhhKHRydWUp
CiAgICAgICAgICAgICAsIGNhblJlY292ZXJGcm9tQ29udGV4dExvc3ModHJ1ZSkKKyAgICAgICAg
ICAgICwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0K
IApAQCAtNDI5LDYgKzQzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBhbnRpYWxpYXM7CiAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhOwogICAgICAgICBib29sIGNhblJlY292ZXJG
cm9tQ29udGV4dExvc3M7CisgICAgICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyOwogICAg
IH07CiAKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKQEAgLTQ0OSw3ICs0NTEsNyBAQCBwdWJsaWM6
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmU7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcG9zaXRvclRleHR1cmU7IH0KICAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVy
LmdldCgpKTsgfQogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CkBAIC03NTYsNiAr
NzU4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRo
LCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCk7CiAjZW5kaWYKIAorICAg
IHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVk
KCk7CisgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7
CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCk7CiAKQEAgLTg4NSwxMiArODkxLDE2IEBAIHB1YmxpYzoKIAogICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7
Ci0gICAgR0MzRHVpbnQgbV90ZXh0dXJlOworICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZTsKICAgICBHQzNEdWludCBtX2ZibzsKICAgICBHQzNEdWludCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcjsKKyAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOworICAgIEdDM0R1aW50
IG1faW50ZXJuYWxDb2xvckZvcm1hdDsKIAotICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBGQk8g
aXMgYm91bmQKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPL3RleHR1cmUgaXMgYm91bmQK
ICAgICBHQzNEdWludCBtX2JvdW5kRkJPOworICAgIEdDM0RlbnVtIG1fYWN0aXZlVGV4dHVyZTsK
KyAgICBHQzNEdWludCBtX2JvdW5kVGV4dHVyZTA7CiAKICAgICAvLyBGb3IgbXVsdGlzYW1wbGlu
ZwogICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVGQk87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcAppbmRleCBlODNkMDQ1NmE1YzVlYTU4MmJmYTcxYTRiZDc3NGRjNjdlMGU4NzU3Li43
ZTM5NTEyNDlhMWU5OGY1NGMwNGY2NDc3MjdjNzA5YzdlNThkMGRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgUGFzc1JlZlB0cjxXZWJHTExheWVy
Q2hyb21pdW0+IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSoKIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQogICAgICwg
bV9jb250ZXh0KDApCisgICAgLCBtX3RleHR1cmVVcGRhdGVkKGZhbHNlKQogewogfQogCkBAIC02
OCwxOSArNjksMjggQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZE
aXJ0eSgpCiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8g
VXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9y
LgotICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICBpZiAobV9jb250ZW50c0RpcnR5ICYm
IG1fdGV4dHVyZVVwZGF0ZWQpIHsKICAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgp
OworICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICAgICAgbV9j
b250ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsK
ICAgICB9CiB9CiAKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0dXJlVXBkYXRlZCgp
Cit7CisgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7Cit9CisKIHZvaWQgV2ViR0xMYXllckNo
cm9taXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewog
ICAgIG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsK
IAogICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVy
ZSgpOwotICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCkgewogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CisgICAgfQogICAgIG1fdGV4dHVyZUlkID0g
dGV4dHVyZUlkOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmgKaW5kZXggNzBiZTg3NjkyODM0NmFlNDYzNDg1ODlmMWViNWVmYjZmNzM4NDQ5ZC4u
ZjkzYzk3MDNkYzlhNzlhZmY2YmYzMjBhODcxYzJmMDk4OGI4OGMyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xM
YXllckNocm9taXVtLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgpOwogCiAgICAgdm9pZCBzZXRD
b250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIApAQCAtNTUsNiArNTYs
NyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIGJvb2wgbV90ZXh0dXJlVXBkYXRlZDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHQzRE1hYy5tbQppbmRleCBhYWEyNTBiMmNmZWQyN2UwNTIwZGZlMzI3MWZiZTkyZTk0NjI0
ZTQwLi44OWQ3ZmI4ZWFkNTJiNzQ1ZThlMzU4NWFiZWFjYTNlNDEwOTM2NDI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCkBAIC05Myw4ICs5MywxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgICwgbV9hdHRycyhhdHRycykKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90
ZXh0dXJlKDApCisgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQog
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZh
bHNlKQogICAgICwgbV9ib3VuZEZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAg
ICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQpAQCAtMTY2LDYgKzE2OCwxMiBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUCk7CisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisg
ICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CiAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwogICAgIAogICAgIC8vIGNyZWF0ZSBh
biBGQk8KQEAgLTIxNSw2ICsyMjMsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKICAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAgICAgIENHTFNldEN1cnJlbnRD
b250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKICAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CiAgICAgICAgICAgICA6Omds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAg
ICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDI1NDdiNTM0ZmYwNjVjZGRkNTJkNzRk
YWEyYWFiNzkzZDM2NGJkZmUuLmMxMjVlOTRiZThjZjMyYWVlOTg0OWIzNTg0Nzg3ZmMwZGI0NDM3
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMTcxLDEyICsx
NzEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgCi0gICAgR0x1aW50
IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCA9IDA7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCA9IDA7CiAgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgaW50ZXJuYWxDb2xv
ckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9S
R0JBODsKICAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBtX2ludGVybmFsQ29s
b3JGb3JtYXQgPSBHTF9SR0I4OwogICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKICAgICB9
CiAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CkBAIC0yMDIsNyAr
MjAyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xv
ckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VY
VCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CiAgICAgICAgICAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKQEAgLTIyNSw4ICsyMjUsMTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgfQogICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwg
Y29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKICAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMzEz
LDE5ICszMTUsMjkgQEAgSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgp
CiB7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CiAgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwg
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwog
ICAgIH0KKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9ib3VuZFRleHR1cmUwKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRl
eHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2JvdW5kRkJPKTsKICAgICA6OmdsRmluaXNoKCk7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0
cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hY3RpdmVUZXh0
dXJlID0gdGV4dHVyZTsKICAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIApAQCAt
Mzc1LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3RpdmVUZXh0
dXJlICYmIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4dHVyZTAg
PSB0ZXh0dXJlOwogICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCkBA
IC0xNDc3LDYgKzE0OTEsMjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0gZXJyb3IpCiAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsK
IH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAg
ICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCiBFeHRlbnNpb25zM0QqIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKIHsKICAgICBpZiAoIW1fZXh0ZW5zaW9ucykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggYWYxNTNhOTM3M2M0OWU4YjEyYzM0YzRkZTliYWEz
ZTk5M2QwYzk0Yi4uNjZiYWNhOTFlZjhhNzk0Y2ZjZTIyNGZiMDliOTI4YTFlOTU3M2FhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTI2MCw2ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgR0x1
aW50IG1fY3VycmVudEZibzsKICAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICAgICBRSW1hZ2Ug
bV9waXhlbHM7CisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKICAgICBMaXN0SGFzaFNldDx1
bnNpZ25lZCBpbnQ+IG1fc3ludGhldGljRXJyb3JzOwogCiAgICAgT3duUHRyPEV4dGVuc2lvbnMz
RFF0PiBtX2V4dGVuc2lvbnM7CkBAIC0yOTQsNiArMjk1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXQKICAgICAsIG1fbWFpbkZibygwKQogICAgICwgbV9jdXJyZW50RmJvKDApCiAgICAgLCBt
X2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKICAgICAsIG1f
Y29udGV4dFZhbGlkKHRydWUpCiB7CiAgICAgUGFnZUNsaWVudFFXaWRnZXQqIHdlYlBhZ2VDbGll
bnQKQEAgLTE2MjksNiArMTYzMSwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVz
aXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKICAgICBtX2ludGVybmFsLT5tX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJD
b21wb3NpdGVkKCkKK3sKKyAgICBtX2ludGVybmFsLT5tX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7Cisg
ICAgLy8gRklYTUU6IEFueSBhY2NlbGVyYXRlZCBjb21wb3NpdG9yIG5lZWRzIHRvIGJlIHRvbGQg
dG8gcmUtcmVhZCBmcm9tIGhlcmUuCisgICAgbV9pbnRlcm5hbC0+bV9sYXllckNvbXBvc2l0ZWQg
PSBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bV9sYXllckNvbXBvc2l0ZWQ7Cit9CisK
IEV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQogewogICAg
IGlmICghbV9pbnRlcm5hbC0+bV9leHRlbnNpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBlMTQzMmYxOWViNzY5OGQ5MDBjNzhmY2M5NWYwNmRhYzZhNWM3MzczLi40NTg5MzU3Yzcw
MWExYjhhMmE2M2RjODJiOTU1NWQyYzdmZjFiNWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTE3ICBKb2huIEJhdW1hbiAgPGpiYXVtYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgY29udGV4dCBjcmVhdGlv
biBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NDMxCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYXJrQ29udGV4
dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwuaDoKKwogMjAxMS0wMy0xNyAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcAppbmRleCA4ZDEyYzRkNTFlNTU2ZjBjZTMyZWIzNjNlZDcxODg1MGQzNTdmOGE2Li41NGMx
OGUzNTdiZmEyZmM4M2NlYTQyMDM3ZTUwNmNiYTE2ZTVjN2E3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApA
QCAtODIsNiArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKICAgICA6IG1fd2ViVmlld0ltcGwo
MCkKICAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgICwg
bV9sYXllckNvbXBvc2l0ZWQoZmFsc2UpCiAjaWYgVVNFKFNLSUEpCiAjZWxpZiBQTEFURk9STShD
RykKICAgICAsIG1fcmVuZGVyT3V0cHV0KDApCkBAIC0xNjAsNiArMTYxLDI0IEBAIFdlYkdMTGF5
ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcigpIGNv
bnN0CiB9CiAjZW5kaWYKIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYXJrQ29u
dGV4dENoYW5nZWQoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBw
bGF0Zm9ybUxheWVyKCktPnNldFRleHR1cmVVcGRhdGVkKCk7CisjZW5kaWYKKyAgICBtX2xheWVy
Q29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpsYXllckNvbXBvc2l0ZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKQEAgLTEwODUsNiArMTEwNCwxNCBAQCBERUxFR0FURV9U
T19JTlRFUk5BTF82KHZlcnRleEF0dHJpYlBvaW50ZXIsIEdDM0R1aW50LCBHQzNEaW50LCBHQzNE
ZW51bSwgR0MzRGJvbwogCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBHQzNEaW50
LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAorREVMRUdBVEVfVE9fSU5URVJOQUwo
bWFya0xheWVyQ29tcG9zaXRlZCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKG1hcmtDb250ZXh0Q2hh
bmdlZCkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+bGF5ZXJDb21wb3NpdGVkKCk7Cit9CisKIERFTEVH
QVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfUihwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSwgUGFzc1JlZlB0cjxJbWFnZURhdGE+KQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKaW5k
ZXggYjUxN2U2MGI4ZGY5ZWJmNzEyZjY1NjI5OGZkZDU2MDViOGVkMGVhNC4uMGFmMjkxZTk2MzIy
OWI2Yzg0ZDU3Mjk4MDRjYzBhMWM3ZTc2MWM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaApAQCAtNjYsNiArNjYs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
ICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKIAorICAgIHZvaWQgbWFy
a0NvbnRleHRDaGFuZ2VkKCk7CisgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKKyAg
ICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopOwogICAgIFBhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAgIGJvb2wg
cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwpAQCAtMjc0LDYgKzI3OCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICBIYXNo
U2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9y
ZXF1ZXN0YWJsZUV4dGVuc2lvbnM7CisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZDsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1
bT4gbV9jb21wb3NpdGluZ0xheWVyOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86541</attachid>
            <date>2011-03-22 16:46:31 -0700</date>
            <delta_ts>2011-03-22 18:24:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56431-20110322164630.patch</filename>
            <type>text/plain</type>
            <size>36114</size>
            <attacher name="John Bauman">jbauman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE0MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzNhMTE2NzUzNmM4NDQ2
MTEwMWU3ZTc3MDAxODQwMjk4ZTY2MTJkLi4wY2NjYmFlNTMyZDEzN2I0MzBmYzI5MWQ0OGI5NTZi
MzhiYTczNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDMtMTcgIEpvaG4g
QmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHByZXNlcnZlRHJhd2luZ0J1
ZmZlciBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzEKKworICAgICAgICBGb3IgdGhlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGNhc2UsIG9ubHkgcHJlcGFyZSB0aGUgdGV4dHVyZSBpZiBpdAorICAg
ICAgICBoYXMgYmVlbiB1cGRhdGVkIHNpbmNlIHRoZSBsYXN0IGNvbXBvc2l0ZS4gRm9yIHRoZSBu
b24tYWNjZWxlcmF0ZWQgY2FzZSwgbWFrZSBzdXJlIHRvCisgICAgICAgIGdyYWIgYSBjb3B5IG9m
IHRoZSBpbWFnZSBidWZmZXIgYW5kIHBhaW50IGZyb20gdGhhdCBpZiB0aGUgYmFja2J1ZmZlcgor
ICAgICAgICB3b3VsZCBiZSBjbGVhcmVkLgorCisgICAgICAgIEluIGJvdGggY2FzZXMsIG1ha2Ug
c3VyZSB0byBjbGVhciB0aGUgY29udGV4dCdzIGJhY2tidWZmZXIgYmVmb3JlIHRoZQorICAgICAg
ICBmaXJzdCBvcGVyYXRpb24gdGhhdCB1c2VzIGl0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
SXQgc2VlbXMgdG8gYmUgZGlmZmljdWx0L2ltcG9zc2libGUgdG8gdHJpZ2dlciBhbiBlYXJseQor
ICAgICAgICBjb21wb3NpdGluZyBvcGVyYXRpb24gaW4gRHVtcFJlbmRlclRyZWUsIG1ha2luZyB0
aGlzIGhhcmQgdG8KKyAgICAgICAgdGVzdCBhdXRvbWF0aWNhbGx5LiBIb3dldmVyLCBDaHJvbWl1
bSBhbmQgU2FmYXJpIChNYWMpIGhhdmUgYmVlbgorICAgICAgICB0ZXN0ZWQgbWFudWFsbHkgb24g
dGhlIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QgZm9yIHRoaXMuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVByZXNl
bnRhdGlvbkNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFy
UHJlc2VudGF0aW9uQ29weSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0QXR0cmlidXRlczo6cHJlc2VydmVEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OnNldFByZXNlcnZl
RHJhd2luZ0J1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRs
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJ
ZkNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpt
YXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2spOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlczo6QXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5
ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorCiAyMDExLTAzLTE3
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXgg
NjQ2MWRiNmI0YzViMjgyOTYyMDVlNzQ2MDViYTJhOTk1YWU5NzAwOS4uYzkxMTE5NDE2OTkzMWU0
MTFkZTVlN2E2MDJjZDEyNDM3YThjNDBjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKQEAgLTI3NywxNSArMjc3LDIyIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcikKICAg
ICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKICAgICAgICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyID0gYnVmZmVyKCk7CiAgICAgICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAgICAg
ICAgICAgaWYgKGltYWdlQnVmZmVyLT5kcmF3c1VzaW5nQ29weSgpKQorICAgICAgICAgICAgaWYg
KG1fcHJlc2VudGVkSW1hZ2UpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1f
cHJlc2VudGVkSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHIpOworICAgICAgICAg
ICAgZWxzZSBpZiAoaW1hZ2VCdWZmZXItPmRyYXdzVXNpbmdDb3B5KCkpCiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKGNvcGllZEltYWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IHIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwgcik7CiAgICAgICAgIH0K
ICAgICB9Ci19CiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAorICAgIGlmIChpczNEKCkpCisgICAg
ICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSkt
Pm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFdFQkdMKQog
Ym9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29u
dGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKTsKQEAgLTI5OCw2ICszMDUsMTkgQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKQogICAgICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9CiAKK3ZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6Om1ha2VQcmVzZW50YXRpb25Db3B5KCkKK3sKKyAgICBpZiAoIW1fcHJl
c2VudGVkSW1hZ2UpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250YWlucyB0aGUgbGFzdCBw
cmVzZW50ZWQgZGF0YSwgc28gc2F2ZSBhIGNvcHkgb2YgaXQuCisgICAgICAgIG1fcHJlc2VudGVk
SW1hZ2UgPSBidWZmZXIoKS0+Y29weUltYWdlKCk7CisgICAgfQorfQorCit2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpjbGVhclByZXNlbnRhdGlvbkNvcHkoKQoreworICAgIG1fcHJlc2VudGVkSW1h
Z2UuY2xlYXIoKTsKK30KKwogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6YXR0YWNoKCkKIHsKICAg
ICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgKaW5kZXggODcwNmM2YjExMjE1MDIxZTEyZGJjZWY3YWU5ZWQxMzVmNjQwYWM0OC4uZjhj
Yzg5NDk3OGE4ZjE0OTc3YjRhOWEwMGI2ZDBlMjYzOWRhYTgyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICBJ
bWFnZSogY29waWVkSW1hZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKTsK
ICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CisgICAgdm9pZCBtYWtl
UHJlc2VudGF0aW9uQ29weSgpOworICAgIHZvaWQgY2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CiAK
ICAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JikgY29u
c3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYp
IGNvbnN0OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBib29sIG1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOwogICAgIAorICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX3ByZXNlbnRl
ZEltYWdlOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUg
aW1hZ2UgYnVmZmVyIHRvIHJlbmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwCmluZGV4IDZhNDdlYTkyM2I1MTVlM2RhMjJlMzczNzI0ZDFhNGE5OGI4YjA3OGUuLmUz
NmUwNGVmMDU2NzkwZGQyZjA4OTNmMWU3OTY3M2Y0Mzg1ZDkyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwCkBAIC0x
MDcsNiArMTA3LDE2IEBAIHZvaWQgV2ViR0xDb250ZXh0QXR0cmlidXRlczo6c2V0UHJlbXVsdGlw
bGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKQogICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOwogfQogCitib29sIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM6OnByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YXR0cnMucHJlc2VydmVEcmF3aW5nQnVmZmVyOworfQorCit2b2lkIFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM6OnNldFByZXNlcnZlRHJhd2luZ0J1ZmZlcihib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZl
cikKK3sKKyAgICBtX2F0dHJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcjsKK30KKwogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgV2ViR0xDb250ZXh0
QXR0cmlidXRlczo6YXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cnM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmgKaW5kZXggYTEwODYwNTJkMzk3MmNkYjI5NzE4ZmVlNWYwNjIzY2IxOTMzNzBjZC4uNTM5MWEy
YjdkMDU2ZDc2YmQwZDNmOGU4ZjM2YThkYmU4YmQ3NzliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaApAQCAtNjUsNiArNjUs
MTEgQEAgY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlcyA6IHB1YmxpYyBDYW52YXNDb250ZXh0
QXR0cmlidXRlcyB7CiAgICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEoKSBjb25zdDsKICAgICB2
b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxpZWRBbHBoYSk7CiAKKyAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0byBwcmVzZXJ2ZSB0aGUgZHJhd2luZyBidWZmZXIgYWZ0ZXIg
cHJlc2VudGF0aW9uIHRvIHRoZQorICAgIC8vIHNjcmVlbjsgZGVmYXVsdD1mYWxzZQorICAgIGJv
b2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZURy
YXdpbmdCdWZmZXIoYm9vbCk7CisKICAgICAvLyBGZXRjaGVzIGEgY29weSBvZiB0aGUgYXR0cmli
dXRlcyBzdG9yZWQgaW4gdGhpcyBvYmplY3QgaW4gYQogICAgIC8vIGZvcm0gdGhhdCBjYW4gYmUg
dXNlZCB0byBpbml0aWFsaXplIGEgR3JhcGhpY3NDb250ZXh0M0QuCiAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAppbmRleCAwZmEw
YzJjMTZhOWU5Zjg0YzcwZjE4ZTk5NjBmOGVmNDA1ZTE1NmZkLi41NmRhMWM2MWVlZDI5YTVmOGMz
ZGU4YTBjOWMzMWQxYjNkNmEyMzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmlkbApAQCAtMzQsNSArMzQsNiBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIHN0ZW5jaWw7CiAgICAgICAgIGF0
dHJpYnV0ZSBib29sZWFuIGFudGlhbGlhczsKICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gcHJl
bXVsdGlwbGllZEFscGhhOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNiNDUxY2JhMzYzM2ZmY2E1NmEzNDg5
NDlmNDMwMjVlOTVmZDJkOTEuLjhlYjIwZGQ2OTE2NWU4M2M0MDYyZTMyM2U5MmNlZDFiNjE5NzEx
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtNDEyLDYgKzQxMiwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0g
MDsKICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7CiAgICAgbV9zdGVuY2lsRnVu
Y01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAg
IAorICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsy
XSA9IG1fY2xlYXJDb2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwor
ICAgIG1fY2xlYXJEZXB0aCA9IDEuMDsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9j
b2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1h
c2tbM10gPSB0cnVlOwogCiAgICAgR0MzRGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
ID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwpAQCAtNDcyLDYgKzQ3OSwxMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJl
bmRlcmluZ0NvbnRleHQoKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwogICAgIGlmIChyZW5k
ZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQpAQCAtNDg2LDkgKzQ5Nyw2OSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkp
IAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOworCisgICAg
aWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5ZXJDbGVhcmVkCisgICAg
ICAgIHx8IGNvbnRleHRBdHRyaWJ1dGVzLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSB8fCBtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRGV0ZXJt
aW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQg
Zm9yIGFuZCB0aGlzIGNsZWFyLgorICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1f
c2Npc3NvckVuYWJsZWQ7CisKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCisgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sxXSA/IG1fY2xlYXJDb2xvclsxXSA6IDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSA/IG1fY2xlYXJD
b2xvclsyXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sz
XSA/IG1fY2xlYXJDb2xvclszXSA6IDApOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5j
bGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRy
dWUsIHRydWUsIHRydWUpOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+ZGVwdGgoKSAmJiAo
IWNvbWJpbmVkQ2xlYXIgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQpKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgIGlmIChj
b250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpICYmICghY29tYmluZWRDbGVhciB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkpCisgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0
ZXMtPmRlcHRoKCkpCisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0ZW5jaWwoKSkKKyAg
ICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgLy8gUmVzdG9yZSB0aGUg
c3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xv
clsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFy
Q29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2Nv
bG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9j
b2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKKyAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fY29u
dGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQogewotICAgIGlmICghbV9tYXJr
ZWRDYW52YXNEaXJ0eSkKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkg
dGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0
IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3NpdG9yLgorICAg
IGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFnZXRDb250ZXh0QXR0cmlidXRl
cygpLT5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSkKKyAgICAgICAgY2FudmFzKCktPm1ha2VQcmVz
ZW50YXRpb25Db3B5KCk7CisgICAgZWxzZQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAoIW1fbWFya2Vk
Q2FudmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQogICAgICAgICByZXR1cm47CiAgICAgY2Fu
dmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7CkBAIC00OTcsNiArNTY4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQogewor
ICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKIH0KIApAQCAtODkwLDcgKzk2Miw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29u
dGV4dC0+Y2xlYXIobWFzayk7CisgICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKKyAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwodHJ1ZSk7CiB9CiAKQEAgLTkwNiw2ICs5NzksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwg
R0MKICAgICAgICAgYiA9IDA7CiAgICAgaWYgKGlzbmFuKGEpKQogICAgICAgICBhID0gMTsKKyAg
ICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9j
bGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwogICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQpAQCAtOTE0LDYgKzk5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQogICAgICAgICByZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CiAgICAgbV9jb250
ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQpAQCAtOTIyLDYgKzEwMDAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwogICAgIG1fY29udGV4dC0+Y2xl
YXJTdGVuY2lsKHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBA
IC05MzAsNiArMTAwOSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0RibwogewogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQpAQCAtOTY0LDYgKzEwNDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKICAgICAg
ICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKICAgICBlbHNlIHsKQEAgLTEwMDcsNiAr
MTA5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OwogICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQogICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogICAgIGVsc2UgewpAQCAtMTIzOSw2ICsxMzI0LDggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eShjYXApKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgICAgICBtX3Nj
aXNzb3JFbmFibGVkID0gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE0ODQsNiArMTU3MSw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOworCiAgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwpA
QCAtMTU1NSw2ICsxNjQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVt
ZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnUKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNsZWFySWZD
b21wb3NpdGVkKCk7CiAKICAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsK
ICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewpAQCAtMTU3Niw2ICsxNjY2LDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXApCiB7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNh
cCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE2MDIsNyAr
MTY5NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5pc2goKQogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmZpbmlzaCgp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1
c2goKQpAQCAtMTYxMCw3ICsxNzAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZs
dXNoKCkKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9j
b250ZXh0LT5mbHVzaCgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjc1Nyw2ICsyODQ5LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CiAgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKICNpZiBPUyhEQVJXSU4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4
IDZiODg1ZDkyZWQ5MWI0NWE0YjQzYzZlMWM1ZGYxMGFiNzM3ZjI1ZjAuLmY3MTZlZmI0MTk1ZTdk
ZDg4MmI2N2M4Yzg5OWU2ZTU3NTQ1OGEzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yODUsNiArMjg1LDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICB2
b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogCkBAIC00NDQsNiArNDQ1LDEzIEBA
IHB1YmxpYzoKICAgICBib29sIG1fY29udGV4dExvc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogCisgICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsKKyAg
ICBHQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsK
KyAgICBHQzNEZmxvYXQgbV9jbGVhckRlcHRoOworICAgIEdDM0RpbnQgbV9jbGVhclN0ZW5jaWw7
CisgICAgR0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CisKICAgICBsb25nIG1fc3RlbmNpbEJp
dHM7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2lsTWFza0JhY2s7CiAgICAg
R0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0
aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhlIGludGVybmFs
IGNsYW1wZWQgdmFsdWUuCkBAIC00NzAsNiArNDc4LDExIEBAIHB1YmxpYzoKICAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKICAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CiAKKyAgICAvLyBDbGVh
ciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVy
YXRpb24uCisgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNs
ZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhl
IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4K
KyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsK
KwogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggY2ZjNGRhNjM2ODdlZjNlZjNlMDc5OWJm
YzM5OWNjZDJhN2FlNWJkMy4uMzUxYjQ0NWY4YTEzZGNlNmFlOTM3ZWQ4MzVmYTRkYjFjMWZjZTVk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC00MjAsNiArNDIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBh
bnRpYWxpYXModHJ1ZSkKICAgICAgICAgICAgICwgcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiAg
ICAgICAgICAgICAsIGNhblJlY292ZXJGcm9tQ29udGV4dExvc3ModHJ1ZSkKKyAgICAgICAgICAg
ICwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApA
QCAtNDI5LDYgKzQzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBhbnRpYWxpYXM7CiAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhOwogICAgICAgICBib29sIGNhblJlY292ZXJGcm9t
Q29udGV4dExvc3M7CisgICAgICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyOwogICAgIH07
CiAKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKQEAgLTQ0OSw3ICs0NTEsNyBAQCBwdWJsaWM6CiAK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmU7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29tcG9zaXRvclRleHR1cmU7IH0KICAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdl
dCgpKTsgfQogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CkBAIC03NTYsNiArNzU4
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBp
bnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCk7CiAjZW5kaWYKIAorICAgIHZv
aWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7
CisgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKKwogICAgIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAg
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7CiAKQEAgLTg4NSwxMiArODkxLDE2IEBAIHB1YmxpYzoKIAogICAgIENHTENvbnRleHRPYmog
bV9jb250ZXh0T2JqOwogICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7Ci0g
ICAgR0MzRHVpbnQgbV90ZXh0dXJlOworICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3Np
dG9yVGV4dHVyZTsKICAgICBHQzNEdWludCBtX2ZibzsKICAgICBHQzNEdWludCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcjsKKyAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOworICAgIEdDM0R1aW50IG1f
aW50ZXJuYWxDb2xvckZvcm1hdDsKIAotICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBGQk8gaXMg
Ym91bmQKKyAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPL3RleHR1cmUgaXMgYm91bmQKICAg
ICBHQzNEdWludCBtX2JvdW5kRkJPOworICAgIEdDM0RlbnVtIG1fYWN0aXZlVGV4dHVyZTsKKyAg
ICBHQzNEdWludCBtX2JvdW5kVGV4dHVyZTA7CiAKICAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwog
ICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVGQk87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmNwcAppbmRleCBlODNkMDQ1NmE1YzVlYTU4MmJmYTcxYTRiZDc3NGRjNjdlMGU4NzU3Li43ZTM5
NTEyNDlhMWU5OGY1NGMwNGY2NDc3MjdjNzA5YzdlNThkMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hy
b21pdW0+IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSoK
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV9j
b250ZXh0KDApCisgICAgLCBtX3RleHR1cmVVcGRhdGVkKGZhbHNlKQogewogfQogCkBAIC02OCwx
OSArNjksMjggQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0
eSgpCiAgICAgICAgIG1fdGV4dHVyZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9CiAgICAgLy8gVXBk
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dHVyZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yLgot
ICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICBpZiAobV9jb250ZW50c0RpcnR5ICYmIG1f
dGV4dHVyZVVwZGF0ZWQpIHsKICAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwor
ICAgICAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICAgICAgICAgbV9jb250
ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSBmYWxzZTsKICAg
ICB9CiB9CiAKK3ZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0dXJlVXBkYXRlZCgpCit7
CisgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7Cit9CisKIHZvaWQgV2ViR0xMYXllckNocm9t
aXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAg
IG1fY29udGV4dCA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKIAog
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgp
OwotICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQpCisgICAgaWYgKHRleHR1cmVJZCAh
PSBtX3RleHR1cmVJZCkgewogICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CisgICAgfQogICAgIG1fdGV4dHVyZUlkID0gdGV4
dHVyZUlkOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gbV9jb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmgKaW5kZXggNzBiZTg3NjkyODM0NmFlNDYzNDg1ODlmMWViNWVmYjZmNzM4NDQ5ZC4uZjkz
Yzk3MDNkYzlhNzlhZmY2YmYzMjBhODcxYzJmMDk4OGI4OGMyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgpOwogCiAgICAgdm9pZCBzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIApAQCAtNTUsNiArNTYsNyBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFdlYkdMTGF5ZXJDaHJvbWl1bShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9j
b250ZXh0OworICAgIGJvb2wgbV90ZXh0dXJlVXBkYXRlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbQppbmRleCBhYWEyNTBiMmNmZWQyN2UwNTIwZGZlMzI3MWZiZTkyZTk0NjI0ZTQw
Li45OTdjOTc2NDZjNDJiZDkyNmJmMmRmOWNiMzk5MWRiODgxMGRiYzIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCkBAIC05Myw5ICs5MywxNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhp
Y3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQog
ICAgICwgbV9hdHRycyhhdHRycykKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90ZXh0
dXJlKDApCisgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQogICAg
ICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNl
KQorICAgICwgbV9pbnRlcm5hbENvbG9yRm9ybWF0KDApCiAgICAgLCBtX2JvdW5kRkJPKDApCisg
ICAgLCBtX2FjdGl2ZVRleHR1cmUoMCkKKyAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQogICAgICwg
bV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCkBAIC0xNjYsNiArMTcxLDEy
IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwogICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUCk7CiAg
ICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QKTsKKyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUCk7CisgICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QKTsKICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgCiAgICAgLy8gY3JlYXRl
IGFuIEZCTwpAQCAtMjE1LDYgKzIyNiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQogICAgIGlmIChtX2NvbnRleHRPYmopIHsKICAgICAgICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRl
eHR1cmUpOwogICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAgICAgICAgIDo6
Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwog
ICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggMjU0N2I1MzRmZjA2NWNkZGQ1MmQ3
NGRhYTJhYWI3OTNkMzY0YmRmZS4uYzEyNWU5NGJlOGNmMzJhZWU5ODQ5YjM1ODQ3ODdmYzBkYjQ0
Mzc4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0xNzEsMTIg
KzE3MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKICAgICAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAKLSAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKICAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdM
X1JHQkE4OwogICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIG1faW50ZXJuYWxD
b2xvckZvcm1hdCA9IEdMX1JHQjg7CiAgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOwogICAg
IH0KICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKQEAgLTIwMiw3
ICsyMDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKICAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENv
bG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgbV9pbnRl
cm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKICAgICAgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwpAQCAtMjI1LDggKzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICB9CiAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleElt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOwogICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgewogICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CkBAIC0z
MTMsMTkgKzMxNSwyOSBAQCBJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJl
KCkKIHsKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUZCTyk7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAw
LCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CiAgICAgfQorICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2Zibyk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUoMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xDb3B5VGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZl
VGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fYm91bmRGQk8pOwogICAgIDo6Z2xGaW5pc2goKTsKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9
IHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVu
dW0gdGV4dHVyZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FjdGl2ZVRl
eHR1cmUgPSB0ZXh0dXJlOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQogCkBA
IC0zNzUsNiArMzg3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGUKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2FjdGl2ZVRl
eHR1cmUgJiYgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgIG1fYm91bmRUZXh0dXJl
MCA9IHRleHR1cmU7CiAgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAK
QEAgLTE0NzcsNiArMTQ5MSwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXpl
R0xFcnJvcihHQzNEZW51bSBlcnJvcikKICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3Ip
OwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQorewor
ICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1
ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Cit9CisKIEV4dGVuc2lvbnMzRCogR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQogewogICAgIGlmICghbV9leHRlbnNpb25z
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCBhZjE1M2E5MzczYzQ5ZThiMTJjMzRjNGRlOWJh
YTNlOTkzZDBjOTRiLi42NmJhY2E5MWVmOGE3OTRjZmNlMjI0ZmIwOWI5MjhhMWU5NTczYWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMjYwLDYgKzI2MCw3IEBAIHB1YmxpYzoKICAgICBH
THVpbnQgbV9jdXJyZW50RmJvOwogICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOwogICAgIFFJbWFn
ZSBtX3BpeGVsczsKKyAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogICAgIExpc3RIYXNoU2V0
PHVuc2lnbmVkIGludD4gbV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBPd25QdHI8RXh0ZW5zaW9u
czNEUXQ+IG1fZXh0ZW5zaW9uczsKQEAgLTI5NCw2ICsyOTUsNyBAQCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dAogICAgICwgbV9tYWluRmJvKDApCiAgICAgLCBtX2N1cnJlbnRGYm8oMCkKICAgICAs
IG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQogICAgICwg
bV9jb250ZXh0VmFsaWQodHJ1ZSkKIHsKICAgICBQYWdlQ2xpZW50UVdpZGdldCogd2ViUGFnZUNs
aWVudApAQCAtMTYyOSw2ICsxNjMxLDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRo
ZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQogICAgIG1faW50ZXJuYWwtPm1fc3ludGhldGlj
RXJyb3JzLmFkZChlcnJvcik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXll
ckNvbXBvc2l0ZWQoKQoreworICAgIG1faW50ZXJuYWwtPm1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sK
KyAgICAvLyBGSVhNRTogQW55IGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IgbmVlZHMgdG8gYmUgdG9s
ZCB0byByZS1yZWFkIGZyb20gaGVyZS4KKyAgICBtX2ludGVybmFsLT5tX2xheWVyQ29tcG9zaXRl
ZCA9IGZhbHNlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5tX2xheWVyQ29tcG9zaXRlZDsKK30K
KwogRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCiB7CiAg
ICAgaWYgKCFtX2ludGVybmFsLT5tX2V4dGVuc2lvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGUxNDMyZjE5ZWI3Njk4ZDkwMGM3OGZjYzk1ZjA2ZGFjNmE1YzczNzMuLjQ1ODkzNTdj
NzAxYTFiOGEyYTYzZGM4MmI5NTU1ZDJjN2ZmMWI1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMTcgIEpvaG4gQmF1bWFuICA8amJhdW1hbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBjb250ZXh0IGNyZWF0
aW9uIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTY0MzEKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1hcmtDb250
ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbC5oOgorCiAyMDExLTAzLTE3ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21p
dW0uY3BwCmluZGV4IDhkMTJjNGQ1MWU1NTZmMGNlMzJlYjM2M2VkNzE4ODUwZDM1N2Y4YTYuLjU0
YzE4ZTM1N2JmYTJmYzgzY2VhNDIwMzdlNTA2Y2JhMTZlNWM3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3Bw
CkBAIC04Miw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogICAgIDogbV93ZWJWaWV3SW1w
bCgwKQogICAgICwgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAg
LCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKICNpZiBVU0UoU0tJQSkKICNlbGlmIFBMQVRGT1JN
KENHKQogICAgICwgbV9yZW5kZXJPdXRwdXQoMCkKQEAgLTE2MCw2ICsxNjEsMjQgQEAgV2ViR0xM
YXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIH0KICNlbmRpZgogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1hcmtD
b250ZXh0Q2hhbmdlZCgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IHBsYXRmb3JtTGF5ZXIoKS0+c2V0VGV4dHVyZVVwZGF0ZWQoKTsKKyNlbmRpZgorICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVl
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmxheWVyQ29tcG9zaXRlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwpAQCAtMTA4NSw2ICsxMTA0LDE0IEBAIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVpbnQsIEdDM0RpbnQsIEdD
M0RlbnVtLCBHQzNEYm9vCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmlld3BvcnQsIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQogCitERUxFR0FURV9UT19JTlRFUk5B
TChtYXJrTGF5ZXJDb21wb3NpdGVkKQorREVMRUdBVEVfVE9fSU5URVJOQUwobWFya0NvbnRleHRD
aGFuZ2VkKQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5sYXllckNvbXBvc2l0ZWQoKTsKK30KKwogREVM
RUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FURV9UT19JTlRFUk5BTF9SKHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhLCBQYXNzUmVmUHRyPEltYWdlRGF0YT4pCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaApp
bmRleCBiNTE3ZTYwYjhkZjllYmY3MTJmNjU2Mjk4ZmRkNTYwNWI4ZWQwZWE0Li4wYWYyOTFlOTYz
MjI5YjZjODRkNTcyOTgwNGNjMGExYzdlNzYxYzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCkBAIC02Niw2ICs2
NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7
CiAgICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwogCisgICAgdm9pZCBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Owor
ICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOworCiAgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAgICAgYm9v
bCBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3Q7CkBAIC0yNzQsNiArMjc4LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwogICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKKyAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBSZWZQdHI8V2ViR0xMYXllckNocm9t
aXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>