<?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>75732</bug_id>
          
          <creation_ts>2012-01-06 12:53:45 -0800</creation_ts>
          <short_desc>[chromium] Add WebSolidColorLayer interface to draw non-textured color layers from Aura.</short_desc>
          <delta_ts>2012-01-23 12:01:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="W. James MacLean">wjmaclean</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>531296</commentid>
    <comment_count>0</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 12:53:45 -0800</bug_when>
    <thetext>[chromium] Add WebSolidColorLayer interface to draw non-textured color layers from Aura. [NOT FOR REVIEW]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531298</commentid>
    <comment_count>1</comment_count>
      <attachid>121477</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 12:54:28 -0800</bug_when>
    <thetext>Created attachment 121477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531301</commentid>
    <comment_count>2</comment_count>
      <attachid>121477</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 12:55:17 -0800</bug_when>
    <thetext>Comment on attachment 121477
Patch

Patch for discussion - do not commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531305</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 13:00:26 -0800</bug_when>
    <thetext>Attachment 121477 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/chromium/src/WebSolidColorLayer.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531307</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 13:00:46 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531311</commentid>
    <comment_count>5</comment_count>
      <attachid>121477</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-06 13:05:01 -0800</bug_when>
    <thetext>Comment on attachment 121477
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.h:44
&gt; +class SolidColorLayerChromium : public LayerChromium {

so we&apos;re just using the type to indicate that we want to display the backgroundColor and nothing else? Do we really need a whole type for this or can we just use a LayerChromium with appropriate bits set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531325</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-01-06 13:15:28 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.

I defer to James Robinson.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531346</commentid>
    <comment_count>7</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-06 13:39:41 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 121477 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121477&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.h:44
&gt; &gt; +class SolidColorLayerChromium : public LayerChromium {
&gt; 
&gt; so we&apos;re just using the type to indicate that we want to display the backgroundColor and nothing else? Do we really need a whole type for this or can we just use a LayerChromium with appropriate bits set?

I was hoping to get it to use a CCColidColorDrawQuad, since that would be textureless and thus lightweight in terms of memory and bandwidth. If this can be achieved with a LayerChromium directly, I&apos;m all for making it simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531355</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-06 13:48:41 -0800</bug_when>
    <thetext>Right, I agree you want to end up there. I don&apos;t think you need a *LayerChromium side class to get that quad - that can be done by smarts on the Impl side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531646</commentid>
    <comment_count>9</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-07 06:02:14 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Right, I agree you want to end up there. I don&apos;t think you need a *LayerChromium side class to get that quad - that can be done by smarts on the Impl side.

Sure ... let me take another look and figure out how it would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534238</commentid>
    <comment_count>10</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-11 14:04:30 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Right, I agree you want to end up there. I don&apos;t think you need a *LayerChromium side class to get that quad - that can be done by smarts on the Impl side.

Here are some alternatives (Enne, please jump in if I&apos;m mis-representing anything here):

1) Add a setImplLayer(PasRef&lt;CCLayerImpl&gt;) function to allow a user to change the impl layer associated with any given LayerChromium.

In this case we could use the proposed CCSolidLayerImpl attached to a LayerChromium to implement the solid colour layer.

2) Have CCLayerImpl default to using a CCSolidColorDrawQuad in appendQuads() instead of a CCCustomLayerDrawQuad. The latter is only used by derived classes of CCLayerImpl, so this would force these derived classes to override appendQuads() to specify that that want to use CCCustomDrawQuad (they already have to override CCLayerImpl::draw()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534482</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-11 18:27:57 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; Right, I agree you want to end up there. I don&apos;t think you need a *LayerChromium side class to get that quad - that can be done by smarts on the Impl side.
&gt; 
&gt; Here are some alternatives (Enne, please jump in if I&apos;m mis-representing anything here):
&gt; 
&gt; 1) Add a setImplLayer(PasRef&lt;CCLayerImpl&gt;) function to allow a user to change the impl layer associated with any given LayerChromium.

Maybe I&apos;m misunderstanding, but I&apos;m not sure it could work that way.  LayerChromium-derived classes create impl layers on demand.
 
&gt; 2) Have CCLayerImpl default to using a CCSolidColorDrawQuad in appendQuads() instead of a CCCustomLayerDrawQuad. The latter is only used by derived classes of CCLayerImpl, so this would force these derived classes to override appendQuads() to specify that that want to use CCCustomDrawQuad (they already have to override CCLayerImpl::draw()).

Yeah, I think this is what I was suggesting, if you go the &quot;LayerChromium implicitly is a SolidColorLayerChromium&quot; route.


For what it&apos;s worth, I think I slightly prefer the original more explicit route, where raw LayerChromium/CCLayerImpl layers remain merely intermediate transform/clipping layers and never draw any content themselves.  If somebody was looking at the codebase and wanted to draw a solid color layer, I&apos;m not sure that they&apos;d have any idea where to look if it was implicit.

I don&apos;t really feel that strongly about it, though; #2 above seems quite reasonable and avoids a lot of boilerplate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535163</commentid>
    <comment_count>12</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-12 14:27:26 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Right, I agree you want to end up there. I don&apos;t think you need a *LayerChromium side class to get that quad - that can be done by smarts on the Impl side.
&gt; &gt; 
&gt; &gt; Here are some alternatives (Enne, please jump in if I&apos;m mis-representing anything here):
&gt; &gt; 
&gt; &gt; 1) Add a setImplLayer(PasRef&lt;CCLayerImpl&gt;) function to allow a user to change the impl layer associated with any given LayerChromium.
&gt; 
&gt; Maybe I&apos;m misunderstanding, but I&apos;m not sure it could work that way.  LayerChromium-derived classes create impl layers on demand.

Yeah, that&apos;s right ... I suppose we could pass a function pointer to

static PassRefPtr&lt;CCSolidColorLayerImpl&gt; create(int id)

except you&apos;d really then prefer it to be

static PassRefPtr&lt;CCLayerImpl&gt; create(int id)

so there was just one pointer type, but then that conflicts with the fact that all the create functions return RefPtrs to their specific types, so that doesn&apos;t quite help ... bah!


&gt; &gt; 2) Have CCLayerImpl default to using a CCSolidColorDrawQuad in appendQuads() instead of a CCCustomLayerDrawQuad. The latter is only used by derived classes of CCLayerImpl, so this would force these derived classes to override appendQuads() to specify that that want to use CCCustomDrawQuad (they already have to override CCLayerImpl::draw()).
&gt; 
&gt; Yeah, I think this is what I was suggesting, if you go the &quot;LayerChromium implicitly is a SolidColorLayerChromium&quot; route.
&gt; 
&gt; 
&gt; For what it&apos;s worth, I think I slightly prefer the original more explicit route, where raw LayerChromium/CCLayerImpl layers remain merely intermediate transform/clipping layers and never draw any content themselves.  If somebody was looking at the codebase and wanted to draw a solid color layer, I&apos;m not sure that they&apos;d have any idea where to look if it was implicit.

I&apos;m also OK with this, if that&apos;s the preferred route.

&gt; I don&apos;t really feel that strongly about it, though; #2 above seems quite reasonable and avoids a lot of boilerplate.

Yes. It has one more wrinkle, in that Aura currently draws the tab contents via PluginLayerChromium, which directly uses CCLayerImpl, so if we do #2 we&apos;d have to write a new impl-side class stucture to display the tab contents ...

So the original route looks even better in this light.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538780</commentid>
    <comment_count>13</comment_count>
      <attachid>123145</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-19 10:03:57 -0800</bug_when>
    <thetext>Created attachment 123145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538784</commentid>
    <comment_count>14</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-19 10:07:49 -0800</bug_when>
    <thetext>New patch. This patch breaks the solid color layer into multiple CCSolidColorDrawQuads so that we can rely on the culler to reduce the number of pixels drawn.

I&apos;m unsure as to what would constitute a reasonable set of tests, and would appreciate input on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538855</commentid>
    <comment_count>15</comment_count>
      <attachid>123145</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-19 11:35:39 -0800</bug_when>
    <thetext>Comment on attachment 123145
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

copyright headers throughout this patch are inconsistent. for all new files they should say 2012 and be 2-clause, not 3-clause

&gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.h:44
&gt; +class SolidColorLayerChromium : public LayerChromium {

it&apos;s strange that there&apos;s no color parameter anywhere in this class. can you at least document how you specify the color (guessing it&apos;s by setBackgroundColor() on the base class)?

&gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.h:47
&gt; +    static PassRefPtr&lt;SolidColorLayerChromium&gt; create(CCLayerDelegate*);

this class doesn&apos;t need a delegate

&gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:40
&gt; +// This class represents a layer that renders a solid color that is generated
&gt; +// externally (not managed by the WebLayerTreeView).
&gt; +// When in single-thread mode, this means during WebLayerTreeView::composite().
&gt; +// When using the threaded compositor, this can mean at an arbitrary time until
&gt; +// the WebLayerTreeView is destroyed.

whaaaat? why is the lifecycle different for this layer type?

&gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:52
&gt; +    WebSolidColorLayer() { } 
&gt; +    WebSolidColorLayer(const WebSolidColorLayer&amp; layer) : WebLayer(layer) { }
&gt; +    virtual ~WebSolidColorLayer() { } 
&gt; +    WebSolidColorLayer&amp; operator=(const WebSolidColorLayer&amp; layer)
&gt; +    {
&gt; +        WebLayer::assign(layer);
&gt; +        return *this;
&gt; +    }

do you need all these? why not just the create()?

&gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:54
&gt; +    WEBKIT_EXPORT void setBackgroundColor(const WebColor&amp;);

do we need to be able to change the color after the layer is constructed, or can it be a construction-time invariant?

&gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:60
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +    WebSolidColorLayer(const WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;&amp;);
&gt; +    WebSolidColorLayer&amp; operator=(const WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;&amp;);
&gt; +    operator WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;() const;
&gt; +#endif

do you need these?

&gt; Source/WebKit/chromium/src/WebSolidColorLayerImpl.cpp:51
&gt; +void WebSolidColorLayerImpl::paintContents(GraphicsContext&amp;, const IntRect&amp;)
&gt; +{
&gt; +}

you don&apos;t need this

&gt; Source/WebKit/chromium/src/WebSolidColorLayerImpl.h:34
&gt; +class WebSolidColorLayerImpl : public WebCore::SolidColorLayerChromium, public WebCore::CCLayerDelegate {

no need to be a delegate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538856</commentid>
    <comment_count>16</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-19 11:36:55 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; New patch. This patch breaks the solid color layer into multiple CCSolidColorDrawQuads so that we can rely on the culler to reduce the number of pixels drawn.
&gt; 
&gt; I&apos;m unsure as to what would constitute a reasonable set of tests, and would appreciate input on this.

You could do something like CCTiledLayerImplTest, where you make sure that all the generated quads exactly fill the visibleLayerRect and don&apos;t overlap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539609</commentid>
    <comment_count>17</comment_count>
      <attachid>123342</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-20 10:33:49 -0800</bug_when>
    <thetext>Created attachment 123342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539611</commentid>
    <comment_count>18</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-20 10:38:40 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; 
&gt; it&apos;s strange that there&apos;s no color parameter anywhere in this class. can you at least document how you specify the color (guessing it&apos;s by setBackgroundColor() on the base class)?

Yes, setBackgroundColor() on the base class. Added documentation in form of comment at start of class.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/SolidColorLayerChromium.h:47
&gt; &gt; +    static PassRefPtr&lt;SolidColorLayerChromium&gt; create(CCLayerDelegate*);
&gt; 
&gt; this class doesn&apos;t need a delegate

Removed.

&gt; &gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:40
&gt; &gt; +// This class represents a layer that renders a solid color that is generated
&gt; &gt; +// externally (not managed by the WebLayerTreeView).
&gt; &gt; +// When in single-thread mode, this means during WebLayerTreeView::composite().
&gt; &gt; +// When using the threaded compositor, this can mean at an arbitrary time until
&gt; &gt; +// the WebLayerTreeView is destroyed.
&gt; 
&gt; whaaaat? why is the lifecycle different for this layer type?

Sorry, out of date ... comments removed.

&gt; &gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:52
&gt; &gt; +    WebSolidColorLayer() { } 
&gt; &gt; +    WebSolidColorLayer(const WebSolidColorLayer&amp; layer) : WebLayer(layer) { }
&gt; &gt; +    virtual ~WebSolidColorLayer() { } 
&gt; &gt; +    WebSolidColorLayer&amp; operator=(const WebSolidColorLayer&amp; layer)
&gt; &gt; +    {
&gt; &gt; +        WebLayer::assign(layer);
&gt; &gt; +        return *this;
&gt; &gt; +    }
&gt; 
&gt; do you need all these? why not just the create()?

Removed.

&gt; &gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:54
&gt; &gt; +    WEBKIT_EXPORT void setBackgroundColor(const WebColor&amp;);
&gt; 
&gt; do we need to be able to change the color after the layer is constructed, or can it be a construction-time invariant?

I am not the end-user for this class, but it is my belief they will want to be able to change its color after creation.

&gt; &gt; Source/WebKit/chromium/public/platform/WebSolidColorLayer.h:60
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; &gt; +    WebSolidColorLayer(const WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;&amp;);
&gt; &gt; +    WebSolidColorLayer&amp; operator=(const WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;&amp;);
&gt; &gt; +    operator WTF::PassRefPtr&lt;WebSolidColorLayerImpl&gt;() const;
&gt; &gt; +#endif
&gt; 
&gt; do you need these?

Just the constructor with the impl class. Others removed.

&gt; &gt; Source/WebKit/chromium/src/WebSolidColorLayerImpl.cpp:51
&gt; &gt; +void WebSolidColorLayerImpl::paintContents(GraphicsContext&amp;, const IntRect&amp;)
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; you don&apos;t need this

Removed.

&gt; &gt; Source/WebKit/chromium/src/WebSolidColorLayerImpl.h:34
&gt; &gt; +class WebSolidColorLayerImpl : public WebCore::SolidColorLayerChromium, public WebCore::CCLayerDelegate {
&gt; 
&gt; no need to be a delegate

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539922</commentid>
    <comment_count>19</comment_count>
      <attachid>123342</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-20 16:40:53 -0800</bug_when>
    <thetext>Comment on attachment 123342
Patch

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

Nearly there!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:43
&gt; +    , m_tileSize(256)

why is this a member variable if it&apos;s always the same? if it&apos;s a constant, make it a constant

&gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:42
&gt; +// FIXME: The next three items have been borrowed from CCTileLayerImplTest.cpp,
&gt; +// but have more general applicability - move them into a something like &quot;CCLayerTestHelper.h/.cpp&quot;?

could you just go ahead and do this?

&gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:99
&gt; +    layer-&gt;setBackgroundColor(0xFFA55AFF);

can you make this a named constant?

&gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:106
&gt; +    EXPECT_EQ(quadList.size(), 1U);
&gt; +    if (!quadList.isEmpty())
&gt; +        EXPECT_EQ(quadList[0]-&gt;toSolidColorDrawQuad()-&gt;color(), 0xFFA55AFF);

if you&apos;re just worried about running off the end of the list if the quadList doesn&apos;t have the expected size, then do this instead:

ASSERT_EQ(quadList.size(), 1u);
EXPECT_EQ(quadList[0]-&gt;....);

if the ASSERT_XXX() fails it&apos;ll immediately abort the test and not try to continue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539944</commentid>
    <comment_count>20</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-20 17:11:48 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 123342 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123342&amp;action=review
&gt; 
&gt; Nearly there!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:43
&gt; &gt; +    , m_tileSize(256)
&gt; 
&gt; why is this a member variable if it&apos;s always the same? if it&apos;s a constant, make it a constant

I guess I figured we might want to alter it at some point, but since that&apos;s not happening at present I&apos;ll take it out.

&gt; &gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:42
&gt; &gt; +// FIXME: The next three items have been borrowed from CCTileLayerImplTest.cpp,
&gt; &gt; +// but have more general applicability - move them into a something like &quot;CCLayerTestHelper.h/.cpp&quot;?
&gt; 
&gt; could you just go ahead and do this?

Will do.

&gt; &gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:99
&gt; &gt; +    layer-&gt;setBackgroundColor(0xFFA55AFF);
&gt; 
&gt; can you make this a named constant?

Will do.

&gt; &gt; Source/WebKit/chromium/tests/CCSolidColorLayerImplTest.cpp:106
&gt; &gt; +    EXPECT_EQ(quadList.size(), 1U);
&gt; &gt; +    if (!quadList.isEmpty())
&gt; &gt; +        EXPECT_EQ(quadList[0]-&gt;toSolidColorDrawQuad()-&gt;color(), 0xFFA55AFF);
&gt; 
&gt; if you&apos;re just worried about running off the end of the list if the quadList doesn&apos;t have the expected size, then do this instead:
&gt; 
&gt; ASSERT_EQ(quadList.size(), 1u);
&gt; EXPECT_EQ(quadList[0]-&gt;....);
&gt; 
&gt; if the ASSERT_XXX() fails it&apos;ll immediately abort the test and not try to continue

Good to know, will revise.

New patch later in the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540559</commentid>
    <comment_count>21</comment_count>
      <attachid>123561</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-23 08:25:39 -0800</bug_when>
    <thetext>Created attachment 123561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540703</commentid>
    <comment_count>22</comment_count>
      <attachid>123561</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-23 11:39:20 -0800</bug_when>
    <thetext>Comment on attachment 123561
Patch

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

R=me

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSolidColorLayerImpl.cpp:65
&gt; +    for (int x = 0; x &lt; width; x += m_tileSize)

add curly braces for this for loop as well since it&apos;s more than one line (in WebKit, braces are determined by the # of lines, not the # of statements)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540729</commentid>
    <comment_count>23</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-01-23 12:01:39 -0800</bug_when>
    <thetext>Committed r105634: &lt;http://trac.webkit.org/changeset/105634&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121477</attachid>
            <date>2012-01-06 12:54:28 -0800</date>
            <delta_ts>2012-01-19 10:03:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75732-20120106155426.patch</filename>
            <type>text/plain</type>
            <size>26508</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uOTJlMGQzOGY0NTFjMjQyZDg2ODY1NmYxMGQyMmQw
YWJkMjU2ZDQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTA2ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgaW50ZXJmYWNlIHRvIGRyYXcgbm9uLXRleHR1cmVk
IGNvbG9yIGxheWVycyBmcm9tIEF1cmEuIFtOT1QgRk9SIFJFVklFV10KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzMyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvbGlkQ29sb3JMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvbGlkQ29sb3JMYXllckNocm9taXVtOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6flNvbGlkQ29sb3JM
YXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xp
ZENvbG9yTGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6fkNDU29saWRDb2xvckxh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjphcHBl
bmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9y
TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJ
bXBsOjpsYXllclR5cGVBc1N0cmluZyk6CisKIDIwMTItMDEtMDUgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDQwNjApOiBmYXN0L2Zv
cm1zL3RleHRhcmVhLW1ldHJpY3MuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDM1OGFhMGM3ZDViMmJlMDNlYmVhNmY3OWMxNGU5NDUzYjczMDdiNTEuLmU4ZmQ4
MDMxMGYwNDk3OTM2MTFjZTMxZDMwMjNmMDcwZGUzNzQwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDEtMDYgIFcuIEphbWVzIE1hY0xlYW4gIDx3
am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIFdlYlNvbGlk
Q29sb3JMYXllciBpbnRlcmZhY2UgdG8gZHJhdyBub24tdGV4dHVyZWQgY29sb3IgbGF5ZXJzIGZy
b20gQXVyYS4gW05PVCBGT1IgUkVWSUVXXQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzU3MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL3BsYXRmb3Jt
L1dlYlNvbGlkQ29sb3JMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRD
b2xvckxheWVyOjpXZWJTb2xpZENvbG9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xp
ZENvbG9yTGF5ZXI6On5XZWJTb2xpZENvbG9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
b2xpZENvbG9yTGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogc3JjL1dlYlNvbGlkQ29sb3JM
YXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6V2ViU29saWRDb2xv
ckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6OnNldEJhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJTb2xpZENvbG9yTGF5ZXJJbXBsPik6CisgICAgICAgICogc3JjL1dlYlNvbGlkQ29s
b3JMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxh
eWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVySW1w
bDo6V2ViU29saWRDb2xvckxheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29s
b3JMYXllckltcGw6On5XZWJTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU29saWRDb2xvckxheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNvbGlkQ29sb3JMYXllckltcGw6OmRyYXdzQ29udGVudCk6CisgICAgICAgICogc3JjL1dl
YlNvbGlkQ29sb3JMYXllckltcGwuaDogQWRkZWQuCisKIDIwMTItMDEtMDUgIEpvY2hlbiBFaXNp
bmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hlY2sgd2hldGhlciBhIFdl
YlZpZXcgZXhpc3RzIGJlZm9yZSBhY2Nlc3NpbmcgaXQgaW4gU3RvcmFnZUFyZWFQcm94eS4gVGhp
cyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGNhc2UsIGUuZy4gZm9yIGRldGFjaGVkIGlmcmFtZXMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggZjM1NTg2OGQ1ODk5ZmFmODVjZTc1OTYwYjI1ZWZkN2VhYmRj
Yzc4Yi4uN2Y0NmI1ZjBlMmNiMjIwODQ0YmE3ZTEwYjliYTg5NDZjMmU2YjQ4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMzU1Myw2ICszNTUzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVt
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JM
YXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNvbG9yLmgnLApAQCAtMzY0OSw2ICszNjUx
LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9y
TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xp
ZENvbG9yTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA1YTQ2NDg0M2UzOTk4ZDcwNTFk
YWJkNjk4MTYxN2JkMDZjOGZkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmNwcApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjaW5jbHVkZSAiU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCIKKworI2lu
Y2x1ZGUgImNjL0NDU29saWRDb2xvckxheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFNvbGlkQ29sb3JMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCgpCit7CisgICAgcmV0dXJuIENDU29saWRDb2xvckxheWVySW1wbDo6Y3Jl
YXRlKGlkKCkpOworfQorCitQYXNzUmVmUHRyPFNvbGlkQ29sb3JMYXllckNocm9taXVtPiBTb2xp
ZENvbG9yTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bShkZWxlZ2F0
ZSkpOworfQorCitTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6U29saWRDb2xvckxheWVyQ2hyb21p
dW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdh
dGUpCit7Cit9CisKK1NvbGlkQ29sb3JMYXllckNocm9taXVtOjp+U29saWRDb2xvckxheWVyQ2hy
b21pdW0oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21p
dW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZWFlZGY4MjY1NjBjYzRmZTI5OTg4NjI5OGY3MmMyZGYxOTExNGY0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IFNvbGlkQ29sb3JMYXllckNocm9taXVtX2gKKyNkZWZpbmUgU29saWRDb2xvckxheWVyQ2hyb21p
dW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyVGlsZXJD
aHJvbWl1bTsKKworLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRv
IHJlbmRlciBhIHNvbGlkIGNvbG9yLgorY2xhc3MgU29saWRDb2xvckxheWVyQ2hyb21pdW0gOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNv
bGlkQ29sb3JMYXllckNocm9taXVtPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlKik7CisKKyAgICB2
aXJ0dWFsIH5Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSgpOworCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgU29saWRDb2xvckxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7Cit9OworCit9
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQzMjEw
YjZiNWUxNDIwZmJjOWRhNzRhOTU4Y2I1OGM2ZTZiNjAxMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxh
eWVySW1wbC5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDU29s
aWRDb2xvckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDQ1NvbGlkQ29sb3JMYXllckltcGw6OkNDU29saWRDb2xvckxheWVySW1wbChpbnQg
aWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKK3sKK30KKworQ0NTb2xpZENvbG9yTGF5ZXJJbXBs
Ojp+Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCkKK3sKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXgg
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzb2xpZENvbG9yVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwor
ICAgIHNvbGlkQ29sb3JUcmFuc2Zvcm0udHJhbnNsYXRlKC1ib3VuZHMoKS53aWR0aCgpIC8gMi4w
LCAtYm91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOworCisgICAgcmV0dXJuIHNvbGlkQ29sb3JUcmFu
c2Zvcm07Cit9CisKK3ZvaWQgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1
YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSkKK3sKKyAgICBJbnRSZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKKyAgICBx
dWFkTGlzdC5hcHBlbmQoQ0NTb2xpZENvbG9yRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3Rh
dGUsIHF1YWRSZWN0LCBiYWNrZ3JvdW5kQ29sb3IoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjY0MTk4MjlhODk1OWI4
ZDc2NzBjNDJlZmU5ZmE2NDk2YzE2NDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmgK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsX2gK
KyNkZWZpbmUgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CisKK2NsYXNzIENDU29saWRD
b2xvckxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1NvbGlkQ29sb3JMYXllckltcGwoaWQpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCk7CisKKyAgICB2aXJ0
dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHF1YWRUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1NvbGlkQ29sb3JMYXllckltcGwoaW50
IGlkKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gIlNvbGlkQ29sb3JMYXllciI7IH0KK307CisKK30KKworI2Vu
ZGlmIC8vIENDU29saWRDb2xvckxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
aW5kZXggYTI0MTk3OGQyNWE5ZTFiYjYxZjZmMGY3YjllNDZhNWYxMjFjZTAwYS4uMGRhZGRkN2Y4
NmU4OGM1MmIzZDYwNGI4NGY0ZDc1YjdmMDFiOTM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMzI1LDYgKzMyNSw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9y
bS9XZWJTb2NrZXRTdHJlYW1FcnJvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRm
b3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dl
YlRocmVhZFNhZmVEYXRhLmgnLApAQCAtNjM1LDYgKzYzNiw4IEBACiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJTb2NrZXQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlck1vY2tJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNwZWVjaElucHV0UmVzdWx0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2xpZENvbG9yTGF5ZXIuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM3ZDRmMzQzMDYzMTIzMmViYTY3NGUyNTNjZWU4OGRiMDM1ODlkZDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2xpZENv
bG9yTGF5ZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTb2xpZENvbG9y
TGF5ZXJfaAorI2RlZmluZSBXZWJTb2xpZENvbG9yTGF5ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOworCisv
LyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBsYXllciB0aGF0IHJlbmRlcnMgYSBzb2xpZCBjb2xv
ciB0aGF0IGlzIGdlbmVyYXRlZAorLy8gZXh0ZXJuYWxseSAobm90IG1hbmFnZWQgYnkgdGhlIFdl
YkxheWVyVHJlZVZpZXcpLgorLy8gV2hlbiBpbiBzaW5nbGUtdGhyZWFkIG1vZGUsIHRoaXMgbWVh
bnMgZHVyaW5nIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSgpLgorLy8gV2hlbiB1c2luZyB0
aGUgdGhyZWFkZWQgY29tcG9zaXRvciwgdGhpcyBjYW4gbWVhbiBhdCBhbiBhcmJpdHJhcnkgdGlt
ZSB1bnRpbAorLy8gdGhlIFdlYkxheWVyVHJlZVZpZXcgaXMgZGVzdHJveWVkLgorY2xhc3MgV2Vi
U29saWRDb2xvckxheWVyIDogcHVibGljIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAgICBXRUJLSVRf
RVhQT1JUIHN0YXRpYyBXZWJTb2xpZENvbG9yTGF5ZXIgY3JlYXRlKCk7CisKKyAgICBXZWJTb2xp
ZENvbG9yTGF5ZXIoKSB7IH0gCisgICAgV2ViU29saWRDb2xvckxheWVyKGNvbnN0IFdlYlNvbGlk
Q29sb3JMYXllciYgbGF5ZXIpIDogV2ViTGF5ZXIobGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgfldl
YlNvbGlkQ29sb3JMYXllcigpIHsgfSAKKyAgICBXZWJTb2xpZENvbG9yTGF5ZXImIG9wZXJhdG9y
PShjb25zdCBXZWJTb2xpZENvbG9yTGF5ZXImIGxheWVyKQorICAgIHsKKyAgICAgICAgV2ViTGF5
ZXI6OmFzc2lnbihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvbG9yJik7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJTb2xpZENvbG9yTGF5ZXIoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+Jik7CisgICAgV2ViU29saWRD
b2xvckxheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JM
YXllckltcGw+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JM
YXllckltcGw+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViU29saWRDb2xvckxheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNjdlZTg5ZmIy
ZjFiYzE3NWJhM2ZkOWYzMWQ1NTk5ODhkNWU1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU29s
aWRDb2xvckxheWVyLmgiCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJXZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJTb2xpZENvbG9yTGF5ZXIgV2ViU29saWRDb2xvckxheWVyOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBXZWJTb2xpZENvbG9yTGF5ZXIoV2ViU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRl
KCkpOworfQorCitXZWJTb2xpZENvbG9yTGF5ZXI6OldlYlNvbGlkQ29sb3JMYXllcihjb25zdCBQ
YXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+JiBub2RlKQorICAgIDogV2ViTGF5ZXIo
bm9kZSkKK3sKK30KKworV2ViU29saWRDb2xvckxheWVyJiBXZWJTb2xpZENvbG9yTGF5ZXI6Om9w
ZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+JiBub2RlKQor
eworICAgIG1fcHJpdmF0ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFdl
YlNvbGlkQ29sb3JMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvbG9yJiBjb2xv
cikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKK1dl
YlNvbGlkQ29sb3JMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2xpZENvbG9yTGF5ZXJJ
bXBsPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlNvbGlkQ29sb3JMYXll
ckltcGwqPihtX3ByaXZhdGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWQzY2Q0YzE4ZTEzODA0Mzk4NGZjYmRjMTY4ZmFhOTRiN2ViNTNi
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlk
Q29sb3JMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViU29saWRDb2xvckxheWVySW1wbC5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViU29s
aWRDb2xvckxheWVySW1wbD4gV2ViU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlNvbGlkQ29sb3JMYXllckltcGwoKSk7Cit9CisKK1dl
YlNvbGlkQ29sb3JMYXllckltcGw6OldlYlNvbGlkQ29sb3JMYXllckltcGwoKQorICAgIDogU29s
aWRDb2xvckxheWVyQ2hyb21pdW0odGhpcykKK3sKKyAgICBzZXRJc0RyYXdhYmxlKHRydWUpOwor
fQorCitXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjp+V2ViU29saWRDb2xvckxheWVySW1wbCgpCit7
CisgICAgc2V0RGVsZWdhdGUoMCk7Cit9CisKK3ZvaWQgV2ViU29saWRDb2xvckxheWVySW1wbDo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKK3sKK30KKwor
Ym9vbCBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOyAvLyBBbHdheXMgZHJhd3MgY3VycmVudCBiYWNrZ3JvdW5kIGNvbG9yLgor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwZGVhMmFiMjAz
ZDVjMDdhODNhOTA5MzgzN2YyMDAyZTcyZGFjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViU29saWRDb2xvckxheWVySW1wbF9oCisjZGVmaW5lIFdl
YlNvbGlkQ29sb3JMYXllckltcGxfaAorCisjaW5jbHVkZSAiU29saWRDb2xvckxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViU29saWRDb2xvckxheWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpTb2xpZENv
bG9yTGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29saWRDb2xvckxheWVySW1wbD4gY3JlYXRl
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsKCk7CisgICAgdmly
dHVhbCB+V2ViU29saWRDb2xvckxheWVySW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXApOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU29saWRDb2xvckxheWVySW1wbF9o
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123145</attachid>
            <date>2012-01-19 10:03:57 -0800</date>
            <delta_ts>2012-01-20 10:33:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75732-20120119130356.patch</filename>
            <type>text/plain</type>
            <size>27201</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDc1YTY1ZTQ3NmE2MGYx
NWQzNDY1ZjVlM2ExNjBkNWI1MGU0ZjA2Ni4uZDQ2MDRkZTE2Y2I4MmExMmYzZDFhNmRhNGE3NDEy
YjkzOWI2ODFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAxLTE5ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgaW50ZXJmYWNlIHRvIGRyYXcgbm9uLXRleHR1cmVk
IGNvbG9yIGxheWVycyBmcm9tIEF1cmEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JM
YXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2xpZENvbG9yTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U29saWRD
b2xvckxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2xpZENvbG9y
TGF5ZXJDaHJvbWl1bTo6U29saWRDb2xvckxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6U29saWRDb2xvckxheWVyQ2hyb21pdW06On5Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21p
dW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1NvbGlk
Q29sb3JMYXllckltcGw6OkNDU29saWRDb2xvckxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NvbGlkQ29sb3JMYXllckltcGw6On5DQ1NvbGlkQ29sb3JMYXllckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6dGlsZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpzZXRUaWxlU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JMYXllckltcGw6OmxheWVyVHlwZUFzU3RyaW5n
KToKKwogMjAxMi0wMS0xOSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgaXNTZWxmT3JBbnNlY3RvciBhbmQgaXNTZWxm
T3JEZXNjZW5kYW50IG1ldGhvZHMgdG8gdXRpbGl0aWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCBmMTMyZDE3ZWNkMjJiZTcwNGJlYjI4MGYzZmMyNmRiZTJjZjBkNTcyLi42OTU1NWQ5
NTY3M2FiOWU0ZDczYmM4NmQ0N2NjY2RlNTg0YjU4ZWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTE5ICBXLiBKYW1lcyBNYWNMZWFuICA8d2pt
YWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJTb2xpZENv
bG9yTGF5ZXIgaW50ZXJmYWNlIHRvIGRyYXcgbm9uLXRleHR1cmVkIGNvbG9yIGxheWVycyBmcm9t
IEF1cmEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViU29saWRDb2xvckxheWVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6OldlYlNvbGlk
Q29sb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6fldlYlNv
bGlkQ29sb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU29saWRDb2xvckxheWVyOjpXZWJTb2xpZENvbG9yTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNvbGlkQ29sb3JMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU29saWRDb2xvckxheWVyOjpvcGVyYXRvciBQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JM
YXllckltcGw+KToKKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjpXZWJTb2xpZENvbG9yTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVySW1wbDo6fldlYlNv
bGlkQ29sb3JMYXllckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXJJ
bXBsOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVy
SW1wbDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVySW1w
bC5oOiBBZGRlZC4KKwogMjAxMi0wMS0xOCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQ2xlYW51cDogTW92ZSBjaHJvbWUtc3BlY2lmaWMgZmlsZXN5c3Rl
bSB0eXBlIGhhbmRsaW5nIGNvZGUgKGZvciBGaWxlU3lzdGVtIEFQSSkgdW5kZXIgY2hyb21pdW0g
ZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2I1MTdkNDM5OTEwOGIyNmVlZDE2NDk5OTMw
YTJmMDQ0OWRhYzJiYS4uMjRkODk0NDU0ODAxNzlkMjRiNDliYzRiMmJmZjZmYTU0NGZlMWY0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU2Myw2ICszNTYzLDggQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0
ZUNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nv
bGlkQ29sb3JMYXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNvbG9yLmgnLApAQCAtMzY3
Miw2ICszNjc0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZURyYXdRdWFkLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9y
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA1YTQ2NDg0M2Uz
OTk4ZDcwNTFkYWJkNjk4MTYxN2JkMDZjOGZkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVt
LmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiU29saWRDb2xvckxheWVyQ2hyb21pdW0u
aCIKKworI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckxheWVySW1wbC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFNvbGlkQ29sb3JMYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCit7CisgICAgcmV0dXJuIENDU29saWRDb2xvckxheWVy
SW1wbDo6Y3JlYXRlKGlkKCkpOworfQorCitQYXNzUmVmUHRyPFNvbGlkQ29sb3JMYXllckNocm9t
aXVtPiBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1
bShkZWxlZ2F0ZSkpOworfQorCitTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6U29saWRDb2xvckxh
eWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICA6IExheWVyQ2hyb21p
dW0oZGVsZWdhdGUpCit7Cit9CisKK1NvbGlkQ29sb3JMYXllckNocm9taXVtOjp+U29saWRDb2xv
ckxheWVyQ2hyb21pdW0oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxh
eWVyQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWFlZGY4MjY1NjBjYzRmZTI5OTg4NjI5OGY3MmMy
ZGYxOTExNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
CisjaWZuZGVmIFNvbGlkQ29sb3JMYXllckNocm9taXVtX2gKKyNkZWZpbmUgU29saWRDb2xvckxh
eWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExh
eWVyVGlsZXJDaHJvbWl1bTsKKworLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3ND
b250ZXh0IHRvIHJlbmRlciBhIHNvbGlkIGNvbG9yLgorY2xhc3MgU29saWRDb2xvckxheWVyQ2hy
b21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNvbGlkQ29sb3JMYXllckNocm9taXVtPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlKik7
CisKKyAgICB2aXJ0dWFsIH5Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSgpOworCitwcm90ZWN0ZWQ6
CisgICAgZXhwbGljaXQgU29saWRDb2xvckxheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7
Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5k
aWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzFlNzcwODEwNjFhYjMzMGM5MDAyZWY1NWQ2NWQ3N2YxNjU0NDNlMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29s
aWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUg
ImNjL0NDU29saWRDb2xvckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDU29saWRDb2xv
ckxheWVySW1wbDo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKGludCBpZCkKKyAgICA6IENDTGF5ZXJJ
bXBsKGlkKQorICAgICwgbV90aWxlU2l6ZSgyNTYpCit7Cit9CisKK0NDU29saWRDb2xvckxheWVy
SW1wbDo6fkNDU29saWRDb2xvckxheWVySW1wbCgpCit7Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0
cml4IENDU29saWRDb2xvckxheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc29saWRDb2xvclRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0o
KTsKKyAgICBzb2xpZENvbG9yVHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzKCkud2lkdGgoKSAv
IDIuMCwgLWJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVybiBzb2xpZENvbG9y
VHJhbnNmb3JtOworfQorCit2b2lkIENDU29saWRDb2xvckxheWVySW1wbDo6YXBwZW5kUXVhZHMo
Q0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFk
U3RhdGUpCit7CisgICAgLy8gV2UgY3JlYXRlIGEgc2VyaWVzIG9mIHNtYWxsZXIgcXVhZHMgaW5z
dGVhZCBvZiBqdXN0IG9uZSBsYXJnZSBvbmUgc28gdGhhdCB0aGUKKyAgICAvLyBjdWxsZXIgY2Fu
IHJlZHVjZSB0aGUgdG90YWwgcGl4ZWxzIGRyYXduLgorICAgIGludCB3aWR0aCA9IGJvdW5kcygp
LndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGJvdW5kcygpLmhlaWdodCgpOworICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gbV90aWxlU2l6ZSkKKyAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gbV90aWxlU2l6ZSkgeworICAgICAgICAgICAgSW50UmVj
dCBzb2xpZFRpbGVSZWN0KHgsIHksIG1pbih3aWR0aCAtIHgsIG1fdGlsZVNpemUpLCBtaW4oaGVp
Z2h0IC0geSwgbV90aWxlU2l6ZSkpOworICAgICAgICAgICAgcXVhZExpc3QuYXBwZW5kKENDU29s
aWRDb2xvckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBzb2xpZFRpbGVSZWN0LCBi
YWNrZ3JvdW5kQ29sb3IoKSkpOworICAgICAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU29saWRDb2xvckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxODI5MWM2NmE4MWMwZTc2ODg5
NTUyMzk2MjEwMzNlN2U5NjY4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaApAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1NvbGlkQ29sb3JMYXllckltcGxfaAorI2Rl
ZmluZSBDQ1NvbGlkQ29sb3JMYXllckltcGxfaAorCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKworY2xhc3MgQ0NTb2xpZENvbG9y
TGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDQ1NvbGlkQ29sb3JMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDU29saWRDb2xvckxheWVySW1wbChpZCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5DQ1NvbGlkQ29sb3JMYXllckltcGwoKTsKKworICAgIHZpcnR1YWwg
VHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsK
KworICAgIGludCB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KKyAgICB2
b2lkIHNldFRpbGVTaXplKGludCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5ld1Np
emUgPiAwKTsKKyAgICAgICAgbV90aWxlU2l6ZSA9IG5ld1NpemU7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsKGludCBpZCk7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJTb2xpZENvbG9yTGF5ZXIiOyB9CisKKyAgICBpbnQgbV90aWxlU2l6ZTsKK307CisK
K30KKworI2VuZGlmIC8vIENDU29saWRDb2xvckxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKaW5kZXggNWMxMjU0YTZlZDQ4MmZkNzExZWQ2ZDBmMTdmMTg1NTQyYmVkYzU4My4u
NjUxNjdkNTY0YzlhMGExOWI5NTJhMDNmOTE5OTMyYTZmNmE2Y2FhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cApAQCAtMzI0LDYgKzMyNCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJTb2NrZXRTdHJlYW1FcnJvci5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL3BsYXRmb3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oJywKKyAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYlRocmVhZFNhZmVEYXRhLmgnLApAQCAtNjM0LDYgKzYzNSw4IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJTb2NrZXQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNv
Y2tldEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlNwZWVjaElucHV0Q29udHJvbGxlck1vY2tJbXBsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrSW1wbC5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlNwZWVjaElucHV0UmVzdWx0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2xpZENvbG9yTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM3ZDRmMzQzMDYzMTIzMmViYTY3NGUyNTNjZWU4OGRiMDM1ODlkZDQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJTb2xpZENvbG9yTGF5ZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJT
b2xpZENvbG9yTGF5ZXJfaAorI2RlZmluZSBXZWJTb2xpZENvbG9yTGF5ZXJfaAorCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2Vi
TGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTb2xpZENvbG9yTGF5ZXJJ
bXBsOworCisvLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBsYXllciB0aGF0IHJlbmRlcnMgYSBz
b2xpZCBjb2xvciB0aGF0IGlzIGdlbmVyYXRlZAorLy8gZXh0ZXJuYWxseSAobm90IG1hbmFnZWQg
YnkgdGhlIFdlYkxheWVyVHJlZVZpZXcpLgorLy8gV2hlbiBpbiBzaW5nbGUtdGhyZWFkIG1vZGUs
IHRoaXMgbWVhbnMgZHVyaW5nIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSgpLgorLy8gV2hl
biB1c2luZyB0aGUgdGhyZWFkZWQgY29tcG9zaXRvciwgdGhpcyBjYW4gbWVhbiBhdCBhbiBhcmJp
dHJhcnkgdGltZSB1bnRpbAorLy8gdGhlIFdlYkxheWVyVHJlZVZpZXcgaXMgZGVzdHJveWVkLgor
Y2xhc3MgV2ViU29saWRDb2xvckxheWVyIDogcHVibGljIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTb2xpZENvbG9yTGF5ZXIgY3JlYXRlKCk7CisKKyAg
ICBXZWJTb2xpZENvbG9yTGF5ZXIoKSB7IH0gCisgICAgV2ViU29saWRDb2xvckxheWVyKGNvbnN0
IFdlYlNvbGlkQ29sb3JMYXllciYgbGF5ZXIpIDogV2ViTGF5ZXIobGF5ZXIpIHsgfQorICAgIHZp
cnR1YWwgfldlYlNvbGlkQ29sb3JMYXllcigpIHsgfSAKKyAgICBXZWJTb2xpZENvbG9yTGF5ZXIm
IG9wZXJhdG9yPShjb25zdCBXZWJTb2xpZENvbG9yTGF5ZXImIGxheWVyKQorICAgIHsKKyAgICAg
ICAgV2ViTGF5ZXI6OmFzc2lnbihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNv
bG9yJik7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJTb2xpZENvbG9yTGF5
ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+Jik7CisgICAg
V2ViU29saWRDb2xvckxheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYlNv
bGlkQ29sb3JMYXllckltcGw+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYlNv
bGlkQ29sb3JMYXllckltcGw+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gV2ViU29saWRDb2xvckxheWVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYx
YTY0NThiMmRhNzJkZWIyYjY5OTJjNzUwY2JlMTU3NzBiNzM3ODYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicGxhdGZv
cm0vV2ViU29saWRDb2xvckxheWVyLmgiCisKKyNpbmNsdWRlICJXZWJTb2xpZENvbG9yTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJTb2xpZENvbG9yTGF5ZXIgV2ViU29saWRDb2xvckxheWVyOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBXZWJTb2xpZENvbG9yTGF5ZXIoV2ViU29saWRDb2xvckxheWVySW1w
bDo6Y3JlYXRlKCkpOworfQorCitXZWJTb2xpZENvbG9yTGF5ZXI6OldlYlNvbGlkQ29sb3JMYXll
cihjb25zdCBQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+JiBub2RlKQorICAgIDog
V2ViTGF5ZXIobm9kZSkKK3sKK30KKworV2ViU29saWRDb2xvckxheWVyJiBXZWJTb2xpZENvbG9y
TGF5ZXI6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+
JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQor
Cit2b2lkIFdlYlNvbGlkQ29sb3JMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNv
bG9yJiBjb2xvcikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7
Cit9CisKK1dlYlNvbGlkQ29sb3JMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2xpZENv
bG9yTGF5ZXJJbXBsPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlNvbGlk
Q29sb3JMYXllckltcGwqPihtX3ByaXZhdGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29s
b3JMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xv
ckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQzY2Q0YzE4ZTEzODA0Mzk4NGZjYmRjMTY4ZmFh
OTRiN2ViNTNiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU29saWRDb2xvckxheWVySW1wbC5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQ
dHI8V2ViU29saWRDb2xvckxheWVySW1wbD4gV2ViU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlNvbGlkQ29sb3JMYXllckltcGwoKSk7
Cit9CisKK1dlYlNvbGlkQ29sb3JMYXllckltcGw6OldlYlNvbGlkQ29sb3JMYXllckltcGwoKQor
ICAgIDogU29saWRDb2xvckxheWVyQ2hyb21pdW0odGhpcykKK3sKKyAgICBzZXRJc0RyYXdhYmxl
KHRydWUpOworfQorCitXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjp+V2ViU29saWRDb2xvckxheWVy
SW1wbCgpCit7CisgICAgc2V0RGVsZWdhdGUoMCk7Cit9CisKK3ZvaWQgV2ViU29saWRDb2xvckxh
eWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikK
K3sKK30KKworYm9vbCBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOyAvLyBBbHdheXMgZHJhd3MgY3VycmVudCBiYWNrZ3JvdW5k
IGNvbG9yLgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgw
ZGVhMmFiMjAzZDVjMDdhODNhOTA5MzgzN2YyMDAyZTcyZGFjYWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmgKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU29saWRDb2xvckxheWVySW1wbF9oCisj
ZGVmaW5lIFdlYlNvbGlkQ29sb3JMYXllckltcGxfaAorCisjaW5jbHVkZSAiU29saWRDb2xvckxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU29saWRDb2xvckxheWVySW1wbCA6IHB1YmxpYyBXZWJDb3Jl
OjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29saWRDb2xvckxheWVySW1w
bD4gY3JlYXRlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsKCk7
CisgICAgdmlydHVhbCB+V2ViU29saWRDb2xvckxheWVySW1wbCgpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU29saWRDb2xvckxh
eWVySW1wbF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123342</attachid>
            <date>2012-01-20 10:33:49 -0800</date>
            <delta_ts>2012-01-23 08:25:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75732-20120120133346.patch</filename>
            <type>text/plain</type>
            <size>30176</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTllYzMwODljN2M4NmIx
OGEyMmIwY2ZlYjRmYmE4MTI2YWU5ZTU3My4uNjNiZDA1YWNlMjE3NTZhYWY5Zjk0ZDZmZThiMTdj
NzY2MmNmNTZmOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAxLTIwICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgaW50ZXJmYWNlIHRvIGRyYXcgbm9uLXRleHR1cmVk
IGNvbG9yIGxheWVycyBmcm9tIEF1cmEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgdG8gcGFpbnQgc29saWQtY29s
b3IgbGF5ZXJzIHdpdGhvdXQgYSBiYWNraW5nIHRleHR1cmUuCisKKyAgICAgICAgVGVzdDogdW5p
dCB0ZXN0IGZvciBDQ1NvbGlkQ29sb3JMYXllckltcGwuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVy
Q2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvbGlkQ29sb3JMYXllckNo
cm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTb2xpZENvbG9y
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvbGlkQ29sb3JMYXll
ckNocm9taXVtOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpT
b2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6flNvbGlkQ29sb3JMYXllckNocm9taXVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlk
Q29sb3JMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xv
ckxheWVySW1wbDo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U29saWRDb2xvckxheWVySW1wbDo6fkNDU29saWRDb2xvckxheWVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjp0aWxlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1NvbGlkQ29sb3JMYXllckltcGw6OnNldFRpbGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU29saWRDb2xvckxheWVySW1wbDo6bGF5ZXJUeXBlQXNTdHJpbmcpOgor
CiAyMDEyLTAxLTIwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHI5ODg1Mik6IGFwcGxlLmNvbSBuYXZpZ2F0aW9uIGJhciBp
cyBicm9rZW4gdW5kZXIgZnVsbC1wYWdlIHpvb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggMjg4ZDU2ZjA0ZGNkNzBjZTNjYWU2NzZmYTNkNGQxMGVhZjM0ZGZhNy4uY2FkNzJlNDlmNzdm
ODg0NjU5OGQyOTA2ZmNkMDZiOTM0Yzg0Y2M1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNyBAQAorMjAxMi0wMS0yMCAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVh
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgV2ViU29saWRDb2xvckxh
eWVyIGludGVyZmFjZSB0byBkcmF3IG5vbi10ZXh0dXJlZCBjb2xvciBsYXllcnMgZnJvbSBBdXJh
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3MzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL3BsYXRmb3Jt
L1dlYlNvbGlkQ29sb3JMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xv
ckxheWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVyOjpXZWJTb2xpZENv
bG9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6OnNldEJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgICogc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVySW1wbDo6V2ViU29saWRDb2xvckxh
eWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllckltcGw6On5XZWJT
b2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVySW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wbGV0ZWx5Q29udGFpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6dmVyaWZ5UXVhZHNFeGFjdGx5Q292ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDEyLTAxLTIwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbY2hyb21pdW1dIGFkZCBXZWJEZXZUb29s
c0Zyb250ZW5kQ2xpZW50OjpvcGVuSW5OZXdUYWIgZm9yIHVwY29taW5nIFdlYkNvcmUgY2hhbmdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGJiY2M5NDg2ZGYyNTNjZjI4NTEyMmJiMTQzYzMyOTI2M2Zi
ZmZiZDYuLmU4ZmM4OTE5ODU0NTY5ZWZjYzFiZDU4OTdhYjE0MmY3MDgxN2VlNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM1NjcsNiArMzU2Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1
bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9y
TGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1Db2xvci5oJywKQEAgLTM2NzYsNiArMzY3
OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckRyYXdRdWFkLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xv
ckxheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVEcmF3UXVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29s
aWRDb2xvckxheWVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMTM1NDZiYWU4N2Y0MDUxYjMw
ZTM0OTRjMGYyZmRlODUzZjFlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlNvbGlkQ29sb3JMYXllckNocm9taXVt
LmgiCisKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBTb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQoreworICAgIHJldHVybiBDQ1NvbGlkQ29sb3JMYXll
ckltcGw6OmNyZWF0ZShpZCgpKTsKK30KKworUGFzc1JlZlB0cjxTb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bT4gU29saWRDb2xvckxheWVyQ2hyb21pdW06OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSgpKTsKK30KKworU29saWRDb2xvckxh
eWVyQ2hyb21pdW06OlNvbGlkQ29sb3JMYXllckNocm9taXVtKCkKKyAgICA6IExheWVyQ2hyb21p
dW0oKQoreworfQorCitTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6flNvbGlkQ29sb3JMYXllckNo
cm9taXVtKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9t
aXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWQxNDg5MGJkMGUxZjBjMjBjNjNjNmQyMzE3MTU5NDhkMjE4OTRm
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIFNvbGlkQ29sb3JMYXllckNocm9taXVtX2gKKyNkZWZpbmUgU29s
aWRDb2xvckxheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKKworLy8gQSBMYXllciB0aGF0IHJlbmRlcnMgYSBz
b2xpZCBjb2xvci4gVGhlIGNvbG9yIGlzIHNwZWNpZmllZCBieSB1c2luZworLy8gc2V0QmFja2dy
b3VuZENvbG9yKCkgb24gdGhlIGJhc2UgY2xhc3MuCitjbGFzcyBTb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U29saWRDb2xvckxheWVyQ2hyb21pdW0+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB+
U29saWRDb2xvckxheWVyQ2hyb21pdW0oKTsKKworcHJvdGVjdGVkOgorICAgIFNvbGlkQ29sb3JM
YXllckNocm9taXVtKCk7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTIwMjAzN2EwYmZlMDhkOTQ2MDA4ZjE4MGRmMWU1MzAxZDU1MGJk
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0NDU29saWRDb2xvckxheWVySW1wbDo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKGludCBpZCkK
KyAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV90aWxlU2l6ZSgyNTYpCit7Cit9CisKK0ND
U29saWRDb2xvckxheWVySW1wbDo6fkNDU29saWRDb2xvckxheWVySW1wbCgpCit7Cit9CisKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IENDU29saWRDb2xvckxheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc29saWRDb2xvclRyYW5zZm9ybSA9
IGRyYXdUcmFuc2Zvcm0oKTsKKyAgICBzb2xpZENvbG9yVHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91
bmRzKCkud2lkdGgoKSAvIDIuMCwgLWJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJl
dHVybiBzb2xpZENvbG9yVHJhbnNmb3JtOworfQorCit2b2lkIENDU29saWRDb2xvckxheWVySW1w
bDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0
YXRlKiBzaGFyZWRRdWFkU3RhdGUpCit7CisgICAgLy8gV2UgY3JlYXRlIGEgc2VyaWVzIG9mIHNt
YWxsZXIgcXVhZHMgaW5zdGVhZCBvZiBqdXN0IG9uZSBsYXJnZSBvbmUgc28gdGhhdCB0aGUKKyAg
ICAvLyBjdWxsZXIgY2FuIHJlZHVjZSB0aGUgdG90YWwgcGl4ZWxzIGRyYXduLgorICAgIGludCB3
aWR0aCA9IGJvdW5kcygpLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGJvdW5kcygpLmhlaWdo
dCgpOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gbV90aWxlU2l6ZSkKKyAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gbV90aWxlU2l6ZSkgeworICAg
ICAgICAgICAgSW50UmVjdCBzb2xpZFRpbGVSZWN0KHgsIHksIG1pbih3aWR0aCAtIHgsIG1fdGls
ZVNpemUpLCBtaW4oaGVpZ2h0IC0geSwgbV90aWxlU2l6ZSkpOworICAgICAgICAgICAgcXVhZExp
c3QuYXBwZW5kKENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBz
b2xpZFRpbGVSZWN0LCBiYWNrZ3JvdW5kQ29sb3IoKSkpOworICAgICAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkNmFi
N2U4NmM2Yzc4ZDc3NWU3YTc0NDUzNDU1MmE3MDNmMzJjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JM
YXllckltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1NvbGlkQ29sb3JM
YXllckltcGxfaAorI2RlZmluZSBDQ1NvbGlkQ29sb3JMYXllckltcGxfaAorCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKworY2xh
c3MgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1NvbGlkQ29sb3JMYXllckltcGw+IGNyZWF0ZShpbnQg
aWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDU29saWRDb2xvckxheWVy
SW1wbChpZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1NvbGlkQ29sb3JMYXllckltcGwoKTsK
KworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqKTsKKworICAgIGludCB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGls
ZVNpemU7IH0KKyAgICB2b2lkIHNldFRpbGVTaXplKGludCBuZXdTaXplKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG5ld1NpemUgPiAwKTsKKyAgICAgICAgbV90aWxlU2l6ZSA9IG5ld1NpemU7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsKGlu
dCBpZCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuICJTb2xpZENvbG9yTGF5ZXIiOyB9CisKKyAgICBpbnQgbV90
aWxlU2l6ZTsKK307CisKK30KKworI2VuZGlmIC8vIENDU29saWRDb2xvckxheWVySW1wbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggZWJlMThhYjA4YmZlODBhNTFmYTVlMjdmY2Qy
ZGZiM2MyNDJjYmQyZS4uNWY2NDU5Njk4ZDk3Yzk5N2EwNzhmZDRmMmU2ZWY5ZDU1NTBkNDExNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMzI2LDYgKzMyNiw3IEBACiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2NrZXRTdHJlYW1FcnJvci5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXll
ci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlRocmVhZC5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL3BsYXRmb3JtL1dlYlRocmVhZFNhZmVEYXRhLmgnLApAQCAtNjM4LDYgKzYz
OSw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2NrZXQuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlNvY2tldEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNv
Y2tldEltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaElucHV0Q29udHJvbGxlck1vY2tJbXBsLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrSW1wbC5o
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaElucHV0UmVzdWx0LmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAyNTAzYTljMzZjM2NjMWQ1MzBiYzFlMjI1ZDhi
Njg4YmYxYjhjYzJhLi4xZmYxY2FmN2U5NDM4MTRjYTlmMjJiMDZlY2Q5MDhhNjY4ZjhkNWFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc4LDYgKzc4LDcgQEAKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NT
Y2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJ
bXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGltZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2xpZENvbG9yTGF5ZXIuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFkOTEyM2Q5NjJhZmVhZWE4YTU2MzEyOTQ1ZGUxZmM1Zjg5NmM5ZmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTb2xpZENv
bG9yTGF5ZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTb2xpZENvbG9y
TGF5ZXJfaAorI2RlZmluZSBXZWJTb2xpZENvbG9yTGF5ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsOworCitj
bGFzcyBXZWJTb2xpZENvbG9yTGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgeworcHVibGljOgorICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYlNvbGlkQ29sb3JMYXllciBjcmVhdGUoKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvbG9yJik7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJTb2xpZENvbG9yTGF5ZXIoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+Jik7CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU29saWRDb2xvckxheWVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjExZDdjMTQxNzY3M2U3ODg2YmY1ZmE3MWQ4MTYwYzQzNDYxMWQxOWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9y
TGF5ZXIuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViU29saWRDb2xvckxheWVyLmgiCisKKyNpbmNsdWRlICJXZWJT
b2xpZENvbG9yTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRSZWN0Lmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTb2xpZENvbG9yTGF5ZXIgV2ViU29saWRDb2xv
ckxheWVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBXZWJTb2xpZENvbG9yTGF5ZXIoV2ViU29s
aWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKCkpOworfQorCitXZWJTb2xpZENvbG9yTGF5ZXI6Oldl
YlNvbGlkQ29sb3JMYXllcihjb25zdCBQYXNzUmVmUHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+
JiBub2RlKQorICAgIDogV2ViTGF5ZXIobm9kZSkKK3sKK30KKwordm9pZCBXZWJTb2xpZENvbG9y
TGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb2xvciYgY29sb3IpCit7CisgICAg
bV9wcml2YXRlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlk
Q29sb3JMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRD
b2xvckxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNiMWEzMGUzOGMzMGE5NTdkZGUzYTg2MWE0
ODdkYTE3YzgxZDI5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU29saWRDb2xvckxheWVySW1wbC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NS
ZWZQdHI8V2ViU29saWRDb2xvckxheWVySW1wbD4gV2ViU29saWRDb2xvckxheWVySW1wbDo6Y3Jl
YXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlNvbGlkQ29sb3JMYXllckltcGwo
KSk7Cit9CisKK1dlYlNvbGlkQ29sb3JMYXllckltcGw6OldlYlNvbGlkQ29sb3JMYXllckltcGwo
KQorICAgIDogU29saWRDb2xvckxheWVyQ2hyb21pdW0oKQoreworICAgIHNldElzRHJhd2FibGUo
dHJ1ZSk7Cit9CisKK1dlYlNvbGlkQ29sb3JMYXllckltcGw6On5XZWJTb2xpZENvbG9yTGF5ZXJJ
bXBsKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MjY3M2I0MmI2OGY4Y2QxZTcxMWI5MWUxMjcwZDY3NmQ1ZDc2OWVhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvbGlkQ29sb3JMYXllckltcGxfaAor
I2RlZmluZSBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIlNvbGlkQ29sb3JM
YXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlNvbGlkQ29sb3JMYXllckltcGwgOiBwdWJsaWMgV2ViQ29y
ZTo6U29saWRDb2xvckxheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYlNvbGlkQ29sb3JMYXllckltcGw+IGNyZWF0ZSgpOworCitwcm90ZWN0ZWQ6CisgICAg
V2ViU29saWRDb2xvckxheWVySW1wbCgpOworICAgIHZpcnR1YWwgfldlYlNvbGlkQ29sb3JMYXll
ckltcGwoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU29s
aWRDb2xvckxheWVySW1wbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2MmFi
MDMyYTdmYzViZTJkYmY5MDBkZmRjNGViMWNhMzlhMjIyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3Bw
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCIKKworI2luY2x1ZGUgIlJlZ2lv
bi5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgorCisj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworLy8gRklYTUU6IFRoZSBuZXh0
IHRocmVlIGl0ZW1zIGhhdmUgYmVlbiBib3Jyb3dlZCBmcm9tIENDVGlsZUxheWVySW1wbFRlc3Qu
Y3BwLAorLy8gYnV0IGhhdmUgbW9yZSBnZW5lcmFsIGFwcGxpY2FiaWxpdHkgLSBtb3ZlIHRoZW0g
aW50byBhIHNvbWV0aGluZyBsaWtlICJDQ0xheWVyVGVzdEhlbHBlci5oLy5jcHAiPworc3RhdGlj
IGJvb2wgY29tcGxldGVseUNvbnRhaW5zKGNvbnN0IFJlZ2lvbiYgY29udGFpbmVyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIFJlZ2lvbiB0ZXN0ZXIocmVjdCk7CisgICAgVmVjdG9yPElu
dFJlY3Q+IHJlY3RzID0gY29udGFpbmVyLnJlY3RzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgdGVzdGVyLnN1YnRyYWN0KHJlY3RzW2ld
KTsKKyAgICByZXR1cm4gdGVzdGVyLmlzRW1wdHkoKTsKK30KKworLy8gQWxpZ24gd2l0aCBleHBl
Y3RlZCBhbmQgYWN0dWFsIG91dHB1dAorc3RhdGljIGNvbnN0IGNoYXIqIHF1YWRTdHJpbmcgPSAi
ICAgIFF1YWQ6ICI7CisKK3N0YXRpYyB2b2lkIHZlcmlmeVF1YWRzRXhhY3RseUNvdmVyUmVjdChj
b25zdCBDQ1F1YWRMaXN0JiBxdWFkcywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZWdp
b24gcmVtYWluaW5nKHJlY3QpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5z
aXplKCk7ICsraSkgeworICAgICAgICBDQ0RyYXdRdWFkKiBxdWFkID0gcXVhZHNbaV0uZ2V0KCk7
CisKKyAgICAgICAgRVhQRUNUX1RSVUUocmVjdC5jb250YWlucyhxdWFkLT5xdWFkUmVjdCgpKSkg
PDwgcXVhZFN0cmluZyA8PCBpOworICAgICAgICBFWFBFQ1RfVFJVRShjb21wbGV0ZWx5Q29udGFp
bnMocmVtYWluaW5nLCBxdWFkLT5xdWFkUmVjdCgpKSkgPDwgcXVhZFN0cmluZyA8PCBpOworICAg
ICAgICByZW1haW5pbmcuc3VidHJhY3QoUmVnaW9uKHF1YWQtPnF1YWRSZWN0KCkpKTsKKyAgICB9
CisKKyAgICBFWFBFQ1RfVFJVRShyZW1haW5pbmcuaXNFbXB0eSgpKTsKK30KKworVEVTVChDQ1Nv
bGlkQ29sb3JMYXllckltcGxUZXN0LCB2ZXJpZnlUaWxpbmdDb21wbGV0ZUFuZE5vT3ZlcmxhcCkK
K3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKworICAg
IENDUXVhZExpc3QgcXVhZExpc3Q7CisgICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKDgw
MCwgNjAwKTsKKyAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIGxheWVyU2l6ZSk7CisKKyAgICBSZWZQdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXll
ciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDApOworICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIGxheWVyLT5zZXRCb3VuZHMobGF5
ZXJTaXplKTsKKworICAgIE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRl
ID0gbGF5ZXItPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOworICAgIGxheWVyLT5hcHBlbmRRdWFk
cyhxdWFkTGlzdCwgc2hhcmVkUXVhZFN0YXRlLmdldCgpKTsKKworICAgIHZlcmlmeVF1YWRzRXhh
Y3RseUNvdmVyUmVjdChxdWFkTGlzdCwgdmlzaWJsZUxheWVyUmVjdCk7Cit9CisKK1RFU1QoQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5Q29ycmVjdEJhY2tncm91bmRDb2xvckluUXVh
ZCkKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgc2NvcGVkSW1wbFRocmVhZDsKKwor
ICAgIENDUXVhZExpc3QgcXVhZExpc3Q7CisgICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXpl
KDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBJbnRSZWN0KEludFBv
aW50KCksIGxheWVyU2l6ZSk7CisKKyAgICBSZWZQdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBs
YXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDApOworICAgIGxheWVyLT5zZXRW
aXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOworICAgIGxheWVyLT5zZXRCb3VuZHMo
bGF5ZXJTaXplKTsKKyAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKDB4RkZBNTVBRkYpOwor
CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRRdWFkU3RhdGUgPSBsYXllci0+
Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCk7CisgICAgbGF5ZXItPmFwcGVuZFF1YWRzKHF1YWRMaXN0
LCBzaGFyZWRRdWFkU3RhdGUuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKHF1YWRMaXN0LnNpemUo
KSwgMVUpOworICAgIGlmICghcXVhZExpc3QuaXNFbXB0eSgpKQorICAgICAgICBFWFBFQ1RfRVEo
cXVhZExpc3RbMF0tPnRvU29saWRDb2xvckRyYXdRdWFkKCktPmNvbG9yKCksIDB4RkZBNTVBRkYp
OworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123561</attachid>
            <date>2012-01-23 08:25:39 -0800</date>
            <delta_ts>2012-01-23 11:39:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75732-20120123112537.patch</filename>
            <type>text/plain</type>
            <size>36420</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ3OGUzMDU3NjgxNTY2
YTQyZWYwYjQ4Nzk3ZTBiNGNmZTU1ZjgzNC4uODk5OTIxNDUxZmE4ODY0MjJhM2E2MDQ3MzYxZDlm
YWE4NzIyM2EyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAxLTIzICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgaW50ZXJmYWNlIHRvIGRyYXcgbm9uLXRleHR1cmVk
IGNvbG9yIGxheWVycyBmcm9tIEF1cmEuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NTczMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBXZWJTb2xpZENvbG9yTGF5ZXIgdG8gcGFpbnQgc29saWQtY29s
b3IgbGF5ZXJzIHdpdGhvdXQgYSBiYWNraW5nIHRleHR1cmUuCisKKyAgICAgICAgVGVzdDogdW5p
dCB0ZXN0IGZvciBDQ1NvbGlkQ29sb3JMYXllckltcGwuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVy
Q2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvbGlkQ29sb3JMYXllckNo
cm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTb2xpZENvbG9y
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvbGlkQ29sb3JMYXll
ckNocm9taXVtOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpT
b2xpZENvbG9yTGF5ZXJDaHJvbWl1bTo6flNvbGlkQ29sb3JMYXllckNocm9taXVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlk
Q29sb3JMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDU29saWRDb2xv
ckxheWVySW1wbDo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U29saWRDb2xvckxheWVySW1wbDo6fkNDU29saWRDb2xvckxheWVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpsYXllclR5cGVBc1N0cmlu
Zyk6CisKIDIwMTItMDEtMjMgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5j
b20+CiAKICAgICAgICAgU1ZHIGFuaW1hdGlvbiByZXBhaW50IGlzc3VlIHdpdGggaW1hZ2UgYW5k
IGR5bmFtaWMgY2xpcFBhdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYWRjZGU4OTYw
NmQ5NTlmYThiMDVmZTJlZjYxZWYxMGE2ZTYzYjhhNy4uODY3ZDdmNmU5YzFiMTM4MGU5OTc3NDY1
YjMzYjkwOTM2YzhmM2Q5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MCBAQAorMjAxMi0wMS0yMyAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgV2ViU29saWRDb2xvckxheWVyIGludGVyZmFj
ZSB0byBkcmF3IG5vbi10ZXh0dXJlZCBjb2xvciBsYXllcnMgZnJvbSBBdXJhLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3MzIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29s
b3JMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVyOjpXZWJTb2xpZENvbG9yTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTb2xpZENvbG9yTGF5ZXI6OnNldEJhY2tncm91bmRDb2xvcik6
CisgICAgICAgICogc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU29saWRDb2xvckxheWVySW1wbDo6V2ViU29saWRDb2xvckxheWVySW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllckltcGw6On5XZWJTb2xpZENvbG9yTGF5
ZXJJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAo
Q0NMYXllclRlc3RDb21tb246OmNvbXBsZXRlbHlDb250YWlucyk6CisgICAgICAgIChDQ0xheWVy
VGVzdENvbW1vbjo6dmVyaWZ5UXVhZHNFeGFjdGx5Q292ZXJSZWN0KToKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVyVGVzdENvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9DQ1NvbGlkQ29s
b3JMYXllckltcGxUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChDQ0xheWVyVGVzdENvbW1vbjo6
VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwOgorCiAyMDEy
LTAxLTIwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBQYWdlQWdlbnQub3BlbigpIGRvc2VuJ3QgYmVsb25nIHRvIHRoZSBwcm90
b2NvbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiZmI1YzYxMWM1ZjdlNTFmY2UxZTZlZmY1MzEwMmJk
ODFkZmFiNTYxLi5hNzJiMWE3NjBjMDg3NmE4MTk4MzU0MjY0NzQ5N2U0ZmIwNjNlZDMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0zNTcyLDYgKzM1NzIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRD
b2xvckxheWVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ29sb3IuaCcsCkBAIC0zNjgxLDYg
KzM2ODMsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlk
Q29sb3JMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlRHJhd1F1YWQuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NvbGlkQ29sb3JMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDEzNTQ2YmFlODdmNDA1
MWIzMGUzNDk0YzBmMmZkZTg1M2YxZTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU29saWRDb2xvckxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJTb2xpZENvbG9yTGF5ZXJDaHJv
bWl1bS5oIgorCisjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gU29saWRDb2xvckxheWVy
Q2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NTb2xpZENvbG9y
TGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U29saWRDb2xvckxheWVy
Q2hyb21pdW0+IFNvbGlkQ29sb3JMYXllckNocm9taXVtOjpjcmVhdGUoKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU29saWRDb2xvckxheWVyQ2hyb21pdW0oKSk7Cit9CisKK1NvbGlkQ29s
b3JMYXllckNocm9taXVtOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSgpCisgICAgOiBMYXllckNo
cm9taXVtKCkKK3sKK30KKworU29saWRDb2xvckxheWVyQ2hyb21pdW06On5Tb2xpZENvbG9yTGF5
ZXJDaHJvbWl1bSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NvbGlkQ29sb3JMYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJD
aHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMTQ4OTBiZDBlMWYwYzIwYzYzYzZkMjMxNzE1OTQ4ZDIx
ODk0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Tb2xpZENvbG9yTGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5l
IFNvbGlkQ29sb3JMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisKKy8vIEEgTGF5ZXIgdGhhdCByZW5kZXJz
IGEgc29saWQgY29sb3IuIFRoZSBjb2xvciBpcyBzcGVjaWZpZWQgYnkgdXNpbmcKKy8vIHNldEJh
Y2tncm91bmRDb2xvcigpIG9uIHRoZSBiYXNlIGNsYXNzLgorY2xhc3MgU29saWRDb2xvckxheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNvbGlkQ29sb3JMYXllckNocm9taXVtPiBjcmVhdGUoKTsKKworICAgIHZpcnR1
YWwgflNvbGlkQ29sb3JMYXllckNocm9taXVtKCk7CisKK3Byb3RlY3RlZDoKKyAgICBTb2xpZENv
bG9yTGF5ZXJDaHJvbWl1bSgpOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU29saWRDb2xvckxheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXll
ckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyMDIwMzdhMGJmZTA4ZDk0NjAwOGYxODBkZjFlNTMwMWQ1
NTBiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaCIKKworI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRy
YXdRdWFkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDQ1NvbGlkQ29sb3JMYXllckltcGw6OkNDU29saWRDb2xvckxheWVySW1wbChpbnQg
aWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICAsIG1fdGlsZVNpemUoMjU2KQoreworfQor
CitDQ1NvbGlkQ29sb3JMYXllckltcGw6On5DQ1NvbGlkQ29sb3JMYXllckltcGwoKQoreworfQor
CitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1NvbGlkQ29sb3JMYXllckltcGw6OnF1YWRUcmFuc2Zv
cm0oKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvbGlkQ29sb3JUcmFuc2Zv
cm0gPSBkcmF3VHJhbnNmb3JtKCk7CisgICAgc29saWRDb2xvclRyYW5zZm9ybS50cmFuc2xhdGUo
LWJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7CisKKyAg
ICByZXR1cm4gc29saWRDb2xvclRyYW5zZm9ybTsKK30KKwordm9pZCBDQ1NvbGlkQ29sb3JMYXll
ckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQoreworICAgIC8vIFdlIGNyZWF0ZSBhIHNlcmllcyBv
ZiBzbWFsbGVyIHF1YWRzIGluc3RlYWQgb2YganVzdCBvbmUgbGFyZ2Ugb25lIHNvIHRoYXQgdGhl
CisgICAgLy8gY3VsbGVyIGNhbiByZWR1Y2UgdGhlIHRvdGFsIHBpeGVscyBkcmF3bi4KKyAgICBp
bnQgd2lkdGggPSBib3VuZHMoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBib3VuZHMoKS5o
ZWlnaHQoKTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IG1fdGlsZVNpemUp
CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IG1fdGlsZVNpemUpIHsK
KyAgICAgICAgICAgIEludFJlY3Qgc29saWRUaWxlUmVjdCh4LCB5LCBtaW4od2lkdGggLSB4LCBt
X3RpbGVTaXplKSwgbWluKGhlaWdodCAtIHksIG1fdGlsZVNpemUpKTsKKyAgICAgICAgICAgIHF1
YWRMaXN0LmFwcGVuZChDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0
ZSwgc29saWRUaWxlUmVjdCwgYmFja2dyb3VuZENvbG9yKCkpKTsKKyAgICAgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
N2VkYzE4YjJjMjg0YzIyOGE5MjE1N2E2YTk3YzE5MzQ1YjhmYjdmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENv
bG9yTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTb2xpZENv
bG9yTGF5ZXJJbXBsX2gKKyNkZWZpbmUgQ0NTb2xpZENvbG9yTGF5ZXJJbXBsX2gKKworI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CisK
K2NsYXNzIENDU29saWRDb2xvckxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBjcmVhdGUo
aW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1NvbGlkQ29sb3JM
YXllckltcGwoaWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0NTb2xpZENvbG9yTGF5ZXJJbXBs
KCk7CisKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IHF1YWRUcmFuc2Zvcm0oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ1NvbGlkQ29s
b3JMYXllckltcGwoaW50IGlkKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlNvbGlkQ29sb3JMYXllciI7IH0K
KworICAgIGNvbnN0IGludCBtX3RpbGVTaXplOworfTsKKworfQorCisjZW5kaWYgLy8gQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBlYmUxOGFi
MDhiZmU4MGE1MWZhNWUyN2ZjZDJkZmIzYzI0MmNiZDJlLi41ZjY0NTk2OThkOTdjOTk3YTA3OGZk
NGYyZTZlZjlkNTU1MGQ0MTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0zMjYs
NiArMzI2LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvY2tldFN0
cmVhbUVycm9yLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViU29ja2V0
U3RyZWFtSGFuZGxlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZv
cm0vV2ViU29saWRDb2xvckxheWVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZv
cm0vV2ViU3RyaW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViVGhy
ZWFkLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViVGhyZWFkU2FmZURh
dGEuaCcsCkBAIC02MzgsNiArNjM5LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tl
dC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU29ja2V0SW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU29ja2V0SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YlNvbGlkQ29sb3JMYXllci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViU29saWRDb2xv
ckxheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyTW9ja0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaElucHV0
Q29udHJvbGxlck1vY2tJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoSW5w
dXRSZXN1bHQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDI1MDNhOWMz
NmMzY2MxZDUzMGJjMWUyMjVkOGI2ODhiZjFiOGNjMmEuLjU4OGEyYzc1NzE4MjcwMmE0NzliNzcz
OGU2ZjE3MmU1ZGRkOTQwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjks
NiArNjksOCBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJU
ZXN0Q29tbW9uLmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRlc3RDb21tb24uaCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLApAQCAtNzgsNiArODAsNyBAQAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1NvbGlkQ29sb3JM
YXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NUaW1lclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNvbGlkQ29sb3JMYXllci5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU29saWRDb2xvckxheWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYWQ5MTIzZDk2MmFmZWFlYThhNTYzMTI5NDVkZTFmYzVmODk2YzlmYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNv
bGlkQ29sb3JMYXllci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvbGlk
Q29sb3JMYXllcl9oCisjZGVmaW5lIFdlYlNvbGlkQ29sb3JMYXllcl9oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXZWJMYXll
ci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlNvbGlkQ29sb3JMYXllckltcGw7
CisKK2NsYXNzIFdlYlNvbGlkQ29sb3JMYXllciA6IHB1YmxpYyBXZWJMYXllciB7CitwdWJsaWM6
CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU29saWRDb2xvckxheWVyIGNyZWF0ZSgpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29sb3Im
KTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlNvbGlkQ29sb3JMYXllcihj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViU29saWRDb2xvckxheWVySW1wbD4mKTsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTb2xpZENvbG9yTGF5
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xv
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlkQ29sb3JMYXll
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTFkN2MxNDE3NjczZTc4ODZiZjVmYTcxZDgxNjBjNDM0NjExZDE5
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNvbGlk
Q29sb3JMYXllci5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTb2xpZENvbG9yTGF5ZXIuaCIKKworI2luY2x1ZGUg
IldlYlNvbGlkQ29sb3JMYXllckltcGwuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJGbG9hdFJl
Y3QuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvbGlkQ29sb3JMYXllciBXZWJTb2xp
ZENvbG9yTGF5ZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIFdlYlNvbGlkQ29sb3JMYXllcihX
ZWJTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUoKSk7Cit9CisKK1dlYlNvbGlkQ29sb3JMYXll
cjo6V2ViU29saWRDb2xvckxheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViU29saWRDb2xvckxheWVy
SW1wbD4mIG5vZGUpCisgICAgOiBXZWJMYXllcihub2RlKQoreworfQorCit2b2lkIFdlYlNvbGlk
Q29sb3JMYXllcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvbG9yJiBjb2xvcikKK3sK
KyAgICBtX3ByaXZhdGUtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U29saWRDb2xvckxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
b2xpZENvbG9yTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2IxYTMwZTM4YzMwYTk1N2RkZTNh
ODYxYTQ4N2RhMTdjODFkMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJTb2xpZENvbG9yTGF5ZXJJbXBs
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
UGFzc1JlZlB0cjxXZWJTb2xpZENvbG9yTGF5ZXJJbXBsPiBXZWJTb2xpZENvbG9yTGF5ZXJJbXBs
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU29saWRDb2xvckxheWVy
SW1wbCgpKTsKK30KKworV2ViU29saWRDb2xvckxheWVySW1wbDo6V2ViU29saWRDb2xvckxheWVy
SW1wbCgpCisgICAgOiBTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSgpCit7CisgICAgc2V0SXNEcmF3
YWJsZSh0cnVlKTsKK30KKworV2ViU29saWRDb2xvckxheWVySW1wbDo6fldlYlNvbGlkQ29sb3JM
YXllckltcGwoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU29saWRDb2xvckxheWVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQyNjczYjQyYjY4ZjhjZDFlNzExYjkxZTEyNzBkNjc2ZDVkNzY5ZWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBs
LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU29saWRDb2xvckxheWVySW1w
bF9oCisjZGVmaW5lIFdlYlNvbGlkQ29sb3JMYXllckltcGxfaAorCisjaW5jbHVkZSAiU29saWRD
b2xvckxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU29saWRDb2xvckxheWVySW1wbCA6IHB1YmxpYyBX
ZWJDb3JlOjpTb2xpZENvbG9yTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViU29saWRDb2xvckxheWVySW1wbD4gY3JlYXRlKCk7CisKK3Byb3RlY3RlZDoK
KyAgICBXZWJTb2xpZENvbG9yTGF5ZXJJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViU29saWRDb2xv
ckxheWVySW1wbCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBX
ZWJTb2xpZENvbG9yTGF5ZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUZXN0Q29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmUzNzc3NjZmOTAxOWNi
NmMxYjVjMTRjYzQ2MGZhMmI2MjlmZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5jcHAKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NMYXllclRl
c3RDb21tb24uaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIENDTGF5ZXJU
ZXN0Q29tbW9uIHsKKworLy8gQWxpZ24gd2l0aCBleHBlY3RlZCBhbmQgYWN0dWFsIG91dHB1dAor
Y29uc3QgY2hhciogcXVhZFN0cmluZyA9ICIgICAgUXVhZDogIjsKKworYm9vbCBjb21wbGV0ZWx5
Q29udGFpbnMoY29uc3QgUmVnaW9uJiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgUmVnaW9uIHRlc3RlcihyZWN0KTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBj
b250YWluZXIucmVjdHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUo
KTsgKytpKQorICAgICAgICB0ZXN0ZXIuc3VidHJhY3QocmVjdHNbaV0pOworICAgIHJldHVybiB0
ZXN0ZXIuaXNFbXB0eSgpOworfQorCit2b2lkIHZlcmlmeVF1YWRzRXhhY3RseUNvdmVyUmVjdChj
b25zdCBDQ1F1YWRMaXN0JiBxdWFkcywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBSZWdp
b24gcmVtYWluaW5nKHJlY3QpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5z
aXplKCk7ICsraSkgeworICAgICAgICBDQ0RyYXdRdWFkKiBxdWFkID0gcXVhZHNbaV0uZ2V0KCk7
CisKKyAgICAgICAgRVhQRUNUX1RSVUUocmVjdC5jb250YWlucyhxdWFkLT5xdWFkUmVjdCgpKSkg
PDwgcXVhZFN0cmluZyA8PCBpOworICAgICAgICBFWFBFQ1RfVFJVRShjb21wbGV0ZWx5Q29udGFp
bnMocmVtYWluaW5nLCBxdWFkLT5xdWFkUmVjdCgpKSkgPDwgcXVhZFN0cmluZyA8PCBpOworICAg
ICAgICByZW1haW5pbmcuc3VidHJhY3QoUmVnaW9uKHF1YWQtPnF1YWRSZWN0KCkpKTsKKyAgICB9
CisKKyAgICBFWFBFQ1RfVFJVRShyZW1haW5pbmcuaXNFbXB0eSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRl
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRlc3RDb21t
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNWFkZDkzYTk3OTkyMTY0NmI4NmJkYTlhNGIzNjhjNzdiZmUzNmJl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NM
YXllclRlc3RDb21tb25faAorI2RlZmluZSBDQ0xheWVyVGVzdENvbW1vbl9oCisKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCisKK25hbWVzcGFjZSBDQ0xheWVyVGVzdENvbW1vbiB7CisKK2V4dGVybiBjb25zdCBj
aGFyKiBxdWFkU3RyaW5nOworCitib29sIGNvbXBsZXRlbHlDb250YWlucyhjb25zdCBXZWJDb3Jl
OjpSZWdpb24mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cit2b2lkIHZlcmlmeVF1YWRzRXhh
Y3RseUNvdmVyUmVjdChjb25zdCBXZWJDb3JlOjpDQ1F1YWRMaXN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworCit9IC8vIG5hbWVzcGFjZSBDQ0xheWVyVGVzdENvbW1vbgorI2VuZGlmIC8v
IENDTGF5ZXJUZXN0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1OWVm
MmFkY2Y1NWVkM2JmYWE1MDc5MTRhNDEzMzQ3ODg2ZWVjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3Bw
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgImNjL0NDU29saWRDb2xvckxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiQ0NMYXll
clRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5j
bHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2Nr
Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBuYW1lc3BhY2UgQ0NMYXllclRlc3RDb21tb247CisKK25hbWVzcGFjZSB7CisKK1RF
U1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5VGlsaW5nQ29tcGxldGVBbmROb092
ZXJsYXApCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJlYWQ7
CisKKyAgICBDQ1F1YWRMaXN0IHF1YWRMaXN0OworICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50
U2l6ZSg4MDAsIDYwMCk7CisgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gSW50UmVjdChJ
bnRQb2ludCgpLCBsYXllclNpemUpOworCisgICAgUmVmUHRyPENDU29saWRDb2xvckxheWVySW1w
bD4gbGF5ZXIgPSBDQ1NvbGlkQ29sb3JMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBsYXllci0+
c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKyAgICBsYXllci0+c2V0Qm91
bmRzKGxheWVyU2l6ZSk7CisKKyAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1
YWRTdGF0ZSA9IGxheWVyLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKKyAgICBsYXllci0+YXBw
ZW5kUXVhZHMocXVhZExpc3QsIHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSk7CisKKyAgICB2ZXJpZnlR
dWFkc0V4YWN0bHlDb3ZlclJlY3QocXVhZExpc3QsIHZpc2libGVMYXllclJlY3QpOworfQorCitU
RVNUKENDU29saWRDb2xvckxheWVySW1wbFRlc3QsIHZlcmlmeUNvcnJlY3RCYWNrZ3JvdW5kQ29s
b3JJblF1YWQpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3BlZEltcGxUaHJl
YWQ7CisKKyAgICBjb25zdCBDb2xvciB0ZXN0Q29sb3IgPSAweEZGQTU1QUZGOworCisgICAgQ0NR
dWFkTGlzdCBxdWFkTGlzdDsKKyAgICBJbnRTaXplIGxheWVyU2l6ZSA9IEludFNpemUoMTAwLCAx
MDApOworICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
bGF5ZXJTaXplKTsKKworICAgIFJlZlB0cjxDQ1NvbGlkQ29sb3JMYXllckltcGw+IGxheWVyID0g
Q0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CisgICAgbGF5ZXItPnNldEJvdW5kcyhsYXllclNp
emUpOworICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IodGVzdENvbG9yKTsKKworICAgIE93
blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gbGF5ZXItPmNyZWF0ZVNo
YXJlZFF1YWRTdGF0ZSgpOworICAgIGxheWVyLT5hcHBlbmRRdWFkcyhxdWFkTGlzdCwgc2hhcmVk
UXVhZFN0YXRlLmdldCgpKTsKKworICAgIEFTU0VSVF9FUShxdWFkTGlzdC5zaXplKCksIDFVKTsK
KyAgICBFWFBFQ1RfRVEocXVhZExpc3RbMF0tPnRvU29saWRDb2xvckRyYXdRdWFkKCktPmNvbG9y
KCksIHRlc3RDb2xvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCmluZGV4IDU1NDYw
MzdhZGEyY2NiZjE5ZWRlMDFlNjNjZGI3OTY5NzRkZmMyYTEuLjAyZmE3MzQ2NDJhNjFhZDlkYTM3
Y2RkMTRiMDFmZmNiZjNlN2U5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCkBAIC0yNiwxMyArMjYsMTQgQEAKIAog
I2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAotI2luY2x1ZGUgIlJlZ2lvbi5oIgor
I2luY2x1ZGUgIkNDTGF5ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5jbHVkZSA8Z21v
Y2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBDQ0xheWVyVGVzdENvbW1vbjsKIAogbmFtZXNwYWNl
IHsKIApAQCAtMTQ2LDE1ICsxNDcsNiBAQCBURVNUKENDVGlsZWRMYXllckltcGxUZXN0LCBjaGVj
a2VyYm9hcmRpbmcpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBjb21wbGV0ZWx5Q29udGFpbnMo
Y29uc3QgUmVnaW9uJiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgUmVn
aW9uIHRlc3RlcihyZWN0KTsKLSAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBjb250YWluZXIu
cmVjdHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQot
ICAgICAgICB0ZXN0ZXIuc3VidHJhY3QocmVjdHNbaV0pOwotICAgIHJldHVybiB0ZXN0ZXIuaXNF
bXB0eSgpOwotfQotCiBzdGF0aWMgdm9pZCBnZXRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkcywgSW50
U2l6ZSB0aWxlU2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplLCBDQ0xheWVyVGlsaW5nRGF0
YTo6Qm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyVGV4ZWxPcHRpb24sIGNvbnN0IEludFJlY3QmIHZp
c2libGVMYXllclJlY3QpCiB7CiAgICAgUmVmUHRyPENDVGlsZWRMYXllckltcGw+IGxheWVyID0g
Y3JlYXRlTGF5ZXIodGlsZVNpemUsIGxheWVyU2l6ZSwgYm9yZGVyVGV4ZWxPcHRpb24pOwpAQCAt
MTY1LDI0ICsxNTcsNiBAQCBzdGF0aWMgdm9pZCBnZXRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkcywg
SW50U2l6ZSB0aWxlU2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaQogICAgIGxheWVyLT5hcHBl
bmRRdWFkcyhxdWFkcywgc2hhcmVkUXVhZFN0YXRlLmdldCgpKTsKIH0KIAotLy8gQWxpZ24gd2l0
aCBleHBlY3RlZCBhbmQgYWN0dWFsIG91dHB1dAotc3RhdGljIGNvbnN0IGNoYXIqIHF1YWRTdHJp
bmcgPSAiICAgIFF1YWQ6ICI7Ci0KLXN0YXRpYyB2b2lkIHZlcmlmeVF1YWRzRXhhY3RseUNvdmVy
UmVjdChjb25zdCBDQ1F1YWRMaXN0JiBxdWFkcywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBSZWdpb24gcmVtYWluaW5nKHJlY3QpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBx
dWFkcy5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0RyYXdRdWFkKiBxdWFkID0gcXVhZHNbaV0u
Z2V0KCk7Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUocmVjdC5jb250YWlucyhxdWFkLT5xdWFkUmVj
dCgpKSkgPDwgcXVhZFN0cmluZyA8PCBpOwotICAgICAgICBFWFBFQ1RfVFJVRShjb21wbGV0ZWx5
Q29udGFpbnMocmVtYWluaW5nLCBxdWFkLT5xdWFkUmVjdCgpKSkgPDwgcXVhZFN0cmluZyA8PCBp
OwotICAgICAgICByZW1haW5pbmcuc3VidHJhY3QoUmVnaW9uKHF1YWQtPnF1YWRSZWN0KCkpKTsK
LSAgICB9Ci0KLSAgICBFWFBFQ1RfVFJVRShyZW1haW5pbmcuaXNFbXB0eSgpKTsKLX0KLQogLy8g
VGVzdCB3aXRoIGJvdGggYm9yZGVyIHRleGVscyBhbmQgd2l0aG91dC4KICNkZWZpbmUgV0lUSF9B
TkRfV0lUSE9VVF9CT1JERVJfVEVTVCh0ZXN0Rml4dHVyZU5hbWUpICAgICAgIFwKICAgICBURVNU
KENDVGlsZWRMYXllckltcGxUZXN0LCB0ZXN0Rml4dHVyZU5hbWUjI05vQm9yZGVycykgIFwK
</data>
<flag name="review"
          id="124631"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="124662"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>